diff --git a/Apps/Workout/Output/.gitignore b/Apps/Workout/Output/.gitignore new file mode 100644 index 00000000..c2586cf9 --- /dev/null +++ b/Apps/Workout/Output/.gitignore @@ -0,0 +1,9 @@ +# Ignore everything +* + +# But not .gitignore itself +!.gitignore + +# Don't ignore the Release folder and allow everything inside Release +!/Release/ +!/Release/** \ No newline at end of file diff --git a/Apps/Workout/Resources/icon_30x30.png b/Apps/Workout/Resources/icon_30x30.png new file mode 100644 index 00000000..9b139d7e Binary files /dev/null and b/Apps/Workout/Resources/icon_30x30.png differ diff --git a/Apps/Workout/Resources/icon_60x60.png b/Apps/Workout/Resources/icon_60x60.png new file mode 100644 index 00000000..e6facaec Binary files /dev/null and b/Apps/Workout/Resources/icon_60x60.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/.gitignore b/Apps/Workout/Software/Apps/TouchGFX-GUI/.gitignore new file mode 100644 index 00000000..959f43e0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/.gitignore @@ -0,0 +1,16 @@ +# build + +*.vcxproj.user +*.bak + +/build/ +/simulator/msvs/.vs/* +/simulator/msvs/screenshots/* +/config/gcc/* + +# GUI generated files +/generated/*.config +/generated/**/*.txt +/generated/**/*.cache +/generated/simulator/**/Makefile + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/README.md b/Apps/Workout/Software/Apps/TouchGFX-GUI/README.md new file mode 100644 index 00000000..fa97d5df --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/README.md @@ -0,0 +1,68 @@ +# TouchGFX generator and simulator for the UnaWatch firmware +This project is completely independent of CubeIDE and can be added to any other project generated by CubeMX. + +By default, CubeMX generates a TouchGFX folder next to the project file (.cproject) and the framework in Middlewares/ST/touchgfx. +These folders are grouped together in the current directory. + +Files from the App and target folders, which are the porting level between TouchGFX and the user app, are moved to **Software/Libs/Header/Gui** and **Software/Libs/Source/Gui** + +## Copy a GUI project from othe project + +## Adding a GUI project to a CubeIDE project: + +**NOTE: If you simply copied a GUI project from another project and added it to CubeIDE, then you only need to do step 2.** + +1. If TouchGFX was added to the CubeMX project and the corresponding folders were generated and added to the project, then they must be excluded from the build: +``` +./TouchGFX +./Middlewares/ST/touchgfx +``` + +2. Add the current folder to the project. This folder (TouchGFX-GUI) should be added as a link to a folder with files ("_Link to files and folders_"). Thus, all new generated screens will be automatically added to the project. +Make sure that the entire folder is not excluded from the build after adding. +After adding TouchGFX-GUI to the CubeIDE structure, you need to exclude the following folders from the build: +``` +TouchGFX-GUI/generated/simulator/src/ +TouchGFX-GUI/simulator/ +TouchGFX-GUI/touchgfx/framework/source/ +TouchGFX-GUI/touchgfx/os/ +``` + +3. In the project settings, delete includes which were added by CubeMX: +``` +../TouchGFX/App +../TouchGFX/target/generated +../TouchGFX/target +../Middlewares/ST/touchgfx/framework/include +../TouchGFX/generated/fonts/include +../TouchGFX/generated/gui_generated/include +../TouchGFX/generated/images/include +../TouchGFX/generated/texts/include +../TouchGFX/generated/videos/include +../TouchGFX/gui/include +``` + +4. In the project settings, add the necessary includes from new location: +``` +../../TouchGFX-GUI/touchgfx/framework/include +../../TouchGFX-GUI/generated/fonts/include +../../TouchGFX-GUI/generated/gui_generated/include +../../TouchGFX-GUI/generated/images/include +../../TouchGFX-GUI/generated/texts/include +../../TouchGFX-GUI/generated/videos/include +../../TouchGFX-GUI/gui/include +``` +5. In the project settings, in the linker section, change the path to the precompiled library: +``` +"${workspace_loc:/projectname/Middlewares/ST/touchgfx/lib/core/cortex_m33/gcc}" +``` +change to: +``` +"${ProjDirPath}/../TouchGFX-GUI/touchgfx/lib/core/cortex_m33/gcc" +``` + +6. Add folders to **.gitignore** file: +``` +/TouchGFX/ +/Middlewares/ST/touchgfx/ +``` \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/WorkoutGUI.touchgfx b/Apps/Workout/Software/Apps/TouchGFX-GUI/WorkoutGUI.touchgfx new file mode 100644 index 00000000..37eea914 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/WorkoutGUI.touchgfx @@ -0,0 +1,3031 @@ +{ + "Application": { + "Screens": [ + { + "Name": "Main", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "menuLayout", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenuLayout" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "Main" + } + } + ] + }, + { + "Name": "MenuSettings", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "menuLayout", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenuLayout" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "MenuSettings" + } + } + ] + }, + { + "Name": "MenuAlerts", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "menuLayout", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenuLayout" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "MenuAlerts" + } + } + ] + }, + { + "Name": "MenuTime", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "menuLayout", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenuLayout" + }, + { + "Type": "Image", + "Name": "tick", + "X": 186, + "Y": 60, + "Width": 22, + "Height": 17, + "LockPosition": true, + "RelativeFilename": "TickAmber_22x17.png" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "MenuTime" + } + } + ] + }, + { + "Name": "MenuTimeSaved", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "TextArea", + "Name": "savedText", + "X": 73, + "Y": 150, + "Width": 95, + "Height": 38, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_30", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "AutoSize": true, + "Wildcard1": { + "TextId": "TEXT_SAVED" + } + }, + { + "Type": "Image", + "Name": "icon", + "X": 95, + "Y": 95, + "Width": 50, + "Height": 50, + "LockPosition": true, + "RelativeFilename": "CircleTick_50x50.png" + }, + { + "Type": "TextArea", + "Name": "messageText", + "X": 60, + "Y": 53, + "Width": 120, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_MEDIUM_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "MenuTimeSaved" + } + } + ] + }, + { + "Name": "TrackStartConfirmation", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "buttons", + "Y": 47, + "Width": 240, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "Buttons" + }, + { + "Type": "TextArea", + "Name": "questionText", + "X": 35, + "Y": 94, + "Width": 170, + "Height": 52, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_20", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "LineSpacing": -5, + "Wildcard1": {} + }, + { + "Type": "Image", + "Name": "tick", + "X": 186, + "Y": 60, + "Width": 22, + "Height": 17, + "LockPosition": true, + "RelativeFilename": "TickAmber_22x17.png" + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackStartConfirmation" + } + } + ] + }, + { + "Name": "Track", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "scrollIndicator", + "Y": 47, + "Width": 36, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "ScrollIndicator" + }, + { + "Type": "CustomContainerInstance", + "Name": "buttons", + "Y": 47, + "Width": 240, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "Buttons" + }, + { + "Type": "CustomContainerInstance", + "Name": "trackFaceStatus", + "Width": 240, + "Height": 240, + "Visible": false, + "LockPosition": true, + "CustomContainerDefinitionName": "TrackFaceStatus" + }, + { + "Type": "CustomContainerInstance", + "Name": "trackFaceTotal", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "TrackFaceTotal" + }, + { + "Type": "CustomContainerInstance", + "Name": "trackFaceLap", + "Width": 240, + "Height": 240, + "Visible": false, + "LockPosition": true, + "CustomContainerDefinitionName": "TrackFaceLap" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "Track" + } + } + ] + }, + { + "Name": "TrackLap", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "buttons", + "Y": 47, + "Width": 240, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "Buttons" + }, + { + "Type": "Line", + "Name": "line2", + "X": 35, + "Y": 127, + "Width": 170, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 170.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "caloriesValue", + "X": 70, + "Y": 158, + "Width": 100, + "Height": 44, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_40", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_WXKL", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "caloriesText", + "X": 70, + "Y": 137, + "Width": 100, + "Height": 23, + "LockPosition": true, + "TextId": "ResourceId7", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "TextArea", + "Name": "timeValue", + "X": 122, + "Y": 82, + "Width": 100, + "Height": 44, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_35", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_3KKT", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "timeText", + "X": 136, + "Y": 58, + "Width": 44, + "Height": 23, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "AutoSize": true, + "Wildcard1": { + "TextId": "TEXT_TIME" + } + }, + { + "Type": "Line", + "Name": "line1", + "X": 119, + "Y": 84, + "Width": 3, + "Height": 44, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndY": 44.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "hrValue", + "X": 18, + "Y": 82, + "Width": 100, + "Height": 44, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_35", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_Z0WD", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "hrText", + "X": 40, + "Y": 58, + "Width": 70, + "Height": 23, + "LockPosition": true, + "TextId": "ResourceId6", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "AutoSize": true + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackLap" + } + } + ] + }, + { + "Name": "TrackAction", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "menuLayout", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenuLayout" + }, + { + "Type": "CustomContainerInstance", + "Name": "pauseIndicator", + "Y": 200, + "Width": 240, + "Height": 34, + "LockPosition": true, + "CustomContainerDefinitionName": "PauseIndicator" + }, + { + "Type": "CustomContainerInstance", + "Name": "infoCarousel", + "X": 40, + "Width": 160, + "Height": 87, + "LockPosition": true, + "CustomContainerDefinitionName": "InfoCarousel" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackAction" + } + } + ] + }, + { + "Name": "TrackDiscardConfirmation", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "buttons", + "Y": 47, + "Width": 240, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "Buttons" + }, + { + "Type": "TextArea", + "Name": "questionText", + "X": 35, + "Y": 88, + "Width": 170, + "Height": 80, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_20", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "LineSpacing": -5, + "Wildcard1": { + "TextId": "__SingleUse_FZIH", + "UseBuffer": true, + "BufferSize": 40 + } + }, + { + "Type": "Image", + "Name": "tick", + "X": 186, + "Y": 60, + "Width": 22, + "Height": 17, + "LockPosition": true, + "RelativeFilename": "TickAmber_22x17.png" + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackDiscardConfirmation" + } + } + ] + }, + { + "Name": "TrackDiscarded", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "TextArea", + "Name": "subtitleText", + "X": 48, + "Y": 158, + "Width": 144, + "Height": 57, + "LockPosition": true, + "TextId": "TMP_MEDIUM_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 30 + } + }, + { + "Type": "Image", + "Name": "icon", + "X": 95, + "Y": 95, + "Width": 50, + "Height": 50, + "LockPosition": true, + "RelativeFilename": "CircleCross_50x50.png" + }, + { + "Type": "TextArea", + "Name": "headingText", + "X": 41, + "Y": 47, + "Width": 159, + "Height": 42, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_30", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "TEXT_DISCARTED", + "UseBuffer": true, + "BufferSize": 15 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackDiscarded" + } + } + ] + }, + { + "Name": "TrackSaved", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "TextArea", + "Name": "subtitleText", + "X": 48, + "Y": 156, + "Width": 144, + "Height": 57, + "LockPosition": true, + "TextId": "TMP_MEDIUM_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 30 + } + }, + { + "Type": "Image", + "Name": "icon", + "X": 95, + "Y": 95, + "Width": 50, + "Height": 50, + "LockPosition": true, + "RelativeFilename": "CircleTick_50x50.png" + }, + { + "Type": "TextArea", + "Name": "headingText", + "X": 41, + "Y": 47, + "Width": 159, + "Height": 42, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_30", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "TEXT_SAVED", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction2", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackSaved" + } + } + ] + }, + { + "Name": "TrackSummary", + "CanvasBufferSize": 3600, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "buttons", + "Y": 46, + "Width": 240, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "Buttons" + }, + { + "Type": "CustomContainerInstance", + "Name": "scrollIndicator", + "Y": 47, + "Width": 36, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "ScrollIndicator" + }, + { + "Type": "CustomContainerInstance", + "Name": "summaryFaceLaps", + "Width": 240, + "Height": 240, + "Visible": false, + "LockPosition": true, + "CustomContainerDefinitionName": "SummaryFaceLaps" + }, + { + "Type": "CustomContainerInstance", + "Name": "summaryFaceZones", + "Width": 240, + "Height": 240, + "Visible": false, + "CustomContainerDefinitionName": "SummaryFaceZones" + }, + { + "Type": "CustomContainerInstance", + "Name": "summaryFaceCal", + "Width": 240, + "Height": 240, + "Visible": false, + "LockPosition": true, + "CustomContainerDefinitionName": "SummaryFaceCal" + }, + { + "Type": "CustomContainerInstance", + "Name": "summaryFaceOverview", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "SummaryFaceOverview" + } + ], + "Interactions": [ + { + "InteractionName": "Interaction1", + "Trigger": { + "Type": "TriggerScreenTransitionBegins" + }, + "Action": { + "Type": "ActionGotoScreen", + "ScreenTransitionType": "ScreenTransitionNone", + "ActionComponent": "TrackSummary" + } + } + ] + } + ], + "CustomContainerDefinitions": [ + { + "Name": "Battery", + "Width": 90, + "Height": 28, + "Components": [ + { + "Type": "Box", + "Name": "s1box", + "X": 4, + "Width": 14, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + } + }, + { + "Type": "Line", + "Name": "s1line1", + "Width": 8, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 4.0, + "StartY": 4.0, + "EndX": 4.0, + "EndY": 24.0, + "LineWidth": 8.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Line", + "Name": "s1line2", + "X": 16, + "Width": 4, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 2.0, + "StartY": 2.0, + "EndX": 2.0, + "EndY": 26.0, + "LineWidth": 4.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Box", + "Name": "s2box", + "X": 24, + "Width": 16, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + } + }, + { + "Type": "Line", + "Name": "s2line1", + "X": 22, + "Width": 4, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 2.0, + "StartY": 2.0, + "EndX": 2.0, + "EndY": 26.0, + "LineWidth": 4.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Line", + "Name": "s2line2", + "X": 38, + "Width": 4, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 2.0, + "StartY": 2.0, + "EndX": 2.0, + "EndY": 26.0, + "LineWidth": 4.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Box", + "Name": "s3box", + "X": 46, + "Width": 16, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + } + }, + { + "Type": "Line", + "Name": "s3line1", + "X": 44, + "Width": 4, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 2.0, + "StartY": 2.0, + "EndX": 2.0, + "EndY": 26.0, + "LineWidth": 4.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Line", + "Name": "s3line2", + "X": 60, + "Width": 4, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 2.0, + "StartY": 2.0, + "EndX": 2.0, + "EndY": 26.0, + "LineWidth": 4.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Box", + "Name": "s4box", + "X": 68, + "Width": 14, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + } + }, + { + "Type": "Line", + "Name": "s4line1", + "X": 66, + "Width": 4, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 2.0, + "StartY": 2.0, + "EndX": 2.0, + "EndY": 26.0, + "LineWidth": 4.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Line", + "Name": "s4line2", + "X": 78, + "Width": 8, + "Height": 28, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 4.0, + "StartY": 4.0, + "EndX": 4.0, + "EndY": 24.0, + "LineWidth": 8.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Line", + "Name": "s4line3", + "X": 82, + "Y": 6, + "Width": 8, + "Height": 16, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 4.0, + "StartY": 4.0, + "EndX": 4.0, + "EndY": 12.0, + "LineWidth": 8.0, + "LineEndingStyle": "Round" + } + ], + "Interactions": [] + }, + { + "Name": "Buttons", + "Y": 47, + "Width": 240, + "Height": 146, + "Components": [ + { + "Type": "Circle", + "Name": "bL1", + "Width": 240, + "Height": 146, + "LockPosition": true, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 113.0, + "LineWidth": 6.0, + "StartAngle": 291.0, + "EndAngle": 308.0, + "CapPrecision": "Round" + }, + { + "Type": "Circle", + "Name": "bL2", + "Width": 240, + "Height": 146, + "LockPosition": true, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 113.0, + "LineWidth": 6.0, + "StartAngle": 232.0, + "EndAngle": 249.0, + "CapPrecision": "Round" + }, + { + "Type": "Circle", + "Name": "bR2", + "Width": 240, + "Height": 146, + "LockPosition": true, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 113.0, + "LineWidth": 6.0, + "StartAngle": 111.0, + "EndAngle": 128.0, + "CapPrecision": "Round" + }, + { + "Type": "Circle", + "Name": "bR1", + "Width": 240, + "Height": 146, + "LockPosition": true, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 113.0, + "LineWidth": 6.0, + "StartAngle": 52.0, + "EndAngle": 69.0, + "CapPrecision": "Round" + } + ], + "Interactions": [] + }, + { + "Name": "HeartRateZone", + "X": 15, + "Width": 210, + "Height": 71, + "Components": [ + { + "Type": "Image", + "Name": "group", + "Width": 210, + "Height": 69, + "LockPosition": true, + "RelativeFilename": "HeartRateZoneGroup.png" + }, + { + "Type": "Image", + "Name": "hr1", + "Y": 28, + "Width": 39, + "Height": 44, + "Visible": false, + "LockPosition": true, + "RelativeFilename": "HeartRateZone1.png" + }, + { + "Type": "Image", + "Name": "hr2", + "X": 33, + "Y": 3, + "Width": 47, + "Height": 37, + "Visible": false, + "LockPosition": true, + "RelativeFilename": "HeartRateZone2.png" + }, + { + "Type": "Image", + "Name": "hr3", + "X": 80, + "Width": 50, + "Height": 28, + "Visible": false, + "LockPosition": true, + "RelativeFilename": "HeartRateZone3.png" + }, + { + "Type": "Image", + "Name": "hr4", + "X": 131, + "Y": 3, + "Width": 47, + "Height": 37, + "Visible": false, + "LockPosition": true, + "RelativeFilename": "HeartRateZone4.png" + }, + { + "Type": "Image", + "Name": "hr5", + "X": 173, + "Y": 28, + "Width": 39, + "Height": 44, + "Visible": false, + "LockPosition": true, + "RelativeFilename": "HeartRateZone5.png" + } + ], + "Interactions": [] + }, + { + "Name": "InfoCarousel", + "X": 40, + "Width": 160, + "Height": 87, + "Components": [ + { + "Type": "Line", + "Name": "line", + "Y": 65, + "Width": 160, + "Height": 3, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "EndX": 160.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "dataValue", + "Y": 29, + "Width": 160, + "Height": 45, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_30", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "titleText", + "Y": 10, + "Width": 160, + "Height": 27, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 15 + } + } + ], + "Interactions": [] + }, + { + "Name": "PauseIndicator", + "Width": 240, + "Height": 34, + "Components": [ + { + "Type": "Circle", + "Name": "background", + "X": 38, + "Width": 164, + "Height": 34, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "CenterX": 82.0, + "CenterY": -82.0, + "Radius": 116.0, + "EndAngle": 360.0, + "CapPrecision": "Butt" + }, + { + "Type": "TextArea", + "Name": "timerValue", + "X": 88, + "Y": 5, + "Width": 85, + "Height": 23, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "Image", + "Name": "pauseIcon", + "X": 76, + "Y": 10, + "Width": 14, + "Height": 14, + "LockPosition": true, + "RelativeFilename": "Pause_14x14.png" + } + ], + "Interactions": [] + }, + { + "Name": "ScrollIndicator", + "Y": 47, + "Width": 36, + "Height": 146, + "Components": [ + { + "Type": "Circle", + "Name": "rail", + "Width": 36, + "Height": 146, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 112.0, + "LineWidth": 8.5, + "StartAngle": 232.0, + "EndAngle": 308.0, + "CapPrecision": "Round" + }, + { + "Type": "Circle", + "Name": "handle", + "Width": 36, + "Height": 146, + "LockPosition": true, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 112.0, + "LineWidth": 8.5, + "StartAngle": 290.0, + "EndAngle": 308.0, + "CapPrecision": "Round" + }, + { + "Type": "Circle", + "Name": "handleOvf", + "Width": 36, + "Height": 146, + "Visible": false, + "LockPosition": true, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 120.0, + "CenterY": 73.0, + "Radius": 112.0, + "LineWidth": 8.5, + "StartAngle": 290.0, + "EndAngle": 308.0, + "CapPrecision": "Round" + } + ], + "Interactions": [] + }, + { + "Name": "Title", + "X": 50, + "Width": 140, + "Height": 41, + "Components": [ + { + "Type": "Line", + "Name": "line", + "Y": 38, + "Width": 140, + "Height": 3, + "LockPosition": true, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "EndX": 140.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "titleText", + "X": 10, + "Y": 11, + "Width": 120, + "Height": 23, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 16 + } + } + ], + "Interactions": [] + }, + { + "Name": "Toggle", + "Width": 60, + "Height": 30, + "Components": [ + { + "Type": "Line", + "Name": "rail", + "Width": 60, + "Height": 30, + "StartX": 15.0, + "StartY": 15.0, + "EndX": 45.0, + "EndY": 15.0, + "LineWidth": 30.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Circle", + "Name": "handle", + "Width": 30, + "Height": 30, + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "CenterX": 15.0, + "CenterY": 15.0, + "Radius": 15.0, + "EndAngle": 360.0, + "CapPrecision": "Butt" + } + ], + "Interactions": [] + }, + { + "Name": "MainMenu", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "ScrollWheel", + "Name": "wheel", + "Y": 87, + "Width": 240, + "Height": 132, + "LockPosition": true, + "UseSelectedStyle": true, + "SelectedItemTemplateName": "MainMenuCenterItem", + "MarginAfter": 15, + "IsCircular": true, + "ItemTemplateName": "MainMenuItem", + "NumberofItems": 10, + "Easing": "Linear", + "EasingOption": "Out", + "SwipeAcceleration": 1.0, + "DragAcceleration": 1.0, + "OverShootPercentage": 100 + }, + { + "Type": "CustomContainerInstance", + "Name": "scrollIndicator", + "Y": 47, + "Width": 36, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "ScrollIndicator" + } + ], + "Interactions": [] + }, + { + "Name": "MainMenuCenterItem", + "Width": 240, + "Height": 66, + "Components": [ + { + "Type": "TextArea", + "Name": "tipText", + "Y": 40, + "Width": 240, + "Height": 25, + "Visible": false, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "LineSpacing": -8, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "TextArea", + "Name": "labelText", + "Y": 13, + "Width": 240, + "Height": 40, + "TextId": "TMP_SEMIBOLD_30", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "LineSpacing": -8, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "toggle", + "X": 151, + "Y": 18, + "Width": 60, + "Height": 30, + "Visible": false, + "LockPosition": true, + "CustomContainerDefinitionName": "Toggle" + }, + { + "Type": "Image", + "Name": "icon", + "X": 20, + "Y": 3, + "Width": 80, + "Height": 80, + "Visible": false, + "LockPosition": true + } + ], + "Interactions": [] + }, + { + "Name": "MainMenuItem", + "Width": 240, + "Height": 66, + "Components": [ + { + "Type": "TextArea", + "Name": "tipText", + "Y": 44, + "Width": 240, + "Height": 25, + "Visible": false, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Green": 128, + "Blue": 128 + }, + "LineSpacing": -8, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "TextArea", + "Name": "labelText", + "Y": 20, + "Width": 240, + "Height": 23, + "TextId": "TMP_MEDIUM_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "LineSpacing": -6, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "Image", + "Name": "icon", + "X": 46, + "Y": 7, + "Width": 80, + "Height": 80, + "Visible": false, + "LockPosition": true + } + ], + "Interactions": [] + }, + { + "Name": "MainMenuBackground", + "Width": 220, + "Height": 66, + "Components": [ + { + "Type": "Circle", + "Name": "circle", + "Width": 220, + "Height": 66, + "LockPosition": true, + "Color": { + "Green": 64, + "Blue": 64 + }, + "CenterX": 110.0, + "CenterY": 33.0, + "Radius": 110.0, + "EndAngle": 360.0, + "CapPrecision": "Butt" + } + ], + "Interactions": [] + }, + { + "Name": "MainMenuLayout", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "background", + "X": 16, + "Y": 87, + "Width": 220, + "Height": 66, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenuBackground" + }, + { + "Type": "CustomContainerInstance", + "Name": "buttons", + "Y": 47, + "Width": 240, + "Height": 146, + "LockPosition": true, + "CustomContainerDefinitionName": "Buttons" + }, + { + "Type": "CustomContainerInstance", + "Name": "menu", + "Width": 240, + "Height": 240, + "LockPosition": true, + "CustomContainerDefinitionName": "MainMenu" + }, + { + "Type": "TextArea", + "Name": "infoText", + "X": 35, + "Y": 57, + "Width": 170, + "Height": 23, + "Visible": false, + "LockPosition": true, + "TextId": "TMP_ITALIC_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [] + }, + { + "Name": "TimerRing", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "Circle", + "Name": "track", + "Width": 240, + "Height": 240, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "CenterX": 120.0, + "CenterY": 120.0, + "Radius": 112.0, + "LineWidth": 8.5, + "StartAngle": 138.0, + "EndAngle": 402.0, + "CapPrecision": "Round" + }, + { + "Type": "Circle", + "Name": "progress", + "Width": 240, + "Height": 240, + "Color": { + "Red": 192, + "Green": 128 + }, + "CenterX": 120.0, + "CenterY": 120.0, + "Radius": 112.0, + "LineWidth": 8.5, + "StartAngle": 138.0, + "EndAngle": 160.0, + "CapPrecision": "Round" + } + ], + "Interactions": [] + }, + { + "Name": "TrackFaceLap", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "TextArea", + "Name": "timerText", + "X": 60, + "Y": 204, + "Width": 120, + "Height": 23, + "TextId": "ResourceId3", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "TextArea", + "Name": "timerValue", + "X": 35, + "Y": 162, + "Width": 170, + "Height": 42, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_35", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_KERT", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "Line", + "Name": "line2", + "X": 35, + "Y": 159, + "Width": 170, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 170.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "lapValue", + "X": 53, + "Y": 111, + "Width": 134, + "Height": 42, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_35", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_4SCV", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "lapText", + "X": 50, + "Y": 88, + "Width": 140, + "Height": 23, + "TextId": "ResourceId4", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "Line", + "Name": "line1", + "X": 35, + "Y": 79, + "Width": 170, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 170.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "hrValue", + "X": 58, + "Y": 30, + "Width": 124, + "Height": 42, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_40", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_8WSQ", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "hrText", + "X": 70, + "Y": 10, + "Width": 100, + "Height": 23, + "TextId": "ResourceId5", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + } + ], + "Interactions": [] + }, + { + "Name": "TrackFaceTotal", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "TextArea", + "Name": "timerText", + "X": 75, + "Y": 204, + "Width": 91, + "Height": 22, + "LockPosition": true, + "TextId": "ResourceId2", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "TextArea", + "Name": "timerValue", + "X": 35, + "Y": 162, + "Width": 170, + "Height": 42, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_35", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_GAMW", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "Line", + "Name": "line3", + "X": 35, + "Y": 159, + "Width": 170, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 170.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "caloriesValue", + "X": 18, + "Y": 111, + "Width": 204, + "Height": 48, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_35", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_OTQI", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "caloriesText", + "X": 20, + "Y": 88, + "Width": 200, + "Height": 23, + "LockPosition": true, + "TextId": "ResourceId1", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "Line", + "Name": "line1", + "X": 35, + "Y": 79, + "Width": 170, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 170.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "hrText", + "X": 160, + "Y": 50, + "Width": 45, + "Height": 23, + "LockPosition": true, + "TextId": "TMP_REGULAR_18_L", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "TEXT_HR_UC", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "hrValue", + "X": 75, + "Y": 29, + "Width": 90, + "Height": 44, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_40", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_HFND", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "hrZone", + "X": 15, + "Y": 4, + "Width": 210, + "Height": 71, + "LockPosition": true, + "CustomContainerDefinitionName": "HeartRateZone" + } + ], + "Interactions": [] + }, + { + "Name": "TrackFaceStatus", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "TextArea", + "Name": "percentValue", + "X": 85, + "Y": 172, + "Width": 70, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_MEDIUM_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_ICBU", + "UseBuffer": true, + "BufferSize": 5 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "battery", + "X": 75, + "Y": 138, + "Width": 90, + "Height": 28, + "LockPosition": true, + "CustomContainerDefinitionName": "Battery" + }, + { + "Type": "Line", + "Name": "line", + "X": 35, + "Y": 120, + "Width": 170, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "StartX": 170.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "dayTimeValue", + "X": 35, + "Y": 43, + "Width": 170, + "Height": 77, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_60", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_YHFT", + "UseBuffer": true, + "BufferSize": 10 + } + } + ], + "Interactions": [] + }, + { + "Name": "SummaryFaceCal", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "TextArea", + "Name": "restingValue", + "X": 146, + "Y": 167, + "Width": 74, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_5LBG", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "restingText", + "X": 32, + "Y": 171, + "Width": 124, + "Height": 23, + "LockPosition": true, + "TextId": "__SingleUse_0SLK", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "ResourceId15", + "UseBuffer": true, + "BufferSize": 14 + } + }, + { + "Type": "Line", + "Name": "line2", + "X": 25, + "Y": 166, + "Width": 190, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 190.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "activeValue", + "X": 146, + "Y": 137, + "Width": 74, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_WFDB", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "activeText", + "X": 32, + "Y": 141, + "Width": 124, + "Height": 21, + "LockPosition": true, + "TextId": "TMP_MEDIUM_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "ResourceId16", + "UseBuffer": true, + "BufferSize": 14 + } + }, + { + "Type": "Line", + "Name": "line1", + "X": 25, + "Y": 136, + "Width": 190, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 190.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "totalValue", + "X": 146, + "Y": 107, + "Width": 74, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_M1HM", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "totalText", + "X": 32, + "Y": 111, + "Width": 124, + "Height": 21, + "LockPosition": true, + "TextId": "TMP_MEDIUM_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "ResourceId17", + "UseBuffer": true, + "BufferSize": 14 + } + }, + { + "Type": "TextArea", + "Name": "timerValue", + "X": 66, + "Y": 60, + "Width": 134, + "Height": 35, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_40", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_IYCO", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "Image", + "Name": "clockIcon", + "X": 45, + "Y": 62, + "Width": 24, + "Height": 29, + "LockPosition": true, + "RelativeFilename": "clock_24x29.png" + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [] + }, + { + "Name": "SummaryFaceOverview", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "Image", + "Name": "heartIcon", + "X": 27, + "Y": 128, + "Width": 30, + "Height": 30, + "LockPosition": true, + "RelativeFilename": "Heart_30x30.png" + }, + { + "Type": "TextArea", + "Name": "maxHRValue", + "X": 135, + "Y": 129, + "Width": 77, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_XTK2", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "maxHRText", + "X": 48, + "Y": 133, + "Width": 91, + "Height": 21, + "LockPosition": true, + "TextId": "TMP_MEDIUM_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "TEXT_MAX_HR_UC", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "Line", + "Name": "line2", + "X": 25, + "Y": 166, + "Width": 190, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 190.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "avgHRValue", + "X": 132, + "Y": 175, + "Width": 78, + "Height": 32, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_25", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_ZJSJ", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "avgHRText", + "X": 48, + "Y": 179, + "Width": 91, + "Height": 23, + "LockPosition": true, + "TextId": "__SingleUse_Q39K", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "TEXT_AVG_HR_UC", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "Line", + "Name": "line1", + "X": 25, + "Y": 120, + "Width": 190, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 190.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "timerValue", + "X": 66, + "Y": 60, + "Width": 134, + "Height": 35, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_40", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_5T2E", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "Image", + "Name": "clockIcon", + "X": 45, + "Y": 62, + "Width": 24, + "Height": 29, + "LockPosition": true, + "RelativeFilename": "clock_24x29.png" + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [] + }, + { + "Name": "ZoneInfo", + "Width": 180, + "Height": 20, + "Components": [ + { + "Type": "Line", + "Name": "background", + "X": 66, + "Width": 60, + "Height": 20, + "Color": { + "Red": 64, + "Green": 64, + "Blue": 64 + }, + "StartX": 6.0, + "StartY": 10.0, + "EndX": 48.0, + "EndY": 10.0, + "LineWidth": 11.0, + "LineEndingStyle": "Round" + }, + { + "Type": "Line", + "Name": "bar", + "X": 66, + "Width": 60, + "Height": 20, + "Color": { + "Red": 192 + }, + "StartX": 6.0, + "StartY": 10.0, + "EndX": 26.0, + "EndY": 10.0, + "LineWidth": 11.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "zoneText", + "Width": 9, + "Height": 20, + "TextId": "__SingleUse_RUD6", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "AutoSize": true, + "Wildcard1": { + "TextId": "__SingleUse_AIE6", + "UseBuffer": true, + "BufferSize": 2 + } + }, + { + "Type": "TextArea", + "Name": "zoneTime", + "X": 135, + "Width": 41, + "Height": 20, + "TextId": "__SingleUse_F90O", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "AutoSize": true, + "Wildcard1": { + "TextId": "__SingleUse_X62D", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "zonePercent", + "X": 18, + "Width": 37, + "Height": 20, + "TextId": "__SingleUse_CRAK", + "TextRotation": "0", + "Color": { + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_LZ0O", + "UseBuffer": true, + "BufferSize": 10 + } + } + ], + "Interactions": [] + }, + { + "Name": "SummaryFaceZones", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "CustomContainerDefinitionName": "Title" + }, + { + "Type": "CustomContainerInstance", + "Name": "zoneInfo1", + "X": 29, + "Y": 154, + "Width": 180, + "Height": 20, + "CustomContainerDefinitionName": "ZoneInfo" + }, + { + "Type": "CustomContainerInstance", + "Name": "zoneInfo2", + "X": 29, + "Y": 133, + "Width": 180, + "Height": 20, + "CustomContainerDefinitionName": "ZoneInfo" + }, + { + "Type": "CustomContainerInstance", + "Name": "zoneInfo3", + "X": 29, + "Y": 112, + "Width": 180, + "Height": 20, + "CustomContainerDefinitionName": "ZoneInfo" + }, + { + "Type": "CustomContainerInstance", + "Name": "zoneInfo4", + "X": 29, + "Y": 91, + "Width": 180, + "Height": 20, + "CustomContainerDefinitionName": "ZoneInfo" + }, + { + "Type": "CustomContainerInstance", + "Name": "zoneInfo5", + "X": 29, + "Y": 70, + "Width": 180, + "Height": 20, + "CustomContainerDefinitionName": "ZoneInfo" + } + ], + "Interactions": [] + }, + { + "Name": "SummaryFaceLaps", + "Width": 240, + "Height": 240, + "Components": [ + { + "Type": "ScrollList", + "Name": "scrollList", + "X": 25, + "Y": 126, + "Width": 190, + "Height": 90, + "LockPosition": true, + "ItemTemplateName": "LapListItem", + "NumberofItems": 3, + "Easing": "Linear", + "EasingOption": "Out", + "SwipeAcceleration": 1.0, + "DragAcceleration": 1.0, + "OverShootPercentage": 100 + }, + { + "Type": "TextArea", + "Name": "maxHRText", + "X": 151, + "Y": 104, + "Width": 64, + "Height": 23, + "TextId": "ResourceId10", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "TextArea", + "Name": "avgHRText", + "X": 78, + "Y": 104, + "Width": 79, + "Height": 21, + "TextId": "ResourceId11", + "TextRotation": "0", + "Color": { + "Green": 192, + "Blue": 192 + } + }, + { + "Type": "TextArea", + "Name": "timeText", + "X": 40, + "Y": 104, + "Width": 39, + "Height": 20, + "TextId": "ResourceId12", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "AutoSize": true + }, + { + "Type": "Line", + "Name": "line", + "X": 25, + "Y": 100, + "Width": 190, + "Height": 3, + "LockPosition": true, + "Color": { + "Green": 128, + "Blue": 128 + }, + "EndX": 190.0, + "LineWidth": 10.0, + "LineEndingStyle": "Round" + }, + { + "Type": "TextArea", + "Name": "timerText", + "X": 73, + "Y": 75, + "Width": 118, + "Height": 23, + "LockPosition": true, + "TextId": "TMP_REGULAR_18", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 32 + } + }, + { + "Type": "Image", + "Name": "clockIcon", + "X": 54, + "Y": 75, + "Width": 16, + "Height": 19, + "LockPosition": true, + "RelativeFilename": "Clock_16x19.png" + }, + { + "Type": "TextArea", + "Name": "lapsText", + "X": 20, + "Y": 40, + "Width": 200, + "Height": 38, + "LockPosition": true, + "TextId": "TMP_SEMIBOLD_30", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "UseBuffer": true, + "BufferSize": 16 + } + }, + { + "Type": "CustomContainerInstance", + "Name": "title", + "X": 50, + "Width": 140, + "Height": 41, + "LockPosition": true, + "CustomContainerDefinitionName": "Title" + } + ], + "Interactions": [] + }, + { + "Name": "LapListItem", + "Width": 190, + "Height": 18, + "Components": [ + { + "Type": "TextArea", + "Name": "maxHRText", + "X": 127, + "Width": 64, + "Height": 18, + "TextId": "TMP_REGULAR_14_L", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_ACJE", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "avgHRText", + "X": 53, + "Width": 79, + "Height": 18, + "TextId": "TMP_REGULAR_14_L", + "TextRotation": "0", + "Color": { + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_BOEQ", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "timeText", + "X": 19, + "Width": 40, + "Height": 18, + "TextId": "TMP_REGULAR_14_R", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_NOCF", + "UseBuffer": true, + "BufferSize": 10 + } + }, + { + "Type": "TextArea", + "Name": "indexText", + "Width": 21, + "Height": 18, + "LockPosition": true, + "TextId": "TMP_REGULAR_14_R", + "TextRotation": "0", + "Color": { + "Red": 192, + "Green": 192, + "Blue": 192 + }, + "Wildcard1": { + "TextId": "__SingleUse_U3YM", + "UseBuffer": true, + "BufferSize": 5 + } + } + ], + "Interactions": [] + } + ], + "Name": "WorkoutGUI", + "Resolution": { + "Width": 240, + "Height": 240 + }, + "SelectedColorDepth": 8, + "StartupScreenName": "Main", + "SelectedStartupLanguage": "GB", + "TouchGfxPath": "../../../../../../ThirdParty/touchgfx", + "UIPath": ".", + "AvailableColorDepths": [ + 8 + ], + "AvailableLCDs": { + "8": "LCD8bpp_ABGR2222" + }, + "AvailableSections": [ + "ExtFlashSection", + "IntFlashSection" + ], + "AvailableResolutions": [ + { + "Width": 240, + "Height": 240 + } + ], + "PhysicalButtons": [], + "FrameworkFeatures": { + "LCD8bpp_ABGR2222": { + "Id": "LCD8bpp_ABGR", + "Features": [ + { + "Id": "TextureMapperImageFormats", + "Features": [ + { + "Id": "ABGR2222", + "Features": [ + { + "Id": "NearestNeighbor", + "IsEnabled": true + } + ] + } + ] + } + ] + } + }, + "GenerateAssetsCommand": "make -f simulator/gcc/Makefile assets -j8", + "PostGenerateCommand": "touchgfx update_project --project-file=simulator/msvs/Application.vcxproj", + "PostGenerateTargetCommand": "touchgfx update_project", + "PostGenerateTargetCommandOverride": "", + "CompileSimulatorCommand": "make -f simulator/gcc/Makefile -j8", + "RunSimulatorCommand": "build\\bin\\simulator.exe", + "LandscapeSkinX": 0, + "LandscapeSkinY": 0, + "PortraitSkinX": 0, + "PortraitSkinY": 0, + "DisplayOrientation": "Landscape", + "Family": "STM32U5", + "SubFamily": "STM32U575/585", + "Toolchain": "STM32CubeIDE", + "Platform": "m33", + "OptionalComponentsRoot": "touchgfx_components", + "OptionalComponents": [], + "AdditionalFeatures": [] + }, + "Version": "4.26.1" +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/application.config b/Apps/Workout/Software/Apps/TouchGFX-GUI/application.config new file mode 100644 index 00000000..82b81bdd --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/application.config @@ -0,0 +1,24 @@ +{ + "image_configuration": { + "dither_algorithm": "0", + "alpha_dither": "no", + "layout_rotation": "0", + "opaque_image_format": "ABGR2222", + "nonopaque_image_format": "ABGR2222", + "l8_compression": "no", + "section": "IntFlashSection", + "extra_section": "IntFlashSection", + "images": {}, + "rgb_compression": "no" + }, + "text_configuration": { + "remap": "yes", + "a4": "yes", + "binary_translations": "no", + "binary_fonts": "no", + "framebuffer_bpp": "8", + "font_format": "0", + "cache_size": 4096, + "copy_translations_to_ram": "no" + } +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/OLDENGL.TTF b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/OLDENGL.TTF new file mode 100644 index 00000000..bed2c5bf Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/OLDENGL.TTF differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Italic.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Italic.ttf new file mode 100644 index 00000000..12b7b3c4 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Italic.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Light.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Light.ttf new file mode 100644 index 00000000..52d424ba Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Light.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-LightItalic.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-LightItalic.ttf new file mode 100644 index 00000000..9e70be6a Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-LightItalic.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Medium.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Medium.ttf new file mode 100644 index 00000000..6bcdcc27 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Medium.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Regular.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Regular.ttf new file mode 100644 index 00000000..9f0c71b7 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-Regular.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-SemiBold.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-SemiBold.ttf new file mode 100644 index 00000000..74c726e3 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/Poppins-SemiBold.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/verdana.ttf b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/verdana.ttf new file mode 100644 index 00000000..9a349975 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/fonts/verdana.ttf differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CircleCross_50x50.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CircleCross_50x50.png new file mode 100644 index 00000000..5768131f Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CircleCross_50x50.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CircleTick_50x50.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CircleTick_50x50.png new file mode 100644 index 00000000..4b423800 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CircleTick_50x50.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Clock_16x19.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Clock_16x19.png new file mode 100644 index 00000000..50f2e38b Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Clock_16x19.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CrossAmber_17x17.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CrossAmber_17x17.png new file mode 100644 index 00000000..24686a58 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CrossAmber_17x17.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CrossWhite_17x17.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CrossWhite_17x17.png new file mode 100644 index 00000000..4f3b5ba9 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/CrossWhite_17x17.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone1.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone1.png new file mode 100644 index 00000000..c84d041f Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone1.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone2.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone2.png new file mode 100644 index 00000000..3f0d4d99 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone2.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone3.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone3.png new file mode 100644 index 00000000..7e226cd3 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone3.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone4.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone4.png new file mode 100644 index 00000000..184eab90 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone4.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone5.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone5.png new file mode 100644 index 00000000..71a59196 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZone5.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZoneGroup.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZoneGroup.png new file mode 100644 index 00000000..b9f2c667 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/HeartRateZoneGroup.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Heart_30x30.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Heart_30x30.png new file mode 100644 index 00000000..c5152ccb Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Heart_30x30.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Heart_46x39.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Heart_46x39.png new file mode 100644 index 00000000..4252629b Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Heart_46x39.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Pause_14x14.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Pause_14x14.png new file mode 100644 index 00000000..6b994131 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/Pause_14x14.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/TickAmber_22x17.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/TickAmber_22x17.png new file mode 100644 index 00000000..57bad465 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/TickAmber_22x17.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/WorkoutMan_30x30.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/WorkoutMan_30x30.png new file mode 100644 index 00000000..9b139d7e Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/WorkoutMan_30x30.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/clock_24x29.png b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/clock_24x29.png new file mode 100644 index 00000000..aab23d9e Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/images/clock_24x29.png differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/texts/texts.xml b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/texts/texts.xml new file mode 100644 index 00000000..6878d056 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/texts/texts.xml @@ -0,0 +1,467 @@ + + + + + + + + + TOTAL KCAL + + + ACTIVE KCAL + + + New Text + + + New Text + + + Time + + + Avg HR + + + Max HR + + + New Text + + + CALORIES + + + AVG. HR + + + Avg HR + + + Current Lap + + + Lap Time + + + Time + + + Calories + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + <> + + + + + WORKOUT + + + Total + + + SUMMARY + + + MAP + + + LAPS + + + HEART RATE + + + Workout + + + Completed + + + Remaining + + + remaining + + + Elapsed + + + Time + + + Timer + + + TIME + + + Saved + + + Save & End + + + Settings + + + SETTINGS + + + Start + + + Lap Alerts + + + LAP ALERTS + + + Phone Notif. + + + Phone Notif. + + + minutes + + + minute + + + min + + + sec + + + mile + + + miles + + + mi + + + km + + + m + + + Open + + + ON + + + OFF + + + AVG HR + + + CALORIES + + + MAX HR + + + AVG HR + + + Avg. Pace + + + HR + + + Lap Time + + + % + + + Discarded + + + Discard + + + Resume + + + Summary + + + Lap + + + AVG. HR + + + + + 23:58 + + + 3 + + + 100% + + + <value> + + + <> + + + <> + + + RESTING KCAL + + + 1301 + + + 10:05:49 + + + <> + + + 133 + + + 1145 + + + Do you want to discard the activity? + + + <> + + + New Text + + + 96% + + + 17:35 + + + 4:27 + + + 5:02 + + + 24. + + + 208 + + + 128 + + + 10:05:49 + + + 566 + + + 133 + + + 0:05:49 + + + 2.33 + + + 15:37 + + + 115 + + + 8:32 + + + 6:27 + + + 44.44 + + + 0:05:49 + + + + + + + + + + + + + + + + + + + + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/texts/texts.xsd b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/texts/texts.xsd new file mode 100644 index 00000000..10c7e195 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/assets/texts/texts.xsd @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/config/msvs/Application.props b/Apps/Workout/Software/Apps/TouchGFX-GUI/config/msvs/Application.props new file mode 100644 index 00000000..e2129e67 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/config/msvs/Application.props @@ -0,0 +1,26 @@ + + + + + 8 + ..\..\..\..\..\..\..\..\ThirdParty\touchgfx + ..\..\..\..\..\..\..\..\..\..\..\..\TouchGFX\4.26.1\env + ..\.. + + + + + + $(UseBPP) + + + $(TouchGFXReleasePath) + + + $(TouchGFXEnvPath) + + + $(ApplicationRoot) + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/ApplicationFontProvider.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/ApplicationFontProvider.hpp new file mode 100644 index 00000000..4e7bf851 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/ApplicationFontProvider.hpp @@ -0,0 +1,70 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_APPLICATIONFONTPROVIDER_HPP +#define TOUCHGFX_APPLICATIONFONTPROVIDER_HPP + +#include + +namespace touchgfx +{ +class FlashDataReader; +} + +struct Typography +{ + static const touchgfx::FontId POPPINS_REGULAR_18 = 0; + static const touchgfx::FontId POPPINS_REGULAR_14 = 1; + static const touchgfx::FontId POPPINS_REGULAR_16 = 2; + static const touchgfx::FontId POPPINS_MEDIUM_10 = 3; + static const touchgfx::FontId POPPINS_MEDIUM_18 = 4; + static const touchgfx::FontId POPPINS_MEDIUM_25 = 5; + static const touchgfx::FontId POPPINS_MEDIUM_50 = 6; + static const touchgfx::FontId POPPINS_SEMIBOLD_18 = 7; + static const touchgfx::FontId POPPINS_SEMIBOLD_20 = 8; + static const touchgfx::FontId POPPINS_SEMIBOLD_25 = 9; + static const touchgfx::FontId POPPINS_SEMIBOLD_30 = 10; + static const touchgfx::FontId POPPINS_SEMIBOLD_35 = 11; + static const touchgfx::FontId POPPINS_SEMIBOLD_40 = 12; + static const touchgfx::FontId POPPINS_SEMIBOLD_60 = 13; + static const touchgfx::FontId POPPINS_ITALIC_18 = 14; + static const touchgfx::FontId POPPINS_ITALIC_20 = 15; +}; + +struct TypographyFontIndex +{ + static const touchgfx::FontId POPPINS_REGULAR_18 = 0; // Poppins_Regular_18_2bpp + static const touchgfx::FontId POPPINS_REGULAR_14 = 1; // Poppins_Regular_14_2bpp + static const touchgfx::FontId POPPINS_REGULAR_16 = 2; // Poppins_Regular_16_2bpp + static const touchgfx::FontId POPPINS_MEDIUM_10 = 3; // Poppins_Medium_10_2bpp + static const touchgfx::FontId POPPINS_MEDIUM_18 = 4; // Poppins_Medium_18_2bpp + static const touchgfx::FontId POPPINS_MEDIUM_25 = 5; // Poppins_Medium_25_2bpp + static const touchgfx::FontId POPPINS_MEDIUM_50 = 6; // Poppins_Medium_50_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_18 = 7; // Poppins_SemiBold_18_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_20 = 8; // Poppins_SemiBold_20_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_25 = 9; // Poppins_SemiBold_25_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_30 = 10; // Poppins_SemiBold_30_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_35 = 11; // Poppins_SemiBold_35_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_40 = 12; // Poppins_SemiBold_40_2bpp + static const touchgfx::FontId POPPINS_SEMIBOLD_60 = 13; // Poppins_SemiBold_60_2bpp + static const touchgfx::FontId POPPINS_ITALIC_18 = 14; // Poppins_Italic_18_2bpp + static const touchgfx::FontId POPPINS_ITALIC_20 = 15; // Poppins_Italic_20_2bpp + static const uint16_t NUMBER_OF_FONTS = 16; +}; + +class ApplicationFontProvider : public touchgfx::FontProvider +{ +public: + virtual touchgfx::Font* getFont(touchgfx::FontId typography); + + static void setFlashReader(touchgfx::FlashDataReader* /*flashReader*/) + { + } + + static touchgfx::FlashDataReader* getFlashReader() + { + return 0; + } +}; + +#endif // TOUCHGFX_APPLICATIONFONTPROVIDER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CachedFont.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CachedFont.hpp new file mode 100644 index 00000000..687a32ba --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CachedFont.hpp @@ -0,0 +1,93 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_CACHEDFONT_HPP +#define TOUCHGFX_CACHEDFONT_HPP + +#include +#include + +namespace touchgfx +{ +class CachedFont : public GeneratedFont +{ +public: + CachedFont(const struct touchgfx::BinaryFontData* data, FontId id, FontCache* _cache, const GeneratedFont* _flashFont) + : GeneratedFont(0, // GlyphNode* + data->numberOfGlyphs, + data->fontHeight, + data->baseline, + data->pixAboveTop, + data->pixBelowBottom, + data->bitsPerPixel, + data->byteAlignRow, + data->maxLeft, + data->maxRight, + 0, // glyphDataPointer + 0, // Kerning table not used for cached font + data->fallbackChar, + data->ellipsisChar, + 0, // lsubTablePointer + 0), // contextualFormsPointer + fontId(id), + cache(_cache), + flashFont(_flashFont) + { + } + + CachedFont() + : GeneratedFont() + { + } + + using GeneratedFont::getGlyph; + + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const; + + virtual const uint8_t* getPixelData(const GlyphNode* glyph) const; + + virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const; + + void setFontCache(FontCache& cache); + + FontId getFontId() const + { + return fontId; + } + + virtual const uint16_t* getGSUBTable() const + { + if (gsubTable != 0) + { + return gsubTable; + } + return flashFont->getGSUBTable(); + } + + virtual void setGSUBTable(const uint16_t* table) + { + gsubTable = table; + } + + virtual const FontContextualFormsTable* getContextualFormsTable() const + { + if (arabicTable != 0) + { + return arabicTable; + } + return flashFont->getContextualFormsTable(); + } + + virtual void setContextualFormsTable(const FontContextualFormsTable* table) + { + arabicTable = table; + } + +private: + FontId fontId; + FontCache* cache; + const GeneratedFont* flashFont; +}; +} // namespace touchgfx + +#endif // TOUCHGFX_CACHEDFONT_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CompressedFontCache.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CompressedFontCache.hpp new file mode 100644 index 00000000..fb899ccc --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CompressedFontCache.hpp @@ -0,0 +1,42 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_COMPRESSEDFONTCACHE_HPP +#define TOUCHGFX_COMPRESSEDFONTCACHE_HPP + +#include +#include + +namespace touchgfx +{ +class CompressedFontCache +{ +public: + static void clearCache(); + static const uint8_t* hasCachedGlyph(const GlyphNode* glyphNode); + static void unableToCache(const GlyphNode* glyphNode, int byteSize); + static const uint8_t* cacheGlyph(const GlyphNode* glyph, const uint8_t* compressedData); + static int usedMemory() + { + return pixelsTop - (uint8_t*)bitmapFontCache + glyphsAllocated * sizeof(BitmapFontCacheKey); + } + + static int cacheClearCounter; +private: + static uint8_t* decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData); + + struct BitmapFontCacheKey + { + const void* glyphNode; + const uint8_t* pixels; + }; + + static const int cacheSizeBytes = 4096; + static const int cacheWords = (cacheSizeBytes + 3) / 4; + static uint32_t bitmapFontCache[cacheWords]; + static uint8_t* pixelsTop; + static int glyphsAllocated; +}; +} // namespace touchgfx + +#endif // TOUCHGFX_COMPRESSEDFONTCACHE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CompressedUnmappedFontCache.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CompressedUnmappedFontCache.hpp new file mode 100644 index 00000000..b0688a6d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/CompressedUnmappedFontCache.hpp @@ -0,0 +1,46 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_COMPRESSEDUNMAPPEDFONTCACHE_HPP +#define TOUCHGFX_COMPRESSEDUNMAPPEDFONTCACHE_HPP + +#include +#include +#include + +namespace touchgfx +{ +class CompressedUnmappedFontCache +{ +public: + static void clearCache(); + static const GlyphNode* hasCachedGlyphNode(const GlyphNode* glyphNode); + static const GlyphNode* hasCachedGlyphData(const GlyphNode* glyphNode, const uint8_t*& pixelData); + static void unableToCache(const GlyphNode* glyphNode, int byteSize); + static GlyphNode* cacheGlyphNode(const GlyphNode* glyph); + static const uint8_t* cacheGlyphData(const GlyphNode* glyph, const uint8_t* compressedData, touchgfx::FlashDataReader* reader); + static int usedMemory() + { + return pixelsTop - (uint8_t*)bitmapFontCache + glyphsAllocated * sizeof(BitmapFontCacheKey); + } + + static int cacheClearCounter; +private: + static uint8_t* decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData, touchgfx::FlashDataReader* reader); + + struct BitmapFontCacheKey + { + const void* glyphNodeSrc; + GlyphNode glyphNodeCopy; + const uint8_t* pixels; + }; + + static const int cacheSizeBytes = 4096; + static const int cacheWords = (cacheSizeBytes + 3) / 4; + static uint32_t bitmapFontCache[cacheWords]; + static uint8_t* pixelsTop; + static int glyphsAllocated; +}; +} // namespace touchgfx + +#endif // TOUCHGFX_COMPRESSEDUNMAPPEDFONTCACHE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/FontCache.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/FontCache.hpp new file mode 100644 index 00000000..153d33df --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/FontCache.hpp @@ -0,0 +1,112 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_FONTCACHE_HPP +#define TOUCHGFX_FONTCACHE_HPP + +#include +#include +#include + +namespace touchgfx +{ +class CachedFont; + +class FontDataReader +{ +public: + virtual ~FontDataReader() + { + } + + virtual void open() = 0; + virtual void close() = 0; + virtual void setPosition(uint32_t position) = 0; + virtual void readData(void* out, uint32_t numberOfBytes) = 0; +}; + +class FontCache +{ +public: + FontCache(); + void setReader(FontDataReader* reader); + void clear(bool keepGsubOrContextTable = false); + void setMemory(uint8_t* memory, uint32_t size); + void initializeCachedFont(TypedText t, CachedFont* font, bool loadGsubOrContextTable = false); + bool cacheString(TypedText t, const Unicode::UnicodeChar* string); + bool cacheLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string); + + const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, FontId font) const; + + uint32_t getMemoryUsage() + { + return memorySize - (gsubStart - top); + } + + void open(); + void close(); + + static inline const uint8_t* getPixelData(const GlyphNode* glyph) + { + return ((const uint8_t*)glyph) + SizeGlyphNode + sizeof(void*); + } + + static inline bool isCached(const GlyphNode* g) + { + return g->dataOffset == 0xFFFFFFFF; + } + +private: + static const uint32_t SizeGlyphNode = 16; + + bool contains(Unicode::UnicodeChar unicode, FontId font) const; + void insert(Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory); + uint8_t* copyGlyph(uint8_t* top, Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory); + + void cacheData(GlyphNode* first); + bool cacheSortedString(TypedText t); + bool createSortedString(const Unicode::UnicodeChar* string); + bool createSortedLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string, ...); + bool sortSortedString(int n); + + void setPosition(uint32_t position); + void readData(void* out, uint32_t numberOfBytes); + + uint32_t getGlyphSize(const GlyphNode* gn) + { + if (byteAlignRow) + { + // Round up line width to byte boundary and multiply by height + return (gn->width() * bpp + 7) / 8 * gn->height(); + } + // Calculate number of pixels and round up to byte bounday + return (gn->width() * gn->height() * bpp + 7) / 8; + } + + struct + { + uint8_t* first; // First GlyphNode, glyph in cache; + uint8_t* last; // Last GlyphNode, glyph in cache; + } fontTable[MAX(TypographyFontIndex::NUMBER_OF_FONTS, 1)]; + + uint32_t memorySize; + uint8_t* memory; // Start of memory + uint8_t* top; // First unused byte + uint8_t* gsubStart; // First address of GSUB tables, allocated in the end of the cache + + FontDataReader* reader; + + Unicode::UnicodeChar* sortedString; + // Must be bigger than BinaryFontData + static const uint32_t MAX_BUFFER_SIZE = 64; + char buffer[MAX_BUFFER_SIZE]; + uint32_t glyphDataOffset; + uint16_t numGlyphs; + uint16_t currentFileGlyphNumber; + uint8_t bpp; + uint8_t byteAlignRow; + GlyphNode currentFileGlyphNode; +}; +} // namespace touchgfx + +#endif // TOUCHGFX_FONTCACHE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/GeneratedFont.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/GeneratedFont.hpp new file mode 100644 index 00000000..e902d333 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/GeneratedFont.hpp @@ -0,0 +1,227 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_GENERATEDFONT_HPP +#define TOUCHGFX_GENERATEDFONT_HPP + +#include + +namespace touchgfx +{ +class GeneratedFont : public ConstFont +{ +public: + GeneratedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable); + + using ConstFont::getGlyph; + + virtual const uint8_t* getPixelData(const GlyphNode* glyph) const; + + virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const; + + virtual const uint16_t* getGSUBTable() const + { + return gsubTable; + } + + virtual const FontContextualFormsTable* getContextualFormsTable() const + { + return arabicTable; + } + +protected: + GeneratedFont() + : ConstFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), glyphData(0), kerningData(0), gsubTable(0), arabicTable(0) + { + } + + const void* glyphData; ///< The glyphs + const KerningNode* kerningData; ///< The kerning + const uint16_t* gsubTable; ///< The GSUB tables + + const FontContextualFormsTable* arabicTable; ///< Contextual forms +}; + +class FusedFont : public GeneratedFont +{ +public: + FusedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable, GlyphNode& fontFusedNode) + : GeneratedFont(glyphs, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, + maxLeft, maxRight, glyphDataInternalFlash, kerningList, fallbackChar, ellipsisChar, + gsubData, formsTable), fusedNode(fontFusedNode) + { } + + using GeneratedFont::getGlyph; + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const; +private: + GlyphNode& fusedNode; +}; + +struct VectorFontNode +{ + uint32_t dataOffset; ///< The index to the data of this glyph in words + Unicode::UnicodeChar unicode; ///< The Unicode of this glyph. + uint16_t width; ///< Width of the actual glyph data + uint16_t height; ///< Height of the actual glyph data + int16_t top; ///< Vertical offset from baseline of the glyph + int16_t left; ///< Horizontal offset from the left of the glyph + uint16_t advance; ///< Width of the glyph (including space to the left and right) + uint16_t kerningTablePos; ///< Where are the kerning information for this glyph stored in the kerning table + uint8_t kerningTableSize; ///< How many entries are there in the kerning table (following kerningTablePos) for this glyph +}; + +struct VectorKerningNode +{ + Unicode::UnicodeChar unicodePrevChar; ///< The Unicode for the first character in the kerning pair + int16_t distance; ///< The kerning distance +}; + +struct VectorFontData +{ + uint16_t numberOfGlyphs; + uint16_t baselineHeight; + uint16_t maxLeft; + uint16_t maxRight; + uint16_t maxAboveTop; + uint16_t maxBelowBottom; + const Unicode::UnicodeChar fallbackChar; + const Unicode::UnicodeChar ellipsisChar; +}; + +class GeneratedVectorFont : public Font +{ +public: + GeneratedVectorFont(uint16_t baseline, float scale, const VectorFontNode* vectorGlyphs, const VectorFontData& fontData, + const uint16_t* const* glyphData, const VectorKerningNode* kerningTable, + const uint16_t* const gsubData, const FontContextualFormsTable* formsTable); + + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const; + + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const; + + virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const; + + virtual bool isVectorBasedFont() const { return true; } + + virtual float getScaleFactor() const { return scaleFactor; } + + virtual const uint16_t* getGSUBTable() const { return gsubTable; } + + virtual const FontContextualFormsTable* getContextualFormsTable() const { return arabicTable; } +private: + + const VectorFontNode* find(Unicode::UnicodeChar unicode) const; + const GlyphNode* getGlyphNode(const VectorFontNode* node) const; + + float scaleFactor; + const VectorFontNode* vectorNodes; + const uint16_t* const* vectorTable; + const VectorKerningNode* kerningTable; + const uint16_t* gsubTable; + const FontContextualFormsTable* arabicTable; + uint16_t numberOfGlyphs; + + static GlyphNode glyphNode; +}; + +struct BinaryFontData +{ + uint32_t fontIndex; // The font index (as used by TypedTextDatabase) + uint32_t sizeOfFontData; // Size of the complete BinaryFont + uint32_t offsetToTable; // GlyphNode[] + uint32_t offsetToKerning; // KerningNode[] + uint32_t offsetToGlyphs; // uint8_t[] + uint32_t offsetToGSUB; // uint16_t[] + uint32_t offsetToArabicTable; // FontContextualFormsTable + uint16_t numberOfGlyphs; // Number of glyphs in Table and Glyphs + uint16_t fontHeight; // Font height + uint16_t baseline; // Distance to baseline + uint8_t pixAboveTop; // Max pixels above top + uint8_t pixBelowBottom; // Max pixels below bottom + uint8_t bitsPerPixel; // Bpp + uint8_t byteAlignRow; // A4/A2/A1 + uint8_t maxLeft; // The maximum a glyph extends to the left + uint8_t maxRight; // The maximum a glyph extends to the right + Unicode::UnicodeChar fallbackChar; // Fallback Character for the font + Unicode::UnicodeChar ellipsisChar; // Ellipsis Character for the font +}; + +class BinaryFont : public GeneratedFont +{ +public: + BinaryFont(const struct touchgfx::BinaryFontData* data) + : GeneratedFont((const GlyphNode*)((const uint8_t*)data + data->offsetToTable), + data->numberOfGlyphs, + data->fontHeight, + data->baseline, + data->pixAboveTop, + data->pixBelowBottom, + data->bitsPerPixel, + data->byteAlignRow, + data->maxLeft, + data->maxRight, + 0, + (const KerningNode*)((const uint8_t*)data + data->offsetToKerning), + data->fallbackChar, + data->ellipsisChar, + (data->offsetToGSUB == 0) ? 0 : (const uint16_t*)((const uint8_t*)data + data->offsetToGSUB), + 0), + glyphData((const uint8_t*)data + data->offsetToGlyphs) + { + if (data->offsetToArabicTable > 0) + { + setupContextualTable(data); + } + } + + BinaryFont() + : GeneratedFont() + { + } + + virtual const uint8_t* getPixelData(const GlyphNode* glyph) const + { + const uint8_t* data = (const uint8_t*)glyphData; + return &(data[glyph->dataOffset]); + } + +protected: + const uint8_t* glyphData; + FontContextualFormsTable contextualForms; + +private: + typedef const Unicode::UnicodeChar (*array5ptr)[5]; + typedef const Unicode::UnicodeChar (*array4ptr)[4]; + + void setupContextualTable(const struct touchgfx::BinaryFontData* data) + { + const uint16_t* const base = (const uint16_t*)(((const uint8_t*)data) + data->offsetToArabicTable); + // First elements in binary font are offsets to arrays in 16bit words + contextualForms.contextualForms4Long = (array5ptr)(base + base[0]); + contextualForms.contextualForms3Long = (array5ptr)(base + base[1]); + contextualForms.contextualForms2Long = (array5ptr)(base + base[2]); + contextualForms.contextualForms0621_063a = (array4ptr)(base + base[3]); + contextualForms.contextualForms0641_064a = (array4ptr)(base + base[4]); + contextualForms.contextualForms06XX = (array5ptr)(base + base[5]); + contextualForms.contextualForms4LongSize = base[6]; + contextualForms.contextualForms3LongSize = base[7]; + contextualForms.contextualForms2LongSize = base[8]; + contextualForms.contextualForms06XXSize = base[9]; + arabicTable = &contextualForms; + } +}; + + +class CompressedMappedFont : public GeneratedFont +{ +public: + CompressedMappedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable); + + using GeneratedFont::getGlyph; + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const; + virtual const uint8_t* getPixelData(const GlyphNode* glyph) const; +}; + +} // namespace touchgfx + +#endif // TOUCHGFX_GENERATEDFONT_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/UnmappedDataFont.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/UnmappedDataFont.hpp new file mode 100644 index 00000000..393da256 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/include/fonts/UnmappedDataFont.hpp @@ -0,0 +1,137 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_UNMAPPEDDATAFONT_HPP +#define TOUCHGFX_UNMAPPEDDATAFONT_HPP + +#include + +namespace touchgfx +{ +/** + * An UnmappedDataFont has both glyph table and glyph data placed in a + * flash which does not support random access read (indirect + * access). A unicode table is located in a flash with random read + * access (direct access). + * + * @see Font, ConstFont + */ +class UnmappedDataFont : public Font +{ +public: + /** + * Construct the UnmappedDataFont. + * + * @param glyphs The array of glyphs known to this font (indirect). + * @param unicodes The array of unicodes known to this font (direct). + * @param numGlyphs The number of glyphs in list. + * @param height The height in pixels of the highest character in this font. + * @param baseline The height of the baseline in pixels. + * @param pixBelowBottom The maximum number of pixels that can be drawn below the + * bottom in this font. + * @param bitsPerPixel The number of bits per pixel in this font. + * @param byteAlignRow Are glyphs encoded using A4 format + * @param maxLeft The maximum a character extends to the left. + * @param maxRight The maximum a character extends to the right. + * @param glyphDataList Pointer to pointers the glyph data for the font (indirect). + * @param kerningList pointer to the kerning data for the font (direct). + * @param fallbackChar The fallback character for the typography in case no glyph is + * available. + * @param ellipsisChar The ellipsis character used for truncating long texts. + * @param gsubTable Pointer to GSUB table (direct). + */ + UnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodes, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable); + + using Font::getGlyph; + + /** + * Gets the glyph data associated with the specified Unicode. The + GlyphNode is allocated in the buffer passed to the constructor. + * + * Please note that in case of Thai letters and Arabic letters + * where diacritics can be placed relative to the previous + * character(s), please use TextProvider::getNextLigature() + * instead as it will create a temporary GlyphNode that will be + * adjusted with respect to X/Y position. + * + * @param unicode The character to look up. + * @param pixelData Pointer to the pixel data for the glyph if the glyph is + * found. This is set by this method. + * @param [out] bitsPerPixel Reference where to place the number of bits per pixel. + * + * @return A pointer to the glyph node or null if the glyph was not found. + */ + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const; + + /** + * Obtains the address to the pixel data for the specified glyph. + * + * @param glyph The glyph to get the pixels data of. + * + * @return The address of the pixel data of the glyph. + */ + virtual const uint8_t* getPixelData(const GlyphNode* glyph) const; + + /** + * Gets the kerning distance between two characters. + * + * @param prevChar The unicode value of the previous character. + * @param glyph the glyph object for the current character. + * + * @return The kerning distance between prevChar and glyph char. + */ + virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const; + + /** + * Gets GSUB table. + * + * @return The GSUB table or null if font has GSUB no table + */ + virtual const uint16_t* getGSUBTable() const + { + return gsubTable; + } + + /** + * Gets the contextual forms table used in arabic fonts. + * + * @return The FontContextualFormsTable or null if the font has no table. + */ + virtual const FontContextualFormsTable* getContextualFormsTable() const + { + return arabicTable; + } + +protected: + UnmappedDataFont() + : Font(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), glyphList(0), unicodes(0), glyphDataList(0), kerningData(0), gsubTable(0) + { + } + + int lookupUnicode(uint16_t unicode) const; + + const GlyphNode* glyphList; ///< The list of glyphs + uint16_t listSize; ///< The size of the list of glyphs + const uint16_t* unicodes; ///< LookupTable with all unicodes in this font + const void* glyphDataList; ///< The glyphs (list of pointers) + const KerningNode* kerningData; ///< The kerning + const uint16_t* gsubTable; ///< The GSUB tables + + const FontContextualFormsTable* arabicTable; ///< Contextual forms + + static GlyphNode glyphNodeBuffer; ///< Buffer for GlyphNodes read from unmapped flash +}; + +class CompressedUnmappedDataFont : public UnmappedDataFont +{ +public: + CompressedUnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodes, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable); + + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const; + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const; + virtual const uint8_t* getPixelData(const GlyphNode* glyph) const; +}; + +} // namespace touchgfx + +#endif // TOUCHGFX_UNMAPPEDDATAFONT_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/ApplicationFontProvider.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/ApplicationFontProvider.cpp new file mode 100644 index 00000000..22f9e231 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/ApplicationFontProvider.cpp @@ -0,0 +1,63 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include + +touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography) +{ + switch (typography) + { + case Typography::POPPINS_REGULAR_18: + // Poppins_Regular_18_2bpp + return const_cast(TypedTextDatabase::getFonts()[0]); + case Typography::POPPINS_REGULAR_14: + // Poppins_Regular_14_2bpp + return const_cast(TypedTextDatabase::getFonts()[1]); + case Typography::POPPINS_REGULAR_16: + // Poppins_Regular_16_2bpp + return const_cast(TypedTextDatabase::getFonts()[2]); + case Typography::POPPINS_MEDIUM_10: + // Poppins_Medium_10_2bpp + return const_cast(TypedTextDatabase::getFonts()[3]); + case Typography::POPPINS_MEDIUM_18: + // Poppins_Medium_18_2bpp + return const_cast(TypedTextDatabase::getFonts()[4]); + case Typography::POPPINS_MEDIUM_25: + // Poppins_Medium_25_2bpp + return const_cast(TypedTextDatabase::getFonts()[5]); + case Typography::POPPINS_MEDIUM_50: + // Poppins_Medium_50_2bpp + return const_cast(TypedTextDatabase::getFonts()[6]); + case Typography::POPPINS_SEMIBOLD_18: + // Poppins_SemiBold_18_2bpp + return const_cast(TypedTextDatabase::getFonts()[7]); + case Typography::POPPINS_SEMIBOLD_20: + // Poppins_SemiBold_20_2bpp + return const_cast(TypedTextDatabase::getFonts()[8]); + case Typography::POPPINS_SEMIBOLD_25: + // Poppins_SemiBold_25_2bpp + return const_cast(TypedTextDatabase::getFonts()[9]); + case Typography::POPPINS_SEMIBOLD_30: + // Poppins_SemiBold_30_2bpp + return const_cast(TypedTextDatabase::getFonts()[10]); + case Typography::POPPINS_SEMIBOLD_35: + // Poppins_SemiBold_35_2bpp + return const_cast(TypedTextDatabase::getFonts()[11]); + case Typography::POPPINS_SEMIBOLD_40: + // Poppins_SemiBold_40_2bpp + return const_cast(TypedTextDatabase::getFonts()[12]); + case Typography::POPPINS_SEMIBOLD_60: + // Poppins_SemiBold_60_2bpp + return const_cast(TypedTextDatabase::getFonts()[13]); + case Typography::POPPINS_ITALIC_18: + // Poppins_Italic_18_2bpp + return const_cast(TypedTextDatabase::getFonts()[14]); + case Typography::POPPINS_ITALIC_20: + // Poppins_Italic_20_2bpp + return const_cast(TypedTextDatabase::getFonts()[15]); + default: + return 0; + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CachedFont.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CachedFont.cpp new file mode 100644 index 00000000..e1c5760a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CachedFont.cpp @@ -0,0 +1,55 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include + +namespace touchgfx +{ +const uint8_t* CachedFont::getPixelData(const GlyphNode* glyph) const +{ + // If glyph is cached, then data is present just after the GlyphNode + if (FontCache::isCached(glyph)) + { + const uint8_t* data = FontCache::getPixelData(glyph); + return data; + } + return flashFont->getPixelData(glyph); +} + +const GlyphNode* CachedFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const +{ + // Look first in internal flash font + const GlyphNode* n = flashFont->find(unicode); + + if ((n == 0) && (cache != 0)) + { + // Now look in FontCache table + n = cache->getGlyph(unicode, fontId); + } + + // Revert to normal behaviour if still not found + if (n == 0 && unicode != 0 && unicode != '\n') + { + Unicode::UnicodeChar fallbackChar = flashFont->getFallbackChar(); + n = flashFont->find(fallbackChar); + if (n == 0) + { + n = cache->getGlyph(fallbackChar, fontId); + } + } + + if (n != 0) + { + pixelData = getPixelData(n); + bitsPerPixel = getBitsPerPixel(); + return n; + } + return (const GlyphNode*)0; +} + +int8_t CachedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const +{ + // Kerning is not supported by Font Caching + return 0; +} +} // namespace touchgfx diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CompressedFontCache.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CompressedFontCache.cpp new file mode 100644 index 00000000..17d76024 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CompressedFontCache.cpp @@ -0,0 +1,183 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include + +namespace touchgfx +{ +LOCATION_PRAGMA_32("TouchGFX_CompressedFontCache") +uint32_t CompressedFontCache::bitmapFontCache[cacheWords] LOCATION_ATTRIBUTE_32("TouchGFX_CompressedFontCache"); +uint8_t* CompressedFontCache::pixelsTop = (uint8_t*)CompressedFontCache::bitmapFontCache; +int CompressedFontCache::glyphsAllocated = 0; +int CompressedFontCache::cacheClearCounter = 0; + +namespace +{ +/* Read nibbles from a compressed data array */ +struct NibReader +{ + NibReader(const uint8_t* buffer) + : buffer(buffer), byteIndex(0), low(true) + {} + + const uint8_t* buffer; + int byteIndex; + bool low; + uint8_t getNext() + { + if (low) + { + const uint8_t val = buffer[byteIndex] & 0xF; + low = false; + return val; + } + const uint8_t val = buffer[byteIndex] >> 4; + low = true; + byteIndex++; + return val; + } +}; + +struct NibWriter +{ + NibWriter(uint8_t* buffer, int size) + : buffer(buffer), bufferEnd(buffer + size), low(true) {} + + uint8_t* buffer; + uint8_t* bufferEnd; + int low; + void put(uint8_t v) + { + if (low) + { + *buffer = v; + low = false; + return; + } + *buffer |= (v << 4); + buffer++; + low = true; + } + bool eof() { return buffer >= bufferEnd; } +}; +} // anonymous namespace + +uint8_t* CompressedFontCache::decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData) +{ + const int byteSize = (glyphNode->width() + 1) / 2 * glyphNode->height(); + NibWriter writer(pixelsTop, byteSize); + NibReader reader(compressedData); + uint8_t* const pixelsEnd = pixelsTop + byteSize; + const int algorithm = glyphNode->dataOffset >> 30; + if (algorithm == 1) + { + // RLE1 + while (!writer.eof()) + { + const uint8_t value = reader.getNext(); + if (value == 0) + { + int zeroCount = reader.getNext(); + while (zeroCount) + { + writer.put(0); + zeroCount--; + } + } + writer.put(value); + } + } + else if (algorithm == 2) + { + // RLE2 + while (!writer.eof()) + { + const uint8_t value = reader.getNext(); + if (value == 0 || value == 0xF) + { + int count = reader.getNext(); + while (count) + { + writer.put(value); + count--; + } + } + writer.put(value); + } + } + else + { + // Uncompressed + while (pixelsTop < pixelsEnd) + { + *pixelsTop++ = *compressedData++; + } + } + + return pixelsEnd; +} + +void CompressedFontCache::clearCache() +{ + // Wait for DMA2D/GPU2D to finish drawing + HAL::getInstance()->lockUnlockFrameBuffer(); + glyphsAllocated = 0; + cacheClearCounter++; + pixelsTop = (uint8_t*)bitmapFontCache; +} + +void CompressedFontCache::unableToCache(const GlyphNode* glyphNode, int byteSize) +{ + while(1); +} + +const uint8_t* CompressedFontCache::hasCachedGlyph(const GlyphNode* glyphNode) +{ + const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords]; + const BitmapFontCacheKey* first = end - glyphsAllocated; + while (first < end) + { + if (first->glyphNode == glyphNode) + { + return first->pixels; + } + first++; + } + return 0; +} + +const uint8_t* CompressedFontCache::cacheGlyph(const GlyphNode* glyph, const uint8_t* compressedData) +{ + const int byteSize = (glyph->width() + 1) / 2 * glyph->height(); + if (byteSize + 8 > cacheSizeBytes) + { + unableToCache(glyph, byteSize); + return 0; + } + const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords]; + if (pixelsTop + byteSize + 8 > (const uint8_t*)&end[-glyphsAllocated]) + { + // Unable to fit glyph in data, clear cache + clearCache(); + } + + const uint8_t* glyphData = pixelsTop; + pixelsTop = decompressGlyph(pixelsTop, glyph, compressedData); + + // Flush the cache lines, must be 32byte aligned + uint8_t* rowStart = reinterpret_cast(reinterpret_cast(glyphData) & ~0x1F); + int alignmentOffset = glyphData - rowStart; + paint::flushLine((uint32_t*)rowStart, byteSize + alignmentOffset); + paint::invalidateTextureCache(); + + glyphsAllocated++; + + BitmapFontCacheKey* key = const_cast(end - glyphsAllocated); + key->glyphNode = glyph; + key->pixels = glyphData; + + return glyphData; +} +} // namespace touchgfx diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CompressedUnmappedFontCache.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CompressedUnmappedFontCache.cpp new file mode 100644 index 00000000..6a59a71b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/CompressedUnmappedFontCache.cpp @@ -0,0 +1,263 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include + +namespace touchgfx +{ +LOCATION_PRAGMA_32("TouchGFX_CompressedUnmappedFontCache") +uint32_t CompressedUnmappedFontCache::bitmapFontCache[cacheWords] LOCATION_ATTRIBUTE_32("TouchGFX_CompressedUnmappedFontCache"); +uint8_t* CompressedUnmappedFontCache::pixelsTop = (uint8_t*)CompressedUnmappedFontCache::bitmapFontCache; +int CompressedUnmappedFontCache::glyphsAllocated = 0; +int CompressedUnmappedFontCache::cacheClearCounter = 0; + +namespace +{ +/* Read nibbles from compressed data in unmapped flash. Must read through reader object */ +struct NibUnmapReader +{ + NibUnmapReader(const uint8_t* srcAddress, touchgfx::FlashDataReader* reader) + : address(srcAddress), reader(reader), byteIndex(0), low(true) + { + address += bufferSize; + reader->copyData(srcAddress, buffer, sizeof(buffer)); + } + + const uint8_t* address; //next reading address + touchgfx::FlashDataReader* reader; + static const int bufferSize = 16; + uint8_t buffer[bufferSize]; + uint8_t value; + int byteIndex; + bool low; + uint8_t getNext() + { + if (low) + { + value = buffer[byteIndex]; + const uint8_t val = value & 0xF; + low = false; + return val; + } + const uint8_t val = value >> 4; + low = true; + if (byteIndex == bufferSize - 1) + { + reader->copyData(address, buffer, bufferSize); + address += bufferSize; + byteIndex = 0; + } + else + { + byteIndex++; + } + + return val; + } +}; + +struct NibWriter +{ + NibWriter(uint8_t* buffer, int size) + : buffer(buffer), bufferEnd(buffer + size), low(true) {} + + uint8_t* buffer; + uint8_t* bufferEnd; + int low; + void put(uint8_t v) + { + if (low) + { + *buffer = v; + low = false; + return; + } + *buffer |= (v << 4); + buffer++; + low = true; + } + bool eof() { return buffer >= bufferEnd; } +}; +} // anonymous namespace + +uint8_t* CompressedUnmappedFontCache::decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData, touchgfx::FlashDataReader* flashReader) +{ + const int byteSize = (glyphNode->width() + 1) / 2 * glyphNode->height(); + NibWriter writer(pixelsTop, byteSize); + NibUnmapReader reader(compressedData, flashReader); + uint8_t* const pixelsEnd = pixelsTop + byteSize; + const int algorithm = glyphNode->dataOffset >> 30; + if (algorithm == 1) + { + // RLE1 + while (!writer.eof()) + { + const uint8_t value = reader.getNext(); + if (value == 0) + { + int zeroCount = reader.getNext(); + while (zeroCount) + { + writer.put(0); + zeroCount--; + } + } + writer.put(value); + } + } + else if (algorithm == 2) + { + // RLE2 + while (!writer.eof()) + { + const uint8_t value = reader.getNext(); + if (value == 0 || value == 0xF) + { + int count = reader.getNext(); + while (count) + { + writer.put(value); + count--; + } + } + writer.put(value); + } + } + else + { + // Uncompressed + flashReader->copyData(compressedData, pixelsTop, byteSize); + } + + return pixelsEnd; +} + +void CompressedUnmappedFontCache::clearCache() +{ + // Wait for DMA2D/GPU2D to finish drawing + HAL::getInstance()->lockUnlockFrameBuffer(); + glyphsAllocated = 0; + cacheClearCounter++; + pixelsTop = (uint8_t*)bitmapFontCache; +} + +void CompressedUnmappedFontCache::unableToCache(const GlyphNode* glyphNode, int byteSize) +{ + while(1); +} + +const GlyphNode* CompressedUnmappedFontCache::hasCachedGlyphNode(const GlyphNode* glyphNode) +{ + const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords]; + const BitmapFontCacheKey* first = end - glyphsAllocated; + while (first < end) + { + if (first->glyphNodeSrc == glyphNode) + { + return &first->glyphNodeCopy; + } + first++; + } + return 0; +} + +const GlyphNode* CompressedUnmappedFontCache::hasCachedGlyphData(const GlyphNode* glyphNode, const uint8_t*& pixelData) +{ + const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords]; + const BitmapFontCacheKey* first = end - glyphsAllocated; + while (first < end) + { + if (first->glyphNodeSrc == glyphNode) + { + //Pixel data can be zero! + pixelData = first->pixels; + return &first->glyphNodeCopy; + } + first++; + } + return 0; +} + +GlyphNode* CompressedUnmappedFontCache::cacheGlyphNode(const GlyphNode* glyph) +{ + const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords]; + if (pixelsTop + sizeof(BitmapFontCacheKey) > (const uint8_t*)&end[-glyphsAllocated]) + { + // Unable to fit GlyphNode in data, clear cache + clearCache(); + } + + glyphsAllocated++; + BitmapFontCacheKey* key = const_cast(end - glyphsAllocated); + key->glyphNodeSrc = glyph; + key->pixels = 0; + + return &key->glyphNodeCopy; +} + +const uint8_t* CompressedUnmappedFontCache::cacheGlyphData(const GlyphNode* glyph, const uint8_t* compressedData, touchgfx::FlashDataReader* reader) +{ + // Search keys for glyph + BitmapFontCacheKey* end = (BitmapFontCacheKey*)&bitmapFontCache[cacheWords]; + BitmapFontCacheKey* it = end - glyphsAllocated; + while (it < end) + { + if (it->glyphNodeSrc == glyph) + { + break; + } + it++; + } + + if (it == end) + { + // broken invariant! + return 0; + } + + const int byteSize = (it->glyphNodeCopy.width() + 1) / 2 * it->glyphNodeCopy.height(); + // Check if pixels can fit in cache + if (pixelsTop + byteSize > (const uint8_t*)&end[-glyphsAllocated]) + { + // Can it fit in a clean cache? + if (byteSize + sizeof(BitmapFontCacheKey) > cacheSizeBytes) + { + unableToCache(glyph, byteSize); + return 0; + } + + // Unable to fit pixel in data, must clear cache + + // Save address of GlyphNode in cache + const GlyphNode* cachedGn = &it->glyphNodeCopy; + + // Now clear (reset pointer) + clearCache(); + + // Insert glyph node again + glyphsAllocated++; + it = const_cast(end - 1); + it->glyphNodeSrc = glyph; + it->pixels = 0; + // Copy GlyphNode content from previous position in cache + it->glyphNodeCopy = *cachedGn; + } + + //Now decompress data + const uint8_t* glyphData = pixelsTop; + pixelsTop = decompressGlyph(pixelsTop, &it->glyphNodeCopy, compressedData, reader); + + // Flush the cache lines, must be 32byte aligned + uint8_t* rowStart = reinterpret_cast(reinterpret_cast(glyphData) & ~0x1F); + int alignmentOffset = glyphData - rowStart; + paint::flushLine((uint32_t*)rowStart, byteSize + alignmentOffset); + paint::invalidateTextureCache(); + + it->pixels = glyphData; + + return glyphData; +} + +} // namespace touchgfx diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/FontCache.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/FontCache.cpp new file mode 100644 index 00000000..0b789364 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/FontCache.cpp @@ -0,0 +1,424 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include +#include +#include +#include + +namespace touchgfx +{ +FontCache::FontCache() + : memorySize(0), memory(0), top(0), gsubStart(0), reader(0) +{ +} + +void FontCache::clear(bool keepGsubOrContextTable /* = false */) +{ + memset(fontTable, 0, sizeof(fontTable)); + + // Top is beginning of memory, no glyphs are cached yet + top = memory; + + if (!keepGsubOrContextTable) + { + // gsubStart points to end of memory (nothing loaded yet) + gsubStart = memory + memorySize; + + // Round down to 32bit address + gsubStart = (uint8_t*)((uintptr_t)gsubStart & ~(sizeof(void*) - 1)); + } +} + +void FontCache::setMemory(uint8_t* _memory, uint32_t size) +{ + memory = _memory; + memorySize = size; + + clear(); +} + +void FontCache::setReader(FontDataReader* _reader) +{ + reader = _reader; +} + +const GlyphNode* FontCache::getGlyph(Unicode::UnicodeChar unicode, FontId font) const +{ + GlyphNode* g = (GlyphNode*)fontTable[font].first; + while (g) + { + if (g->unicode == unicode) + { + return g; + } + GlyphNode** next = (GlyphNode**)((uint8_t*)g + SizeGlyphNode); + g = *next; + } + return 0; +} + +void FontCache::open() +{ + if (reader) + { + reader->open(); + } +} + +void FontCache::close() +{ + if (reader) + { + reader->close(); + } +} + +void FontCache::initializeCachedFont(TypedText t, CachedFont* font, bool loadGsubOrContextTable /*= false*/) +{ + // Get font index from typed text + FontId fontId = t.getFontId(); + // Reset to start of file + open(); + setPosition(0); + + assert(sizeof(touchgfx::BinaryFontData) < MAX_BUFFER_SIZE); + readData(buffer, sizeof(touchgfx::BinaryFontData)); + const struct touchgfx::BinaryFontData* binaryFontData = reinterpret_cast(buffer); + + const Font** flashFonts = TypedTextDatabase::getFonts(); + const GeneratedFont* flashFont = static_cast(flashFonts[fontId]); + *font = CachedFont(reinterpret_cast(buffer), fontId, this, flashFont); + + if (loadGsubOrContextTable && (binaryFontData->offsetToGSUB != 0)) + { + setPosition(binaryFontData->offsetToGSUB); + + const uint32_t sizeOfGSUB = (binaryFontData->offsetToArabicTable != 0 ? binaryFontData->offsetToArabicTable : binaryFontData->sizeOfFontData) - binaryFontData->offsetToGSUB; + + if (top + sizeOfGSUB < gsubStart) // Room for this GSUB table + { + // Round down to aligned address + uint8_t* const gsubPosition = (uint8_t*)((uintptr_t)(gsubStart - sizeOfGSUB) & ~(sizeof(void*) - 1)); + readData(gsubPosition, sizeOfGSUB); + font->setGSUBTable(reinterpret_cast(gsubPosition)); + gsubStart = gsubPosition; + } + else + { + font->setGSUBTable(0); + } + } + + if (loadGsubOrContextTable && (binaryFontData->offsetToArabicTable != 0)) + { + setPosition(binaryFontData->offsetToArabicTable); + + const uint32_t sizeTableData = binaryFontData->sizeOfFontData - binaryFontData->offsetToArabicTable; + + if (top + sizeTableData + sizeof(FontContextualFormsTable) < gsubStart) // Room for the ContextualFormsTables + { + // Allocate FontContextualFormsTable first + gsubStart -= sizeof(FontContextualFormsTable); + // Round down to 32bit address + gsubStart = (uint8_t*)((uintptr_t)gsubStart & ~(sizeof(void*) - 1)); + + FontContextualFormsTable* table = (FontContextualFormsTable*)gsubStart; + font->setContextualFormsTable(table); + gsubStart -= sizeTableData; + readData(gsubStart, sizeTableData); + + // Set pointers in table + const uint16_t* const base = (const uint16_t*)gsubStart; + // First elements in binary font are offsets to arrays in 16bit words + table->contextualForms4Long = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[0]); + table->contextualForms3Long = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[1]); + table->contextualForms2Long = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[2]); + table->contextualForms0621_063a = (FontContextualFormsTable::arrayOf4UnicodesPtr)(base + base[3]); + table->contextualForms0641_064a = (FontContextualFormsTable::arrayOf4UnicodesPtr)(base + base[4]); + table->contextualForms06XX = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[5]); + table->contextualForms4LongSize = base[6]; + table->contextualForms3LongSize = base[7]; + table->contextualForms2LongSize = base[8]; + table->contextualForms06XXSize = base[9]; + } + else + { + font->setContextualFormsTable(0); + } + } + + close(); +} + +bool FontCache::cacheString(TypedText t, const Unicode::UnicodeChar* string) +{ + open(); + if (!createSortedString(string)) + { + close(); + return false; + } + const bool result = cacheSortedString(t); + close(); + return result; +} + +bool FontCache::cacheLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string) +{ + open(); + if (!createSortedLigatures(font, t, string, 0, 0)) + { + close(); + return false; + } + const bool result = cacheSortedString(t); + close(); + return result; +} + +bool FontCache::cacheSortedString(TypedText t) +{ + setPosition(8); // Skip font index and size + uint32_t glyphNodeOffset; + uint32_t dummy; + readData(&glyphNodeOffset, sizeof(uint32_t)); // offsetToTable + readData(&dummy, sizeof(uint32_t)); // offsetToKerning + readData(&glyphDataOffset, sizeof(uint32_t)); // offsetToGlyphs + readData(&dummy, sizeof(uint32_t)); // offsetToGlyphs + readData(&dummy, sizeof(uint32_t)); // offsetToArabicTable + readData(&numGlyphs, sizeof(uint16_t)); // numberOfGlyphs + + FontId fontId = t.getFontId(); // Get font index from typed text + bpp = t.getFont()->getBitsPerPixel(); // Get BPP from standard font + byteAlignRow = t.getFont()->getByteAlignRow(); // Get ByteAlign from font + + setPosition(glyphNodeOffset); // Go to glyph nodes for font + currentFileGlyphNumber = 0; + currentFileGlyphNode.unicode = 0; // Force reading of first glyph + + const Unicode::UnicodeChar* string = sortedString; + Unicode::UnicodeChar last = 0; + GlyphNode* firstNewGlyph = 0; + bool outOfMemory = false; + while (*string) + { + Unicode::UnicodeChar ch = *string; + if (ch != last) + { + if (!contains(ch, fontId)) + { + insert(ch, fontId, outOfMemory); + if (outOfMemory) + { + break; + } + if (firstNewGlyph == 0) + { + firstNewGlyph = (GlyphNode*)fontTable[fontId].last; + } + } + } + last = ch; + string++; + } + + cacheData(firstNewGlyph); + return !outOfMemory; +} + +bool FontCache::contains(Unicode::UnicodeChar unicode, FontId font) const +{ + GlyphNode* g = (GlyphNode*)fontTable[font].first; + while (g) + { + if (g->unicode == unicode) + { + return true; + } + GlyphNode** next = (GlyphNode**)((uint8_t*)g + SizeGlyphNode); + g = *next; + } + return false; +} + +void FontCache::insert(Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory) +{ + // Insert new glyphnode and glyph after last for font. + uint8_t* oldTop = top; + top = copyGlyph(top, unicode, font, outOfMemory); + + if (top == oldTop) + { + return; + } + + if (fontTable[font].last == 0) + { + // First glyph + fontTable[font].first = oldTop; + fontTable[font].last = oldTop; + } + else + { + // Set next pointer of old last glyph + uint8_t** old_next = (uint8_t**)(fontTable[font].last + SizeGlyphNode); + *old_next = oldTop; + + // Save new glyph as last glyph + fontTable[font].last = oldTop; + } +} + +uint8_t* FontCache::copyGlyph(uint8_t* top, Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory) +{ + while (currentFileGlyphNumber < numGlyphs && currentFileGlyphNode.unicode < unicode) + { + readData(¤tFileGlyphNode, sizeof(GlyphNode)); + currentFileGlyphNumber++; + } + if (currentFileGlyphNode.unicode != unicode) + { + // GlyphNode not found + return top; + } + + // GlyphNode found + uint32_t glyphSize = getGlyphSize(¤tFileGlyphNode); + const int alignment = sizeof(void*); + glyphSize = (glyphSize + (alignment - 1)) & ~(alignment - 1); + uint32_t requiredMem = SizeGlyphNode + sizeof(void*) + glyphSize; // GlyphNode + next ptr + glyph + + // Is space available before sortedString + if (top + requiredMem > (uint8_t*)sortedString) + { + outOfMemory = true; + return top; + } + + *(GlyphNode*)top = currentFileGlyphNode; + + // Clear next pointer + uint8_t** next = (uint8_t**)(top + SizeGlyphNode); + *next = 0; + top += requiredMem; + return top; +} + +void FontCache::cacheData(GlyphNode* first) +{ + GlyphNode* gn = first; + while (gn) + { + uint8_t* p = (uint8_t*)gn; + if (gn->dataOffset != 0xFFFFFFFF) + { + p += SizeGlyphNode; + // Next pointer + p += sizeof(void*); + + // Seek and copy + setPosition(glyphDataOffset + gn->dataOffset); + readData(p, getGlyphSize(gn)); + + // Mark glyphNode as cached + gn->dataOffset = 0xFFFFFFFF; + } + + GlyphNode** next = (GlyphNode**)((uint8_t*)gn + SizeGlyphNode); + gn = *next; + } +} + +bool FontCache::createSortedString(const Unicode::UnicodeChar* string) +{ + int length = Unicode::strlen(string); + // Sorted string is allocated at end of buffer + sortedString = (Unicode::UnicodeChar*)(gsubStart - (length + 1) * 2); + if ((uint8_t*)sortedString < top) + { + // Unable to allocate string buffer in end of memory + return false; + } + int n = 0; + Unicode::UnicodeChar* uc = sortedString; + while (*string) + { + *uc++ = *string++; + n++; + } + *uc = 0; + return sortSortedString(n); +} + +bool FontCache::createSortedLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string, ...) +{ + va_list pArg; + va_start(pArg, string); + TextProvider tp; + tp.initialize(string, pArg, font->getGSUBTable(), font->getContextualFormsTable()); + va_end(pArg); + Unicode::UnicodeChar ligature; + sortedString = (Unicode::UnicodeChar*)(gsubStart); + if ((uint8_t*)(sortedString - 1) < top) + { + return false; + } + *--sortedString = 0; + int n = 0; + while ((ligature = tp.getNextLigature(t.getTextDirection())) != 0) + { + if ((uint8_t*)(sortedString - 1) < top) + { + return false; + } + *--sortedString = ligature; + n++; + } + return sortSortedString(n); +} + +bool FontCache::sortSortedString(int n) +{ + Unicode::UnicodeChar* uc = sortedString; + for (int i = 0; i < n - 1; i++) + { + bool swapped = false; + for (int j = 0; j < n - i - 1; j++) + { + if (uc[j] > uc[j + 1]) + { + Unicode::UnicodeChar temp = uc[j]; + uc[j] = uc[j + 1]; + uc[j + 1] = temp; + swapped = true; + } + } + + // If no two elements were swapped by inner loop, then break + if (!swapped) + { + break; + } + } + return true; +} + +void FontCache::setPosition(uint32_t position) +{ + if (reader) + { + reader->setPosition(position); + } +} + +void FontCache::readData(void* out, uint32_t numberOfBytes) +{ + if (reader) + { + reader->readData(out, numberOfBytes); + } +} +} // namespace touchgfx diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_18_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_18_2bpp_0.cpp new file mode 100644 index 00000000..cb058270 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_18_2bpp_0.cpp @@ -0,0 +1,336 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xB0, 0xB0, 0x74, 0x34, 0x38, 0x28, 0x2C, 0x1C, 0x1D, 0x04, 0x00, 0x0F, 0x0B, + // Unicode: [0x0022, quotedbl] + 0x95, 0xDB, 0xA7, 0xA3, + // Unicode: [0x0023, numbersign] + 0x00, 0xD0, 0x01, 0x0B, 0x00, 0x28, 0xD0, 0x00, 0x40, 0x07, 0x2C, 0x80, 0xFF, 0xFF, 0xFF, 0x50, + 0x6E, 0xF5, 0x15, 0x40, 0x03, 0x1C, 0x00, 0xA0, 0x40, 0x03, 0x00, 0x1D, 0xA0, 0x00, 0xFE, 0xFF, + 0xFF, 0x43, 0xB5, 0x95, 0x57, 0x00, 0x1D, 0xB0, 0x00, 0x80, 0x03, 0x1D, 0x00, 0x70, 0x80, 0x02, + 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x60, 0x00, 0xE4, 0x2F, 0xD0, 0xBA, 0x0B, 0x4B, 0xE2, 0x74, 0x24, 0x44, 0x8B, 0x01, 0xF0, + 0x1E, 0x00, 0xF8, 0x0B, 0x00, 0xED, 0x03, 0x90, 0x78, 0x14, 0x86, 0xD3, 0x62, 0x2C, 0xBC, 0xFB, + 0x01, 0xFE, 0x02, 0x40, 0x02, 0x00, 0x10, 0x00, + // Unicode: [0x0025, percent] + 0xE0, 0x07, 0x1D, 0x87, 0xC2, 0xD2, 0xD0, 0x38, 0x34, 0x5C, 0x07, 0xF8, 0xB2, 0x00, 0x00, 0x0A, + 0x00, 0xE0, 0x00, 0x00, 0x1D, 0x00, 0xC0, 0xE2, 0x06, 0x38, 0x8A, 0x43, 0xD7, 0xD0, 0x74, 0x34, + 0x28, 0x0B, 0xF8, 0x02, + // Unicode: [0x0026, ampersand] + 0x00, 0xF8, 0x02, 0x00, 0x7C, 0x2E, 0x00, 0x74, 0xA0, 0x00, 0xE0, 0x00, 0x00, 0x40, 0x0B, 0x00, + 0x00, 0x7D, 0x00, 0x00, 0xEE, 0x03, 0x14, 0x1E, 0x2D, 0x38, 0x1D, 0xE0, 0x7A, 0x38, 0x00, 0xBE, + 0xE0, 0x01, 0xF4, 0x41, 0x5F, 0xB9, 0x0F, 0xE4, 0x6F, 0xB4, 0x00, + // Unicode: [0x0027, quotesingle] + 0xB5, 0x37, + // Unicode: [0x0028, parenleft] + 0x00, 0x78, 0x00, 0x1E, 0x40, 0x07, 0xD0, 0x02, 0xE0, 0x00, 0x74, 0x00, 0x38, 0x00, 0x2C, 0x00, + 0x1D, 0x00, 0x0E, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0E, 0x00, + 0x0E, 0x00, 0x2D, 0x00, 0x38, 0x00, 0xB4, 0x00, + // Unicode: [0x0029, parenright] + 0x00, 0x0B, 0x00, 0x1D, 0x00, 0x3C, 0x00, 0x74, 0x00, 0x74, 0x00, 0xB0, 0x00, 0xB0, 0x00, 0xA0, + 0x00, 0xB0, 0x00, 0xB0, 0x00, 0x70, 0x00, 0x74, 0x00, 0x38, 0x00, 0x2C, 0x00, 0x0E, 0x00, 0x0B, + 0x80, 0x03, 0xD0, 0x01, 0xB4, 0x00, 0x2D, 0x00, + // Unicode: [0x002A, asterisk] + 0xC0, 0x41, 0x31, 0xD5, 0xAE, 0xD1, 0x0B, 0xAB, 0x4E, 0x18, 0x01, 0x06, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x10, 0x00, 0x80, 0x03, 0x00, 0x2C, 0x00, 0xC0, 0x02, 0x00, 0x1D, 0xD0, 0xFF, 0xFF, 0x54, + 0x5E, 0x05, 0xE0, 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x00, 0x01, 0x00, + // Unicode: [0x002C, comma] + 0xD0, 0xC1, 0x42, 0x03, 0x0A, 0x0D, 0x00, + // Unicode: [0x002D, hyphen] + 0xFE, 0xBF, 0x55, 0x15, + // Unicode: [0x002E, period] + 0x84, 0xA7, 0x00, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0x1D, 0x00, 0x80, 0x03, 0x00, 0xB0, 0x00, 0x00, 0x0E, 0x00, 0xC0, 0x02, 0x00, 0x74, + 0x00, 0x00, 0x0A, 0x00, 0xD0, 0x01, 0x00, 0x38, 0x00, 0x00, 0x0B, 0x00, 0xD0, 0x00, 0x00, 0x2C, + 0x00, 0x40, 0x07, 0x00, 0xE0, 0x00, 0x00, 0x1D, 0x00, 0x80, 0x03, 0x00, 0xB0, 0x00, 0x00, 0x1D, + 0x00, 0xC0, 0x02, 0x00, 0x74, 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x40, 0xBE, 0x01, 0xAE, 0x3E, 0xB4, 0x40, 0x87, 0x02, 0xB0, 0x1C, 0x00, 0xDB, 0x01, 0xB0, 0x0E, + 0x40, 0xA7, 0x00, 0x74, 0x0B, 0x80, 0xB3, 0x00, 0x2C, 0x0E, 0xE0, 0xD0, 0xEB, 0x07, 0xF4, 0x1B, + 0x00, + // Unicode: [0x0031, one] + 0xFC, 0x91, 0x03, 0x0E, 0x2C, 0xB0, 0xD0, 0x41, 0x07, 0x0E, 0x38, 0xB0, 0xC0, 0x42, 0x07, 0x1D, + 0x00, + // Unicode: [0x0032, two] + 0x00, 0xFE, 0x02, 0xBC, 0xB9, 0xE0, 0x00, 0x0E, 0x07, 0xE0, 0x10, 0x00, 0x0B, 0x00, 0x74, 0x00, + 0xD0, 0x02, 0x40, 0x0B, 0x00, 0x2D, 0x00, 0xB8, 0x00, 0xE0, 0x01, 0xD0, 0x57, 0x15, 0xFF, 0xFF, + 0x02, + // Unicode: [0x0033, three] + 0x00, 0xFE, 0x02, 0xBD, 0xF9, 0xE0, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0x90, 0x07, 0xE0, 0x0B, 0x00, + 0xE5, 0x02, 0x00, 0x38, 0x00, 0x40, 0xD7, 0x01, 0x34, 0x2D, 0xC0, 0x82, 0x9B, 0x0F, 0xE0, 0x2F, + 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x1F, 0x00, 0xF0, 0x03, 0x00, 0xEE, 0x00, 0xE0, 0x29, 0x00, 0x1E, 0x0B, 0xD0, 0xC1, + 0x01, 0x2D, 0x74, 0xD0, 0x02, 0x0D, 0x3C, 0x80, 0x83, 0xFF, 0xFF, 0x5B, 0x55, 0x6D, 0x00, 0x40, + 0x07, 0x00, 0xD0, 0x01, + // Unicode: [0x0035, five] + 0xF0, 0xFF, 0x4B, 0x5B, 0x55, 0x34, 0x00, 0x80, 0x03, 0x00, 0xAC, 0xBF, 0xC0, 0x5B, 0x2E, 0x2D, + 0x80, 0x03, 0x00, 0x74, 0x00, 0x40, 0x63, 0x00, 0x28, 0x0F, 0xD0, 0xD1, 0x97, 0x0B, 0xE4, 0x1B, + 0x00, + // Unicode: [0x0036, six] + 0x00, 0xFE, 0x01, 0x6D, 0x79, 0x70, 0x00, 0x8A, 0x02, 0x00, 0x5C, 0xBF, 0xD0, 0x5A, 0x2E, 0x2D, + 0x80, 0xE3, 0x00, 0x74, 0x0A, 0x40, 0xA3, 0x00, 0x38, 0x0D, 0xD0, 0xC1, 0x97, 0x0B, 0xE4, 0x1B, + 0x00, + // Unicode: [0x0037, seven] + 0xFC, 0xFF, 0x47, 0x55, 0x39, 0x00, 0xC0, 0x02, 0x00, 0x0E, 0x00, 0x74, 0x00, 0xC0, 0x02, 0x00, + 0x0E, 0x00, 0xB4, 0x00, 0x80, 0x03, 0x00, 0x1D, 0x00, 0xB0, 0x00, 0x80, 0x03, 0x00, 0x2D, 0x00, + 0x00, + // Unicode: [0x0038, eight] + 0x00, 0xF9, 0x07, 0xF0, 0x96, 0x0B, 0x1E, 0xC0, 0x82, 0x02, 0xB0, 0xE0, 0x41, 0x0A, 0xE0, 0xBF, + 0x00, 0x5E, 0x79, 0xE0, 0x00, 0x38, 0x2C, 0x00, 0x4E, 0x07, 0x80, 0xD3, 0x02, 0x74, 0xE0, 0x96, + 0x0B, 0xD0, 0x6F, 0x00, + // Unicode: [0x0039, nine] + 0x40, 0xBE, 0x01, 0x6E, 0x3D, 0x74, 0x00, 0x8B, 0x02, 0xA0, 0x2C, 0x00, 0xCB, 0x02, 0xB4, 0x78, + 0xE4, 0x07, 0xFE, 0x36, 0x00, 0x41, 0x53, 0x00, 0x2C, 0x0E, 0xD0, 0xD0, 0x97, 0x07, 0xE4, 0x1B, + 0x00, + // Unicode: [0x003A, colon] + 0xCE, 0x03, 0x00, 0x00, 0x00, 0x10, 0x9E, 0x02, + // Unicode: [0x003B, semicolon] + 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x74, 0xA0, 0xD0, 0x81, 0x02, 0x01, + 0x00, + // Unicode: [0x003C, less] + 0x00, 0x14, 0xD0, 0x03, 0x2D, 0xE0, 0x02, 0x1E, 0x80, 0x07, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x03, + // Unicode: [0x003D, equal] + 0xF8, 0xFF, 0x2F, 0x55, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0F, 0x55, 0x55, + 0x01, + // Unicode: [0x003E, greater] + 0x50, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x40, 0x0B, 0x78, 0x80, 0x07, 0x2D, 0x00, + // Unicode: [0x003F, question] + 0x90, 0x2F, 0xE0, 0xE6, 0xD3, 0x01, 0x5D, 0x01, 0x74, 0x00, 0xE0, 0x00, 0xE4, 0x41, 0xBF, 0x01, + 0x1D, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0B, 0x00, 0x1D, 0x00, 0x00, + // Unicode: [0x0040, at] + 0x00, 0xA4, 0xBF, 0x01, 0x00, 0x6E, 0x95, 0x0B, 0x80, 0x02, 0x00, 0x2C, 0xA0, 0x00, 0x00, 0x70, + 0x38, 0xE0, 0xDB, 0xA0, 0x1C, 0x78, 0xF9, 0xA0, 0x0D, 0x0E, 0xB0, 0x90, 0x0A, 0x0B, 0xA0, 0xA0, + 0x0A, 0x07, 0x70, 0xA0, 0x0A, 0x0B, 0x74, 0x30, 0x0A, 0x1E, 0xB9, 0x29, 0x0D, 0xF8, 0xD2, 0x0B, + 0x28, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x04, 0x00, 0x80, 0xFF, 0x0B, 0x00, + // Unicode: [0x0041, A] + 0x00, 0xF0, 0x01, 0x00, 0xBD, 0x00, 0xC0, 0x2E, 0x00, 0x74, 0x0E, 0x00, 0x8B, 0x03, 0xD0, 0xD1, + 0x01, 0x2C, 0x74, 0x40, 0x07, 0x2C, 0xB0, 0x00, 0x0B, 0xFE, 0xFF, 0xC3, 0x56, 0xE5, 0x79, 0x00, + 0x74, 0x0B, 0x00, 0x2D, + // Unicode: [0x0042, B] + 0xD0, 0xFF, 0x06, 0x78, 0xD5, 0x07, 0x0E, 0xD0, 0xC2, 0x02, 0xB0, 0xB0, 0x00, 0x1D, 0x1D, 0xD0, + 0x42, 0xFF, 0x1F, 0xE0, 0x55, 0x1E, 0x38, 0x00, 0x0B, 0x0B, 0x80, 0xC2, 0x02, 0xB4, 0xB4, 0x95, + 0x0B, 0xFD, 0x6F, 0x00, + // Unicode: [0x0043, C] + 0x00, 0xF9, 0x0B, 0x00, 0xAE, 0xFA, 0x01, 0x1F, 0x40, 0x0F, 0x0E, 0x00, 0x78, 0x1D, 0x00, 0x00, + 0x38, 0x00, 0x00, 0xB0, 0x00, 0x00, 0xC0, 0x02, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x3C, 0x00, 0xA0, + 0xD1, 0x02, 0xE0, 0x02, 0xBE, 0xF9, 0x02, 0x90, 0xAF, 0x00, 0x00, + // Unicode: [0x0044, D] + 0xD0, 0xFF, 0x06, 0x80, 0x57, 0xB9, 0x00, 0x0E, 0x40, 0x0B, 0x2C, 0x00, 0x38, 0xB0, 0x00, 0xE0, + 0xD1, 0x01, 0x40, 0x47, 0x07, 0x00, 0x0E, 0x0E, 0x00, 0x38, 0x38, 0x00, 0xB0, 0xB0, 0x00, 0xE0, + 0xC0, 0x02, 0xE0, 0x41, 0x5B, 0xF9, 0x01, 0xFD, 0x6F, 0x00, 0x00, + // Unicode: [0x0045, E] + 0xD0, 0xFF, 0x07, 0x5E, 0x15, 0xE0, 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x40, 0x07, 0x00, 0xF4, + 0xBF, 0x80, 0x57, 0x01, 0x38, 0x00, 0xC0, 0x02, 0x00, 0x2C, 0x00, 0xD0, 0x56, 0x01, 0xFD, 0x7F, + 0x00, + // Unicode: [0x0046, F] + 0xD0, 0xFF, 0x0B, 0x5E, 0x15, 0xE0, 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x40, 0x07, 0x00, 0xF4, + 0xBF, 0x80, 0x57, 0x01, 0x38, 0x00, 0xC0, 0x02, 0x00, 0x2C, 0x00, 0xD0, 0x01, 0x00, 0x1D, 0x00, + 0x00, + // Unicode: [0x0047, G] + 0x00, 0xF9, 0x0B, 0x00, 0xAE, 0xFA, 0x01, 0x1F, 0x40, 0x0F, 0x0E, 0x00, 0x68, 0x1D, 0x00, 0x00, + 0x38, 0x00, 0x00, 0xB0, 0x40, 0xFF, 0xDF, 0x02, 0x54, 0x79, 0x0B, 0x00, 0xB0, 0x3C, 0x00, 0xE0, + 0xD1, 0x02, 0xE0, 0x01, 0xBE, 0xF9, 0x01, 0x90, 0xAF, 0x00, 0x00, + // Unicode: [0x0048, H] + 0xD0, 0x01, 0xD0, 0x81, 0x03, 0x80, 0x03, 0x0E, 0x00, 0x0E, 0x2C, 0x00, 0x2C, 0xB0, 0x00, 0xB0, + 0xD0, 0x01, 0xD0, 0x41, 0xFF, 0xFF, 0x07, 0x5E, 0x55, 0x0E, 0x38, 0x00, 0x38, 0xB0, 0x00, 0xB0, + 0xC0, 0x02, 0xC0, 0x42, 0x07, 0x40, 0x07, 0x1D, 0x00, 0x1D, 0x00, + // Unicode: [0x0049, I] + 0xD0, 0x81, 0x03, 0x0E, 0x2C, 0xB0, 0xD0, 0x41, 0x07, 0x0E, 0x38, 0xB0, 0xC0, 0x42, 0x07, 0x1D, + 0x00, + // Unicode: [0x004A, J] + 0x00, 0x80, 0x03, 0x00, 0x0B, 0x00, 0x2C, 0x00, 0x74, 0x00, 0xD0, 0x01, 0x80, 0x03, 0x00, 0x0E, + 0x00, 0x2C, 0x00, 0xB0, 0x24, 0xD0, 0xE1, 0x80, 0x43, 0x9B, 0x07, 0xF4, 0x06, 0x00, + // Unicode: [0x004B, K] + 0xD0, 0x01, 0x3C, 0x38, 0xC0, 0x03, 0x0E, 0x3C, 0xC0, 0xD2, 0x02, 0xB0, 0x2D, 0x00, 0xED, 0x02, + 0x40, 0x3F, 0x00, 0xE0, 0x1E, 0x00, 0x38, 0x1F, 0x00, 0x4B, 0x0F, 0xC0, 0x42, 0x0B, 0x74, 0x80, + 0x07, 0x1D, 0xC0, 0x03, + // Unicode: [0x004C, L] + 0xD0, 0x01, 0x38, 0x00, 0x0E, 0xC0, 0x02, 0xB0, 0x00, 0x1D, 0x40, 0x07, 0xE0, 0x00, 0x38, 0x00, + 0x0B, 0xC0, 0x02, 0xB4, 0x55, 0xFD, 0x2F, + // Unicode: [0x004D, M] + 0xD0, 0x02, 0x00, 0x78, 0xE0, 0x03, 0x00, 0x3D, 0xE0, 0x03, 0x00, 0x3F, 0xF0, 0x07, 0x40, 0x2F, + 0xB0, 0x0B, 0xC0, 0x2E, 0x74, 0x0E, 0xE0, 0x1D, 0x74, 0x0D, 0x74, 0x1D, 0x38, 0x1D, 0x28, 0x0E, + 0x38, 0x2C, 0x0D, 0x0E, 0x2C, 0x38, 0x0B, 0x0B, 0x2C, 0xB4, 0x03, 0x0B, 0x1D, 0xF0, 0x41, 0x07, + 0x1D, 0xB0, 0x40, 0x07, + // Unicode: [0x004E, N] + 0xD0, 0x02, 0xC0, 0x81, 0x0F, 0x40, 0x07, 0xBE, 0x00, 0x0E, 0xAC, 0x03, 0x38, 0xB0, 0x1D, 0xB0, + 0xD0, 0xE1, 0xC0, 0x42, 0x47, 0x47, 0x07, 0x0E, 0x3C, 0x1D, 0x38, 0xD0, 0x39, 0xB0, 0x00, 0xEB, + 0xC0, 0x02, 0xF4, 0x42, 0x07, 0xC0, 0x0B, 0x1D, 0x00, 0x1E, 0x00, + // Unicode: [0x004F, O] + 0x00, 0xF9, 0x0B, 0x40, 0xAF, 0xFA, 0x41, 0x1F, 0x40, 0x0F, 0x0F, 0x00, 0x74, 0x1D, 0x00, 0xD0, + 0x3A, 0x00, 0x00, 0xBB, 0x00, 0x00, 0xDD, 0x02, 0x00, 0x74, 0x0B, 0x00, 0xE0, 0x38, 0x00, 0xD0, + 0xD1, 0x02, 0xE0, 0x02, 0xBE, 0xF9, 0x02, 0x90, 0xBF, 0x01, 0x00, + // Unicode: [0x0050, P] + 0xD0, 0xFF, 0x02, 0x78, 0xD5, 0x03, 0x0E, 0xD0, 0xC1, 0x02, 0x74, 0xB0, 0x00, 0x1D, 0x1D, 0x80, + 0x43, 0x07, 0x79, 0xE0, 0xFF, 0x07, 0x78, 0x05, 0x00, 0x0B, 0x00, 0xC0, 0x02, 0x00, 0x74, 0x00, + 0x00, 0x1D, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xF9, 0x0B, 0x40, 0xAF, 0xFA, 0x41, 0x1F, 0x40, 0x0F, 0x0F, 0x00, 0x74, 0x1D, 0x00, 0xD0, + 0x3A, 0x00, 0x00, 0xBB, 0x00, 0x00, 0xED, 0x02, 0x00, 0x74, 0x0B, 0x00, 0xE0, 0x38, 0x00, 0xD0, + 0xD1, 0x02, 0xE0, 0x02, 0xBE, 0xF9, 0x02, 0x90, 0xFF, 0x03, 0x00, 0x00, 0x2D, 0x00, 0x00, 0xD0, + 0x02, + // Unicode: [0x0052, R] + 0xD0, 0xFF, 0x02, 0x78, 0xD5, 0x03, 0x0E, 0xD0, 0xC1, 0x02, 0x74, 0xB0, 0x00, 0x1D, 0x1D, 0x80, + 0x43, 0x07, 0x79, 0xE0, 0xFF, 0x07, 0x78, 0x3D, 0x00, 0x0B, 0x1D, 0xC0, 0x02, 0x0F, 0x74, 0x80, + 0x07, 0x1D, 0xC0, 0x02, + // Unicode: [0x0053, S] + 0x90, 0x6F, 0xE0, 0xD6, 0xC7, 0x02, 0x6C, 0x07, 0x50, 0x2D, 0x00, 0xE0, 0x07, 0x00, 0xFD, 0x01, + 0x40, 0x2F, 0x00, 0xF0, 0x18, 0x80, 0xB3, 0x00, 0x8E, 0x5B, 0x1E, 0xE4, 0x1B, 0x00, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0x47, 0xB5, 0x15, 0x00, 0x0B, 0x00, 0x74, 0x00, 0x40, 0x07, 0x00, 0x38, 0x00, 0x80, + 0x03, 0x00, 0x2C, 0x00, 0xC0, 0x02, 0x00, 0x1D, 0x00, 0xD0, 0x01, 0x00, 0x0E, 0x00, 0xE0, 0x00, + 0x00, + // Unicode: [0x0055, U] + 0x74, 0x00, 0x38, 0x0E, 0x00, 0x8E, 0x03, 0xC0, 0xB2, 0x00, 0xB0, 0x2C, 0x00, 0x5D, 0x07, 0x40, + 0xD3, 0x01, 0xE0, 0x38, 0x00, 0x28, 0x0E, 0x00, 0x8B, 0x03, 0xD0, 0xE1, 0x01, 0x2C, 0xF4, 0xE6, + 0x03, 0xE4, 0x1B, 0x00, + // Unicode: [0x0056, V] + 0x2D, 0x00, 0xB0, 0x2C, 0x00, 0x74, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x1E, 0x74, 0x00, 0x0B, 0x74, + 0x80, 0x03, 0xB0, 0xC0, 0x02, 0xB0, 0xE0, 0x00, 0xE0, 0xB0, 0x00, 0xD0, 0x38, 0x00, 0xD0, 0x1E, + 0x00, 0xC0, 0x0F, 0x00, 0xC0, 0x07, 0x00, + // Unicode: [0x0057, W] + 0x2D, 0x00, 0x0F, 0x80, 0xC7, 0x02, 0xF4, 0x01, 0x2C, 0x2C, 0xC0, 0x1F, 0xD0, 0xC1, 0x02, 0xDD, + 0x01, 0x0E, 0x2C, 0xA0, 0x1C, 0x74, 0x80, 0x43, 0xC7, 0x82, 0x03, 0x38, 0x28, 0x2C, 0x2C, 0x80, + 0xC3, 0xC1, 0xD2, 0x00, 0x34, 0x0E, 0x38, 0x0B, 0x40, 0x77, 0x80, 0x77, 0x00, 0xB4, 0x03, 0xB8, + 0x02, 0x00, 0x2F, 0x40, 0x1F, 0x00, 0xF0, 0x00, 0xB4, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xE0, 0x00, 0x78, 0xD0, 0x02, 0x2D, 0x80, 0x03, 0x0B, 0x40, 0x87, 0x03, 0x00, 0xDF, 0x01, 0x00, + 0x7E, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x00, 0x80, 0xB7, 0x00, 0xD0, 0xF1, 0x00, 0xB4, 0xD0, + 0x01, 0x2C, 0xC0, 0x02, 0x0E, 0x80, 0x07, + // Unicode: [0x0059, Y] + 0x2D, 0x00, 0x1E, 0x0F, 0xD0, 0x81, 0x07, 0x2C, 0xD0, 0x82, 0x03, 0xB0, 0x74, 0x00, 0x38, 0x0B, + 0x00, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x80, 0x03, 0x00, 0xB0, 0x00, 0x00, 0x2C, 0x00, 0x40, 0x07, + 0x00, 0xD0, 0x01, 0x00, + // Unicode: [0x005A, Z] + 0xF0, 0xFF, 0x0F, 0x55, 0xB9, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xB4, 0x00, 0xD0, 0x02, 0x00, + 0x0F, 0x00, 0x78, 0x00, 0xD0, 0x01, 0x40, 0x0B, 0x00, 0x3C, 0x00, 0xE0, 0x56, 0x05, 0xFF, 0xFF, + 0x00, + // Unicode: [0x005B, bracketleft] + 0x80, 0x2F, 0xA0, 0x01, 0x2C, 0x00, 0x07, 0xD0, 0x01, 0x38, 0x00, 0x0E, 0xC0, 0x02, 0xB0, 0x00, + 0x1D, 0x40, 0x03, 0xE0, 0x00, 0x28, 0x00, 0x0B, 0xC0, 0x01, 0x74, 0x00, 0x0D, 0x80, 0x03, 0xA0, + 0x00, 0xFC, 0x01, 0x15, 0x00, + // Unicode: [0x005C, backslash] + 0x0E, 0x0E, 0x0E, 0x0E, 0x1D, 0x1D, 0x1D, 0x1D, 0x1C, 0x2C, 0x2C, 0x2C, 0x28, 0x38, 0x38, 0x38, + 0x38, 0x74, 0x74, 0x74, + // Unicode: [0x005D, bracketright] + 0x00, 0x7F, 0x00, 0x39, 0x00, 0x38, 0x00, 0x2C, 0x00, 0x2C, 0x00, 0x1D, 0x00, 0x0D, 0x00, 0x0E, + 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x07, 0x40, 0x07, 0x40, 0x03, 0x80, 0x03, 0x80, 0x02, 0xC0, 0x02, + 0xC0, 0x01, 0xD0, 0x01, 0xE0, 0x00, 0xFD, 0x00, 0x54, 0x00, + // Unicode: [0x005E, asciicircum] + 0x00, 0x50, 0x00, 0x40, 0x0F, 0x00, 0xFC, 0x01, 0xE0, 0x2D, 0x40, 0xC7, 0x02, 0x2C, 0x38, 0xE0, + 0x41, 0x47, 0x0B, 0xB0, 0x38, 0x00, 0xDE, 0x01, 0xE0, + // Unicode: [0x005F, underscore] + 0xA8, 0xAA, 0x5A, 0xFF, 0xFF, 0x07, + // Unicode: [0x0060, grave] + 0x09, 0xF0, 0x01, 0x1D, + // Unicode: [0x0061, a] + 0x40, 0xBE, 0xB1, 0xD0, 0x9B, 0x7B, 0xB4, 0x00, 0x7D, 0x38, 0x00, 0x3C, 0x2C, 0x00, 0x2C, 0x1D, + 0x00, 0x2C, 0x1D, 0x00, 0x1D, 0x2C, 0x40, 0x1F, 0xB8, 0xE5, 0x0E, 0xD0, 0x2F, 0x0E, + // Unicode: [0x0062, b] + 0xD0, 0x01, 0x00, 0xD0, 0x01, 0x00, 0xE0, 0x00, 0x00, 0xA0, 0xF8, 0x0B, 0xB0, 0x9B, 0x2F, 0xF4, + 0x01, 0x78, 0xB4, 0x00, 0x74, 0x38, 0x00, 0x74, 0x38, 0x00, 0x74, 0x3C, 0x00, 0x3C, 0x7C, 0x00, + 0x1E, 0xED, 0xE6, 0x07, 0x5D, 0xBE, 0x01, + // Unicode: [0x0063, c] + 0x40, 0xFE, 0x02, 0xF4, 0xE6, 0x42, 0x0B, 0xE0, 0xE1, 0x00, 0x10, 0x2C, 0x00, 0x40, 0x07, 0x00, + 0xD0, 0x01, 0x50, 0xB4, 0x00, 0x1E, 0xB8, 0xE5, 0x01, 0xF8, 0x1B, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xB0, 0x40, 0xBE, 0xB1, 0xD0, 0x9B, 0x7B, 0xB4, + 0x00, 0x7D, 0x38, 0x00, 0x3C, 0x2C, 0x00, 0x3C, 0x1D, 0x00, 0x2C, 0x1D, 0x00, 0x1D, 0x2C, 0x40, + 0x1F, 0xB8, 0xE5, 0x0E, 0xD0, 0x2F, 0x0E, + // Unicode: [0x0065, e] + 0x00, 0xFE, 0x02, 0xB4, 0xE5, 0x43, 0x07, 0xD0, 0xA1, 0x00, 0x74, 0xFC, 0xFF, 0x5F, 0x57, 0x55, + 0xD1, 0x01, 0x50, 0xB0, 0x00, 0x1E, 0xB8, 0xE5, 0x01, 0xF4, 0x1B, 0x00, + // Unicode: [0x0066, f] + 0x80, 0x0B, 0x5F, 0x74, 0xF0, 0x3F, 0x7D, 0xC1, 0x02, 0x2C, 0xD0, 0x01, 0x1D, 0xE0, 0x00, 0x0E, + 0xB0, 0x00, 0x07, 0x00, + // Unicode: [0x0067, g] + 0x40, 0xBE, 0xB1, 0xD0, 0x96, 0x7B, 0xB4, 0x00, 0x7D, 0x38, 0x00, 0x3C, 0x2C, 0x00, 0x2C, 0x1D, + 0x00, 0x2C, 0x1D, 0x00, 0x1E, 0x3C, 0x40, 0x1F, 0xF8, 0xE6, 0x0E, 0xD0, 0x2F, 0x0E, 0x00, 0x00, + 0x0B, 0x0A, 0x40, 0x07, 0x1E, 0xC0, 0x03, 0xBD, 0xF9, 0x01, 0xE4, 0x2F, 0x00, + // Unicode: [0x0068, h] + 0xD0, 0x01, 0x00, 0x74, 0x00, 0x00, 0x0E, 0x00, 0x80, 0xE6, 0x1B, 0xF0, 0x9B, 0x0F, 0x3D, 0x80, + 0x47, 0x07, 0xD0, 0xE1, 0x00, 0x74, 0x38, 0x00, 0x0E, 0x0B, 0x80, 0xC3, 0x02, 0xB0, 0x74, 0x00, + 0x2C, 0x1D, 0x40, 0x07, + // Unicode: [0x0069, i] + 0xD0, 0x81, 0x07, 0x00, 0x2C, 0xB0, 0xD0, 0x41, 0x07, 0x0E, 0x38, 0xB0, 0xC0, 0x42, 0x07, 0x1D, + 0x00, + // Unicode: [0x006A, j] + 0x00, 0x1D, 0x40, 0x07, 0x00, 0x00, 0x28, 0x00, 0x0B, 0xC0, 0x01, 0x74, 0x00, 0x0E, 0x80, 0x03, + 0xB0, 0x00, 0x2C, 0x40, 0x07, 0xD0, 0x01, 0x38, 0x00, 0x0E, 0xC0, 0x02, 0x79, 0xC0, 0x07, 0x00, + // Unicode: [0x006B, k] + 0xD0, 0x01, 0x00, 0x1D, 0x00, 0xE0, 0x00, 0x00, 0x0A, 0x78, 0xB0, 0xE0, 0x41, 0xC7, 0x07, 0x74, + 0x1F, 0x80, 0x3F, 0x00, 0xF8, 0x02, 0xC0, 0xBA, 0x00, 0x2C, 0x1E, 0xD0, 0xC1, 0x03, 0x1D, 0xB4, + 0x00, + // Unicode: [0x006C, l] + 0xD0, 0x41, 0x07, 0x0E, 0x38, 0xB0, 0xD0, 0x41, 0x07, 0x0E, 0x38, 0xB0, 0xC0, 0x42, 0x07, 0x1D, + 0x00, + // Unicode: [0x006D, m] + 0xB0, 0xF9, 0x46, 0xBE, 0x01, 0x7F, 0xF5, 0x5D, 0x3D, 0xF4, 0x00, 0x3E, 0x40, 0x47, 0x07, 0xD0, + 0x01, 0x74, 0x38, 0x00, 0x1D, 0x40, 0x87, 0x03, 0xE0, 0x00, 0x38, 0x2C, 0x00, 0x0A, 0x80, 0xC3, + 0x02, 0xB0, 0x00, 0x2C, 0x1D, 0x00, 0x07, 0xC0, 0xD2, 0x01, 0x74, 0x00, 0x1D, + // Unicode: [0x006E, n] + 0xB0, 0xF9, 0x06, 0xFC, 0xD5, 0x43, 0x0F, 0xD0, 0xD1, 0x01, 0x74, 0x38, 0x00, 0x1D, 0x0E, 0x80, + 0xC3, 0x02, 0xE0, 0xB0, 0x00, 0x2C, 0x1D, 0x00, 0x4B, 0x07, 0xD0, 0x01, + // Unicode: [0x006F, o] + 0x00, 0xFE, 0x02, 0xF4, 0xE6, 0x43, 0x0B, 0xD0, 0xE1, 0x00, 0xB0, 0x2D, 0x00, 0x6C, 0x07, 0x00, + 0xDB, 0x01, 0xE0, 0xB1, 0x00, 0x2D, 0xB8, 0xE5, 0x02, 0xE4, 0x1B, 0x00, + // Unicode: [0x0070, p] + 0xC0, 0xE2, 0x2F, 0x00, 0xBB, 0xF9, 0x02, 0x7D, 0x00, 0x1E, 0xB4, 0x00, 0x74, 0xE0, 0x00, 0xD0, + 0x81, 0x03, 0x40, 0x07, 0x0F, 0x00, 0x0F, 0x7C, 0x00, 0x1E, 0xB4, 0x9B, 0x1F, 0xD0, 0xE5, 0x1B, + 0x80, 0x03, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x2C, 0x00, 0x00, 0xB0, 0x00, 0x00, 0xD0, 0x01, 0x00, + 0x00, + // Unicode: [0x0071, q] + 0x40, 0xBE, 0xB1, 0xD0, 0x9B, 0x7B, 0xB4, 0x00, 0x7D, 0x38, 0x00, 0x3C, 0x2C, 0x00, 0x3C, 0x1D, + 0x00, 0x2C, 0x1D, 0x00, 0x1D, 0x3C, 0x40, 0x1F, 0xF8, 0xE6, 0x0E, 0xD0, 0x2F, 0x0E, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x0B, 0x00, 0x40, 0x07, 0x00, 0x40, 0x07, 0x00, 0x80, 0x03, + // Unicode: [0x0072, r] + 0xB0, 0x38, 0xEC, 0x4A, 0x1F, 0xD0, 0x01, 0x38, 0x00, 0x0E, 0xC0, 0x02, 0xB0, 0x00, 0x1D, 0x40, + 0x07, 0x00, + // Unicode: [0x0073, s] + 0x90, 0x6F, 0xD0, 0x96, 0x83, 0x03, 0x1C, 0x1E, 0x00, 0xE0, 0x06, 0x00, 0xB9, 0x00, 0x40, 0x8B, + 0x03, 0x38, 0x6D, 0x79, 0x90, 0x6F, 0x00, + // Unicode: [0x0074, t] + 0xB0, 0x40, 0x07, 0x74, 0xE0, 0xBF, 0x79, 0xC5, 0x02, 0x2C, 0xD0, 0x01, 0x1D, 0xE0, 0x00, 0x0E, + 0xE0, 0x05, 0xFD, 0x00, + // Unicode: [0x0075, u] + 0x2C, 0x00, 0xCE, 0x01, 0xB0, 0x1D, 0x00, 0xEB, 0x00, 0x74, 0x0E, 0x40, 0xB7, 0x00, 0x38, 0x0B, + 0xC0, 0xF2, 0x00, 0x2E, 0x6E, 0xF9, 0x41, 0xBF, 0x1D, + // Unicode: [0x0076, v] + 0x0F, 0x40, 0xE7, 0x00, 0x3C, 0x1D, 0xD0, 0xD1, 0x01, 0x0B, 0x2C, 0x78, 0x80, 0xC3, 0x02, 0x38, + 0x0E, 0x40, 0x77, 0x00, 0xF0, 0x03, 0x00, 0x1F, 0x00, + // Unicode: [0x0077, w] + 0x0B, 0xE0, 0x00, 0xED, 0x40, 0x1F, 0xB0, 0x0E, 0xE8, 0x41, 0xD3, 0xD0, 0x2D, 0x28, 0x0D, 0xCA, + 0xD2, 0xD1, 0x71, 0x28, 0x0A, 0x9C, 0x82, 0x73, 0xC0, 0x1E, 0xB4, 0x02, 0xB8, 0x40, 0x1F, 0x80, + 0x07, 0xB4, 0x00, + // Unicode: [0x0078, x] + 0xE0, 0x00, 0x0B, 0x2D, 0x38, 0x80, 0xD3, 0x01, 0xB4, 0x07, 0x00, 0x2F, 0x00, 0xF0, 0x01, 0x80, + 0x3E, 0x00, 0x8E, 0x07, 0x74, 0xB0, 0xD0, 0x01, 0x1E, + // Unicode: [0x0079, y] + 0x3C, 0x00, 0x1D, 0x0E, 0x80, 0x43, 0x07, 0x74, 0xD0, 0x02, 0x0B, 0xB0, 0xD0, 0x01, 0x38, 0x2C, + 0x00, 0x9E, 0x03, 0x40, 0x77, 0x00, 0xC0, 0x0F, 0x00, 0xF0, 0x01, 0x00, 0x2C, 0x00, 0x80, 0x07, + 0x00, 0xB0, 0x00, 0x00, 0x0E, 0x00, 0xD0, 0x02, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xF4, 0xFF, 0x54, 0xB5, 0x00, 0x38, 0x00, 0x1E, 0x80, 0x07, 0xD0, 0x02, 0xB4, 0x00, 0x3C, 0x00, + 0x5E, 0x15, 0xFF, 0x2F, + // Unicode: [0x007B, braceleft] + 0x00, 0x3E, 0xE0, 0x05, 0x2C, 0x00, 0x07, 0xD0, 0x01, 0x74, 0x00, 0x1D, 0x80, 0x03, 0xB0, 0x40, + 0x0B, 0xE0, 0x02, 0xE0, 0x01, 0x74, 0x00, 0x0E, 0xC0, 0x02, 0x70, 0x00, 0x1D, 0x80, 0x03, 0xE0, + 0x01, 0xF4, 0x02, 0x50, 0x00, + // Unicode: [0x007C, bar] + 0x80, 0x03, 0x0B, 0x2C, 0x74, 0xD0, 0x81, 0x03, 0x0E, 0x2C, 0xB0, 0xD0, 0x41, 0x03, 0x0E, 0x28, + 0xB0, 0xD0, 0x41, 0x07, + // Unicode: [0x007D, braceright] + 0x80, 0x0F, 0x90, 0x0B, 0xC0, 0x02, 0x74, 0x00, 0x0D, 0x80, 0x02, 0xB0, 0x00, 0x1D, 0x40, 0x07, + 0x80, 0x0B, 0xE0, 0x02, 0x1E, 0xC0, 0x02, 0x74, 0x00, 0x1D, 0x40, 0x07, 0xE0, 0x00, 0x38, 0x40, + 0x0B, 0xBC, 0x00, 0x05, 0x00, + // Unicode: [0x007E, asciitilde] + 0xFD, 0xA5, 0xDB, 0x2F, 0x01, 0x05 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_18_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_18_2bpp_4.cpp new file mode 100644 index 00000000..cf8399aa --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_18_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x04, 0x00, 0x78, 0x2D, 0xAF, 0x74, 0x2C +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_20_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_20_2bpp_0.cpp new file mode 100644 index 00000000..fe0794a3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_20_2bpp_0.cpp @@ -0,0 +1,367 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_20_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xE0, 0xC1, 0x03, 0x0F, 0x2C, 0x74, 0xD0, 0x81, 0x03, 0x0E, 0x2C, 0x70, 0x00, 0x00, 0x01, 0x1F, + 0x3C, 0x00, + // Unicode: [0x0022, quotedbl] + 0x8E, 0x3A, 0xAB, 0xDC, 0x35, + // Unicode: [0x0023, numbersign] + 0x00, 0x40, 0x07, 0x78, 0x00, 0x00, 0x0F, 0xB0, 0x00, 0x00, 0x1D, 0xD0, 0x01, 0x00, 0x38, 0x80, + 0x03, 0xD0, 0xFF, 0xFF, 0xFF, 0x42, 0xEA, 0xAA, 0xAF, 0x06, 0x80, 0x03, 0x3C, 0x00, 0x40, 0x0B, + 0x74, 0x00, 0x00, 0x1E, 0xE0, 0x00, 0xA4, 0xBE, 0xEA, 0x6B, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, + 0x00, 0x0E, 0x00, 0xC0, 0x02, 0x2C, 0x00, 0x40, 0x07, 0x78, 0x00, 0x00, 0x0F, 0xB0, 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x10, 0x00, 0x00, 0x03, 0x40, 0xFF, 0x02, 0xAE, 0xBE, 0x78, 0x18, 0xCF, 0x83, 0x51, 0x3C, + 0x0C, 0xC0, 0xDB, 0x00, 0xF4, 0x1F, 0x00, 0xE4, 0x1F, 0x00, 0xD6, 0x03, 0x70, 0x78, 0x0A, 0x83, + 0xF3, 0x34, 0x2D, 0xBE, 0xBB, 0x80, 0xFF, 0x02, 0x80, 0x01, 0x00, 0x04, 0x00, + // Unicode: [0x0025, percent] + 0xD0, 0x0B, 0xB0, 0x78, 0x1D, 0x38, 0x1C, 0x28, 0x1E, 0x1D, 0x5C, 0x07, 0x1C, 0xDE, 0x02, 0xF8, + 0xE7, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x8B, 0x1F, 0x80, 0xB7, 0x39, 0xE0, 0x35, + 0x74, 0x74, 0x28, 0x34, 0x2C, 0x38, 0x2C, 0x0E, 0xE0, 0x07, + // Unicode: [0x0026, ampersand] + 0x00, 0xE4, 0x0B, 0x00, 0xD0, 0xEB, 0x02, 0x00, 0x0F, 0x3C, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x0F, + 0x00, 0x00, 0xE0, 0x02, 0x00, 0x80, 0x7F, 0x00, 0x40, 0x1F, 0x1F, 0xB4, 0x3C, 0xD0, 0xC3, 0xD3, + 0x01, 0xF4, 0x1E, 0x1E, 0x00, 0x7E, 0xD0, 0x02, 0xE0, 0x0B, 0xBC, 0xE5, 0xF7, 0x01, 0xFE, 0x06, + 0x7D, + // Unicode: [0x0027, quotesingle] + 0xEE, 0x7A, + // Unicode: [0x0028, parenleft] + 0x00, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xD0, 0x02, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0B, 0x00, + 0x1D, 0x00, 0x38, 0x00, 0xB0, 0x00, 0xD0, 0x01, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x38, 0x00, 0xE0, + 0x00, 0x80, 0x03, 0x00, 0x1E, 0x00, 0x74, 0x00, 0xD0, 0x02, 0x00, 0x0F, 0x00, 0xB4, 0x00, 0x80, + 0x07, 0x00, + // Unicode: [0x0029, parenright] + 0x00, 0x1E, 0x00, 0xF0, 0x00, 0x80, 0x07, 0x00, 0x3C, 0x00, 0xE0, 0x00, 0x80, 0x07, 0x00, 0x1D, + 0x00, 0xB4, 0x00, 0xD0, 0x01, 0x40, 0x07, 0x00, 0x1D, 0x00, 0x38, 0x00, 0xE0, 0x00, 0xC0, 0x02, + 0x40, 0x07, 0x00, 0x0F, 0x00, 0x1D, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xB4, 0x00, 0xB4, 0x00, 0xB4, + 0x00, 0x00, + // Unicode: [0x002A, asterisk] + 0x40, 0x03, 0x44, 0x12, 0xAD, 0x7A, 0xE0, 0x07, 0xF9, 0x1E, 0xCA, 0x28, 0xD0, 0x00, 0x50, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x2C, 0x00, 0x00, 0x0B, 0x00, 0xD0, 0x01, 0x00, 0x74, 0x00, 0xAA, 0xAF, 0xDA, 0xFF, 0xFF, + 0x03, 0xB0, 0x00, 0x00, 0x2D, 0x00, 0x40, 0x07, 0x00, 0xE0, 0x01, 0x00, + // Unicode: [0x002C, comma] + 0x80, 0x81, 0x07, 0x0B, 0x0D, 0x2C, 0x34, 0x00, + // Unicode: [0x002D, hyphen] + 0xA9, 0xAA, 0xF9, 0xFF, 0x07, + // Unicode: [0x002E, period] + 0x84, 0xE7, 0x01, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0x74, 0x00, 0x00, 0x38, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0B, 0x00, + 0x80, 0x07, 0x00, 0xC0, 0x03, 0x00, 0xD0, 0x01, 0x00, 0xE0, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x2C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x40, 0x07, 0x00, 0x80, 0x03, 0x00, + 0xD0, 0x02, 0x00, 0xE0, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x74, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1D, + 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0xFE, 0x06, 0xF0, 0xEA, 0x03, 0x1E, 0xE0, 0xD2, 0x02, 0xB0, 0x38, 0x00, 0x2C, 0x0B, 0x00, + 0xDB, 0x01, 0xC0, 0x76, 0x00, 0xB4, 0x0E, 0x00, 0x9D, 0x03, 0x80, 0xE3, 0x00, 0xB0, 0x78, 0x00, + 0x1D, 0x2D, 0xD0, 0x02, 0xBF, 0x3E, 0x40, 0xFE, 0x02, 0x00, + // Unicode: [0x0031, one] + 0xFC, 0xA3, 0x0B, 0x2D, 0x74, 0xE0, 0x81, 0x03, 0x0F, 0x2D, 0x74, 0xE0, 0x81, 0x03, 0x0F, 0x2C, + 0xB4, 0x00, + // Unicode: [0x0032, two] + 0x00, 0xF9, 0x06, 0xD0, 0xEB, 0x0B, 0x2D, 0xC0, 0x83, 0x03, 0xE0, 0xB0, 0x00, 0x3C, 0x00, 0x00, + 0x0B, 0x00, 0xE0, 0x01, 0x00, 0x2D, 0x00, 0xD0, 0x02, 0x00, 0x2D, 0x00, 0xE0, 0x02, 0x00, 0x2E, + 0x00, 0xF4, 0x01, 0x40, 0xAF, 0xAA, 0xF1, 0xFF, 0xBF, 0x00, + // Unicode: [0x0033, three] + 0x00, 0xF9, 0x0B, 0x40, 0xAF, 0x2F, 0xD0, 0x02, 0x78, 0xE0, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x1D, 0x00, 0xE8, 0x07, 0x00, 0xFD, 0x02, 0x00, 0x40, 0x0B, 0x00, 0x00, 0x1E, 0x04, 0x00, + 0x1D, 0x2D, 0x00, 0x0E, 0x3C, 0x40, 0x0B, 0xF8, 0xEA, 0x03, 0x90, 0x6F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x00, 0xC0, 0x3B, 0x00, 0xE0, 0x38, 0x00, 0x78, 0x2C, 0x00, + 0x1E, 0x2D, 0x80, 0x07, 0x1D, 0xD0, 0x01, 0x1E, 0xB4, 0x00, 0x0E, 0xBD, 0xAA, 0x6F, 0xFE, 0xFF, + 0xBF, 0x00, 0x40, 0x07, 0x00, 0x80, 0x07, 0x00, 0x80, 0x03, + // Unicode: [0x0035, five] + 0xE0, 0xFF, 0x3F, 0xBC, 0xAA, 0x06, 0x0B, 0x00, 0xD0, 0x01, 0x00, 0x74, 0x00, 0x00, 0x0E, 0x19, + 0x80, 0xFB, 0x7F, 0xF0, 0x06, 0x3D, 0x28, 0x00, 0x1E, 0x00, 0x40, 0x07, 0x00, 0xE0, 0x38, 0x00, + 0x2C, 0x1E, 0x80, 0x47, 0xAF, 0x7E, 0x40, 0xFE, 0x06, 0x00, + // Unicode: [0x0036, six] + 0x00, 0xF9, 0x06, 0xE0, 0xEA, 0x07, 0x1D, 0xD0, 0xC2, 0x02, 0xA0, 0x34, 0x00, 0x00, 0x0A, 0x15, + 0xC0, 0xFA, 0x7F, 0xF4, 0x06, 0x3D, 0x2D, 0x00, 0x5E, 0x07, 0x40, 0xE7, 0x00, 0xE0, 0x35, 0x00, + 0x3C, 0x2D, 0x80, 0x07, 0xAE, 0xBE, 0x00, 0xFE, 0x06, 0x00, + // Unicode: [0x0037, seven] + 0xFF, 0xFF, 0xAB, 0xAA, 0x7A, 0x00, 0xC0, 0x02, 0x00, 0x1E, 0x00, 0xB4, 0x00, 0x80, 0x03, 0x00, + 0x1D, 0x00, 0xF0, 0x00, 0x80, 0x07, 0x00, 0x2C, 0x00, 0xE0, 0x01, 0x40, 0x0B, 0x00, 0x3C, 0x00, + 0xE0, 0x01, 0x00, 0x0F, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0xF8, 0x1B, 0x40, 0xAF, 0x7E, 0xC0, 0x07, 0xF4, 0xD0, 0x01, 0xE0, 0xE0, 0x01, 0xF0, 0xD0, + 0x01, 0x74, 0xC0, 0x47, 0x2E, 0x40, 0xFF, 0x0B, 0xE0, 0x56, 0x2E, 0x78, 0x00, 0x38, 0x2C, 0x00, + 0x78, 0x2D, 0x00, 0x3C, 0x3C, 0x00, 0x1E, 0xF8, 0xEA, 0x0B, 0x90, 0xBF, 0x01, + // Unicode: [0x0039, nine] + 0x00, 0xFE, 0x06, 0xF0, 0xEA, 0x07, 0x1E, 0xD0, 0xD2, 0x01, 0xB0, 0x38, 0x00, 0x38, 0x0F, 0x00, + 0xCB, 0x03, 0xD0, 0xE2, 0x01, 0xBD, 0xF4, 0xEA, 0x1E, 0xE4, 0x5B, 0x03, 0x00, 0xA0, 0x64, 0x00, + 0x1C, 0x2D, 0x80, 0x03, 0xAF, 0x7E, 0x00, 0xFE, 0x02, 0x00, + // Unicode: [0x003A, colon] + 0xDE, 0x57, 0x00, 0x00, 0x00, 0x00, 0x84, 0xE7, 0x01, + // Unicode: [0x003B, semicolon] + 0x40, 0x07, 0x78, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x40, 0x0B, 0x38, + 0xD0, 0x01, 0x0A, 0x10, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x7D, 0x40, 0x0B, 0xE0, 0x02, 0x78, 0x00, 0x1E, 0x00, 0x7D, 0x00, 0xF4, 0x00, 0xD0, 0x03, + 0x40, 0x0B, + // Unicode: [0x003D, equal] + 0xFD, 0xFF, 0x7F, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xDA, 0xFF, 0xFF, + 0x07, + // Unicode: [0x003E, greater] + 0xB8, 0x00, 0xB8, 0x00, 0xB8, 0x00, 0x78, 0x00, 0x3D, 0xD0, 0x03, 0x2E, 0xE0, 0x02, 0x1F, 0x00, + // Unicode: [0x003F, question] + 0x80, 0xBF, 0x40, 0xAF, 0x2E, 0x3C, 0x80, 0xD7, 0x01, 0x74, 0x00, 0x80, 0x07, 0x00, 0x2C, 0x00, + 0xF5, 0x01, 0xFF, 0x02, 0xB0, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x7C, 0x00, + 0xC0, 0x02, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x90, 0xFE, 0x06, 0x00, 0x80, 0x5B, 0xE5, 0x07, 0x40, 0x0B, 0x00, 0xE0, 0x01, 0x2D, 0x00, + 0x00, 0x38, 0xB0, 0x80, 0x7F, 0x0B, 0x87, 0x03, 0x5F, 0x7E, 0xB0, 0x2C, 0x38, 0x80, 0x07, 0xDA, + 0xD1, 0x01, 0x38, 0xA0, 0x0D, 0x1D, 0x80, 0x03, 0xEB, 0xE0, 0x00, 0x2C, 0x74, 0x0E, 0x1D, 0xD0, + 0x82, 0xE3, 0xC0, 0x97, 0x7A, 0x1E, 0x1D, 0xE4, 0x4B, 0x6E, 0xC0, 0x02, 0x00, 0x00, 0x00, 0xB4, + 0x00, 0x00, 0x00, 0x00, 0x6D, 0x40, 0x06, 0x00, 0x40, 0xFE, 0x6F, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, + // Unicode: [0x0041, A] + 0x00, 0xC0, 0x07, 0x00, 0xE0, 0x07, 0x00, 0xF4, 0x0B, 0x00, 0x78, 0x0F, 0x00, 0x2D, 0x0F, 0x00, + 0x1E, 0x1E, 0x40, 0x0B, 0x1E, 0xC0, 0x07, 0x2D, 0xD0, 0x02, 0x2D, 0xF0, 0x01, 0x3C, 0xF4, 0xFF, + 0x3F, 0x7C, 0x55, 0x79, 0x1E, 0x00, 0xB4, 0x0F, 0x00, 0xB4, + // Unicode: [0x0042, B] + 0xC0, 0xFF, 0x1B, 0xD0, 0x56, 0x7E, 0xD0, 0x01, 0xB4, 0xE0, 0x01, 0xB0, 0xE0, 0x00, 0x74, 0xF0, + 0x40, 0x2E, 0xF0, 0xFF, 0x07, 0xB4, 0x55, 0x1F, 0x78, 0x00, 0x2C, 0x38, 0x00, 0x3C, 0x3C, 0x00, + 0x2C, 0x2C, 0x00, 0x1E, 0x6D, 0xA5, 0x0B, 0xFD, 0xBF, 0x01, + // Unicode: [0x0043, C] + 0x00, 0xE4, 0x6F, 0x00, 0xF4, 0xEB, 0x2F, 0xE0, 0x06, 0xD0, 0x47, 0x0B, 0x00, 0xB4, 0x3C, 0x00, + 0x00, 0xD0, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0xD2, 0x07, 0x80, 0x0B, 0xF4, 0xAB, 0x2F, 0x00, 0xF8, 0x2B, + 0x00, + // Unicode: [0x0044, D] + 0xC0, 0xFF, 0x1B, 0x00, 0x6D, 0xE5, 0x0F, 0xD0, 0x01, 0xE0, 0x02, 0x1E, 0x00, 0x78, 0xE0, 0x00, + 0x40, 0x0B, 0x0F, 0x00, 0xB4, 0xB0, 0x00, 0x40, 0x4B, 0x07, 0x00, 0x74, 0x78, 0x00, 0x80, 0x83, + 0x03, 0x00, 0x2D, 0x3C, 0x00, 0xF0, 0xC0, 0x02, 0xD0, 0x07, 0x6D, 0xA5, 0x1B, 0xD0, 0xFF, 0x1B, + 0x00, + // Unicode: [0x0045, E] + 0xC0, 0xFF, 0x1F, 0xB4, 0x55, 0x01, 0x1D, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x00, 0x00, 0x2C, 0x00, + 0x00, 0xFF, 0x2F, 0xD0, 0x56, 0x01, 0x78, 0x00, 0x00, 0x0E, 0x00, 0xC0, 0x03, 0x00, 0xB0, 0x00, + 0x00, 0x6D, 0x55, 0x40, 0xFF, 0x3F, 0x00, + // Unicode: [0x0046, F] + 0xC0, 0xFF, 0x2F, 0xB4, 0x55, 0x05, 0x1D, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x00, 0x00, 0x2C, 0x00, + 0x00, 0xFF, 0x2F, 0xD0, 0x56, 0x01, 0x78, 0x00, 0x00, 0x0E, 0x00, 0xC0, 0x03, 0x00, 0xB0, 0x00, + 0x00, 0x2D, 0x00, 0x40, 0x07, 0x00, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xE4, 0x6F, 0x00, 0xF4, 0xEB, 0x1F, 0xE0, 0x06, 0xD0, 0x47, 0x0B, 0x00, 0xB8, 0x3C, 0x00, + 0x00, 0xD5, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0xFF, 0x0F, 0x50, 0x95, 0xFB, + 0x00, 0x00, 0x78, 0x1E, 0x00, 0xE0, 0xD2, 0x07, 0x80, 0x0B, 0xF4, 0xAB, 0x2F, 0x00, 0xF8, 0x2B, + 0x00, + // Unicode: [0x0048, H] + 0xC0, 0x02, 0x40, 0x0B, 0x2D, 0x00, 0x74, 0xD0, 0x01, 0x80, 0x07, 0x0E, 0x00, 0x38, 0xE0, 0x00, + 0xC0, 0x03, 0x0B, 0x00, 0x2D, 0xF0, 0xFF, 0xFF, 0x42, 0x5B, 0x55, 0x1E, 0x78, 0x00, 0xE0, 0x81, + 0x03, 0x00, 0x0E, 0x3C, 0x00, 0xF0, 0xC0, 0x02, 0x00, 0x0B, 0x2D, 0x00, 0xB4, 0xD0, 0x01, 0x40, + 0x07, + // Unicode: [0x0049, I] + 0xC0, 0x42, 0x0B, 0x1D, 0x78, 0xE0, 0xC0, 0x03, 0x0B, 0x1D, 0x78, 0xE0, 0xC0, 0x03, 0x0B, 0x2D, + 0x74, 0x00, + // Unicode: [0x004A, J] + 0x00, 0x00, 0x0F, 0x00, 0xB0, 0x00, 0x40, 0x0B, 0x00, 0x74, 0x00, 0x80, 0x07, 0x00, 0x38, 0x00, + 0xC0, 0x03, 0x00, 0x2C, 0x00, 0xD0, 0x01, 0x00, 0x1E, 0x1D, 0xE0, 0xE0, 0x41, 0x0B, 0xBD, 0x3E, + 0x40, 0xBE, 0x00, + // Unicode: [0x004B, K] + 0xC0, 0x02, 0xF0, 0x41, 0x0B, 0xF0, 0x01, 0x1D, 0xF4, 0x01, 0x78, 0xF4, 0x01, 0xE0, 0xF4, 0x00, + 0xC0, 0xF7, 0x00, 0x00, 0xBF, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x78, 0x1F, 0x00, 0xE0, 0xF4, 0x01, + 0xC0, 0x43, 0x0F, 0x00, 0x0B, 0xB8, 0x00, 0x2D, 0xC0, 0x07, 0x74, 0x00, 0x3D, 0x00, + // Unicode: [0x004C, L] + 0xC0, 0x02, 0xD0, 0x02, 0xD0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0xB0, 0x00, 0x74, 0x00, + 0x78, 0x00, 0x38, 0x00, 0x3C, 0x00, 0x2C, 0x00, 0x6D, 0x15, 0xFD, 0x7F, + // Unicode: [0x004D, M] + 0xC0, 0x03, 0x00, 0xD0, 0x43, 0x1F, 0x00, 0x80, 0x0B, 0xBD, 0x00, 0x40, 0x2F, 0xF8, 0x03, 0x00, + 0x7F, 0xE0, 0x0E, 0x00, 0xEE, 0xC1, 0x76, 0x00, 0x9D, 0x03, 0xCB, 0x02, 0x28, 0x0F, 0x1D, 0x0E, + 0x74, 0x2C, 0x78, 0x78, 0xB0, 0xB4, 0xE0, 0xD0, 0xE1, 0xD0, 0xC1, 0x03, 0xDB, 0x81, 0x07, 0x0B, + 0xF8, 0x02, 0x0E, 0x2D, 0xD0, 0x07, 0x3C, 0x74, 0x40, 0x0B, 0xB0, 0x00, + // Unicode: [0x004E, N] + 0xC0, 0x03, 0x00, 0x0F, 0xBD, 0x00, 0xB0, 0xD0, 0x0F, 0x40, 0x0B, 0xEE, 0x02, 0x74, 0xE0, 0x3C, + 0x80, 0x03, 0x4F, 0x07, 0x38, 0xB0, 0xF0, 0xC0, 0x42, 0x07, 0x1D, 0x2D, 0x78, 0xC0, 0xD3, 0x81, + 0x03, 0x78, 0x1E, 0x3C, 0x00, 0xEF, 0xC0, 0x02, 0xE0, 0x0F, 0x2D, 0x00, 0xBC, 0xD0, 0x01, 0x80, + 0x0B, + // Unicode: [0x004F, O] + 0x00, 0xE8, 0x6F, 0x00, 0xF4, 0xEB, 0x1F, 0xE0, 0x06, 0xD0, 0x47, 0x0B, 0x00, 0xB4, 0x3C, 0x00, + 0x00, 0xEF, 0x01, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x40, 0xEB, + 0x00, 0x00, 0x78, 0x2E, 0x00, 0xE0, 0xC2, 0x07, 0x80, 0x0B, 0xF4, 0xAB, 0x2F, 0x00, 0xF8, 0x6F, + 0x00, + // Unicode: [0x0050, P] + 0xC0, 0xFF, 0x1B, 0xD0, 0x56, 0x3E, 0xD0, 0x01, 0xB4, 0xE0, 0x01, 0xB4, 0xE0, 0x00, 0x74, 0xF0, + 0x00, 0x38, 0xB0, 0x40, 0x1E, 0xF4, 0xFF, 0x07, 0xB8, 0x15, 0x00, 0x38, 0x00, 0x00, 0x3C, 0x00, + 0x00, 0x2C, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x1D, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xE8, 0x6F, 0x00, 0xF4, 0xEB, 0x1F, 0xE0, 0x06, 0xD0, 0x47, 0x0B, 0x00, 0xB4, 0x3C, 0x00, + 0x00, 0xEF, 0x01, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x40, 0xEB, + 0x00, 0x00, 0x78, 0x2E, 0x00, 0xE0, 0xC2, 0x07, 0x80, 0x0B, 0xF4, 0xAB, 0x2F, 0x00, 0xF8, 0xFB, + 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x80, 0x0B, 0x00, 0x00, 0x90, 0x01, + // Unicode: [0x0052, R] + 0xC0, 0xFF, 0x1B, 0xD0, 0x56, 0x3E, 0xD0, 0x01, 0xB4, 0xE0, 0x01, 0xB4, 0xE0, 0x00, 0x74, 0xF0, + 0x00, 0x3C, 0xB0, 0x40, 0x1E, 0xF4, 0xFF, 0x07, 0xB8, 0xB9, 0x00, 0x38, 0xF0, 0x00, 0x3C, 0xE0, + 0x02, 0x2C, 0xC0, 0x03, 0x2D, 0x80, 0x07, 0x1D, 0x40, 0x0B, + // Unicode: [0x0053, S] + 0x80, 0xBF, 0x41, 0xAF, 0x7E, 0x3C, 0x40, 0xCB, 0x02, 0x60, 0x3C, 0x00, 0x80, 0x1B, 0x00, 0xE0, + 0x1B, 0x00, 0xE4, 0x0B, 0x00, 0xE0, 0x02, 0x00, 0x3C, 0x0A, 0x80, 0xF3, 0x00, 0x3D, 0xBD, 0xFA, + 0x41, 0xFE, 0x02, + // Unicode: [0x0054, T] + 0xFF, 0xFF, 0x57, 0xB9, 0x15, 0x80, 0x07, 0x00, 0x38, 0x00, 0xC0, 0x03, 0x00, 0x2C, 0x00, 0xD0, + 0x02, 0x00, 0x1D, 0x00, 0xE0, 0x01, 0x00, 0x0E, 0x00, 0xF0, 0x00, 0x00, 0x0B, 0x00, 0xB4, 0x00, + 0x40, 0x07, 0x00, + // Unicode: [0x0055, U] + 0xB0, 0x00, 0xD0, 0xD1, 0x02, 0x80, 0x47, 0x07, 0x00, 0x0E, 0x0E, 0x00, 0x3C, 0x3C, 0x00, 0xB0, + 0xB0, 0x00, 0xD0, 0xD1, 0x02, 0x80, 0x47, 0x07, 0x00, 0x0E, 0x1E, 0x00, 0x3C, 0x38, 0x00, 0xB4, + 0xE0, 0x01, 0xE0, 0x41, 0x0B, 0xD0, 0x02, 0xFC, 0xFA, 0x02, 0x80, 0xBF, 0x01, 0x00, + // Unicode: [0x0056, V] + 0x0F, 0x00, 0xE0, 0x39, 0x00, 0xD0, 0xE2, 0x01, 0x80, 0x43, 0x07, 0x40, 0x0B, 0x2D, 0x00, 0x0F, + 0xF0, 0x00, 0x1D, 0x80, 0x03, 0x3C, 0x00, 0x1E, 0x74, 0x00, 0x74, 0xB0, 0x00, 0xD0, 0xE2, 0x01, + 0x00, 0xCB, 0x02, 0x00, 0xB8, 0x07, 0x00, 0xE0, 0x0B, 0x00, 0x40, 0x0F, 0x00, 0x00, + // Unicode: [0x0057, W] + 0x0F, 0x00, 0x1F, 0x00, 0xDE, 0x03, 0xD0, 0x07, 0xC0, 0xF2, 0x00, 0xFC, 0x02, 0x78, 0x38, 0x40, + 0xBB, 0x00, 0x0F, 0x1E, 0xE0, 0x2C, 0xD0, 0x81, 0x07, 0x1D, 0x0B, 0x3C, 0xD0, 0x81, 0xC3, 0x43, + 0x07, 0x74, 0x74, 0xE0, 0xE0, 0x00, 0x2D, 0x0E, 0x38, 0x2C, 0x00, 0xCB, 0x02, 0x9E, 0x03, 0xC0, + 0x3A, 0x40, 0xB7, 0x00, 0xF0, 0x0B, 0xD0, 0x0E, 0x00, 0xF8, 0x00, 0xF4, 0x02, 0x00, 0x2E, 0x00, + 0x7C, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xD0, 0x02, 0xD0, 0x02, 0x0F, 0xD0, 0x02, 0x78, 0xC0, 0x03, 0xC0, 0x83, 0x07, 0x00, 0x5E, 0x07, + 0x00, 0xF4, 0x0B, 0x00, 0x80, 0x0B, 0x00, 0x00, 0x2F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x9E, 0x0B, + 0x00, 0x2D, 0x3C, 0x00, 0x2D, 0xE0, 0x01, 0x3C, 0x40, 0x0F, 0x78, 0x00, 0x78, 0x00, + // Unicode: [0x0059, Y] + 0x0F, 0x00, 0x9E, 0x07, 0xD0, 0xD2, 0x02, 0x3C, 0xF0, 0x80, 0x07, 0x78, 0xB4, 0x00, 0x2D, 0x0F, + 0x00, 0xEF, 0x01, 0x80, 0x2F, 0x00, 0xD0, 0x03, 0x00, 0xB4, 0x00, 0x00, 0x1D, 0x00, 0x80, 0x07, + 0x00, 0xE0, 0x00, 0x00, 0x2C, 0x00, 0x00, + // Unicode: [0x005A, Z] + 0xE0, 0xFF, 0x7F, 0x90, 0xAA, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x80, 0x07, 0x00, 0xD0, 0x02, 0x00, + 0xB4, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x80, 0x07, 0x00, 0xD0, 0x02, 0x00, 0xB4, 0x00, + 0x00, 0x3C, 0x00, 0x00, 0xAE, 0xAA, 0x02, 0xFF, 0xFF, 0x03, + // Unicode: [0x005B, bracketleft] + 0x00, 0x7F, 0x40, 0x6B, 0x80, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x02, 0xD0, 0x02, 0xD0, 0x01, + 0xE0, 0x00, 0xE0, 0x00, 0xB0, 0x00, 0xB0, 0x00, 0x74, 0x00, 0x74, 0x00, 0x38, 0x00, 0x3C, 0x00, + 0x2C, 0x00, 0x2D, 0x00, 0x1D, 0x00, 0x1E, 0x00, 0x6E, 0x00, 0xBF, 0x00, + // Unicode: [0x005C, backslash] + 0x1D, 0x1D, 0x2D, 0x2C, 0x2C, 0x2C, 0x3C, 0x3C, 0x38, 0x38, 0x78, 0x78, 0x74, 0x74, 0x74, 0xB4, + 0xB0, 0xB0, 0xB0, 0xF0, 0xE0, 0xE0, + // Unicode: [0x005D, bracketright] + 0x00, 0xFE, 0x00, 0xF5, 0x00, 0xB0, 0x00, 0x74, 0x00, 0x74, 0x00, 0x38, 0x00, 0x38, 0x00, 0x2C, + 0x00, 0x2C, 0x00, 0x1D, 0x00, 0x1D, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x0B, 0x40, 0x0B, 0x40, 0x07, + 0x80, 0x03, 0x80, 0x03, 0xC0, 0x02, 0xC0, 0x02, 0xE8, 0x01, 0xFD, 0x01, + // Unicode: [0x005E, asciicircum] + 0x00, 0x80, 0x01, 0x00, 0xE0, 0x03, 0x00, 0xF4, 0x03, 0x00, 0x7C, 0x07, 0x00, 0x5E, 0x0B, 0x40, + 0x0B, 0x0F, 0xC0, 0x03, 0x1E, 0xE0, 0x01, 0x1D, 0xB0, 0x00, 0x2C, 0x38, 0x00, 0x3C, 0x2D, 0x00, + 0x78, + // Unicode: [0x005F, underscore] + 0xA8, 0xAA, 0x6A, 0xFD, 0xFF, 0x7F, + // Unicode: [0x0060, grave] + 0x0B, 0x7E, 0xA0, + // Unicode: [0x0061, a] + 0x00, 0xF9, 0xC6, 0x02, 0xBE, 0x7E, 0x0B, 0x1E, 0x80, 0x1F, 0x2E, 0x00, 0x7C, 0x3C, 0x00, 0xF0, + 0xB4, 0x00, 0xC0, 0xD3, 0x02, 0x40, 0x4B, 0x0B, 0x00, 0x2E, 0x7C, 0x00, 0x7E, 0xD0, 0x9B, 0xEF, + 0x01, 0xF9, 0x86, 0x03, + // Unicode: [0x0062, b] + 0xC0, 0x03, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x74, 0x00, 0x00, 0xE0, 0xE5, 0x2F, + 0x80, 0xB7, 0xFA, 0x02, 0x7F, 0x00, 0x1F, 0x7D, 0x00, 0xB4, 0xB4, 0x00, 0xD0, 0xE2, 0x01, 0x40, + 0x8B, 0x07, 0x00, 0x1E, 0x1F, 0x00, 0x3C, 0xFC, 0x01, 0x7D, 0xB4, 0xAF, 0x7E, 0xD0, 0xE1, 0x2F, + 0x00, + // Unicode: [0x0063, c] + 0x00, 0xF9, 0x06, 0x80, 0xAB, 0x2F, 0xE0, 0x01, 0x7C, 0x78, 0x00, 0x64, 0x3C, 0x00, 0x00, 0x2D, + 0x00, 0x00, 0x2D, 0x00, 0x00, 0x2D, 0x00, 0x19, 0x7C, 0x00, 0x1F, 0xF4, 0xEA, 0x07, 0x90, 0xAF, + 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x78, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x3C, 0x00, 0xF9, + 0xC6, 0x02, 0xF8, 0xFA, 0x2D, 0xE0, 0x01, 0xF8, 0x81, 0x0B, 0x00, 0x1F, 0x3C, 0x00, 0xF0, 0xD0, + 0x02, 0x00, 0x0F, 0x2D, 0x00, 0xB4, 0xD0, 0x02, 0x80, 0x0B, 0x7C, 0x00, 0x7E, 0x40, 0x6F, 0xBE, + 0x07, 0x90, 0x6F, 0x38, 0x00, + // Unicode: [0x0065, e] + 0x00, 0xF9, 0x07, 0x80, 0xAB, 0x2F, 0xE0, 0x01, 0x78, 0x78, 0x00, 0xB4, 0x3C, 0x00, 0xB4, 0xFD, + 0xFF, 0x7F, 0x6D, 0x55, 0x15, 0x2D, 0x00, 0x14, 0x7C, 0x00, 0x1E, 0xF4, 0xEA, 0x07, 0x90, 0xBF, + 0x00, + // Unicode: [0x0066, f] + 0x40, 0x1E, 0xF4, 0x06, 0x0E, 0xC0, 0x02, 0xFE, 0x4B, 0x6E, 0x81, 0x07, 0xF0, 0x00, 0x2C, 0x40, + 0x0B, 0xD0, 0x01, 0x78, 0x00, 0x0E, 0xC0, 0x03, 0xB0, 0x00, 0x00, + // Unicode: [0x0067, g] + 0x00, 0xF9, 0xC6, 0x02, 0x6E, 0xB9, 0x0B, 0x1E, 0x80, 0x1F, 0x1E, 0x00, 0x7C, 0x3C, 0x00, 0xF0, + 0xB4, 0x00, 0xC0, 0xD3, 0x02, 0x40, 0x4B, 0x0B, 0x00, 0x2E, 0x7C, 0x00, 0x7E, 0xD0, 0xAB, 0xEB, + 0x01, 0xF9, 0x86, 0x03, 0x00, 0x00, 0x0B, 0x0A, 0x00, 0x1D, 0xB8, 0x00, 0x2D, 0xD0, 0xAF, 0x2F, + 0x00, 0xF8, 0x1B, 0x00, + // Unicode: [0x0068, h] + 0xC0, 0x03, 0x00, 0xC0, 0x02, 0x00, 0xD0, 0x02, 0x00, 0xD0, 0x01, 0x00, 0xE0, 0xE5, 0x0B, 0xE0, + 0xAE, 0x3F, 0xF0, 0x02, 0x78, 0xF4, 0x00, 0xB4, 0xB4, 0x00, 0x74, 0x78, 0x00, 0x74, 0x38, 0x00, + 0x38, 0x3C, 0x00, 0x38, 0x2C, 0x00, 0x2C, 0x2D, 0x00, 0x2D, 0x1D, 0x00, 0x1D, + // Unicode: [0x0069, i] + 0x80, 0x43, 0x0F, 0x14, 0x00, 0xE0, 0x81, 0x03, 0x0F, 0x2C, 0x74, 0xE0, 0x81, 0x03, 0x0F, 0x2C, + 0xB4, 0xD0, 0x01, + // Unicode: [0x006A, j] + 0x00, 0xE0, 0x00, 0xF4, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, 0x3C, 0x00, 0x2C, + 0x00, 0x2D, 0x00, 0x1D, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0B, 0x40, 0x0B, 0x40, 0x07, 0x80, 0x07, + 0x80, 0x03, 0xC0, 0x03, 0xE8, 0x01, 0xBD, 0x00, + // Unicode: [0x006B, k] + 0xC0, 0x03, 0x00, 0xB0, 0x00, 0x00, 0x2D, 0x00, 0x40, 0x07, 0x00, 0xE0, 0x01, 0x1F, 0x38, 0xF0, + 0x01, 0x4B, 0x1F, 0xD0, 0xF6, 0x01, 0xB4, 0x0F, 0x00, 0xFE, 0x00, 0x80, 0xBB, 0x00, 0xF0, 0x78, + 0x00, 0x2C, 0x7D, 0x40, 0x0B, 0x3D, 0xD0, 0x01, 0x2E, 0x00, + // Unicode: [0x006C, l] + 0xC0, 0x03, 0x0B, 0x2D, 0x74, 0xE0, 0x81, 0x03, 0x0B, 0x2D, 0x74, 0xE0, 0x81, 0x03, 0x0F, 0x2C, + 0xB4, 0xD0, 0x01, + // Unicode: [0x006D, m] + 0xE0, 0xE5, 0x0B, 0xF8, 0x0B, 0xE0, 0x5B, 0x7E, 0x5B, 0x2E, 0xF0, 0x02, 0xF8, 0x01, 0x78, 0xF0, + 0x00, 0xB4, 0x00, 0x78, 0xB4, 0x00, 0x74, 0x00, 0x78, 0x78, 0x00, 0x78, 0x00, 0x38, 0x38, 0x00, + 0x38, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x00, 0x2C, 0x2C, 0x00, 0x2C, 0x00, 0x2D, 0x2D, 0x00, 0x2D, + 0x00, 0x1D, 0x1D, 0x00, 0x1D, 0x00, 0x1E, + // Unicode: [0x006E, n] + 0xE0, 0xE5, 0x0B, 0xE0, 0x5B, 0x3E, 0xF0, 0x02, 0x78, 0xF0, 0x00, 0xB4, 0xB4, 0x00, 0x74, 0x78, + 0x00, 0x74, 0x38, 0x00, 0x38, 0x3C, 0x00, 0x3C, 0x2C, 0x00, 0x2C, 0x2D, 0x00, 0x2D, 0x1D, 0x00, + 0x1D, + // Unicode: [0x006F, o] + 0x00, 0xF9, 0x0B, 0x80, 0xAF, 0x3F, 0xE0, 0x01, 0xB8, 0x78, 0x00, 0xF0, 0x3C, 0x00, 0xF0, 0x2D, + 0x00, 0xF0, 0x2D, 0x00, 0xB4, 0x2D, 0x00, 0x78, 0x7C, 0x00, 0x2E, 0xF4, 0xEA, 0x0B, 0x90, 0xBF, + 0x01, + // Unicode: [0x0070, p] + 0x80, 0x97, 0xBF, 0x00, 0x78, 0xAB, 0x2F, 0xC0, 0x1F, 0xC0, 0x07, 0x7D, 0x00, 0xB4, 0xD0, 0x02, + 0x40, 0x0B, 0x1E, 0x00, 0xB4, 0xE0, 0x01, 0x80, 0x07, 0x1F, 0x00, 0x3C, 0xF0, 0x07, 0xF4, 0x41, + 0xEB, 0xEA, 0x07, 0x74, 0xF8, 0x0B, 0x80, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0xC0, 0x03, 0x00, + 0x00, 0x2C, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x00, 0xF9, 0xC6, 0x02, 0xBE, 0x7E, 0x0B, 0x1E, 0x80, 0x1F, 0x2E, 0x00, 0x7C, 0x3C, 0x00, 0xF0, + 0xB4, 0x00, 0xC0, 0xD3, 0x02, 0x40, 0x4B, 0x0B, 0x00, 0x2E, 0x7C, 0x00, 0x7E, 0xD0, 0xAB, 0xEB, + 0x01, 0xF9, 0x86, 0x03, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x74, 0x00, 0x00, 0xE0, + 0x01, 0x00, 0x80, 0x03, + // Unicode: [0x0072, r] + 0xE0, 0xA5, 0xE0, 0xBE, 0xF0, 0x06, 0xF0, 0x00, 0xB4, 0x00, 0x78, 0x00, 0x38, 0x00, 0x3C, 0x00, + 0x2C, 0x00, 0x2D, 0x00, 0x1D, 0x00, + // Unicode: [0x0073, s] + 0x80, 0xBF, 0x00, 0x6F, 0x3E, 0x74, 0x40, 0x47, 0x07, 0x10, 0xF0, 0x02, 0x00, 0xF8, 0x06, 0x00, + 0xF8, 0x41, 0x00, 0x2D, 0x1D, 0xD0, 0xC2, 0x9B, 0x1F, 0xE0, 0x6F, 0x00, + // Unicode: [0x0074, t] + 0xE0, 0x00, 0x3C, 0x00, 0x0B, 0xF8, 0x7F, 0xB9, 0x05, 0x1E, 0x80, 0x03, 0xF0, 0x00, 0x2C, 0x40, + 0x0B, 0xD0, 0x01, 0x78, 0x00, 0xAE, 0x01, 0xBE, 0x00, + // Unicode: [0x0075, u] + 0x38, 0x00, 0x38, 0x0F, 0x00, 0xCF, 0x02, 0xC0, 0xB6, 0x00, 0xB4, 0x1D, 0x00, 0x9D, 0x07, 0x80, + 0xE7, 0x00, 0xF0, 0x3C, 0x00, 0x3D, 0x1E, 0x80, 0x4B, 0x6F, 0xFE, 0x41, 0xBE, 0x75, 0x00, + // Unicode: [0x0076, v] + 0x1E, 0x00, 0xAD, 0x07, 0xC0, 0xD3, 0x02, 0x74, 0xB0, 0x00, 0x0F, 0x3C, 0xE0, 0x01, 0x1E, 0x2C, + 0x40, 0x87, 0x07, 0xD0, 0xB6, 0x00, 0xB0, 0x0E, 0x00, 0xF8, 0x02, 0x00, 0x3E, 0x00, 0x00, + // Unicode: [0x0077, w] + 0x0E, 0xC0, 0x07, 0xB0, 0x0E, 0xD0, 0x07, 0x74, 0x1E, 0xB0, 0x07, 0x3C, 0x1D, 0x74, 0x0B, 0x1D, + 0x1D, 0x2C, 0x0B, 0x0E, 0x2C, 0x1D, 0x4B, 0x07, 0x2C, 0x0A, 0x8E, 0x03, 0x68, 0x07, 0xCE, 0x01, + 0xB8, 0x02, 0xED, 0x00, 0xF8, 0x01, 0x7D, 0x00, 0xB4, 0x00, 0x3D, 0x00, + // Unicode: [0x0078, x] + 0xE0, 0x01, 0x2C, 0xF0, 0xC0, 0x03, 0x78, 0x78, 0x00, 0x6D, 0x07, 0x00, 0xBE, 0x00, 0x40, 0x0F, + 0x00, 0xF0, 0x07, 0x00, 0xDE, 0x02, 0xE0, 0xF0, 0x00, 0x1E, 0xB4, 0xD0, 0x02, 0x3C, 0x00, + // Unicode: [0x0079, y] + 0x1E, 0x00, 0x6D, 0x0B, 0x80, 0xD3, 0x02, 0x74, 0xF0, 0x00, 0x0B, 0x38, 0xE0, 0x01, 0x1E, 0x2C, + 0x40, 0x8B, 0x03, 0xC0, 0x76, 0x00, 0xF0, 0x0E, 0x00, 0xF8, 0x01, 0x00, 0x2D, 0x00, 0x80, 0x03, + 0x00, 0xB4, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x01, 0x00, 0x2C, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xF4, 0xFF, 0x53, 0x95, 0x0B, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x1E, 0x00, 0x2E, 0x00, 0x2D, 0x00, + 0x2D, 0x00, 0x3C, 0x00, 0xBC, 0x55, 0xF1, 0xFF, 0x07, + // Unicode: [0x007B, braceleft] + 0x00, 0xF8, 0x00, 0xAF, 0x40, 0x07, 0x80, 0x07, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0xC0, 0x03, + 0xC0, 0x02, 0xE0, 0x01, 0x7D, 0x00, 0x7D, 0x00, 0xB4, 0x00, 0xB0, 0x00, 0xB4, 0x00, 0x74, 0x00, + 0x38, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x1D, 0x00, 0xBD, 0x01, 0xF8, 0x01, + // Unicode: [0x007C, bar] + 0x40, 0x0B, 0x74, 0x80, 0x07, 0x38, 0xC0, 0x02, 0x2D, 0xD0, 0x01, 0x1E, 0xE0, 0x00, 0x0F, 0xB0, + 0x40, 0x0B, 0x74, 0x80, 0x07, 0x38, 0xC0, 0x03, 0x2C, 0xD0, 0x02, + // Unicode: [0x007D, braceright] + 0x00, 0x7D, 0x00, 0xE4, 0x07, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xF0, 0x00, 0xC0, 0x02, 0x40, 0x07, + 0x00, 0x0E, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x40, 0x1F, 0x00, 0x7D, 0x00, 0x2D, 0x00, 0x38, 0x00, + 0xF0, 0x00, 0xC0, 0x02, 0x00, 0x0B, 0x00, 0x2D, 0x00, 0x74, 0x00, 0xE0, 0x01, 0xE8, 0x02, 0xF4, + 0x02, 0x00, + // Unicode: [0x007E, asciitilde] + 0xE0, 0x07, 0x8A, 0xFB, 0x7A, 0x1D, 0xF8, 0x01 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_20_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_20_2bpp_4.cpp new file mode 100644 index 00000000..46b0e363 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Italic_20_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_20_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x04, 0x05, 0xE5, 0xF1, 0xF5, 0x1E, 0x4B, 0x0B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_10_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_10_2bpp_0.cpp new file mode 100644 index 00000000..9e5a8563 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_10_2bpp_0.cpp @@ -0,0 +1,198 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_10_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x37, 0x33, 0x23, 0x07, + // Unicode: [0x0022, quotedbl] + 0x90, 0x6D, 0x02, + // Unicode: [0x0023, numbersign] + 0xC0, 0x30, 0x90, 0x34, 0xFC, 0xFF, 0x60, 0x28, 0x70, 0x18, 0xFE, 0x7F, 0x34, 0x0D, 0x24, 0x09, + // Unicode: [0x0024, dollar] + 0xA0, 0xC0, 0x3E, 0x5D, 0xD1, 0x06, 0xE4, 0x02, 0x75, 0x5D, 0x87, 0x2F, 0x50, 0x00, + // Unicode: [0x0025, percent] + 0x29, 0x1C, 0x66, 0x09, 0x68, 0x03, 0x80, 0x02, 0xD0, 0x29, 0x60, 0x55, 0x24, 0x69, + // Unicode: [0x0026, ampersand] + 0xE0, 0x02, 0x24, 0x02, 0x74, 0x00, 0xDD, 0x25, 0x0A, 0x1F, 0x4A, 0x1F, 0xF8, 0x76, + // Unicode: [0x0027, quotesingle] + 0x66, + // Unicode: [0x0028, parenleft] + 0x70, 0x28, 0x0C, 0x09, 0x0A, 0x06, 0x06, 0x06, 0x09, 0x0D, 0x18, 0x70, + // Unicode: [0x0029, parenright] + 0x09, 0x28, 0x34, 0x60, 0xA0, 0x90, 0x90, 0xA0, 0x60, 0x30, 0x28, 0x0D, + // Unicode: [0x002A, asterisk] + 0x88, 0xEA, 0x22, + // Unicode: [0x002B, plus] + 0x10, 0xC0, 0x00, 0xC3, 0xFF, 0x70, 0xC0, 0x00, + // Unicode: [0x002C, comma] + 0x69, 0x02, + // Unicode: [0x002D, hyphen] + 0xFF, + // Unicode: [0x002E, period] + 0x94, + // Unicode: [0x002F, slash] + 0x80, 0x01, 0x03, 0x0D, 0x24, 0x60, 0xC0, 0x01, 0x03, 0x09, 0x28, 0x60, 0xC0, 0x40, 0x03, + // Unicode: [0x0030, zero] + 0xF4, 0xC2, 0x75, 0x0D, 0x99, 0x90, 0x09, 0xD9, 0x90, 0x5C, 0x47, 0x2F, + // Unicode: [0x0031, one] + 0x2E, 0x8A, 0xA2, 0x28, 0x8A, 0xA2, + // Unicode: [0x0032, two] + 0xF8, 0xD1, 0x34, 0x05, 0x03, 0x34, 0xC0, 0x01, 0x0A, 0x28, 0xD0, 0x7F, + // Unicode: [0x0033, three] + 0xF8, 0xD1, 0x34, 0x00, 0x03, 0x1E, 0x40, 0x53, 0x60, 0x4D, 0x87, 0x1F, + // Unicode: [0x0034, four] + 0x80, 0x07, 0x7D, 0x60, 0x47, 0x72, 0x0C, 0xE7, 0xFF, 0x00, 0x07, 0x70, + // Unicode: [0x0035, five] + 0xFF, 0x0D, 0x30, 0xC0, 0x2E, 0x87, 0x02, 0x79, 0x68, 0x2F, + // Unicode: [0x0036, six] + 0xE4, 0x82, 0x61, 0x0C, 0x90, 0x2E, 0x1D, 0xCA, 0x90, 0x1C, 0x4A, 0x2F, + // Unicode: [0x0037, seven] + 0xFE, 0x07, 0x30, 0x40, 0x02, 0x1C, 0x90, 0x00, 0x06, 0x30, 0x80, 0x02, + // Unicode: [0x0038, eight] + 0xF4, 0xC2, 0xA1, 0x0C, 0x86, 0x3F, 0x0D, 0x9A, 0x90, 0x1D, 0x4A, 0x2F, + // Unicode: [0x0039, nine] + 0xF4, 0xC2, 0x61, 0x0D, 0xC9, 0xA1, 0xF4, 0x0A, 0x90, 0x1C, 0x46, 0x2F, + // Unicode: [0x003A, colon] + 0x49, 0x00, 0x94, + // Unicode: [0x003B, semicolon] + 0x4C, 0x00, 0xC0, 0x69, + // Unicode: [0x003C, less] + 0x60, 0x1C, 0x0A, 0x1D, 0x74, + // Unicode: [0x003D, equal] + 0xFE, 0x07, 0x00, 0xFE, 0x07, + // Unicode: [0x003E, greater] + 0x09, 0x28, 0xA0, 0x34, 0x0D, + // Unicode: [0x003F, question] + 0xB8, 0x25, 0x09, 0x24, 0x6D, 0x14, 0x50, 0x80, 0x02, + // Unicode: [0x0040, at] + 0x40, 0xBE, 0x00, 0x0A, 0x34, 0x64, 0x6E, 0xC6, 0x1C, 0x97, 0xD9, 0x30, 0x95, 0x4D, 0x23, 0x8C, + 0xEA, 0x81, 0x02, 0x00, 0xA0, 0x1B, 0x00, + // Unicode: [0x0041, A] + 0xD0, 0x01, 0xA8, 0x00, 0x33, 0x90, 0x18, 0xF8, 0x0B, 0x03, 0x93, 0x80, 0x01, + // Unicode: [0x0042, B] + 0xFD, 0xD2, 0xA0, 0x0D, 0xD6, 0x3F, 0x0D, 0xDA, 0xA0, 0xFD, 0x06, + // Unicode: [0x0043, C] + 0xE0, 0x0B, 0x0B, 0x9A, 0x00, 0x28, 0x00, 0x09, 0x00, 0x4B, 0x0A, 0xBE, 0x00, + // Unicode: [0x0044, D] + 0xFD, 0x46, 0x43, 0xD3, 0x80, 0x36, 0x90, 0x0D, 0x68, 0x43, 0xD3, 0x6F, 0x00, + // Unicode: [0x0045, E] + 0xFD, 0x36, 0xD0, 0x40, 0x7F, 0x0D, 0x34, 0xD0, 0x2F, + // Unicode: [0x0046, F] + 0xFD, 0x37, 0xD0, 0x40, 0x7F, 0x0D, 0x34, 0xD0, 0x00, + // Unicode: [0x0047, G] + 0xE0, 0x0B, 0x6C, 0x29, 0x09, 0x00, 0x4A, 0x7F, 0x09, 0x70, 0x2C, 0x29, 0xE0, 0x0B, + // Unicode: [0x0048, H] + 0x0D, 0x5C, 0x03, 0xD7, 0xC0, 0xF5, 0x7F, 0x0D, 0x5C, 0x03, 0xD7, 0xC0, 0x01, + // Unicode: [0x0049, I] + 0xDD, 0xDD, 0xDD, 0x0D, + // Unicode: [0x004A, J] + 0x80, 0x02, 0x0A, 0x28, 0xA0, 0x80, 0x26, 0x86, 0x0B, + // Unicode: [0x004B, K] + 0x0D, 0xDA, 0x28, 0xAD, 0xD0, 0x07, 0xAD, 0xD0, 0x28, 0x0D, 0x0A, + // Unicode: [0x004C, L] + 0x0D, 0x34, 0xD0, 0x40, 0x03, 0x0D, 0x34, 0xD0, 0x1F, + // Unicode: [0x004D, M] + 0x1D, 0xD0, 0x2D, 0xE0, 0x3D, 0xF4, 0xAD, 0xD8, 0xCD, 0xCD, 0x8D, 0xC7, 0x4D, 0xC3, + // Unicode: [0x004E, N] + 0x1D, 0x58, 0x0F, 0xD6, 0x8A, 0x35, 0x67, 0x4D, 0x5A, 0x83, 0xD7, 0xC0, 0x01, + // Unicode: [0x004F, O] + 0xE0, 0x0B, 0x2C, 0x28, 0x09, 0x70, 0x0A, 0x60, 0x09, 0x70, 0x2C, 0x28, 0xE0, 0x0B, + // Unicode: [0x0050, P] + 0xFD, 0xD2, 0xA0, 0x0D, 0xD6, 0x2F, 0x0D, 0xD0, 0x00, 0x0D, 0x00, + // Unicode: [0x0051, Q] + 0xE0, 0x0B, 0x2C, 0x28, 0x09, 0x70, 0x0A, 0x60, 0x09, 0x70, 0x2C, 0x28, 0xE0, 0x0F, 0x00, 0x28, + 0x00, 0x50, + // Unicode: [0x0052, R] + 0xFD, 0xD2, 0xA0, 0x0D, 0xD6, 0x2F, 0xCD, 0xD1, 0x34, 0x0D, 0x07, + // Unicode: [0x0053, S] + 0xF8, 0xD2, 0x74, 0x1D, 0x40, 0x1E, 0x00, 0xD7, 0x70, 0xF8, 0x02, + // Unicode: [0x0054, T] + 0xFE, 0x07, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, + // Unicode: [0x0055, U] + 0x0D, 0x5C, 0x03, 0xD7, 0xC0, 0x35, 0x70, 0x0D, 0x0C, 0x47, 0x43, 0x6F, 0x00, + // Unicode: [0x0056, V] + 0x0A, 0x68, 0x03, 0xC7, 0x91, 0xA0, 0x18, 0x30, 0x03, 0xA8, 0x00, 0x1D, 0x00, + // Unicode: [0x0057, W] + 0x0A, 0x0A, 0x9A, 0xF0, 0x60, 0x4C, 0x1A, 0xC3, 0x99, 0x26, 0xA8, 0xA4, 0x41, 0x0F, 0x1F, 0xB0, + 0xE0, 0x00, + // Unicode: [0x0058, X] + 0x0D, 0x89, 0x72, 0xB0, 0x02, 0x0D, 0xF0, 0x82, 0x72, 0x0D, 0x09, + // Unicode: [0x0059, Y] + 0x0A, 0xCA, 0x30, 0xA8, 0x02, 0x0F, 0xA0, 0x00, 0x0A, 0xA0, 0x00, + // Unicode: [0x005A, Z] + 0xFE, 0x03, 0x0A, 0x0D, 0x18, 0x28, 0x74, 0xD0, 0x3F, + // Unicode: [0x005B, bracketleft] + 0xAE, 0xA2, 0x28, 0x8A, 0xA2, 0x28, 0x8A, 0xA2, 0xB8, + // Unicode: [0x005C, backslash] + 0x0D, 0x30, 0x80, 0x01, 0x09, 0x34, 0xC0, 0x00, 0x06, 0x24, 0xD0, 0x00, 0x03, 0x18, 0x90, + // Unicode: [0x005D, bracketright] + 0x1E, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x79, + // Unicode: [0x005E, asciicircum] + 0x50, 0x00, 0x1E, 0xB0, 0x82, 0x32, 0x1C, 0x9A, 0xD0, + // Unicode: [0x005F, underscore] + 0xFE, 0x0B, + // Unicode: [0x0060, grave] + 0x81, 0x42, 0x01, + // Unicode: [0x0061, a] + 0xF4, 0xDD, 0xE1, 0x0A, 0xAD, 0xD0, 0x1D, 0x4E, 0xEF, + // Unicode: [0x0062, b] + 0x0D, 0x40, 0x03, 0xD0, 0x7E, 0xB4, 0x34, 0x0D, 0x5C, 0x03, 0xD7, 0xD2, 0xB4, 0x1F, + // Unicode: [0x0063, c] + 0xF4, 0xD2, 0x61, 0x0A, 0xA0, 0x00, 0x1D, 0x47, 0x2F, + // Unicode: [0x0064, d] + 0x00, 0x0C, 0xC0, 0xF4, 0xDD, 0xE1, 0x0A, 0xAD, 0xD0, 0x1D, 0x4E, 0xEF, + // Unicode: [0x0065, e] + 0xF4, 0x92, 0xA0, 0xFE, 0xAB, 0x00, 0x1D, 0x47, 0x2F, + // Unicode: [0x0066, f] + 0x38, 0xE7, 0x33, 0x0C, 0xC3, 0x30, + // Unicode: [0x0067, g] + 0xF4, 0xDE, 0xE1, 0x0A, 0xAD, 0xD0, 0x1D, 0x4E, 0xDF, 0x00, 0xCD, 0xA1, 0xF4, 0x02, + // Unicode: [0x0068, h] + 0x0D, 0xD0, 0x00, 0xED, 0xD2, 0xA1, 0x0D, 0xD9, 0x90, 0x0D, 0xD9, 0x90, + // Unicode: [0x0069, i] + 0x4D, 0xDD, 0xDD, 0xDD, + // Unicode: [0x006A, j] + 0x34, 0x44, 0xD3, 0x34, 0x4D, 0xD3, 0x34, 0xDD, 0x01, + // Unicode: [0x006B, k] + 0x0D, 0x34, 0xD0, 0x74, 0x77, 0x7D, 0xF4, 0xD1, 0x5D, 0xD3, + // Unicode: [0x006C, l] + 0xDD, 0xDD, 0xDD, 0xDD, + // Unicode: [0x006D, m] + 0xED, 0xE6, 0xD2, 0xE1, 0xA1, 0x0D, 0x09, 0xD9, 0x90, 0x90, 0x0D, 0x09, 0xD9, 0x90, 0x90, + // Unicode: [0x006E, n] + 0xED, 0xD2, 0xA1, 0x0D, 0xD9, 0x90, 0x0D, 0xD9, 0x90, + // Unicode: [0x006F, o] + 0xF4, 0xD2, 0xA1, 0x0A, 0xAD, 0xD0, 0x1D, 0x4A, 0x2F, + // Unicode: [0x0070, p] + 0xED, 0x47, 0x4B, 0xD3, 0xC0, 0x35, 0x70, 0x2D, 0x4D, 0xFB, 0xD1, 0x00, 0x34, 0x00, 0x0D, 0x00, + // Unicode: [0x0071, q] + 0xF4, 0xDD, 0xE1, 0x0A, 0xAD, 0xD0, 0x1D, 0x4E, 0xDF, 0x00, 0x0C, 0xC0, 0x00, 0x0C, + // Unicode: [0x0072, r] + 0xAD, 0x2D, 0x0D, 0x0D, 0x0D, 0x0D, + // Unicode: [0x0073, s] + 0xB8, 0x25, 0xDA, 0x06, 0xB4, 0x49, 0xE2, 0x07, + // Unicode: [0x0074, t] + 0x0C, 0x7E, 0x0C, 0x0C, 0x0C, 0x1C, 0x78, + // Unicode: [0x0075, u] + 0x09, 0x99, 0x90, 0x09, 0xD9, 0x90, 0x1C, 0x4A, 0xAF, + // Unicode: [0x0076, v] + 0x06, 0x96, 0x30, 0x4C, 0x82, 0x19, 0xE4, 0x00, 0x0B, + // Unicode: [0x0077, w] + 0x86, 0xC3, 0x89, 0x93, 0xCD, 0x66, 0x9C, 0x29, 0x78, 0x3C, 0x34, 0x2C, + // Unicode: [0x0078, x] + 0x8A, 0x72, 0x43, 0x07, 0x1D, 0xDC, 0x28, 0x0A, + // Unicode: [0x0079, y] + 0x0A, 0xDA, 0x30, 0x5C, 0x82, 0x1A, 0xF4, 0x00, 0x0B, 0x70, 0x40, 0x03, 0x28, 0x00, + // Unicode: [0x007A, z] + 0xFE, 0x41, 0x03, 0x07, 0x0A, 0x0D, 0xF8, 0x07, + // Unicode: [0x007B, braceleft] + 0x74, 0x1C, 0x1C, 0x18, 0x18, 0x0D, 0x0E, 0x18, 0x18, 0x1C, 0x1C, 0x78, + // Unicode: [0x007C, bar] + 0x72, 0x77, 0x77, 0x77, 0x77, + // Unicode: [0x007D, braceright] + 0x4B, 0xC3, 0x30, 0x0D, 0x8B, 0x32, 0x0C, 0xC3, 0x2C, + // Unicode: [0x007E, asciitilde] + 0x28, 0x96, 0x0B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_10_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_10_2bpp_4.cpp new file mode 100644 index 00000000..fb8a342f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_10_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_10_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x44, 0x94, 0x99 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_18_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_18_2bpp_0.cpp new file mode 100644 index 00000000..c64acd29 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_18_2bpp_0.cpp @@ -0,0 +1,309 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x7D, 0xDF, 0xB3, 0x2C, 0xCB, 0xB2, 0x18, 0xD5, 0xB3, + // Unicode: [0x0022, quotedbl] + 0x59, 0x76, 0xDE, 0x79, 0xD7, + // Unicode: [0x0023, numbersign] + 0x00, 0x78, 0xC0, 0x02, 0x00, 0x0F, 0xB4, 0x00, 0xC0, 0x03, 0x1E, 0xD0, 0xFF, 0xFF, 0xBF, 0xA4, + 0xBF, 0xFA, 0x1A, 0x80, 0x07, 0x2D, 0x00, 0xF0, 0x40, 0x07, 0x00, 0x2D, 0xE0, 0x01, 0xFD, 0xFF, + 0xFF, 0x4B, 0xFA, 0xEB, 0xAF, 0x01, 0x38, 0xD0, 0x02, 0x00, 0x0F, 0x78, 0x00, 0xD0, 0x02, 0x1E, + 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x02, 0x00, 0x0C, 0x40, 0xFE, 0x42, 0xEF, 0x3F, 0x1E, 0xE3, 0x7D, 0x0C, 0xE1, 0x36, 0x40, + 0xFF, 0x01, 0xE0, 0xBF, 0x00, 0xDC, 0x07, 0x30, 0xAD, 0xC7, 0xB4, 0x7E, 0xF7, 0xE1, 0xFF, 0x02, + 0x79, 0x01, 0xC0, 0x00, + // Unicode: [0x0025, percent] + 0xE4, 0x06, 0x78, 0xC0, 0xE6, 0xD0, 0x02, 0x1D, 0x1D, 0x1E, 0xC0, 0xE2, 0xB4, 0x00, 0xF4, 0xC7, + 0x03, 0x00, 0x00, 0x1E, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x80, 0x87, 0x1F, 0x00, 0x2D, 0x9E, 0x07, + 0xF0, 0xB0, 0x70, 0x80, 0x07, 0x4E, 0x07, 0x2D, 0x80, 0x1F, + // Unicode: [0x0026, ampersand] + 0x40, 0xBE, 0x01, 0x00, 0xBC, 0x3E, 0x00, 0xD0, 0x82, 0x06, 0x00, 0x3C, 0x00, 0x00, 0x80, 0x0B, + 0x00, 0x00, 0xEF, 0x03, 0x1A, 0x7C, 0xF4, 0xF5, 0xD0, 0x02, 0xFD, 0x07, 0x2D, 0x40, 0x3F, 0xC0, + 0x07, 0xF8, 0x07, 0xF8, 0xFB, 0xF7, 0x01, 0xF9, 0x0B, 0x7D, + // Unicode: [0x0027, quotesingle] + 0x59, 0xD7, 0x75, + // Unicode: [0x0028, parenleft] + 0x40, 0x0F, 0x7C, 0xE0, 0x41, 0x0B, 0x78, 0xC0, 0x03, 0x2D, 0xE0, 0x01, 0x1E, 0xE0, 0x01, 0x1E, + 0xE0, 0x01, 0x1E, 0xD0, 0x02, 0x3C, 0xC0, 0x07, 0xB4, 0x00, 0x1F, 0xD0, 0x03, 0xB8, + // Unicode: [0x0029, parenright] + 0x3D, 0x00, 0x3D, 0x00, 0x2E, 0x00, 0x0F, 0x80, 0x0B, 0xC0, 0x03, 0xF0, 0x01, 0x78, 0x00, 0x2D, + 0x40, 0x0B, 0xD0, 0x02, 0xB4, 0x00, 0x1E, 0x80, 0x07, 0xF0, 0x00, 0x2D, 0xC0, 0x07, 0xB4, 0x40, + 0x1F, 0xF0, 0x01, + // Unicode: [0x002A, asterisk] + 0xD0, 0x41, 0x32, 0xD6, 0xEE, 0xD1, 0x1F, 0xEE, 0x6E, 0x71, 0x05, 0x19, 0x00, + // Unicode: [0x002B, plus] + 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x80, 0xFA, 0xAA, 0xFF, 0xFF, 0x03, 0x1E, 0x00, 0x78, 0x00, + 0xE0, 0x01, 0x80, 0x07, 0x00, + // Unicode: [0x002C, comma] + 0x78, 0x3C, 0x2D, 0x0E, 0x0A, + // Unicode: [0x002D, hyphen] + 0xA9, 0xAA, 0xFD, 0xFF, + // Unicode: [0x002E, period] + 0xC9, 0xE7, 0x01, + // Unicode: [0x002F, slash] + 0x00, 0x3C, 0x40, 0x0B, 0xE0, 0x01, 0x3C, 0x00, 0x0F, 0xD0, 0x02, 0x78, 0x00, 0x1F, 0xC0, 0x03, + 0xB4, 0x00, 0x1E, 0xC0, 0x07, 0xF0, 0x00, 0x2D, 0x80, 0x07, 0xE0, 0x01, 0x3C, 0x40, 0x0B, 0xE0, + 0x01, 0x78, 0x00, + // Unicode: [0x0030, zero] + 0xD0, 0x6F, 0x80, 0xFF, 0x1F, 0x7D, 0xE0, 0xE2, 0x01, 0x3C, 0x1E, 0x80, 0xF7, 0x00, 0x78, 0x0F, + 0x80, 0xF7, 0x00, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x3C, 0x7D, 0xE0, 0x82, 0xFF, 0x1F, 0xD0, 0x6F, + 0x00, + // Unicode: [0x0031, one] + 0xFD, 0xF2, 0x0B, 0x2E, 0xB8, 0xE0, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, + 0x02, + // Unicode: [0x0032, two] + 0xE4, 0x1B, 0xF4, 0xFB, 0xE2, 0x41, 0xCF, 0x03, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, + 0x80, 0x0B, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0B, 0xC0, 0xAF, 0x6A, 0xFF, 0xFF, 0x02, + // Unicode: [0x0033, three] + 0xE4, 0x2F, 0xF4, 0xFB, 0xE2, 0x02, 0x5F, 0x01, 0x78, 0x00, 0xF0, 0x00, 0xFA, 0x01, 0xFC, 0x06, + 0x00, 0x3D, 0x00, 0xD0, 0x29, 0x40, 0xFB, 0x01, 0x5E, 0xBF, 0x3F, 0xE4, 0x2F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0xD0, 0x07, 0x00, 0xFD, 0x01, 0xC0, 0x7B, 0x00, 0x78, 0x1E, 0x40, 0x8B, 0x07, 0xF0, 0xE0, + 0x01, 0x1E, 0x78, 0xD0, 0x02, 0x1E, 0xBC, 0xEA, 0x6F, 0xFF, 0xFF, 0x0F, 0x00, 0x78, 0x00, 0x00, + 0x1E, 0x00, 0x80, 0x07, + // Unicode: [0x0035, five] + 0xFD, 0xFF, 0xD2, 0xAB, 0x1A, 0x2D, 0x00, 0xD0, 0x02, 0x00, 0xAD, 0x6F, 0xD0, 0xAF, 0x2F, 0x7D, + 0xD0, 0x43, 0x01, 0x78, 0x00, 0x80, 0x97, 0x01, 0x78, 0x3D, 0xD0, 0x83, 0xAF, 0x1F, 0x90, 0x6F, + 0x00, + // Unicode: [0x0036, six] + 0x90, 0x6F, 0x40, 0xAF, 0x1F, 0x7C, 0xD0, 0xD2, 0x01, 0x00, 0x5E, 0x6A, 0xE0, 0xFE, 0x1F, 0x7E, + 0xE0, 0xE3, 0x02, 0x78, 0x1E, 0x80, 0xD7, 0x01, 0x78, 0x3C, 0xD0, 0x43, 0xAF, 0x1F, 0x90, 0x6F, + 0x00, + // Unicode: [0x0037, seven] + 0xFD, 0xFF, 0x97, 0xAA, 0x7E, 0x00, 0xC0, 0x03, 0x00, 0x2D, 0x00, 0xF0, 0x00, 0x40, 0x0B, 0x00, + 0x78, 0x00, 0xD0, 0x02, 0x00, 0x1E, 0x00, 0xF0, 0x00, 0x80, 0x07, 0x00, 0x3C, 0x00, 0xD0, 0x02, + 0x00, + // Unicode: [0x0038, eight] + 0xE0, 0x6F, 0xC0, 0xAF, 0x1F, 0x2D, 0xD0, 0xE3, 0x01, 0x3C, 0x7C, 0xE0, 0x42, 0xFF, 0x0B, 0xBC, + 0xFA, 0xE1, 0x02, 0x3C, 0x0F, 0x80, 0xF7, 0x01, 0x78, 0x2E, 0xD0, 0xC3, 0xAF, 0x1F, 0xE0, 0x6F, + 0x00, + // Unicode: [0x0039, nine] + 0xE0, 0x6F, 0x80, 0xAF, 0x0F, 0x3D, 0xD0, 0xE2, 0x01, 0x3C, 0x1E, 0x80, 0xD3, 0x03, 0x7D, 0xF8, + 0xFA, 0x07, 0xFE, 0x7A, 0x00, 0x80, 0x83, 0x01, 0x38, 0x7C, 0xD0, 0x42, 0xAF, 0x1F, 0x90, 0x6F, + 0x00, + // Unicode: [0x003A, colon] + 0xDE, 0x97, 0x00, 0x00, 0x00, 0x24, 0x9F, 0x07, + // Unicode: [0x003B, semicolon] + 0xB4, 0xB8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x78, 0x38, 0x2C, 0x0D, + // Unicode: [0x003C, less] + 0x80, 0x0B, 0x2E, 0xB8, 0xE0, 0x02, 0x2E, 0x80, 0x0F, 0xE0, 0x03, 0xF8, + // Unicode: [0x003D, equal] + 0xAA, 0xAA, 0xEA, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xEA, 0xFF, 0xBF, + // Unicode: [0x003E, greater] + 0x7D, 0x00, 0x7D, 0x00, 0x7D, 0x00, 0x7D, 0x40, 0x1F, 0xF4, 0x41, 0x1F, 0xF4, 0x01, + // Unicode: [0x003F, question] + 0xE0, 0x6F, 0xE0, 0xFB, 0xD7, 0x03, 0x2D, 0x01, 0xB4, 0x00, 0xF5, 0x41, 0xFF, 0x02, 0x6D, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x2E, 0x00, 0xB4, 0x00, + // Unicode: [0x0040, at] + 0x00, 0xE4, 0xFF, 0x02, 0x00, 0xBE, 0x95, 0x1F, 0x80, 0x07, 0x00, 0x78, 0xE0, 0x01, 0x00, 0xB0, + 0x78, 0xE0, 0xEB, 0xE1, 0x2C, 0xB8, 0xFE, 0xE1, 0x1D, 0x2E, 0xF0, 0xE0, 0x0E, 0x0F, 0xF0, 0xE0, + 0x0E, 0x0B, 0xB0, 0xA0, 0x0E, 0x0F, 0xB8, 0x74, 0x0E, 0x6E, 0xFE, 0x2D, 0x1D, 0xF8, 0xD2, 0x0B, + 0x7C, 0x00, 0x00, 0x00, 0xF0, 0x06, 0x15, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x54, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0xBC, 0x00, 0x00, 0xFD, 0x00, 0x00, 0xFF, 0x01, 0x40, 0xDF, 0x02, 0x80, 0xCB, 0x03, 0xC0, + 0x83, 0x0B, 0xD0, 0x42, 0x0F, 0xE0, 0x01, 0x1F, 0xF0, 0xFF, 0x2F, 0xF4, 0xAA, 0x3E, 0x78, 0x00, + 0x78, 0x3D, 0x00, 0xB4, + // Unicode: [0x0042, B] + 0xFE, 0x6F, 0xE0, 0xAA, 0x2F, 0x1E, 0xD0, 0xE3, 0x01, 0x3C, 0x1E, 0xE0, 0xE2, 0xFF, 0x0B, 0xAE, + 0xFA, 0xE1, 0x01, 0x3C, 0x1E, 0x80, 0xE7, 0x01, 0x7C, 0xAE, 0xFA, 0xE2, 0xFF, 0x0B, + // Unicode: [0x0043, C] + 0x00, 0xF9, 0x0A, 0x40, 0xFF, 0xFF, 0x41, 0x2F, 0x80, 0x1F, 0x2E, 0x00, 0x64, 0x3C, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xB8, 0x00, 0x90, 0xD1, 0x0B, 0xE0, + 0x07, 0xFD, 0xFA, 0x07, 0x40, 0xBE, 0x02, + // Unicode: [0x0044, D] + 0xFE, 0x6F, 0x80, 0xAB, 0xFE, 0xE1, 0x01, 0xF8, 0x78, 0x00, 0xB8, 0x1E, 0x00, 0xBD, 0x07, 0x00, + 0xEF, 0x01, 0xC0, 0x7B, 0x00, 0xF4, 0x1E, 0x00, 0xAE, 0x07, 0xE0, 0xE3, 0xAA, 0x7F, 0xF8, 0xBF, + 0x01, + // Unicode: [0x0045, E] + 0xFE, 0x7F, 0xAE, 0x6A, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0xFE, 0x2F, 0xAE, 0x1A, 0x1E, 0x00, + 0x1E, 0x00, 0x1E, 0x00, 0xAE, 0x6A, 0xFE, 0x7F, + // Unicode: [0x0046, F] + 0xFE, 0xBF, 0xAE, 0x6A, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0xFE, 0x2F, 0xAE, 0x1A, 0x1E, 0x00, + 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xF9, 0x0B, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0x02, 0xF8, 0x81, 0x0B, 0x00, 0x15, 0x3C, 0x00, + 0x00, 0xD0, 0x02, 0xFE, 0x7F, 0x2D, 0x90, 0xEA, 0xC7, 0x03, 0x00, 0x3D, 0xB8, 0x00, 0xE0, 0x42, + 0x2F, 0x80, 0x0F, 0xD0, 0xFF, 0x7F, 0x00, 0x90, 0x6F, 0x00, + // Unicode: [0x0048, H] + 0x1E, 0x00, 0x9E, 0x07, 0x80, 0xE7, 0x01, 0xE0, 0x79, 0x00, 0x78, 0x1E, 0x00, 0x9E, 0xFF, 0xFF, + 0xE7, 0xAA, 0xFA, 0x79, 0x00, 0x78, 0x1E, 0x00, 0x9E, 0x07, 0x80, 0xE7, 0x01, 0xE0, 0x79, 0x00, + 0x78, + // Unicode: [0x0049, I] + 0x9E, 0xE7, 0x79, 0x9E, 0xE7, 0x79, 0x9E, 0xE7, 0x79, + // Unicode: [0x004A, J] + 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, + 0x06, 0x3C, 0x1F, 0x3D, 0xFE, 0x2F, 0xF4, 0x07, + // Unicode: [0x004B, K] + 0x1E, 0xD0, 0xE7, 0x01, 0x1F, 0x1E, 0xBC, 0xE0, 0xE1, 0x02, 0x9E, 0x0B, 0xE0, 0x2F, 0x00, 0xFE, + 0x02, 0xE0, 0xB9, 0x00, 0x1E, 0x2F, 0xE0, 0xC1, 0x0B, 0x1E, 0xF4, 0xE2, 0x01, 0x7D, + // Unicode: [0x004C, L] + 0x1E, 0x80, 0x07, 0xE0, 0x01, 0x78, 0x00, 0x1E, 0x80, 0x07, 0xE0, 0x01, 0x78, 0x00, 0x1E, 0x80, + 0x07, 0xE0, 0xAA, 0xF9, 0xBF, + // Unicode: [0x004D, M] + 0x2E, 0x00, 0xC0, 0xEB, 0x07, 0x00, 0xBD, 0xBE, 0x00, 0xE0, 0xEB, 0x1F, 0x40, 0xBF, 0xEE, 0x02, + 0xB8, 0xEB, 0x39, 0xD0, 0xBA, 0x5E, 0x0B, 0x9E, 0xEB, 0xF1, 0xB0, 0xB8, 0x1E, 0xAD, 0x87, 0xEB, + 0xC1, 0x2F, 0xB8, 0x1E, 0xF4, 0x81, 0xEB, 0x01, 0x0F, 0xB8, + // Unicode: [0x004E, N] + 0x2E, 0x00, 0xAD, 0x1F, 0x40, 0xEB, 0x0F, 0xD0, 0xBA, 0x0B, 0xB4, 0x9E, 0x0B, 0xAD, 0xC7, 0x47, + 0xEB, 0xD1, 0xD3, 0x7A, 0xE0, 0xB6, 0x1E, 0xE0, 0xAE, 0x07, 0xF4, 0xEB, 0x01, 0xF4, 0x7A, 0x00, + 0xB8, + // Unicode: [0x004F, O] + 0x00, 0xF9, 0x0A, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0x02, 0xF4, 0x81, 0x0B, 0x00, 0x3D, 0x3C, 0x00, + 0xC0, 0xD7, 0x02, 0x00, 0x78, 0x2D, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x7C, 0xB8, 0x00, 0xD0, 0x43, + 0x2F, 0x40, 0x1F, 0xD0, 0xAF, 0x7F, 0x00, 0x90, 0xAF, 0x00, + // Unicode: [0x0050, P] + 0xFE, 0x6F, 0xB8, 0xEA, 0xE7, 0x01, 0xBD, 0x07, 0xF0, 0x1E, 0xD0, 0xBB, 0xEA, 0xE7, 0xFF, 0x86, + 0x07, 0x00, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xF9, 0x0A, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0x02, 0xF4, 0x81, 0x0B, 0x00, 0x3D, 0x3C, 0x00, + 0xC0, 0xD7, 0x02, 0x00, 0x78, 0x2D, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x7C, 0xB8, 0x00, 0xD0, 0x43, + 0x2F, 0x40, 0x1F, 0xD0, 0xAF, 0x7F, 0x00, 0x90, 0xEF, 0x07, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, + 0x7D, + // Unicode: [0x0052, R] + 0xFE, 0x6F, 0xB8, 0xEA, 0xE7, 0x01, 0xBD, 0x07, 0xF0, 0x1E, 0xD0, 0xBB, 0xEA, 0xE7, 0xFF, 0x86, + 0x87, 0x0B, 0x1E, 0x7D, 0x78, 0xE0, 0xE2, 0x01, 0x9F, 0x07, 0xF4, + // Unicode: [0x0053, S] + 0xE4, 0x2F, 0xF4, 0xFB, 0xE3, 0x01, 0xDF, 0x07, 0x10, 0x6E, 0x00, 0xE0, 0x6F, 0x00, 0xE9, 0x0B, + 0x00, 0xB8, 0x05, 0xD0, 0xBA, 0x80, 0xDB, 0xEF, 0x0F, 0xF9, 0x0B, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0x97, 0xFA, 0x6A, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x00, + 0x0F, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0xF0, 0x00, + // Unicode: [0x0055, U] + 0x1E, 0x00, 0xEF, 0x01, 0xF0, 0x1E, 0x00, 0xEF, 0x01, 0xF0, 0x1E, 0x00, 0xEF, 0x01, 0xF0, 0x1E, + 0x00, 0xEF, 0x01, 0xF0, 0x2E, 0x00, 0xDF, 0x07, 0xB8, 0xF8, 0xFB, 0x03, 0xF9, 0x0B, + // Unicode: [0x0056, V] + 0x2D, 0x00, 0xF4, 0x3C, 0x00, 0xB8, 0x78, 0x00, 0x3C, 0xF4, 0x00, 0x2D, 0xF0, 0x01, 0x1E, 0xD0, + 0x02, 0x0F, 0xC0, 0x43, 0x0B, 0x80, 0x87, 0x07, 0x40, 0xDB, 0x02, 0x00, 0xEF, 0x01, 0x00, 0xFE, + 0x00, 0x00, 0xBC, 0x00, + // Unicode: [0x0057, W] + 0x2E, 0x40, 0x1F, 0x80, 0xD7, 0x03, 0xF8, 0x02, 0x7C, 0x7C, 0x80, 0x3F, 0xD0, 0x83, 0x07, 0xEC, + 0x03, 0x2E, 0xB4, 0xD0, 0x79, 0xE0, 0x01, 0x0F, 0x5E, 0x0B, 0x0F, 0xE0, 0xF1, 0xF0, 0xB4, 0x00, + 0x6D, 0x0B, 0x9E, 0x07, 0xC0, 0x7A, 0xD0, 0x3D, 0x00, 0xFC, 0x03, 0xFC, 0x02, 0x80, 0x2F, 0x80, + 0x1F, 0x00, 0xF4, 0x01, 0xF8, 0x00, + // Unicode: [0x0058, X] + 0x2E, 0x80, 0xCB, 0x07, 0x3D, 0xB4, 0xE0, 0x01, 0x5E, 0x0B, 0xD0, 0x3F, 0x00, 0xF8, 0x01, 0x80, + 0x1F, 0x00, 0xFD, 0x03, 0xE0, 0xB9, 0x40, 0x0B, 0x1F, 0x3C, 0xD0, 0xE3, 0x02, 0xB8, + // Unicode: [0x0059, Y] + 0x2D, 0x00, 0x1F, 0x1F, 0xD0, 0x42, 0x0B, 0x7C, 0x80, 0x47, 0x0B, 0xD0, 0xF2, 0x01, 0xE0, 0x2E, + 0x00, 0xF4, 0x03, 0x00, 0xB8, 0x00, 0x00, 0x1E, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x01, 0x00, 0x78, + 0x00, + // Unicode: [0x005A, Z] + 0xFF, 0xFF, 0xAA, 0xFE, 0x00, 0xB8, 0x00, 0x2D, 0x00, 0x1F, 0x80, 0x0B, 0xD0, 0x02, 0xF4, 0x01, + 0x78, 0x00, 0x2D, 0x00, 0xBF, 0xAA, 0xFF, 0xFF, + // Unicode: [0x005B, bracketleft] + 0xFD, 0xF5, 0xD6, 0x42, 0x0B, 0x2D, 0xB4, 0xD0, 0x42, 0x0B, 0x2D, 0xB4, 0xD0, 0x42, 0x0B, 0x2D, + 0xB4, 0xD0, 0x42, 0x0B, 0x2D, 0xB4, 0xD0, 0x5B, 0x7F, + // Unicode: [0x005C, backslash] + 0x0F, 0x00, 0x1E, 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xB4, 0x00, 0xF0, 0x00, + 0xE0, 0x01, 0xD0, 0x02, 0xD0, 0x02, 0xC0, 0x03, 0x80, 0x07, 0x40, 0x0B, 0x00, 0x0F, 0x00, 0x0F, + 0x00, 0x1E, 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x78, + // Unicode: [0x005D, bracketright] + 0xFE, 0xF9, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0xF0, 0xF0, 0xF9, 0xFE, + // Unicode: [0x005E, asciicircum] + 0x00, 0x06, 0x00, 0xF8, 0x01, 0xC0, 0x2F, 0x00, 0xED, 0x07, 0xF0, 0xB5, 0x40, 0x0B, 0x0F, 0x78, + 0xE0, 0xD2, 0x03, 0x3C, 0x1E, 0x80, 0xF7, 0x00, 0xF4, + // Unicode: [0x005F, underscore] + 0xFE, 0xFF, 0x9F, 0xFF, 0xFF, 0x07, + // Unicode: [0x0060, grave] + 0x06, 0x7E, 0xE4, + // Unicode: [0x0061, a] + 0x80, 0x7F, 0x3D, 0xFC, 0xBE, 0x8F, 0x0B, 0xF4, 0xF3, 0x00, 0xF8, 0x2D, 0x00, 0x7D, 0x0B, 0x40, + 0xCF, 0x03, 0xE0, 0xE3, 0x02, 0xFD, 0xF0, 0xEB, 0x3F, 0xE0, 0x5F, 0x0F, + // Unicode: [0x0062, b] + 0x1E, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x01, 0x00, 0x78, 0xF9, 0x06, 0xEE, 0xFB, 0x87, 0x2F, 0xE0, + 0xE3, 0x02, 0xF0, 0x79, 0x00, 0x78, 0x1E, 0x00, 0x9E, 0x0B, 0xC0, 0xE7, 0x0B, 0xF8, 0xB8, 0xEF, + 0x1F, 0x5E, 0xBE, 0x01, + // Unicode: [0x0063, c] + 0x80, 0xBF, 0x00, 0xBF, 0x7F, 0xB8, 0x80, 0xCB, 0x03, 0x50, 0x3D, 0x00, 0xD0, 0x02, 0x00, 0x3C, + 0x00, 0x85, 0x0B, 0xB8, 0xF0, 0xFB, 0x07, 0xF8, 0x0B, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x3D, 0x00, 0x40, 0x0F, 0x00, 0xD0, 0x03, 0xBE, 0xF5, 0xF0, 0xFB, 0x3F, 0x2E, 0xD0, + 0xCF, 0x03, 0xE0, 0xB7, 0x00, 0xF4, 0x2D, 0x00, 0x3D, 0x0F, 0x80, 0x8F, 0x0B, 0xF4, 0xC3, 0xAF, + 0xFF, 0x80, 0xBF, 0x3D, + // Unicode: [0x0065, e] + 0x80, 0xBF, 0x00, 0xFC, 0xFE, 0x81, 0x0B, 0xF4, 0xF0, 0x00, 0x78, 0xFD, 0xFF, 0x5F, 0xAF, 0xAA, + 0xC6, 0x03, 0x00, 0xE0, 0x02, 0x3E, 0xF0, 0xFB, 0x07, 0xE0, 0x2F, 0x00, + // Unicode: [0x0066, f] + 0x40, 0x05, 0x7E, 0xF4, 0x41, 0x0B, 0xFE, 0x9B, 0x6F, 0xB4, 0x40, 0x0B, 0xB4, 0x40, 0x0B, 0xB4, + 0x40, 0x0B, 0xB4, 0x40, 0x0B, + // Unicode: [0x0067, g] + 0x80, 0xBF, 0x3D, 0xFC, 0xFA, 0x8F, 0x0B, 0xF4, 0xF3, 0x00, 0xF8, 0x2D, 0x00, 0x7D, 0x0F, 0x40, + 0xCF, 0x03, 0xE0, 0xE3, 0x02, 0xFD, 0xF0, 0xFB, 0x3E, 0xE0, 0x5B, 0x0F, 0x00, 0xD0, 0xA2, 0x01, + 0xB4, 0xF8, 0x40, 0x1F, 0xF8, 0xFE, 0x02, 0xE4, 0x1B, 0x00, + // Unicode: [0x0068, h] + 0x1E, 0x00, 0xE0, 0x01, 0x00, 0x1E, 0x00, 0xE0, 0xF9, 0x07, 0xFE, 0xFF, 0xE2, 0x07, 0x3D, 0x2E, + 0x80, 0xE7, 0x01, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x1E, 0x80, + 0x07, + // Unicode: [0x0069, i] + 0xC5, 0xEB, 0x01, 0x9E, 0xE7, 0x79, 0x9E, 0xE7, 0x79, 0x9E, 0x07, + // Unicode: [0x006A, j] + 0x50, 0xC0, 0x0B, 0x1E, 0x00, 0xE0, 0x81, 0x07, 0x1E, 0x78, 0xE0, 0x81, 0x07, 0x1E, 0x78, 0xE0, + 0x81, 0x07, 0x1E, 0x78, 0xE0, 0xE5, 0xE3, 0x07, + // Unicode: [0x006B, k] + 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x7D, 0x1E, 0x7D, 0x78, 0xBC, 0xE0, 0xB9, 0x80, + 0xBF, 0x00, 0xFE, 0x02, 0x78, 0x2F, 0xE0, 0xF1, 0x82, 0x47, 0x1F, 0x1E, 0xF4, 0x01, + // Unicode: [0x006C, l] + 0x9E, 0xE7, 0x79, 0x9E, 0xE7, 0x79, 0x9E, 0xE7, 0x79, 0x1E, + // Unicode: [0x006D, m] + 0x9E, 0x7F, 0xE0, 0x1F, 0xF8, 0xEB, 0xEB, 0xFA, 0xE2, 0x03, 0xFD, 0x40, 0x8F, 0x0B, 0xE0, 0x02, + 0x78, 0x1E, 0x80, 0x07, 0xE0, 0x79, 0x00, 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x00, 0x9E, 0x07, 0xE0, + 0x01, 0x78, 0x1E, 0x80, 0x07, 0xE0, 0x79, 0x00, 0x1E, 0x80, 0x07, + // Unicode: [0x006E, n] + 0x9E, 0x7F, 0xE0, 0xAF, 0x2F, 0x3E, 0xD0, 0xE3, 0x02, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x1E, + 0x80, 0xE7, 0x01, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x78, + // Unicode: [0x006F, o] + 0x80, 0xBF, 0x01, 0xFC, 0xFE, 0x81, 0x0B, 0xF4, 0xF1, 0x00, 0xB8, 0x2D, 0x00, 0x6D, 0x0F, 0x40, + 0xCB, 0x03, 0xE0, 0xE2, 0x02, 0x3D, 0xF0, 0xFB, 0x07, 0xE0, 0x6F, 0x00, + // Unicode: [0x0070, p] + 0x5E, 0xBE, 0x81, 0xFB, 0xFE, 0xE1, 0x0B, 0xF8, 0xB8, 0x00, 0x7C, 0x1E, 0x00, 0x9E, 0x07, 0x80, + 0xE7, 0x02, 0xF0, 0xF9, 0x02, 0x3E, 0xEE, 0xFB, 0x87, 0x97, 0x6F, 0xE0, 0x01, 0x00, 0x78, 0x00, + 0x00, 0x1E, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x01, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x80, 0x7F, 0x3D, 0xFC, 0xBE, 0x8F, 0x0B, 0xF4, 0xF3, 0x00, 0xF8, 0x2D, 0x00, 0x7D, 0x0B, 0x40, + 0xCF, 0x03, 0xE0, 0xE3, 0x02, 0xFD, 0xF0, 0xFB, 0x3E, 0xE0, 0x5B, 0x0F, 0x00, 0xD0, 0x03, 0x00, + 0xF4, 0x00, 0x00, 0x3D, 0x00, 0x40, 0x0F, 0x00, 0xD0, 0x03, + // Unicode: [0x0072, r] + 0x5E, 0xE7, 0x7F, 0x7E, 0xE0, 0x02, 0x1E, 0xE0, 0x01, 0x1E, 0xE0, 0x01, 0x1E, 0xE0, 0x01, + // Unicode: [0x0073, s] + 0xE4, 0x0B, 0xBE, 0x3F, 0x1F, 0x78, 0x1F, 0x00, 0xFD, 0x06, 0x90, 0x3F, 0x00, 0xB8, 0x1F, 0xB4, + 0xBE, 0x7E, 0xE4, 0x1B, + // Unicode: [0x0074, t] + 0xB4, 0x40, 0x0B, 0xFE, 0x9F, 0xAF, 0xB4, 0x40, 0x0B, 0xB4, 0x40, 0x0B, 0xB4, 0x40, 0x0B, 0xF0, + 0x0A, 0xFD, + // Unicode: [0x0075, u] + 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x1E, 0x80, 0xE7, 0x01, 0x78, 0x1E, + 0xC0, 0xD7, 0x03, 0x7D, 0xFC, 0xFA, 0x07, 0xFE, 0x79, + // Unicode: [0x0076, v] + 0x2E, 0x40, 0xDF, 0x03, 0xB8, 0x7C, 0xC0, 0x87, 0x0B, 0x3D, 0xF0, 0xE0, 0x01, 0x1E, 0x0F, 0xD0, + 0xB6, 0x00, 0xBC, 0x07, 0x80, 0x3F, 0x00, 0xF4, 0x02, + // Unicode: [0x0077, w] + 0x1E, 0xE0, 0x02, 0x6D, 0x0B, 0xFC, 0x80, 0xC7, 0x43, 0x7F, 0xF0, 0xE0, 0xD1, 0x1E, 0x2D, 0x74, + 0x38, 0x4B, 0x07, 0x2C, 0x8B, 0xE3, 0x00, 0xDE, 0xE1, 0x2D, 0x40, 0x3B, 0xB4, 0x07, 0xD0, 0x0F, + 0xFC, 0x00, 0xF0, 0x02, 0x2E, 0x00, + // Unicode: [0x0078, x] + 0x2E, 0xE0, 0xF1, 0xD1, 0x42, 0x8F, 0x07, 0xF8, 0x0B, 0xC0, 0x0F, 0x00, 0x3F, 0x00, 0xFE, 0x02, + 0x2D, 0x1F, 0x78, 0xB4, 0xB4, 0x80, 0x07, + // Unicode: [0x0079, y] + 0x2E, 0x00, 0xDF, 0x03, 0xB4, 0x7C, 0x80, 0x47, 0x0B, 0x3C, 0xF0, 0xE0, 0x01, 0x1E, 0x0F, 0xD0, + 0xB6, 0x00, 0xBC, 0x07, 0x80, 0x2F, 0x00, 0xF0, 0x01, 0x00, 0x0F, 0x00, 0xB8, 0x00, 0xC0, 0x07, + 0x00, 0x2D, 0x00, 0xE0, 0x01, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0xBF, 0xA8, 0xBE, 0x00, 0x3D, 0x00, 0x1F, 0x80, 0x0B, 0xD0, 0x03, 0xF0, 0x01, 0xB8, 0x00, + 0xBC, 0x6A, 0xFD, 0xBF, + // Unicode: [0x007B, braceleft] + 0x90, 0x0B, 0xBF, 0xB4, 0x40, 0x0B, 0xB0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF4, 0xE0, 0x07, 0x7E, + 0x40, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0B, 0xB4, 0x40, 0x0B, 0xF0, 0x0B, 0xB9, + // Unicode: [0x007C, bar] + 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + // Unicode: [0x007D, braceright] + 0x7D, 0x90, 0x1F, 0xE0, 0x02, 0x2D, 0xE0, 0x01, 0x1E, 0xE0, 0x01, 0x1E, 0xE0, 0x02, 0xF8, 0x80, + 0x0F, 0x2E, 0xE0, 0x01, 0x1E, 0xE0, 0x01, 0x1E, 0xD0, 0x02, 0x2E, 0xF9, 0xD1, 0x07, + // Unicode: [0x007E, asciitilde] + 0xE0, 0x46, 0xE3, 0xFF, 0xDB, 0x91, 0x0B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_18_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_18_2bpp_4.cpp new file mode 100644 index 00000000..3f407623 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_18_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x09, 0x46, 0xF2, 0xF5, 0xB8, 0x5E, 0x8B, 0x07 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_25_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_25_2bpp_0.cpp new file mode 100644 index 00000000..28ce0d1d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_25_2bpp_0.cpp @@ -0,0 +1,444 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_25_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x7E, 0x7E, 0x7E, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x3D, 0x3D, 0x00, 0x28, 0xBE, 0xBE, + 0x7D, + // Unicode: [0x0022, quotedbl] + 0x5F, 0xFF, 0xF5, 0x5F, 0xFF, 0xF1, 0x0F, 0x0F, + // Unicode: [0x0023, numbersign] + 0x00, 0x80, 0x1F, 0xC0, 0x0F, 0x00, 0x00, 0x3E, 0x00, 0x2F, 0x00, 0x00, 0xFC, 0x00, 0x7D, 0x00, + 0x00, 0xF0, 0x02, 0xF4, 0x01, 0x00, 0xD0, 0x07, 0xE0, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xA4, 0xFE, 0xAA, 0xBE, 0x2A, 0x00, 0xF0, 0x02, 0xF4, 0x01, 0x00, + 0xD0, 0x07, 0xE0, 0x03, 0x00, 0x80, 0x1F, 0xC0, 0x0F, 0x00, 0x00, 0x3E, 0x00, 0x2F, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0x2F, 0xF4, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xEA, 0xAB, 0xFA, 0xAB, 0x01, 0x80, + 0x0F, 0xC0, 0x0B, 0x00, 0x00, 0x3E, 0x00, 0x2F, 0x00, 0x00, 0xBC, 0x00, 0x7D, 0x00, 0x00, 0xF4, + 0x01, 0xF8, 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x64, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x90, 0x5B, 0x00, 0xF8, 0xFF, 0x0B, 0xF8, 0xFB, 0xBF, + 0xF0, 0xD3, 0xF5, 0xD3, 0x4B, 0x87, 0x5F, 0x1F, 0x1D, 0x00, 0xFD, 0x74, 0x00, 0xF0, 0xEF, 0x01, + 0x40, 0xFF, 0x6F, 0x00, 0x90, 0xFF, 0x1B, 0x00, 0xB4, 0xFF, 0x00, 0xD0, 0xF1, 0x07, 0x40, 0x47, + 0x6F, 0x2A, 0x1D, 0xBD, 0xFD, 0x74, 0xF8, 0xF1, 0xEF, 0xFA, 0x02, 0xFE, 0xFF, 0x02, 0x90, 0xBF, + 0x01, 0x00, 0x74, 0x00, 0x00, 0xD0, 0x01, 0x00, + // Unicode: [0x0025, percent] + 0xE4, 0x0B, 0x00, 0x3E, 0xD0, 0xFB, 0x03, 0xF4, 0x01, 0x1F, 0xB8, 0xC0, 0x0B, 0xF0, 0x81, 0x0B, + 0x7E, 0x00, 0x2E, 0x7C, 0xF0, 0x02, 0xD0, 0xFF, 0x82, 0x0F, 0x00, 0xA0, 0x06, 0x7D, 0x00, 0x00, + 0x00, 0xF0, 0x03, 0x00, 0x00, 0x40, 0x1F, 0x00, 0x00, 0x00, 0xBC, 0x90, 0x06, 0x00, 0xE0, 0x83, + 0xFF, 0x02, 0x40, 0x2F, 0x3D, 0x7C, 0x00, 0xF8, 0xE0, 0x41, 0x0B, 0xD0, 0x07, 0x1E, 0xB4, 0x00, + 0x2F, 0xE0, 0x82, 0x0B, 0xF8, 0x01, 0xFC, 0x3F, 0xD0, 0x0B, 0x40, 0xBE, 0x01, + // Unicode: [0x0026, ampersand] + 0x00, 0xF9, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0x00, 0xC0, 0x6F, 0xBE, 0x00, 0x00, 0xBD, 0xC0, + 0x0F, 0x00, 0xD0, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x40, 0x7F, 0x00, 0x00, 0x00, + 0xFE, 0x1F, 0x00, 0x00, 0xF8, 0xF7, 0x07, 0xF8, 0xD1, 0x0B, 0xFD, 0xD1, 0x0B, 0x3F, 0x00, 0xBF, + 0x3F, 0xF0, 0x02, 0xC0, 0xFF, 0x01, 0x3F, 0x00, 0xF0, 0x0F, 0xF0, 0x0B, 0x80, 0xFF, 0x02, 0xFD, + 0x9A, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xC2, 0x2F, 0x90, 0xFF, 0x06, 0xF4, 0x0B, + // Unicode: [0x0027, quotesingle] + 0xDF, 0xF7, 0x7D, 0x0F, + // Unicode: [0x0028, parenleft] + 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x02, 0xF4, 0x03, 0xE0, 0x07, 0xD0, 0x0B, 0x80, 0x1F, 0x00, + 0x3F, 0x00, 0xBD, 0x00, 0xF4, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xF0, + 0x03, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0xE0, 0x07, 0x40, 0x2F, 0x00, 0xFC, 0x00, 0xE0, + 0x07, 0x40, 0x2F, 0x00, 0xFC, 0x00, 0xD0, 0x0B, 0x00, 0x7F, 0x00, 0xF4, 0x03, 0x40, 0x3F, + // Unicode: [0x0029, parenright] + 0x7F, 0x00, 0xF4, 0x03, 0x40, 0x2F, 0x00, 0xF8, 0x01, 0xC0, 0x0F, 0x00, 0x7E, 0x00, 0xF0, 0x03, + 0x80, 0x1F, 0x00, 0x7D, 0x00, 0xF0, 0x02, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0xE0, 0x07, + 0x80, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0xE0, 0x03, 0xC0, 0x0B, 0x40, 0x2F, 0x00, 0x7E, 0x00, + 0xFC, 0x00, 0xF4, 0x02, 0xE0, 0x07, 0xD0, 0x0B, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x2F, 0x00, + // Unicode: [0x002A, asterisk] + 0x80, 0x07, 0x04, 0x1E, 0xF1, 0x39, 0x9E, 0xEF, 0x7E, 0xE0, 0x1F, 0xE4, 0xFF, 0xF6, 0x7A, 0xAF, + 0xE2, 0x21, 0x80, 0x07, 0x00, 0x15, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0xA4, 0x01, 0x00, 0x40, 0x1F, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x40, 0x1F, 0x00, 0x00, 0xF4, + 0x01, 0x50, 0x95, 0x6F, 0x15, 0xFD, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0x7F, 0x00, 0xF4, 0x01, 0x00, + 0x40, 0x1F, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x40, 0x1F, 0x00, 0x00, 0xF4, 0x01, 0x00, + // Unicode: [0x002C, comma] + 0xF4, 0xD2, 0x87, 0x0F, 0x2F, 0x3D, 0xB4, 0xE0, 0x01, + // Unicode: [0x002D, hyphen] + 0x55, 0x55, 0x95, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x01, + // Unicode: [0x002E, period] + 0x28, 0xBE, 0xBE, 0x7D, + // Unicode: [0x002F, slash] + 0x00, 0x80, 0x0F, 0x00, 0xBC, 0x00, 0xD0, 0x0B, 0x00, 0x7E, 0x00, 0xE0, 0x03, 0x00, 0x2F, 0x00, + 0xF4, 0x02, 0x80, 0x1F, 0x00, 0xF8, 0x00, 0xC0, 0x0B, 0x00, 0xBD, 0x00, 0xD0, 0x07, 0x00, 0x3E, + 0x00, 0xF0, 0x03, 0x40, 0x2F, 0x00, 0xF4, 0x01, 0x80, 0x0F, 0x00, 0xFC, 0x00, 0xD0, 0x0B, 0x00, + 0x7D, 0x00, 0xE0, 0x03, 0x00, 0x3F, 0x00, 0xF0, 0x02, 0x40, 0x1F, 0x00, 0xF8, 0x01, 0xC0, 0x0F, + 0x00, 0xBC, 0x00, 0xD0, 0x07, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0xFE, 0x0B, 0x00, 0xFD, 0xFF, 0x07, 0xF0, 0xAF, 0xFF, 0x80, 0x2F, 0x80, 0x1F, 0xFC, 0x00, + 0xF0, 0xC3, 0x0B, 0x00, 0x3E, 0x7D, 0x00, 0xD0, 0xD7, 0x07, 0x00, 0x7D, 0x7D, 0x00, 0xD0, 0xD7, + 0x07, 0x00, 0x7D, 0x7D, 0x00, 0xD0, 0xD7, 0x07, 0x00, 0x7D, 0x7D, 0x00, 0xD0, 0xC7, 0x0B, 0x00, + 0x3E, 0xFC, 0x00, 0xF0, 0x43, 0x2F, 0x80, 0x1F, 0xF0, 0xAF, 0xFF, 0x00, 0xFD, 0xFF, 0x07, 0x00, + 0xFE, 0x0B, 0x00, + // Unicode: [0x0031, one] + 0xFF, 0xF7, 0x7F, 0xEA, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, + 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, + // Unicode: [0x0032, two] + 0x40, 0xFE, 0x02, 0x80, 0xFF, 0x7F, 0x80, 0xBF, 0xF9, 0x43, 0x2F, 0x80, 0x2F, 0x7E, 0x00, 0xBC, + 0xF8, 0x00, 0xF0, 0x03, 0x00, 0xC0, 0x0B, 0x00, 0x40, 0x2F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFD, + 0x00, 0x00, 0xFC, 0x01, 0x00, 0xFC, 0x02, 0x00, 0xFC, 0x02, 0x00, 0xFC, 0x02, 0x00, 0xFC, 0x02, + 0x00, 0xFD, 0x02, 0x00, 0xFD, 0x57, 0x55, 0xF8, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x1F, + // Unicode: [0x0033, three] + 0x40, 0xFE, 0x06, 0x80, 0xFF, 0xBF, 0x80, 0xBF, 0xF9, 0x47, 0x3F, 0x40, 0x2F, 0x7D, 0x00, 0xF8, + 0x00, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x0B, 0x00, 0xD0, 0x1F, 0x00, 0xFE, 0x1F, 0x00, 0xF8, 0x6F, + 0x00, 0x50, 0xF9, 0x07, 0x00, 0x00, 0x2F, 0x00, 0x00, 0xF8, 0x54, 0x00, 0xD0, 0xE7, 0x07, 0x80, + 0x5F, 0x2F, 0x00, 0x3F, 0xFC, 0x9B, 0xBF, 0xC0, 0xFF, 0xBF, 0x00, 0xE4, 0x6F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0xFE, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0xC0, 0xEF, 0x03, 0x00, + 0xF8, 0xF9, 0x00, 0x40, 0x2F, 0x3E, 0x00, 0xF0, 0x82, 0x0F, 0x00, 0x7E, 0xE0, 0x03, 0xD0, 0x07, + 0xF8, 0x00, 0xBD, 0x00, 0x3E, 0xC0, 0x0F, 0x80, 0x0F, 0xF8, 0x56, 0xE5, 0x17, 0xFF, 0xFF, 0xFF, + 0xDF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xF8, 0x00, + 0x00, 0x00, 0x3E, 0x00, + // Unicode: [0x0035, five] + 0xFE, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xE1, 0xAB, 0xAA, 0x82, 0x0F, 0x00, 0x00, 0x3E, 0x00, 0x00, + 0xF8, 0x00, 0x00, 0xE0, 0x43, 0x05, 0x80, 0xDF, 0xFF, 0x06, 0xFE, 0xFF, 0x7F, 0xF8, 0x07, 0xF9, + 0xE2, 0x07, 0x80, 0x4F, 0x05, 0x00, 0x7D, 0x00, 0x00, 0xF4, 0x01, 0x00, 0xD0, 0xF7, 0x02, 0x80, + 0x9F, 0x1F, 0x00, 0x3F, 0xFD, 0x96, 0x7F, 0xD0, 0xFF, 0xBF, 0x00, 0xE8, 0x6F, 0x00, + // Unicode: [0x0036, six] + 0x40, 0xFE, 0x02, 0x80, 0xFF, 0x7F, 0x80, 0x6F, 0xF9, 0x43, 0x2F, 0x40, 0x2F, 0x3E, 0x00, 0xB8, + 0xB8, 0x00, 0x00, 0xF0, 0x02, 0x00, 0xC0, 0x47, 0xBE, 0x01, 0xDF, 0xFF, 0x2F, 0xFC, 0x6F, 0xFE, + 0xF2, 0x0B, 0xD0, 0xCF, 0x0F, 0x00, 0x7E, 0x2F, 0x00, 0xF4, 0xB9, 0x00, 0xD0, 0xE7, 0x03, 0x40, + 0x1F, 0x2F, 0x00, 0x3F, 0xF8, 0x9A, 0xBF, 0x80, 0xFF, 0xBF, 0x00, 0xE4, 0x6F, 0x00, + // Unicode: [0x0037, seven] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0xFD, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x3E, 0x00, + 0x00, 0x2F, 0x00, 0x40, 0x1F, 0x00, 0xC0, 0x0F, 0x00, 0xD0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xF4, + 0x02, 0x00, 0xF8, 0x01, 0x00, 0xBC, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x3F, 0x00, 0x40, 0x2F, 0x00, + 0x80, 0x0F, 0x00, 0xC0, 0x0B, 0x00, 0xE0, 0x07, 0x00, + // Unicode: [0x0038, eight] + 0x40, 0xFE, 0x1B, 0x00, 0xFE, 0xFF, 0x07, 0xF4, 0x5B, 0xFE, 0x81, 0x1F, 0x40, 0x2F, 0xFC, 0x00, + 0xF0, 0xC3, 0x0B, 0x00, 0x3E, 0xF8, 0x00, 0xF0, 0x42, 0x7F, 0xD0, 0x0F, 0xD0, 0xFF, 0x6F, 0x00, + 0xFD, 0xFF, 0x07, 0xF8, 0x57, 0xFD, 0xC1, 0x0B, 0x00, 0x3F, 0x7D, 0x00, 0xD0, 0xD7, 0x07, 0x00, + 0x7D, 0x7D, 0x00, 0xE0, 0xC7, 0x1F, 0x40, 0x3F, 0xF8, 0x5B, 0xFE, 0x01, 0xFE, 0xFF, 0x0B, 0x40, + 0xFE, 0x1B, 0x00, + // Unicode: [0x0039, nine] + 0x80, 0xFF, 0x02, 0xD0, 0xFF, 0x7F, 0xC0, 0x6F, 0xF9, 0x83, 0x2F, 0x40, 0x1F, 0x3F, 0x00, 0xBC, + 0xBC, 0x00, 0xE0, 0xF3, 0x02, 0x80, 0xCF, 0x0F, 0x00, 0x7E, 0x7E, 0x00, 0xFC, 0xF5, 0x07, 0xFD, + 0x87, 0xFF, 0xFF, 0x1F, 0xF8, 0xBF, 0x7D, 0x00, 0x15, 0xF4, 0x00, 0x00, 0xD0, 0x93, 0x02, 0x80, + 0x4B, 0x2F, 0x40, 0x1F, 0xF8, 0x96, 0x3F, 0xC0, 0xFF, 0x7F, 0x00, 0xE8, 0x6F, 0x00, + // Unicode: [0x003A, colon] + 0x7D, 0xBE, 0xBE, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xBE, 0xBE, 0x7D, + // Unicode: [0x003B, semicolon] + 0xB8, 0xF4, 0xC7, 0x1F, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x3E, 0xBC, + 0xF4, 0xE1, 0x82, 0x07, 0x0F, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x50, 0x05, 0x80, 0x3F, 0x00, 0xBE, 0x00, 0xF8, 0x02, 0xE0, 0x0B, 0x80, 0x2F, 0x00, 0xFD, + 0x01, 0x40, 0x7F, 0x00, 0xD0, 0x1F, 0x00, 0xF4, 0x07, 0x00, 0xFD, 0x01, 0x40, 0x7F, + // Unicode: [0x003D, equal] + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, 0x55, 0x55, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x50, 0x55, 0x55, 0x15, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, + // Unicode: [0x003E, greater] + 0x55, 0x00, 0xF4, 0x07, 0x40, 0x7F, 0x00, 0xF4, 0x07, 0x40, 0x7F, 0x00, 0xF4, 0x07, 0x80, 0x3F, + 0x80, 0x3F, 0x80, 0x3F, 0x80, 0x3F, 0x80, 0x3F, 0x80, 0x2F, 0x00, + // Unicode: [0x003F, question] + 0x90, 0xBF, 0x01, 0xFE, 0xFF, 0xD2, 0x6F, 0xFE, 0xFA, 0x01, 0xFC, 0x2F, 0x00, 0x3E, 0x00, 0x80, + 0x0F, 0x00, 0xF0, 0x03, 0x40, 0xBE, 0xD0, 0xFF, 0x0B, 0xF4, 0x6F, 0x00, 0x7D, 0x00, 0x40, 0x1A, + 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0xBE, 0x00, 0x80, 0x2F, 0x00, 0xD0, 0x07, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0xA4, 0xFF, 0x06, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x40, 0xBF, 0x01, 0x94, + 0x2F, 0x00, 0xF4, 0x02, 0x00, 0x40, 0x1F, 0x40, 0x2F, 0x00, 0x00, 0x81, 0x0F, 0xF0, 0x02, 0xFE, + 0xF7, 0xC2, 0x07, 0x2E, 0xF0, 0xFF, 0x7F, 0xE0, 0xD2, 0x07, 0x7F, 0xD0, 0x1F, 0xB4, 0xB8, 0xD0, + 0x07, 0xE0, 0x03, 0x3D, 0x1F, 0xBC, 0x00, 0xF8, 0x80, 0xCB, 0x07, 0x2F, 0x00, 0x2E, 0xE0, 0xF6, + 0xD0, 0x07, 0xC0, 0x0B, 0x7C, 0x3D, 0xF0, 0x02, 0xF8, 0x41, 0x4F, 0x0F, 0xFC, 0x96, 0xBF, 0xF4, + 0xC1, 0x07, 0xFD, 0xBF, 0xFD, 0x2F, 0xE0, 0x02, 0xF9, 0x06, 0xBE, 0x01, 0xF4, 0x01, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x06, 0x90, 0x02, 0x00, 0x00, 0xF8, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x06, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0xF0, 0x0B, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xBD, 0x2F, 0x00, + 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x3F, 0x7D, 0x00, 0x40, 0x2F, 0xBC, 0x00, 0x80, 0x0F, 0xF8, 0x00, + 0xC0, 0x0B, 0xF4, 0x01, 0xD0, 0x07, 0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xF0, 0xFF, 0xFF, 0x0B, + 0xF8, 0xFF, 0xFF, 0x0F, 0xFC, 0x55, 0x95, 0x1F, 0xBD, 0x00, 0x40, 0x2F, 0x7E, 0x00, 0x00, 0x3F, + 0x3F, 0x00, 0x00, 0x7E, + // Unicode: [0x0042, B] + 0xFF, 0xFF, 0x06, 0xFC, 0xFF, 0xBF, 0xF0, 0x56, 0xF9, 0xCB, 0x0B, 0x40, 0x3F, 0x2F, 0x00, 0xFC, + 0xBC, 0x00, 0xF0, 0xF3, 0x02, 0xE4, 0xC7, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x1B, 0xBC, 0x55, 0xFD, + 0xF1, 0x02, 0xC0, 0xCF, 0x0B, 0x00, 0x7D, 0x2F, 0x00, 0xF4, 0xBD, 0x00, 0xE0, 0xF7, 0x56, 0xE5, + 0xCF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x0A, 0x00, + // Unicode: [0x0043, C] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xFE, 0xAB, 0xFE, 0x07, 0xFD, 0x01, 0x80, + 0x3F, 0xFC, 0x01, 0x00, 0xFC, 0xFA, 0x02, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xC0, 0x0F, 0x00, + 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x80, 0x2F, + 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0xFC, 0xD2, 0x1F, 0x00, 0xF8, 0x03, 0xFE, 0xAB, 0xFE, 0x07, + 0xD0, 0xFF, 0xFF, 0x06, 0x00, 0xE4, 0xBF, 0x01, 0x00, + // Unicode: [0x0044, D] + 0xFF, 0xFF, 0x06, 0xC0, 0xFF, 0xFF, 0x1F, 0xF0, 0x56, 0xF9, 0x1F, 0xBC, 0x00, 0xD0, 0x1F, 0x2F, + 0x00, 0xD0, 0xCF, 0x0B, 0x00, 0xE0, 0xF7, 0x02, 0x00, 0xF4, 0xBE, 0x00, 0x00, 0xBD, 0x2F, 0x00, + 0x40, 0xEF, 0x0B, 0x00, 0xD0, 0xFB, 0x02, 0x00, 0xF4, 0xBE, 0x00, 0x00, 0x7E, 0x2F, 0x00, 0xD0, + 0xCF, 0x0B, 0x00, 0xFD, 0xF1, 0x56, 0xF9, 0x1F, 0xFC, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x06, 0x00, + // Unicode: [0x0045, E] + 0xFF, 0xFF, 0xF7, 0xFF, 0x7F, 0x6F, 0x55, 0xF1, 0x02, 0x00, 0x2F, 0x00, 0xF0, 0x02, 0x00, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0xFF, 0xFF, 0xF2, 0x56, 0x15, 0x2F, 0x00, 0xF0, 0x02, 0x00, 0x2F, 0x00, + 0xF0, 0x02, 0x00, 0x6F, 0x55, 0xF1, 0xFF, 0x7F, 0xFF, 0xFF, 0x07, + // Unicode: [0x0046, F] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x55, 0xF5, 0x02, 0x00, 0x2F, 0x00, 0xF0, 0x02, 0x00, 0x2F, + 0x00, 0xF0, 0xFF, 0x1F, 0xFF, 0xFF, 0xF1, 0x56, 0x05, 0x2F, 0x00, 0xF0, 0x02, 0x00, 0x2F, 0x00, + 0xF0, 0x02, 0x00, 0x2F, 0x00, 0xF0, 0x02, 0x00, 0x2F, 0x00, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0xE0, 0xBF, 0xEA, 0x7F, 0x40, 0xBF, 0x00, + 0xE0, 0x1F, 0xFC, 0x01, 0x00, 0xA8, 0xE1, 0x0B, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xF0, + 0x03, 0xF4, 0xFF, 0x7F, 0x3F, 0x40, 0xFF, 0xFF, 0xF7, 0x03, 0x50, 0x55, 0x7E, 0x7F, 0x00, 0x00, + 0xF0, 0xE3, 0x0B, 0x00, 0x40, 0x2F, 0xFC, 0x01, 0x00, 0xFC, 0x41, 0x7F, 0x00, 0xF4, 0x0B, 0xE0, + 0xBF, 0xEA, 0x2F, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0xE4, 0xAF, 0x01, 0x00, + // Unicode: [0x0048, H] + 0x2F, 0x00, 0xC0, 0xFB, 0x02, 0x00, 0xBC, 0x2F, 0x00, 0xC0, 0xFB, 0x02, 0x00, 0xBC, 0x2F, 0x00, + 0xC0, 0xFB, 0x02, 0x00, 0xBC, 0x2F, 0x00, 0xC0, 0xFB, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFB, + 0x56, 0x55, 0xBD, 0x2F, 0x00, 0xC0, 0xFB, 0x02, 0x00, 0xBC, 0x2F, 0x00, 0xC0, 0xFB, 0x02, 0x00, + 0xBC, 0x2F, 0x00, 0xC0, 0xFB, 0x02, 0x00, 0xBC, 0x2F, 0x00, 0xC0, 0x0B, + // Unicode: [0x0049, I] + 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0xBE, 0x2F, + // Unicode: [0x004A, J] + 0x00, 0x80, 0x1F, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x01, 0x00, 0x7E, 0x00, 0x80, 0x1F, 0x00, 0xE0, + 0x07, 0x00, 0xF8, 0x01, 0x00, 0x7E, 0x00, 0x80, 0x1F, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x01, 0x00, + 0x7E, 0x3E, 0x80, 0x9F, 0x1F, 0xF0, 0xD3, 0xAF, 0xBF, 0xE0, 0xFF, 0x0F, 0x90, 0xBF, 0x00, + // Unicode: [0x004B, K] + 0x2F, 0x00, 0xFC, 0xBE, 0x00, 0xF8, 0xF2, 0x02, 0xF8, 0xC2, 0x0B, 0xF8, 0x03, 0x2F, 0xF4, 0x03, + 0xBC, 0xF4, 0x07, 0xF0, 0xF6, 0x07, 0xC0, 0xFF, 0x07, 0x00, 0xFF, 0x0B, 0x00, 0xFC, 0x7F, 0x00, + 0xF0, 0xF6, 0x07, 0xC0, 0x4B, 0x7F, 0x00, 0x2F, 0xF8, 0x07, 0xBC, 0x80, 0x3F, 0xF0, 0x02, 0xF8, + 0xC3, 0x0B, 0x80, 0x2F, 0x2F, 0x00, 0xFC, 0x02, + // Unicode: [0x004C, L] + 0x2F, 0x00, 0xBC, 0x00, 0xF0, 0x02, 0xC0, 0x0B, 0x00, 0x2F, 0x00, 0xBC, 0x00, 0xF0, 0x02, 0xC0, + 0x0B, 0x00, 0x2F, 0x00, 0xBC, 0x00, 0xF0, 0x02, 0xC0, 0x0B, 0x00, 0x2F, 0x00, 0xBC, 0x00, 0xF0, + 0x56, 0xD5, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, + // Unicode: [0x004D, M] + 0x7F, 0x00, 0x00, 0xC0, 0xDF, 0x2F, 0x00, 0x00, 0xF8, 0xF7, 0x0F, 0x00, 0x00, 0xFF, 0xFD, 0x0B, + 0x00, 0xD0, 0x7F, 0xFF, 0x03, 0x00, 0xFC, 0xDF, 0xFF, 0x01, 0x40, 0xFF, 0xF7, 0xFA, 0x00, 0xF0, + 0xFA, 0xBD, 0x7D, 0x00, 0x7D, 0x7E, 0x2F, 0x3F, 0x80, 0x8F, 0xDF, 0x4B, 0x1F, 0xF4, 0xE1, 0xF7, + 0xC2, 0x0B, 0x3E, 0xF8, 0xBD, 0xD0, 0xC7, 0x0B, 0x7E, 0x2F, 0xF0, 0xFA, 0x80, 0xDF, 0x0B, 0xF8, + 0x2F, 0xE0, 0xF7, 0x02, 0xFC, 0x07, 0xF8, 0xBD, 0x00, 0xBE, 0x00, 0x7E, 0x2F, 0x40, 0x1F, 0x80, + 0x1F, + // Unicode: [0x004E, N] + 0x3F, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0xF8, 0xFF, 0x01, 0x80, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x0B, + 0x80, 0xFF, 0xF6, 0x01, 0xF8, 0x2F, 0x3E, 0x80, 0xFF, 0xC2, 0x0B, 0xF8, 0x2F, 0xF4, 0x81, 0xFF, + 0x02, 0x7E, 0xF8, 0x2F, 0xC0, 0x8B, 0xFF, 0x02, 0xF4, 0xFA, 0x2F, 0x00, 0xFE, 0xFF, 0x02, 0xC0, + 0xFF, 0x2F, 0x00, 0xF4, 0xFF, 0x02, 0x00, 0xFE, 0x2F, 0x00, 0xC0, 0x0F, + // Unicode: [0x004F, O] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0xE0, 0xBF, 0xEA, 0x7F, 0x40, 0x7F, 0x00, + 0xE0, 0x0F, 0xFC, 0x01, 0x00, 0xF8, 0xE2, 0x0B, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0xE0, 0xF7, + 0x03, 0x00, 0x00, 0xBD, 0x3F, 0x00, 0x00, 0xD0, 0xFB, 0x03, 0x00, 0x00, 0xBD, 0x3F, 0x00, 0x00, + 0xE0, 0xE7, 0x0B, 0x00, 0x00, 0x3F, 0xFC, 0x01, 0x00, 0xF8, 0x42, 0x7F, 0x00, 0xE0, 0x0F, 0xE0, + 0xBF, 0xEA, 0x7F, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0xE4, 0xBF, 0x01, 0x00, + // Unicode: [0x0050, P] + 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0x1F, 0x6F, 0x95, 0x7F, 0x2F, 0x00, 0xBD, 0x2F, 0x00, 0xFC, 0x2F, + 0x00, 0xFC, 0x2F, 0x00, 0xBD, 0x6F, 0x95, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x06, 0x2F, 0x00, + 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, + 0x2F, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0xE0, 0xBF, 0xEA, 0x7F, 0x40, 0x7F, 0x00, + 0xE0, 0x0F, 0xFC, 0x01, 0x00, 0xF8, 0xE2, 0x0B, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0xE0, 0xF7, + 0x03, 0x00, 0x00, 0xBD, 0x3F, 0x00, 0x00, 0xD0, 0xFB, 0x03, 0x00, 0x00, 0xBD, 0x3F, 0x00, 0x00, + 0xE0, 0xE7, 0x0B, 0x00, 0x00, 0x3F, 0xFC, 0x01, 0x00, 0xF8, 0x42, 0x7F, 0x00, 0xE0, 0x0F, 0xE0, + 0xBF, 0xEA, 0x7F, 0x00, 0xF4, 0xFF, 0xFF, 0x00, 0x00, 0xE4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, + 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x02, 0x00, 0x00, 0x40, 0x7F, + // Unicode: [0x0052, R] + 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0x1F, 0x6F, 0x95, 0x7F, 0x2F, 0x00, 0xBD, 0x2F, 0x00, 0xFC, 0x2F, + 0x00, 0xFC, 0x2F, 0x00, 0xBD, 0x6F, 0x95, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x06, 0x2F, 0xF8, + 0x01, 0x2F, 0xF4, 0x03, 0x2F, 0xE0, 0x0B, 0x2F, 0xC0, 0x1F, 0x2F, 0x80, 0x2F, 0x2F, 0x00, 0x7F, + 0x2F, 0x00, 0xFD, + // Unicode: [0x0053, S] + 0x40, 0xFE, 0x06, 0xC0, 0xFF, 0xBF, 0xC0, 0xBF, 0xF9, 0x4B, 0x2F, 0x40, 0x7F, 0x7D, 0x00, 0xA4, + 0xF5, 0x02, 0x00, 0xC0, 0x2F, 0x00, 0x00, 0xFD, 0x6B, 0x00, 0x90, 0xFF, 0x1F, 0x00, 0x90, 0xFF, + 0x02, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xBD, 0x69, 0x00, 0xF4, 0xF6, 0x03, 0xE0, 0xC7, 0xBF, 0xF9, + 0x0F, 0xFC, 0xFF, 0x0F, 0x40, 0xFE, 0x06, 0x00, + // Unicode: [0x0054, T] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0xBE, 0x55, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, + 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, + 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x7D, 0x00, + 0x00, 0x7D, 0x00, + // Unicode: [0x0055, U] + 0x2F, 0x00, 0xD0, 0xF7, 0x02, 0x00, 0x7D, 0x2F, 0x00, 0xD0, 0xF7, 0x02, 0x00, 0x7D, 0x2F, 0x00, + 0xD0, 0xF7, 0x02, 0x00, 0x7D, 0x2F, 0x00, 0xD0, 0xF7, 0x02, 0x00, 0x7D, 0x2F, 0x00, 0xD0, 0xF7, + 0x02, 0x00, 0x7D, 0x2F, 0x00, 0xD0, 0xF7, 0x02, 0x00, 0x7E, 0x3F, 0x00, 0xE0, 0xE7, 0x0B, 0x80, + 0x2F, 0xFC, 0xAB, 0xFF, 0x01, 0xFF, 0xFF, 0x07, 0x40, 0xFE, 0x06, 0x00, + // Unicode: [0x0056, V] + 0xBD, 0x00, 0x00, 0xF4, 0xF2, 0x03, 0x00, 0xE0, 0x87, 0x1F, 0x00, 0xC0, 0x0F, 0xBD, 0x00, 0x40, + 0x2F, 0xE0, 0x03, 0x00, 0x3E, 0x40, 0x2F, 0x00, 0xBD, 0x00, 0xFC, 0x00, 0xF8, 0x01, 0xE0, 0x07, + 0xF0, 0x03, 0x40, 0x2F, 0xD0, 0x0B, 0x00, 0xFC, 0x80, 0x1F, 0x00, 0xD0, 0x07, 0x2F, 0x00, 0x00, + 0x2F, 0x7D, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0xD0, 0xFB, 0x02, 0x00, 0x00, 0xFF, 0x07, 0x00, + 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xC0, 0x2F, 0x00, 0x00, + // Unicode: [0x0057, W] + 0xBD, 0x00, 0xC0, 0x1F, 0x00, 0xF8, 0xF1, 0x03, 0x40, 0xBF, 0x00, 0xF0, 0x83, 0x0F, 0x00, 0xFE, + 0x03, 0xD0, 0x0B, 0x7E, 0x00, 0xFC, 0x0F, 0x40, 0x1F, 0xF4, 0x02, 0xF4, 0x7E, 0x00, 0x3E, 0xC0, + 0x0F, 0xE0, 0xF7, 0x02, 0xBC, 0x00, 0x7E, 0xC0, 0xCB, 0x0F, 0xF4, 0x02, 0xF4, 0x01, 0x1F, 0x7E, + 0xE0, 0x07, 0xC0, 0x0B, 0x3D, 0xF4, 0x81, 0x0F, 0x00, 0x3E, 0xF8, 0xC0, 0x0B, 0x2F, 0x00, 0xF4, + 0xF1, 0x02, 0x3E, 0x7D, 0x00, 0xD0, 0xD7, 0x07, 0xF4, 0xF9, 0x00, 0x00, 0xAF, 0x0F, 0xC0, 0xF7, + 0x02, 0x00, 0xF8, 0x2F, 0x00, 0xFF, 0x07, 0x00, 0xD0, 0x7F, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFF, + 0x00, 0xD0, 0x2F, 0x00, 0x00, 0xF8, 0x02, 0x00, 0x7F, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xBD, 0x00, 0xD0, 0x8F, 0x1F, 0x00, 0x7E, 0xF4, 0x03, 0xF4, 0x02, 0xBE, 0xC0, 0x0F, 0xC0, 0x1F, + 0x7E, 0x00, 0xF4, 0xF7, 0x02, 0x00, 0xFE, 0x0F, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xF4, 0x03, 0x00, + 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0xF4, 0xF6, 0x02, 0xC0, 0x0F, 0x7E, 0x00, 0xBD, 0xD0, + 0x0F, 0xF0, 0x03, 0xF8, 0x82, 0x1F, 0x00, 0x7F, 0xBD, 0x00, 0xD0, 0x0F, + // Unicode: [0x0059, Y] + 0xBD, 0x00, 0x80, 0x1F, 0x7E, 0x00, 0xF0, 0x43, 0x2F, 0x00, 0x7E, 0x80, 0x1F, 0xC0, 0x0F, 0xD0, + 0x0B, 0xF8, 0x01, 0xE0, 0x07, 0x2F, 0x00, 0xF4, 0xE2, 0x07, 0x00, 0xF8, 0xBD, 0x00, 0x00, 0xFC, + 0x1F, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF0, 0x03, + 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF0, 0x03, 0x00, + // Unicode: [0x005A, Z] + 0xFE, 0xFF, 0xBF, 0xFE, 0xFF, 0xBF, 0x55, 0x55, 0xBF, 0x00, 0x40, 0x3F, 0x00, 0xC0, 0x1F, 0x00, + 0xE0, 0x0B, 0x00, 0xF4, 0x03, 0x00, 0xFC, 0x01, 0x00, 0xBE, 0x00, 0x40, 0x3F, 0x00, 0xC0, 0x1F, + 0x00, 0xE0, 0x0B, 0x00, 0xF4, 0x03, 0x00, 0xFC, 0x01, 0x00, 0xFE, 0x55, 0x55, 0xFE, 0xFF, 0xBF, + 0xFE, 0xFF, 0xBF, + // Unicode: [0x005B, bracketleft] + 0xFD, 0xDF, 0xFF, 0xBD, 0xD5, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, + 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, + 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x5B, 0xFD, 0xDF, 0xFF, + // Unicode: [0x005C, backslash] + 0x3E, 0x00, 0x80, 0x1F, 0x00, 0xD0, 0x0B, 0x00, 0xF0, 0x03, 0x00, 0xF8, 0x00, 0x00, 0x7D, 0x00, + 0x40, 0x2F, 0x00, 0xC0, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0xF4, 0x01, 0x00, 0xBC, 0x00, 0x00, 0x3E, + 0x00, 0x80, 0x1F, 0x00, 0xD0, 0x0B, 0x00, 0xF0, 0x02, 0x00, 0xF8, 0x00, 0x00, 0x7D, 0x00, 0x40, + 0x2F, 0x00, 0xC0, 0x0F, 0x00, 0xE0, 0x03, 0x00, 0xF4, 0x01, 0x00, 0xBC, 0x00, 0x00, 0x3F, 0x00, + 0x80, 0x1F, 0x00, 0xD0, 0x07, 0x00, 0xF0, 0x02, 0x00, 0xF8, 0x00, 0x00, 0x7E, + // Unicode: [0x005D, bracketright] + 0xFE, 0xE7, 0x7F, 0xE5, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, + 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, + 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x57, 0x7E, 0xFE, 0xE7, 0x7F, + // Unicode: [0x005E, asciicircum] + 0x00, 0xF4, 0x02, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x40, + 0x6F, 0x2F, 0x00, 0xE0, 0xC7, 0x0F, 0x00, 0xBC, 0xD0, 0x07, 0x80, 0x1F, 0xF0, 0x03, 0xF0, 0x03, + 0xF8, 0x01, 0x7E, 0x00, 0xFC, 0xC0, 0x0F, 0x00, 0x7E, 0xF4, 0x02, 0x40, 0x2F, 0x3F, 0x00, 0x80, + 0x1F, + // Unicode: [0x005F, underscore] + 0xAA, 0xAA, 0xAA, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + // Unicode: [0x0060, grave] + 0x06, 0xE0, 0x02, 0xFE, 0x02, 0xBE, 0x00, 0x0A, + // Unicode: [0x0061, a] + 0x40, 0xFE, 0x86, 0x0F, 0xFE, 0xFF, 0xF9, 0xF8, 0xAB, 0xFE, 0xDF, 0x1F, 0x40, 0xFF, 0xBE, 0x00, + 0xE0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xEF, + 0x07, 0x00, 0xFD, 0xFD, 0x01, 0xF4, 0x8F, 0xBF, 0xE5, 0xFF, 0xE0, 0xFF, 0xAF, 0x0F, 0xE4, 0x6F, + 0xF8, + // Unicode: [0x0062, b] + 0x2F, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x2F, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x2F, 0x00, + 0x00, 0xF0, 0x92, 0xBF, 0x01, 0xAF, 0xFF, 0xBF, 0xF0, 0xBF, 0xEA, 0x2F, 0xFF, 0x01, 0xF4, 0xF7, + 0x07, 0x00, 0xBE, 0x3F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xFC, 0x2F, 0x00, 0xC0, 0xFF, 0x03, 0x00, + 0xBC, 0x7F, 0x00, 0xE0, 0xFB, 0x1F, 0x40, 0x7F, 0xFF, 0xAB, 0xFE, 0xF2, 0xFA, 0xFF, 0x0B, 0x2F, + 0xF9, 0x1B, 0x00, + // Unicode: [0x0063, c] + 0x40, 0xFE, 0x0A, 0x80, 0xFF, 0xFF, 0x81, 0xBF, 0xF9, 0x4F, 0x3F, 0x00, 0xBE, 0x7E, 0x00, 0xA0, + 0xFD, 0x00, 0x00, 0xF0, 0x03, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xF8, 0x01, 0x80, + 0xD6, 0x0F, 0x80, 0x2F, 0xFE, 0x96, 0x3F, 0xE0, 0xFF, 0x7F, 0x00, 0xF9, 0x1B, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x00, 0x00, + 0x80, 0x0F, 0xE4, 0x6F, 0xF8, 0xE0, 0xFF, 0xAF, 0x8F, 0xBF, 0xEA, 0xFF, 0xFD, 0x01, 0xF4, 0xEF, + 0x0B, 0x00, 0xFE, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, + 0xFC, 0x7E, 0x00, 0xD0, 0xDF, 0x1F, 0x40, 0xFF, 0xF8, 0x5B, 0xFE, 0x0F, 0xFE, 0xFF, 0xFA, 0x40, + 0xFE, 0x86, 0x0F, + // Unicode: [0x0065, e] + 0x40, 0xFE, 0x06, 0x00, 0xFE, 0xFF, 0x07, 0xF8, 0x9B, 0xFE, 0xD0, 0x0F, 0x40, 0x2F, 0x7E, 0x00, + 0xE0, 0xF3, 0x57, 0x55, 0x7E, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, 0x3F, 0x00, 0x00, 0xE0, + 0x07, 0x00, 0x15, 0xFD, 0x00, 0xF8, 0x82, 0xBF, 0xE5, 0x1F, 0xE0, 0xFF, 0x7F, 0x00, 0xE4, 0xAF, + 0x00, + // Unicode: [0x0066, f] + 0x00, 0x79, 0x80, 0x7F, 0xD0, 0x6F, 0xE0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xFD, 0xBF, 0xFD, 0xBF, + 0xF4, 0x57, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, + 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, + // Unicode: [0x0067, g] + 0x40, 0xFE, 0x86, 0x0F, 0xFE, 0xFF, 0xFA, 0xF8, 0x5B, 0xFE, 0xDF, 0x1F, 0x40, 0xFF, 0x7E, 0x00, + 0xD0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xEF, + 0x0B, 0x00, 0xFE, 0xFD, 0x01, 0xF4, 0x8F, 0xBF, 0xEA, 0xFF, 0xE0, 0xFF, 0x9F, 0x0F, 0xE4, 0x6F, + 0xF8, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xFC, 0xBD, 0x00, 0xD0, 0xCB, 0x2F, 0x00, 0x7F, 0xF4, + 0x6F, 0xFE, 0x02, 0xFD, 0xFF, 0x0B, 0x00, 0xFA, 0x1B, 0x00, + // Unicode: [0x0068, h] + 0x2F, 0x00, 0x00, 0xBC, 0x00, 0x00, 0xF0, 0x02, 0x00, 0xC0, 0x0B, 0x00, 0x00, 0x2F, 0x00, 0x00, + 0xBC, 0xE4, 0x1B, 0xF0, 0xFA, 0xFF, 0xC2, 0xFF, 0xEA, 0x2F, 0xBF, 0x00, 0xFD, 0xFC, 0x00, 0xE0, + 0xF7, 0x02, 0x40, 0xDF, 0x0B, 0x00, 0x7D, 0x2F, 0x00, 0xF4, 0xBD, 0x00, 0xD0, 0xF7, 0x02, 0x40, + 0xDF, 0x0B, 0x00, 0x7D, 0x2F, 0x00, 0xF4, 0xBD, 0x00, 0xD0, 0xF7, 0x02, 0x40, 0x1F, + // Unicode: [0x0069, i] + 0x78, 0xFD, 0xFD, 0x64, 0x00, 0x00, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, + 0xBC, 0xBC, 0xBC, 0xBC, + // Unicode: [0x006A, j] + 0x80, 0x07, 0xFD, 0xD0, 0x0F, 0x64, 0x00, 0x00, 0x00, 0xC0, 0x0B, 0xBC, 0xC0, 0x0B, 0xBC, 0xC0, + 0x0B, 0xBC, 0xC0, 0x0B, 0xBC, 0xC0, 0x0B, 0xBC, 0xC0, 0x0B, 0xBC, 0xC0, 0x0B, 0xBC, 0xC0, 0x0B, + 0xBC, 0xC0, 0x0B, 0xBD, 0xE5, 0xEB, 0x3F, 0xBE, 0x01, + // Unicode: [0x006B, k] + 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x2F, + 0x80, 0x7F, 0x2F, 0xE0, 0x1F, 0x2F, 0xF4, 0x07, 0x2F, 0xFD, 0x02, 0x2F, 0xBF, 0x00, 0xAF, 0x2F, + 0x00, 0xFF, 0x0B, 0x00, 0xFF, 0x0B, 0x00, 0xAF, 0x2F, 0x00, 0x2F, 0xBF, 0x00, 0x2F, 0xFD, 0x01, + 0x2F, 0xF4, 0x07, 0x2F, 0xD0, 0x1F, 0x2F, 0x80, 0x7F, + // Unicode: [0x006C, l] + 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0xBE, 0xEF, 0xFB, 0x02, + // Unicode: [0x006D, m] + 0x2F, 0xFE, 0x06, 0xE4, 0x6F, 0xC0, 0xFF, 0xFF, 0x4B, 0xFF, 0xBF, 0xF0, 0x6F, 0xF5, 0xFB, 0x96, + 0x7F, 0xFC, 0x02, 0xF4, 0x1F, 0x40, 0x2F, 0x3F, 0x00, 0xF8, 0x02, 0xC0, 0xCF, 0x0B, 0x00, 0xBD, + 0x00, 0xE0, 0xF7, 0x02, 0x40, 0x1F, 0x00, 0xF8, 0xBD, 0x00, 0xD0, 0x07, 0x00, 0x7E, 0x2F, 0x00, + 0xF4, 0x01, 0x80, 0xDF, 0x0B, 0x00, 0x7D, 0x00, 0xE0, 0xF7, 0x02, 0x40, 0x1F, 0x00, 0xF8, 0xBD, + 0x00, 0xD0, 0x07, 0x00, 0x7E, 0x2F, 0x00, 0xF4, 0x01, 0x80, 0xDF, 0x0B, 0x00, 0x7D, 0x00, 0xE0, + 0x07, + // Unicode: [0x006E, n] + 0x2F, 0xFE, 0x06, 0xFC, 0xFF, 0xBF, 0xF0, 0x6F, 0xF5, 0xCB, 0x2F, 0x40, 0x3F, 0x3F, 0x00, 0xF8, + 0xBD, 0x00, 0xD0, 0xF7, 0x02, 0x40, 0xDF, 0x0B, 0x00, 0x7D, 0x2F, 0x00, 0xF4, 0xBD, 0x00, 0xD0, + 0xF7, 0x02, 0x40, 0xDF, 0x0B, 0x00, 0x7D, 0x2F, 0x00, 0xF4, 0xBD, 0x00, 0xD0, 0x07, + // Unicode: [0x006F, o] + 0x40, 0xFA, 0x0A, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0xAB, 0xFE, 0xD1, 0x1F, 0x40, 0x3F, 0x7E, 0x00, + 0xE0, 0xFB, 0x03, 0x00, 0xBC, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xEB, + 0x07, 0x00, 0xBE, 0xFD, 0x01, 0xF4, 0x83, 0xBF, 0xEA, 0x1F, 0xE0, 0xFF, 0x7F, 0x00, 0xE4, 0xAF, + 0x00, + // Unicode: [0x0070, p] + 0x2F, 0xF9, 0x1B, 0xF0, 0xFA, 0xFF, 0x0B, 0xFF, 0xAB, 0xFE, 0xF2, 0x1F, 0x40, 0x7F, 0x7F, 0x00, + 0xE0, 0xFB, 0x03, 0x00, 0xFC, 0x2F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xFB, + 0x07, 0x00, 0xBE, 0xFF, 0x01, 0xF4, 0xF7, 0xBF, 0xEA, 0x2F, 0xAF, 0xFF, 0xBF, 0xF0, 0x92, 0xBF, + 0x01, 0x2F, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x2F, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x2F, + 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x40, 0xFE, 0x86, 0x0F, 0xFE, 0xFF, 0xF9, 0xF8, 0xAB, 0xFE, 0xDF, 0x1F, 0x40, 0xFF, 0x7E, 0x00, + 0xD0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xEF, + 0x0B, 0x00, 0xFD, 0xFD, 0x01, 0xF4, 0x8F, 0xBF, 0xEA, 0xFF, 0xE0, 0xFF, 0x9F, 0x0F, 0xE4, 0x6F, + 0xF8, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x00, + 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x80, 0x0F, + // Unicode: [0x0072, r] + 0x2F, 0xE9, 0xEB, 0xFF, 0xFF, 0xFE, 0x07, 0x3F, 0xC0, 0x0B, 0xF0, 0x02, 0xBC, 0x00, 0x2F, 0xC0, + 0x0B, 0xF0, 0x02, 0xBC, 0x00, 0x2F, 0xC0, 0x0B, 0x00, + // Unicode: [0x0073, s] + 0x90, 0xBF, 0x01, 0xFE, 0xFF, 0xD2, 0x6F, 0xFE, 0xF9, 0x01, 0xBD, 0x7E, 0x00, 0x55, 0xBF, 0x01, + 0x40, 0xFF, 0x1B, 0x00, 0xFA, 0x2F, 0x00, 0xD0, 0x6F, 0x05, 0x80, 0xEF, 0x07, 0xE0, 0xF7, 0x5B, + 0xBE, 0xF4, 0xFF, 0x0F, 0xE4, 0xAF, 0x00, + // Unicode: [0x0074, t] + 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x7E, 0x40, 0xFF, 0xBF, 0xFD, 0xFF, 0x92, 0x5F, 0x05, 0x7E, 0x00, + 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1F, 0x00, + 0xBE, 0x15, 0xF0, 0xBF, 0x40, 0xFE, 0x02, + // Unicode: [0x0075, u] + 0xBD, 0x00, 0xE0, 0xD7, 0x0B, 0x00, 0x7E, 0xBD, 0x00, 0xE0, 0xD7, 0x0B, 0x00, 0x7E, 0xBD, 0x00, + 0xE0, 0xD7, 0x0B, 0x00, 0x7E, 0xBD, 0x00, 0xE0, 0xD7, 0x0B, 0x00, 0x7E, 0xBD, 0x00, 0xE0, 0xC7, + 0x0F, 0x00, 0x7E, 0xF8, 0x01, 0xF4, 0x47, 0xBF, 0xE5, 0x7F, 0xE0, 0xFF, 0xEF, 0x07, 0xE4, 0x6F, + 0x7E, + // Unicode: [0x0076, v] + 0x7E, 0x00, 0xC0, 0xDF, 0x0B, 0x00, 0xBD, 0xF8, 0x00, 0xE0, 0x47, 0x2F, 0x00, 0x2F, 0xF0, 0x03, + 0xF4, 0x01, 0x7E, 0x80, 0x0F, 0xD0, 0x0B, 0xBC, 0x00, 0xFC, 0xE0, 0x07, 0x80, 0x1F, 0x3F, 0x00, + 0xF4, 0xF6, 0x02, 0x00, 0xBF, 0x1F, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x80, 0x3F, + 0x00, + // Unicode: [0x0077, w] + 0x7E, 0x00, 0xFD, 0x00, 0xF8, 0xF5, 0x02, 0xF4, 0x07, 0xE0, 0xC3, 0x0B, 0xE0, 0x2F, 0xC0, 0x0B, + 0x3E, 0xC0, 0xBF, 0x40, 0x1F, 0xF4, 0x41, 0xEF, 0x03, 0x3E, 0xC0, 0x0B, 0x6D, 0x1F, 0xB8, 0x00, + 0x2E, 0xB8, 0xBC, 0xF0, 0x01, 0xF4, 0xF0, 0xE1, 0xD2, 0x03, 0xC0, 0xD7, 0x43, 0x8F, 0x0B, 0x00, + 0xAF, 0x0B, 0x7C, 0x1F, 0x00, 0xF8, 0x1E, 0xF0, 0x3E, 0x00, 0xD0, 0x7F, 0x80, 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0xFD, 0x02, 0x00, 0xF8, 0x02, 0xF0, 0x07, 0x00, + // Unicode: [0x0078, x] + 0xBD, 0x00, 0xFC, 0xF8, 0x01, 0x7E, 0xF4, 0x43, 0x2F, 0xE0, 0x8B, 0x0F, 0xC0, 0xEF, 0x07, 0x40, + 0xFF, 0x02, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x40, 0xFF, 0x02, 0x80, 0xEF, 0x07, 0xD0, 0xD7, + 0x0F, 0xF0, 0x82, 0x2F, 0xF8, 0x00, 0x7F, 0xBD, 0x00, 0xFD, + // Unicode: [0x0079, y] + 0xBE, 0x00, 0xC0, 0xDF, 0x0F, 0x00, 0xBD, 0xF8, 0x01, 0xE0, 0x47, 0x2F, 0x00, 0x3F, 0xF0, 0x03, + 0xF4, 0x01, 0x7E, 0x80, 0x0F, 0xD0, 0x0B, 0xBC, 0x00, 0xFC, 0xD0, 0x07, 0x40, 0x1F, 0x3E, 0x00, + 0xF0, 0xF6, 0x01, 0x00, 0xBE, 0x0F, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x80, 0x3F, + 0x00, 0x00, 0xF8, 0x01, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xBD, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, + 0x3F, 0x00, 0x00, 0xF8, 0x01, 0x00, 0xC0, 0x0F, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFF, 0xFF, 0xFB, 0xFF, 0xBF, 0x55, 0xF5, 0x0B, 0x40, 0x3F, 0x00, 0xFC, 0x01, 0xE0, 0x0B, 0x40, + 0x3F, 0x00, 0xFC, 0x01, 0xE0, 0x0B, 0x40, 0x2F, 0x00, 0xFC, 0x01, 0xE0, 0x5B, 0x55, 0xFF, 0xFF, + 0xFB, 0xFF, 0xBF, + // Unicode: [0x007B, braceleft] + 0x40, 0xBE, 0xD0, 0xBF, 0xE0, 0x6B, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x07, + 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xE0, 0x07, 0xF4, 0x03, 0xBF, 0x00, 0xBF, 0x00, 0xF8, 0x03, + 0xE0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, + 0xE0, 0x03, 0xE0, 0x6B, 0xD0, 0xBF, 0x40, 0xBE, + // Unicode: [0x007C, bar] + 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, + 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, + // Unicode: [0x007D, braceright] + 0xBE, 0x00, 0xFE, 0x03, 0xE9, 0x0B, 0xD0, 0x0B, 0xC0, 0x0B, 0xC0, 0x0B, 0xD0, 0x0B, 0xD0, 0x07, + 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xC0, 0x1F, 0x40, 0xBE, 0x40, 0xBE, 0xC0, 0x1F, + 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x0B, 0xC0, 0x0B, 0xC0, 0x0B, + 0xD0, 0x0B, 0xE9, 0x0B, 0xFE, 0x03, 0xBE, 0x00, + // Unicode: [0x007E, asciitilde] + 0xE0, 0x0B, 0xB4, 0xFC, 0xBF, 0x7E, 0xBE, 0xFE, 0x3F, 0x0F, 0xE4, 0x0B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_25_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_25_2bpp_4.cpp new file mode 100644 index 00000000..9be65290 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_25_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_25_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x28, 0xA0, 0x40, 0xE2, 0x8B, 0x2F, 0xBE, 0xBE, 0xF8, 0xE2, 0xDF, 0x47, 0x1F, 0x7D +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_50_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_50_2bpp_0.cpp new file mode 100644 index 00000000..082e513e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_50_2bpp_0.cpp @@ -0,0 +1,1341 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_50_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x2F, 0xFC, 0x2F, 0xFC, 0x2F, 0xFC, 0x2F, 0xFC, 0x2F, + 0xFC, 0x2F, 0xFC, 0x2F, 0xFC, 0x2F, 0xFC, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x1F, + 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, + 0x50, 0x05, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xF4, 0x1F, 0xFC, 0x3F, 0xFD, 0xBF, 0xFE, 0xBF, + 0xFD, 0x7F, 0xFC, 0x3F, 0xE0, 0x0B, + // Unicode: [0x0022, quotedbl] + 0x54, 0x05, 0x55, 0xD1, 0xBF, 0xE0, 0x7F, 0xFD, 0x0B, 0xFE, 0xC7, 0xBF, 0xE0, 0x7F, 0xFC, 0x0B, + 0xFE, 0xC7, 0xBF, 0xD0, 0x3F, 0xFC, 0x0B, 0xFD, 0xC3, 0x7F, 0xD0, 0x3F, 0xF8, 0x07, 0xFD, 0x83, + 0x7F, 0xD0, 0x3F, 0xF8, 0x07, 0xFC, 0x02, + // Unicode: [0x0023, numbersign] + 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, + 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFE, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFD, + 0x1F, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xC0, 0xFF, + 0x02, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xBF, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xFC, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, + 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x80, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, + 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xE0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x3F, 0x00, + 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x02, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x5F, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0x9B, 0xBF, 0xFF, 0xBF, 0xC0, 0xFF, + 0x07, 0xBE, 0xF4, 0xFF, 0x43, 0xFF, 0x0B, 0xF8, 0x42, 0xFF, 0x1F, 0xFE, 0x0F, 0xE0, 0x0B, 0xF8, + 0xBF, 0xFC, 0x3F, 0x80, 0x2F, 0x90, 0xAA, 0xF2, 0xBF, 0x00, 0xBE, 0x00, 0x00, 0xC0, 0xFF, 0x03, + 0xF8, 0x02, 0x00, 0x00, 0xFF, 0x1F, 0xE0, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0x81, 0x2F, 0x00, 0x00, + 0xD0, 0xFF, 0x2F, 0xBE, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0xFF, + 0x6F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0x6F, + 0xFE, 0xFF, 0x01, 0x00, 0x00, 0xBE, 0xD0, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0x02, 0xFD, 0x3F, 0x00, + 0x00, 0xE0, 0x0B, 0xE0, 0xFF, 0x00, 0x00, 0x80, 0x2F, 0x80, 0xFF, 0xA7, 0xAA, 0x00, 0xBE, 0x00, + 0xFE, 0xCF, 0xFF, 0x07, 0xF8, 0x02, 0xF8, 0x3F, 0xFE, 0x2F, 0xE0, 0x0B, 0xF0, 0xBF, 0xF4, 0xFF, + 0x81, 0x2F, 0xE0, 0xFF, 0xC1, 0xFF, 0x1F, 0xBE, 0xF4, 0xFF, 0x03, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x90, 0xFE, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x02, 0x00, 0x00, + // Unicode: [0x0025, percent] + 0x00, 0xF9, 0x6B, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFF, + 0x0B, 0x00, 0xF4, 0xFF, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x07, 0x00, 0xFC, 0xAF, 0xFE, 0x1F, 0x00, + 0xC0, 0xFF, 0x02, 0x00, 0xFD, 0x07, 0xF0, 0x3F, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xFE, 0x02, 0xD0, + 0x3F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xFF, 0x02, 0xD0, 0x7F, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFF, + 0x02, 0xD0, 0x7F, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x02, 0xD0, 0x7F, 0x00, 0xFE, 0x0B, 0x00, + 0x00, 0xFE, 0x03, 0xE0, 0x3F, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x1B, 0xF8, 0x2F, 0xC0, 0xFF, + 0x02, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x07, + 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x54, + 0x05, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, + 0x00, 0x50, 0x05, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0xFE, 0xBF, 0x01, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0xF4, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x40, 0xFF, 0x07, 0xF8, 0x1F, 0xF4, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0xFC, 0x07, 0xD0, + 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0xFD, 0x03, 0xC0, 0x7F, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0xFD, + 0x03, 0xC0, 0xBF, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0xFE, 0x03, 0xC0, 0xBF, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0xFD, 0x03, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0xFC, 0x0B, 0xE0, 0x3F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xF4, 0xBF, 0xFE, 0x2F, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0x02, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0026, ampersand] + 0x00, 0x00, 0x40, 0xFA, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xAF, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0x1F, 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xFD, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x3F, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x40, 0x55, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0x3F, 0x00, 0xFD, 0xFF, 0x82, 0xFF, 0x2F, 0x00, 0xF8, 0x7F, 0x00, + 0xF8, 0xBF, 0x00, 0xF8, 0xFF, 0x02, 0xF4, 0xBF, 0x00, 0xF4, 0xFF, 0x00, 0x80, 0xFF, 0x2F, 0xF0, + 0xFF, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0xE2, 0xFF, 0x01, 0xC0, 0xFF, 0x02, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x07, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, + 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0x02, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x90, 0xFF, 0xFF, 0x2F, 0x00, 0xC0, 0xFF, 0x6F, 0x00, + 0xE4, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0xFF, 0x2F, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xF4, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, + 0x2F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0x90, 0xFE, 0xAF, 0x01, + 0x00, 0x80, 0xFF, 0x2F, + // Unicode: [0x0027, quotesingle] + 0x54, 0xD5, 0xBF, 0xFD, 0xCB, 0xBF, 0xFC, 0xCB, 0xBF, 0xFC, 0xCB, 0x7F, 0xF8, 0x87, 0x7F, 0xF8, + 0x07, + // Unicode: [0x0028, parenleft] + 0x00, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0xF0, + 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, + 0x80, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x0F, + 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xE0, + 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xD0, 0xFF, + 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0x0B, + 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x01, + 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x80, + 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x01, + 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, + 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x0B, + 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, + 0xF0, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x1F, + // Unicode: [0x0029, parenright] + 0xFE, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xBF, + 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, + 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x40, 0xFF, + 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, + 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xFE, + 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x40, 0xFF, + 0x07, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, + 0x00, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, + 0xF8, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x01, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0xF8, + 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, + 0x40, 0xFF, 0x0B, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0x1F, + 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFC, + 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, + // Unicode: [0x002A, asterisk] + 0x00, 0x80, 0xAA, 0x00, 0x00, 0x00, 0xE0, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x80, 0x01, + 0xFD, 0x01, 0x08, 0xF4, 0x01, 0x7F, 0xD0, 0x07, 0xFF, 0xC2, 0x0F, 0xFE, 0xE3, 0xFF, 0xF3, 0xE3, + 0xFF, 0xE6, 0xFF, 0xFF, 0xFF, 0x6F, 0x40, 0xFE, 0xFF, 0x6F, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, + 0xE0, 0xFF, 0xBF, 0x01, 0x90, 0xFF, 0xFF, 0xFF, 0x1B, 0xFE, 0x7F, 0x7F, 0xFF, 0x2F, 0xFF, 0xC7, + 0x0F, 0xFE, 0x43, 0x2F, 0xF0, 0x07, 0xBE, 0xC0, 0x02, 0xFD, 0x01, 0x0D, 0x00, 0x40, 0xBF, 0x00, + 0x00, 0x00, 0xE0, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x00, 0x90, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAB, 0xAA, 0xAA, 0xFF, 0xAF, 0xAA, 0x6A, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, + // Unicode: [0x002C, comma] + 0x40, 0xAA, 0x0A, 0xF8, 0x7F, 0x80, 0xFF, 0x03, 0xFC, 0x2F, 0xD0, 0xFF, 0x00, 0xFE, 0x0B, 0xE0, + 0x7F, 0x00, 0xFF, 0x02, 0xF4, 0x1F, 0x80, 0xFF, 0x00, 0xFC, 0x07, 0xC0, 0x3F, 0x00, 0xFD, 0x02, + 0xE0, 0x1F, 0x00, + // Unicode: [0x002D, hyphen] + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + // Unicode: [0x002E, period] + 0x40, 0x01, 0xF4, 0x1F, 0xFC, 0x3F, 0xFD, 0xBF, 0xFE, 0xBF, 0xFD, 0x7F, 0xFC, 0x3F, 0xE0, 0x0B, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xF0, + 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x00, + 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xFC, + 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, + 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x0F, + 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x40, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x40, 0xFF, + 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, + 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xC0, + 0xFF, 0x02, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x03, + 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0x00, 0xE9, 0xBF, 0x06, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, + 0x00, 0xFD, 0xFF, 0x56, 0xF9, 0xFF, 0x07, 0xF0, 0xFF, 0x02, 0x00, 0xF8, 0xFF, 0x40, 0xFF, 0x0B, + 0x00, 0x00, 0xFE, 0x1F, 0xF8, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0xC2, 0xFF, 0x02, 0x00, 0x00, 0xF8, + 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFE, 0x0F, + 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0B, 0x00, 0x00, 0x00, + 0xFE, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFE, + 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, 0x00, + 0x00, 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xC7, + 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x3F, 0xF8, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x42, 0xFF, 0x0B, 0x00, + 0x00, 0xFE, 0x1F, 0xE0, 0xFF, 0x02, 0x00, 0xF8, 0xBF, 0x00, 0xFD, 0xFF, 0x56, 0xF9, 0xFF, 0x07, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFC, 0xFF, + 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE9, 0xBF, 0x06, 0x00, + 0x00, + // Unicode: [0x0031, one] + 0x54, 0x55, 0x85, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, 0xFE, 0xFF, 0xAF, 0xFF, 0xFF, + 0x0B, 0xC0, 0xFF, 0x02, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0x0B, 0xC0, 0xFF, 0x02, 0xF0, + 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0x0B, 0xC0, 0xFF, 0x02, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, 0x00, + 0xFF, 0x0B, 0xC0, 0xFF, 0x02, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0x0B, 0xC0, 0xFF, 0x02, + 0xF0, 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0x0B, 0xC0, 0xFF, 0x02, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, + 0x00, 0xFF, 0x0B, 0xC0, 0xFF, 0x02, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0x0B, 0xC0, 0xFF, + 0x02, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, + // Unicode: [0x0032, two] + 0x00, 0x00, 0xA9, 0x6B, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xC0, + 0xFF, 0x6F, 0x40, 0xFE, 0x7F, 0x40, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x03, 0xFE, 0x1F, 0x00, 0x00, + 0xFE, 0x1F, 0xFC, 0x2F, 0x00, 0x00, 0xF4, 0xBF, 0xF4, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0xD2, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x4B, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xAB, 0xAA, 0xAA, 0xAA, 0xF6, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + // Unicode: [0x0033, three] + 0x00, 0x00, 0xA9, 0xAF, 0x05, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0xD0, 0xFF, 0xFF, + 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x80, + 0xFF, 0x6F, 0x40, 0xFE, 0xFF, 0x40, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x07, 0xFE, 0x1F, 0x00, 0x00, + 0xFD, 0x2F, 0xFC, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xF0, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xF9, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xA8, + 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x6F, 0xAA, 0x02, 0x00, 0x00, 0xE0, 0xBF, 0xFD, + 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xCB, 0xFF, 0x03, 0x00, 0x00, + 0xFE, 0x1F, 0xFE, 0x2F, 0x00, 0x00, 0xFD, 0x3F, 0xF0, 0xFF, 0x07, 0x00, 0xFE, 0xBF, 0x40, 0xFF, + 0xFF, 0xEB, 0xFF, 0xFF, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x1A, 0x00, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFD, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF5, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xD2, 0xFF, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0x43, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0x07, 0xFD, 0x0F, 0x00, + 0x00, 0x00, 0xFF, 0x0B, 0xF4, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xD0, 0xFF, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x40, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xFC, 0x3F, + 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x40, + 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF4, 0x3F, + 0x00, 0xD0, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x40, 0xFF, 0x03, 0x80, + 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x3F, 0x00, + // Unicode: [0x0035, five] + 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x80, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, + 0x40, 0xBA, 0x1A, 0x00, 0x80, 0xFF, 0x82, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0x6F, 0xFF, 0xFF, 0xFF, + 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, + 0xFF, 0x06, 0xE4, 0xFF, 0x1F, 0xF8, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0x83, 0xFF, 0x0F, 0x00, 0x00, + 0xF8, 0x7F, 0xF8, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x4B, 0xAA, 0x02, 0x00, 0x00, 0xF0, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x9F, + 0xAA, 0x01, 0x00, 0x00, 0xF0, 0xBF, 0xFC, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x87, 0xFF, 0x07, 0x00, + 0x00, 0xF8, 0x3F, 0xF4, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x02, 0xFE, 0xBF, 0x01, 0x90, 0xFF, 0x1F, + 0xC0, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x16, 0x00, + 0x00, + // Unicode: [0x0036, six] + 0x00, 0x00, 0xE4, 0xFF, 0x06, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xEB, 0xFF, 0x3F, + 0x00, 0xF8, 0xFF, 0x01, 0x90, 0xFF, 0x0B, 0xD0, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0x00, 0xFE, 0x0B, + 0x00, 0x00, 0xFC, 0x1F, 0xF0, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x42, 0xFF, 0x02, 0x00, 0x00, 0x50, + 0x15, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0xE9, 0xBF, 0x01, 0x00, 0xFC, 0x0B, 0xF9, 0xFF, 0xFF, + 0x02, 0xD0, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0xEB, 0xFF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFD, 0xFF, 0x1F, 0x00, 0xF9, 0xFF, 0xD2, 0xFF, 0x2F, 0x00, 0x00, + 0xFE, 0x3F, 0xFD, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xD7, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0xBF, 0xFC, + 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xCB, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFC, 0x1F, 0x00, 0x00, + 0x00, 0xFE, 0x8F, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x4F, + 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xBF, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0xFE, 0x0B, 0x00, + 0x00, 0xF8, 0x7F, 0xD0, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0x03, 0xF8, 0xBF, 0x01, 0x90, 0xFF, 0x1F, + 0x40, 0xFF, 0xFF, 0xEB, 0xFF, 0xBF, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xF4, 0xFF, + 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x1A, 0x00, + 0x00, + // Unicode: [0x0037, seven] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0x00, 0xF9, 0xBF, 0x06, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0xFA, 0xFF, 0x7F, + 0x00, 0xFF, 0x7F, 0x00, 0xD0, 0xFF, 0x0F, 0xF4, 0xFF, 0x00, 0x00, 0xF0, 0xFF, 0x81, 0xFF, 0x07, + 0x00, 0x00, 0xFD, 0x2F, 0xFC, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0xC3, 0xFF, 0x02, 0x00, 0x00, 0xF8, + 0x3F, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xC3, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x2F, 0xF8, 0x3F, + 0x00, 0x00, 0xC0, 0xFF, 0x42, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x01, 0x00, 0xF4, + 0xBF, 0x00, 0xFC, 0xBF, 0x01, 0xE4, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x40, + 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0xFF, 0x02, 0xE0, 0xFF, 0x6F, 0x95, 0xFF, 0xBF, 0x40, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0x1F, 0xFC, + 0x3F, 0x00, 0x00, 0xD0, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x0F, 0x00, 0x00, + 0x00, 0xFF, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, + 0x00, 0xF4, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0xC7, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0x3F, + 0xF4, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x01, 0xFE, 0xFF, 0xAF, 0xFF, 0xFF, 0x0B, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xBF, 0x01, + 0x00, 0x00, 0x90, 0xFE, 0x6B, 0x00, 0x00, + // Unicode: [0x0039, nine] + 0x00, 0x40, 0xFA, 0xAF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0xBF, 0xFE, 0xFF, 0x0B, 0xE0, + 0xFF, 0x1B, 0x00, 0xFE, 0x7F, 0xC0, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x42, 0xFF, 0x0B, 0x00, 0x00, + 0xFD, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0x7F, 0xFC, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0xF2, 0x7F, + 0x00, 0x00, 0x00, 0xFD, 0xCF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x3F, 0xFF, 0x07, 0x00, 0x00, 0xC0, + 0xFF, 0xFC, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xF7, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x9F, 0xFF, 0x03, + 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0xF1, 0xFF, 0x02, 0x00, 0xF4, 0xFF, + 0x87, 0xFF, 0x7F, 0x01, 0xF9, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFF, 0x01, 0xF8, 0xFF, 0xFF, 0x7F, 0xFD, 0x07, 0x40, 0xFF, 0xFF, 0x2F, 0xF8, 0x1F, + 0x00, 0x50, 0xAA, 0x06, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xAA, 0x02, 0x00, 0x00, 0xF4, 0x2F, 0xFC, + 0x1F, 0x00, 0x00, 0xE0, 0x7F, 0xE0, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x41, 0xFF, 0x0B, 0x00, 0x80, + 0xFF, 0x02, 0xFC, 0xBF, 0x01, 0xD0, 0xFF, 0x07, 0xD0, 0xFF, 0xBF, 0xFA, 0xFF, 0x0B, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0x40, 0xFA, 0xBF, 0x01, 0x00, 0x00, + // Unicode: [0x003A, colon] + 0xE0, 0x0B, 0xFC, 0x3F, 0xFD, 0x7F, 0xFE, 0xBF, 0xFD, 0xBF, 0xFC, 0x7F, 0xF4, 0x1F, 0x40, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xF4, 0x1F, 0xFC, 0x3F, 0xFD, 0xBF, + 0xFE, 0xBF, 0xFD, 0x7F, 0xFC, 0x3F, 0xE0, 0x0B, + // Unicode: [0x003B, semicolon] + 0x00, 0xBE, 0x00, 0xF8, 0x3F, 0xD0, 0xFF, 0x0B, 0xFD, 0xBF, 0xD0, 0xFF, 0x0B, 0xFC, 0x7F, 0x40, + 0xFF, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xAA, 0x40, 0xFF, 0x0B, 0xF4, 0x7F, 0x80, 0xFF, 0x03, 0xFC, + 0x1F, 0xD0, 0xFF, 0x00, 0xFD, 0x0B, 0xE0, 0x3F, 0x00, 0xFF, 0x02, 0xF4, 0x1F, 0x80, 0xBF, 0x00, + 0xF8, 0x07, 0xC0, 0x3F, 0x00, 0xFD, 0x02, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x00, 0x80, 0xAA, 0x1A, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, + 0xF8, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x1F, + 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x80, + 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0xBF, + 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x01, + // Unicode: [0x003D, equal] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + // Unicode: [0x003E, greater] + 0xAA, 0x2A, 0x00, 0x00, 0xD0, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0xFF, + 0x00, 0x00, 0x40, 0xFF, 0x3F, 0x00, 0x00, 0xD0, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0x00, + 0x00, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, + 0xFF, 0x07, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x1F, 0x00, + 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x1F, + 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x80, 0xFF, + 0x1F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, + // Unicode: [0x003F, question] + 0x00, 0x90, 0xFE, 0x6B, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0x02, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF4, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0xFF, 0x6F, 0x00, + 0xF8, 0xFF, 0xD1, 0xFF, 0x02, 0x00, 0xF4, 0xBF, 0xF8, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0xFF, 0x0B, + 0x00, 0x00, 0xFD, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xE5, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xE0, 0xFF, + 0xAF, 0x01, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0x40, 0xBE, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xFF, 0x6B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, + 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xFF, 0x16, 0x00, 0xA5, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x6F, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, + 0xD0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0x01, 0x80, 0xFF, 0x02, 0x00, 0xE4, 0xBF, 0x41, 0xAA, 0x01, 0xFD, 0x0B, 0x40, 0xFF, 0x03, 0x00, + 0xFE, 0xFF, 0x2F, 0xFE, 0x07, 0xE0, 0x3F, 0x00, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, + 0x80, 0xFF, 0x01, 0xFD, 0x0B, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFD, 0x07, 0xFC, 0x0F, + 0x40, 0xFF, 0xBF, 0xE5, 0xFF, 0xBF, 0x00, 0xF0, 0x2F, 0xF4, 0x1F, 0x00, 0xFE, 0x2F, 0x00, 0xF8, + 0xFF, 0x02, 0xC0, 0xBF, 0xE0, 0x3F, 0x00, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xFF, 0xC2, + 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0xFC, 0x4B, 0xFF, 0x01, 0xF4, 0x3F, 0x00, + 0x00, 0xF0, 0x3F, 0x00, 0xF0, 0x2F, 0xFE, 0x03, 0xE0, 0xBF, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0xC0, + 0xBF, 0xFC, 0x0B, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0xF1, 0x2F, 0x40, 0xFF, + 0x03, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0xFD, 0xD7, 0x7F, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xF4, 0x1F, + 0x00, 0xF8, 0x4F, 0xFF, 0x01, 0xF4, 0x3F, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0xE0, 0x2F, 0xFD, 0x07, + 0xD0, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0xC0, 0x7F, 0xF4, 0x1F, 0x40, 0xFF, 0x03, 0x00, 0x80, + 0xFF, 0x03, 0x80, 0xFF, 0xD0, 0x7F, 0x00, 0xFD, 0x2F, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0xFF, 0x42, + 0xFF, 0x01, 0xF0, 0xFF, 0x01, 0x80, 0xFF, 0x3F, 0x00, 0xFE, 0x03, 0xFD, 0x07, 0x80, 0xFF, 0x6F, + 0xE5, 0xFF, 0xFF, 0x01, 0xFE, 0x07, 0xF4, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, + 0x0B, 0xC0, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0xBF, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0xFE, 0x03, 0x00, + 0xFD, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0xF4, 0x2F, 0x00, 0x40, 0xFE, 0x1B, 0x00, 0xA0, + 0xBF, 0x01, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x16, + 0x00, 0xA5, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFA, 0xFF, 0x1A, 0x00, + 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFC, 0x3F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x8B, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xD1, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0x0B, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0x3F, + 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x00, + 0xD0, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0xF8, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, + 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xD0, + 0xFF, 0x02, 0x00, 0xFD, 0xBF, 0xAA, 0xAA, 0xFA, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x03, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x81, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, + 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x9F, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFB, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, + // Unicode: [0x0042, B] + 0xFD, 0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xAF, 0xAA, 0xEA, 0xFF, 0xFF, + 0xD0, 0xFF, 0x01, 0x00, 0x90, 0xFF, 0x1F, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xD3, 0xFF, 0x01, + 0x00, 0x00, 0xFC, 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xF8, + 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x3F, 0xFD, 0x1F, + 0x00, 0x00, 0xD0, 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x0F, 0xFD, 0x1F, 0x00, 0x40, 0xFE, + 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xD0, 0xFF, + 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xAA, 0xAA, 0xFA, + 0xFF, 0x07, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0xD1, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0x3F, 0xFD, + 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xDF, + 0xFF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xDB, 0xFF, 0x01, 0x00, + 0x40, 0xFF, 0x7F, 0xFD, 0xAF, 0xAA, 0xAA, 0xFF, 0xFF, 0xD2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0x6B, 0x00, 0x00, + // Unicode: [0x0043, C] + 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x6F, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0xBF, 0x05, 0x90, + 0xFF, 0xFF, 0x02, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xFC, 0xFF, 0x01, 0x00, + 0x00, 0xD0, 0xFF, 0x1F, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x43, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 0xC5, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x55, 0x45, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xE0, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x40, 0xFF, + 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0xBF, 0x01, 0x90, 0xFF, 0xFF, 0x02, 0x00, + 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0x6F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, + // Unicode: [0x0044, D] + 0xFD, 0xFF, 0xFF, 0xBF, 0x06, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFD, + 0xAF, 0xAA, 0xFA, 0xFF, 0xFF, 0x07, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFE, 0xFF, 0x07, 0xD0, 0xFF, + 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x02, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x41, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xD0, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x4F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xD3, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xF5, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0x5F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0xF5, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x5F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0x47, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, + 0x1F, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x02, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x7F, + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFE, 0xFF, 0x07, 0xD0, 0xFF, 0xAA, 0xAA, 0xFE, 0xFF, 0x7F, 0x00, + 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x40, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x6B, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0045, E] + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xAF, 0xAA, 0xAA, 0xAA, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, + 0xAF, 0xAA, 0xAA, 0x1A, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xAF, 0xAA, 0xAA, 0xAA, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + // Unicode: [0x0046, F] + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xAF, 0xAA, 0xAA, 0xAA, 0xD2, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0F, 0xD0, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0F, 0xD0, 0xFF, 0xAA, 0xAA, 0xAA, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0x00, + // Unicode: [0x0047, G] + 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xBF, 0x01, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xFF, 0x5B, + 0x95, 0xFE, 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0x1B, 0x00, 0x00, 0xF9, 0xFF, 0x0B, 0x00, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0xFD, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x81, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xA9, 0xAA, 0xAA, 0xAA, 0x6A, 0xFF, 0x0B, 0x00, 0x40, + 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xBF, 0x00, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xAF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0xD7, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xF1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x3F, 0xF8, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0xFD, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x1F, 0x00, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0xF4, 0xFF, 0x03, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, + 0xFF, 0x56, 0x54, 0xFE, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFE, 0xAF, 0x01, + 0x00, 0x00, 0x00, + // Unicode: [0x0048, H] + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xFD, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xFD, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x6F, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF6, 0x7F, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x6F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0xFF, 0xAB, 0xAA, 0xAA, 0xAA, 0xFA, + 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xFD, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, + 0x6F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF6, + 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x2F, + // Unicode: [0x0049, I] + 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, + 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, + 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, + 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0x01, + // Unicode: [0x004A, J] + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x2F, + 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, + 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0xFA, 0x3F, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0xFD, 0xAF, 0xFF, 0x07, + 0x00, 0xF8, 0x7F, 0xFD, 0x3F, 0x00, 0xF4, 0xFF, 0xF0, 0xFF, 0x07, 0xF4, 0xFF, 0x42, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xFF, 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xF4, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0xF9, 0xAF, 0x01, 0x00, + // Unicode: [0x004B, K] + 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xD2, 0xFF, 0x01, + 0x00, 0x40, 0xFF, 0x3F, 0xF4, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0x03, 0xFD, 0x1F, 0x00, 0x00, 0xFE, + 0x7F, 0x40, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x07, 0xD0, 0xFF, 0x01, 0x00, 0xFE, 0x7F, 0x00, 0xF4, + 0x7F, 0x00, 0xD0, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, 0x00, 0xFD, 0xBF, 0x00, 0x40, 0xFF, 0x07, 0xC0, + 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x01, 0xFC, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0x80, 0xFF, 0x1F, 0x00, + 0x00, 0xFD, 0x1F, 0xF8, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0x47, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, + 0xF5, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xBF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0xF4, 0xBF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0x9F, 0xFF, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x87, + 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x81, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xC0, 0xFF, 0x1F, + 0x00, 0x00, 0xFD, 0x1F, 0xD0, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0x07, 0xD0, 0xFF, 0x0F, 0x00, 0xD0, + 0xFF, 0x01, 0xD0, 0xFF, 0x0B, 0x00, 0xF4, 0x7F, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, 0x00, + 0xE0, 0xFF, 0x0B, 0x40, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x0B, 0xD0, 0xFF, 0x01, 0x00, 0xF0, 0xFF, + 0x07, 0xF4, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x47, 0xFF, + 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x03, + // Unicode: [0x004C, L] + 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, + 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFD, + 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, + 0xAA, 0xAA, 0xAA, 0xF4, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + // Unicode: [0x004D, M] + 0xFD, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xD7, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0x7F, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xD7, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0x7F, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xD7, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xD7, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0xFD, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0xFD, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xD7, 0xFF, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, + 0xFB, 0x7F, 0xFD, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0x7F, 0xFF, 0xD7, 0xFF, 0xF5, 0x3F, 0x00, + 0x00, 0x80, 0xFF, 0xF6, 0x7F, 0xFD, 0x1F, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x4F, 0xFF, 0xD7, 0xFF, + 0xE1, 0xBF, 0x00, 0x00, 0xE0, 0xBF, 0xF4, 0x7F, 0xFD, 0x1F, 0xFC, 0x1F, 0x00, 0x00, 0xFF, 0x47, + 0xFF, 0xD7, 0xFF, 0x81, 0xFF, 0x02, 0x00, 0xF8, 0x2F, 0xF4, 0x7F, 0xFD, 0x1F, 0xF4, 0x3F, 0x00, + 0xC0, 0xFF, 0x41, 0xFF, 0xD7, 0xFF, 0x01, 0xFE, 0x0B, 0x00, 0xFD, 0x0F, 0xF4, 0x7F, 0xFD, 0x1F, + 0xD0, 0xFF, 0x00, 0xE0, 0x7F, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0xFC, 0x1F, 0x40, 0xFF, 0x03, 0xF4, + 0x7F, 0xFD, 0x1F, 0x40, 0xFF, 0x03, 0xF8, 0x2F, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0xF0, 0x7F, 0xC0, + 0xFF, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xFE, 0x0B, 0xFE, 0x0B, 0x40, 0xFF, 0xD7, 0xFF, 0x01, + 0xC0, 0xFF, 0xF1, 0x7F, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xF8, 0x6F, 0xFF, 0x02, 0x40, 0xFF, + 0xD7, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, + 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, + 0xC0, 0xFF, 0x3F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xF4, 0xFF, 0x02, 0x00, 0xF4, 0x7F, + 0xFD, 0x1F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, 0xBF, 0x00, + 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x40, 0xFF, 0x07, + // Unicode: [0x004E, N] + 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, + 0xFF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0xFF, + 0x07, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0xFF, 0x2F, + 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0xFF, 0xFF, 0x00, + 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0xFE, 0x2F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x9F, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0xD7, 0xFF, 0xE1, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0xFD, 0x2F, 0x00, 0x40, + 0xFF, 0xD7, 0xFF, 0x81, 0xFF, 0x07, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0xF0, 0xFF, 0x00, 0x40, 0xFF, + 0xD7, 0xFF, 0x01, 0xFD, 0x2F, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x80, 0xFF, 0x07, 0x40, 0xFF, 0xD7, + 0xFF, 0x01, 0xF0, 0xFF, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xFD, 0x2F, 0x40, 0xFF, 0xD7, 0xFF, + 0x01, 0x80, 0xFF, 0x07, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xF0, 0xFF, 0x40, 0xFF, 0xD7, 0xFF, 0x01, + 0x00, 0xFD, 0x2F, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0x47, 0xFF, 0xD7, 0xFF, 0x01, 0x00, + 0xF0, 0xFF, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x6F, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x80, + 0xFF, 0xFB, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xFD, + 0xFF, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, + 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0x7F, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x7F, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, + // Unicode: [0x004F, O] + 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xFF, + 0x5B, 0x00, 0xF9, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xC0, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x03, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0B, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0x0F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xFD, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0x7F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xFE, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xFC, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0x0F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0B, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x03, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0x00, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0xF9, 0xFF, 0x2F, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, + // Unicode: [0x0050, P] + 0xFD, 0xFF, 0xFF, 0xBF, 0x06, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xAF, 0xAA, 0xEA, 0xFF, 0x7F, 0xF4, + 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x5F, 0xFF, 0x07, 0x00, 0x00, + 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xF7, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xDF, 0xFF, + 0x01, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xC0, + 0xFF, 0xF7, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0x5F, 0xFF, 0x07, + 0x00, 0x40, 0xFF, 0x2F, 0xFD, 0xAF, 0xAA, 0xEA, 0xFF, 0x7F, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, + 0xBF, 0x06, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xFF, + 0x5B, 0x00, 0xF9, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xC0, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x03, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0B, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0x0F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xFD, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0x7F, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xFE, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xFC, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0x0F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x03, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0x00, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0xF9, 0xFF, 0x2F, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xFF, 0xEA, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x7F, + // Unicode: [0x0052, R] + 0xFD, 0xFF, 0xFF, 0xBF, 0x06, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0xAF, 0xAA, 0xEA, 0xFF, 0x7F, + 0xD0, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0x0B, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0xD1, 0xFF, 0x01, + 0x00, 0x00, 0xFD, 0x2F, 0xFD, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xFC, + 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0x3F, 0xFD, 0x1F, + 0x00, 0x00, 0xC0, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x2F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, + 0xFF, 0xD1, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0x0B, 0xFD, 0xAF, 0xAA, 0xEA, 0xFF, 0x7F, 0xD0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0B, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x01, 0xFC, 0xBF, 0x00, 0x00, 0xFD, + 0x1F, 0x40, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x01, 0xE0, 0xFF, 0x02, 0x00, 0xFD, 0x1F, 0x00, 0xFD, + 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x80, 0xFF, 0x0F, 0x00, 0xFD, 0x1F, 0x00, 0xF0, 0xFF, 0x02, 0xD0, + 0xFF, 0x01, 0x00, 0xFD, 0x3F, 0x00, 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0x0B, 0xD0, 0xFF, 0x01, 0x00, + 0xF4, 0xFF, 0x01, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x3F, 0xD0, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0x0B, + 0xFD, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x2F, 0xFD, 0x1F, 0x00, + 0x00, 0xD0, 0xFF, 0x07, + // Unicode: [0x0053, S] + 0x00, 0x40, 0xFA, 0xAF, 0x01, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, + 0xFF, 0x07, 0x40, 0xFF, 0xBF, 0xD0, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0x83, 0xFF, 0x07, 0x00, 0x00, + 0xFF, 0x1F, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xBF, 0xFC, 0x2F, 0x00, 0x00, 0x50, 0x55, 0xF1, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0x1B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xE4, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xA9, 0x2A, 0x00, 0x00, + 0x80, 0xFF, 0xF3, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0x8F, 0xFF, 0x0B, 0x00, 0x00, 0xFC, 0x2F, 0xFD, + 0xBF, 0x00, 0x00, 0xF8, 0x7F, 0xF0, 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0x40, 0xFF, 0xFF, 0xEF, 0xFF, + 0xFF, 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xE0, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x1B, 0x00, 0x00, + // Unicode: [0x0054, T] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xAA, 0xAA, 0xFE, 0xBF, 0xAA, 0xAA, 0x00, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, + // Unicode: [0x0055, U] + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, + 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFC, + 0x3F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xF4, 0xFF, 0x00, + 0x00, 0x00, 0xFE, 0x2F, 0xF0, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x1F, 0xD0, 0xFF, 0x6F, 0x00, 0xF5, + 0xFF, 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, + 0xA4, 0xFF, 0x1B, 0x00, 0x00, + // Unicode: [0x0056, V] + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF6, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xC3, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x1F, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, + 0xBF, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x03, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, + 0xC0, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x2F, 0x00, + 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0x07, + 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, + 0x2F, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0x07, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x87, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x2F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFE, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, + 0x00, + // Unicode: [0x0057, W] + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFE, 0x1F, 0x00, 0x00, + 0x00, 0xFD, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, + 0x00, 0x00, 0xF8, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0x3F, + 0xF8, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0x2F, 0xF8, 0x7F, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0x1F, 0xF4, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0xFE, 0x0F, 0xF0, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0B, + 0xE0, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x07, 0xD0, 0xFF, 0x01, 0x00, + 0xE0, 0xBF, 0xFE, 0x0F, 0x00, 0x80, 0xFF, 0x07, 0xC0, 0xFF, 0x02, 0x00, 0xF0, 0x7F, 0xFE, 0x0F, + 0x00, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x00, 0xF0, 0x3F, 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0x02, + 0x80, 0xFF, 0x03, 0x00, 0xF4, 0x2F, 0xFC, 0x2F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, + 0xF8, 0x1F, 0xF8, 0x3F, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0xFC, 0x1F, 0xF4, 0x3F, + 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0xFD, 0x0F, 0xF0, 0x7F, 0x00, 0xF0, 0x7F, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0xFE, 0x0B, 0xF0, 0xBF, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, + 0xFE, 0x07, 0xE0, 0xFF, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0x03, 0xD0, 0xFF, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF8, 0x3F, 0x40, 0xFF, 0x02, 0xC0, 0xFF, 0x01, 0xFC, 0x1F, 0x00, + 0x00, 0xF4, 0x7F, 0x80, 0xFF, 0x01, 0x80, 0xFF, 0x02, 0xFD, 0x0F, 0x00, 0x00, 0xF0, 0x7F, 0xC0, + 0xFF, 0x00, 0x40, 0xFF, 0x03, 0xFE, 0x0B, 0x00, 0x00, 0xE0, 0xBF, 0xC0, 0xFF, 0x00, 0x40, 0xFF, + 0x03, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xD0, 0xBF, 0x00, 0x00, 0xFF, 0x07, 0xFF, 0x03, 0x00, + 0x00, 0xC0, 0xFF, 0xE1, 0x7F, 0x00, 0x00, 0xFE, 0x4B, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xF1, + 0x3F, 0x00, 0x00, 0xFD, 0x8F, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xF6, 0x2F, 0x00, 0x00, 0xFC, + 0xDF, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0xFB, 0x1F, 0x00, 0x00, 0xF8, 0xEF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xF0, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0x02, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0x00, 0xC0, + 0xFF, 0x0F, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xE1, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0xFF, + 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0xF4, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x80, 0xFF, 0x0B, + 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x03, 0x00, + 0xFE, 0x2F, 0x00, 0x00, 0xFF, 0x2F, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0xF8, 0x7F, + 0x00, 0x00, 0x80, 0xFF, 0x0B, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xF0, 0xFF, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0xFE, 0x2F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xF2, 0xFF, 0x01, 0x00, 0x00, 0xC0, + 0xFF, 0x43, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x07, 0xF8, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x0B, + 0xD0, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0xF0, + 0xFF, 0x01, 0x00, 0xFC, 0x3F, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0xF8, 0xBF, + 0x00, 0xF4, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0xF0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x3F, 0xE0, + 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0xC2, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0x1F, + // Unicode: [0x0059, Y] + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xF5, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xC2, 0xFF, + 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0xFD, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0xF0, 0xFF, 0x01, + 0x00, 0x00, 0xFF, 0x1F, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0xFC, 0x3F, 0x00, 0x00, + 0xFC, 0x3F, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, + 0x00, 0x00, 0xF4, 0xBF, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x00, + 0x00, 0xFD, 0x1F, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x40, + 0xFF, 0x07, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xF1, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, + // Unicode: [0x005A, Z] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, + // Unicode: [0x005B, bracketleft] + 0xFE, 0xFF, 0xAF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, 0xFE, 0xAF, 0xAA, 0xFF, 0x02, + 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, + 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, + 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, + 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, + 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, + 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, + 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, + 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0xBF, 0xAA, 0xFE, + 0xFF, 0xAF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, + // Unicode: [0x005C, backslash] + 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xE0, + 0xBF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF0, + 0xBF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x00, 0xF4, + 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xF4, + 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF8, + 0x3F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF8, + 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, + 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xBF, + // Unicode: [0x005D, bracketright] + 0xFE, 0xFF, 0xAF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, 0xA9, 0xFE, 0x2F, 0x00, 0xFE, + 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, + 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, + 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, + 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, + 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, + 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, + 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, + 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0xA6, 0xFA, 0xBF, 0xFE, + 0xFF, 0xAF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, + // Unicode: [0x005E, asciicircum] + 0x00, 0x00, 0x40, 0xAA, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xCF, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0xFD, 0x1F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xF4, 0xBF, 0x00, 0x00, + 0x00, 0xF4, 0xBF, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xC0, + 0xFF, 0x02, 0xF0, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0B, + 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xFC, 0x3F, 0x00, 0x40, + 0xFF, 0x0B, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xD0, 0xFF, + 0x02, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0x0F, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0x7F, 0x40, + 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xFC, 0x2F, + 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xF7, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0x2F, + // Unicode: [0x005F, underscore] + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + // Unicode: [0x0060, grave] + 0x05, 0x00, 0x00, 0x2E, 0x00, 0x00, 0xFE, 0x02, 0x00, 0xFE, 0x1F, 0x00, 0xFE, 0xFF, 0x01, 0xF8, + 0xFF, 0x1B, 0x80, 0xFF, 0x7F, 0x00, 0xF8, 0xBF, 0x00, 0x80, 0xBF, 0x00, 0x00, 0xB4, 0x00, 0x00, + 0x40, + // Unicode: [0x0061, a] + 0x00, 0x00, 0xE9, 0xBF, 0x06, 0xE0, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, + 0xFF, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFE, + 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFE, 0x2F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xF8, 0xFF, 0x01, 0x00, + 0x00, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, + 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0x00, 0x00, 0xE9, + 0xBF, 0x01, 0xE0, 0xFF, + // Unicode: [0x0062, b] + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0xE9, 0xBF, 0x06, 0x00, 0xD0, 0xFF, 0x41, 0xFE, 0xFF, 0xFF, 0x01, 0x40, + 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF4, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xD0, 0xFF, 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0x42, 0xFF, 0xFF, 0x07, + 0x00, 0xD0, 0xFF, 0x1F, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xBF, 0xF4, 0xFF, 0x03, 0x00, 0x00, + 0xD0, 0xFF, 0xD3, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x5F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF4, + 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF6, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x2F, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF7, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xFD, 0x6F, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xFD, 0xFF, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xFF, 0xD2, 0xFF, 0xFF, 0x01, 0x00, 0xF4, 0xFF, + 0x43, 0xFF, 0xFF, 0x6F, 0x00, 0xFD, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF4, + 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0xD0, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x0B, 0x40, 0xFF, 0x07, + 0xF9, 0xFF, 0xFF, 0x06, 0x00, 0xFD, 0x1F, 0x40, 0xFA, 0xAF, 0x01, 0x00, 0x00, + // Unicode: [0x0063, c] + 0x00, 0x00, 0xE9, 0xFF, 0x16, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x0B, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFB, 0xFF, 0xBF, + 0x00, 0xFE, 0xBF, 0x01, 0xD0, 0xFF, 0x2F, 0xF4, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0xC3, 0xFF, 0x0B, + 0x00, 0x00, 0xFC, 0xBF, 0xFD, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0xEF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, + 0xF4, 0xFF, 0xF8, 0xBF, 0x00, 0x00, 0xC0, 0xFF, 0x47, 0xFF, 0x2F, 0x00, 0x00, 0xFE, 0x3F, 0xE0, + 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0x01, 0xFC, 0xFF, 0xBF, 0xFF, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0x2F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xBF, 0x01, 0x00, + 0x00, 0x90, 0xFE, 0x6F, 0x00, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, + 0x00, 0xE9, 0xBF, 0x01, 0xE0, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x6F, 0xE0, 0xFF, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xFF, + 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFE, 0x2F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFE, 0x2F, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xF8, 0xFF, 0x01, 0x00, 0x00, + 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0x00, 0x00, 0xE9, 0xBF, + 0x01, 0xE0, 0xFF, + // Unicode: [0x0065, e] + 0x00, 0x00, 0xE5, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0xFB, 0xFF, + 0xFF, 0x00, 0xF8, 0xFF, 0x06, 0x40, 0xFE, 0xBF, 0x40, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0x7F, 0xF0, + 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x3F, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x9F, 0xFF, 0x07, 0x00, + 0x00, 0x40, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFE, 0xBF, 0xAA, 0xAA, 0xAA, 0xFA, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xA8, 0x2A, 0xF8, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0xFD, 0xBF, + 0x00, 0x00, 0xF8, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0x90, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, 0xEF, 0xFF, + 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0xF9, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x6B, 0x00, 0x00, + // Unicode: [0x0066, f] + 0x00, 0x00, 0x94, 0x0A, 0x00, 0xE0, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0x3F, 0x00, + 0xFE, 0xFF, 0x0F, 0xC0, 0xFF, 0x1B, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x80, 0xFF, + 0x07, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, + 0x9F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xA9, 0xFF, 0xAF, 0x6A, 0x80, 0xFF, 0x07, 0x00, + 0xE0, 0xFF, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xE0, + 0xFF, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xE0, 0xFF, + 0x01, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x01, + 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x01, 0x00, + 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF8, + 0x7F, 0x00, 0x00, + // Unicode: [0x0067, g] + 0x00, 0x00, 0xE9, 0xBF, 0x05, 0xE0, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x6F, 0xE0, 0xFF, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, + 0xFF, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFE, + 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFE, 0x2F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xF8, 0xFF, 0x01, 0x00, + 0x00, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, + 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0x00, 0x00, 0xE9, + 0xBF, 0x01, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xA4, 0x2A, 0x00, 0x00, 0x00, 0xF4, 0xBF, + 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xF4, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x3F, 0xF0, 0xFF, + 0x07, 0x00, 0x40, 0xFF, 0x2F, 0xD0, 0xFF, 0x6F, 0x00, 0xE4, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x6B, 0x00, 0x00, + // Unicode: [0x0068, h] + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0xE4, 0xBF, 0x01, + 0x00, 0xFD, 0x1F, 0xF8, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xF5, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0xEF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFD, 0xFF, 0x5F, 0x40, 0xFE, + 0xFF, 0xD2, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0x3F, 0xFD, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0xD7, 0xFF, + 0x07, 0x00, 0x00, 0xF8, 0xBF, 0xFD, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x02, 0x00, 0x00, + 0xF0, 0xFF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, + 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, + 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, + 0x0F, + // Unicode: [0x0069, i] + 0x40, 0x01, 0xF8, 0x0B, 0xFD, 0x2F, 0xFF, 0x3F, 0xFF, 0x7F, 0xFE, 0x3F, 0xFD, 0x2F, 0xE4, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, + 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, + 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, + 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, 0xFD, 0x1F, + // Unicode: [0x006A, j] + 0x00, 0x00, 0x05, 0x00, 0x80, 0xBF, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, + 0x01, 0xE0, 0xFF, 0x03, 0x40, 0xFF, 0x0B, 0x00, 0xE4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, + 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, 0xFD, + 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, + 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, + 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, + 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, + 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, + 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0xD0, 0xFF, 0x47, 0xFA, 0xFF, 0x0F, 0xFD, 0xFF, 0x2F, 0xF4, + 0xFF, 0x3F, 0xD0, 0xFF, 0x2F, 0x40, 0xFF, 0x1B, 0x00, + // Unicode: [0x006B, k] + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFF, 0xBF, 0xFD, 0x1F, 0x00, 0x80, + 0xFF, 0x3F, 0xFD, 0x1F, 0x00, 0xE0, 0xFF, 0x0F, 0xFD, 0x1F, 0x00, 0xF4, 0xFF, 0x07, 0xFD, 0x1F, + 0x00, 0xFD, 0xFF, 0x01, 0xFD, 0x1F, 0x00, 0xFF, 0x7F, 0x00, 0xFD, 0x1F, 0x80, 0xFF, 0x1F, 0x00, + 0xFD, 0x1F, 0xE0, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, 0xF4, 0xFF, 0x02, 0x00, 0xFD, 0x1F, 0xFD, 0xBF, + 0x00, 0x00, 0xFD, 0x5F, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xEF, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0xEF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0x5F, 0xFF, 0x2F, + 0x00, 0x00, 0xFD, 0x1F, 0xFD, 0xBF, 0x00, 0x00, 0xFD, 0x1F, 0xF8, 0xFF, 0x02, 0x00, 0xFD, 0x1F, + 0xE0, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, 0x80, 0xFF, 0x1F, 0x00, 0xFD, 0x1F, 0x00, 0xFF, 0x7F, 0x00, + 0xFD, 0x1F, 0x00, 0xFD, 0xFF, 0x01, 0xFD, 0x1F, 0x00, 0xF4, 0xFF, 0x07, 0xFD, 0x1F, 0x00, 0xD0, + 0xFF, 0x0F, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xBF, + // Unicode: [0x006C, l] + 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, + 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, + 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, + 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, + 0x1F, + // Unicode: [0x006D, m] + 0xFD, 0x1F, 0x90, 0xFE, 0x1B, 0x00, 0x00, 0x90, 0xFF, 0x1A, 0x00, 0xD0, 0xFF, 0x91, 0xFF, 0xFF, + 0x2F, 0x00, 0xE0, 0xFF, 0xFF, 0x1B, 0x00, 0xFD, 0x5F, 0xFF, 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, + 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0x05, 0xE4, 0xFF, 0xFF, + 0xBF, 0x01, 0xE4, 0xFF, 0x0F, 0xFD, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0xFF, + 0xD1, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x3F, 0xFD, 0x7F, 0x00, 0x00, + 0x80, 0xFF, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0xD3, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, + 0x00, 0xF8, 0x7F, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, + 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, + 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF4, + 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, + 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x40, + 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, + 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, + 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, + 0xF4, 0x7F, + // Unicode: [0x006E, n] + 0xFD, 0x1F, 0x90, 0xFE, 0x1B, 0x00, 0xD0, 0xFF, 0x91, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0x5F, 0xFF, + 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD0, 0xFF, 0xFF, 0x05, 0xE4, 0xFF, 0x2F, 0xFD, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0xD3, 0xFF, 0x0F, + 0x00, 0x00, 0xFD, 0x7F, 0xFD, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xDB, 0xFF, 0x03, 0x00, 0x00, 0xF0, + 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xFF, 0xDF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, + 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, + 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, + 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xDF, + 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, + // Unicode: [0x006F, o] + 0x00, 0x00, 0xA4, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0x07, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, + 0x0F, 0xF8, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x2F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xFD, 0x3F, 0xFD, + 0x2F, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0xF0, 0xBF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x2F, + 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xFD, 0x3F, 0xF8, 0xBF, 0x00, 0x00, + 0x40, 0xFF, 0x2F, 0xF4, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x0F, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, + 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE4, + 0xFF, 0x1A, 0x00, 0x00, + // Unicode: [0x0070, p] + 0xFD, 0x1F, 0x40, 0xFA, 0xAF, 0x01, 0x00, 0xF4, 0x7F, 0x90, 0xFF, 0xFF, 0x6F, 0x00, 0xD0, 0xFF, + 0xE1, 0xFF, 0xFF, 0xFF, 0x0B, 0x40, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x0B, 0xF4, 0xFF, 0xFF, 0x06, 0x90, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0x01, 0x00, + 0xF4, 0xFF, 0x47, 0xFF, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x2F, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0xF4, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xD7, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x6F, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF7, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF6, 0xFF, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xDB, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, + 0x3F, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0xBF, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0xD0, + 0xFF, 0xFF, 0x1B, 0x40, 0xFF, 0xFF, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0x9F, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xF4, 0x7F, 0xF4, 0xFF, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0x01, 0xFE, + 0xFF, 0xBF, 0x01, 0x40, 0xFF, 0x07, 0x90, 0xFE, 0x6B, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x00, 0x00, 0xE9, 0xBF, 0x06, 0xE0, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x6F, 0xE0, 0xFF, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, + 0xFF, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFE, + 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFE, 0x2F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xF8, 0xFF, 0x01, 0x00, + 0x00, 0xFF, 0xFF, 0xF4, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xFF, 0xE0, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, + 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0x00, 0x00, 0xE9, + 0xBF, 0x01, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + // Unicode: [0x0072, r] + 0xFD, 0x1F, 0x90, 0x6E, 0xFF, 0x07, 0xFE, 0xDB, 0xFF, 0xF1, 0xFF, 0xF6, 0xBF, 0xFF, 0xBF, 0xFD, + 0xFF, 0xFF, 0x6F, 0xFF, 0xFF, 0xFF, 0xDB, 0xFF, 0xBF, 0x01, 0xF4, 0xFF, 0x07, 0x00, 0xFD, 0xBF, + 0x00, 0x40, 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0xFD, 0x2F, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x40, 0xFF, + 0x07, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x40, 0xFF, 0x07, + 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0x00, 0x00, + // Unicode: [0x0073, s] + 0x00, 0x90, 0xFE, 0x6F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF4, 0xFF, 0xAF, 0xFF, 0xFF, 0x02, 0xFF, 0x6F, 0x00, + 0xF9, 0xFF, 0xC1, 0xFF, 0x02, 0x00, 0xF8, 0xBF, 0xF4, 0xBF, 0x00, 0x00, 0xFC, 0x2F, 0xFD, 0x2F, + 0x00, 0x00, 0xAA, 0x0A, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0xBF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x02, + 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE9, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFE, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xA8, 0x6A, 0x00, + 0x00, 0xF4, 0x7F, 0xFE, 0x2F, 0x00, 0x00, 0xFD, 0x5F, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xC3, 0xFF, + 0x2F, 0x00, 0xF9, 0xFF, 0xD0, 0xFF, 0xFF, 0xFE, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0xD0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF9, 0xBF, 0x06, + 0x00, + // Unicode: [0x0074, t] + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xA9, 0xFF, 0xAB, 0xAA, + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0xAA, 0x00, 0xFD, 0xFF, 0xFF, + 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x40, 0xFA, 0xFF, + // Unicode: [0x0075, u] + 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, + 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, + 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, + 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, + 0xBF, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, + 0x00, 0x00, 0x00, 0xFF, 0xEB, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, 0x00, 0x00, + 0xFF, 0xEB, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xDB, 0xFF, + 0x01, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0xCB, 0xFF, 0x03, 0x00, 0x00, + 0xFC, 0xBF, 0xFC, 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x8B, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xBF, 0xF0, + 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0B, 0xE0, 0xFF, 0xFF, 0xFF, 0xF2, 0xBF, 0x00, 0xF4, 0xFF, 0xFF, 0x07, 0xFF, 0x0B, + 0x00, 0xA4, 0xFF, 0x06, 0xF0, 0xBF, + // Unicode: [0x0076, v] + 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xF8, 0x7F, + 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xE0, 0xFF, 0x00, 0x00, + 0x00, 0xFD, 0x2F, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0x1F, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFF, + 0x0B, 0x80, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x07, 0x40, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0x03, 0x00, + 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xFE, 0x1F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x2F, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0xF4, + 0x7F, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0xD0, 0xFF, 0x01, 0xFE, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0xFF, 0x0B, 0x00, 0x00, 0x80, + 0xFF, 0x43, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0x87, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xCB, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFD, 0xDF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x0F, 0x00, 0x00, + // Unicode: [0x0077, w] + 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0xF2, 0xBF, 0x00, 0x00, 0xD0, 0xFF, + 0x07, 0x00, 0x40, 0xFF, 0x87, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0x0F, 0xFD, + 0x1F, 0x00, 0x00, 0xFF, 0xBF, 0x00, 0x00, 0xF8, 0x2F, 0xF0, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0x03, + 0x00, 0xF0, 0x7F, 0x80, 0xFF, 0x02, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x00, 0xFE, 0x0F, + 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x80, 0xFF, 0x02, 0xF4, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0x02, 0x00, + 0xFE, 0x07, 0xC0, 0xFF, 0x01, 0x40, 0xFF, 0xFD, 0x0F, 0x00, 0xFC, 0x0F, 0x00, 0xFE, 0x0B, 0x00, + 0xFE, 0xE3, 0x7F, 0x00, 0xF4, 0x3F, 0x00, 0xF4, 0x3F, 0x00, 0xF8, 0x4B, 0xFF, 0x01, 0xE0, 0xBF, + 0x00, 0xC0, 0xFF, 0x01, 0xF0, 0x2F, 0xFD, 0x0B, 0x80, 0xFF, 0x01, 0x00, 0xFE, 0x07, 0xD0, 0x7F, + 0xF0, 0x3F, 0x00, 0xFF, 0x03, 0x00, 0xF4, 0x2F, 0x80, 0xFF, 0x80, 0xFF, 0x01, 0xFD, 0x0B, 0x00, + 0xC0, 0xFF, 0x00, 0xFF, 0x02, 0xFD, 0x07, 0xF8, 0x1F, 0x00, 0x00, 0xFE, 0x07, 0xFC, 0x07, 0xF0, + 0x2F, 0xE0, 0x3F, 0x00, 0x00, 0xF4, 0x2F, 0xF4, 0x1F, 0xC0, 0xFF, 0xC0, 0xBF, 0x00, 0x00, 0xC0, + 0xBF, 0xE0, 0x3F, 0x00, 0xFE, 0x47, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xC3, 0xBF, 0x00, 0xF4, 0x1F, + 0xFE, 0x03, 0x00, 0x00, 0xF8, 0x5F, 0xFF, 0x01, 0xC0, 0xBF, 0xF8, 0x0B, 0x00, 0x00, 0xD0, 0xBF, + 0xFD, 0x03, 0x00, 0xFE, 0xF3, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFA, 0x0F, 0x00, 0xF8, 0xEF, 0x7F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, + 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x07, 0x00, + 0x40, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, + // Unicode: [0x0078, x] + 0xFD, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xF8, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xF0, 0xFF, 0x02, 0x00, + 0xFC, 0x2F, 0xD0, 0xFF, 0x03, 0x00, 0xFE, 0x1F, 0x80, 0xFF, 0x0B, 0x00, 0xFF, 0x0B, 0x00, 0xFF, + 0x1F, 0x80, 0xFF, 0x03, 0x00, 0xFD, 0x3F, 0xD0, 0xFF, 0x01, 0x00, 0xF8, 0xBF, 0xF0, 0xBF, 0x00, + 0x00, 0xF4, 0xFF, 0xF9, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0x0B, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xFC, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0xF0, 0x7F, 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0xF8, 0xBF, 0x00, 0x00, 0xFD, + 0x1F, 0xF0, 0xFF, 0x01, 0x00, 0xFF, 0x0B, 0xD0, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x0B, + 0xD0, 0xFF, 0x02, 0x40, 0xFF, 0x1F, 0xF0, 0xFF, 0x00, 0x00, 0xFE, 0x3F, 0xF8, 0x7F, 0x00, 0x00, + 0xFC, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0xF4, 0xFF, + // Unicode: [0x0079, y] + 0xFD, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xF1, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x83, 0xFF, + 0x0B, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x01, + 0x00, 0x00, 0xFC, 0x2F, 0x40, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0xFC, 0x7F, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFF, 0x0F, 0x00, 0x80, 0xFF, + 0x03, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0xFF, 0x0F, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xC0, + 0xFF, 0x02, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0x7F, + 0x40, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xFC, + 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xF4, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xE3, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0xDF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, + 0xFF, 0xFF, 0xFF, 0x7F, 0xAA, 0xAA, 0xAA, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, + 0x80, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0x00, 0xF8, + 0xFF, 0x00, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0x0F, + 0x00, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, + 0x00, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0xD0, + 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0x7F, + 0x00, 0x00, 0x00, 0xFE, 0xBF, 0xAA, 0xAA, 0x6A, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, + // Unicode: [0x007B, braceleft] + 0x00, 0x00, 0xF9, 0x7F, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, + 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, + 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xFD, 0x0F, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFC, 0x1F, 0x00, + 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x40, 0xFF, 0x0F, 0x00, 0xE4, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0xFE, 0x6F, 0x00, 0x00, + 0xFE, 0x6F, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0xE4, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x0F, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, + 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFE, 0x0F, 0x00, + 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0x7F, + 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xF9, 0x7F, + // Unicode: [0x007C, bar] + 0xAA, 0xEA, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, + 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, + 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, + 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, + 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, + // Unicode: [0x007D, braceright] + 0xFE, 0x6F, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0x1F, 0x00, + 0xFD, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, + 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0x00, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, + 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF8, 0x3F, 0x00, + 0x00, 0xF4, 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0x1B, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0xF9, 0xBF, + 0x00, 0x00, 0xF9, 0xBF, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0x1B, 0x00, 0xF4, 0xBF, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, + 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xF4, 0x3F, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0xFD, 0xFF, 0x3F, 0x00, + 0xFE, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0xFE, 0x6F, 0x00, 0x00, + // Unicode: [0x007E, asciitilde] + 0x00, 0xF9, 0x2F, 0x00, 0x40, 0xBF, 0x80, 0xFF, 0xFF, 0x02, 0xC0, 0x7F, 0xF0, 0xFF, 0xFF, 0x6F, + 0xF4, 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0x0B, + 0xF9, 0xFF, 0xFF, 0x07, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0x01, 0xFF, 0x00, 0x00, 0xF9, 0x2B, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_50_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_50_2bpp_4.cpp new file mode 100644 index 00000000..130d211b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Medium_50_2bpp_4.cpp @@ -0,0 +1,10 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_50_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x40, 0x01, 0x00, 0x14, 0x00, 0x40, 0x01, 0xF4, 0x1F, 0x40, 0xFF, 0x01, 0xF4, 0x1F, 0xFC, 0x3F, + 0xC0, 0xFF, 0x07, 0xFC, 0x7F, 0xFD, 0xBF, 0xD0, 0xFF, 0x0B, 0xFD, 0xBF, 0xFE, 0xBF, 0xE0, 0xFF, + 0x0B, 0xFD, 0xBF, 0xFD, 0x7F, 0xD0, 0xFF, 0x0B, 0xFD, 0xBF, 0xFC, 0x3F, 0x80, 0xFF, 0x03, 0xF8, + 0x3F, 0xE0, 0x0B, 0x00, 0xBE, 0x00, 0xE0, 0x1B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_14_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_14_2bpp_0.cpp new file mode 100644 index 00000000..9f2fc6a6 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_14_2bpp_0.cpp @@ -0,0 +1,251 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_14_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xAA, 0xAA, 0xAA, 0x0A, 0xA9, + // Unicode: [0x0022, quotedbl] + 0x69, 0xA9, 0x59, + // Unicode: [0x0023, numbersign] + 0x00, 0x07, 0x0A, 0xC0, 0xC1, 0x01, 0x34, 0x30, 0xE0, 0xFF, 0xFF, 0x80, 0x82, 0x02, 0x60, 0xA0, + 0x00, 0x1C, 0x1C, 0xF8, 0xFF, 0x7F, 0xA0, 0xD0, 0x00, 0x28, 0x24, 0x00, 0x07, 0x0A, 0x00, + // Unicode: [0x0024, dollar] + 0x40, 0x00, 0x24, 0x80, 0x6F, 0x6C, 0x3A, 0x97, 0xC4, 0x25, 0xD0, 0x1B, 0x40, 0x2F, 0x90, 0x9D, + 0x25, 0xA7, 0xD9, 0xE0, 0x1B, 0x90, 0x00, + // Unicode: [0x0025, percent] + 0xA8, 0x80, 0x91, 0x24, 0x0D, 0x49, 0x72, 0x80, 0x4A, 0x02, 0x00, 0x1C, 0x00, 0xA0, 0x00, 0x40, + 0x93, 0x06, 0x28, 0xC3, 0xD0, 0x30, 0x0C, 0x07, 0x69, + // Unicode: [0x0026, ampersand] + 0x90, 0x1B, 0x00, 0x8B, 0x03, 0x70, 0x10, 0x00, 0x0D, 0x00, 0xF4, 0x02, 0xC5, 0xE1, 0x70, 0x0D, + 0xB8, 0xD2, 0x00, 0x1E, 0x6C, 0xB9, 0x42, 0xBE, 0xA1, + // Unicode: [0x0027, quotesingle] + 0x99, 0x09, + // Unicode: [0x0028, parenleft] + 0x80, 0x82, 0x42, 0x03, 0x0A, 0x1C, 0x34, 0xD0, 0x40, 0x02, 0x09, 0x34, 0xD0, 0x00, 0x07, 0x28, + 0xD0, 0x00, 0x0A, 0x70, + // Unicode: [0x0029, parenright] + 0x1D, 0xD0, 0x00, 0x0A, 0x34, 0xC0, 0x01, 0x0A, 0x28, 0x90, 0x40, 0x02, 0x0A, 0x28, 0x70, 0xD0, + 0x80, 0x42, 0x07, 0x07, + // Unicode: [0x002A, asterisk] + 0x30, 0x98, 0x89, 0x8B, 0xAA, 0x31, 0x41, 0x00, + // Unicode: [0x002B, plus] + 0x40, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, + // Unicode: [0x002C, comma] + 0x5C, 0x62, 0x0C, + // Unicode: [0x002D, hyphen] + 0xFD, 0x1F, + // Unicode: [0x002E, period] + 0xD8, + // Unicode: [0x002F, slash] + 0x80, 0x02, 0x06, 0x1C, 0x34, 0xA0, 0x80, 0x02, 0x07, 0x0D, 0x24, 0xA0, 0xC0, 0x41, 0x03, 0x0D, + 0x28, 0x70, 0xC0, 0x00, + // Unicode: [0x0030, zero] + 0xF4, 0x46, 0x97, 0xA3, 0x80, 0x1E, 0x90, 0x03, 0xF4, 0x00, 0x3D, 0x40, 0x1F, 0x90, 0x0A, 0x68, + 0x97, 0x43, 0x6F, 0x00, + // Unicode: [0x0031, one] + 0x3D, 0x0D, 0xC3, 0x30, 0x0C, 0xC3, 0x30, 0x0C, 0x03, + // Unicode: [0x0032, two] + 0xE0, 0x0B, 0x68, 0x29, 0x1C, 0x34, 0x04, 0x30, 0x00, 0x34, 0x00, 0x2C, 0x00, 0x0E, 0x80, 0x07, + 0xE0, 0x01, 0x78, 0x00, 0xFD, 0x7F, + // Unicode: [0x0033, three] + 0xE0, 0x0B, 0x78, 0x29, 0x1C, 0x30, 0x00, 0x30, 0x00, 0x28, 0xC0, 0x0B, 0x00, 0x29, 0x00, 0x70, + 0x0D, 0x70, 0x68, 0x38, 0xE0, 0x1B, + // Unicode: [0x0034, four] + 0x00, 0x3C, 0x00, 0xF8, 0x00, 0x74, 0x03, 0x70, 0x0D, 0xA0, 0x34, 0xD0, 0xD0, 0xC0, 0x41, 0x43, + 0xFF, 0x7F, 0x00, 0x34, 0x00, 0xD0, 0x00, + // Unicode: [0x0035, five] + 0xFE, 0x9F, 0x01, 0x60, 0x00, 0x18, 0x00, 0xEA, 0x87, 0x57, 0x57, 0x40, 0x03, 0xD0, 0x06, 0x64, + 0x47, 0x47, 0x7F, 0x00, + // Unicode: [0x0036, six] + 0xE4, 0x07, 0x47, 0xA7, 0x80, 0x19, 0x00, 0xE7, 0xC7, 0x57, 0x77, 0x40, 0x1B, 0xD0, 0x0A, 0x74, + 0x47, 0x4B, 0xBE, 0x00, + // Unicode: [0x0037, seven] + 0xFE, 0x3F, 0x00, 0x0D, 0x80, 0x02, 0x30, 0x00, 0x09, 0xC0, 0x01, 0x34, 0x00, 0x0A, 0xC0, 0x01, + 0x24, 0x00, 0x07, 0x00, + // Unicode: [0x0038, eight] + 0xF8, 0x87, 0x47, 0x77, 0x80, 0x1A, 0xA0, 0x1D, 0x1D, 0xFE, 0xA2, 0xD0, 0x0E, 0xD0, 0x07, 0xB4, + 0x46, 0x8B, 0x7F, 0x00, + // Unicode: [0x0039, nine] + 0xF4, 0x46, 0x47, 0x63, 0x80, 0x1E, 0x90, 0x07, 0xB8, 0x47, 0x8F, 0x7F, 0x03, 0x90, 0x09, 0x68, + 0x47, 0x47, 0x6F, 0x00, + // Unicode: [0x003A, colon] + 0x8D, 0x00, 0x00, 0xD8, + // Unicode: [0x003B, semicolon] + 0x1C, 0x06, 0x00, 0x00, 0x80, 0x32, 0x49, 0x01, + // Unicode: [0x003C, less] + 0x40, 0x81, 0x83, 0x83, 0x03, 0x2C, 0xC0, 0x02, 0x2C, + // Unicode: [0x003D, equal] + 0xFE, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, + // Unicode: [0x003E, greater] + 0x09, 0xE0, 0x00, 0x0E, 0xE0, 0xD0, 0xD1, 0xD1, 0x01, + // Unicode: [0x003F, question] + 0xE4, 0x07, 0x47, 0x97, 0x80, 0x02, 0xA0, 0x00, 0x1D, 0xBC, 0x01, 0x07, 0x00, 0x00, 0x60, 0x00, + 0x1C, 0x00, + // Unicode: [0x0040, at] + 0x00, 0xF9, 0x06, 0xD0, 0x02, 0x29, 0x34, 0x79, 0xA6, 0x5C, 0x87, 0xC3, 0x89, 0x41, 0xC3, 0xC6, + 0x40, 0xC2, 0xC3, 0x80, 0xD2, 0xC3, 0xD1, 0x62, 0x46, 0x2F, 0x2F, 0x09, 0x00, 0x00, 0x68, 0x40, + 0x00, 0x90, 0x6F, 0x00, + // Unicode: [0x0041, A] + 0x40, 0x0B, 0x00, 0x3E, 0x00, 0xEC, 0x01, 0x34, 0x0A, 0xA0, 0x34, 0xC0, 0xC1, 0x41, 0x03, 0x0A, + 0xFE, 0x3F, 0x1C, 0xC0, 0x35, 0x00, 0x0A, + // Unicode: [0x0042, B] + 0xFF, 0xCB, 0x41, 0x77, 0x80, 0x1E, 0x70, 0xFF, 0xCB, 0x41, 0x77, 0x40, 0x1E, 0xD0, 0x07, 0xED, + 0xFF, 0x02, + // Unicode: [0x0043, C] + 0x80, 0xBF, 0x00, 0x5B, 0x39, 0x28, 0x00, 0xCA, 0x01, 0x00, 0x0D, 0x00, 0xD0, 0x00, 0x00, 0x1C, + 0x00, 0x80, 0x02, 0xA0, 0xB0, 0x95, 0x03, 0xF8, 0x0B, + // Unicode: [0x0044, D] + 0xFF, 0x0B, 0x1C, 0xE4, 0x70, 0x00, 0xCA, 0x01, 0x34, 0x07, 0xC0, 0x1D, 0x00, 0x77, 0x00, 0xCD, + 0x01, 0x28, 0x07, 0x39, 0xFC, 0x2F, 0x00, + // Unicode: [0x0045, E] + 0xFF, 0x77, 0x00, 0x07, 0x70, 0x00, 0xFF, 0x73, 0x00, 0x07, 0x70, 0x00, 0x07, 0xF0, 0x7F, + // Unicode: [0x0046, F] + 0xFF, 0x7B, 0x00, 0x07, 0x70, 0x00, 0xFF, 0x72, 0x00, 0x07, 0x70, 0x00, 0x07, 0x70, 0x00, + // Unicode: [0x0047, G] + 0x80, 0xBF, 0x00, 0x6C, 0xE5, 0x81, 0x02, 0xA0, 0x70, 0x00, 0x00, 0x0D, 0xFC, 0x5F, 0x03, 0x40, + 0xC7, 0x01, 0xD0, 0xA0, 0x00, 0x2C, 0xB0, 0xD5, 0x02, 0xE0, 0x1F, 0x00, + // Unicode: [0x0048, H] + 0x07, 0xA0, 0x07, 0xA0, 0x07, 0xA0, 0x07, 0xA0, 0xFF, 0xBF, 0x07, 0xA0, 0x07, 0xA0, 0x07, 0xA0, + 0x07, 0xA0, 0x07, 0xA0, + // Unicode: [0x0049, I] + 0x77, 0x77, 0x77, 0x77, 0x77, + // Unicode: [0x004A, J] + 0x00, 0x0D, 0xD0, 0x00, 0x0D, 0xD0, 0x00, 0x0D, 0xD0, 0x00, 0x9D, 0xD0, 0x5C, 0x4A, 0x2F, + // Unicode: [0x004B, K] + 0x07, 0xEC, 0xC1, 0x72, 0x28, 0x9C, 0x02, 0x3B, 0xC0, 0x0F, 0x70, 0x0E, 0x1C, 0x0A, 0x07, 0xCB, + 0x01, 0x0B, + // Unicode: [0x004C, L] + 0x07, 0x1C, 0x70, 0xC0, 0x01, 0x07, 0x1C, 0x70, 0xC0, 0x01, 0x07, 0xFC, 0x0B, + // Unicode: [0x004D, M] + 0x0B, 0x00, 0xFE, 0x00, 0xF0, 0x2F, 0x40, 0xBF, 0x03, 0xEC, 0x67, 0xD0, 0x7D, 0x09, 0xD6, 0xC7, + 0x35, 0x7D, 0xA4, 0xD2, 0x07, 0x0F, 0x7D, 0xA0, 0xD0, + // Unicode: [0x004E, N] + 0x0B, 0xA0, 0x1F, 0xA0, 0x3B, 0xA0, 0xA7, 0xA0, 0xC7, 0xA1, 0x47, 0xA3, 0x07, 0xAA, 0x07, 0xAC, + 0x07, 0xB4, 0x07, 0xA0, + // Unicode: [0x004F, O] + 0x80, 0xBF, 0x00, 0x6C, 0xE4, 0x80, 0x02, 0xA0, 0x70, 0x00, 0x74, 0x0D, 0x00, 0x5C, 0x03, 0x00, + 0xC7, 0x01, 0xD0, 0xA1, 0x00, 0x28, 0xB0, 0x91, 0x03, 0xE0, 0x2F, 0x00, + // Unicode: [0x0050, P] + 0xFF, 0xC6, 0x41, 0x77, 0x80, 0x1E, 0xA0, 0x07, 0xDD, 0xFF, 0x71, 0x00, 0x1C, 0x00, 0x07, 0xC0, + 0x01, 0x00, + // Unicode: [0x0051, Q] + 0x80, 0xBF, 0x00, 0x6C, 0xE4, 0x80, 0x02, 0xA0, 0x70, 0x00, 0x74, 0x0D, 0x00, 0x5C, 0x03, 0x00, + 0xC7, 0x01, 0xD0, 0xA0, 0x00, 0x28, 0xB0, 0x91, 0x03, 0xE0, 0x7F, 0x00, 0x00, 0x74, 0x00, 0x00, + 0x78, + // Unicode: [0x0052, R] + 0xFF, 0xC6, 0x41, 0x77, 0x80, 0x1E, 0xA0, 0x07, 0xDD, 0xFF, 0x71, 0x2C, 0x1C, 0x1D, 0x07, 0xCA, + 0x01, 0x07, + // Unicode: [0x0053, S] + 0xF8, 0x86, 0x96, 0x73, 0x80, 0x2C, 0x00, 0xAD, 0x01, 0xE4, 0x02, 0xD0, 0x19, 0x70, 0x1A, 0x0E, + 0xBE, 0x01, + // Unicode: [0x0054, T] + 0xFE, 0x3F, 0x70, 0x00, 0x1C, 0x00, 0x07, 0xC0, 0x01, 0x70, 0x00, 0x1C, 0x00, 0x07, 0xC0, 0x01, + 0x70, 0x00, + // Unicode: [0x0055, U] + 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x0A, 0x70, + 0x5D, 0x29, 0xE4, 0x0B, + // Unicode: [0x0056, V] + 0x0E, 0x40, 0x73, 0x00, 0x8A, 0x02, 0x1C, 0x0D, 0x34, 0x70, 0x60, 0x80, 0xC2, 0x00, 0x8D, 0x02, + 0x70, 0x07, 0x80, 0x0F, 0x00, 0x2D, 0x00, + // Unicode: [0x0057, W] + 0x0A, 0xB0, 0x00, 0xD7, 0x40, 0x0F, 0x34, 0x1C, 0xE8, 0x81, 0x82, 0x82, 0x29, 0x1C, 0x24, 0x4C, + 0xD2, 0x40, 0x93, 0x34, 0x09, 0x70, 0x06, 0xA7, 0x00, 0x7A, 0xA0, 0x07, 0xD0, 0x03, 0x3D, 0x00, + 0x2C, 0xC0, 0x02, + // Unicode: [0x0058, X] + 0x07, 0x68, 0x43, 0xC7, 0xA2, 0xD0, 0x0E, 0xE0, 0x01, 0x78, 0x40, 0x3B, 0x70, 0x2C, 0x0D, 0xDD, + 0x01, 0x0A, + // Unicode: [0x0059, Y] + 0x0D, 0xA0, 0x1C, 0x34, 0x34, 0x28, 0x70, 0x0D, 0x90, 0x0A, 0xC0, 0x03, 0x80, 0x02, 0x80, 0x02, + 0x80, 0x02, 0x80, 0x02, + // Unicode: [0x005A, Z] + 0xFD, 0x3F, 0x00, 0x0B, 0xD0, 0x00, 0x1C, 0x80, 0x02, 0x74, 0x00, 0x0B, 0xD0, 0x00, 0x1C, 0x40, + 0xFF, 0x0F, + // Unicode: [0x005B, bracketleft] + 0xDF, 0x30, 0x0C, 0xC3, 0x30, 0x0C, 0xC3, 0x30, 0x0C, 0xC3, 0x30, 0x7C, + // Unicode: [0x005C, backslash] + 0x07, 0xA0, 0x00, 0x09, 0xD0, 0x00, 0x1C, 0x80, 0x02, 0x34, 0x00, 0x03, 0x70, 0x00, 0x0A, 0xD0, + 0x00, 0x1C, 0x80, 0x02, 0x24, 0x40, 0x03, 0x70, + // Unicode: [0x005D, bracketright] + 0x3D, 0x0D, 0xC3, 0x30, 0x0C, 0xC3, 0x30, 0x0C, 0xC3, 0x30, 0x0C, 0xF7, + // Unicode: [0x005E, asciicircum] + 0x00, 0x02, 0x80, 0x07, 0xC0, 0x0E, 0xA0, 0x1C, 0x70, 0x28, 0x34, 0x70, 0x18, 0xA0, 0x0D, 0xD0, + // Unicode: [0x005F, underscore] + 0xFE, 0xFF, 0x54, 0x55, + // Unicode: [0x0060, grave] + 0x06, 0x0A, + // Unicode: [0x0061, a] + 0xE0, 0xDB, 0xE1, 0xD5, 0xC7, 0x01, 0x5D, 0x03, 0x70, 0x0D, 0xC0, 0x71, 0x40, 0x87, 0x47, 0x1E, + 0xF8, 0x76, + // Unicode: [0x0062, b] + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0xE7, 0x1B, 0x6F, 0x39, 0x0B, 0xA0, 0x07, 0x90, 0x07, 0xA0, + 0x0B, 0xA0, 0x6F, 0x39, 0xE7, 0x1B, + // Unicode: [0x0063, c] + 0xE0, 0x1B, 0x78, 0x74, 0x1C, 0x50, 0x0D, 0x00, 0x0D, 0x00, 0x1C, 0x50, 0x78, 0x74, 0xE0, 0x1B, + // Unicode: [0x0064, d] + 0x00, 0xC0, 0x01, 0x00, 0x07, 0x00, 0x1C, 0xF8, 0x76, 0x78, 0xF5, 0x71, 0x40, 0xD7, 0x00, 0x5C, + 0x03, 0x70, 0x1C, 0xD0, 0xE1, 0x91, 0x07, 0xBE, 0x1D, + // Unicode: [0x0065, e] + 0xE0, 0x1F, 0x68, 0x74, 0x0C, 0xD0, 0xFD, 0xFF, 0x0D, 0x00, 0x1C, 0x90, 0x78, 0x74, 0xE0, 0x1B, + // Unicode: [0x0066, f] + 0xE0, 0xE0, 0x81, 0x82, 0x7F, 0x28, 0xA0, 0x80, 0x02, 0x0A, 0x28, 0xA0, 0x80, 0x02, + // Unicode: [0x0067, g] + 0xE0, 0xDB, 0xE1, 0x91, 0xC7, 0x01, 0x5D, 0x03, 0x70, 0x0D, 0xC0, 0x71, 0x40, 0x87, 0x57, 0x1F, + 0xF8, 0x76, 0x00, 0xC0, 0x61, 0x40, 0x47, 0x47, 0x0B, 0xE4, 0x0B, + // Unicode: [0x0068, h] + 0x07, 0xC0, 0x01, 0x70, 0x00, 0x9C, 0x2F, 0x5F, 0xDD, 0x02, 0x7E, 0x40, 0x1F, 0xD0, 0x07, 0xF4, + 0x01, 0x7D, 0x40, 0x03, + // Unicode: [0x0069, i] + 0x67, 0x70, 0x77, 0x77, 0x77, 0x07, + // Unicode: [0x006A, j] + 0x70, 0x60, 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x74, 0x2D, + // Unicode: [0x006B, k] + 0x07, 0x70, 0x00, 0x07, 0x70, 0xB0, 0xC7, 0x72, 0x0A, 0x3F, 0xF0, 0x03, 0xA7, 0x70, 0x2C, 0x07, + 0x0B, + // Unicode: [0x006C, l] + 0x77, 0x77, 0x77, 0x77, 0x77, 0x07, + // Unicode: [0x006D, m] + 0xE7, 0x4B, 0x6F, 0x7C, 0xB4, 0x82, 0xB3, 0x80, 0x03, 0xDC, 0x01, 0x0D, 0x70, 0x07, 0x34, 0xC0, + 0x1D, 0xD0, 0x00, 0x77, 0x40, 0x03, 0xDC, 0x01, 0x0D, 0x70, + // Unicode: [0x006E, n] + 0xEB, 0xCB, 0x47, 0xB7, 0x40, 0x1E, 0xD0, 0x07, 0xF4, 0x01, 0x7D, 0x40, 0x1F, 0xD0, + // Unicode: [0x006F, o] + 0xD0, 0x1F, 0xE0, 0xD5, 0xC2, 0x01, 0x4D, 0x03, 0x70, 0x0D, 0xC0, 0x71, 0x40, 0x83, 0x57, 0x0B, + 0xF4, 0x07, + // Unicode: [0x0070, p] + 0xE7, 0x1B, 0x6F, 0x39, 0x0B, 0xA0, 0x07, 0x90, 0x07, 0xA0, 0x0B, 0xA0, 0x6F, 0x39, 0xE7, 0x1B, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, + // Unicode: [0x0071, q] + 0xE0, 0xDB, 0xE1, 0xD5, 0xC7, 0x01, 0x5D, 0x03, 0x70, 0x0D, 0xC0, 0x71, 0x40, 0x87, 0x57, 0x1F, + 0xF8, 0x76, 0x00, 0xC0, 0x01, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x70, + // Unicode: [0x0072, r] + 0xA7, 0x6F, 0x0B, 0x07, 0x07, 0x07, 0x07, 0x07, + // Unicode: [0x0073, s] + 0xF9, 0x71, 0x74, 0x07, 0xE5, 0x06, 0xE4, 0x13, 0xA0, 0x4B, 0x97, 0x2F, + // Unicode: [0x0074, t] + 0x28, 0xA0, 0xE0, 0x2F, 0x0A, 0x28, 0xA0, 0x80, 0x02, 0x0A, 0x28, 0x80, 0x0B, + // Unicode: [0x0075, u] + 0x07, 0xF4, 0x01, 0x7D, 0x40, 0x1F, 0xD0, 0x07, 0xF4, 0x01, 0xEE, 0xD1, 0xE3, 0xEB, + // Unicode: [0x0076, v] + 0x0A, 0x70, 0x0D, 0x34, 0x1C, 0x28, 0x28, 0x1C, 0x30, 0x0D, 0xA0, 0x0A, 0xD0, 0x07, 0xC0, 0x03, + // Unicode: [0x0077, w] + 0x0A, 0x2C, 0x70, 0x43, 0x0F, 0xCD, 0xA0, 0x83, 0x62, 0x9C, 0x71, 0x24, 0x93, 0x0C, 0x9D, 0x70, + 0x02, 0x1F, 0x7C, 0x80, 0x03, 0x0E, + // Unicode: [0x0078, x] + 0x0E, 0x1C, 0x8B, 0x42, 0x37, 0x80, 0x07, 0xE0, 0x01, 0xED, 0xC0, 0xA1, 0x28, 0x74, + // Unicode: [0x0079, y] + 0x0A, 0x60, 0x0D, 0x34, 0x1C, 0x28, 0x34, 0x1C, 0x70, 0x0D, 0xA0, 0x0A, 0xD0, 0x07, 0xC0, 0x02, + 0xC0, 0x01, 0xD0, 0x00, 0xA0, 0x00, 0x70, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0x0B, 0x70, 0x80, 0x02, 0x1D, 0xB0, 0x80, 0x03, 0x1D, 0xD0, 0xBF, + // Unicode: [0x007B, braceleft] + 0xE0, 0xD1, 0x41, 0x03, 0x0D, 0x34, 0xC0, 0x40, 0x43, 0x0B, 0x1D, 0xD0, 0x00, 0x03, 0x0D, 0x34, + 0xD0, 0x40, 0x03, 0xB8, + // Unicode: [0x007C, bar] + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, + // Unicode: [0x007D, braceright] + 0x1B, 0x29, 0x24, 0x24, 0x28, 0x28, 0x28, 0xB4, 0xA0, 0x28, 0x28, 0x28, 0x24, 0x24, 0x28, 0x1F, + // Unicode: [0x007E, asciitilde] + 0xB8, 0x64, 0xE6, 0x07 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_14_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_14_2bpp_4.cpp new file mode 100644 index 00000000..477f86aa --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_14_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_14_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x48, 0x62, 0x8D, 0x72 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_16_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_16_2bpp_0.cpp new file mode 100644 index 00000000..4d9c033a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_16_2bpp_0.cpp @@ -0,0 +1,275 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_16_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x4D, 0xD3, 0x34, 0x4D, 0xD3, 0x34, 0x40, 0xD7, 0x01, + // Unicode: [0x0022, quotedbl] + 0x44, 0xDD, 0xDD, 0xC9, + // Unicode: [0x0023, numbersign] + 0x00, 0x0D, 0x34, 0x00, 0x34, 0xA0, 0x00, 0xA0, 0xC0, 0x01, 0xFE, 0xFF, 0xBF, 0x50, 0x57, 0x5E, + 0x00, 0x0D, 0x38, 0x00, 0x34, 0xA0, 0x00, 0xA0, 0xC0, 0x02, 0xFD, 0xFF, 0xBF, 0x50, 0x57, 0x5D, + 0x00, 0x0D, 0x38, 0x00, 0x38, 0xA0, 0x00, + // Unicode: [0x0024, dollar] + 0x80, 0x00, 0x80, 0x00, 0xF8, 0x0B, 0x9E, 0x2D, 0x8B, 0x24, 0x8B, 0x00, 0xAE, 0x00, 0xE4, 0x0B, + 0x80, 0x3D, 0x80, 0x74, 0x8A, 0x70, 0x9E, 0x39, 0xF4, 0x0B, 0x80, 0x00, 0x40, 0x00, + // Unicode: [0x0025, percent] + 0xF8, 0x02, 0x0A, 0x0D, 0x47, 0x03, 0x0D, 0xC7, 0x02, 0xF4, 0xD1, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x5D, 0x1E, 0x00, 0xCA, 0x71, 0x40, 0xC3, 0x60, 0xC0, 0xC1, 0x70, 0xA0, 0x40, + 0x2A, + // Unicode: [0x0026, ampersand] + 0x80, 0x2F, 0x00, 0xE0, 0xB5, 0x00, 0xA0, 0x50, 0x00, 0xD0, 0x01, 0x00, 0xD0, 0x07, 0x00, 0x78, + 0x1D, 0x28, 0x1D, 0x74, 0x1D, 0x0D, 0xD0, 0x0B, 0x1D, 0xC0, 0x07, 0x78, 0xF5, 0x1E, 0xE0, 0x2F, + 0x78, + // Unicode: [0x0027, quotesingle] + 0xD4, 0x9D, + // Unicode: [0x0028, parenleft] + 0x40, 0x07, 0x2C, 0xE0, 0x00, 0x07, 0x38, 0x80, 0x02, 0x1C, 0xC0, 0x01, 0x1D, 0xD0, 0x01, 0x1C, + 0xC0, 0x01, 0x2C, 0x80, 0x03, 0x74, 0x00, 0x0A, 0xD0, 0x01, 0x74, + // Unicode: [0x0029, parenright] + 0x1D, 0x40, 0x07, 0xE0, 0x00, 0x1C, 0x80, 0x02, 0x34, 0x00, 0x07, 0x70, 0x00, 0x07, 0x70, 0x00, + 0x07, 0x70, 0x40, 0x03, 0x38, 0xC0, 0x02, 0x0E, 0x74, 0xC0, 0x02, + // Unicode: [0x002A, asterisk] + 0x60, 0x60, 0x56, 0xF9, 0x96, 0x6F, 0x66, 0x06, 0x06, + // Unicode: [0x002B, plus] + 0x00, 0x01, 0x00, 0x0D, 0x00, 0x34, 0x00, 0xD0, 0x00, 0xFE, 0xFF, 0x52, 0x5D, 0x01, 0x34, 0x00, + 0xD0, 0x00, 0x40, 0x03, 0x00, + // Unicode: [0x002C, comma] + 0x14, 0xD7, 0x28, 0x03, + // Unicode: [0x002D, hyphen] + 0xFF, 0x5F, 0x55, 0x01, + // Unicode: [0x002E, period] + 0x77, + // Unicode: [0x002F, slash] + 0x00, 0x0B, 0x70, 0x40, 0x03, 0x28, 0xC0, 0x02, 0x1C, 0xD0, 0x00, 0x0E, 0xB0, 0x00, 0x07, 0x34, + 0x80, 0x03, 0x28, 0xC0, 0x01, 0x0D, 0xE0, 0x00, 0x0A, 0x70, 0x00, + // Unicode: [0x0030, zero] + 0xE4, 0x1B, 0x7C, 0x39, 0x0E, 0xB0, 0x0A, 0xA0, 0x0B, 0xD0, 0x07, 0xD0, 0x07, 0xD0, 0x0B, 0xD0, + 0x0A, 0xA0, 0x0E, 0xB0, 0x6C, 0x39, 0xE4, 0x1B, + // Unicode: [0x0031, one] + 0xBD, 0xB4, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, + // Unicode: [0x0032, two] + 0xD0, 0x1F, 0xD0, 0xD6, 0xC2, 0x02, 0x0D, 0x07, 0x34, 0x00, 0xD0, 0x00, 0xC0, 0x02, 0x80, 0x07, + 0x40, 0x07, 0x40, 0x0B, 0x40, 0x07, 0x80, 0x5B, 0x45, 0xFF, 0xBF, + // Unicode: [0x0033, three] + 0xE4, 0x0B, 0x6D, 0x2D, 0x0B, 0x74, 0x00, 0x34, 0x00, 0x29, 0xE0, 0x0B, 0x40, 0x2D, 0x00, 0x74, + 0x02, 0x70, 0x0B, 0x74, 0x6D, 0x3D, 0xE4, 0x0B, + // Unicode: [0x0034, four] + 0x00, 0xF4, 0x00, 0xC0, 0x0F, 0x00, 0xDA, 0x00, 0x38, 0x0D, 0xD0, 0xD1, 0x00, 0x07, 0x0D, 0x28, + 0xD0, 0xD0, 0xFF, 0xBF, 0x54, 0xE5, 0x01, 0x00, 0x0D, 0x00, 0xD0, 0x00, + // Unicode: [0x0035, five] + 0xFE, 0x7F, 0x5A, 0x15, 0x0A, 0x00, 0x0A, 0x00, 0xDA, 0x1F, 0x6E, 0x79, 0x09, 0xE0, 0x00, 0xD0, + 0x01, 0xD0, 0x0E, 0xE0, 0x6C, 0x79, 0xE0, 0x1B, + // Unicode: [0x0036, six] + 0xE0, 0x1B, 0x68, 0x79, 0x0D, 0xA0, 0x0A, 0x00, 0xD6, 0x1F, 0x6A, 0x79, 0x0E, 0xE0, 0x0A, 0xD0, + 0x0A, 0xD0, 0x0D, 0xE0, 0x78, 0x79, 0xE0, 0x1F, + // Unicode: [0x0037, seven] + 0xFD, 0xFF, 0x54, 0xE5, 0x00, 0xA0, 0x00, 0x34, 0x00, 0x28, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, + 0x40, 0x03, 0x80, 0x02, 0xD0, 0x01, 0xE0, 0x00, + // Unicode: [0x0038, eight] + 0xE4, 0x1B, 0x6D, 0x79, 0x0A, 0xA0, 0x0A, 0xA0, 0x1D, 0x74, 0xF4, 0x1F, 0x6D, 0x79, 0x0B, 0xE0, + 0x07, 0xD0, 0x0B, 0xE0, 0x6D, 0x79, 0xE4, 0x1B, + // Unicode: [0x0039, nine] + 0xE4, 0x1B, 0x6C, 0x39, 0x0E, 0xB0, 0x0A, 0xA0, 0x0A, 0xD0, 0x0E, 0xE0, 0x2D, 0xF8, 0xF4, 0xDB, + 0x40, 0x90, 0x09, 0xA0, 0x6C, 0x39, 0xE0, 0x1B, + // Unicode: [0x003A, colon] + 0x77, 0x00, 0x00, 0x70, 0x07, + // Unicode: [0x003B, semicolon] + 0x28, 0x0A, 0x00, 0x00, 0x00, 0xA1, 0x5C, 0x93, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x05, 0x78, 0xE0, 0x80, 0x03, 0x1D, 0x40, 0x07, 0xD0, 0x01, 0xB4, + // Unicode: [0x003D, equal] + 0xFD, 0xFF, 0x53, 0x55, 0x05, 0x00, 0x40, 0xFF, 0xFF, 0x54, 0x55, 0x01, + // Unicode: [0x003E, greater] + 0x05, 0x78, 0x40, 0x07, 0x74, 0xC0, 0x83, 0xC3, 0xC2, 0x02, + // Unicode: [0x003F, question] + 0xE0, 0x1B, 0x6C, 0x39, 0x0D, 0xB0, 0x00, 0xB0, 0x00, 0x78, 0xE0, 0x1B, 0xA0, 0x00, 0x50, 0x00, + 0x00, 0x00, 0xA0, 0x00, 0xA0, 0x00, + // Unicode: [0x0040, at] + 0x00, 0xE4, 0x2B, 0x00, 0xB4, 0x45, 0x1E, 0xD0, 0x01, 0x40, 0x43, 0x03, 0x00, 0xA0, 0x1C, 0xF4, + 0x2A, 0xDD, 0xE0, 0xE5, 0xD2, 0x4A, 0x07, 0x1C, 0x6D, 0x38, 0xC0, 0x91, 0x86, 0x02, 0x0D, 0x6A, + 0x74, 0xE4, 0x34, 0x0A, 0xBE, 0xB8, 0xC1, 0x01, 0x00, 0x00, 0xB4, 0x00, 0x01, 0x00, 0xF9, 0x2F, + 0x00, + // Unicode: [0x0041, A] + 0x00, 0x1E, 0x00, 0xF0, 0x02, 0x40, 0x37, 0x00, 0x28, 0x0B, 0xC0, 0xE1, 0x00, 0x0D, 0x1C, 0xA0, + 0x80, 0x42, 0xFF, 0x3F, 0x78, 0x55, 0xC7, 0x02, 0xA0, 0x1D, 0x00, 0x0D, + // Unicode: [0x0042, B] + 0xFE, 0x1B, 0x5A, 0x79, 0x0A, 0xB0, 0x0A, 0xA0, 0x0A, 0x74, 0xFE, 0x1F, 0x5A, 0x75, 0x0A, 0xE0, + 0x0A, 0xE0, 0x5A, 0xB5, 0xFE, 0x2F, + // Unicode: [0x0043, C] + 0x40, 0xFE, 0x02, 0xB8, 0xE5, 0x47, 0x07, 0x80, 0xB3, 0x00, 0x40, 0x1D, 0x00, 0x40, 0x07, 0x00, + 0xD0, 0x01, 0x00, 0xB0, 0x00, 0x40, 0x74, 0x00, 0x38, 0xB8, 0xD5, 0x07, 0xE4, 0x2F, 0x00, + // Unicode: [0x0044, D] + 0xFE, 0x1B, 0xA0, 0x55, 0x0F, 0x0A, 0x80, 0xA2, 0x00, 0x74, 0x0A, 0x00, 0xAB, 0x00, 0xB0, 0x0A, + 0x00, 0xAB, 0x00, 0x74, 0x0A, 0x80, 0xA2, 0x55, 0x0F, 0xFE, 0x1B, 0x00, + // Unicode: [0x0045, E] + 0xFE, 0x9F, 0x56, 0xA1, 0x00, 0x28, 0x00, 0x0A, 0x80, 0xFF, 0xA2, 0x15, 0x28, 0x00, 0x0A, 0x80, + 0x56, 0xE1, 0xFF, 0x01, + // Unicode: [0x0046, F] + 0xFE, 0xAF, 0x56, 0xA1, 0x00, 0x28, 0x00, 0x0A, 0x80, 0xFF, 0xA2, 0x15, 0x28, 0x00, 0x0A, 0x80, + 0x02, 0xA0, 0x00, 0x00, + // Unicode: [0x0047, G] + 0x40, 0xFE, 0x02, 0xE0, 0x96, 0x1F, 0x74, 0x00, 0x38, 0x2C, 0x00, 0x10, 0x1D, 0x00, 0x00, 0x1D, + 0xF4, 0xBF, 0x1D, 0x50, 0xB5, 0x2C, 0x00, 0x74, 0x74, 0x00, 0x38, 0xE0, 0x96, 0x1F, 0x40, 0xFE, + 0x02, + // Unicode: [0x0048, H] + 0x0A, 0x80, 0x2A, 0x00, 0xAA, 0x00, 0xA8, 0x02, 0xA0, 0x0A, 0x80, 0xFA, 0xFF, 0xAB, 0x55, 0xA9, + 0x02, 0xA0, 0x0A, 0x80, 0x2A, 0x00, 0xAA, 0x00, 0x28, + // Unicode: [0x0049, I] + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, + // Unicode: [0x004A, J] + 0x00, 0x38, 0x00, 0x0E, 0x80, 0x03, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x80, 0x03, 0xE0, 0x1D, 0x28, + 0x9B, 0x47, 0xBE, 0x00, + // Unicode: [0x004B, K] + 0x0A, 0xB4, 0x0A, 0x2C, 0x0A, 0x0B, 0x8A, 0x03, 0xEA, 0x00, 0x7E, 0x00, 0xEA, 0x00, 0xCA, 0x03, + 0x0A, 0x0B, 0x0A, 0x2C, 0x0A, 0xB4, + // Unicode: [0x004C, L] + 0x0A, 0xA0, 0x00, 0x0A, 0xA0, 0x00, 0x0A, 0xA0, 0x00, 0x0A, 0xA0, 0x00, 0x0A, 0xA0, 0x15, 0xFE, + 0x0B, + // Unicode: [0x004D, M] + 0x0E, 0x00, 0xB4, 0x1E, 0x00, 0xB8, 0x3E, 0x00, 0xBC, 0x7A, 0x00, 0xBA, 0xAA, 0x00, 0xB7, 0xCA, + 0x41, 0xB3, 0x8A, 0xC2, 0xB1, 0x4A, 0xD7, 0xB0, 0x0A, 0xBA, 0xB0, 0x0A, 0x3D, 0xB0, 0x0A, 0x28, + 0xB0, + // Unicode: [0x004E, N] + 0x0E, 0x40, 0xBB, 0x00, 0xED, 0x07, 0xB4, 0x36, 0xD0, 0x8A, 0x42, 0x2B, 0x1C, 0xAD, 0xD0, 0xB4, + 0x02, 0xDA, 0x0A, 0xB0, 0x2B, 0x40, 0xAF, 0x00, 0x38, + // Unicode: [0x004F, O] + 0x40, 0xFE, 0x02, 0xE0, 0x56, 0x1F, 0x74, 0x00, 0x38, 0x2C, 0x00, 0x70, 0x1D, 0x00, 0xA0, 0x1D, + 0x00, 0xE0, 0x1D, 0x00, 0xA0, 0x2C, 0x00, 0xB0, 0x74, 0x00, 0x38, 0xE0, 0x56, 0x1F, 0x40, 0xFE, + 0x02, + // Unicode: [0x0050, P] + 0xFE, 0x1B, 0x5A, 0x79, 0x0A, 0xB0, 0x0A, 0xB0, 0x0A, 0x74, 0xFE, 0x1F, 0x5A, 0x00, 0x0A, 0x00, + 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, + // Unicode: [0x0051, Q] + 0x40, 0xFE, 0x02, 0xE0, 0x56, 0x1F, 0x74, 0x00, 0x38, 0x2C, 0x00, 0xB0, 0x1D, 0x00, 0xA0, 0x1D, + 0x00, 0xE0, 0x1D, 0x00, 0xA0, 0x2C, 0x00, 0x70, 0x74, 0x00, 0x38, 0xE0, 0x56, 0x1F, 0x40, 0xFE, + 0x0B, 0x00, 0x00, 0x2D, 0x00, 0x00, 0xB4, + // Unicode: [0x0052, R] + 0xFE, 0x1B, 0x5A, 0x79, 0x0A, 0xB0, 0x0A, 0xB0, 0x0A, 0x78, 0xFE, 0x1F, 0x5A, 0x07, 0x0A, 0x0E, + 0x0A, 0x1D, 0x0A, 0x38, 0x0A, 0xB4, + // Unicode: [0x0053, S] + 0xF4, 0x0B, 0x5E, 0x2D, 0x0B, 0x64, 0x0B, 0x00, 0x6E, 0x00, 0xE4, 0x0B, 0x00, 0x3D, 0x00, 0x70, + 0x0B, 0x70, 0x6E, 0x39, 0xF4, 0x0B, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0x94, 0x57, 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, + 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, + // Unicode: [0x0055, U] + 0x0A, 0xC0, 0x2A, 0x00, 0xAB, 0x00, 0xAC, 0x02, 0xB0, 0x0A, 0xC0, 0x2A, 0x00, 0xAB, 0x00, 0xAC, + 0x02, 0xB0, 0x0E, 0xD0, 0xF1, 0xE5, 0x02, 0xFE, 0x02, + // Unicode: [0x0056, V] + 0x0D, 0x00, 0x1D, 0x07, 0x80, 0x83, 0x02, 0x70, 0xD0, 0x01, 0x0D, 0xB0, 0x80, 0x02, 0x38, 0x70, + 0x00, 0x1C, 0x0D, 0x00, 0xCA, 0x02, 0x40, 0x77, 0x00, 0xC0, 0x0B, 0x00, 0xE0, 0x01, 0x00, + // Unicode: [0x0057, W] + 0x0D, 0xC0, 0x02, 0x74, 0x07, 0xF4, 0x00, 0xCA, 0x02, 0x7A, 0xC0, 0xE2, 0xC0, 0x29, 0x74, 0x34, + 0x34, 0x0E, 0x0E, 0x1C, 0x4A, 0x87, 0x02, 0x8A, 0xC1, 0x71, 0x80, 0x73, 0xA0, 0x0D, 0xD0, 0x0E, + 0xB4, 0x02, 0xF0, 0x02, 0x7C, 0x00, 0x78, 0x00, 0x0E, 0x00, + // Unicode: [0x0058, X] + 0x0B, 0xE0, 0x1D, 0x74, 0x38, 0x2C, 0xB0, 0x0D, 0xD0, 0x07, 0xC0, 0x03, 0xD0, 0x07, 0x70, 0x0E, + 0x28, 0x2C, 0x1D, 0x74, 0x0B, 0xE0, + // Unicode: [0x0059, Y] + 0x1D, 0x80, 0xB2, 0x40, 0x47, 0x03, 0x0A, 0x28, 0x1D, 0xD0, 0x28, 0x00, 0x3E, 0x00, 0xB4, 0x00, + 0xC0, 0x01, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x00, + // Unicode: [0x005A, Z] + 0xFD, 0xFF, 0x54, 0xB5, 0x00, 0x38, 0x00, 0x1D, 0x00, 0x0B, 0x80, 0x03, 0xD0, 0x02, 0xE0, 0x00, + 0x74, 0x00, 0x6C, 0x55, 0xFD, 0xFF, + // Unicode: [0x005B, bracketleft] + 0xFF, 0x76, 0x1C, 0xC7, 0x71, 0x1C, 0xC7, 0x71, 0x1C, 0xC7, 0x71, 0x1C, 0xC7, 0x5F, 0x01, + // Unicode: [0x005C, backslash] + 0x0A, 0x40, 0x03, 0xD0, 0x01, 0xB0, 0x00, 0x28, 0x00, 0x0D, 0x00, 0x07, 0x80, 0x02, 0xE0, 0x00, + 0x74, 0x00, 0x1C, 0x00, 0x0A, 0x40, 0x03, 0xC0, 0x01, 0xB0, 0x00, 0x38, 0x00, 0x0D, 0x00, 0x07, + // Unicode: [0x005D, bracketright] + 0xBD, 0xA4, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, + 0xA0, 0xBD, 0x14, + // Unicode: [0x005E, asciicircum] + 0x00, 0x05, 0x00, 0xF0, 0x00, 0x80, 0x2F, 0x00, 0x6C, 0x03, 0xD0, 0x70, 0x00, 0x0B, 0x0E, 0x74, + 0xC0, 0x81, 0x02, 0x28, 0x1D, 0x40, 0x07, + // Unicode: [0x005F, underscore] + 0xFD, 0xFF, 0x47, 0x55, 0x15, + // Unicode: [0x0060, grave] + 0x01, 0x1E, 0xB4, 0x40, + // Unicode: [0x0061, a] + 0x90, 0x2F, 0x4B, 0x5B, 0xBE, 0x2C, 0x80, 0xDB, 0x01, 0xB0, 0x1D, 0x00, 0xDB, 0x01, 0xB0, 0x2C, + 0x40, 0x4B, 0x5B, 0xBE, 0x90, 0x2F, 0x0B, + // Unicode: [0x0062, b] + 0x0A, 0x00, 0x28, 0x00, 0xA0, 0x00, 0x80, 0xE6, 0x0B, 0xBA, 0xF5, 0x78, 0x00, 0xEB, 0x00, 0xB8, + 0x02, 0xD0, 0x0E, 0x80, 0x7B, 0x00, 0xAB, 0x5B, 0x8F, 0xE6, 0x0B, + // Unicode: [0x0063, c] + 0x90, 0x6F, 0xD0, 0x96, 0xC7, 0x02, 0x68, 0x07, 0x00, 0x1D, 0x00, 0x74, 0x00, 0xC0, 0x02, 0x28, + 0x6D, 0x79, 0x90, 0x6F, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x00, 0x0B, 0xF9, 0xB2, 0xB4, 0xE5, 0xCB, 0x02, 0xB8, 0x1D, + 0x00, 0xDB, 0x01, 0xB0, 0x1D, 0x00, 0xCB, 0x02, 0xB4, 0xB4, 0xE5, 0x0B, 0xF9, 0xB2, + // Unicode: [0x0065, e] + 0x90, 0x6F, 0x40, 0x5B, 0x1E, 0x2C, 0x80, 0xD3, 0x01, 0x34, 0xFD, 0xFF, 0xD7, 0x55, 0x15, 0x2C, + 0x80, 0x42, 0x5B, 0x1E, 0x90, 0x6F, 0x00, + // Unicode: [0x0066, f] + 0xD0, 0xD2, 0x46, 0x83, 0xBF, 0x78, 0xE1, 0x80, 0x03, 0x0E, 0x38, 0xE0, 0x80, 0x03, 0x0E, + // Unicode: [0x0067, g] + 0x90, 0x2F, 0x4B, 0x5B, 0xBE, 0x2C, 0x40, 0xDB, 0x01, 0xB0, 0x1D, 0x00, 0xDB, 0x01, 0xB0, 0x2C, + 0x80, 0x4B, 0x5B, 0xBE, 0x90, 0x2F, 0x0B, 0x00, 0xB0, 0x28, 0x40, 0x47, 0x5B, 0x2E, 0x90, 0x7F, + 0x00, + // Unicode: [0x0068, h] + 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0xDA, 0x1F, 0x7E, 0x79, 0x0E, 0xE0, 0x0A, 0xD0, 0x0A, 0xD0, + 0x0A, 0xD0, 0x0A, 0xD0, 0x0A, 0xD0, 0x0A, 0xD0, + // Unicode: [0x0069, i] + 0xAA, 0xA0, 0xAA, 0xAA, 0xAA, 0xAA, + // Unicode: [0x006A, j] + 0xA0, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xB4, 0x2D, + // Unicode: [0x006B, k] + 0x0A, 0x80, 0x02, 0xA0, 0x00, 0x28, 0xB4, 0x4A, 0x8B, 0xB2, 0xA0, 0x0B, 0xF8, 0x01, 0xBA, 0x80, + 0xB2, 0xA0, 0xB4, 0x28, 0xB4, + // Unicode: [0x006C, l] + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + // Unicode: [0x006D, m] + 0xDA, 0x1F, 0xF9, 0x82, 0x5B, 0xEE, 0xD1, 0xE2, 0x00, 0x1E, 0xD0, 0x28, 0x40, 0x03, 0x70, 0x0A, + 0xD0, 0x00, 0x9C, 0x02, 0x34, 0x00, 0xA7, 0x00, 0x0D, 0xC0, 0x29, 0x40, 0x03, 0x70, 0x0A, 0xD0, + 0x00, 0x1C, + // Unicode: [0x006E, n] + 0xDA, 0x1B, 0x6E, 0x79, 0x0E, 0xE0, 0x0A, 0xD0, 0x0A, 0xD0, 0x0A, 0xD0, 0x0A, 0xD0, 0x0A, 0xD0, + 0x0A, 0xD0, + // Unicode: [0x006F, o] + 0x90, 0x6F, 0x40, 0x5B, 0x1E, 0x2C, 0x80, 0xD3, 0x01, 0x70, 0x1D, 0x00, 0xDB, 0x01, 0x70, 0x2C, + 0x80, 0x43, 0x5B, 0x1E, 0x90, 0x6F, 0x00, + // Unicode: [0x0070, p] + 0x9A, 0x2F, 0xE8, 0xD6, 0xE3, 0x01, 0xAC, 0x03, 0xE0, 0x0A, 0x40, 0x3B, 0x00, 0xEE, 0x01, 0xAC, + 0x6E, 0x3D, 0x9A, 0x2F, 0x28, 0x00, 0xA0, 0x00, 0x80, 0x02, 0x00, 0x0A, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x90, 0x2F, 0x4B, 0x5B, 0xBE, 0x2C, 0x80, 0xDB, 0x01, 0xB0, 0x1D, 0x00, 0xDB, 0x01, 0xB0, 0x2C, + 0x80, 0x4B, 0x5B, 0xBE, 0x90, 0x2F, 0x0B, 0x00, 0xB0, 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x00, + 0x0B, + // Unicode: [0x0072, r] + 0xDA, 0xFA, 0xE6, 0x80, 0x02, 0x0A, 0x28, 0xA0, 0x80, 0x02, 0x0A, 0x00, + // Unicode: [0x0073, s] + 0xF8, 0x86, 0x97, 0x73, 0x80, 0x79, 0x00, 0xF8, 0x06, 0x90, 0x67, 0xC0, 0x79, 0x79, 0xF8, 0x07, + // Unicode: [0x0074, t] + 0x34, 0x40, 0x03, 0xFE, 0x87, 0x17, 0x34, 0x40, 0x03, 0x34, 0x40, 0x03, 0x34, 0x40, 0x17, 0xE0, + 0x07, + // Unicode: [0x0075, u] + 0x0B, 0xD0, 0x0B, 0xD0, 0x0B, 0xD0, 0x0B, 0xD0, 0x0B, 0xD0, 0x0A, 0xE0, 0x0E, 0xE0, 0x6D, 0xF9, + 0xE4, 0xDB, + // Unicode: [0x0076, v] + 0x0E, 0xC0, 0x76, 0x40, 0xC7, 0x02, 0x0A, 0x0D, 0x1C, 0x70, 0x34, 0x80, 0xA2, 0x00, 0xDD, 0x01, + 0xF0, 0x03, 0x80, 0x0B, 0x00, + // Unicode: [0x0077, w] + 0x0A, 0x74, 0x80, 0x36, 0xE0, 0x02, 0xC7, 0xC1, 0x0E, 0x0D, 0x0A, 0x73, 0x34, 0x34, 0x89, 0xA2, + 0xC0, 0x18, 0xCD, 0x01, 0x76, 0x70, 0x03, 0xF8, 0x80, 0x0B, 0xD0, 0x02, 0x1D, 0x00, + // Unicode: [0x0078, x] + 0x1D, 0x34, 0x0B, 0x47, 0xE7, 0x80, 0x1F, 0xC0, 0x02, 0xF8, 0x41, 0xE7, 0xA0, 0xB0, 0x0D, 0x38, + // Unicode: [0x0079, y] + 0x0E, 0xC0, 0x76, 0x40, 0x87, 0x02, 0x0A, 0x0D, 0x1C, 0xB0, 0x34, 0x80, 0xA3, 0x00, 0xDD, 0x00, + 0xE0, 0x02, 0x40, 0x07, 0x00, 0x0E, 0x00, 0x2C, 0x00, 0x34, 0x00, 0xA0, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0x2F, 0x55, 0x07, 0xB0, 0x00, 0x0E, 0xD0, 0x01, 0x2C, 0x80, 0x07, 0xB0, 0x15, 0xFD, 0x2F, + // Unicode: [0x007B, braceleft] + 0xD0, 0x07, 0x1B, 0x70, 0x00, 0x07, 0xB0, 0x00, 0x0A, 0xA0, 0x00, 0x0B, 0x39, 0xD0, 0x02, 0xB0, + 0x00, 0x0A, 0xA0, 0x00, 0x0B, 0x70, 0x00, 0x07, 0xB0, 0x00, 0x7D, 0x00, 0x01, + // Unicode: [0x007C, bar] + 0xD9, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x0D, + // Unicode: [0x007D, braceright] + 0x2F, 0xD4, 0x01, 0x07, 0x1C, 0x74, 0xD0, 0x40, 0x03, 0x1D, 0xE0, 0x41, 0x4B, 0x07, 0x0D, 0x34, + 0xD0, 0x01, 0x07, 0x1C, 0x74, 0xBC, 0x10, 0x00, + // Unicode: [0x007E, asciitilde] + 0xF8, 0xA1, 0x5D, 0x3F, 0x04, 0x04 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_16_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_16_2bpp_4.cpp new file mode 100644 index 00000000..a550d3ba --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_16_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_16_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0xC7, 0x71, 0xC7, 0x71 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_18_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_18_2bpp_0.cpp new file mode 100644 index 00000000..cc19d932 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_18_2bpp_0.cpp @@ -0,0 +1,305 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x6D, 0xD7, 0x75, 0x1C, 0xC7, 0x71, 0x1C, 0x00, 0xB4, 0x2D, + // Unicode: [0x0022, quotedbl] + 0x89, 0x35, 0xDB, 0x58, 0x63, + // Unicode: [0x0023, numbersign] + 0x00, 0x38, 0xD0, 0x01, 0xC0, 0x02, 0x0E, 0x00, 0x1C, 0xA0, 0x40, 0xFF, 0xFF, 0xFF, 0x50, 0x5E, + 0xB9, 0x05, 0xA0, 0x40, 0x03, 0x00, 0x0B, 0x38, 0x00, 0x74, 0xC0, 0x02, 0xFD, 0xFF, 0xFF, 0x43, + 0x79, 0xE5, 0x15, 0xC0, 0x02, 0x0D, 0x00, 0x2C, 0xE0, 0x00, 0xD0, 0x01, 0x0B, 0x00, + // Unicode: [0x0024, dollar] + 0x40, 0x02, 0x90, 0x7F, 0xD0, 0xBA, 0x8B, 0x93, 0x38, 0x4B, 0x42, 0x38, 0x09, 0xD0, 0x2B, 0x00, + 0xF9, 0x0B, 0x40, 0xFB, 0x00, 0x49, 0x57, 0x24, 0x9D, 0x93, 0x74, 0xBD, 0xBB, 0x90, 0xBF, 0x00, + 0x24, 0x00, 0x40, 0x00, + // Unicode: [0x0025, percent] + 0xE4, 0x02, 0x38, 0xB0, 0x28, 0x74, 0xD0, 0xD0, 0xE0, 0x40, 0x43, 0xD3, 0x01, 0x2C, 0xCA, 0x02, + 0x90, 0x4B, 0x07, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x2C, 0xB9, 0x00, 0x38, 0x5C, + 0x0A, 0x74, 0x34, 0x34, 0xA0, 0xC0, 0xA0, 0xD0, 0x01, 0xBD, 0x00, + // Unicode: [0x0026, ampersand] + 0x40, 0xBE, 0x00, 0x00, 0x9F, 0x0B, 0x00, 0x1D, 0x38, 0x00, 0x74, 0x00, 0x00, 0xC0, 0x03, 0x00, + 0x00, 0x2E, 0x00, 0x40, 0xEF, 0x02, 0x19, 0x0F, 0x2D, 0x2C, 0x1D, 0xD0, 0x7A, 0x74, 0x00, 0xBD, + 0xC0, 0x02, 0xF4, 0x02, 0x6E, 0xB9, 0x2D, 0x90, 0x6F, 0xD0, 0x02, + // Unicode: [0x0027, quotesingle] + 0xD9, 0xDD, + // Unicode: [0x0028, parenleft] + 0x80, 0x07, 0x1D, 0xB0, 0x80, 0x03, 0x2C, 0xD0, 0x01, 0x0E, 0xB0, 0x00, 0x0B, 0xB0, 0x00, 0x0B, + 0xB0, 0x00, 0x0B, 0xE0, 0x00, 0x1D, 0xC0, 0x02, 0x38, 0x40, 0x0B, 0xE0, 0x01, 0x38, + // Unicode: [0x0029, parenright] + 0x0B, 0xD0, 0x02, 0x78, 0x00, 0x0B, 0xD0, 0x01, 0x2C, 0x80, 0x02, 0x38, 0x40, 0x03, 0x74, 0x40, + 0x07, 0x34, 0x80, 0x03, 0x38, 0xC0, 0x02, 0x1D, 0xF0, 0x40, 0x07, 0x2C, 0xE0, 0x00, + // Unicode: [0x002A, asterisk] + 0xD0, 0x40, 0x31, 0xD6, 0xAE, 0xD1, 0x0B, 0xDE, 0x5E, 0x34, 0x01, 0x09, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0xFD, 0xFF, 0x4B, 0xE5, 0x55, 0x00, + 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x0E, 0x00, + // Unicode: [0x002C, comma] + 0x3C, 0xD7, 0x28, 0x07, + // Unicode: [0x002D, hyphen] + 0xFF, 0x7F, 0x55, 0x15, + // Unicode: [0x002E, period] + 0xBF, + // Unicode: [0x002F, slash] + 0x00, 0x1D, 0x40, 0x03, 0xE0, 0x00, 0x2C, 0x40, 0x07, 0xD0, 0x00, 0x38, 0x00, 0x0B, 0xD0, 0x01, + 0x34, 0x00, 0x0E, 0xC0, 0x02, 0x74, 0x00, 0x1D, 0x80, 0x03, 0xB0, 0x00, 0x1D, 0x40, 0x07, 0xE0, + 0x00, 0x2C, 0x00, + // Unicode: [0x0030, zero] + 0xE0, 0x2F, 0xE0, 0xEA, 0xD3, 0x02, 0xAD, 0x03, 0xE0, 0x0E, 0x80, 0x2F, 0x00, 0xBD, 0x00, 0xF4, + 0x02, 0xD0, 0x0E, 0x80, 0x3B, 0x00, 0xDE, 0x02, 0x2D, 0xAE, 0x3E, 0xE0, 0x2F, 0x00, + // Unicode: [0x0031, one] + 0xFD, 0xE4, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, + // Unicode: [0x0032, two] + 0xE4, 0x1B, 0xF4, 0xE6, 0xE1, 0x00, 0xCE, 0x02, 0x74, 0x01, 0xE0, 0x00, 0x80, 0x03, 0x40, 0x07, + 0x40, 0x0B, 0x40, 0x0B, 0x40, 0x0B, 0x40, 0x0B, 0x80, 0x5F, 0x55, 0xFF, 0xFF, 0x02, + // Unicode: [0x0033, three] + 0xE4, 0x2F, 0xF4, 0xE6, 0xE2, 0x00, 0x1E, 0x00, 0x34, 0x00, 0xB5, 0x00, 0x7F, 0x00, 0x94, 0x07, + 0x00, 0x38, 0x00, 0xC0, 0x2D, 0x00, 0xE7, 0x00, 0x5D, 0x6F, 0x2E, 0xE0, 0x2F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0xD0, 0x03, 0x00, 0xFC, 0x00, 0x80, 0x3B, 0x00, 0x74, 0x0E, 0x00, 0x8B, 0x03, 0xE0, 0xE0, + 0x00, 0x1D, 0x38, 0xD0, 0x02, 0x0E, 0x3C, 0x80, 0x43, 0xFF, 0xFF, 0x4B, 0x55, 0x79, 0x01, 0x00, + 0x0E, 0x00, 0x80, 0x03, + // Unicode: [0x0035, five] + 0xFD, 0xFF, 0xD1, 0x55, 0x15, 0x0D, 0x00, 0xD0, 0x00, 0x00, 0x9D, 0x7F, 0xD0, 0x5B, 0x1E, 0x1D, + 0x80, 0x03, 0x00, 0x34, 0x00, 0x40, 0x97, 0x00, 0x38, 0x1D, 0xC0, 0x82, 0x5B, 0x1F, 0x90, 0x6F, + 0x00, + // Unicode: [0x0036, six] + 0x90, 0x6F, 0x40, 0x5B, 0x1E, 0x2C, 0x80, 0xD2, 0x00, 0x00, 0x8A, 0x7F, 0xA0, 0x5B, 0x1E, 0x2E, + 0x80, 0xE3, 0x00, 0x74, 0x0E, 0x40, 0xD7, 0x00, 0x74, 0x2C, 0x80, 0x43, 0x5B, 0x1E, 0x90, 0x6F, + 0x00, + // Unicode: [0x0037, seven] + 0xFD, 0xFF, 0x53, 0x55, 0x0E, 0x00, 0x2C, 0x00, 0x74, 0x00, 0xA0, 0x00, 0xD0, 0x01, 0x80, 0x03, + 0x00, 0x07, 0x00, 0x0E, 0x00, 0x2C, 0x00, 0x74, 0x00, 0xB0, 0x00, 0xD0, 0x01, 0x00, + // Unicode: [0x0038, eight] + 0xE0, 0x6F, 0xC0, 0x5B, 0x1E, 0x1E, 0x80, 0xE3, 0x00, 0x38, 0x6C, 0xE0, 0x01, 0xFF, 0x07, 0x7C, + 0xE5, 0xE1, 0x00, 0x38, 0x0B, 0x40, 0xB7, 0x00, 0x74, 0x1E, 0xC0, 0xC3, 0x5B, 0x1F, 0xE0, 0x6F, + 0x00, + // Unicode: [0x0039, nine] + 0xE0, 0x2F, 0xE0, 0xE6, 0xD3, 0x01, 0xAC, 0x03, 0xE0, 0x0E, 0x80, 0x77, 0x00, 0xCE, 0x47, 0x3E, + 0xFD, 0xDB, 0x00, 0x41, 0x13, 0x00, 0xCE, 0x02, 0x2C, 0x6E, 0x3D, 0x90, 0x2F, 0x00, + // Unicode: [0x003A, colon] + 0xFB, 0x00, 0x00, 0x00, 0xBF, + // Unicode: [0x003B, semicolon] + 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x38, 0x2C, 0x1C, 0x09, + // Unicode: [0x003C, less] + 0x00, 0x05, 0x78, 0xF0, 0xC1, 0x03, 0x0F, 0xE0, 0x01, 0x78, 0x00, 0x1E, 0x80, 0x07, + // Unicode: [0x003D, equal] + 0xFD, 0xFF, 0x1F, 0x55, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0x55, 0x55, + 0x01, + // Unicode: [0x003E, greater] + 0x05, 0xE0, 0x02, 0xB4, 0x00, 0x2D, 0x40, 0x0B, 0x78, 0xE0, 0x81, 0x07, 0x1E, 0x00, + // Unicode: [0x003F, question] + 0xF8, 0x0B, 0x6E, 0x3E, 0x07, 0x74, 0x02, 0xB0, 0x00, 0x74, 0x00, 0x3D, 0xF4, 0x1B, 0x74, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x10, 0x00, 0x78, 0x00, 0x74, 0x00, + // Unicode: [0x0040, at] + 0x00, 0xA0, 0xBF, 0x01, 0x00, 0x6E, 0x95, 0x0B, 0x80, 0x02, 0x00, 0x28, 0xA0, 0x00, 0x00, 0x70, + 0x34, 0xE0, 0xDB, 0xA1, 0x1C, 0x78, 0xF9, 0xD0, 0x0D, 0x1D, 0xB0, 0xD0, 0x0E, 0x0B, 0xA0, 0xA0, + 0x0A, 0x07, 0x70, 0xA0, 0x0A, 0x0B, 0x74, 0x70, 0x0A, 0x1E, 0xB9, 0x29, 0x1D, 0xF8, 0xD2, 0x0B, + 0x28, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x04, 0x00, 0x40, 0xFF, 0x0B, 0x00, + // Unicode: [0x0041, A] + 0x00, 0x7C, 0x00, 0x00, 0xBD, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xDB, 0x01, 0x40, 0xC7, 0x02, 0x80, + 0x83, 0x03, 0xC0, 0x42, 0x07, 0xD0, 0x01, 0x0B, 0xF0, 0x00, 0x0F, 0xF4, 0xFF, 0x1F, 0x78, 0x55, + 0x2D, 0x3C, 0x00, 0x38, 0x2D, 0x00, 0x74, + // Unicode: [0x0042, B] + 0xFE, 0x6F, 0x78, 0xD5, 0xE7, 0x00, 0xAC, 0x03, 0xB0, 0x0E, 0xC0, 0x3A, 0x90, 0xE7, 0xFF, 0x87, + 0x57, 0x79, 0x0E, 0x80, 0x3B, 0x00, 0xEE, 0x00, 0xB8, 0x57, 0xB9, 0xFE, 0x6F, 0x00, + // Unicode: [0x0043, C] + 0x00, 0xF9, 0x0B, 0x00, 0xAE, 0xF9, 0x01, 0x1F, 0x40, 0x0F, 0x1E, 0x00, 0xB4, 0x2C, 0x00, 0x00, + 0xB0, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x2C, 0x00, 0x00, 0xE0, 0x01, 0x40, + 0x0A, 0x1F, 0x40, 0x0F, 0xF0, 0x96, 0x1F, 0x00, 0xF9, 0x0A, 0x00, + // Unicode: [0x0044, D] + 0xFE, 0x6F, 0x80, 0x57, 0xB9, 0xE0, 0x00, 0xB4, 0x38, 0x00, 0x74, 0x0E, 0x00, 0xAC, 0x03, 0x00, + 0xEE, 0x00, 0x80, 0x3B, 0x00, 0xE0, 0x0E, 0x00, 0xAC, 0x03, 0x40, 0xE7, 0x00, 0xB4, 0x78, 0x95, + 0x0B, 0xFE, 0x6F, 0x00, + // Unicode: [0x0045, E] + 0xFE, 0xBF, 0x57, 0xE5, 0x00, 0x38, 0x00, 0x0E, 0x80, 0x03, 0xE0, 0xFF, 0x7A, 0x15, 0x0E, 0x80, + 0x03, 0xE0, 0x00, 0x78, 0x55, 0xFE, 0x3F, + // Unicode: [0x0046, F] + 0xFE, 0x7F, 0x5E, 0x15, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0xFE, 0x1F, 0x5E, 0x05, + 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xF9, 0x0A, 0x00, 0xB8, 0xEA, 0x07, 0xF0, 0x01, 0xF4, 0x80, 0x07, 0x00, 0x29, 0x2C, 0x00, + 0x00, 0xC0, 0x02, 0x00, 0x00, 0x1D, 0xE0, 0xFF, 0xC7, 0x02, 0x54, 0x39, 0x2C, 0x00, 0xC0, 0x83, + 0x07, 0x00, 0x2D, 0xF0, 0x01, 0xF4, 0x00, 0xB8, 0xEA, 0x03, 0x00, 0xF9, 0x06, 0x00, + // Unicode: [0x0048, H] + 0x0E, 0x00, 0xEE, 0x00, 0xE0, 0x0E, 0x00, 0xEE, 0x00, 0xE0, 0x0E, 0x00, 0xEE, 0x00, 0xE0, 0xFE, + 0xFF, 0xEF, 0x55, 0xE5, 0x0E, 0x00, 0xEE, 0x00, 0xE0, 0x0E, 0x00, 0xEE, 0x00, 0xE0, 0x0E, 0x00, + 0x0E, + // Unicode: [0x0049, I] + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x0E, + // Unicode: [0x004A, J] + 0x00, 0x2C, 0x00, 0x0B, 0xC0, 0x02, 0xB0, 0x00, 0x2C, 0x00, 0x0B, 0xC0, 0x02, 0xB0, 0x00, 0xAC, + 0x01, 0xBB, 0xD0, 0xBA, 0x3E, 0xF8, 0x06, + // Unicode: [0x004B, K] + 0x0E, 0xD0, 0x3A, 0xC0, 0xE3, 0xC0, 0x83, 0x83, 0x07, 0x8E, 0x07, 0xB8, 0x07, 0xE0, 0x0B, 0x80, + 0x7B, 0x00, 0x8E, 0x07, 0x38, 0x78, 0xE0, 0xC0, 0x87, 0x03, 0x3D, 0x0E, 0xD0, 0x02, + // Unicode: [0x004C, L] + 0x0E, 0x80, 0x03, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x80, 0x03, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x80, + 0x03, 0xE0, 0x00, 0x78, 0x15, 0xFE, 0x1F, + // Unicode: [0x004D, M] + 0x1E, 0x00, 0xC0, 0xBB, 0x00, 0x40, 0xEF, 0x07, 0x00, 0xBE, 0x2F, 0x00, 0xFC, 0xDE, 0x00, 0xB8, + 0x3B, 0x0B, 0xB0, 0xEE, 0x38, 0xD0, 0xB8, 0xD3, 0xC1, 0xE2, 0x0E, 0x4A, 0x87, 0x3B, 0x74, 0x0A, + 0xEE, 0xC0, 0x1E, 0xB8, 0x03, 0x3D, 0xE0, 0x0E, 0xB0, 0x80, 0x03, + // Unicode: [0x004E, N] + 0x1E, 0x00, 0x9D, 0x0F, 0x40, 0xE7, 0x0B, 0xD0, 0x79, 0x07, 0x74, 0x8E, 0x03, 0x9D, 0xD3, 0x42, + 0xE7, 0xE0, 0xD1, 0x39, 0xB0, 0x74, 0x0E, 0x74, 0x9D, 0x03, 0xB8, 0xE7, 0x00, 0xFC, 0x39, 0x00, + 0x7D, 0x0E, 0x00, 0x1E, + // Unicode: [0x004F, O] + 0x00, 0xF9, 0x06, 0x00, 0xB8, 0xE5, 0x07, 0xF0, 0x01, 0xF0, 0x80, 0x07, 0x00, 0x2C, 0x2C, 0x00, + 0x80, 0xC3, 0x02, 0x00, 0x74, 0x1D, 0x00, 0x40, 0xC7, 0x02, 0x00, 0x74, 0x2C, 0x00, 0x80, 0x83, + 0x07, 0x00, 0x2C, 0xF0, 0x01, 0xF0, 0x00, 0xB8, 0xE5, 0x07, 0x00, 0xF9, 0x06, 0x00, + // Unicode: [0x0050, P] + 0xFE, 0x2F, 0x78, 0xE5, 0xE3, 0x00, 0x9D, 0x03, 0xB0, 0x0E, 0xC0, 0x3A, 0x40, 0xEB, 0x40, 0x8F, + 0xFF, 0x1F, 0x5E, 0x01, 0x38, 0x00, 0xE0, 0x00, 0x80, 0x03, 0x00, 0x0E, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xF9, 0x06, 0x00, 0xB8, 0xE5, 0x07, 0xF0, 0x01, 0xF0, 0x80, 0x07, 0x00, 0x2C, 0x2C, 0x00, + 0x80, 0xC3, 0x02, 0x00, 0x74, 0x1D, 0x00, 0x40, 0xC7, 0x02, 0x00, 0x74, 0x2C, 0x00, 0x80, 0x83, + 0x07, 0x00, 0x2C, 0xF0, 0x01, 0xF0, 0x00, 0xB8, 0xE5, 0x07, 0x00, 0xF9, 0x2E, 0x00, 0x00, 0x40, + 0x0F, 0x00, 0x00, 0xD0, 0x03, + // Unicode: [0x0052, R] + 0xFE, 0x2F, 0x78, 0xE5, 0xE3, 0x00, 0x9D, 0x03, 0xB0, 0x0E, 0xC0, 0x3A, 0x40, 0xEB, 0x40, 0x8F, + 0xFF, 0x1F, 0x5E, 0x0E, 0x38, 0xB4, 0xE0, 0x80, 0x87, 0x03, 0x3C, 0x0E, 0xD0, 0x02, + // Unicode: [0x0053, S] + 0xE4, 0x1B, 0xF4, 0xE5, 0xE2, 0x00, 0xDE, 0x02, 0x10, 0x1E, 0x00, 0xF4, 0x06, 0x40, 0xFE, 0x02, + 0x40, 0x3E, 0x00, 0xD0, 0x15, 0x00, 0xEB, 0x00, 0x5D, 0x6F, 0x2E, 0xE4, 0x2F, 0x00, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0x53, 0x6D, 0x05, 0xB0, 0x00, 0xC0, 0x02, 0x00, 0x0B, 0x00, 0x2C, 0x00, 0xB0, 0x00, + 0xC0, 0x02, 0x00, 0x0B, 0x00, 0x2C, 0x00, 0xB0, 0x00, 0xC0, 0x02, 0x00, 0x0B, 0x00, + // Unicode: [0x0055, U] + 0x0E, 0x00, 0xEB, 0x00, 0xB0, 0x0E, 0x00, 0xEB, 0x00, 0xB0, 0x0E, 0x00, 0xEB, 0x00, 0xB0, 0x0E, + 0x00, 0xEB, 0x00, 0xB0, 0x0E, 0x00, 0xDB, 0x01, 0xB0, 0x2C, 0x80, 0x87, 0xAB, 0x2E, 0x90, 0x6F, + 0x00, + // Unicode: [0x0056, V] + 0x1D, 0x00, 0xB0, 0x2C, 0x00, 0x78, 0x38, 0x00, 0x3C, 0x74, 0x00, 0x1D, 0xB0, 0x00, 0x0E, 0xE0, + 0x00, 0x0B, 0xD0, 0x41, 0x07, 0xC0, 0x82, 0x03, 0x80, 0xC3, 0x02, 0x00, 0xD7, 0x01, 0x00, 0xEA, + 0x00, 0x00, 0xBD, 0x00, 0x00, 0x7C, 0x00, + // Unicode: [0x0057, W] + 0x1D, 0x40, 0x0F, 0x80, 0xB7, 0x00, 0x3D, 0x00, 0xCB, 0x02, 0xF8, 0x01, 0x1D, 0x0E, 0xB0, 0x0B, + 0x74, 0x74, 0xD0, 0x39, 0xE0, 0xC0, 0x82, 0xD3, 0xC1, 0x02, 0x0B, 0x0B, 0x47, 0x07, 0x38, 0x1C, + 0x2C, 0x0D, 0xD0, 0x35, 0xE0, 0x28, 0x00, 0xAB, 0x40, 0x77, 0x00, 0xE8, 0x01, 0xEC, 0x01, 0xD0, + 0x07, 0xE0, 0x03, 0x40, 0x0F, 0x40, 0x0B, 0x00, + // Unicode: [0x0058, X] + 0x0F, 0x80, 0xB7, 0x40, 0x87, 0x03, 0x0F, 0x2C, 0x1D, 0xE0, 0x2D, 0x00, 0x3F, 0x00, 0xB4, 0x00, + 0xF0, 0x03, 0xE0, 0x2D, 0xC0, 0xE2, 0x81, 0x03, 0x4F, 0x07, 0x74, 0x0F, 0x80, 0x03, + // Unicode: [0x0059, Y] + 0x1D, 0x00, 0xCF, 0x03, 0x74, 0x74, 0x80, 0x03, 0x0B, 0x1D, 0xD0, 0xE1, 0x00, 0x6C, 0x07, 0x40, + 0x3F, 0x00, 0xF0, 0x01, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x0E, + 0x00, + // Unicode: [0x005A, Z] + 0xFC, 0xFF, 0x53, 0x95, 0x0B, 0x00, 0x0E, 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xB0, 0x00, + 0xE0, 0x01, 0xD0, 0x02, 0xC0, 0x03, 0x40, 0x07, 0x00, 0x5F, 0x55, 0xFD, 0xFF, 0x03, + // Unicode: [0x005B, bracketleft] + 0xBE, 0x5E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, + 0x0E, 0x0E, 0x0E, 0xBE, 0x55, + // Unicode: [0x005C, backslash] + 0x0E, 0x00, 0x1D, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x74, 0x00, 0xB0, 0x00, 0xA0, 0x00, 0xE0, 0x00, + 0xD0, 0x01, 0xC0, 0x02, 0x80, 0x03, 0x40, 0x07, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x1D, + 0x00, 0x2C, 0x00, 0x38, 0x00, 0x74, 0x00, 0x70, + // Unicode: [0x005D, bracketright] + 0x7F, 0x75, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, + 0x74, 0x74, 0x74, 0x7F, 0x15, + // Unicode: [0x005E, asciicircum] + 0x00, 0x06, 0x00, 0xF8, 0x00, 0xC0, 0x1F, 0x00, 0xDD, 0x02, 0xB0, 0x74, 0x40, 0x07, 0x0B, 0x38, + 0xE0, 0xD0, 0x01, 0x2C, 0x0E, 0x80, 0xB3, 0x00, 0x74, + // Unicode: [0x005F, underscore] + 0xAA, 0xAA, 0xF6, 0xFF, 0x7F, + // Unicode: [0x0060, grave] + 0x06, 0x6D, 0xE0, + // Unicode: [0x0061, a] + 0xE0, 0x2F, 0xCB, 0x9B, 0xBB, 0x1E, 0x80, 0xBB, 0x00, 0xB4, 0x0B, 0x00, 0x7B, 0x00, 0xB0, 0x0B, + 0x00, 0xEB, 0x01, 0xB8, 0xBC, 0xA5, 0x0B, 0xFE, 0xB2, + // Unicode: [0x0062, b] + 0x0E, 0x00, 0x80, 0x03, 0x00, 0xE0, 0x00, 0x00, 0x38, 0xF9, 0x02, 0xEE, 0xE6, 0x87, 0x0F, 0xD0, + 0xE2, 0x01, 0xE0, 0x39, 0x00, 0x74, 0x0E, 0x00, 0x9D, 0x07, 0x80, 0xE7, 0x03, 0xB4, 0xB8, 0x9B, + 0x0F, 0x4E, 0xBE, 0x00, + // Unicode: [0x0063, c] + 0xE0, 0x2F, 0xF0, 0xE6, 0xE7, 0x01, 0xEC, 0x02, 0x50, 0x0B, 0x00, 0x2C, 0x00, 0xB0, 0x00, 0x94, + 0x07, 0xB0, 0xBC, 0xF9, 0x81, 0xBF, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x00, 0x0B, 0xFE, 0xB1, 0xBC, 0xB9, 0xEB, 0x01, 0xB8, 0x0B, + 0x40, 0xBB, 0x00, 0xB0, 0x07, 0x00, 0xBB, 0x00, 0xB0, 0x1E, 0x80, 0xCB, 0x5B, 0xBA, 0xE0, 0x2F, + 0x0B, + // Unicode: [0x0065, e] + 0xE0, 0x6F, 0xC0, 0x9B, 0x1F, 0x1E, 0x80, 0xB3, 0x00, 0x74, 0xFF, 0xFF, 0xB7, 0x55, 0x15, 0x0B, + 0x40, 0xE1, 0x01, 0x2C, 0xBC, 0xF9, 0x01, 0xFE, 0x02, + // Unicode: [0x0066, f] + 0x90, 0x07, 0x1F, 0x74, 0xE0, 0x7F, 0xB9, 0x41, 0x07, 0x74, 0x40, 0x07, 0x74, 0x40, 0x07, 0x74, + 0x40, 0x07, 0x74, 0x00, + // Unicode: [0x0067, g] + 0xE0, 0x2F, 0xCB, 0x5B, 0xBA, 0x1E, 0x80, 0xBB, 0x00, 0xB0, 0x07, 0x00, 0xBB, 0x00, 0xB0, 0x0B, + 0x40, 0xEB, 0x01, 0xB8, 0xBC, 0xB9, 0x0B, 0xFE, 0xB1, 0x00, 0x00, 0x9B, 0x00, 0xB0, 0x2D, 0x80, + 0x87, 0x9B, 0x2E, 0x90, 0x6F, 0x00, + // Unicode: [0x0068, h] + 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0xF8, 0x06, 0xBE, 0xF9, 0xE1, 0x02, 0x3C, 0x1E, + 0x80, 0xE3, 0x00, 0x74, 0x0E, 0x40, 0xE7, 0x00, 0x74, 0x0E, 0x40, 0xE7, 0x00, 0x74, 0x0E, 0x40, + 0x07, + // Unicode: [0x0069, i] + 0x8E, 0x07, 0x38, 0x8E, 0xE3, 0x38, 0x8E, 0xE3, 0x38, 0x0E, + // Unicode: [0x006A, j] + 0xE0, 0x80, 0x07, 0x00, 0x38, 0xE0, 0x80, 0x03, 0x0E, 0x38, 0xE0, 0x80, 0x03, 0x0E, 0x38, 0xE0, + 0x80, 0x03, 0x0E, 0x38, 0xF5, 0xB4, 0x01, + // Unicode: [0x006B, k] + 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0xB8, 0x0E, 0x2D, 0x4E, 0x0B, 0xDE, 0x02, 0xFE, 0x00, + 0xFE, 0x00, 0xDE, 0x02, 0x4E, 0x0B, 0x0E, 0x2D, 0x0E, 0xB8, + // Unicode: [0x006C, l] + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x0E, + // Unicode: [0x006D, m] + 0x9E, 0x6F, 0xE0, 0x1B, 0xF8, 0x96, 0xB7, 0xE5, 0xE1, 0x02, 0xBC, 0x00, 0x8E, 0x03, 0xE0, 0x01, + 0x74, 0x0E, 0x40, 0x03, 0xD0, 0x39, 0x00, 0x0D, 0x40, 0xE7, 0x00, 0x34, 0x00, 0x9D, 0x03, 0xD0, + 0x00, 0x74, 0x0E, 0x40, 0x03, 0xD0, 0x39, 0x00, 0x0D, 0x40, 0x07, + // Unicode: [0x006E, n] + 0x9E, 0x6F, 0xE0, 0x5B, 0x1E, 0x2E, 0xC0, 0xE3, 0x00, 0x38, 0x0E, 0x40, 0xE7, 0x00, 0x74, 0x0E, + 0x40, 0xE7, 0x00, 0x74, 0x0E, 0x40, 0xE7, 0x00, 0x74, + // Unicode: [0x006F, o] + 0x90, 0x6F, 0x80, 0x9B, 0x1F, 0x1E, 0x80, 0xB3, 0x00, 0xB4, 0x0B, 0x00, 0xBB, 0x00, 0xB0, 0x0B, + 0x40, 0xEB, 0x01, 0x38, 0xBC, 0xF9, 0x01, 0xFE, 0x06, + // Unicode: [0x0070, p] + 0x4E, 0xBE, 0x80, 0xBB, 0xF9, 0xE1, 0x03, 0xB4, 0x78, 0x00, 0x78, 0x0E, 0x00, 0x9D, 0x03, 0x40, + 0xE7, 0x01, 0xE0, 0xF9, 0x00, 0x2D, 0xEE, 0xE6, 0x83, 0x93, 0x2F, 0xE0, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x0E, 0x00, 0x80, 0x03, 0x00, 0xE0, 0x00, 0x00, 0x00, + // Unicode: [0x0071, q] + 0xE0, 0x2F, 0xCB, 0x9B, 0xBB, 0x1E, 0x80, 0xBB, 0x00, 0xB4, 0x0B, 0x00, 0xBB, 0x00, 0xB0, 0x0B, + 0x40, 0xEB, 0x01, 0xB8, 0xBC, 0xB9, 0x0B, 0xFE, 0xB1, 0x00, 0x00, 0x0B, 0x00, 0xB0, 0x00, 0x00, + 0x0B, 0x00, 0xB0, 0x00, 0x00, 0x0B, + // Unicode: [0x0072, r] + 0x8E, 0xE7, 0x2E, 0x2E, 0xE0, 0x01, 0x0E, 0xE0, 0x00, 0x0E, 0xE0, 0x00, 0x0E, 0xE0, 0x00, + // Unicode: [0x0073, s] + 0xF4, 0x0B, 0x6E, 0x2E, 0x0B, 0x74, 0x1E, 0x00, 0xBD, 0x01, 0x90, 0x2F, 0x00, 0x78, 0x0B, 0x74, + 0x6E, 0x3D, 0xE4, 0x1B, + // Unicode: [0x0074, t] + 0x74, 0x40, 0x07, 0x74, 0xE0, 0xFF, 0xB9, 0x45, 0x07, 0x74, 0x40, 0x07, 0x74, 0x40, 0x07, 0x74, + 0x00, 0x5F, 0xD0, 0x0F, + // Unicode: [0x0075, u] + 0x0E, 0x80, 0x3B, 0x00, 0xEE, 0x00, 0xB8, 0x03, 0xE0, 0x0E, 0x80, 0x3B, 0x00, 0xEE, 0x00, 0x78, + 0x07, 0xF0, 0xB8, 0xF5, 0x83, 0x6F, 0x0E, + // Unicode: [0x0076, v] + 0x1E, 0x00, 0xDB, 0x02, 0x74, 0x38, 0x80, 0x43, 0x07, 0x2C, 0xB0, 0xE0, 0x00, 0x0E, 0x0B, 0xD0, + 0x75, 0x00, 0xAC, 0x03, 0x40, 0x2F, 0x00, 0xF0, 0x01, + // Unicode: [0x0077, w] + 0x0E, 0xE0, 0x01, 0x5D, 0x07, 0xB8, 0x40, 0xC3, 0x02, 0x3B, 0xA0, 0xE0, 0xD0, 0x1D, 0x1C, 0x34, + 0x28, 0x4B, 0x03, 0x1C, 0x87, 0xE3, 0x00, 0xDA, 0xD0, 0x28, 0x40, 0x2B, 0xB0, 0x07, 0xC0, 0x07, + 0xF8, 0x00, 0xF0, 0x00, 0x2D, 0x00, + // Unicode: [0x0078, x] + 0x1D, 0xE0, 0x38, 0x74, 0xB4, 0x2C, 0xE0, 0x0E, 0xC0, 0x07, 0xC0, 0x0B, 0xE0, 0x1E, 0x74, 0x2C, + 0x28, 0x74, 0x1D, 0xE0, + // Unicode: [0x0079, y] + 0x1E, 0x00, 0xDB, 0x02, 0x74, 0x38, 0x80, 0x43, 0x07, 0x1C, 0xB0, 0xD0, 0x00, 0x0E, 0x0B, 0xD0, + 0x75, 0x00, 0xB8, 0x03, 0x40, 0x2F, 0x00, 0xF0, 0x00, 0x00, 0x0B, 0x00, 0x74, 0x00, 0x80, 0x03, + 0x00, 0x2C, 0x00, 0xE0, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0x7F, 0x54, 0x79, 0x00, 0x2D, 0x00, 0x0F, 0x80, 0x07, 0xD0, 0x02, 0xE0, 0x00, 0x78, 0x00, + 0x7C, 0x15, 0xFD, 0x7F, + // Unicode: [0x007B, braceleft] + 0xE0, 0xD3, 0x86, 0x03, 0x0E, 0x38, 0xD0, 0x41, 0x07, 0x1D, 0x38, 0x78, 0xF0, 0x01, 0x0E, 0x74, + 0xD0, 0x41, 0x07, 0x0D, 0x38, 0xE0, 0x40, 0x07, 0xF8, 0x40, 0x01, + // Unicode: [0x007C, bar] + 0x5D, 0xD7, 0x75, 0x5D, 0xD7, 0x75, 0x5D, 0xD7, 0x75, 0x5D, 0xD7, 0x75, + // Unicode: [0x007D, braceright] + 0x2E, 0x50, 0x0B, 0xE0, 0x00, 0x0E, 0xA0, 0x00, 0x0B, 0xB0, 0x00, 0x0B, 0xE0, 0x00, 0x7D, 0x80, + 0x07, 0x0E, 0xB0, 0x00, 0x0B, 0xB0, 0x00, 0x0A, 0xE0, 0x00, 0x0E, 0xB4, 0xE0, 0x07, 0x05, 0x00, + // Unicode: [0x007E, asciitilde] + 0xBD, 0x75, 0x9B, 0x3F, 0x01, 0x05 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_18_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_18_2bpp_4.cpp new file mode 100644 index 00000000..acc35552 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_Regular_18_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x00, 0x40, 0x3C, 0x5E, 0xBB, 0x38, 0x1D +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_18_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_18_2bpp_0.cpp new file mode 100644 index 00000000..cb4dee9f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_18_2bpp_0.cpp @@ -0,0 +1,315 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x7D, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x28, 0x78, 0xBD, 0x78, + // Unicode: [0x0022, quotedbl] + 0x69, 0xDA, 0xB6, 0x2D, 0xCB, 0xB2, + // Unicode: [0x0023, numbersign] + 0x00, 0xB8, 0xC0, 0x07, 0x00, 0x1F, 0xF4, 0x00, 0xC0, 0x07, 0x3D, 0xD0, 0xFF, 0xFF, 0xFF, 0xF4, + 0xFF, 0xFF, 0x3F, 0xD4, 0x5B, 0x7D, 0x05, 0xF0, 0x41, 0x0F, 0x50, 0x7D, 0xE5, 0x17, 0xFE, 0xFF, + 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x03, 0x7C, 0xD0, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0xD0, 0x03, 0x2E, + 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x02, 0x00, 0x0C, 0x40, 0xFE, 0x46, 0xFF, 0x7F, 0x3F, 0xF7, 0xBF, 0x4C, 0xF5, 0x37, 0x40, + 0xFF, 0x06, 0xE4, 0xFF, 0x01, 0xEC, 0x0F, 0x30, 0xFE, 0xCB, 0xF8, 0xBE, 0xFB, 0xE2, 0xFF, 0x02, + 0xB5, 0x01, 0xC0, 0x00, + // Unicode: [0x0025, percent] + 0xE4, 0x06, 0xF8, 0x00, 0xEF, 0x03, 0x1F, 0xD0, 0xE2, 0xE1, 0x02, 0xB0, 0x79, 0x7D, 0x00, 0xF8, + 0xCB, 0x0B, 0x00, 0x10, 0xF4, 0x00, 0x00, 0x00, 0x1F, 0x15, 0x00, 0xE0, 0xE2, 0x2F, 0x00, 0x7D, + 0x2D, 0x0E, 0x80, 0x4B, 0x87, 0x07, 0xF4, 0xC0, 0xF6, 0x00, 0x1F, 0xD0, 0x1B, + // Unicode: [0x0026, ampersand] + 0x40, 0xBE, 0x01, 0x00, 0xFD, 0x7F, 0x00, 0xD0, 0xC3, 0x0B, 0x00, 0x7D, 0x00, 0x00, 0xC0, 0x1F, + 0x00, 0x00, 0xFE, 0x07, 0x2A, 0xB8, 0xF8, 0xF5, 0xD1, 0x07, 0xFD, 0x0B, 0x7D, 0x40, 0x7F, 0xC0, + 0x1B, 0xF9, 0x0B, 0xF8, 0xFF, 0xFB, 0x02, 0xF9, 0x1B, 0xBE, + // Unicode: [0x0027, quotesingle] + 0x69, 0xDB, 0xB2, + // Unicode: [0x0028, parenleft] + 0x40, 0x1F, 0xF4, 0x01, 0x2F, 0xE0, 0x03, 0xBC, 0x40, 0x0F, 0xE0, 0x03, 0xBC, 0x00, 0x1F, 0xC0, + 0x07, 0xF0, 0x01, 0x7C, 0x00, 0x2F, 0x80, 0x0B, 0xD0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x7D, 0x00, + 0x7E, 0x00, 0x3E, + // Unicode: [0x0029, parenright] + 0x7D, 0x00, 0x3E, 0x00, 0x2F, 0x40, 0x1F, 0x80, 0x0B, 0xD0, 0x03, 0xF0, 0x01, 0xBC, 0x00, 0x2E, + 0x80, 0x0B, 0xE0, 0x02, 0xB8, 0x00, 0x2F, 0xC0, 0x07, 0xF4, 0x00, 0x3E, 0xD0, 0x07, 0xF8, 0x40, + 0x1F, 0xF4, 0x02, + // Unicode: [0x002A, asterisk] + 0x80, 0x01, 0x71, 0xE5, 0xEE, 0xD3, 0x1F, 0xFD, 0x6F, 0x77, 0x06, 0x2D, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x1F, 0x00, 0xF0, 0x01, 0x00, 0x1F, 0xE0, 0xFF, 0xBF, 0xFE, 0xFF, 0x4B, 0xF5, 0x15, 0x00, + 0x1F, 0x00, 0xF0, 0x01, 0x00, 0x1F, 0x00, + // Unicode: [0x002C, comma] + 0xB8, 0x7C, 0x3C, 0x2D, 0x0E, + // Unicode: [0x002D, hyphen] + 0xFE, 0xFF, 0xFE, 0xFF, + // Unicode: [0x002E, period] + 0xDE, 0xEF, 0x01, + // Unicode: [0x002F, slash] + 0x00, 0xF8, 0x00, 0xBC, 0x00, 0x7C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x2E, 0x00, 0x1F, 0x40, 0x0F, + 0x80, 0x0F, 0x80, 0x0B, 0xC0, 0x07, 0xD0, 0x07, 0xE0, 0x03, 0xE0, 0x02, 0xF0, 0x01, 0xF4, 0x01, + 0xF4, 0x00, 0xB8, 0x00, 0x7C, 0x00, 0x7D, 0x00, + // Unicode: [0x0030, zero] + 0xD0, 0x6F, 0x80, 0xFF, 0x1F, 0xBD, 0xF5, 0xE3, 0x03, 0x7D, 0x2F, 0xC0, 0xFB, 0x01, 0xBC, 0x1F, + 0x80, 0xFB, 0x01, 0xBC, 0x2F, 0xC0, 0xEB, 0x03, 0x7D, 0xBD, 0xF5, 0x83, 0xFF, 0x1F, 0xD0, 0x6F, + 0x00, + // Unicode: [0x0031, one] + 0xFD, 0xF7, 0x4F, 0x3E, 0xF8, 0xE0, 0x83, 0x0F, 0x3E, 0xF8, 0xE0, 0x83, 0x0F, 0x3E, 0xF8, 0xE0, + 0x03, + // Unicode: [0x0032, two] + 0x90, 0x7F, 0x40, 0xFF, 0x2F, 0xFC, 0xE5, 0xC7, 0x07, 0x7D, 0x14, 0xD0, 0x07, 0x00, 0x3E, 0x00, + 0xF4, 0x02, 0xC0, 0x0F, 0x00, 0x7F, 0x00, 0xFD, 0x00, 0xF4, 0x03, 0xD0, 0xFF, 0xBF, 0xFD, 0xFF, + 0x0B, + // Unicode: [0x0033, three] + 0xE4, 0x2F, 0xF4, 0xFF, 0xF3, 0x47, 0x5F, 0x05, 0x7C, 0x00, 0xF8, 0x00, 0xFF, 0x01, 0xFC, 0x07, + 0x00, 0x7E, 0x00, 0xE0, 0x7E, 0x80, 0xFB, 0x47, 0x6F, 0xFF, 0x3F, 0xE4, 0x2F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0xF8, 0x02, 0x40, 0xBF, 0x00, 0xF4, 0x2F, 0x40, 0x9F, 0x0B, 0xF0, 0xE2, 0x02, 0x2E, 0xB8, + 0xE0, 0x03, 0x2E, 0xFC, 0xFF, 0x7F, 0xFF, 0xFF, 0x5F, 0x55, 0xBD, 0x01, 0x00, 0x2F, 0x00, 0xC0, + 0x0B, + // Unicode: [0x0035, five] + 0xFD, 0xFF, 0xD2, 0xFF, 0x2F, 0x7D, 0x55, 0xD0, 0x03, 0x00, 0x7D, 0xBF, 0xD0, 0xFF, 0x2F, 0xBD, + 0xE0, 0x57, 0x01, 0xBC, 0x00, 0xC0, 0x9B, 0x02, 0xBC, 0xBD, 0xE5, 0x87, 0xFF, 0x2F, 0x90, 0x6F, + 0x00, + // Unicode: [0x0036, six] + 0x90, 0x6F, 0x80, 0xFF, 0x1F, 0x7C, 0xE0, 0xD3, 0x02, 0x00, 0x6E, 0x7F, 0xE0, 0xFF, 0x2F, 0xBE, + 0xE0, 0xE3, 0x03, 0x7C, 0x2E, 0xC0, 0xD7, 0x03, 0x7C, 0xBC, 0xE5, 0x43, 0xFF, 0x1F, 0x90, 0x6F, + 0x00, + // Unicode: [0x0037, seven] + 0xFD, 0xFF, 0xD7, 0xFF, 0x7F, 0x00, 0xD0, 0x03, 0x00, 0x2E, 0x00, 0xF4, 0x01, 0x80, 0x0B, 0x00, + 0x7C, 0x00, 0xE0, 0x03, 0x00, 0x1F, 0x00, 0xF4, 0x00, 0xC0, 0x0B, 0x00, 0x3D, 0x00, 0xE0, 0x02, + 0x00, + // Unicode: [0x0038, eight] + 0xE0, 0x6F, 0xC0, 0xFF, 0x2F, 0x7E, 0xE0, 0xE3, 0x03, 0x3D, 0x7D, 0xE0, 0x43, 0xFF, 0x1F, 0xF8, + 0xFF, 0xE1, 0x07, 0x3E, 0x2F, 0xC0, 0xF7, 0x02, 0x7C, 0x7E, 0xE4, 0xC7, 0xFF, 0x2F, 0xE0, 0x6F, + 0x00, + // Unicode: [0x0039, nine] + 0xE0, 0x6F, 0xC0, 0xFF, 0x1F, 0x7E, 0xE4, 0xE2, 0x02, 0x3D, 0x2E, 0xD0, 0xE3, 0x07, 0x7E, 0xFC, + 0xFF, 0x07, 0xBE, 0x7D, 0x00, 0xC0, 0x93, 0x02, 0x3D, 0xBD, 0xF4, 0x82, 0xFF, 0x1F, 0x90, 0x6F, + 0x00, + // Unicode: [0x003A, colon] + 0xDE, 0xEF, 0x01, 0x00, 0x00, 0x78, 0xBF, 0x07, + // Unicode: [0x003B, semicolon] + 0x2D, 0x7E, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x3D, 0x1E, 0x0F, 0x0B, + // Unicode: [0x003C, less] + 0x40, 0x3F, 0xF4, 0x07, 0x7F, 0xF0, 0x07, 0xFD, 0x00, 0xFD, 0x00, 0xFD, 0x00, 0xFD, + // Unicode: [0x003D, equal] + 0xFD, 0xFF, 0x6F, 0xFF, 0xFF, 0x4B, 0x55, 0x55, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x6F, 0xFF, 0xFF, + 0x0B, + // Unicode: [0x003E, greater] + 0x7E, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x80, 0x1F, 0xF8, 0x81, 0x1F, 0xF8, 0x01, + // Unicode: [0x003F, question] + 0xE0, 0x6F, 0xE0, 0xFF, 0xD7, 0x47, 0x2F, 0x05, 0xF8, 0x00, 0xF4, 0x82, 0xFF, 0x03, 0xBE, 0x01, + 0xB8, 0x00, 0x00, 0x00, 0x40, 0x0B, 0x00, 0x3F, 0x00, 0xB8, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x40, 0xAA, 0x01, 0x00, 0xE4, 0xFF, 0x7F, 0x00, 0xF4, 0x06, 0xE4, 0x07, 0xF4, 0x01, 0x00, + 0x3D, 0xF4, 0xD0, 0xEB, 0xE2, 0xE1, 0xE1, 0xFF, 0x4B, 0xDB, 0xD3, 0x47, 0x1F, 0x6D, 0x8B, 0x0B, + 0x7C, 0xB4, 0x1E, 0x1F, 0xF0, 0xE0, 0x79, 0xBC, 0xE0, 0xC3, 0xE3, 0xE1, 0xEB, 0xEF, 0x47, 0x0B, + 0xBE, 0xF4, 0x06, 0x7C, 0x00, 0x00, 0x00, 0xD0, 0x1B, 0x50, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, + 0x40, 0xAA, 0x01, 0x00, + // Unicode: [0x0041, A] + 0x00, 0xFD, 0x00, 0x00, 0xF8, 0x07, 0x00, 0xF0, 0x3F, 0x00, 0xD0, 0xFB, 0x01, 0x80, 0xCF, 0x0B, + 0x00, 0x2F, 0x3E, 0x00, 0x3D, 0xF4, 0x01, 0xBC, 0xC0, 0x0B, 0xF4, 0xFF, 0x3F, 0xE0, 0xFF, 0xFF, + 0xC1, 0x0B, 0xC0, 0x4F, 0x1F, 0x00, 0x7D, + // Unicode: [0x0042, B] + 0xFE, 0xBF, 0xE0, 0xFF, 0x3F, 0x2E, 0xE0, 0xE7, 0x02, 0x7C, 0x2E, 0xE0, 0xE3, 0xFF, 0x1F, 0xFE, + 0xFF, 0xE2, 0x02, 0x7D, 0x2E, 0x80, 0xEB, 0x02, 0xBD, 0xFE, 0xFF, 0xE7, 0xFF, 0x1B, + // Unicode: [0x0043, C] + 0x00, 0xFA, 0x0B, 0x40, 0xFF, 0xFF, 0x41, 0xBF, 0xE5, 0x1F, 0x3E, 0x00, 0xBD, 0xBC, 0x00, 0x00, + 0xF4, 0x01, 0x00, 0xD0, 0x07, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0xF4, 0xD2, 0x6F, 0xF9, + 0x07, 0xFD, 0xFF, 0x07, 0x80, 0xFE, 0x02, + // Unicode: [0x0044, D] + 0xFE, 0x6F, 0x00, 0xFE, 0xFF, 0x07, 0x2E, 0xD4, 0x1F, 0x2E, 0x00, 0x2F, 0x2E, 0x00, 0x3E, 0x2E, + 0x00, 0x7D, 0x2E, 0x00, 0x7D, 0x2E, 0x00, 0x3E, 0x2E, 0x00, 0x2F, 0x2E, 0xD4, 0x1F, 0xFE, 0xFF, + 0x07, 0xFE, 0x6F, 0x00, + // Unicode: [0x0045, E] + 0xFE, 0xBF, 0xFE, 0xBF, 0x2E, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0xFE, 0x3F, 0xFE, 0x3F, 0x2E, 0x00, + 0x2E, 0x00, 0x2E, 0x00, 0xFE, 0xBF, 0xFE, 0xBF, + // Unicode: [0x0046, F] + 0xFE, 0xFF, 0xFE, 0xFF, 0x2E, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0xFE, 0x2F, 0xFE, 0x2F, 0x2E, 0x00, + 0x2E, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x2E, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xFA, 0x0A, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0x5B, 0xFE, 0x81, 0x1F, 0x00, 0x1A, 0xBC, 0x00, + 0x00, 0xD0, 0x07, 0xFE, 0x7F, 0x7D, 0xE0, 0xFF, 0xC7, 0x0B, 0x00, 0x3E, 0xF8, 0x01, 0xF0, 0x42, + 0xBF, 0xD5, 0x0F, 0xD0, 0xFF, 0x7F, 0x00, 0xA0, 0xAF, 0x00, + // Unicode: [0x0048, H] + 0x2E, 0x00, 0xAF, 0x0B, 0xC0, 0xEB, 0x02, 0xF0, 0xBA, 0x00, 0xBC, 0x2E, 0x00, 0xAF, 0xFF, 0xFF, + 0xEB, 0xFF, 0xFF, 0xBA, 0x00, 0xBC, 0x2E, 0x00, 0xAF, 0x0B, 0xC0, 0xEB, 0x02, 0xF0, 0xBA, 0x00, + 0xBC, + // Unicode: [0x0049, I] + 0xAE, 0xEB, 0xBA, 0xAE, 0xEB, 0xBA, 0xAE, 0xEB, 0xBA, + // Unicode: [0x004A, J] + 0x00, 0xF0, 0x02, 0xC0, 0x0B, 0x00, 0x2F, 0x00, 0xBC, 0x00, 0xF0, 0x02, 0xC0, 0x0B, 0x00, 0x2F, + 0x00, 0xBC, 0x69, 0xF0, 0xF2, 0xE6, 0x87, 0xFF, 0x0F, 0xE4, 0x0B, + // Unicode: [0x004B, K] + 0x2E, 0xC0, 0xEF, 0x02, 0x3F, 0x2E, 0xF8, 0xE1, 0xE2, 0x07, 0x6E, 0x1F, 0xE0, 0xBF, 0x00, 0xFE, + 0x0B, 0xE0, 0xFA, 0x02, 0x2E, 0x7E, 0xE0, 0x82, 0x1F, 0x2E, 0xF0, 0xE7, 0x02, 0xFC, + // Unicode: [0x004C, L] + 0x2E, 0x80, 0x0B, 0xE0, 0x02, 0xB8, 0x00, 0x2E, 0x80, 0x0B, 0xE0, 0x02, 0xB8, 0x00, 0x2E, 0x80, + 0x0B, 0xE0, 0xFF, 0xFB, 0xFF, + // Unicode: [0x004D, M] + 0x7E, 0x00, 0xC0, 0xEF, 0x0B, 0x00, 0xFE, 0xFE, 0x01, 0xF0, 0xEF, 0x2F, 0x40, 0xFF, 0xFE, 0x03, + 0xFC, 0xEF, 0xBA, 0xD0, 0xFB, 0x6E, 0x0F, 0x9E, 0xEF, 0xE2, 0xF5, 0xF8, 0x2E, 0xBD, 0x8B, 0xEF, + 0xC2, 0x3F, 0xF8, 0x2E, 0xF8, 0x82, 0xEF, 0x02, 0x1F, 0xF8, + // Unicode: [0x004E, N] + 0x3E, 0x00, 0xBE, 0x2F, 0x80, 0xEF, 0x1F, 0xE0, 0xFB, 0x1F, 0xF8, 0xAE, 0x0F, 0xBE, 0xCB, 0x8B, + 0xEF, 0xD2, 0xE7, 0xBB, 0xE0, 0xFB, 0x2E, 0xF0, 0xBF, 0x0B, 0xF4, 0xEF, 0x02, 0xF8, 0xBB, 0x00, + 0xFC, + // Unicode: [0x004F, O] + 0x00, 0xF9, 0x0B, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0x5B, 0xFD, 0x81, 0x0F, 0x00, 0x3F, 0xBC, 0x00, + 0xD0, 0xD7, 0x07, 0x00, 0x7C, 0x7D, 0x00, 0xC0, 0xC7, 0x0B, 0x00, 0x7D, 0xF8, 0x01, 0xF0, 0x43, + 0xBF, 0xD5, 0x1F, 0xD0, 0xFF, 0x7F, 0x00, 0x90, 0xBF, 0x00, + // Unicode: [0x0050, P] + 0xFE, 0x6F, 0xE0, 0xFF, 0x2F, 0x2E, 0xE0, 0xE7, 0x02, 0x7D, 0x2E, 0xE0, 0xE7, 0xFF, 0x2F, 0xFE, + 0x6F, 0xE0, 0x02, 0x00, 0x2E, 0x00, 0xE0, 0x02, 0x00, 0x2E, 0x00, 0xE0, 0x02, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xF9, 0x0B, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0x5B, 0xFD, 0x81, 0x0F, 0x00, 0x3F, 0xBC, 0x00, + 0xD0, 0xD7, 0x07, 0x00, 0x7C, 0x7D, 0x00, 0xC0, 0xC7, 0x0B, 0x00, 0x7D, 0xF8, 0x01, 0xF0, 0x43, + 0xBF, 0xD5, 0x1F, 0xD0, 0xFF, 0x7F, 0x00, 0x90, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, + 0x7E, + // Unicode: [0x0052, R] + 0xFE, 0x6F, 0xE0, 0xFF, 0x2F, 0x2E, 0xE0, 0xE7, 0x02, 0x7C, 0x2E, 0xD0, 0xE7, 0xFF, 0x2F, 0xFE, + 0x7F, 0xE0, 0xE2, 0x03, 0x2E, 0xBD, 0xE0, 0x82, 0x1F, 0x2E, 0xF0, 0xE2, 0x02, 0x7E, + // Unicode: [0x0053, S] + 0xE4, 0x2F, 0xF4, 0xFF, 0xF7, 0x47, 0xEF, 0x0B, 0x54, 0x7E, 0x00, 0xF4, 0x6F, 0x00, 0xF9, 0x1F, + 0x00, 0xBD, 0x1A, 0xE0, 0xFF, 0xD1, 0xDB, 0xFF, 0x1F, 0xF9, 0x1B, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0xDB, 0xFF, 0xBF, 0x00, 0x1F, 0x00, 0xF0, 0x01, 0x00, 0x1F, 0x00, 0xF0, 0x01, 0x00, + 0x1F, 0x00, 0xF0, 0x01, 0x00, 0x1F, 0x00, 0xF0, 0x01, 0x00, 0x1F, 0x00, 0xF0, 0x01, + // Unicode: [0x0055, U] + 0x2E, 0x40, 0x9F, 0x0B, 0xD0, 0xE7, 0x02, 0xF4, 0xB9, 0x00, 0x7D, 0x2E, 0x40, 0x9F, 0x0B, 0xD0, + 0xE7, 0x02, 0xF4, 0xB9, 0x00, 0x7D, 0x3E, 0x40, 0x5F, 0x6F, 0xF9, 0x83, 0xFF, 0x7F, 0x40, 0xFE, + 0x02, + // Unicode: [0x0056, V] + 0x3E, 0x00, 0xF4, 0xF5, 0x01, 0xE0, 0x83, 0x0F, 0xC0, 0x0B, 0x7D, 0x40, 0x1F, 0xF0, 0x02, 0x2E, + 0x80, 0x0F, 0x7C, 0x00, 0x7D, 0xF8, 0x00, 0xF0, 0xF2, 0x02, 0x40, 0xDF, 0x07, 0x00, 0xFC, 0x0F, + 0x00, 0xE0, 0x1F, 0x00, 0x40, 0x3F, 0x00, + // Unicode: [0x0057, W] + 0x7D, 0x40, 0x2F, 0x80, 0xDF, 0x07, 0xF8, 0x03, 0xBC, 0xBC, 0x80, 0x7F, 0xD0, 0x87, 0x0F, 0xFC, + 0x0B, 0x3E, 0xF4, 0xD0, 0xFB, 0xE0, 0x02, 0x1F, 0x6E, 0x0F, 0x1F, 0xE0, 0xF2, 0xF1, 0xF5, 0x00, + 0x7D, 0x0F, 0x6E, 0x0F, 0xD0, 0xBB, 0xD0, 0xBB, 0x00, 0xFC, 0x07, 0xFC, 0x07, 0x80, 0x3F, 0xC0, + 0x3F, 0x00, 0xF4, 0x03, 0xF8, 0x02, + // Unicode: [0x0058, X] + 0x3F, 0x80, 0x5F, 0x2F, 0xF4, 0x82, 0x1F, 0x3E, 0xC0, 0xDF, 0x07, 0xD0, 0xBF, 0x00, 0xE0, 0x0F, + 0x00, 0xF8, 0x03, 0x40, 0xFF, 0x02, 0xF0, 0xFA, 0x01, 0x3E, 0xFC, 0xD0, 0x07, 0xBD, 0xFC, 0x00, + 0x7E, + // Unicode: [0x0059, Y] + 0x7E, 0x00, 0x3E, 0x2F, 0xD0, 0x47, 0x1F, 0xF8, 0xC0, 0x4B, 0x1F, 0xD0, 0xE7, 0x02, 0xE0, 0x7F, + 0x00, 0xF4, 0x0B, 0x00, 0xF8, 0x01, 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, 0xE0, 0x03, 0x00, 0xF8, + 0x00, + // Unicode: [0x005A, Z] + 0xFF, 0xFF, 0xFD, 0xFF, 0x07, 0x80, 0x0F, 0x40, 0x1F, 0x40, 0x2F, 0x00, 0x3F, 0x00, 0x7E, 0x00, + 0xBD, 0x00, 0xBC, 0x00, 0xF8, 0x01, 0xF0, 0xFF, 0xDF, 0xFF, 0x7F, + // Unicode: [0x005B, bracketleft] + 0xFE, 0xFB, 0xEF, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, 0x82, 0x0B, 0x2E, + 0xB8, 0xE0, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, 0xBF, 0xFF, + // Unicode: [0x005C, backslash] + 0x2E, 0x00, 0x3E, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0xB8, 0x00, 0xF4, 0x00, 0xF4, 0x01, 0xF0, 0x01, + 0xE0, 0x02, 0xD0, 0x03, 0xD0, 0x07, 0xC0, 0x0B, 0x80, 0x0B, 0x40, 0x0F, 0x00, 0x1F, 0x00, 0x2F, + 0x00, 0x2E, 0x00, 0x3D, 0x00, 0x7C, 0x00, 0xBC, + // Unicode: [0x005D, bracketright] + 0xFF, 0xFE, 0x0B, 0x2F, 0xBC, 0xF0, 0xC2, 0x0B, 0x2F, 0xBC, 0xF0, 0xC2, 0x0B, 0x2F, 0xBC, 0xF0, + 0xC2, 0x0B, 0x2F, 0xBC, 0xF0, 0xC2, 0xFB, 0xEF, 0xBF, + // Unicode: [0x005E, asciicircum] + 0x00, 0x68, 0x00, 0x00, 0xBE, 0x00, 0x00, 0xFF, 0x01, 0x40, 0xFF, 0x02, 0xC0, 0xDB, 0x03, 0xD0, + 0xC7, 0x0B, 0xE0, 0x82, 0x0F, 0xF4, 0x01, 0x2F, 0xF8, 0x00, 0x3E, 0x7D, 0x00, 0x7D, + // Unicode: [0x005F, underscore] + 0x55, 0x55, 0xD5, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x01, + // Unicode: [0x0060, grave] + 0x1A, 0xF8, 0x42, 0x1E, + // Unicode: [0x0061, a] + 0x80, 0x6F, 0x3E, 0xFD, 0xFF, 0x8F, 0x6F, 0xF9, 0xF7, 0x02, 0xFC, 0x7D, 0x00, 0x7E, 0x1F, 0x80, + 0xDF, 0x0B, 0xF0, 0xE3, 0x07, 0xFE, 0xF4, 0xFF, 0x3F, 0xE0, 0x9B, 0x0F, + // Unicode: [0x0062, b] + 0x15, 0x00, 0x80, 0x0B, 0x00, 0xE0, 0x02, 0x00, 0xB8, 0x00, 0x00, 0x6E, 0xBE, 0x81, 0xFF, 0xFF, + 0xE1, 0x5F, 0xFD, 0xF8, 0x01, 0x7D, 0x2E, 0x00, 0xAF, 0x0B, 0xC0, 0xEB, 0x07, 0xF4, 0xF9, 0x57, + 0x3F, 0xFE, 0xFF, 0x87, 0x9B, 0x6F, 0x00, + // Unicode: [0x0063, c] + 0x80, 0xBF, 0x00, 0xFF, 0x7F, 0xF8, 0xD1, 0xDB, 0x07, 0x54, 0x7D, 0x00, 0xD0, 0x07, 0x00, 0x7D, + 0x40, 0x85, 0x1F, 0xBD, 0xF4, 0xFF, 0x07, 0xF8, 0x0B, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, 0xE0, 0x03, 0xBE, 0xF9, 0xF4, 0xFF, 0x3F, 0xBE, 0xE5, + 0xDF, 0x0B, 0xF0, 0xF7, 0x01, 0xF8, 0x7D, 0x00, 0x7E, 0x2F, 0xC0, 0x8F, 0x1F, 0xF8, 0xD3, 0xFF, + 0xFF, 0x80, 0x6F, 0x3E, + // Unicode: [0x0065, e] + 0x80, 0xBF, 0x01, 0xFC, 0xFF, 0x81, 0x1F, 0xFD, 0xF4, 0x01, 0x7D, 0xFD, 0xFF, 0x5F, 0xAF, 0xAA, + 0xD6, 0x07, 0x50, 0xE0, 0x47, 0x3F, 0xF0, 0xFF, 0x07, 0xE0, 0x2F, 0x00, + // Unicode: [0x0066, f] + 0x80, 0x0B, 0xBF, 0xF4, 0x42, 0x0F, 0xFE, 0xEB, 0xBF, 0xF8, 0x40, 0x0F, 0xF4, 0x40, 0x0F, 0xF4, + 0x40, 0x0F, 0xF4, 0x40, 0x0F, + // Unicode: [0x0067, g] + 0x80, 0x6F, 0x3E, 0xFD, 0xFF, 0x8F, 0x1F, 0xF8, 0xF7, 0x01, 0xFC, 0x7D, 0x00, 0x7E, 0x1F, 0x80, + 0xDF, 0x0B, 0xF0, 0xE3, 0x5B, 0xFE, 0xF4, 0xFF, 0x3E, 0xE0, 0x9B, 0x0F, 0x00, 0xE0, 0xA3, 0x02, + 0xBC, 0xF8, 0x96, 0x1F, 0xFC, 0xFF, 0x02, 0xE8, 0x1B, 0x00, + // Unicode: [0x0068, h] + 0x2E, 0x00, 0xE0, 0x02, 0x00, 0x2E, 0x00, 0xE0, 0xE6, 0x0B, 0xFE, 0xFF, 0xE3, 0x5B, 0x7E, 0x3E, + 0xC0, 0xEB, 0x02, 0xB8, 0x2E, 0x80, 0xEB, 0x02, 0xB8, 0x2E, 0x80, 0xEB, 0x02, 0xB8, 0x2E, 0x80, + 0x0B, + // Unicode: [0x0069, i] + 0xED, 0xEF, 0x02, 0xAE, 0xEB, 0xBA, 0xAE, 0xEB, 0xBA, 0xAE, 0x0B, + // Unicode: [0x006A, j] + 0xE0, 0xC2, 0x0F, 0x2E, 0x00, 0xE0, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, 0x82, 0x0B, 0x2E, 0xB8, 0xE0, + 0x82, 0x0B, 0x2E, 0xB8, 0xF4, 0xFA, 0xE7, 0x0B, + // Unicode: [0x006B, k] + 0x2E, 0x00, 0xB8, 0x00, 0xE0, 0x02, 0x80, 0x0B, 0xFD, 0x2E, 0xFC, 0xB8, 0xF8, 0xE1, 0xFA, 0x81, + 0xFF, 0x01, 0xFE, 0x07, 0xB8, 0x7E, 0xE0, 0xE2, 0x87, 0x0B, 0x3F, 0x2E, 0xF4, 0x03, + // Unicode: [0x006C, l] + 0xAE, 0xEB, 0xBA, 0xAE, 0xEB, 0xBA, 0xAE, 0xEB, 0xBA, 0x2E, + // Unicode: [0x006D, m] + 0x6E, 0xBE, 0x90, 0x2F, 0xF8, 0xFF, 0xEF, 0xFF, 0xE3, 0x0B, 0xFE, 0x82, 0x9F, 0x0F, 0xF0, 0x03, + 0xBC, 0x2E, 0x80, 0x0B, 0xE0, 0xBA, 0x00, 0x2E, 0x80, 0xEB, 0x02, 0xB8, 0x00, 0xAE, 0x0B, 0xE0, + 0x02, 0xB8, 0x2E, 0x80, 0x0B, 0xE0, 0xBA, 0x00, 0x2E, 0x80, 0x0B, + // Unicode: [0x006E, n] + 0x6E, 0xBE, 0xE0, 0xFF, 0x3F, 0xBE, 0xE0, 0xE7, 0x03, 0xBC, 0x2E, 0x80, 0xEB, 0x02, 0xB8, 0x2E, + 0x80, 0xEB, 0x02, 0xB8, 0x2E, 0x80, 0xEB, 0x02, 0xB8, + // Unicode: [0x006F, o] + 0x80, 0xBF, 0x01, 0xFC, 0xFF, 0x81, 0x6F, 0xFD, 0xF1, 0x02, 0xBC, 0x7D, 0x00, 0x6E, 0x1F, 0x80, + 0xCB, 0x0B, 0xF0, 0xE2, 0x57, 0x7F, 0xF0, 0xFF, 0x07, 0xE0, 0x6F, 0x00, + // Unicode: [0x0070, p] + 0x6E, 0xBE, 0x81, 0xFF, 0xFF, 0xE1, 0x5F, 0xFD, 0xF8, 0x01, 0x7D, 0x2E, 0x00, 0xAF, 0x0B, 0xC0, + 0xEB, 0x07, 0xF4, 0xF9, 0x57, 0x3F, 0xFE, 0xFF, 0x87, 0x9B, 0x6F, 0xE0, 0x02, 0x00, 0xB8, 0x00, + 0x00, 0x2E, 0x00, 0x80, 0x0B, 0x00, 0xE0, 0x02, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x80, 0x6F, 0x3E, 0xFD, 0xFF, 0x8F, 0x6F, 0xF9, 0xF7, 0x02, 0xFC, 0x7D, 0x00, 0x7E, 0x1F, 0x80, + 0xDF, 0x0B, 0xF0, 0xE3, 0x5B, 0xFE, 0xF4, 0xFF, 0x3F, 0xE0, 0x9B, 0x0F, 0x00, 0xE0, 0x03, 0x00, + 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, 0xE0, 0x03, + // Unicode: [0x0072, r] + 0x6E, 0xEA, 0xBF, 0xFE, 0xEA, 0x07, 0x3E, 0xE0, 0x02, 0x2E, 0xE0, 0x02, 0x2E, 0xE0, 0x02, + // Unicode: [0x0073, s] + 0xE4, 0x1B, 0xFE, 0x7F, 0x2F, 0xBC, 0x2F, 0x50, 0xFD, 0x0A, 0xE4, 0x7F, 0x05, 0xF8, 0x2F, 0xF8, + 0xFE, 0xBF, 0xE4, 0x1B, + // Unicode: [0x0074, t] + 0xF4, 0x01, 0x7D, 0xE0, 0xFF, 0xF9, 0x7F, 0xF4, 0x01, 0x7D, 0x40, 0x1F, 0xD0, 0x07, 0xF4, 0x01, + 0x7D, 0x00, 0xFF, 0x41, 0x7E, + // Unicode: [0x0075, u] + 0x2F, 0xC0, 0xFB, 0x02, 0xBC, 0x2F, 0xC0, 0xFB, 0x02, 0xBC, 0x2F, 0xC0, 0xFB, 0x02, 0xBC, 0x3E, + 0xC0, 0xEB, 0x0B, 0xBE, 0xFC, 0xFF, 0x0B, 0xBE, 0xBD, + // Unicode: [0x0076, v] + 0x3E, 0x40, 0x5F, 0x1F, 0xE0, 0xC3, 0x0B, 0xBC, 0xE0, 0x43, 0x1F, 0xF0, 0xE1, 0x03, 0xB8, 0xBC, + 0x00, 0x7D, 0x1F, 0x00, 0xFF, 0x02, 0x80, 0x7F, 0x00, 0xD0, 0x0F, 0x00, + // Unicode: [0x0077, w] + 0x2E, 0xE0, 0x03, 0x7D, 0x0F, 0xFC, 0x81, 0xCB, 0x47, 0xBF, 0xF0, 0xF1, 0xE1, 0x3E, 0x3C, 0xB8, + 0x78, 0x4F, 0x0B, 0x3D, 0x8F, 0xE7, 0x01, 0xDF, 0xD2, 0x7E, 0x80, 0x7F, 0xF4, 0x0F, 0xD0, 0x1F, + 0xFC, 0x02, 0xF0, 0x03, 0x7E, 0x00, + // Unicode: [0x0078, x] + 0x7E, 0xD0, 0xC7, 0x0F, 0x2F, 0xF4, 0xFA, 0x00, 0xFE, 0x07, 0xC0, 0x2F, 0x00, 0xFC, 0x02, 0xE0, + 0x7F, 0x40, 0xDF, 0x0F, 0xB8, 0xF4, 0xD2, 0x07, 0x7E, + // Unicode: [0x0079, y] + 0x3E, 0x00, 0x6F, 0x1F, 0xD0, 0xC3, 0x0B, 0xB8, 0xD0, 0x47, 0x1F, 0xF0, 0xE2, 0x03, 0xF8, 0xBC, + 0x00, 0xBD, 0x0F, 0x00, 0xFF, 0x02, 0x40, 0x7F, 0x00, 0xC0, 0x0F, 0x00, 0xF0, 0x01, 0x00, 0x3E, + 0x00, 0xC0, 0x0B, 0x00, 0xF4, 0x01, 0x00, 0x2F, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0xFF, 0xFD, 0xFF, 0x00, 0xBD, 0x00, 0x2F, 0x80, 0x0F, 0xD0, 0x07, 0xF4, 0x02, 0xFC, 0x00, + 0xFD, 0xFF, 0xFD, 0xFF, + // Unicode: [0x007B, braceleft] + 0xD0, 0x4B, 0xBF, 0xF8, 0x81, 0x0B, 0xF8, 0x40, 0x0F, 0xF4, 0x40, 0x0F, 0xF8, 0xF0, 0x07, 0x7F, + 0x80, 0x0F, 0xF4, 0x40, 0x0F, 0xF4, 0x80, 0x0F, 0xB8, 0x80, 0x1F, 0xF4, 0x0B, 0xBD, + // Unicode: [0x007C, bar] + 0x55, 0xDF, 0xF7, 0x7D, 0xDF, 0xF7, 0x7D, 0xDF, 0xF7, 0x7D, 0xDF, 0xF7, 0x3D, + // Unicode: [0x007D, braceright] + 0x7E, 0xE0, 0x1F, 0xF0, 0x02, 0x2E, 0xE0, 0x02, 0x2F, 0xF0, 0x01, 0x1F, 0xE0, 0x02, 0xF9, 0xD0, + 0x0F, 0x2E, 0xF0, 0x01, 0x1F, 0xF0, 0x02, 0x2E, 0xE0, 0x02, 0x2F, 0xFE, 0xE1, 0x07, + // Unicode: [0x007E, asciitilde] + 0x00, 0x00, 0x45, 0xBF, 0xF5, 0xFC, 0xFF, 0xD7, 0x92, 0x1F +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_18_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_18_2bpp_4.cpp new file mode 100644 index 00000000..8b9dfeb8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_18_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x1E, 0x1E, 0xDE, 0xDF, 0xDB, 0xEB, 0xE1, 0xE1, 0x01 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_20_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_20_2bpp_0.cpp new file mode 100644 index 00000000..afa8bf2f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_20_2bpp_0.cpp @@ -0,0 +1,354 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_20_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x2E, 0x2E, 0x2E, 0x2E, 0x15, 0x00, 0x3E, 0x7F, 0x2E, + // Unicode: [0x0022, quotedbl] + 0x3D, 0x2F, 0x8F, 0xC7, 0xE3, 0xF1, 0x78, + // Unicode: [0x0023, numbersign] + 0x00, 0xA0, 0x01, 0x19, 0x00, 0xD0, 0x07, 0xBC, 0x00, 0x40, 0x1F, 0xF0, 0x02, 0x00, 0x3E, 0xD0, + 0x07, 0xF4, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0xFF, 0xFF, 0x0B, 0xE5, 0x5B, 0xBD, 0x15, 0x80, 0x0F, + 0xF4, 0x01, 0x00, 0x3E, 0xE0, 0x03, 0xF4, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0xFF, 0xFF, 0x4B, 0xE5, + 0x5B, 0xBE, 0x15, 0x80, 0x0F, 0xF4, 0x01, 0x00, 0x2F, 0xE0, 0x03, 0x00, 0xBC, 0x80, 0x0F, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x09, 0x00, 0x90, 0x07, 0x40, 0xFF, 0x2F, 0xF4, 0xFF, 0x2F, 0x7E, 0xD9, 0xCF, 0x4F, 0x52, + 0xE1, 0x9B, 0x00, 0xF4, 0x7F, 0x00, 0xF4, 0xFF, 0x02, 0x90, 0xFF, 0x02, 0x90, 0xFC, 0xA5, 0x24, + 0x7E, 0x7E, 0xC9, 0x4F, 0xFF, 0xFF, 0x42, 0xFF, 0x2F, 0x00, 0x79, 0x00, 0x00, 0x09, 0x00, + // Unicode: [0x0025, percent] + 0xE0, 0x0B, 0xD0, 0x07, 0xB8, 0x2F, 0xF0, 0x02, 0x3C, 0x3C, 0xF8, 0x01, 0x2D, 0x3C, 0xBC, 0x00, + 0x3C, 0x3D, 0x3E, 0x00, 0xF8, 0x5F, 0x1F, 0x00, 0x90, 0x86, 0x0F, 0x00, 0x00, 0xD0, 0x07, 0x00, + 0x00, 0xF0, 0x92, 0x1F, 0x00, 0xF4, 0xF1, 0x7E, 0x00, 0xBC, 0xB4, 0xB4, 0x00, 0x3E, 0xB4, 0xB4, + 0x40, 0x2F, 0xF0, 0x79, 0x80, 0x0F, 0x90, 0x1F, + // Unicode: [0x0026, ampersand] + 0x00, 0xF9, 0x06, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0xBC, 0xF5, 0x02, 0x40, 0x2F, 0x54, 0x00, 0xC0, + 0x0F, 0x00, 0x00, 0xD0, 0x0F, 0x00, 0x00, 0xFE, 0x0F, 0x54, 0xE0, 0xDB, 0x0F, 0x3F, 0xBC, 0xD0, + 0xEF, 0x47, 0x2F, 0xD0, 0xBF, 0xD0, 0x0B, 0xD0, 0x1F, 0xF0, 0x5B, 0xFE, 0x1F, 0xF4, 0xFF, 0xEF, + 0x1F, 0xE0, 0xAF, 0xD0, 0x0F, + // Unicode: [0x0027, quotesingle] + 0x3D, 0xCF, 0xF3, + // Unicode: [0x0028, parenleft] + 0x00, 0x3E, 0xE0, 0x07, 0xBE, 0xC0, 0x0F, 0xF8, 0x01, 0x3F, 0xD0, 0x0B, 0xF4, 0x01, 0x3E, 0x80, + 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0x3E, 0x80, 0x0F, 0xE0, 0x07, 0xF4, 0x01, 0xBC, 0x00, 0x7E, 0x40, + 0x2F, 0x80, 0x1F, 0xC0, 0x0F, 0xD0, 0x0B, + // Unicode: [0x0029, parenright] + 0xBD, 0x00, 0xF8, 0x01, 0xE0, 0x07, 0xD0, 0x0B, 0x80, 0x1F, 0x40, 0x2F, 0x00, 0x3F, 0x00, 0x7E, + 0x00, 0x7D, 0x00, 0x7D, 0x00, 0xBD, 0x00, 0xBC, 0x00, 0xBD, 0x00, 0x7D, 0x00, 0x7E, 0x00, 0x3E, + 0x00, 0x2F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF4, 0x02, 0xFC, 0x00, + // Unicode: [0x002A, asterisk] + 0x40, 0x01, 0x80, 0x03, 0xAC, 0x77, 0xF9, 0xBF, 0xE4, 0x1F, 0xBD, 0xBF, 0x98, 0x63, 0x80, 0x03, + // Unicode: [0x002B, plus] + 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, 0xE0, 0x03, 0x00, 0xF8, 0x00, 0xFD, 0xFF, 0x7F, 0xFF, 0xFF, + 0x4F, 0xE5, 0x57, 0x01, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, + // Unicode: [0x002C, comma] + 0x54, 0xF8, 0xBC, 0x3C, 0x2D, 0x1E, + // Unicode: [0x002D, hyphen] + 0x55, 0x55, 0xF9, 0xFF, 0xEF, 0xFF, 0x3F, + // Unicode: [0x002E, period] + 0x3E, 0x7F, 0x2E, + // Unicode: [0x002F, slash] + 0x00, 0xBC, 0x00, 0xBD, 0x00, 0x7D, 0x00, 0x3E, 0x00, 0x2F, 0x40, 0x2F, 0x40, 0x1F, 0x80, 0x0F, + 0xC0, 0x0B, 0xD0, 0x0B, 0xD0, 0x07, 0xE0, 0x03, 0xF0, 0x02, 0xF4, 0x02, 0xF4, 0x01, 0xF8, 0x00, + 0xBC, 0x00, 0xBC, 0x00, 0x7D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x2F, 0x00, + // Unicode: [0x0030, zero] + 0x40, 0x59, 0x00, 0xF8, 0xBF, 0x80, 0xFF, 0xBF, 0xF4, 0x47, 0x3F, 0x7E, 0x40, 0x9F, 0x0F, 0xC0, + 0xFB, 0x03, 0xF0, 0xBE, 0x00, 0xFC, 0x3F, 0x00, 0xAF, 0x0F, 0xC0, 0xEB, 0x03, 0xF4, 0xF6, 0x02, + 0x7E, 0xFC, 0xEA, 0x0F, 0xFD, 0xFF, 0x01, 0xF9, 0x1B, 0x00, + // Unicode: [0x0031, one] + 0xFD, 0xDB, 0xBF, 0xE8, 0x0B, 0xBD, 0xD0, 0x0B, 0xBD, 0xD0, 0x0B, 0xBD, 0xD0, 0x0B, 0xBD, 0xD0, + 0x0B, 0xBD, 0xD0, 0x0B, 0xBD, + // Unicode: [0x0032, two] + 0x40, 0x05, 0x40, 0xFF, 0x0B, 0xFD, 0xFF, 0xE2, 0x47, 0x7F, 0x2F, 0xD0, 0x57, 0x01, 0x7D, 0x00, + 0xE0, 0x07, 0x40, 0x2F, 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xD0, 0x1F, 0x40, 0x7F, 0x00, 0xFE, 0x55, + 0xF5, 0xFF, 0xBF, 0xFF, 0xFF, 0x0B, + // Unicode: [0x0033, three] + 0xE0, 0x6F, 0x80, 0xFF, 0x2F, 0xBE, 0xF5, 0xE7, 0x03, 0xBD, 0x00, 0xD0, 0x07, 0x40, 0x3E, 0x80, + 0xFF, 0x01, 0xF8, 0x1B, 0x00, 0xF5, 0x07, 0x00, 0xBC, 0x1A, 0xC0, 0xFB, 0x03, 0xBC, 0xBE, 0xE5, + 0xC7, 0xFF, 0x2F, 0x90, 0x6F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0xF0, 0x0B, 0x00, 0xF8, 0x0B, 0x00, 0xFD, 0x0B, 0x00, 0xEF, 0x0B, 0x80, 0xCF, 0x0B, 0xD0, + 0xC7, 0x0B, 0xF0, 0xC2, 0x0B, 0xF8, 0xC0, 0x0B, 0x7E, 0xC0, 0x0B, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, + 0xBF, 0x55, 0xD5, 0x5F, 0x00, 0xC0, 0x0B, 0x00, 0xC0, 0x0B, + // Unicode: [0x0035, five] + 0x54, 0x55, 0x45, 0xFF, 0xFF, 0xD3, 0xFF, 0xFF, 0xF4, 0x01, 0x00, 0x7D, 0x00, 0x40, 0x9F, 0x6F, + 0xD0, 0xFF, 0xBF, 0xF4, 0x5B, 0x7F, 0xBC, 0x40, 0x2F, 0x00, 0xC0, 0x0B, 0x00, 0xF0, 0xF6, 0x02, + 0xBD, 0xFC, 0xD6, 0x1F, 0xFD, 0xFF, 0x02, 0xF8, 0x1B, 0x00, + // Unicode: [0x0036, six] + 0x00, 0x04, 0x00, 0xF4, 0x7F, 0x40, 0xFF, 0x7F, 0xF0, 0x47, 0x3F, 0x7D, 0x40, 0x4A, 0x0F, 0x05, + 0xE0, 0xF7, 0x2F, 0xF8, 0xFF, 0x2F, 0xFE, 0x91, 0x9F, 0x1F, 0xD0, 0xDB, 0x03, 0xF0, 0xF6, 0x01, + 0x7D, 0xF8, 0xD6, 0x0F, 0xFD, 0xFF, 0x01, 0xF8, 0x1B, 0x00, + // Unicode: [0x0037, seven] + 0x54, 0x55, 0x45, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0x01, 0x00, 0x3E, 0x00, 0xC0, 0x0B, 0x00, 0xF8, + 0x00, 0x00, 0x2F, 0x00, 0xD0, 0x07, 0x00, 0xBC, 0x00, 0x40, 0x1F, 0x00, 0xE0, 0x03, 0x00, 0xBD, + 0x00, 0x80, 0x0F, 0x00, 0xF0, 0x02, 0x00, 0x7E, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x90, 0xBF, 0x01, 0xFE, 0xFF, 0xD1, 0x5F, 0xFD, 0xF4, 0x01, 0x7E, 0x7D, 0x40, 0x1F, 0x6F, 0xF4, + 0x02, 0xFF, 0x2F, 0xE0, 0xFF, 0x1F, 0xBD, 0xD0, 0x9F, 0x0F, 0xD0, 0xEB, 0x03, 0xF0, 0xFA, 0x01, + 0xBD, 0xFD, 0xE5, 0x1F, 0xFE, 0xFF, 0x01, 0xF9, 0x1B, 0x00, + // Unicode: [0x0039, nine] + 0x00, 0x15, 0x00, 0xF8, 0x7F, 0x80, 0xFF, 0x7F, 0xF4, 0x46, 0x2F, 0x7E, 0x80, 0x8F, 0x0F, 0xD0, + 0xE7, 0x07, 0xF8, 0xF5, 0x97, 0x7F, 0xF8, 0xFF, 0x1F, 0xE4, 0xDB, 0x07, 0x00, 0xF4, 0xA5, 0x01, + 0x3E, 0xFC, 0xD5, 0x0B, 0xFD, 0xFF, 0x00, 0xF9, 0x0B, 0x00, + // Unicode: [0x003A, colon] + 0x2E, 0x7F, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7F, 0x2E, + // Unicode: [0x003B, semicolon] + 0x7D, 0xBE, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0x7D, 0x3D, 0x1E, 0x0F, 0x05, + // Unicode: [0x003C, less] + 0x00, 0xA9, 0x40, 0x7F, 0xD0, 0x1F, 0xF4, 0x07, 0xFD, 0x01, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3F, + 0x00, 0xFE, + // Unicode: [0x003D, equal] + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0x5B, 0x55, 0x55, 0x01, 0x00, 0x00, 0x55, 0x55, 0xD5, 0xFF, 0xFF, + 0xFB, 0xFF, 0xFF, 0x02, + // Unicode: [0x003E, greater] + 0xAA, 0x00, 0xFC, 0x02, 0xF0, 0x0B, 0xC0, 0x2F, 0x00, 0x7F, 0x80, 0x2F, 0xE0, 0x0B, 0xF8, 0x02, + 0xBE, 0x00, + // Unicode: [0x003F, question] + 0x90, 0xBF, 0x40, 0xFF, 0x3F, 0xFC, 0xE5, 0xDB, 0x07, 0xFC, 0x00, 0xC0, 0x0F, 0x40, 0xBE, 0xD0, + 0xFF, 0x03, 0xFD, 0x06, 0xD0, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x00, 0xE0, 0x0B, + 0x00, 0x7D, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x40, 0xAA, 0x1A, 0x00, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xE0, 0x1B, 0x50, 0x3F, 0x00, 0x7F, + 0x00, 0x00, 0x2E, 0xE0, 0x42, 0x6F, 0x5F, 0x0F, 0x3D, 0xF8, 0xFF, 0x83, 0xC7, 0x87, 0x1F, 0xFD, + 0xE0, 0xF6, 0xF0, 0x02, 0x2E, 0xB8, 0x2D, 0x7D, 0x80, 0x0B, 0x9E, 0x4B, 0x1F, 0xF0, 0xC1, 0xE3, + 0xD2, 0x07, 0x7E, 0xB8, 0xB4, 0xF0, 0xFF, 0xFE, 0x0F, 0x3D, 0xE0, 0x0B, 0xBE, 0x00, 0x2E, 0x00, + 0x00, 0x00, 0x40, 0x7F, 0x00, 0x05, 0x00, 0x40, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF9, 0x6F, 0x00, + 0x00, + // Unicode: [0x0041, A] + 0x00, 0xF8, 0x03, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0xE0, 0xFB, 0x00, 0x00, 0x6F, + 0x1F, 0x00, 0xF4, 0xF1, 0x02, 0x80, 0x0F, 0x3E, 0x00, 0xBC, 0xD0, 0x07, 0xE0, 0x07, 0xFC, 0x00, + 0xFF, 0xFF, 0x1F, 0xF4, 0xFF, 0xFF, 0x82, 0x5F, 0x55, 0x3F, 0xFC, 0x00, 0xE0, 0xD7, 0x0B, 0x00, + 0xBD, + // Unicode: [0x0042, B] + 0xFE, 0xFF, 0x82, 0xFF, 0xFF, 0xE3, 0x57, 0xFD, 0xF9, 0x01, 0xBD, 0x7E, 0x40, 0xAF, 0x1F, 0xE0, + 0xE7, 0xFF, 0x7F, 0xF8, 0xFF, 0x1F, 0x7E, 0x90, 0x9F, 0x1F, 0xC0, 0xEF, 0x07, 0xF0, 0xFB, 0x55, + 0xBE, 0xFE, 0xFF, 0x9F, 0xFF, 0xBF, 0x00, + // Unicode: [0x0043, C] + 0x00, 0xF9, 0x2B, 0x00, 0xF8, 0xFF, 0x1F, 0xE0, 0xAF, 0xFE, 0x47, 0x3F, 0x00, 0xFE, 0xF8, 0x01, + 0x40, 0xC5, 0x0B, 0x00, 0x00, 0xBD, 0x00, 0x00, 0xD0, 0x0B, 0x00, 0x00, 0xBC, 0x00, 0x00, 0xC0, + 0x1F, 0x00, 0x54, 0xF4, 0x03, 0xE0, 0x0F, 0xFE, 0xA6, 0x7F, 0x80, 0xFF, 0xFF, 0x01, 0x90, 0xBF, + 0x02, + // Unicode: [0x0044, D] + 0xFE, 0xBF, 0x01, 0xF8, 0xFF, 0x7F, 0xE0, 0x57, 0xF9, 0x83, 0x1F, 0x80, 0x2F, 0x7E, 0x00, 0xF8, + 0xF9, 0x01, 0xD0, 0xE7, 0x07, 0x40, 0xAF, 0x1F, 0x00, 0xBD, 0x7E, 0x00, 0xF4, 0xF9, 0x01, 0xE0, + 0xE7, 0x07, 0xE0, 0x8B, 0x5F, 0xE5, 0x0F, 0xFE, 0xFF, 0x1F, 0xF8, 0xFF, 0x06, 0x00, + // Unicode: [0x0045, E] + 0xFE, 0xFF, 0xF9, 0xFF, 0xE7, 0x57, 0x85, 0x1F, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0xFF, 0x8F, + 0xFF, 0x3F, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x5F, 0x15, 0xFE, 0xFF, 0xF9, 0xFF, 0x07, + // Unicode: [0x0046, F] + 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0x57, 0x95, 0x1F, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0xFF, 0x8B, + 0xFF, 0x2F, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xF9, 0x2B, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xFE, 0xEA, 0x7F, 0xD0, 0x1F, 0x80, 0x3F, 0xF8, + 0x01, 0x00, 0x05, 0x2F, 0x00, 0x00, 0xD0, 0x0B, 0xFC, 0xFF, 0xF6, 0x02, 0xFF, 0xBF, 0xBC, 0x00, + 0x40, 0x2F, 0x7F, 0x00, 0xE0, 0x47, 0x3F, 0x00, 0xFD, 0x80, 0xBF, 0xEA, 0x1F, 0x80, 0xFF, 0xFF, + 0x01, 0x40, 0xFE, 0x06, 0x00, + // Unicode: [0x0048, H] + 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x7E, + 0x00, 0xFC, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x7E, 0x55, 0xFD, 0x7E, 0x00, 0xFC, 0x7E, 0x00, + 0xFC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0xFC, + // Unicode: [0x0049, I] + 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, + // Unicode: [0x004A, J] + 0x00, 0xD0, 0x0B, 0x00, 0xBD, 0x00, 0xD0, 0x0B, 0x00, 0xBD, 0x00, 0xD0, 0x0B, 0x00, 0xBD, 0x00, + 0xD0, 0x0B, 0x00, 0xBD, 0x00, 0xD0, 0x4B, 0x05, 0xBD, 0xBD, 0xD0, 0xC7, 0xAF, 0x7F, 0xF4, 0xFF, + 0x02, 0xF9, 0x07, + // Unicode: [0x004B, K] + 0x7E, 0x40, 0x7F, 0x7E, 0xC0, 0x1F, 0x7E, 0xE0, 0x0B, 0x7E, 0xF8, 0x02, 0x7E, 0xFD, 0x00, 0x7E, + 0x3F, 0x00, 0xFE, 0x1F, 0x00, 0xFE, 0x1F, 0x00, 0x7E, 0x7F, 0x00, 0x7E, 0xFD, 0x00, 0x7E, 0xF8, + 0x02, 0x7E, 0xE0, 0x0B, 0x7E, 0xC0, 0x2F, 0x7E, 0x40, 0x7F, + // Unicode: [0x004C, L] + 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, + 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x15, 0xFE, 0xBF, 0xFE, 0xBF, + // Unicode: [0x004D, M] + 0xBE, 0x00, 0x00, 0xBE, 0xFE, 0x01, 0x40, 0xBF, 0xFE, 0x02, 0x80, 0xBF, 0xFE, 0x03, 0xC0, 0xBF, + 0xFE, 0x07, 0xD0, 0xBF, 0xBE, 0x0F, 0xF0, 0xBE, 0x7E, 0x1F, 0xF4, 0xBD, 0x7E, 0x2E, 0xB8, 0xBD, + 0x7E, 0x7D, 0x7D, 0xBD, 0x7E, 0xBC, 0x3E, 0xBD, 0x7E, 0xF8, 0x1F, 0xBD, 0x7E, 0xF0, 0x0F, 0xBD, + 0x7E, 0xE0, 0x0B, 0xBD, 0x7E, 0xD0, 0x07, 0xBD, + // Unicode: [0x004E, N] + 0xBE, 0x00, 0xF4, 0xF9, 0x07, 0xD0, 0xE7, 0x2F, 0x40, 0x9F, 0xFF, 0x01, 0x7D, 0xFE, 0x1F, 0xF4, + 0xF9, 0xBD, 0xD0, 0xE7, 0xD7, 0x47, 0x9F, 0x1F, 0x3E, 0x7D, 0x7E, 0xF0, 0xF6, 0xF9, 0x41, 0xFF, + 0xE7, 0x07, 0xF8, 0x9F, 0x1F, 0xC0, 0x7F, 0x7E, 0x00, 0xFD, 0xF9, 0x01, 0xE0, 0x07, + // Unicode: [0x004F, O] + 0x00, 0xF9, 0x1B, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xFE, 0xAA, 0x7F, 0xD0, 0x0F, 0x40, 0x3F, 0xF8, + 0x01, 0x80, 0x2F, 0x2F, 0x00, 0xC0, 0xDB, 0x0B, 0x00, 0xF0, 0xF7, 0x02, 0x00, 0xFC, 0xBC, 0x00, + 0x00, 0x2F, 0x7E, 0x00, 0xE0, 0x4B, 0x3F, 0x00, 0xFD, 0x80, 0xBF, 0xE9, 0x1F, 0x80, 0xFF, 0xFF, + 0x01, 0x40, 0xFE, 0x06, 0x00, + // Unicode: [0x0050, P] + 0xFE, 0xBF, 0x81, 0xFF, 0xFF, 0xE1, 0x57, 0xFD, 0xF8, 0x01, 0x7E, 0x7E, 0x40, 0xAF, 0x1F, 0xE0, + 0xE7, 0x57, 0xFD, 0xF8, 0xFF, 0x1F, 0xFE, 0xBF, 0x81, 0x1F, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x01, + 0x00, 0x7E, 0x00, 0x80, 0x1F, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xF9, 0x1B, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xFE, 0xAA, 0x7F, 0xD0, 0x0F, 0x40, 0x3F, 0xF8, + 0x01, 0x80, 0x2F, 0x2F, 0x00, 0xC0, 0xDB, 0x0B, 0x00, 0xF0, 0xF7, 0x02, 0x00, 0xFC, 0xBC, 0x00, + 0x00, 0x2F, 0x7E, 0x00, 0xE0, 0x4B, 0x3F, 0x00, 0xFD, 0x80, 0xBF, 0xE9, 0x1F, 0x80, 0xFF, 0xFF, + 0x01, 0x40, 0xFE, 0xBF, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x40, 0x1A, + // Unicode: [0x0052, R] + 0xFE, 0xBF, 0x81, 0xFF, 0xFF, 0xE1, 0x57, 0xFD, 0xF9, 0x01, 0xBD, 0x7E, 0x40, 0xAF, 0x1F, 0xD0, + 0xEB, 0x07, 0xFD, 0xF9, 0xFF, 0x2F, 0xFE, 0xFF, 0x81, 0x5F, 0x3F, 0xE0, 0x87, 0x2F, 0xF8, 0xC1, + 0x1F, 0x7E, 0xD0, 0x8B, 0x1F, 0xE0, 0x07, + // Unicode: [0x0053, S] + 0xA0, 0xBF, 0xC0, 0xFF, 0x3F, 0xBE, 0xF5, 0xFB, 0x03, 0xBD, 0x7F, 0x00, 0xE0, 0x6F, 0x00, 0xF8, + 0xBF, 0x00, 0xF9, 0x7F, 0x00, 0xF4, 0x0F, 0x00, 0xFC, 0x7F, 0xC0, 0xEF, 0x5F, 0xBE, 0xF8, 0xFF, + 0x03, 0xF9, 0x0B, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0x7F, 0xFF, 0xFF, 0x4F, 0xE5, 0x57, 0x01, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x80, 0x0F, + 0x00, 0xE0, 0x03, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, 0xE0, 0x03, 0x00, 0xF8, + 0x00, 0x00, 0x3E, 0x00, 0x80, 0x0F, 0x00, + // Unicode: [0x0055, U] + 0x3E, 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x3E, + 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x3E, 0x00, 0xBD, 0x7E, 0x00, 0xBD, 0xBD, 0x00, + 0x7E, 0xFC, 0xEB, 0x2F, 0xF4, 0xFF, 0x0F, 0x80, 0xBF, 0x01, + // Unicode: [0x0056, V] + 0x7E, 0x00, 0xD0, 0xDB, 0x0B, 0x00, 0x7E, 0xF8, 0x00, 0xF0, 0x43, 0x1F, 0x40, 0x2F, 0xF0, 0x03, + 0xF8, 0x01, 0x7E, 0xC0, 0x0F, 0xD0, 0x0B, 0xBD, 0x00, 0xFC, 0xE0, 0x07, 0x80, 0x1F, 0x2F, 0x00, + 0xF4, 0xF6, 0x01, 0x00, 0xBF, 0x0F, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x80, 0x3F, + 0x00, + // Unicode: [0x0057, W] + 0xBD, 0x00, 0xFD, 0x00, 0xFC, 0xBC, 0x00, 0xFE, 0x01, 0xBD, 0xFC, 0x00, 0xFF, 0x01, 0x7E, 0xF8, + 0x41, 0xFF, 0x02, 0x3E, 0xF4, 0x41, 0xEF, 0x03, 0x2F, 0xF0, 0x82, 0xDB, 0x47, 0x2F, 0xE0, 0xC3, + 0xCB, 0x47, 0x1F, 0xE0, 0xD3, 0xC7, 0x8B, 0x0F, 0xD0, 0xD7, 0x83, 0xCF, 0x0B, 0xC0, 0xEB, 0x42, + 0xDF, 0x07, 0x80, 0xFF, 0x01, 0xFF, 0x03, 0x40, 0xFF, 0x01, 0xFE, 0x03, 0x40, 0xFF, 0x00, 0xFE, + 0x02, 0x00, 0xBF, 0x00, 0xFD, 0x01, + // Unicode: [0x0058, X] + 0x7F, 0x00, 0xBE, 0xFD, 0x00, 0x3F, 0xF8, 0x82, 0x1F, 0xF0, 0xD7, 0x0B, 0xD0, 0xFF, 0x03, 0x80, + 0xFF, 0x01, 0x00, 0xBF, 0x00, 0x00, 0xBF, 0x00, 0x80, 0xFF, 0x01, 0xD0, 0xFB, 0x03, 0xF0, 0xE3, + 0x0B, 0xF8, 0xC1, 0x1F, 0xFD, 0x40, 0x3F, 0x7F, 0x00, 0xBE, + // Unicode: [0x0059, Y] + 0xBE, 0x00, 0xFC, 0xF1, 0x03, 0xF4, 0x42, 0x2F, 0xE0, 0x07, 0xFC, 0xD0, 0x0B, 0xD0, 0x87, 0x0F, + 0x00, 0x7F, 0x2F, 0x00, 0xF4, 0x3F, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0xFD, 0x00, 0x00, 0xF0, 0x02, + 0x00, 0xC0, 0x0B, 0x00, 0x00, 0x2F, 0x00, 0x00, 0xBC, 0x00, 0x00, 0xF0, 0x02, 0x00, + // Unicode: [0x005A, Z] + 0xFF, 0xFF, 0xFB, 0xFF, 0xBF, 0x55, 0xF5, 0x07, 0x80, 0x2F, 0x00, 0xFD, 0x00, 0xE0, 0x07, 0x80, + 0x2F, 0x00, 0xFD, 0x00, 0xE0, 0x07, 0x40, 0x2F, 0x00, 0xFC, 0x00, 0xE0, 0x5B, 0x15, 0xFF, 0xFF, + 0xFB, 0xFF, 0xBF, + // Unicode: [0x005B, bracketleft] + 0xFD, 0xDB, 0xBF, 0x7D, 0xD5, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, + 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x5B, 0xFD, 0xDB, + 0xBF, + // Unicode: [0x005C, backslash] + 0x7D, 0x00, 0xF0, 0x02, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0xF4, 0x01, 0xC0, 0x0B, 0x00, 0x3F, 0x00, + 0xF8, 0x00, 0xD0, 0x07, 0x00, 0x2F, 0x00, 0xF8, 0x00, 0xE0, 0x07, 0x40, 0x1F, 0x00, 0xBC, 0x00, + 0xE0, 0x03, 0x80, 0x1F, 0x00, 0x7D, 0x00, 0xF0, 0x02, 0x80, 0x0F, 0x00, 0x7D, 0x00, 0xF4, 0x02, + 0xC0, 0x0B, + // Unicode: [0x005D, bracketright] + 0xFE, 0xE7, 0x7F, 0xE5, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, + 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x07, 0x7D, 0xD0, 0x57, 0x7E, 0xFE, 0xE7, + 0x7F, + // Unicode: [0x005E, asciicircum] + 0x00, 0x29, 0x00, 0x00, 0xBF, 0x00, 0x40, 0xFF, 0x00, 0xC0, 0xFF, 0x02, 0xD0, 0xF7, 0x03, 0xE0, + 0xD3, 0x07, 0xF4, 0xC2, 0x0F, 0xF8, 0x80, 0x1F, 0xBD, 0x00, 0x2F, 0x7E, 0x00, 0x7E, 0x2F, 0x00, + 0xBD, + // Unicode: [0x005F, underscore] + 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + // Unicode: [0x0060, grave] + 0x06, 0xB8, 0xD1, 0x2F, 0xB4, 0x00, 0x01, + // Unicode: [0x0061, a] + 0x40, 0xBE, 0xF8, 0x81, 0xFF, 0xEF, 0x87, 0xBF, 0xF9, 0x1F, 0x7F, 0x40, 0x7F, 0xBD, 0x00, 0xF8, + 0xF5, 0x02, 0xE0, 0xD7, 0x0B, 0x80, 0x1F, 0x3F, 0x40, 0x7F, 0xF8, 0x57, 0xFF, 0x81, 0xFF, 0xFF, + 0x07, 0xE4, 0x9B, 0x1F, + // Unicode: [0x0062, b] + 0x29, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0xF9, 0x06, 0xBE, + 0xFF, 0x1F, 0xFE, 0x9B, 0x3F, 0xBE, 0x00, 0xBE, 0x7E, 0x00, 0xBC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, + 0xBC, 0xBE, 0x00, 0xBE, 0xFE, 0x97, 0x3F, 0xBE, 0xFF, 0x1F, 0x7E, 0xF9, 0x06, + // Unicode: [0x0063, c] + 0x40, 0xBE, 0x02, 0xF8, 0xFF, 0x83, 0x7F, 0xF9, 0xF2, 0x03, 0xA8, 0xBD, 0x00, 0x40, 0x2F, 0x00, + 0xD0, 0x0B, 0x00, 0xF0, 0x03, 0xA8, 0xF8, 0x97, 0x2F, 0xF8, 0xFF, 0x03, 0xE4, 0x2F, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x54, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x7E, 0x40, 0xBE, 0xF8, + 0x81, 0xFF, 0xEF, 0x87, 0xBF, 0xF9, 0x1F, 0x7F, 0x40, 0x7F, 0xBD, 0x00, 0xF8, 0xF5, 0x02, 0xE0, + 0xD7, 0x0B, 0x80, 0x1F, 0x3F, 0x40, 0x7F, 0xF8, 0x57, 0xFF, 0x81, 0xFF, 0xFF, 0x07, 0xE4, 0x9B, + 0x1F, + // Unicode: [0x0065, e] + 0x40, 0xFE, 0x02, 0xE0, 0xFF, 0x1F, 0xF8, 0x96, 0x3F, 0xBC, 0x00, 0x7D, 0xFD, 0xAA, 0xBF, 0xFD, + 0xFF, 0xBF, 0xBD, 0x00, 0x00, 0xFC, 0x00, 0x2A, 0xF8, 0x97, 0x2F, 0xE0, 0xFF, 0x0F, 0x40, 0xFE, + 0x02, + // Unicode: [0x0066, f] + 0x00, 0x04, 0xE0, 0x07, 0xFF, 0xD1, 0x0B, 0xF4, 0x82, 0xFF, 0xE7, 0xFF, 0xD1, 0x1B, 0xF4, 0x02, + 0xBD, 0x40, 0x2F, 0xD0, 0x0B, 0xF4, 0x02, 0xBD, 0x40, 0x2F, 0xD0, 0x0B, + // Unicode: [0x0067, g] + 0x40, 0xBE, 0xF9, 0x81, 0xFF, 0xFF, 0x87, 0x7F, 0xF5, 0x1F, 0x3F, 0x40, 0x7F, 0xBD, 0x00, 0xF8, + 0xF5, 0x02, 0xE0, 0xD7, 0x0B, 0x80, 0x1F, 0x7F, 0x40, 0x7F, 0xF8, 0x9B, 0xFF, 0x81, 0xFF, 0xEF, + 0x07, 0xE4, 0x8B, 0x1F, 0x00, 0x00, 0x3E, 0xF8, 0x01, 0xFC, 0xD0, 0x6F, 0xFE, 0x02, 0xFE, 0xFF, + 0x02, 0x90, 0xBF, 0x01, + // Unicode: [0x0068, h] + 0x15, 0x00, 0x80, 0x1F, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x01, 0x00, 0x7E, 0xFE, 0x82, 0xFF, 0xFF, + 0xE3, 0x6F, 0xFD, 0xFA, 0x02, 0xBD, 0x7E, 0x00, 0xBF, 0x1F, 0xC0, 0xEF, 0x07, 0xF0, 0xFB, 0x01, + 0xFC, 0x7E, 0x00, 0xBF, 0x1F, 0xC0, 0xEF, 0x07, 0xF0, 0x03, + // Unicode: [0x0069, i] + 0x7E, 0x7F, 0x2D, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, + // Unicode: [0x006A, j] + 0xE0, 0x07, 0x7F, 0xD0, 0x02, 0x00, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, + 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x07, 0x7E, 0xE0, 0x57, 0x3F, 0xFE, 0xE2, 0x0B, + // Unicode: [0x006B, k] + 0x15, 0x00, 0x80, 0x1F, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x01, 0x00, 0x7E, 0xD0, 0x8F, 0x1F, 0xFD, + 0xE1, 0xC7, 0x1F, 0xF8, 0xF9, 0x01, 0xBE, 0x2F, 0x80, 0xFF, 0x03, 0xE0, 0xFB, 0x02, 0xF8, 0xF9, + 0x01, 0x7E, 0xFC, 0x81, 0x1F, 0xFD, 0xE1, 0x07, 0xFD, 0x01, + // Unicode: [0x006C, l] + 0x15, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, + // Unicode: [0x006D, m] + 0x7E, 0xFE, 0x42, 0xBE, 0x81, 0xFF, 0xFF, 0xF7, 0xFF, 0xE2, 0x6F, 0xFD, 0x5F, 0xFD, 0xF9, 0x02, + 0xFD, 0x01, 0xBD, 0x7E, 0x00, 0x3F, 0x40, 0xAF, 0x1F, 0xC0, 0x0F, 0xC0, 0xEB, 0x07, 0xF0, 0x03, + 0xF0, 0xFA, 0x01, 0xFC, 0x00, 0xBC, 0x7E, 0x00, 0x3F, 0x00, 0xAF, 0x1F, 0xC0, 0x0F, 0xC0, 0xEB, + 0x07, 0xF0, 0x03, 0xF0, 0x02, + // Unicode: [0x006E, n] + 0x7E, 0xFE, 0x82, 0xFF, 0xFF, 0xE3, 0x5F, 0xFD, 0xFA, 0x01, 0xBD, 0x7E, 0x00, 0xBF, 0x1F, 0xC0, + 0xEF, 0x07, 0xF0, 0xFB, 0x01, 0xFC, 0x7E, 0x00, 0xBF, 0x1F, 0xC0, 0xEF, 0x07, 0xF0, 0x03, + // Unicode: [0x006F, o] + 0x40, 0xFE, 0x06, 0xE0, 0xFF, 0x1F, 0xF4, 0x9B, 0x7F, 0xFC, 0x01, 0xBD, 0xBD, 0x00, 0xFC, 0xBD, + 0x00, 0xF8, 0xBD, 0x00, 0xFC, 0xFC, 0x00, 0xBD, 0xF4, 0x9B, 0x7F, 0xE0, 0xFF, 0x1F, 0x40, 0xFE, + 0x02, + // Unicode: [0x0070, p] + 0x7E, 0xF9, 0x06, 0xBE, 0xFF, 0x1F, 0xFE, 0x9B, 0x3F, 0xBE, 0x00, 0xBE, 0x7E, 0x00, 0xBC, 0x7E, + 0x00, 0xFC, 0x7E, 0x00, 0xBC, 0xBE, 0x00, 0xBE, 0xFE, 0x97, 0x3F, 0xBE, 0xFF, 0x1F, 0x7E, 0xF9, + 0x06, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x40, 0xBE, 0xF9, 0x81, 0xFF, 0xFF, 0x87, 0xBF, 0xF9, 0x1F, 0x7F, 0x40, 0x7F, 0xBD, 0x00, 0xF8, + 0xF5, 0x02, 0xE0, 0xD7, 0x0B, 0x80, 0x1F, 0x7F, 0x40, 0x7F, 0xF8, 0x9B, 0xFF, 0x81, 0xFF, 0xEF, + 0x07, 0xE4, 0x8B, 0x1F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xF8, 0x01, 0x00, 0xE0, 0x07, 0x00, 0x80, + 0x1F, 0x00, 0x00, 0x7E, + // Unicode: [0x0072, r] + 0x7E, 0xAD, 0xEF, 0xEB, 0xFF, 0xF9, 0x02, 0x7E, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x01, 0x7E, 0x80, + 0x1F, 0xE0, 0x07, 0x00, + // Unicode: [0x0073, s] + 0xE4, 0x2F, 0xF4, 0xFF, 0xE3, 0x97, 0xEF, 0x0F, 0x64, 0xFE, 0x06, 0xE0, 0xFF, 0x02, 0xE4, 0xAF, + 0x06, 0xF8, 0x7F, 0xF5, 0xF7, 0xFF, 0x07, 0xFE, 0x06, + // Unicode: [0x0074, t] + 0xF4, 0x02, 0xBD, 0x40, 0x2F, 0xF8, 0xFF, 0xFE, 0x3F, 0xBD, 0x45, 0x2F, 0xD0, 0x0B, 0xF4, 0x02, + 0xBD, 0x40, 0x2F, 0xC0, 0x5F, 0xE0, 0x3F, 0xE0, 0x0F, + // Unicode: [0x0075, u] + 0x3E, 0x00, 0xBF, 0x0F, 0xC0, 0xEF, 0x03, 0xF0, 0xFB, 0x00, 0xFC, 0x3E, 0x00, 0xBF, 0x0F, 0xC0, + 0xEF, 0x03, 0xF0, 0xFB, 0x01, 0xFD, 0xFD, 0xD5, 0x3F, 0xFE, 0xFF, 0x0F, 0xFD, 0xF2, 0x03, + // Unicode: [0x0076, v] + 0x7E, 0x00, 0xBD, 0xBD, 0x00, 0x7E, 0xFC, 0x00, 0x3F, 0xF8, 0x41, 0x1F, 0xF0, 0x82, 0x0F, 0xE0, + 0xC3, 0x0B, 0xD0, 0xD7, 0x07, 0xC0, 0xEB, 0x03, 0x80, 0xFF, 0x02, 0x40, 0xFF, 0x01, 0x00, 0xFF, + 0x00, + // Unicode: [0x0077, w] + 0x3E, 0xC0, 0x0F, 0xF0, 0xF6, 0x41, 0x7F, 0xD0, 0xC7, 0x0B, 0xFE, 0x82, 0x0F, 0x2E, 0xF8, 0x0F, + 0x2E, 0xF8, 0xF0, 0x3D, 0x7C, 0xD0, 0xD7, 0xF3, 0xF5, 0x00, 0x9F, 0x8B, 0xDB, 0x02, 0xB8, 0x1F, + 0xBD, 0x0B, 0xD0, 0x3F, 0xF4, 0x1F, 0x00, 0xBF, 0xC0, 0x3F, 0x00, 0xF8, 0x02, 0xBE, 0x00, + // Unicode: [0x0078, x] + 0xBE, 0x80, 0x1F, 0x7E, 0xF4, 0x42, 0x3F, 0x3F, 0x80, 0xFF, 0x07, 0x80, 0xBF, 0x00, 0xD0, 0x0F, + 0x00, 0xF8, 0x0B, 0x80, 0xFF, 0x07, 0xF4, 0xF6, 0x03, 0x3E, 0xF8, 0xD2, 0x07, 0xF8, 0x01, + // Unicode: [0x0079, y] + 0x7E, 0x00, 0xBD, 0xBD, 0x00, 0x7E, 0xFC, 0x01, 0x3F, 0xF4, 0x42, 0x1F, 0xF0, 0x83, 0x0F, 0xE0, + 0xC7, 0x0B, 0xD0, 0xDB, 0x07, 0x80, 0xFF, 0x02, 0x40, 0xFF, 0x01, 0x00, 0xFF, 0x00, 0x00, 0x7E, + 0x00, 0x00, 0x3F, 0x00, 0x40, 0x2F, 0x00, 0x80, 0x1F, 0x00, 0xD0, 0x0B, 0x00, 0xE0, 0x07, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0xFF, 0xF6, 0xFF, 0x4B, 0x95, 0x2F, 0x40, 0x2F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0xBE, 0x00, + 0xBD, 0x00, 0xFC, 0x55, 0xF5, 0xFF, 0xDF, 0xFF, 0x3F, + // Unicode: [0x007B, braceleft] + 0x80, 0x2F, 0xF8, 0x0B, 0x7F, 0xD0, 0x07, 0xF4, 0x02, 0xBC, 0x00, 0x2F, 0xC0, 0x0B, 0xF0, 0x02, + 0xBE, 0xE0, 0x0B, 0xF8, 0x02, 0xF8, 0x02, 0xBC, 0x00, 0x2F, 0xC0, 0x0B, 0xF0, 0x02, 0xBD, 0x40, + 0x1F, 0xC0, 0x5F, 0xE0, 0x2F, 0xE0, 0x0B, + // Unicode: [0x007C, bar] + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, + // Unicode: [0x007D, braceright] + 0xBD, 0x40, 0xFF, 0x40, 0x7E, 0x40, 0x1F, 0xD0, 0x07, 0xF4, 0x01, 0x3E, 0x80, 0x0F, 0xE0, 0x03, + 0xF4, 0x02, 0xF8, 0x03, 0xFE, 0xD0, 0x0B, 0xF8, 0x00, 0x3E, 0x80, 0x0F, 0xD0, 0x07, 0xF4, 0x01, + 0x7D, 0x90, 0x1F, 0xFD, 0x43, 0x2F, 0x00, + // Unicode: [0x007E, asciitilde] + 0x40, 0x05, 0x14, 0xFD, 0x9B, 0xCF, 0xFF, 0xFF, 0xF5, 0x90, 0x1F +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_20_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_20_2bpp_4.cpp new file mode 100644 index 00000000..3778db8f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_20_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_20_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x3E, 0x7D, 0xBC, 0x7F, 0xBE, 0xFD, 0x2E, 0x7D, 0xB8 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_25_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_25_2bpp_0.cpp new file mode 100644 index 00000000..f55ef999 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_25_2bpp_0.cpp @@ -0,0 +1,464 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_25_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xFE, 0xF5, 0xD7, 0x4F, 0x3F, 0xFD, 0xF4, 0xD3, 0x4F, 0x3F, 0xFD, 0xF4, 0xC3, 0x0F, 0x3F, 0x00, + 0xF0, 0xE2, 0x9F, 0x7F, 0xB8, 0x00, + // Unicode: [0x0022, quotedbl] + 0x15, 0xD5, 0x8F, 0xFF, 0xE2, 0xBF, 0xF8, 0x2F, 0xBE, 0x8B, 0x0F, + // Unicode: [0x0023, numbersign] + 0x00, 0x40, 0x1A, 0x40, 0x1A, 0x00, 0x00, 0xBE, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x01, 0xFC, 0x01, + 0x00, 0xF0, 0x07, 0xF4, 0x03, 0x00, 0xD0, 0x0F, 0xE0, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF4, 0x03, 0xF4, 0x03, 0x00, + 0xD0, 0x0F, 0xE0, 0x0B, 0x00, 0x80, 0x2F, 0x80, 0x2F, 0x00, 0x00, 0xBF, 0x00, 0x7F, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0x7F, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80, + 0x2F, 0xC0, 0x1F, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0xFD, 0x00, 0x00, 0xF4, + 0x03, 0xF8, 0x02, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x60, 0x00, 0x00, 0xC0, 0x02, 0x00, 0x90, 0x6F, 0x00, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, + 0xF4, 0xDB, 0xFA, 0xEB, 0x0F, 0xCB, 0xBF, 0x3F, 0x2C, 0x00, 0xFE, 0xB2, 0x00, 0xF4, 0xFF, 0x02, + 0x40, 0xFF, 0xBF, 0x01, 0xE4, 0xFF, 0x2F, 0x00, 0xF4, 0xFF, 0x02, 0xC0, 0xF6, 0x0F, 0x00, 0x8B, + 0xBF, 0x7F, 0x2C, 0xFE, 0xFD, 0xB2, 0xFD, 0xF2, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x07, 0x90, 0xBF, + 0x02, 0x00, 0xB0, 0x00, 0x00, 0xC0, 0x02, 0x00, + // Unicode: [0x0025, percent] + 0xE4, 0x1B, 0x00, 0xBE, 0x40, 0xFF, 0x1F, 0xD0, 0x0F, 0xF0, 0xD6, 0x0B, 0xFC, 0x02, 0xBC, 0xE0, + 0x43, 0x3F, 0x00, 0x2F, 0xBC, 0xF0, 0x07, 0x80, 0xFF, 0x1F, 0xBE, 0x00, 0x40, 0xBF, 0xD1, 0x1F, + 0x00, 0x00, 0x00, 0xF8, 0x02, 0x00, 0x00, 0x40, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x47, 0xBF, 0x01, + 0x00, 0xFE, 0xF4, 0xFF, 0x00, 0xC0, 0x1F, 0x2F, 0xBD, 0x00, 0xF8, 0xC2, 0x07, 0x2E, 0x40, 0x7F, + 0xF0, 0x81, 0x0B, 0xE0, 0x0B, 0xFC, 0xF5, 0x02, 0xFD, 0x00, 0xFD, 0x3F, 0xC0, 0x1F, 0x00, 0xF9, + 0x02, + // Unicode: [0x0026, ampersand] + 0x00, 0xF9, 0x1B, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0xD0, 0xBF, 0xFF, 0x00, 0x00, 0xFD, 0xC0, + 0x1F, 0x00, 0xD0, 0x0F, 0x54, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, + 0xFD, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0xFC, 0xD2, 0x1F, 0xFD, 0xE2, 0x0F, 0xBF, 0x40, 0xFF, + 0xBF, 0xF0, 0x07, 0xD0, 0xFF, 0x03, 0xBF, 0x00, 0xF4, 0x1F, 0xE0, 0x1F, 0x90, 0xFF, 0x03, 0xFD, + 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0xD7, 0x3F, 0x80, 0xFE, 0x06, 0xF4, 0x0F, + // Unicode: [0x0027, quotesingle] + 0xD5, 0xFF, 0xBE, 0xAF, 0x0B, + // Unicode: [0x0028, parenleft] + 0x00, 0xF4, 0x07, 0xD0, 0x2F, 0x00, 0xFF, 0x00, 0xF8, 0x07, 0xC0, 0x2F, 0x00, 0xFE, 0x00, 0xF0, + 0x0B, 0x40, 0x7F, 0x00, 0xF8, 0x03, 0xC0, 0x2F, 0x00, 0xFC, 0x01, 0xC0, 0x1F, 0x00, 0xFD, 0x00, + 0xD0, 0x0F, 0x00, 0xFD, 0x00, 0xD0, 0x0F, 0x00, 0xFD, 0x01, 0xC0, 0x1F, 0x00, 0xFC, 0x02, 0x80, + 0x2F, 0x00, 0xF4, 0x03, 0x40, 0x7F, 0x00, 0xE0, 0x0B, 0x00, 0xFD, 0x01, 0xC0, 0x3F, 0x00, 0xF4, + 0x0B, 0x00, 0xFE, 0x01, 0x80, 0x3F, + // Unicode: [0x0029, parenright] + 0xFD, 0x01, 0x80, 0x7F, 0x00, 0xE0, 0x0F, 0x00, 0xFC, 0x02, 0x40, 0x7F, 0x00, 0xF0, 0x0B, 0x00, + 0xFD, 0x00, 0xC0, 0x1F, 0x00, 0xF8, 0x02, 0x80, 0x3F, 0x00, 0xF4, 0x03, 0x00, 0x7F, 0x00, 0xF0, + 0x07, 0x00, 0x7F, 0x00, 0xF0, 0x07, 0x00, 0x7F, 0x00, 0xF0, 0x07, 0x40, 0x7F, 0x00, 0xF4, 0x03, + 0x80, 0x3F, 0x00, 0xFC, 0x02, 0xD0, 0x1F, 0x00, 0xFE, 0x00, 0xF4, 0x07, 0x80, 0x3F, 0x00, 0xFD, + 0x01, 0xF4, 0x0B, 0xC0, 0x2F, 0x00, + // Unicode: [0x002A, asterisk] + 0x40, 0x05, 0x00, 0x2E, 0x90, 0x74, 0xD8, 0xEF, 0xFE, 0xF9, 0xBF, 0x91, 0xBF, 0xF0, 0xFF, 0xAF, + 0xDB, 0xB9, 0x84, 0x4B, 0x00, 0x2E, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0xA8, 0x00, 0x00, 0xF4, 0x03, 0x00, 0xD0, 0x0F, 0x00, 0x40, 0x3F, 0x00, 0x00, 0xFD, 0x00, + 0xFC, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xBF, 0x00, 0xFD, 0x00, 0x00, 0xF4, 0x03, + 0x00, 0xD0, 0x0F, 0x00, 0x40, 0x3F, 0x00, 0x00, 0xFD, 0x00, 0x00, + // Unicode: [0x002C, comma] + 0xF0, 0x47, 0x3F, 0xF8, 0x82, 0x0F, 0xBC, 0xD0, 0x07, 0x3E, 0x00, + // Unicode: [0x002D, hyphen] + 0xFD, 0xFF, 0x7F, 0xFD, 0xFF, 0x7F, 0xFD, 0xFF, 0x7F, + // Unicode: [0x002E, period] + 0xBD, 0xF8, 0xE7, 0x5F, 0x2F, + // Unicode: [0x002F, slash] + 0x00, 0xD0, 0x0F, 0x00, 0xBE, 0x00, 0xF0, 0x07, 0x40, 0x7F, 0x00, 0xF4, 0x03, 0x80, 0x2F, 0x00, + 0xFC, 0x02, 0xC0, 0x1F, 0x00, 0xFD, 0x00, 0xE0, 0x0B, 0x00, 0xBF, 0x00, 0xF0, 0x07, 0x40, 0x3F, + 0x00, 0xF8, 0x03, 0x80, 0x2F, 0x00, 0xFC, 0x01, 0xD0, 0x0F, 0x00, 0xFE, 0x00, 0xE0, 0x0B, 0x00, + 0x7F, 0x00, 0xF4, 0x03, 0x80, 0x3F, 0x00, 0xF8, 0x02, 0xC0, 0x1F, 0x00, 0xFD, 0x01, 0xD0, 0x0F, + 0x00, 0xBE, 0x00, 0xF0, 0x07, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0x50, 0x00, 0x00, 0xE4, 0xFF, 0x01, 0xE0, 0xFF, 0xBF, 0x40, 0xFF, 0xFF, 0x1F, 0xF8, 0x07, + 0xFD, 0xC3, 0x1F, 0x40, 0x7F, 0xFD, 0x00, 0xF0, 0xEB, 0x0F, 0x00, 0xBE, 0xBE, 0x00, 0xE0, 0xEB, + 0x0B, 0x00, 0xBE, 0xBE, 0x00, 0xE0, 0xEB, 0x0F, 0x00, 0xBE, 0xFD, 0x00, 0xE0, 0xDB, 0x0F, 0x00, + 0x7F, 0xFC, 0x02, 0xF4, 0x87, 0xBF, 0xE5, 0x2F, 0xF0, 0xFF, 0xFF, 0x01, 0xFD, 0xFF, 0x07, 0x00, + 0xFE, 0x1B, 0x00, + // Unicode: [0x0031, one] + 0x55, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFE, 0xE0, 0x0F, 0xFE, 0xE0, 0x0F, 0xFE, 0xE0, + 0x0F, 0xFE, 0xE0, 0x0F, 0xFE, 0xE0, 0x0F, 0xFE, 0xE0, 0x0F, 0xFE, 0xE0, 0x0F, + // Unicode: [0x0032, two] + 0x40, 0xFE, 0x06, 0xC0, 0xFF, 0xBF, 0xC0, 0xFF, 0xFF, 0x47, 0xBF, 0xD0, 0x2F, 0xBE, 0x00, 0xFE, + 0xFC, 0x02, 0xF4, 0x03, 0x00, 0xE0, 0x0F, 0x00, 0xC0, 0x2F, 0x00, 0x40, 0x7F, 0x00, 0x40, 0xBF, + 0x00, 0x40, 0xFF, 0x00, 0x40, 0xFF, 0x01, 0x40, 0xFF, 0x01, 0x80, 0xFF, 0x00, 0x80, 0xBF, 0x00, + 0x80, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x07, + // Unicode: [0x0033, three] + 0x40, 0xFE, 0x06, 0x80, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0x47, 0xBF, 0xD0, 0x3F, 0xFE, 0x00, 0xFD, + 0x54, 0x01, 0xF4, 0x03, 0x00, 0xD0, 0x0F, 0x00, 0xD0, 0x2F, 0x00, 0xFD, 0x2F, 0x00, 0xF4, 0x2F, + 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x90, 0x3F, 0x00, 0x00, 0xFC, 0xA5, 0x01, 0xF0, 0xE7, 0x0B, 0xC0, + 0x5F, 0xBF, 0x80, 0x7F, 0xFC, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0x00, 0xE4, 0x6F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0x07, 0x00, + 0xFC, 0xFE, 0x01, 0x80, 0x2F, 0x7F, 0x00, 0xF4, 0xC7, 0x1F, 0x00, 0x7F, 0xF0, 0x07, 0xE0, 0x0B, + 0xFC, 0x01, 0xFE, 0x00, 0x7F, 0xD0, 0x1F, 0xC0, 0x1F, 0xF8, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, + 0xAF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x01, + 0x00, 0x00, 0x7F, 0x00, + // Unicode: [0x0035, five] + 0xFE, 0xFF, 0xBF, 0xF8, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0x8B, 0x1F, 0x00, 0x00, 0x7E, 0x00, 0x00, + 0xF8, 0x01, 0x00, 0xE0, 0x97, 0xAF, 0x80, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xBF, 0xF8, 0x0B, 0xF8, + 0xA7, 0x0A, 0xC0, 0x2F, 0x00, 0x00, 0xBE, 0x00, 0x00, 0xF8, 0xFE, 0x02, 0xF0, 0xEB, 0x1F, 0xE0, + 0x1F, 0xFF, 0xFF, 0x2F, 0xF4, 0xFF, 0x2F, 0x00, 0xFA, 0x1B, 0x00, + // Unicode: [0x0036, six] + 0x00, 0xE9, 0x0A, 0x00, 0xF8, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x40, 0xBF, 0xD0, 0x2F, 0xF8, 0x02, + 0xF4, 0xC3, 0x1F, 0x00, 0x15, 0xFC, 0x00, 0x00, 0xD0, 0x4F, 0xBE, 0x01, 0xBD, 0xFE, 0xBF, 0xD0, + 0xFF, 0xFF, 0x2F, 0xFD, 0x07, 0xF8, 0xD3, 0x1F, 0x00, 0x7F, 0xFC, 0x00, 0xF0, 0xCB, 0x1F, 0x00, + 0x7F, 0xF8, 0x02, 0xF0, 0x47, 0x7F, 0x90, 0x3F, 0xE0, 0xFF, 0xFF, 0x02, 0xFC, 0xFF, 0x0B, 0x00, + 0xF9, 0x1B, 0x00, + // Unicode: [0x0037, seven] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xBE, 0x00, 0x40, 0x3F, 0x00, + 0x80, 0x2F, 0x00, 0xC0, 0x1F, 0x00, 0xE0, 0x0B, 0x00, 0xF0, 0x07, 0x00, 0xF4, 0x03, 0x00, 0xFC, + 0x02, 0x00, 0xFD, 0x00, 0x00, 0xBE, 0x00, 0x40, 0x7F, 0x00, 0x80, 0x2F, 0x00, 0xD0, 0x1F, 0x00, + 0xE0, 0x0F, 0x00, 0xF0, 0x07, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0xA9, 0x06, 0x00, 0xFD, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0x81, 0x7F, 0xD0, 0x3F, 0xFC, 0x02, + 0xF4, 0xC3, 0x1F, 0x40, 0x3F, 0xFC, 0x02, 0xF4, 0x43, 0x7F, 0xD0, 0x1F, 0xD0, 0xFF, 0x7F, 0x00, + 0xFD, 0xFF, 0x0B, 0xF8, 0xAF, 0xFE, 0xC2, 0x2F, 0x80, 0x7F, 0xFD, 0x00, 0xF0, 0xE7, 0x0F, 0x00, + 0xBF, 0xFD, 0x00, 0xF0, 0xC7, 0x6F, 0x90, 0x7F, 0xF8, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0x0B, 0x40, + 0xFE, 0x1B, 0x00, + // Unicode: [0x0039, nine] + 0x40, 0xFE, 0x06, 0x00, 0xFD, 0xFF, 0x03, 0xF4, 0xFF, 0xBF, 0xC0, 0x7F, 0xD0, 0x1F, 0xFD, 0x01, + 0xF8, 0xD2, 0x0F, 0x40, 0x3F, 0xFD, 0x00, 0xF4, 0xD3, 0x1F, 0x40, 0x7F, 0xFC, 0x07, 0xFD, 0x47, + 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0x07, 0xE4, 0x2F, 0x3F, 0x00, 0x00, 0xF0, 0x43, 0x05, 0x00, + 0x3F, 0xF8, 0x02, 0xF4, 0x42, 0x7F, 0xD0, 0x1F, 0xF0, 0xFF, 0xFF, 0x00, 0xFD, 0xFF, 0x07, 0x00, + 0xFA, 0x0B, 0x00, + // Unicode: [0x003A, colon] + 0xB9, 0xF8, 0xE7, 0x5F, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x8B, 0x7F, 0xFE, + 0xF5, 0x02, + // Unicode: [0x003B, semicolon] + 0xF4, 0xF1, 0xDF, 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3F, 0xBE, 0xFC, + 0xF0, 0xD2, 0x87, 0x0F, 0x1F, 0x00, + // Unicode: [0x003C, less] + 0x00, 0xFD, 0x07, 0xF4, 0x1F, 0xD0, 0x7F, 0x40, 0xFF, 0x01, 0xFD, 0x07, 0xE0, 0x2F, 0x00, 0xFC, + 0x07, 0x00, 0xFF, 0x01, 0xC0, 0x7F, 0x00, 0xF0, 0x1F, 0x00, 0xFC, 0x07, + // Unicode: [0x003D, equal] + 0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x0F, + // Unicode: [0x003E, greater] + 0xFD, 0x07, 0x40, 0xFF, 0x01, 0xD0, 0x7F, 0x00, 0xF4, 0x1F, 0x00, 0xFD, 0x07, 0x80, 0xFF, 0x00, + 0xFD, 0x03, 0xF4, 0x0F, 0xD0, 0x7F, 0x40, 0xFF, 0x01, 0xFD, 0x07, 0x00, + // Unicode: [0x003F, question] + 0x90, 0xBF, 0x01, 0xF8, 0xFF, 0x0F, 0xFE, 0xFF, 0x2F, 0xBF, 0x80, 0x7F, 0x6A, 0x00, 0x7F, 0x00, + 0x40, 0x7F, 0x40, 0xE5, 0x3F, 0xE0, 0xFF, 0x1F, 0xE0, 0xFF, 0x02, 0xE0, 0x0B, 0x00, 0xE0, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x07, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, + 0xD0, 0x07, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x2F, 0x00, 0x00, 0x90, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0xF4, 0x5F, 0x00, 0xF9, 0x07, 0x00, 0xFE, 0x01, 0x00, 0xD0, 0x1F, 0x40, 0x3F, + 0x00, 0x00, 0x40, 0x2F, 0xD0, 0x0F, 0xE4, 0xDB, 0x0F, 0x3E, 0xE0, 0x07, 0xFE, 0xFF, 0x0F, 0x7D, + 0xF4, 0x82, 0xBF, 0xFE, 0x0B, 0x7D, 0xF8, 0xD1, 0x1F, 0xF0, 0x0B, 0x7D, 0xFC, 0xE0, 0x0B, 0xE0, + 0x07, 0x7D, 0xBC, 0xE0, 0x07, 0xE0, 0x07, 0x7E, 0xBC, 0xF0, 0x07, 0xF0, 0x03, 0x3E, 0xBD, 0xF0, + 0x07, 0xF8, 0x43, 0x1F, 0xBC, 0xE0, 0xAF, 0xFF, 0xD7, 0x0F, 0xFC, 0xD0, 0xFF, 0xDB, 0xFF, 0x03, + 0xF8, 0x41, 0xBE, 0x41, 0xBF, 0x00, 0xF4, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0x56, 0x3A, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x90, + 0xFF, 0x1A, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0xF4, 0x1F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xFD, 0x7F, 0x00, + 0x00, 0xBE, 0xBF, 0x00, 0x00, 0x7F, 0xFD, 0x00, 0x40, 0x3F, 0xFC, 0x01, 0xC0, 0x2F, 0xF8, 0x02, + 0xD0, 0x1F, 0xF4, 0x03, 0xE0, 0x0F, 0xF0, 0x0B, 0xF0, 0x0B, 0xE0, 0x0F, 0xF4, 0xFF, 0xFF, 0x1F, + 0xF8, 0xFF, 0xFF, 0x2F, 0xFC, 0xAB, 0xEA, 0x3F, 0xFD, 0x01, 0x40, 0x7F, 0xFE, 0x00, 0x00, 0xBF, + 0xBF, 0x00, 0x00, 0xFE, + // Unicode: [0x0042, B] + 0xFD, 0xFF, 0x2F, 0xD0, 0xFF, 0xFF, 0x1F, 0xFD, 0xEB, 0xFF, 0xD3, 0x1F, 0x80, 0x7F, 0xFD, 0x01, + 0xF0, 0xDB, 0x1F, 0x00, 0x7F, 0xFD, 0x01, 0xF9, 0xD3, 0xFF, 0xFF, 0x1F, 0xFD, 0xFF, 0x7F, 0xD0, + 0xAF, 0xEA, 0x2F, 0xFD, 0x01, 0xF4, 0xD7, 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x40, + 0xFF, 0xFD, 0xEB, 0xFF, 0xD7, 0xFF, 0xFF, 0x2F, 0xFD, 0xFF, 0x6F, 0x00, + // Unicode: [0x0043, C] + 0x00, 0xE4, 0xAF, 0x01, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0xFD, 0x5B, 0xF5, + 0x3F, 0xFD, 0x07, 0x00, 0xFE, 0xF9, 0x07, 0x00, 0x50, 0xF5, 0x0B, 0x00, 0x00, 0xC0, 0x2F, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x02, 0x00, 0x00, 0xF0, 0x0B, 0x00, 0x00, 0x80, 0x7F, + 0x00, 0x00, 0x55, 0xFD, 0x07, 0x00, 0xFE, 0xD2, 0xBF, 0x51, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x07, + 0xD0, 0xFF, 0xFF, 0x02, 0x00, 0xE4, 0xBF, 0x01, 0x00, + // Unicode: [0x0044, D] + 0xFD, 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0xFD, 0xFF, 0xFF, 0x0B, 0xFD, 0x01, 0xF4, 0x1F, + 0xFD, 0x01, 0xC0, 0x3F, 0xFD, 0x01, 0x40, 0xBF, 0xFD, 0x01, 0x00, 0xBF, 0xFD, 0x01, 0x00, 0xFE, + 0xFD, 0x01, 0x00, 0xFE, 0xFD, 0x01, 0x00, 0xFE, 0xFD, 0x01, 0x00, 0xBF, 0xFD, 0x01, 0x40, 0xBF, + 0xFD, 0x01, 0xC0, 0x3F, 0xFD, 0x01, 0xF4, 0x1F, 0xFD, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0x01, + 0xFD, 0xFF, 0x1B, 0x00, + // Unicode: [0x0045, E] + 0xFD, 0xFF, 0x7F, 0xFF, 0xFF, 0xDF, 0xBF, 0xAA, 0xF6, 0x07, 0x00, 0xFD, 0x01, 0x40, 0x7F, 0x00, + 0xD0, 0x1F, 0x00, 0xF4, 0xFF, 0x3F, 0xFD, 0xFF, 0x4F, 0xBF, 0xAA, 0xD2, 0x1F, 0x00, 0xF4, 0x07, + 0x00, 0xFD, 0x01, 0x40, 0x7F, 0x00, 0xD0, 0xBF, 0xAA, 0xF6, 0xFF, 0xFF, 0xFD, 0xFF, 0x3F, + // Unicode: [0x0046, F] + 0xFD, 0xFF, 0xBF, 0xFD, 0xFF, 0xBF, 0xFD, 0xAB, 0x6A, 0xFD, 0x01, 0x00, 0xFD, 0x01, 0x00, 0xFD, + 0x01, 0x00, 0xFD, 0x01, 0x00, 0xFD, 0xFF, 0x0B, 0xFD, 0xFF, 0x0B, 0xFD, 0xAA, 0x0A, 0xFD, 0x01, + 0x00, 0xFD, 0x01, 0x00, 0xFD, 0x01, 0x00, 0xFD, 0x01, 0x00, 0xFD, 0x01, 0x00, 0xFD, 0x01, 0x00, + 0xFD, 0x01, 0x00, + // Unicode: [0x0047, G] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xBF, 0x01, 0xE0, 0xFF, 0xFF, 0x7F, 0x40, 0xFF, 0x56, + 0xFD, 0x0F, 0xFD, 0x07, 0x00, 0xFE, 0xE2, 0x1F, 0x00, 0x40, 0x05, 0xFF, 0x00, 0x00, 0x00, 0xF0, + 0x0B, 0xA0, 0xAA, 0x6A, 0x7F, 0x00, 0xFF, 0xFF, 0xF7, 0x0B, 0xF0, 0xFF, 0x7F, 0xBF, 0x00, 0x00, + 0xF4, 0xE7, 0x1F, 0x00, 0x80, 0x3F, 0xFD, 0x07, 0x00, 0xFE, 0x42, 0xFF, 0x56, 0xF9, 0x0F, 0xE0, + 0xFF, 0xFF, 0x3F, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0xE4, 0xAF, 0x01, 0x00, + // Unicode: [0x0048, H] + 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, + 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0xFF, 0xFF, 0x7F, + 0xFD, 0xFF, 0xFF, 0x7F, 0xFD, 0xAB, 0xEA, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, + 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, 0xFD, 0x01, 0x40, 0x7F, + 0xFD, 0x01, 0x40, 0x7F, + // Unicode: [0x0049, I] + 0xFD, 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, + 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, 0x01, + // Unicode: [0x004A, J] + 0x00, 0x80, 0x3F, 0x00, 0xE0, 0x0F, 0x00, 0xF8, 0x03, 0x00, 0xFE, 0x00, 0x80, 0x3F, 0x00, 0xE0, + 0x0F, 0x00, 0xF8, 0x03, 0x00, 0xFE, 0x00, 0x80, 0x3F, 0x00, 0xE0, 0x0F, 0x00, 0xF8, 0x57, 0x00, + 0xFE, 0xBF, 0x80, 0xBF, 0x7F, 0xF4, 0xDB, 0xFF, 0xFF, 0xE1, 0xFF, 0x2F, 0x90, 0xBF, 0x01, + // Unicode: [0x004B, K] + 0xFD, 0x01, 0xE0, 0x5F, 0x7F, 0x00, 0xFE, 0xD2, 0x1F, 0xE0, 0x2F, 0xF4, 0x07, 0xFD, 0x02, 0xFD, + 0xD1, 0x3F, 0x40, 0x7F, 0xFC, 0x03, 0xD0, 0x9F, 0x7F, 0x00, 0xF4, 0xFF, 0x07, 0x00, 0xFD, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xD0, 0x9F, 0x7F, 0x00, 0xF4, 0xC7, 0x7F, 0x00, 0xFD, 0xD1, 0x7F, + 0x40, 0x7F, 0xD0, 0x3F, 0xD0, 0x1F, 0xE0, 0x2F, 0xF4, 0x07, 0xE0, 0x2F, 0xFD, 0x01, 0xE0, 0x2F, + // Unicode: [0x004C, L] + 0xFD, 0x01, 0xD0, 0x1F, 0x00, 0xFD, 0x01, 0xD0, 0x1F, 0x00, 0xFD, 0x01, 0xD0, 0x1F, 0x00, 0xFD, + 0x01, 0xD0, 0x1F, 0x00, 0xFD, 0x01, 0xD0, 0x1F, 0x00, 0xFD, 0x01, 0xD0, 0x1F, 0x00, 0xFD, 0x01, + 0xD0, 0x1F, 0x00, 0xFD, 0xAA, 0xDA, 0xFF, 0xFF, 0xFD, 0xFF, 0x0F, + // Unicode: [0x004D, M] + 0xFD, 0x03, 0x00, 0x40, 0xBF, 0xFD, 0x07, 0x00, 0xC0, 0xBF, 0xFD, 0x0B, 0x00, 0xD0, 0xBF, 0xFD, + 0x1F, 0x00, 0xE0, 0xBF, 0xFD, 0x2F, 0x00, 0xF4, 0xBF, 0xFD, 0x3F, 0x00, 0xF8, 0xBF, 0xFD, 0xBE, + 0x00, 0xFC, 0xBE, 0xFD, 0xFD, 0x00, 0xBD, 0xBE, 0xFD, 0xF9, 0x01, 0x7F, 0xBE, 0xFD, 0xF5, 0x43, + 0x2F, 0xBE, 0xFD, 0xF1, 0x87, 0x1F, 0xBE, 0xFD, 0xD1, 0xDB, 0x0F, 0xBE, 0xFD, 0xC1, 0xEF, 0x07, + 0xBE, 0xFD, 0x81, 0xFF, 0x03, 0xBE, 0xFD, 0x01, 0xFF, 0x02, 0xBE, 0xFD, 0x01, 0xFE, 0x01, 0xBE, + 0xFD, 0x01, 0xBD, 0x00, 0xBE, + // Unicode: [0x004E, N] + 0xFD, 0x02, 0x00, 0xBF, 0xFD, 0x07, 0x00, 0xBF, 0xFD, 0x0F, 0x00, 0xBF, 0xFD, 0x2F, 0x00, 0xBF, + 0xFD, 0x7F, 0x00, 0xBF, 0xFD, 0xFF, 0x00, 0xBF, 0xFD, 0xFD, 0x02, 0xBF, 0xFD, 0xF5, 0x07, 0xBF, + 0xFD, 0xE1, 0x0F, 0xBF, 0xFD, 0xC1, 0x2F, 0xBF, 0xFD, 0x41, 0x7F, 0xBF, 0xFD, 0x01, 0xFE, 0xBF, + 0xFD, 0x01, 0xFC, 0xBF, 0xFD, 0x01, 0xF4, 0xBF, 0xFD, 0x01, 0xE0, 0xBF, 0xFD, 0x01, 0xC0, 0xBF, + 0xFD, 0x01, 0x40, 0xBF, + // Unicode: [0x004F, O] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x40, 0xFF, 0x56, + 0xF9, 0x0F, 0xFC, 0x07, 0x00, 0xFD, 0xE2, 0x1F, 0x00, 0x80, 0x7F, 0xBF, 0x00, 0x00, 0xF4, 0xFB, + 0x0B, 0x00, 0x00, 0xBF, 0x7F, 0x00, 0x00, 0xF0, 0xFB, 0x0B, 0x00, 0x00, 0xBF, 0xBF, 0x00, 0x00, + 0xF4, 0xEB, 0x1F, 0x00, 0x80, 0x7F, 0xFC, 0x07, 0x00, 0xFD, 0x42, 0xFF, 0x46, 0xF9, 0x0F, 0xE0, + 0xFF, 0xFF, 0x7F, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0xE4, 0xBF, 0x01, 0x00, + // Unicode: [0x0050, P] + 0xFD, 0xFF, 0x1B, 0xD0, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xD2, 0x1F, 0x80, 0x7F, 0xFD, 0x01, + 0xF4, 0xD7, 0x1F, 0x40, 0x7F, 0xFD, 0x01, 0xF8, 0xD7, 0xBF, 0xFE, 0x2F, 0xFD, 0xFF, 0xBF, 0xD0, + 0xFF, 0xBF, 0x01, 0xFD, 0x01, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xFD, 0x01, 0x00, 0xD0, 0x1F, 0x00, + 0x00, 0xFD, 0x01, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x40, 0xFF, 0x56, + 0xF9, 0x0F, 0xFC, 0x07, 0x00, 0xFD, 0xE2, 0x1F, 0x00, 0x80, 0x7F, 0xBF, 0x00, 0x00, 0xF4, 0xFB, + 0x0B, 0x00, 0x00, 0xBF, 0x7F, 0x00, 0x00, 0xF0, 0xFB, 0x0B, 0x00, 0x00, 0xBF, 0xBF, 0x00, 0x00, + 0xF4, 0xE7, 0x1F, 0x00, 0x80, 0x3F, 0xFC, 0x07, 0x00, 0xFD, 0x42, 0xFF, 0x46, 0xF9, 0x0F, 0xE0, + 0xFF, 0xFF, 0x7F, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0xE4, 0xEF, 0x3F, 0x00, 0x00, 0x00, 0xF4, + 0x0F, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x80, 0xBF, + // Unicode: [0x0052, R] + 0xFD, 0xFF, 0x1B, 0xD0, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xD2, 0x1F, 0x80, 0x7F, 0xFD, 0x01, + 0xF0, 0xDB, 0x1F, 0x00, 0x7F, 0xFD, 0x01, 0xF8, 0xD7, 0xAF, 0xFA, 0x2F, 0xFD, 0xFF, 0xBF, 0xD0, + 0xFF, 0xFF, 0x01, 0xFD, 0xF1, 0x0F, 0xD0, 0x1F, 0xFD, 0x02, 0xFD, 0x81, 0x7F, 0xD0, 0x1F, 0xF4, + 0x0B, 0xFD, 0x01, 0xFE, 0xD1, 0x1F, 0xC0, 0x3F, 0xFD, 0x01, 0xF8, 0x07, + // Unicode: [0x0053, S] + 0x40, 0xFE, 0x06, 0xD0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x4F, 0xBF, 0x80, 0x7F, 0xFE, 0x00, 0xA9, + 0xFA, 0x07, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xFE, 0x6F, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0xA4, 0xFF, + 0x03, 0x00, 0xE4, 0x2F, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0xF8, 0xF7, 0x0B, 0xF4, 0xCB, 0xFF, 0xFF, + 0x1F, 0xFC, 0xFF, 0x1F, 0x40, 0xFE, 0x0A, 0x00, + // Unicode: [0x0054, T] + 0xFD, 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, 0xBF, 0xA8, 0xFE, 0xAB, 0x06, 0x80, 0x3F, 0x00, 0x00, 0xF8, + 0x03, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x03, 0x00, + 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x80, 0x3F, + 0x00, 0x00, 0xF8, 0x03, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x03, 0x00, + // Unicode: [0x0055, U] + 0xFD, 0x01, 0x80, 0x6F, 0x7F, 0x00, 0xE0, 0xDB, 0x1F, 0x00, 0xF8, 0xF6, 0x07, 0x00, 0xBE, 0xFD, + 0x01, 0x80, 0x6F, 0x7F, 0x00, 0xE0, 0xDB, 0x1F, 0x00, 0xF8, 0xF6, 0x07, 0x00, 0xBE, 0xFD, 0x01, + 0x80, 0x6F, 0x7F, 0x00, 0xE0, 0xDB, 0x1F, 0x00, 0xF8, 0xF6, 0x07, 0x00, 0xBF, 0xFC, 0x02, 0xD0, + 0x1F, 0xFE, 0x56, 0xFE, 0x03, 0xFF, 0xFF, 0x7F, 0x40, 0xFE, 0xFF, 0x07, 0x00, 0xF9, 0x1B, 0x00, + // Unicode: [0x0056, V] + 0xFD, 0x01, 0x00, 0xF8, 0xC7, 0x2F, 0x00, 0xC0, 0x3F, 0xF8, 0x03, 0x00, 0xFD, 0x41, 0x7F, 0x00, + 0xE0, 0x0F, 0xF0, 0x0B, 0x00, 0xBF, 0x00, 0xFE, 0x00, 0xF4, 0x07, 0xD0, 0x1F, 0x80, 0x3F, 0x00, + 0xF8, 0x02, 0xFC, 0x02, 0x40, 0x3F, 0xD0, 0x1F, 0x00, 0xF0, 0x07, 0xBE, 0x00, 0x00, 0xBE, 0xF0, + 0x07, 0x00, 0xD0, 0x5F, 0x3F, 0x00, 0x00, 0xFC, 0xFA, 0x02, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, + 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xD0, 0x7F, 0x00, 0x00, + // Unicode: [0x0057, W] + 0xFD, 0x01, 0xD0, 0x3F, 0x00, 0xFC, 0xF3, 0x0B, 0x40, 0xFF, 0x01, 0xF0, 0x8B, 0x3F, 0x00, 0xFE, + 0x07, 0xD0, 0x1F, 0xFD, 0x00, 0xFC, 0x2F, 0x80, 0x3F, 0xF4, 0x07, 0xF4, 0xFF, 0x00, 0xBE, 0xC0, + 0x2F, 0xE0, 0xFB, 0x07, 0xFC, 0x01, 0xBE, 0x80, 0x9F, 0x1F, 0xF4, 0x07, 0xF4, 0x03, 0x3F, 0xBE, + 0xD0, 0x0F, 0xC0, 0x1F, 0xBD, 0xF4, 0x83, 0x2F, 0x00, 0xBE, 0xF8, 0xC1, 0x1F, 0x7F, 0x00, 0xF8, + 0xF2, 0x07, 0xBE, 0xFD, 0x00, 0xD0, 0xDF, 0x0F, 0xF4, 0xF6, 0x02, 0x00, 0xBF, 0x2F, 0xD0, 0xEF, + 0x07, 0x00, 0xF8, 0x7F, 0x00, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFF, + 0x02, 0xD0, 0xBF, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xFF, 0x01, 0x00, + // Unicode: [0x0058, X] + 0xFE, 0x01, 0xC0, 0x2F, 0xFF, 0x00, 0xF8, 0x43, 0xBF, 0x40, 0x7F, 0x80, 0x7F, 0xF0, 0x0B, 0xC0, + 0x3F, 0xFE, 0x01, 0xD0, 0xEF, 0x2F, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xF8, + 0x0B, 0x00, 0x40, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xFD, 0xFE, 0x02, 0xC0, 0x2F, 0xFE, + 0x01, 0xF8, 0x03, 0xFF, 0x40, 0x7F, 0x40, 0xBF, 0xF0, 0x0F, 0x80, 0x7F, 0xFE, 0x01, 0xD0, 0x3F, + // Unicode: [0x0059, Y] + 0xFD, 0x01, 0x80, 0x7F, 0xFC, 0x03, 0xC0, 0x2F, 0xF4, 0x07, 0xE0, 0x1F, 0xF0, 0x0F, 0xF0, 0x0B, + 0xD0, 0x1F, 0xF4, 0x07, 0x80, 0x3F, 0xFC, 0x02, 0x40, 0x7F, 0xFD, 0x00, 0x00, 0xFE, 0xBF, 0x00, + 0x00, 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xE0, 0x0B, 0x00, + 0x00, 0xE0, 0x0B, 0x00, 0x00, 0xE0, 0x0B, 0x00, 0x00, 0xE0, 0x0B, 0x00, 0x00, 0xE0, 0x0B, 0x00, + 0x00, 0xE0, 0x0B, 0x00, + // Unicode: [0x005A, Z] + 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0x40, 0xBF, 0x00, 0xC0, 0x3F, 0x00, + 0xE0, 0x1F, 0x00, 0xF4, 0x0B, 0x00, 0xFC, 0x02, 0x00, 0xFE, 0x01, 0x40, 0x7F, 0x00, 0xD0, 0x2F, + 0x00, 0xE0, 0x0F, 0x00, 0xF8, 0x07, 0x00, 0xFD, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, + // Unicode: [0x005B, bracketleft] + 0xAA, 0xAA, 0xFF, 0xEB, 0xFF, 0xFA, 0x02, 0xBE, 0x80, 0x2F, 0xE0, 0x0B, 0xF8, 0x02, 0xBE, 0x80, + 0x2F, 0xE0, 0x0B, 0xF8, 0x02, 0xBE, 0x80, 0x2F, 0xE0, 0x0B, 0xF8, 0x02, 0xBE, 0x80, 0x2F, 0xE0, + 0x0B, 0xF8, 0x02, 0xBE, 0x80, 0x2F, 0xE0, 0x0B, 0xF8, 0x02, 0xBE, 0x80, 0xFF, 0xEB, 0xFF, 0xFA, + 0xBF, + // Unicode: [0x005C, backslash] + 0xFE, 0x00, 0x40, 0x3F, 0x00, 0xC0, 0x1F, 0x00, 0xE0, 0x0B, 0x00, 0xF8, 0x03, 0x00, 0xFD, 0x00, + 0x00, 0x7F, 0x00, 0x80, 0x2F, 0x00, 0xE0, 0x0F, 0x00, 0xF4, 0x03, 0x00, 0xFC, 0x01, 0x00, 0xBE, + 0x00, 0x40, 0x3F, 0x00, 0xD0, 0x0F, 0x00, 0xF0, 0x07, 0x00, 0xF8, 0x02, 0x00, 0xFD, 0x00, 0x40, + 0x7F, 0x00, 0xC0, 0x1F, 0x00, 0xE0, 0x0B, 0x00, 0xF4, 0x03, 0x00, 0xFD, 0x01, 0x00, 0x7F, 0x00, + 0x80, 0x2F, 0x00, 0xD0, 0x0F, 0x00, 0xF4, 0x07, 0x00, 0xFC, 0x01, 0x00, 0xBE, + // Unicode: [0x005D, bracketright] + 0xA9, 0x6A, 0xFF, 0xDF, 0xFF, 0x03, 0xFD, 0x40, 0x3F, 0xD0, 0x0F, 0xF4, 0x03, 0xFD, 0x40, 0x3F, + 0xD0, 0x0F, 0xF4, 0x03, 0xFD, 0x40, 0x3F, 0xD0, 0x0F, 0xF4, 0x03, 0xFD, 0x40, 0x3F, 0xD0, 0x0F, + 0xF4, 0x03, 0xFD, 0x40, 0x3F, 0xD0, 0x0F, 0xF4, 0x03, 0xFD, 0x40, 0x7F, 0xFF, 0xDF, 0xFF, 0xF7, + 0xFF, + // Unicode: [0x005E, asciicircum] + 0x00, 0xA0, 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, + 0xFF, 0x3F, 0x00, 0xD0, 0xDF, 0x1F, 0x00, 0xFC, 0xE2, 0x0F, 0x40, 0x7F, 0xF4, 0x07, 0xE0, 0x0F, + 0xF8, 0x02, 0xFD, 0x01, 0xFD, 0x81, 0x3F, 0x00, 0xBF, 0xF0, 0x0B, 0x80, 0x3F, 0xFE, 0x00, 0xC0, + 0xEF, 0x2F, 0x00, 0xE0, 0x0F, + // Unicode: [0x005F, underscore] + 0x54, 0x55, 0x55, 0x15, 0xFD, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0x7F, + // Unicode: [0x0060, grave] + 0x0A, 0xE0, 0x0B, 0xFE, 0x47, 0xFE, 0x00, 0x0E, + // Unicode: [0x0061, a] + 0x40, 0xFE, 0xD2, 0x1F, 0xF8, 0xFF, 0xF7, 0x87, 0xFF, 0xFF, 0xFF, 0xF5, 0x1F, 0xF4, 0x7F, 0xFE, + 0x01, 0xF0, 0xDF, 0x2F, 0x00, 0xF8, 0xF7, 0x07, 0x00, 0xFD, 0xFD, 0x01, 0x40, 0x7F, 0xBF, 0x00, + 0xD0, 0x9F, 0x3F, 0x00, 0xFC, 0xD7, 0x7F, 0x80, 0xFF, 0xE1, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xEF, + 0x1F, 0x90, 0xBF, 0xF4, 0x07, + // Unicode: [0x0062, b] + 0xA9, 0x00, 0x00, 0x40, 0x7F, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0xFD, + 0x01, 0x00, 0x40, 0x7F, 0xF8, 0x1B, 0xD0, 0xDF, 0xFF, 0x2F, 0xF4, 0xFF, 0xFF, 0x2F, 0xFD, 0x1F, + 0xF4, 0x5F, 0xFF, 0x00, 0xF4, 0xDB, 0x1F, 0x00, 0xF8, 0xF7, 0x07, 0x00, 0xFE, 0xFD, 0x01, 0x80, + 0x7F, 0x7F, 0x00, 0xE0, 0xDF, 0x3F, 0x00, 0xFD, 0xF6, 0x7F, 0xD0, 0x7F, 0xFD, 0xFF, 0xFF, 0x4B, + 0x7F, 0xFF, 0xBF, 0xD0, 0x1F, 0xFE, 0x06, 0x00, + // Unicode: [0x0063, c] + 0x40, 0xFE, 0x06, 0x80, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x4F, 0xBF, 0x81, 0xBF, 0xFE, 0x00, 0xA8, + 0xFE, 0x02, 0x00, 0xF0, 0x07, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xBF, 0x00, 0x00, 0xF8, 0x03, 0xA0, + 0xDA, 0x6F, 0xE0, 0x2F, 0xFE, 0xFF, 0x3F, 0xE0, 0xFF, 0x7F, 0x00, 0xF9, 0x1B, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x40, 0x05, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x40, 0x7F, 0x00, + 0x00, 0xD0, 0x1F, 0x90, 0x6F, 0xF4, 0x07, 0xFE, 0xFF, 0xFD, 0xE1, 0xFF, 0xFF, 0x7F, 0xFD, 0x07, + 0xFD, 0x9F, 0x7F, 0x00, 0xFC, 0xF7, 0x0B, 0x00, 0xFE, 0xFD, 0x01, 0x40, 0x7F, 0x7F, 0x00, 0xD0, + 0xDF, 0x2F, 0x00, 0xF4, 0xE7, 0x0F, 0x00, 0xFF, 0xF5, 0x1F, 0xE0, 0x7F, 0xF8, 0xFF, 0xFF, 0x1F, + 0xF8, 0xFF, 0xFB, 0x07, 0xE4, 0x2F, 0xFD, 0x01, + // Unicode: [0x0065, e] + 0x40, 0xFE, 0x06, 0x00, 0xFE, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xD1, 0x2F, 0xD0, 0x3F, 0xBE, 0x00, + 0xF4, 0xF7, 0x5B, 0x55, 0x7F, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xBF, 0x7F, 0x00, 0x00, 0xE0, + 0x0F, 0x40, 0x2A, 0xFD, 0x02, 0xFD, 0x82, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0x7F, 0x00, 0xE4, 0xAF, + 0x00, + // Unicode: [0x0066, f] + 0x00, 0xF9, 0x80, 0xFF, 0xE0, 0xFF, 0xE0, 0x1F, 0xF0, 0x0B, 0xFD, 0xFF, 0xFD, 0xFF, 0xFD, 0xFF, + 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, + 0xF0, 0x0B, 0xF0, 0x0B, 0xF0, 0x0B, + // Unicode: [0x0067, g] + 0x40, 0xFE, 0xD2, 0x1F, 0xF8, 0xFF, 0xFB, 0x87, 0xFF, 0xFF, 0xFF, 0xF5, 0x1F, 0xE0, 0x7F, 0xFE, + 0x00, 0xF0, 0xDF, 0x2F, 0x00, 0xF4, 0xF7, 0x07, 0x00, 0xFD, 0xFD, 0x01, 0x40, 0x7F, 0xBF, 0x00, + 0xE0, 0x9F, 0x7F, 0x00, 0xFC, 0xD7, 0x7F, 0xD0, 0xFF, 0xE1, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xDF, + 0x1F, 0x90, 0x6F, 0xF4, 0x07, 0x00, 0x00, 0xFD, 0x55, 0x01, 0x40, 0x3F, 0xFD, 0x01, 0xF0, 0x0F, + 0xFF, 0x41, 0xFE, 0x42, 0xFF, 0xFF, 0x3F, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0xFA, 0x1B, 0x00, + // Unicode: [0x0068, h] + 0x54, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xFD, 0x01, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xFD, 0x01, + 0x00, 0xD0, 0x5F, 0xFE, 0x06, 0xFD, 0xFE, 0xFF, 0xD1, 0xFF, 0xFF, 0x3F, 0xFD, 0x0B, 0xF9, 0xDB, + 0x2F, 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, + 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, 0xFE, 0xFD, + 0x01, 0xE0, 0x0F, + // Unicode: [0x0069, i] + 0xB8, 0xF8, 0xEB, 0x2F, 0x2E, 0x00, 0xF4, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, + 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x1F, + // Unicode: [0x006A, j] + 0x80, 0x0B, 0xF8, 0x0B, 0xFE, 0x02, 0x2E, 0x00, 0x00, 0xF4, 0x07, 0xFD, 0x41, 0x7F, 0xD0, 0x1F, + 0xF4, 0x07, 0xFD, 0x41, 0x7F, 0xD0, 0x1F, 0xF4, 0x07, 0xFD, 0x41, 0x7F, 0xD0, 0x1F, 0xF4, 0x07, + 0xFD, 0x41, 0x7F, 0xD0, 0x1F, 0xF4, 0x07, 0xFE, 0xF8, 0x3F, 0xFE, 0x87, 0x6F, 0x00, + // Unicode: [0x006B, k] + 0x54, 0x00, 0x00, 0xF4, 0x07, 0x00, 0xD0, 0x1F, 0x00, 0x40, 0x7F, 0x00, 0x00, 0xFD, 0x01, 0x00, + 0xF4, 0x07, 0xF8, 0xDF, 0x1F, 0xF4, 0x5F, 0x7F, 0xF0, 0x1F, 0xFD, 0xE1, 0x1F, 0xF4, 0xE7, 0x2F, + 0xD0, 0xEF, 0x2F, 0x40, 0xFF, 0x2F, 0x00, 0xFD, 0xBF, 0x00, 0xF4, 0xFB, 0x0B, 0xD0, 0x9F, 0xBF, + 0x40, 0x7F, 0xF8, 0x07, 0xFD, 0xC1, 0x7F, 0xF4, 0x07, 0xFD, 0xD7, 0x1F, 0xD0, 0x3F, + // Unicode: [0x006C, l] + 0x54, 0xF4, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, + 0xF5, 0xD7, 0x5F, 0x7F, 0xFD, 0xF5, 0xD7, 0x1F, + // Unicode: [0x006D, m] + 0xFD, 0xE5, 0x6F, 0x40, 0xBE, 0x01, 0xFD, 0xFE, 0xFF, 0xF1, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0x2F, 0xFD, 0x07, 0xF8, 0x7F, 0xD0, 0x7F, 0xFD, 0x02, 0xF0, 0x1F, 0x40, 0x7F, 0xFD, 0x01, + 0xE0, 0x0F, 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0x0F, 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0x0F, 0x00, 0xBF, + 0xFD, 0x01, 0xE0, 0x0F, 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0x0F, 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0x0F, + 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0x0F, 0x00, 0xBF, 0xFD, 0x01, 0xE0, 0x0F, 0x00, 0xBF, 0xFD, 0x01, + 0xE0, 0x0F, 0x00, 0xBF, + // Unicode: [0x006E, n] + 0xFD, 0xE5, 0x2F, 0xD0, 0xEF, 0xFF, 0x1F, 0xFD, 0xBF, 0xFF, 0xD3, 0x7F, 0x80, 0xBF, 0xFD, 0x02, + 0xF0, 0xDB, 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, + 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, 0xFE, 0xFD, 0x01, 0xE0, 0xDF, 0x1F, 0x00, + 0xFE, + // Unicode: [0x006F, o] + 0x40, 0xFA, 0x0A, 0x00, 0xFE, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xD2, 0x7F, 0xD0, 0x7F, 0xFE, 0x00, + 0xF4, 0xFB, 0x0B, 0x00, 0xFE, 0x7F, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0xFE, 0xBF, 0x00, 0xE0, 0xEF, + 0x0F, 0x40, 0xBF, 0xFD, 0x07, 0xFD, 0x87, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0x7F, 0x00, 0xE4, 0xAF, + 0x00, + // Unicode: [0x0070, p] + 0xFD, 0xE1, 0x6F, 0x40, 0x7F, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0xBF, 0xF4, 0x7F, 0xD0, 0x7F, 0xFD, + 0x03, 0xD0, 0x6F, 0x7F, 0x00, 0xE0, 0xDF, 0x1F, 0x00, 0xF8, 0xF7, 0x07, 0x00, 0xFE, 0xFD, 0x01, + 0x80, 0x7F, 0xFF, 0x00, 0xF4, 0xDB, 0xFF, 0x41, 0xFF, 0xF5, 0xFF, 0xFF, 0x2F, 0xFD, 0xFD, 0xFF, + 0x42, 0x7F, 0xF8, 0x1B, 0xD0, 0x1F, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x40, + 0x7F, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x40, 0xFE, 0xD2, 0x1F, 0xF8, 0xFF, 0xFB, 0x87, 0xFF, 0xFF, 0xFF, 0xF5, 0x1F, 0xF4, 0x7F, 0xFE, + 0x01, 0xF0, 0xDF, 0x2F, 0x00, 0xF8, 0xF7, 0x07, 0x00, 0xFD, 0xFD, 0x01, 0x40, 0x7F, 0xBF, 0x00, + 0xE0, 0x9F, 0x7F, 0x00, 0xFC, 0xD7, 0x7F, 0xD0, 0xFF, 0xE1, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xDF, + 0x1F, 0x90, 0xBF, 0xF4, 0x07, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x40, 0x7F, 0x00, 0x00, 0xD0, 0x1F, + 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x40, 0x7F, 0x00, 0x00, 0xD0, 0x1F, + // Unicode: [0x0072, r] + 0xFD, 0xE1, 0xF5, 0xF7, 0xD7, 0xFF, 0x5F, 0xFF, 0x6B, 0xFD, 0x07, 0xF4, 0x07, 0xD0, 0x1F, 0x40, + 0x7F, 0x00, 0xFD, 0x01, 0xF4, 0x07, 0xD0, 0x1F, 0x40, 0x7F, 0x00, 0xFD, 0x01, 0xF4, 0x07, 0x00, + // Unicode: [0x0073, s] + 0x90, 0xBF, 0x01, 0xF8, 0xFF, 0x0F, 0xFD, 0xFB, 0x2F, 0xFE, 0x40, 0x3F, 0xFE, 0x00, 0x2A, 0xFD, + 0x17, 0x00, 0xF8, 0xFF, 0x06, 0x90, 0xFF, 0x1F, 0x00, 0xE4, 0x3F, 0x6A, 0x00, 0x7F, 0xFE, 0x40, + 0x7F, 0xFD, 0xEB, 0x3F, 0xF4, 0xFF, 0x1F, 0x80, 0xFF, 0x02, + // Unicode: [0x0074, t] + 0xE0, 0x0B, 0x80, 0x2F, 0x00, 0xBE, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0xF7, 0xFF, 0x0B, 0xBE, 0x00, + 0xF8, 0x02, 0xE0, 0x0B, 0x80, 0x2F, 0x00, 0xBE, 0x00, 0xF8, 0x02, 0xE0, 0x0B, 0x80, 0x3F, 0x00, + 0xFD, 0x3F, 0xF0, 0xFF, 0x00, 0xFE, 0x03, + // Unicode: [0x0075, u] + 0xFD, 0x00, 0xE0, 0xDB, 0x0F, 0x00, 0xBE, 0xFD, 0x00, 0xE0, 0xDB, 0x0F, 0x00, 0xBE, 0xFD, 0x00, + 0xE0, 0xDB, 0x0F, 0x00, 0xBE, 0xFD, 0x00, 0xE0, 0xDB, 0x0F, 0x00, 0xBE, 0xFD, 0x01, 0xE0, 0xDB, + 0x1F, 0x00, 0xBF, 0xFC, 0x07, 0xF8, 0x8B, 0xFF, 0xFF, 0xBF, 0xE0, 0xFF, 0xEF, 0x0B, 0xE4, 0x2F, + 0xBE, + // Unicode: [0x0076, v] + 0xFE, 0x00, 0xC0, 0x6F, 0x7F, 0x00, 0xF4, 0xC7, 0x2F, 0x00, 0xBE, 0xD0, 0x0F, 0xC0, 0x1F, 0xF0, + 0x07, 0xF4, 0x03, 0xF8, 0x02, 0xBE, 0x00, 0xFD, 0xC0, 0x1F, 0x00, 0x7F, 0xF4, 0x03, 0x80, 0x2F, + 0xBE, 0x00, 0xD0, 0xDF, 0x1F, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0xFD, 0x0F, + 0x00, 0x00, 0xFF, 0x02, 0x00, + // Unicode: [0x0077, w] + 0xBE, 0x00, 0xFD, 0x02, 0xF8, 0xF6, 0x03, 0xF8, 0x0F, 0xE0, 0xC7, 0x1F, 0xE0, 0x3F, 0xC0, 0x1F, + 0xBE, 0xC0, 0xFF, 0x41, 0x3F, 0xF8, 0x42, 0xFF, 0x0B, 0xBD, 0xD0, 0x0F, 0x7E, 0x3F, 0xF8, 0x01, + 0x7F, 0xF8, 0xFC, 0xF0, 0x03, 0xF8, 0xF1, 0xE2, 0xC7, 0x0B, 0xD0, 0xDB, 0x47, 0x6F, 0x1F, 0x00, + 0xBF, 0x1F, 0xFC, 0x7E, 0x00, 0xF8, 0x3F, 0xE0, 0xFF, 0x00, 0xD0, 0xBF, 0x80, 0xFF, 0x02, 0x40, + 0xFF, 0x01, 0xFD, 0x07, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0x00, + // Unicode: [0x0078, x] + 0xFD, 0x01, 0xF8, 0xE3, 0x0F, 0xF4, 0x47, 0xBF, 0xF0, 0x0B, 0xF8, 0xE7, 0x0F, 0x80, 0xFF, 0x1F, + 0x00, 0xFD, 0x2F, 0x00, 0xE0, 0x3F, 0x00, 0x80, 0xFF, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xFE, 0x7F, + 0x00, 0xFD, 0xFC, 0x03, 0xFC, 0xD1, 0x2F, 0xF8, 0x03, 0xFE, 0xF5, 0x07, 0xF0, 0x0F, + // Unicode: [0x0079, y] + 0xFE, 0x01, 0xC0, 0x6F, 0xBF, 0x00, 0xF4, 0xC7, 0x3F, 0x00, 0xFE, 0xD0, 0x1F, 0xC0, 0x2F, 0xF0, + 0x0B, 0xF4, 0x03, 0xF8, 0x03, 0xBE, 0x00, 0xFD, 0xC1, 0x1F, 0x00, 0xBF, 0xF4, 0x03, 0x40, 0x3F, + 0xBF, 0x00, 0xC0, 0xEF, 0x0F, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFC, 0x0F, + 0x00, 0x00, 0xFD, 0x01, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF0, 0x0B, 0x00, 0x00, 0xFD, 0x01, 0x00, + 0xC0, 0x2F, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xC0, 0x2F, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x40, 0xBF, 0x00, 0xFD, 0x02, 0xF0, 0x0F, 0x80, + 0x7F, 0x00, 0xFD, 0x02, 0xF0, 0x0B, 0x80, 0x3F, 0x00, 0xFE, 0x01, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, + // Unicode: [0x007B, braceleft] + 0x00, 0xF9, 0x02, 0xFD, 0x0B, 0xFC, 0x2F, 0xF4, 0x07, 0xD0, 0x0F, 0x40, 0x3F, 0x00, 0xFC, 0x01, + 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7F, 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xF8, 0x0F, 0xF4, 0x1B, 0xD0, + 0x6F, 0x00, 0xFE, 0x03, 0xC0, 0x1F, 0x00, 0x7F, 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, + 0x7F, 0x00, 0xFD, 0x00, 0xF4, 0x03, 0xD0, 0x1F, 0x00, 0xFF, 0x0B, 0xF4, 0x2F, 0x40, 0xBE, + // Unicode: [0x007C, bar] + 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, + 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, + // Unicode: [0x007D, braceright] + 0xBF, 0x01, 0xFF, 0x07, 0xFF, 0x0B, 0xE0, 0x0F, 0xD0, 0x0F, 0xD0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0B, + 0xE0, 0x0B, 0xE0, 0x0B, 0xE0, 0x0B, 0xE0, 0x0B, 0xD0, 0x6F, 0x40, 0xFF, 0x40, 0xFF, 0xD0, 0x6F, + 0xE0, 0x0B, 0xE0, 0x0B, 0xE0, 0x0B, 0xE0, 0x0B, 0xE0, 0x0B, 0xE0, 0x0F, 0xD0, 0x0F, 0xD0, 0x0F, + 0xE0, 0x0F, 0xFF, 0x0B, 0xFF, 0x07, 0xBF, 0x01, + // Unicode: [0x007E, asciitilde] + 0xE0, 0x1B, 0xE0, 0xE3, 0xFF, 0xD6, 0xDB, 0xFF, 0xFF, 0xDF, 0x5F, 0xFE, 0x2F, 0x1F, 0x90, 0x1F, + 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_25_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_25_2bpp_4.cpp new file mode 100644 index 00000000..18228869 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_25_2bpp_4.cpp @@ -0,0 +1,7 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_25_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0xBD, 0xE0, 0x47, 0x2F, 0xFE, 0xF5, 0x8B, 0x7F, 0xFE, 0xF5, 0x8B, 0x7F, 0xBD, 0xE0, 0x46, 0x2F +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_30_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_30_2bpp_0.cpp new file mode 100644 index 00000000..e43124b7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_30_2bpp_0.cpp @@ -0,0 +1,604 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_30_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xF8, 0x87, 0x7F, 0xF8, 0x87, 0x7F, 0xF8, + 0x83, 0x3F, 0xF8, 0x83, 0x3F, 0xA4, 0x02, 0x00, 0xE4, 0xC2, 0xBF, 0xFD, 0xCF, 0xBF, 0xF4, 0x02, + // Unicode: [0x0022, quotedbl] + 0x55, 0x54, 0xFD, 0xE2, 0xEB, 0x8B, 0xAF, 0x2F, 0xBE, 0x7E, 0xF8, 0xFA, 0xE1, 0xEB, 0x47, 0x1F, + // Unicode: [0x0023, numbersign] + 0x00, 0x00, 0xA8, 0x01, 0x90, 0x0A, 0x00, 0x00, 0xD0, 0x2F, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFD, + 0x02, 0xF0, 0x0F, 0x00, 0x00, 0xE0, 0x1F, 0x40, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xF4, 0x0B, + 0x00, 0x00, 0xF0, 0x0F, 0x80, 0x7F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xA9, 0xFE, 0xAB, 0xFA, 0xBF, + 0x2A, 0x00, 0xC0, 0x3F, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFD, 0x02, 0xF0, 0x0F, 0x00, 0x00, 0xE0, + 0x1F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xF4, 0x0B, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xEA, + 0xBF, 0xAA, 0xFF, 0xAB, 0x06, 0x00, 0xFC, 0x03, 0xD0, 0x2F, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0xFE, + 0x01, 0x00, 0x00, 0xFD, 0x02, 0xE0, 0x0F, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0xFE, 0x01, 0xF4, 0x0B, 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x40, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xF9, 0xAF, 0x00, + 0x80, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x1F, 0xF8, 0xAF, 0xFB, 0x3F, 0xFC, 0x87, 0xD7, 0x7F, + 0xFD, 0x83, 0xC7, 0xBF, 0xFD, 0x83, 0x07, 0x00, 0xFD, 0x8B, 0x07, 0x00, 0xFC, 0xAF, 0x07, 0x00, + 0xF4, 0xFF, 0x1B, 0x00, 0xD0, 0xFF, 0xFF, 0x06, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0x80, 0xFF, 0x7F, + 0x00, 0x80, 0xE7, 0xBF, 0x00, 0x80, 0x87, 0xFF, 0xA9, 0x82, 0x47, 0xFF, 0xFD, 0x87, 0x87, 0xFF, + 0xFC, 0x9F, 0xD7, 0xBF, 0xF8, 0xFF, 0xFF, 0x3F, 0xE0, 0xFF, 0xFF, 0x1F, 0x40, 0xFF, 0xFF, 0x02, + 0x00, 0xD4, 0x1B, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + // Unicode: [0x0025, percent] + 0x90, 0x6F, 0x00, 0xC0, 0x3F, 0x00, 0xFE, 0xBF, 0x00, 0xF8, 0x0B, 0xD0, 0xAF, 0x7F, 0x00, 0xFF, + 0x00, 0xF8, 0x81, 0x2F, 0xE0, 0x1F, 0x00, 0x7F, 0xD0, 0x0B, 0xFD, 0x02, 0x80, 0x1F, 0xF8, 0x82, + 0x7F, 0x00, 0xD0, 0xAF, 0x7F, 0xF4, 0x0B, 0x00, 0xE0, 0xFF, 0x0B, 0xFF, 0x01, 0x00, 0xD0, 0x6F, + 0xD0, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0x0F, 0xF9, 0x06, 0x00, 0x00, 0xFE, 0xE1, 0xFF, 0x0B, 0x00, 0xD0, 0x2F, 0xFD, 0xFA, + 0x07, 0x00, 0xFC, 0x87, 0x2F, 0xF8, 0x02, 0x40, 0xBF, 0xE0, 0x07, 0xBD, 0x00, 0xF0, 0x0F, 0xF8, + 0x41, 0x2F, 0x00, 0xFE, 0x02, 0xBE, 0xE0, 0x0B, 0xC0, 0x3F, 0x40, 0xBF, 0xFE, 0x01, 0xF8, 0x07, + 0x80, 0xFF, 0x2F, 0x40, 0xFF, 0x00, 0x40, 0xBE, 0x01, + // Unicode: [0x0026, ampersand] + 0x00, 0xA0, 0xBF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0xF8, 0x5F, 0xFE, 0x03, 0x00, 0x80, 0x7F, 0xC0, 0x3F, 0x00, 0x00, 0xF8, 0x07, 0x54, 0x01, + 0x00, 0x80, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, + 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0xFF, 0xC1, 0xFF, 0xF5, 0x2F, + 0xF8, 0x0B, 0xFE, 0x03, 0xFD, 0xDB, 0x7F, 0xE0, 0x1F, 0x40, 0xFF, 0xFF, 0x02, 0xFF, 0x01, 0xD0, + 0xFF, 0x0F, 0xF0, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xFE, 0x07, 0x80, 0xFF, 0x0F, 0xD0, 0xFF, 0xAA, + 0xFF, 0xFF, 0x03, 0xF8, 0xFF, 0xFF, 0xEF, 0xFF, 0x00, 0xFE, 0xFF, 0x7F, 0xF4, 0x2F, 0x00, 0xF9, + 0x6F, 0x00, 0xFD, 0x0B, + // Unicode: [0x0027, quotesingle] + 0x55, 0xBF, 0xBE, 0xBE, 0x7E, 0x7E, 0x7E, + // Unicode: [0x0028, parenleft] + 0x00, 0xE0, 0x2F, 0x00, 0xFE, 0x07, 0xD0, 0x7F, 0x00, 0xFC, 0x07, 0x80, 0xBF, 0x00, 0xF4, 0x1F, + 0x00, 0xFE, 0x02, 0xC0, 0x7F, 0x00, 0xF4, 0x0F, 0x00, 0xFE, 0x02, 0xC0, 0x7F, 0x00, 0xF4, 0x0F, + 0x00, 0xFD, 0x02, 0x80, 0xBF, 0x00, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0x00, 0xFE, 0x01, 0x80, 0x7F, + 0x00, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0x00, 0xFE, 0x01, 0x40, 0xBF, 0x00, 0xD0, 0x2F, 0x00, 0xF0, + 0x0F, 0x00, 0xFC, 0x07, 0x00, 0xFE, 0x02, 0x40, 0xFF, 0x00, 0xC0, 0x7F, 0x00, 0xD0, 0x3F, 0x00, + 0xF0, 0x2F, 0x00, 0xF4, 0x0F, 0x00, 0xF8, 0x0B, 0x00, 0xFC, 0x0B, 0x00, 0xFD, 0x07, + // Unicode: [0x0029, parenright] + 0xFD, 0x06, 0x00, 0xF8, 0x0F, 0x00, 0xE0, 0x3F, 0x00, 0xC0, 0xBF, 0x00, 0x40, 0xFF, 0x01, 0x00, + 0xFE, 0x02, 0x00, 0xFD, 0x07, 0x00, 0xF8, 0x0B, 0x00, 0xF4, 0x0F, 0x00, 0xF0, 0x1F, 0x00, 0xE0, + 0x2F, 0x00, 0xD0, 0x2F, 0x00, 0xD0, 0x3F, 0x00, 0xC0, 0x3F, 0x00, 0xC0, 0x7F, 0x00, 0x80, 0x7F, + 0x00, 0x80, 0x7F, 0x00, 0x80, 0x7F, 0x00, 0x80, 0x7F, 0x00, 0x80, 0x7F, 0x00, 0xC0, 0x3F, 0x00, + 0xC0, 0x3F, 0x00, 0xD0, 0x3F, 0x00, 0xE0, 0x2F, 0x00, 0xE0, 0x1F, 0x00, 0xF0, 0x0F, 0x00, 0xF4, + 0x0B, 0x00, 0xFC, 0x07, 0x00, 0xFD, 0x03, 0x00, 0xFF, 0x01, 0x80, 0xFF, 0x00, 0xD0, 0x7F, 0x00, + 0xF0, 0x2F, 0x00, 0xFC, 0x0B, 0x00, + // Unicode: [0x002A, asterisk] + 0x00, 0x15, 0x00, 0x00, 0x7E, 0x00, 0x18, 0x3D, 0x14, 0x7D, 0x3D, 0x2E, 0xFE, 0xBE, 0x7F, 0xE4, + 0xFF, 0x1B, 0x90, 0xFF, 0x01, 0xFD, 0xFF, 0x2F, 0xFD, 0xAD, 0x3F, 0x2C, 0x3D, 0x1D, 0x04, 0x3E, + 0x04, 0x00, 0x7E, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x50, 0x05, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, + 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0xA9, 0xFA, 0xAF, 0xAA, 0xFE, 0xFF, 0xFF, 0xBF, + 0xFE, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xBF, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, + 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x0F, 0x00, + // Unicode: [0x002C, comma] + 0x50, 0x15, 0xF8, 0x07, 0xFF, 0xD0, 0x1F, 0xF8, 0x03, 0xBE, 0xC0, 0x1F, 0xF4, 0x02, 0x7D, 0x00, + // Unicode: [0x002D, hyphen] + 0xA9, 0xAA, 0xAA, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + // Unicode: [0x002E, period] + 0xF8, 0xD1, 0x7F, 0xFE, 0xD7, 0x7F, 0xF8, 0x01, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0xFF, 0x01, 0x00, 0xFC, 0x03, 0x00, 0xF4, 0x0B, 0x00, 0xE0, 0x1F, 0x00, 0xC0, 0x7F, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFD, 0x02, 0x00, 0xF8, 0x0B, 0x00, 0xE0, 0x1F, 0x00, 0xC0, 0x3F, + 0x00, 0x40, 0xBF, 0x00, 0x00, 0xFE, 0x02, 0x00, 0xF8, 0x07, 0x00, 0xF0, 0x0F, 0x00, 0xD0, 0x3F, + 0x00, 0x40, 0xBF, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFC, 0x03, 0x00, 0xF4, 0x0F, 0x00, 0xD0, 0x2F, + 0x00, 0x80, 0x7F, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xFC, 0x03, 0x00, 0xF4, 0x0B, 0x00, 0xE0, 0x1F, + 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFD, 0x02, 0x00, 0xF8, 0x0B, 0x00, 0xE0, 0x1F, + 0x00, 0xC0, 0x3F, 0x00, 0x40, 0xBF, 0x00, 0x00, 0xFE, 0x02, 0x00, 0xF8, 0x07, 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0xE4, 0xAF, 0x01, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0xF8, 0xFF, 0xFF, + 0x1F, 0xF4, 0x2F, 0xD0, 0xBF, 0xE0, 0x2F, 0x00, 0xFD, 0xC3, 0x7F, 0x00, 0xF0, 0x1F, 0xFF, 0x00, + 0x80, 0xBF, 0xFD, 0x03, 0x00, 0xFD, 0xF6, 0x0B, 0x00, 0xF4, 0xDB, 0x2F, 0x00, 0xD0, 0x6F, 0xBF, + 0x00, 0x40, 0xBF, 0xFD, 0x02, 0x00, 0xFD, 0xF6, 0x0F, 0x00, 0xF4, 0xCB, 0x3F, 0x00, 0xE0, 0x2F, + 0xFF, 0x01, 0xC0, 0x7F, 0xF8, 0x0B, 0x40, 0xFF, 0xD0, 0xBF, 0x40, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, + 0x07, 0xF4, 0xFF, 0xFF, 0x0B, 0x40, 0xFF, 0xFF, 0x0B, 0x00, 0x90, 0xBF, 0x06, 0x00, + // Unicode: [0x0031, one] + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, + 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, + 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, + // Unicode: [0x0032, two] + 0x00, 0xF9, 0x2B, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, 0x07, 0xF8, 0xAF, 0xFE, 0x0F, + 0xFD, 0x07, 0xF4, 0x1F, 0xFD, 0x02, 0xE0, 0x2F, 0xFE, 0x02, 0xE0, 0x2F, 0x55, 0x00, 0xE0, 0x2F, + 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0xF8, 0x0B, 0x00, 0x00, 0xFE, 0x03, + 0x00, 0x40, 0xFF, 0x01, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFE, 0x0B, 0x00, + 0x80, 0xFF, 0x02, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFD, 0xAF, 0xAA, 0x2A, 0xFE, 0xFF, 0xFF, 0x7F, + 0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0x7F, + // Unicode: [0x0033, three] + 0x00, 0x94, 0x16, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0x0F, + 0xFC, 0x1F, 0xF4, 0x2F, 0xFD, 0x03, 0xD0, 0x2F, 0xA9, 0x02, 0xD0, 0x2F, 0x00, 0x00, 0xD0, 0x2F, + 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x90, 0xFE, 0x0B, 0x00, 0xF4, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0x01, + 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF9, 0x1F, 0x00, 0x00, 0xD0, 0x3F, 0x00, 0x00, 0xC0, 0x3F, + 0xA9, 0x01, 0xC0, 0x7F, 0xFD, 0x02, 0xC0, 0x3F, 0xFD, 0x07, 0xE0, 0x3F, 0xF8, 0xAF, 0xFE, 0x2F, + 0xF4, 0xFF, 0xFF, 0x0F, 0xD0, 0xFF, 0xFF, 0x02, 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x90, 0x2A, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0xF0, + 0xFF, 0x03, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0xFA, 0x03, 0x00, 0xF0, 0x8F, 0x3F, 0x00, + 0x80, 0x7F, 0xF8, 0x03, 0x00, 0xFD, 0x82, 0x3F, 0x00, 0xF4, 0x0F, 0xF8, 0x03, 0x80, 0x7F, 0x80, + 0x3F, 0x00, 0xFE, 0x02, 0xF8, 0x03, 0xF4, 0x0F, 0x80, 0x3F, 0xC0, 0x7F, 0x00, 0xF8, 0x03, 0xFE, + 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0x9B, 0xAA, 0xAA, 0xFE, + 0xAB, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, + 0x00, 0xFC, 0x03, + // Unicode: [0x0035, five] + 0xFD, 0xFF, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0x1F, 0xFD, 0xAB, 0xAA, 0x1A, + 0xFD, 0x02, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFD, 0xA2, 0xBF, 0x00, + 0xFD, 0xFE, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0x1F, 0xFD, 0xBF, 0xFA, 0x2F, 0xFD, 0x0B, 0xD0, 0x7F, + 0xA9, 0x02, 0x80, 0xBF, 0x00, 0x00, 0x40, 0xBF, 0x00, 0x00, 0x40, 0xBF, 0x54, 0x00, 0x80, 0xBF, + 0xFD, 0x02, 0x80, 0x7F, 0xFD, 0x0B, 0xD0, 0x3F, 0xF8, 0xBF, 0xFA, 0x2F, 0xF0, 0xFF, 0xFF, 0x0F, + 0x90, 0xFF, 0xFF, 0x03, 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0036, six] + 0x00, 0x50, 0x05, 0x00, 0x40, 0xFE, 0xBF, 0x00, 0xD0, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0x0B, + 0xF8, 0x1B, 0xF4, 0x1F, 0xFC, 0x03, 0xD0, 0x2F, 0xFD, 0x01, 0x80, 0x1A, 0xFE, 0x00, 0x00, 0x00, + 0xFE, 0x40, 0x15, 0x00, 0xBF, 0xF8, 0xFF, 0x01, 0xBF, 0xFE, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFF, 0x1B, 0xF4, 0x3F, 0xFF, 0x02, 0xD0, 0x7F, 0xFE, 0x01, 0x80, 0x7F, 0xFE, 0x00, 0x80, 0x7F, + 0xFE, 0x01, 0x80, 0x7F, 0xFD, 0x02, 0xC0, 0x7F, 0xFC, 0x07, 0xE0, 0x3F, 0xF4, 0xAF, 0xFE, 0x2F, + 0xE0, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0037, seven] + 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xEA, 0x7F, 0x00, + 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xFE, 0x02, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, + 0xFE, 0x01, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xE0, 0x2F, + 0x00, 0x00, 0xFC, 0x03, 0x00, 0x40, 0xBF, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xFD, 0x03, 0x00, + 0x80, 0x7F, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0xFE, 0x02, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xF8, + 0x0B, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0xE4, 0xAF, 0x01, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0xFC, 0x6F, 0xFE, + 0x1F, 0xF8, 0x1F, 0x80, 0xBF, 0xE0, 0x2F, 0x00, 0xFD, 0x83, 0x7F, 0x00, 0xF0, 0x0F, 0xFE, 0x01, + 0xD0, 0x2F, 0xF4, 0x0F, 0x80, 0x7F, 0x80, 0xBF, 0x91, 0xFF, 0x00, 0xF8, 0xFF, 0xBF, 0x00, 0xD0, + 0xFF, 0xFF, 0x02, 0xE0, 0xFF, 0xFF, 0x3F, 0xD0, 0xBF, 0x40, 0xFF, 0xC2, 0x7F, 0x00, 0xF0, 0x1F, + 0xFF, 0x00, 0x80, 0x7F, 0xFD, 0x02, 0x00, 0xFE, 0xF6, 0x0F, 0x00, 0xFC, 0xC7, 0xBF, 0x00, 0xF8, + 0x1F, 0xFD, 0xAF, 0xFE, 0x2F, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0x80, 0xFE, + 0x1A, 0x00, + // Unicode: [0x0039, nine] + 0x00, 0xA4, 0x05, 0x00, 0xE0, 0xFF, 0x2F, 0x40, 0xFF, 0xFF, 0x2F, 0xF0, 0xFF, 0xFF, 0x2F, 0xFD, + 0x0B, 0xF8, 0x8F, 0xBF, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0xFD, 0xFE, 0x03, 0x00, 0xBF, 0xFF, 0x00, + 0xC0, 0xFF, 0x7F, 0x00, 0xF4, 0xEF, 0x3F, 0x00, 0xFF, 0xF7, 0xBF, 0xF9, 0xFF, 0xF8, 0xFF, 0xFF, + 0x3F, 0xF8, 0xFF, 0xEB, 0x0F, 0xE4, 0x6F, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xC0, 0x6F, + 0xBF, 0x00, 0xF4, 0xCB, 0x7F, 0x00, 0xFE, 0xE1, 0xBF, 0xFA, 0x2F, 0xF0, 0xFF, 0xFF, 0x07, 0xF4, + 0xFF, 0x7F, 0x00, 0x90, 0xBF, 0x02, 0x00, + // Unicode: [0x003A, colon] + 0xF8, 0xD1, 0x7F, 0xFE, 0xD7, 0x7F, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xD1, 0x7F, 0xFE, 0xD7, 0x7F, 0xF8, 0x01, + // Unicode: [0x003B, semicolon] + 0xE0, 0x07, 0xFE, 0xC3, 0xFF, 0xE1, 0x3F, 0xE0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x05, 0xFC, 0x43, 0xBF, 0xE0, 0x1F, 0xF8, 0x02, 0x7F, 0xD0, + 0x0F, 0xF4, 0x02, 0x3E, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x90, 0x6A, 0x00, 0xF4, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, + 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFD, 0x0F, 0x00, 0xF4, 0x2F, 0x00, 0xD0, 0xBF, 0x00, 0x40, 0xFF, + 0x02, 0x00, 0xFE, 0x0B, 0x00, 0xF8, 0x2F, 0x00, 0xE0, 0xBF, + // Unicode: [0x003D, equal] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x9F, 0xAA, 0xAA, 0xAA, + 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xAA, 0xAA, + 0xAA, 0x2A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x1F, + // Unicode: [0x003E, greater] + 0xAA, 0x02, 0x00, 0xFD, 0x0F, 0x00, 0xF4, 0x3F, 0x00, 0xD0, 0xBF, 0x00, 0x40, 0xFF, 0x02, 0x00, + 0xFD, 0x0B, 0x00, 0xF4, 0x2F, 0x00, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, + 0x01, 0xE0, 0x7F, 0x00, 0xF8, 0x1F, 0x00, 0xFE, 0x07, 0x00, + // Unicode: [0x003F, question] + 0x40, 0xFE, 0x1B, 0x00, 0xFE, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xD2, 0xBF, 0xFA, 0x7F, 0xFE, 0x02, + 0xF8, 0xFB, 0x0F, 0x40, 0xBF, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x80, 0xBF, 0x00, 0x54, 0xFE, 0x07, + 0xFC, 0xFF, 0x2F, 0xC0, 0xFF, 0xBF, 0x00, 0xFC, 0x6B, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xFC, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0xFD, 0x07, 0x00, 0xE0, + 0x7F, 0x00, 0x00, 0xFD, 0x07, 0x00, 0x80, 0x1F, 0x00, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0x40, 0xFA, 0xAF, 0x01, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x01, 0x90, 0xFF, 0x03, 0x00, 0xFD, 0x07, 0x00, + 0x00, 0xF8, 0x0B, 0x40, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0xC0, 0x2F, 0x80, 0xBF, 0xA4, 0xC2, + 0x2F, 0xE0, 0x0F, 0xF4, 0xFF, 0xFB, 0x42, 0x3F, 0xF4, 0x07, 0xFD, 0xFF, 0xFF, 0x02, 0x7F, 0xF8, + 0x02, 0xFF, 0x96, 0xFF, 0x01, 0x7F, 0xFC, 0x81, 0x7F, 0x00, 0xFF, 0x01, 0x7F, 0xFD, 0xC0, 0x2F, + 0x00, 0xFE, 0x00, 0x7F, 0xBE, 0xD0, 0x1F, 0x00, 0xFD, 0x00, 0x7F, 0xBE, 0xD0, 0x1F, 0x00, 0xBE, + 0x40, 0x3F, 0x7E, 0xE0, 0x1F, 0x00, 0xBF, 0x80, 0x2F, 0x7F, 0xE0, 0x1F, 0x80, 0xBF, 0xC0, 0x1F, + 0xBE, 0xD0, 0x7F, 0xE4, 0xBF, 0xE0, 0x0B, 0xBE, 0xC0, 0xFF, 0xFF, 0xFE, 0xFF, 0x03, 0xFE, 0x40, + 0xFF, 0x7F, 0xFC, 0xFF, 0x01, 0xFD, 0x01, 0xF9, 0x0B, 0xE4, 0x2F, 0x00, 0xF8, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xBF, 0x05, 0x50, 0x02, 0x00, + 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0x90, 0xFE, 0x6F, 0x01, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, + 0xF0, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFB, 0x1F, 0x00, 0x00, 0xFC, + 0xE3, 0x2F, 0x00, 0x00, 0xFD, 0xD2, 0x3F, 0x00, 0x00, 0xFE, 0xC1, 0x7F, 0x00, 0x00, 0xFF, 0x80, + 0xBF, 0x00, 0x40, 0xBF, 0x40, 0xFF, 0x00, 0x80, 0x7F, 0x00, 0xFF, 0x01, 0xD0, 0x3F, 0x00, 0xFE, + 0x02, 0xE0, 0x7F, 0x55, 0xFE, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0xFF, 0x0B, + 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x07, 0x00, 0xF0, 0x1F, 0xFD, 0x03, 0x00, 0xE0, 0x3F, 0xFE, + 0x02, 0x00, 0xD0, 0x7F, 0xFF, 0x01, 0x00, 0xC0, 0xBF, + // Unicode: [0x0042, B] + 0xFF, 0xFF, 0xAF, 0x01, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0x56, 0xF9, 0x3F, + 0xFF, 0x01, 0xD0, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0x01, 0xD0, 0x3F, + 0xFF, 0x55, 0xF5, 0x2F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFF, 0x01, 0xE0, 0x3F, 0xFF, 0x01, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0x56, 0xF9, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x0B, + 0xFF, 0xFF, 0xBF, 0x01, + // Unicode: [0x0043, C] + 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0xFF, 0xBF, 0x00, + 0xF4, 0xFF, 0xFB, 0xFF, 0x0B, 0xF4, 0xBF, 0x01, 0xF8, 0x7F, 0xE0, 0x7F, 0x00, 0x40, 0xFF, 0xD3, + 0x7F, 0x00, 0x00, 0xA4, 0x9A, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFC, + 0x07, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x02, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xA4, 0x1A, 0xFE, + 0x07, 0x00, 0xF4, 0x3F, 0xF4, 0xBF, 0x00, 0xF4, 0x7F, 0x40, 0xFF, 0xBF, 0xFF, 0xBF, 0x00, 0xF4, + 0xFF, 0xFF, 0xBF, 0x00, 0x40, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, + // Unicode: [0x0044, D] + 0xFF, 0xFF, 0x6F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0xAB, + 0xFA, 0xFF, 0x03, 0xFF, 0x01, 0x90, 0xFF, 0xC2, 0x7F, 0x00, 0x80, 0xFF, 0xF1, 0x1F, 0x00, 0xC0, + 0xBF, 0xFC, 0x07, 0x00, 0xD0, 0x3F, 0xFF, 0x01, 0x00, 0xF0, 0xDF, 0x7F, 0x00, 0x00, 0xFC, 0xF7, + 0x1F, 0x00, 0x00, 0xFF, 0xFD, 0x07, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0xF0, 0xDF, 0x7F, 0x00, + 0x00, 0xFD, 0xF3, 0x1F, 0x00, 0x80, 0xBF, 0xFC, 0x07, 0x00, 0xF8, 0x1F, 0xFF, 0x01, 0x90, 0xFF, + 0xC2, 0xBF, 0xAA, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x2F, 0x00, 0xFF, + 0xFF, 0x6F, 0x00, 0x00, + // Unicode: [0x0045, E] + 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xDF, 0xBF, 0x55, 0x15, 0xFF, 0x01, 0x00, + 0xFC, 0x07, 0x00, 0xF0, 0x1F, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFF, 0x56, 0x15, 0xFC, 0xFF, 0xFF, + 0xF1, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xFF, 0x01, 0x00, 0xFC, 0x07, 0x00, 0xF0, 0x1F, 0x00, + 0xC0, 0x7F, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xFC, 0x5B, 0x55, 0xF1, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, + 0x7F, 0xFF, 0xFF, 0xFF, 0x01, + // Unicode: [0x0046, F] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x55, 0x55, 0xFF, 0x01, 0x00, + 0xFC, 0x07, 0x00, 0xF0, 0x1F, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFF, 0x56, 0x15, 0xFC, 0xFF, 0xFF, + 0xF0, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x0F, 0xFF, 0x01, 0x00, 0xFC, 0x07, 0x00, 0xF0, 0x1F, 0x00, + 0xC0, 0x7F, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xFC, 0x07, 0x00, 0xF0, 0x1F, 0x00, 0xC0, 0x7F, 0x00, + 0x00, 0xFF, 0x01, 0x00, 0x00, + // Unicode: [0x0047, G] + 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0xFF, 0xBF, 0x00, + 0xF4, 0xFF, 0xFF, 0xFF, 0x0F, 0xF4, 0xBF, 0x01, 0xF4, 0xBF, 0xE0, 0x7F, 0x00, 0x00, 0xFF, 0xD3, + 0xBF, 0x00, 0x00, 0x50, 0x85, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFC, + 0x07, 0xD0, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFD, 0xFF, 0xFF, 0xFE, + 0x02, 0x50, 0x55, 0xFD, 0xFB, 0x0F, 0x00, 0x00, 0xF8, 0xDB, 0xBF, 0x00, 0x00, 0xF0, 0x1F, 0xFE, + 0x07, 0x00, 0xE0, 0x3F, 0xF4, 0xBF, 0x01, 0xF4, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF4, + 0xFF, 0xFF, 0xBF, 0x00, 0x40, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, + // Unicode: [0x0048, H] + 0xFF, 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0x80, 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, + 0x80, 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0x80, 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0xF7, + 0x1F, 0x00, 0x80, 0x7F, 0xFF, 0x56, 0x55, 0xFD, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0x80, 0x7F, 0xFF, + 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0x80, 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0x80, + 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0x80, 0x7F, 0xFF, 0x01, 0x00, 0xF8, 0x07, + // Unicode: [0x0049, I] + 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, + 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0x01, + // Unicode: [0x004A, J] + 0x00, 0x00, 0xFC, 0x07, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xC0, 0x7F, 0x00, 0x00, + 0xFC, 0x07, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFC, 0x07, + 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xC0, + 0x7F, 0xAA, 0x01, 0xFC, 0xF7, 0x1F, 0xC0, 0x7F, 0xFE, 0x03, 0xFE, 0xD3, 0xFF, 0xFF, 0x2F, 0xF8, + 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0x07, 0x40, 0xFE, 0x0A, 0x00, + // Unicode: [0x004B, K] + 0xFF, 0x01, 0x80, 0xFF, 0xFE, 0x07, 0x40, 0xFF, 0xF2, 0x1F, 0x40, 0xFF, 0xC2, 0x7F, 0x00, 0xFF, + 0x03, 0xFF, 0x01, 0xFE, 0x07, 0xFC, 0x07, 0xFE, 0x07, 0xF0, 0x1F, 0xFD, 0x0B, 0xC0, 0x7F, 0xFD, + 0x0B, 0x00, 0xFF, 0xFD, 0x0F, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xC0, 0xFF, + 0xFF, 0x01, 0x00, 0xFF, 0xFD, 0x0F, 0x00, 0xFC, 0xD7, 0xFF, 0x00, 0xF0, 0x1F, 0xFD, 0x0B, 0xC0, + 0x7F, 0xE0, 0xBF, 0x00, 0xFF, 0x01, 0xFE, 0x07, 0xFC, 0x07, 0xF0, 0x7F, 0xF0, 0x1F, 0x40, 0xFF, + 0xC3, 0x7F, 0x00, 0xF4, 0x3F, 0xFF, 0x01, 0x80, 0xFF, 0x02, + // Unicode: [0x004C, L] + 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, + 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, + 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, + 0xFF, 0x01, 0x00, 0xFF, 0x56, 0x15, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, + // Unicode: [0x004D, M] + 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x00, 0x00, 0xC0, + 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, + 0xD0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, + 0x01, 0xD0, 0xEF, 0xFF, 0x7F, 0xFF, 0x00, 0xFC, 0xF6, 0xFF, 0x5F, 0x7F, 0x40, 0x7F, 0xFD, 0xFF, + 0xC7, 0x2F, 0xE0, 0x4F, 0xFF, 0xFF, 0xE1, 0x1F, 0xFD, 0xD2, 0xFF, 0x7F, 0xF4, 0x8B, 0x7F, 0xF4, + 0xFF, 0x1F, 0xF8, 0xF3, 0x0B, 0xFD, 0xFF, 0x07, 0xFD, 0xFF, 0x41, 0xFF, 0xFF, 0x01, 0xFF, 0x3F, + 0xD0, 0xFF, 0x7F, 0x80, 0xFF, 0x0B, 0xF4, 0xFF, 0x1F, 0xC0, 0xFF, 0x00, 0xFD, 0xFF, 0x07, 0xE0, + 0x2F, 0x40, 0xFF, 0xFF, 0x01, 0xF4, 0x07, 0xD0, 0x3F, + // Unicode: [0x004E, N] + 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0x7F, 0x00, 0x40, 0xFF, 0xFF, 0x0F, 0x00, 0xF4, 0xFF, 0xFF, 0x02, + 0x40, 0xFF, 0xFF, 0x7F, 0x00, 0xF4, 0xFF, 0xFF, 0x0F, 0x40, 0xFF, 0xFF, 0xFF, 0x02, 0xF4, 0xFF, + 0xDF, 0x7F, 0x40, 0xFF, 0xFF, 0xF5, 0x0F, 0xF4, 0xFF, 0x1F, 0xFE, 0x42, 0xFF, 0xFF, 0xD1, 0x7F, + 0xF4, 0xFF, 0x1F, 0xF8, 0x4B, 0xFF, 0xFF, 0x01, 0xFE, 0xF6, 0xFF, 0x1F, 0xD0, 0x7F, 0xFF, 0xFF, + 0x01, 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, + 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0x0F, + // Unicode: [0x004F, O] + 0x00, 0x80, 0xFE, 0x1B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0B, + 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, 0xBF, 0x01, 0xF4, 0xBF, 0x80, 0xFF, 0x01, 0x00, 0xF8, + 0x1F, 0xFD, 0x07, 0x00, 0x00, 0xFF, 0xE2, 0x3F, 0x00, 0x00, 0xD0, 0x3F, 0xFE, 0x02, 0x00, 0x00, + 0xFC, 0xF7, 0x1F, 0x00, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0x00, + 0xC0, 0x7F, 0xFE, 0x02, 0x00, 0x00, 0xFC, 0xE7, 0x3F, 0x00, 0x00, 0xD0, 0x3F, 0xFD, 0x07, 0x00, + 0x00, 0xFF, 0x82, 0xFF, 0x01, 0x00, 0xF8, 0x1F, 0xF0, 0xBF, 0x01, 0xF4, 0xBF, 0x00, 0xFD, 0xFF, + 0xFE, 0xFF, 0x02, 0x40, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x90, + 0xFE, 0x1B, 0x00, 0x00, + // Unicode: [0x0050, P] + 0xFF, 0xFF, 0x6F, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x56, 0xFE, 0x2F, + 0xFF, 0x01, 0xE0, 0x3F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, + 0xFF, 0x01, 0xE0, 0x3F, 0xFF, 0x56, 0xFA, 0x2F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x02, + 0xFF, 0xFF, 0x6F, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, + 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, + 0xFF, 0x01, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0x80, 0xFE, 0x1B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0B, + 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, 0xBF, 0x01, 0xF4, 0xBF, 0x80, 0xFF, 0x01, 0x00, 0xF8, + 0x1F, 0xFD, 0x07, 0x00, 0x00, 0xFF, 0xE2, 0x3F, 0x00, 0x00, 0xD0, 0x3F, 0xFE, 0x02, 0x00, 0x00, + 0xFC, 0xF7, 0x1F, 0x00, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0x00, + 0xC0, 0x7F, 0xFE, 0x02, 0x00, 0x00, 0xFC, 0xE7, 0x3F, 0x00, 0x00, 0xD0, 0x3F, 0xFD, 0x07, 0x00, + 0x00, 0xFF, 0x82, 0xFF, 0x01, 0x00, 0xF8, 0x1F, 0xF0, 0xBF, 0x01, 0xF4, 0xBF, 0x00, 0xFD, 0xFF, + 0xFE, 0xFF, 0x02, 0x40, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x90, + 0xFE, 0xFB, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x06, + // Unicode: [0x0052, R] + 0xFF, 0xFF, 0x6F, 0x00, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xAA, 0xFE, 0x2F, + 0xFF, 0x01, 0xE0, 0x3F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, + 0xFF, 0x01, 0xD0, 0x7F, 0xFF, 0x55, 0xF9, 0x2F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xD1, 0x7F, 0x00, 0xFF, 0xC1, 0xBF, 0x00, 0xFF, 0x41, 0xFF, 0x01, + 0xFF, 0x01, 0xFE, 0x03, 0xFF, 0x01, 0xFC, 0x0B, 0xFF, 0x01, 0xF8, 0x1F, 0xFF, 0x01, 0xF0, 0x2F, + 0xFF, 0x01, 0xD0, 0x7F, + // Unicode: [0x0053, S] + 0x00, 0xF9, 0x6F, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0x1F, 0xF8, 0xAF, 0xFE, 0x2F, + 0xFD, 0x07, 0xE0, 0x7F, 0xFD, 0x03, 0xD0, 0x7F, 0xFD, 0x03, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, + 0xF8, 0xBF, 0x01, 0x00, 0xF0, 0xFF, 0x6F, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0xE4, 0xFF, 0x1F, + 0x00, 0x00, 0xF9, 0x3F, 0x00, 0x00, 0xD0, 0xBF, 0x54, 0x01, 0x80, 0xBF, 0xFD, 0x07, 0x80, 0xBF, + 0xFD, 0x0B, 0xD0, 0x7F, 0xF8, 0xBF, 0xFA, 0x3F, 0xF0, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0x07, + 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0054, T] + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0x55, 0xF9, 0x5F, 0x15, + 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, + 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, + 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, + 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xF4, 0x0B, 0x00, + 0x00, 0xF4, 0x0B, 0x00, + // Unicode: [0x0055, U] + 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x40, + 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x7F, 0x00, + 0x40, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x7F, + 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0xE0, 0xAF, + 0xFF, 0x00, 0xC0, 0xBF, 0xFD, 0x1B, 0x90, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0xFF, + 0x02, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0xE9, 0x6F, 0x00, 0x00, + // Unicode: [0x0056, V] + 0xFD, 0x03, 0x00, 0x00, 0xFE, 0xF2, 0x1F, 0x00, 0x00, 0xFC, 0x87, 0xBF, 0x00, 0x00, 0xF4, 0x0F, + 0xFD, 0x03, 0x00, 0xE0, 0x2F, 0xF0, 0x1F, 0x00, 0xC0, 0x7F, 0x80, 0xBF, 0x00, 0x40, 0xFF, 0x00, + 0xFD, 0x03, 0x00, 0xFE, 0x01, 0xF0, 0x2F, 0x00, 0xFC, 0x03, 0x40, 0xFF, 0x00, 0xF8, 0x0B, 0x00, + 0xFC, 0x07, 0xF0, 0x1F, 0x00, 0xE0, 0x2F, 0xD0, 0x3F, 0x00, 0x40, 0xFF, 0x80, 0xBF, 0x00, 0x00, + 0xFC, 0x07, 0xFF, 0x01, 0x00, 0xE0, 0x2F, 0xFD, 0x03, 0x00, 0x40, 0xFF, 0xF8, 0x0B, 0x00, 0x00, + 0xFC, 0xF7, 0x1F, 0x00, 0x00, 0xE0, 0xEF, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + // Unicode: [0x0057, W] + 0xFD, 0x07, 0x00, 0xFC, 0x0F, 0x00, 0xF8, 0xCF, 0x7F, 0x00, 0xD0, 0xFF, 0x00, 0x80, 0xBF, 0xF8, + 0x0B, 0x00, 0xFE, 0x1F, 0x00, 0xFC, 0x47, 0xFF, 0x00, 0xE0, 0xFF, 0x02, 0xD0, 0x3F, 0xF0, 0x1F, + 0x00, 0xFF, 0x3F, 0x00, 0xFE, 0x02, 0xFF, 0x01, 0xF4, 0xFF, 0x03, 0xE0, 0x2F, 0xE0, 0x2F, 0x80, + 0xBF, 0x7F, 0x00, 0xFF, 0x01, 0xFD, 0x03, 0xFC, 0xF7, 0x0B, 0xF4, 0x0F, 0xC0, 0x3F, 0xC0, 0x2F, + 0xFF, 0x40, 0xBF, 0x00, 0xF8, 0x07, 0xFD, 0xE1, 0x0F, 0xF8, 0x07, 0x80, 0xBF, 0xE0, 0x0F, 0xFE, + 0xC1, 0x3F, 0x00, 0xF4, 0x0B, 0xBF, 0xD0, 0x2F, 0xFC, 0x03, 0x00, 0xFF, 0xF0, 0x0B, 0xFC, 0xD3, + 0x2F, 0x00, 0xE0, 0x5F, 0x7F, 0x80, 0x3F, 0xFE, 0x01, 0x00, 0xFD, 0xF9, 0x03, 0xF4, 0xE7, 0x0F, + 0x00, 0xD0, 0xEF, 0x2F, 0x40, 0xBF, 0xBF, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xF0, 0xFF, 0x07, 0x00, + 0x80, 0xFF, 0x1F, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x0B, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0xC0, 0xFF, 0x01, 0x00, + // Unicode: [0x0058, X] + 0xFE, 0x07, 0x00, 0xF8, 0xCF, 0xFF, 0x00, 0xD0, 0x7F, 0xF4, 0x2F, 0x00, 0xFF, 0x02, 0xFE, 0x07, + 0xF4, 0x0F, 0xC0, 0xFF, 0xC0, 0xBF, 0x00, 0xF4, 0x2F, 0xFE, 0x03, 0x00, 0xFE, 0xF7, 0x1F, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xD0, 0xFF, + 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, + 0xFE, 0xFA, 0x1F, 0x00, 0xF4, 0x1F, 0xFF, 0x03, 0xC0, 0xBF, 0xD0, 0xBF, 0x00, 0xFE, 0x03, 0xF8, + 0x1F, 0xF4, 0x1F, 0x00, 0xFF, 0x82, 0xBF, 0x00, 0xD0, 0x7F, 0xFD, 0x07, 0x00, 0xF8, 0x0F, + // Unicode: [0x0059, Y] + 0xFD, 0x07, 0x00, 0xF4, 0x1F, 0xFF, 0x02, 0x00, 0xFE, 0x43, 0xFF, 0x01, 0xC0, 0x7F, 0xC0, 0xBF, + 0x00, 0xF8, 0x0F, 0xD0, 0x7F, 0x00, 0xFF, 0x01, 0xE0, 0x2F, 0xE0, 0x3F, 0x00, 0xF4, 0x0F, 0xFC, + 0x07, 0x00, 0xF8, 0x4B, 0xBF, 0x00, 0x00, 0xFD, 0xF3, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, + 0x40, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xE0, + 0x2F, 0x00, 0x00, 0x00, 0xF8, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x80, 0xBF, 0x00, + 0x00, 0x00, 0xE0, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, + 0x80, 0xBF, 0x00, 0x00, + // Unicode: [0x005A, Z] + 0xFE, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xA6, 0xAA, 0xEA, 0xBF, 0x00, + 0x00, 0xF8, 0x0F, 0x00, 0x40, 0xFF, 0x01, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xD0, + 0x7F, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0xFF, 0x02, + 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xFD, 0x07, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x40, + 0xFF, 0xAA, 0xAA, 0xE6, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0x2F, + // Unicode: [0x005B, bracketleft] + 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0x55, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x6A, 0xFF, 0xBF, + 0xFF, 0xBF, 0xFF, 0xBF, + // Unicode: [0x005C, backslash] + 0xFE, 0x01, 0x00, 0xF4, 0x0B, 0x00, 0xD0, 0x3F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xF8, 0x07, 0x00, + 0xD0, 0x2F, 0x00, 0x40, 0xFF, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xE0, 0x1F, 0x00, 0x40, 0xBF, 0x00, + 0x00, 0xFD, 0x03, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x7F, 0x00, 0x00, 0xFD, 0x02, 0x00, 0xF4, 0x0F, + 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xF4, 0x0B, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xFF, + 0x01, 0x00, 0xF8, 0x07, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xE0, + 0x1F, 0x00, 0x40, 0xBF, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xF0, 0x1F, 0x00, 0x80, 0x7F, 0x00, 0x00, + 0xFD, 0x02, 0x00, 0xF0, 0x0F, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xF4, 0x0B, + // Unicode: [0x005D, bracketright] + 0xFE, 0xBF, 0xFE, 0xBF, 0xFE, 0xBF, 0x95, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, + 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, + 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, + 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0xBF, 0xA9, 0xBF, 0xFE, 0xBF, + 0xFE, 0xBF, 0xFE, 0xBF, + // Unicode: [0x005E, asciicircum] + 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xD0, + 0xFF, 0x0B, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0xFE, 0x02, 0x00, 0xE0, 0x2F, 0xFF, + 0x00, 0x00, 0xFD, 0x83, 0xBF, 0x00, 0x80, 0xBF, 0xD0, 0x3F, 0x00, 0xF0, 0x1F, 0xE0, 0x1F, 0x00, + 0xFE, 0x02, 0xF4, 0x0F, 0xC0, 0x7F, 0x00, 0xFC, 0x07, 0xF4, 0x0F, 0x00, 0xFD, 0x02, 0xFF, 0x01, + 0x00, 0xFF, 0xD1, 0x3F, 0x00, 0x80, 0xBF, 0xF8, 0x0B, 0x00, 0xC0, 0x7F, + // Unicode: [0x005F, underscore] + 0xFE, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, + 0xFF, 0xBF, + // Unicode: [0x0060, grave] + 0x01, 0x00, 0x1E, 0x00, 0xFE, 0x01, 0xFE, 0x1B, 0xF4, 0x7F, 0x40, 0x7F, 0x00, 0x64, + // Unicode: [0x0061, a] + 0x00, 0xF9, 0x1B, 0xFC, 0x07, 0xF8, 0xFF, 0xCB, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xEF, + 0xFF, 0x7F, 0xFD, 0x1F, 0x80, 0xFF, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFE, 0x02, 0x00, 0xFD, 0xF7, + 0x1F, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFE, 0x02, 0x00, + 0xFD, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFC, 0x1F, 0x80, 0xFF, 0x87, 0xFF, 0xAF, 0xFF, 0x7F, 0xF0, + 0xFF, 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xCB, 0x7F, 0x00, 0xF9, 0x1B, 0xFC, 0x07, + // Unicode: [0x0062, b] + 0x55, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x1F, 0x00, + 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x91, 0xBF, 0x01, 0xF0, + 0x9F, 0xFF, 0xFF, 0x01, 0xFF, 0xFE, 0xFF, 0x7F, 0xF0, 0xFF, 0xEF, 0xFF, 0x0F, 0xFF, 0x1F, 0x80, + 0xFF, 0xF2, 0x7F, 0x00, 0xE0, 0x3F, 0xFF, 0x02, 0x00, 0xFD, 0xF3, 0x1F, 0x00, 0xC0, 0x7F, 0xFF, + 0x01, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFF, 0x02, 0x00, 0xFD, 0xF3, 0x7F, 0x00, 0xF0, + 0x3F, 0xFF, 0x1F, 0x90, 0xFF, 0xF1, 0xFF, 0xAF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0x9F, + 0xFF, 0xFF, 0x01, 0xFF, 0x91, 0xBF, 0x01, 0x00, + // Unicode: [0x0063, c] + 0x00, 0xF9, 0x6F, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 0xF8, 0xBF, 0xFE, 0x3F, + 0xFD, 0x0B, 0xD0, 0xBF, 0xFE, 0x03, 0x80, 0xBF, 0xFE, 0x02, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, + 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xFE, 0x03, 0x80, 0xBF, + 0xFD, 0x0B, 0xD0, 0xBF, 0xF8, 0xBF, 0xFE, 0x3F, 0xE0, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0x07, + 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, + 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0xF9, 0x1B, 0xFC, 0x07, + 0xF8, 0xFF, 0xCB, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xEF, 0xFF, 0x7F, 0xFD, 0x1F, 0x80, + 0xFF, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFE, 0x02, 0x00, 0xFD, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFF, + 0x01, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFE, 0x02, 0x00, 0xFD, 0xE7, 0x7F, 0x00, 0xE0, + 0x7F, 0xFC, 0x1F, 0x80, 0xFF, 0x87, 0xFF, 0xAF, 0xFF, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0x07, 0xF8, + 0xFF, 0xCB, 0x7F, 0x00, 0xF9, 0x1B, 0xFC, 0x07, + // Unicode: [0x0065, e] + 0x00, 0xE9, 0x6F, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0xFE, 0xAF, 0xFE, + 0x1F, 0xFD, 0x0B, 0xD0, 0xBF, 0xF8, 0x0B, 0x00, 0xFD, 0xE3, 0x1F, 0x00, 0xF0, 0xDF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xE7, 0x1F, 0x00, 0x00, 0x80, 0xBF, + 0x00, 0x50, 0x15, 0xFD, 0x0B, 0xD0, 0xBF, 0xE0, 0xFF, 0xEA, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x01, + 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0xE9, 0x6F, 0x00, 0x00, + // Unicode: [0x0066, f] + 0x00, 0x50, 0x06, 0xD0, 0xBF, 0x40, 0xFF, 0x0B, 0xFC, 0xBF, 0xD0, 0xBF, 0x00, 0xFD, 0x03, 0xD0, + 0x2F, 0xD0, 0xFF, 0xBF, 0xFD, 0xFF, 0xDB, 0xFF, 0xBF, 0xE5, 0x7F, 0x05, 0xFD, 0x02, 0xD0, 0x2F, + 0x00, 0xFD, 0x02, 0xD0, 0x2F, 0x00, 0xFD, 0x02, 0xD0, 0x2F, 0x00, 0xFD, 0x02, 0xD0, 0x2F, 0x00, + 0xFD, 0x02, 0xD0, 0x2F, 0x00, 0xFD, 0x02, 0xD0, 0x2F, 0x00, 0xFD, 0x02, + // Unicode: [0x0067, g] + 0x00, 0xF9, 0x1B, 0xFC, 0x07, 0xF8, 0xFF, 0xCB, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xEF, + 0xFF, 0x7F, 0xFD, 0x1F, 0x80, 0xFF, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFE, 0x02, 0x00, 0xFD, 0xF7, + 0x1F, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFE, 0x02, 0x00, + 0xFD, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFC, 0x1F, 0x80, 0xFF, 0x87, 0xFF, 0xAF, 0xFF, 0x7F, 0xF0, + 0xFF, 0xFF, 0xFE, 0x07, 0xF8, 0xFF, 0xCB, 0x7F, 0x00, 0xF9, 0x1B, 0xFC, 0x07, 0x00, 0x00, 0xC0, + 0x7F, 0x54, 0x01, 0x00, 0xFC, 0xC3, 0x7F, 0x00, 0xE0, 0x3F, 0xFC, 0x1F, 0x40, 0xFF, 0x42, 0xFF, + 0xAF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0xE4, 0xBF, 0x01, + 0x00, + // Unicode: [0x0068, h] + 0x55, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, + 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x91, 0xBF, 0x01, 0xFF, 0xF9, 0xFF, 0x0B, + 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xBF, 0xFE, 0x3F, 0xFF, 0x0B, 0xE0, 0xBF, 0xFF, 0x02, 0x80, 0xBF, + 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + // Unicode: [0x0069, i] + 0xE4, 0xC2, 0xBF, 0xFD, 0xCB, 0xBF, 0xF4, 0x02, 0x00, 0x00, 0xC0, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, + 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, + 0x7F, 0xFC, 0xC7, 0x7F, + // Unicode: [0x006A, j] + 0x40, 0x2E, 0xC0, 0x7F, 0xD0, 0xBF, 0xD0, 0xBF, 0x40, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, + 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, + 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, + 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x7F, 0xFA, 0x3F, 0xFF, 0x2F, 0xFF, 0x1F, 0xFF, 0x02, + // Unicode: [0x006B, k] + 0x55, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xFF, + 0x01, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xF0, 0x1F, 0x80, 0xFF, 0xFE, 0x07, 0xF4, 0x3F, 0xFF, 0x01, + 0xFF, 0xC7, 0x7F, 0xE0, 0x7F, 0xF0, 0x1F, 0xFE, 0x07, 0xFC, 0xD7, 0xBF, 0x00, 0xFF, 0xFD, 0x0B, + 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xFF, 0xFD, 0x0B, 0xC0, + 0x7F, 0xFD, 0x0B, 0xF0, 0x1F, 0xFE, 0x07, 0xFC, 0x07, 0xFE, 0x07, 0xFF, 0x01, 0xFF, 0xC7, 0x7F, + 0x40, 0xFF, 0xF3, 0x1F, 0x40, 0xFF, 0x03, + // Unicode: [0x006C, l] + 0x55, 0xFC, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, + 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0xDF, 0x7F, 0xFF, 0xFD, 0xF7, 0x1F, + // Unicode: [0x006D, m] + 0xFF, 0x91, 0xBF, 0x01, 0xE4, 0x6F, 0x00, 0xFF, 0xFD, 0xFF, 0x0B, 0xFD, 0xFF, 0x07, 0xFF, 0xFF, + 0xFF, 0x6F, 0xFF, 0xFF, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xBF, 0xFE, 0x2F, 0xFF, 0x0B, 0xE0, 0xFF, + 0x07, 0xF0, 0x3F, 0xFF, 0x02, 0x80, 0xFF, 0x01, 0xD0, 0x7F, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0xC0, + 0x7F, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, 0xFF, + 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, 0xFF, 0x01, 0x40, + 0xFF, 0x00, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0x00, + 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, + 0xFF, 0x01, 0x40, 0xFF, 0x00, 0x80, 0xBF, + // Unicode: [0x006E, n] + 0xFF, 0x91, 0xBF, 0x01, 0xFF, 0xFD, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xBF, 0xFE, 0x3F, + 0xFF, 0x0B, 0xE0, 0xBF, 0xFF, 0x02, 0x80, 0xBF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x01, 0x40, 0xFF, + 0xFF, 0x01, 0x40, 0xFF, + // Unicode: [0x006F, o] + 0x00, 0xE4, 0xAF, 0x00, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, 0xFF, 0x02, 0xFD, 0xAF, 0xFE, + 0x2F, 0xFC, 0x1F, 0xD0, 0xFF, 0xF9, 0x0F, 0x00, 0xFC, 0xEB, 0x2F, 0x00, 0xE0, 0xFF, 0x7F, 0x00, + 0x40, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0xEF, 0x2F, 0x00, 0xE0, 0xBF, 0xFF, + 0x00, 0xC0, 0xBF, 0xFC, 0x1F, 0xD0, 0xFF, 0xD1, 0xFF, 0xEA, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, 0x02, + 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0xE8, 0xAF, 0x00, 0x00, + // Unicode: [0x0070, p] + 0xFF, 0x91, 0xBF, 0x01, 0xF0, 0x9F, 0xFF, 0xFF, 0x01, 0xFF, 0xFE, 0xFF, 0x7F, 0xF0, 0xFF, 0xEF, + 0xFF, 0x0F, 0xFF, 0x1F, 0x80, 0xFF, 0xF2, 0x7F, 0x00, 0xE0, 0x3F, 0xFF, 0x02, 0x00, 0xFD, 0xF3, + 0x1F, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFF, 0x02, 0x00, + 0xFD, 0xF3, 0x7F, 0x00, 0xF0, 0x3F, 0xFF, 0x1F, 0x90, 0xFF, 0xF1, 0xFF, 0xAF, 0xFF, 0x0F, 0xFF, + 0xFE, 0xFF, 0x7F, 0xF0, 0x9F, 0xFF, 0xFF, 0x01, 0xFF, 0x91, 0xBF, 0x01, 0xF0, 0x1F, 0x00, 0x00, + 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x1F, + 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, + 0x00, + // Unicode: [0x0071, q] + 0x00, 0xF9, 0x1B, 0xFC, 0x07, 0xF8, 0xFF, 0xDF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xAF, + 0xFF, 0x7F, 0xFD, 0x1F, 0x80, 0xFF, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFE, 0x02, 0x00, 0xFD, 0xF7, + 0x1F, 0x00, 0xC0, 0x7F, 0xFF, 0x01, 0x00, 0xFC, 0xF7, 0x1F, 0x00, 0xC0, 0x7F, 0xFE, 0x02, 0x00, + 0xFD, 0xE7, 0x7F, 0x00, 0xE0, 0x7F, 0xFD, 0x1F, 0x80, 0xFF, 0x87, 0xFF, 0xAF, 0xFF, 0x7F, 0xE0, + 0xFF, 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xCB, 0x7F, 0x00, 0xF9, 0x1B, 0xFC, 0x07, 0x00, 0x00, 0xC0, + 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, + 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xFC, + 0x07, + // Unicode: [0x0072, r] + 0xFF, 0x91, 0xF7, 0x9F, 0x7F, 0xFF, 0xFE, 0xF7, 0xFF, 0x7F, 0xFF, 0xAF, 0xF1, 0x7F, 0x00, 0xFF, + 0x02, 0xF0, 0x1F, 0x00, 0xFF, 0x01, 0xF0, 0x1F, 0x00, 0xFF, 0x01, 0xF0, 0x1F, 0x00, 0xFF, 0x01, + 0xF0, 0x1F, 0x00, 0xFF, 0x01, 0xF0, 0x1F, 0x00, 0xFF, 0x01, 0x00, + // Unicode: [0x0073, s] + 0x40, 0xFE, 0x1B, 0x00, 0xFE, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xC2, 0xBF, 0xE5, 0x7F, 0xFD, 0x02, + 0xF8, 0xDB, 0x2F, 0x00, 0x55, 0xFC, 0x1B, 0x00, 0x80, 0xFF, 0xBF, 0x01, 0xD0, 0xFF, 0xBF, 0x00, + 0x90, 0xFF, 0x3F, 0x00, 0x40, 0xFE, 0x5B, 0x15, 0x40, 0xFF, 0xFE, 0x02, 0xF4, 0xDF, 0xFF, 0xD5, + 0xBF, 0xF8, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0x1F, 0x00, 0xFA, 0x1B, 0x00, + // Unicode: [0x0074, t] + 0xD0, 0x3F, 0x00, 0xF4, 0x0F, 0x00, 0xFD, 0x03, 0x40, 0xFF, 0x00, 0xFD, 0xFF, 0x6F, 0xFF, 0xFF, + 0xDB, 0xFF, 0xFF, 0x92, 0xFF, 0x55, 0xD0, 0x3F, 0x00, 0xF4, 0x0F, 0x00, 0xFD, 0x03, 0x40, 0xFF, + 0x00, 0xD0, 0x3F, 0x00, 0xF4, 0x0F, 0x00, 0xFD, 0x03, 0x40, 0xFF, 0x00, 0xD0, 0x3F, 0x00, 0xF0, + 0xBF, 0x06, 0xF8, 0xFF, 0x02, 0xFC, 0xBF, 0x00, 0xF8, 0x2F, + // Unicode: [0x0075, u] + 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, + 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, + 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0x40, 0xBF, 0xFF, 0x01, 0x80, 0xBF, 0xFF, 0x02, 0xC0, 0xBF, + 0xFE, 0x07, 0xE0, 0xBF, 0xFD, 0x6F, 0xF9, 0xBF, 0xF8, 0xFF, 0xFF, 0xBF, 0xE0, 0xFF, 0xAF, 0xBF, + 0x40, 0xFE, 0x46, 0xBF, + // Unicode: [0x0076, v] + 0xFE, 0x03, 0x00, 0xFC, 0xC7, 0x7F, 0x00, 0xD0, 0x3F, 0xF8, 0x0B, 0x00, 0xFE, 0x42, 0xFF, 0x00, + 0xF0, 0x1F, 0xF0, 0x1F, 0x40, 0xFF, 0x00, 0xFE, 0x02, 0xF8, 0x0B, 0xD0, 0x3F, 0xC0, 0x7F, 0x00, + 0xFC, 0x07, 0xFD, 0x03, 0x80, 0xBF, 0xE0, 0x2F, 0x00, 0xF4, 0x0F, 0xFF, 0x01, 0x00, 0xFF, 0xF5, + 0x0F, 0x00, 0xE0, 0xAF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0x2F, 0x00, 0x00, + 0xF4, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, + // Unicode: [0x0077, w] + 0xFE, 0x02, 0xE0, 0x3F, 0x00, 0xFC, 0xF7, 0x0B, 0x80, 0xFF, 0x01, 0xF4, 0xCB, 0x3F, 0x00, 0xFF, + 0x0B, 0xD0, 0x1F, 0xFE, 0x01, 0xFD, 0x3F, 0x80, 0x3F, 0xF8, 0x07, 0xF8, 0xFF, 0x00, 0xBF, 0xD0, + 0x2F, 0xE0, 0xFB, 0x07, 0xFC, 0x02, 0xFF, 0xC0, 0xDF, 0x2F, 0xF4, 0x07, 0xF8, 0x47, 0x3F, 0xFE, + 0xE0, 0x0F, 0xD0, 0x1F, 0xBD, 0xF4, 0xC3, 0x2F, 0x00, 0xBF, 0xF8, 0xD2, 0x1F, 0x7F, 0x00, 0xF8, + 0xF3, 0x07, 0xBF, 0xFD, 0x00, 0xD0, 0xDF, 0x0F, 0xF8, 0xFA, 0x02, 0x40, 0xBF, 0x2F, 0xD0, 0xEF, + 0x0B, 0x00, 0xFC, 0xBF, 0x40, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x01, 0xFC, 0x3F, 0x00, 0x40, 0xFF, + 0x03, 0xE0, 0xBF, 0x00, 0x00, 0xFC, 0x0B, 0x40, 0xFF, 0x01, 0x00, + // Unicode: [0x0078, x] + 0xFD, 0x07, 0xC0, 0xBF, 0xF8, 0x0F, 0xD0, 0x3F, 0xF4, 0x2F, 0xF0, 0x1F, 0xD0, 0x7F, 0xF8, 0x0B, + 0x80, 0xFF, 0xFD, 0x03, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xBF, 0x00, 0x00, 0xFC, 0x3F, 0x00, + 0x00, 0xF4, 0x2F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xFE, 0xBF, 0x00, 0x40, 0xFF, 0xFF, 0x01, + 0x80, 0x7F, 0xFE, 0x03, 0xD0, 0x2F, 0xFC, 0x0B, 0xF0, 0x1F, 0xF4, 0x1F, 0xF8, 0x0B, 0xE0, 0x3F, + 0xFD, 0x03, 0xC0, 0xBF, + // Unicode: [0x0079, y] + 0xFE, 0x03, 0x00, 0xF8, 0xDB, 0x7F, 0x00, 0xC0, 0x7F, 0xFC, 0x0B, 0x00, 0xFD, 0x43, 0xFF, 0x00, + 0xE0, 0x2F, 0xF0, 0x1F, 0x00, 0xFF, 0x00, 0xFE, 0x03, 0xF8, 0x0B, 0xD0, 0x7F, 0xC0, 0x7F, 0x00, + 0xF8, 0x0B, 0xFD, 0x03, 0x40, 0xFF, 0xE0, 0x1F, 0x00, 0xF0, 0x1F, 0xFF, 0x00, 0x00, 0xFE, 0xF6, + 0x0B, 0x00, 0xD0, 0xBF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0x1F, 0x00, 0x00, + 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x02, + 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x00, 0xD0, + 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, + 0x00, + // Unicode: [0x007A, z] + 0xFE, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x5F, 0x55, 0xF5, 0x3F, 0x00, 0xD0, 0x7F, + 0x00, 0xC0, 0xBF, 0x00, 0x80, 0xFF, 0x00, 0x40, 0xFF, 0x01, 0x40, 0xFF, 0x02, 0x00, 0xFF, 0x02, + 0x00, 0xFE, 0x03, 0x00, 0xFD, 0x07, 0x00, 0xFC, 0x0B, 0x00, 0xF8, 0x6F, 0x55, 0xF1, 0xFF, 0xFF, + 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x01, + // Unicode: [0x007B, braceleft] + 0x00, 0xF8, 0x0B, 0xF4, 0xBF, 0x80, 0xFF, 0x0B, 0xFD, 0x6B, 0xD0, 0x3F, 0x00, 0xFD, 0x02, 0xD0, + 0x2F, 0x00, 0xFD, 0x02, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0x80, 0x7F, + 0x00, 0xFC, 0x03, 0xE0, 0x3F, 0xD0, 0xFF, 0x01, 0xFE, 0x06, 0xE0, 0x6F, 0x00, 0xFE, 0x1F, 0x00, + 0xFE, 0x03, 0xC0, 0x3F, 0x00, 0xF8, 0x07, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xC0, 0x3F, 0x00, 0xFC, + 0x03, 0xD0, 0x2F, 0x00, 0xFD, 0x02, 0xD0, 0x2F, 0x00, 0xFD, 0x03, 0xD0, 0xBF, 0x06, 0xF8, 0xBF, + 0x40, 0xFF, 0x0B, 0x80, 0xBF, + // Unicode: [0x007C, bar] + 0xFD, 0xF6, 0xDB, 0x6F, 0xBF, 0xFD, 0xF6, 0xDB, 0x6F, 0xBF, 0xFD, 0xF6, 0xDB, 0x6F, 0xBF, 0xFD, + 0xF6, 0xDB, 0x6F, 0xBF, 0xFD, 0xF6, 0xDB, 0x6F, 0xBF, 0xFD, 0xF6, 0xDB, 0x6F, 0xBF, 0xFD, 0xF6, + 0xDB, 0x6F, 0xBF, + // Unicode: [0x007D, braceright] + 0xFE, 0x06, 0xE0, 0xFF, 0x01, 0xFE, 0x3F, 0x90, 0xFE, 0x07, 0x80, 0xBF, 0x00, 0xF4, 0x0B, 0x80, + 0xBF, 0x00, 0xF8, 0x07, 0x80, 0x7F, 0x00, 0xF8, 0x07, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xC0, 0x3F, + 0x00, 0xFC, 0x07, 0x80, 0xBF, 0x00, 0xF4, 0xBF, 0x00, 0xF9, 0x0F, 0x90, 0xFF, 0x40, 0xFF, 0x0B, + 0xF8, 0x0B, 0xC0, 0x7F, 0x00, 0xFC, 0x03, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0x80, 0x7F, 0x00, 0xF8, + 0x07, 0x80, 0x7F, 0x00, 0xF8, 0x0B, 0x40, 0xBF, 0x00, 0xF8, 0x0B, 0xE9, 0x7F, 0xE0, 0xFF, 0x03, + 0xFE, 0x1F, 0xE0, 0x6F, 0x00, + // Unicode: [0x007E, asciitilde] + 0x40, 0x6A, 0x00, 0xA9, 0xF0, 0xFF, 0x02, 0xBE, 0xF8, 0xFF, 0xEF, 0x7F, 0xFD, 0xFF, 0xFF, 0x2F, + 0xBE, 0xD0, 0xFF, 0x0F, 0x3F, 0x00, 0xFE, 0x02 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_30_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_30_2bpp_4.cpp new file mode 100644 index 00000000..1ba33ed1 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_30_2bpp_4.cpp @@ -0,0 +1,8 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_30_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0xF8, 0x01, 0x2E, 0xD0, 0x4B, 0xFF, 0xF1, 0x2F, 0xFD, 0xE7, 0x7F, 0xFC, 0x4F, 0xFF, 0xF6, 0x1F, + 0xFF, 0xD2, 0x7F, 0xF8, 0x41, 0x2E, 0xD0, 0x0B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_35_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_35_2bpp_0.cpp new file mode 100644 index 00000000..395a2079 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_35_2bpp_0.cpp @@ -0,0 +1,783 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_35_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xFE, 0xDB, 0xBF, 0xFD, 0xDB, 0xBF, 0xFD, 0xDB, 0xBF, 0xFD, 0xDB, 0xBF, 0xFD, 0xD7, 0x7F, 0xFD, + 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0xC7, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x40, 0x2A, 0xFD, 0xEB, + 0xFF, 0xFE, 0xDF, 0xBF, 0xF4, 0x02, + // Unicode: [0x0022, quotedbl] + 0xA9, 0x91, 0x9A, 0x7F, 0xF8, 0xE7, 0x1F, 0xFE, 0xF9, 0x87, 0x7F, 0xFD, 0xE1, 0x5F, 0x7F, 0xF4, + 0xD3, 0x0F, 0xFD, 0xF4, 0x43, 0x3F, + // Unicode: [0x0023, numbersign] + 0x00, 0x00, 0xA4, 0x06, 0x00, 0xA9, 0x02, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0xF8, 0x0F, 0x00, 0x00, + 0xC0, 0xBF, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0x00, 0xFF, 0x01, 0xC0, 0xBF, 0x00, 0x00, 0x00, 0xFD, + 0x07, 0x40, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0xFE, 0x03, 0x00, 0x55, 0xF5, 0x7F, 0x55, + 0xFD, 0x5F, 0x05, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0xE0, 0x2F, 0x00, 0xF8, 0x0B, 0x00, 0x00, 0xC0, 0xBF, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0x40, + 0xFF, 0x01, 0xD0, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x07, 0x40, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x0F, + 0x00, 0xFE, 0x03, 0x00, 0x55, 0xF5, 0x7F, 0x55, 0xFD, 0x5F, 0x05, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, 0x2F, 0x00, 0xFC, 0x0B, 0x00, 0x00, + 0xC0, 0x7F, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x01, 0xD0, 0x7F, 0x00, 0x00, 0x00, 0xFE, + 0x03, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xF0, 0x2F, 0x00, + 0xFC, 0x0B, 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x40, 0x0F, 0x00, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x40, 0x0F, 0x00, 0x00, 0x90, 0xFF, + 0x6F, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0x40, 0xFF, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, 0xE2, + 0xFF, 0xF5, 0xF8, 0x3F, 0xFF, 0x47, 0x0F, 0xFF, 0xF7, 0x3F, 0xF4, 0xA0, 0x6A, 0xFF, 0x43, 0x0F, + 0x00, 0xF0, 0xBF, 0xF4, 0x00, 0x00, 0xFE, 0x6F, 0x0F, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0xF4, + 0xFF, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0xFF, 0x07, 0x00, 0xF9, 0xFF, 0xFF, 0x01, 0x00, 0xF4, 0xFF, + 0x3F, 0x00, 0x40, 0x9F, 0xFF, 0x0B, 0x00, 0xF4, 0xE0, 0xBF, 0x00, 0x40, 0x0F, 0xFD, 0xFB, 0x7F, + 0xF4, 0xD0, 0xBF, 0xFF, 0x4B, 0x0F, 0xFE, 0xEB, 0xFF, 0xF5, 0xF8, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, + 0x42, 0xFF, 0xFF, 0xFF, 0x0F, 0xD0, 0xFF, 0xFF, 0x2F, 0x00, 0x90, 0xFF, 0x6F, 0x00, 0x00, 0x40, + 0x0F, 0x00, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x40, 0x0F, 0x00, 0x00, + // Unicode: [0x0025, percent] + 0x80, 0xBF, 0x01, 0x00, 0xF4, 0x1F, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, + 0x02, 0xD0, 0x7F, 0x00, 0xF4, 0x0B, 0xFE, 0x00, 0xFC, 0x0B, 0x00, 0xFE, 0x40, 0x7F, 0x80, 0xFF, + 0x01, 0x80, 0x3F, 0xD0, 0x1F, 0xF0, 0x2F, 0x00, 0xE0, 0x0F, 0xF4, 0x07, 0xFE, 0x07, 0x00, 0xF4, + 0x0B, 0xFE, 0xC0, 0xBF, 0x00, 0x00, 0xFC, 0xFF, 0x2F, 0xF8, 0x0F, 0x00, 0x00, 0xFD, 0xFF, 0x42, + 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x1B, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x07, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x1F, 0xE4, 0x2F, 0x00, 0x00, + 0x00, 0xFF, 0x82, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x7F, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0x0B, + 0xFF, 0xE1, 0x1F, 0x00, 0x80, 0xFF, 0xD0, 0x1F, 0xF0, 0x0B, 0x00, 0xF4, 0x2F, 0xF4, 0x07, 0xFC, + 0x02, 0x00, 0xFE, 0x03, 0xFD, 0x01, 0xBF, 0x00, 0xD0, 0x7F, 0x40, 0x7F, 0xC0, 0x2F, 0x00, 0xF8, + 0x0F, 0xC0, 0x3F, 0xF8, 0x07, 0x40, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0x00, 0xF0, 0x2F, 0x00, 0xE0, + 0xFF, 0x0F, 0x00, 0xFD, 0x07, 0x00, 0x90, 0xBF, 0x00, + // Unicode: [0x0026, ampersand] + 0x00, 0x40, 0xFE, 0x1B, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x07, 0xFE, 0x0B, 0x00, + 0x00, 0xF0, 0x2F, 0xC0, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0x02, 0x54, 0x01, 0x00, 0x00, 0xF0, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0x0B, 0xC0, 0xFF, 0x40, 0xFF, 0xDB, 0xFF, 0x02, 0xFE, 0x07, 0xFC, 0x1F, 0xF4, 0xBF, 0xF4, + 0x2F, 0xD0, 0xBF, 0x00, 0xFD, 0xEF, 0xFF, 0x01, 0xFE, 0x07, 0x00, 0xFF, 0xFF, 0x0B, 0xE0, 0x3F, + 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xFE, 0x07, 0x00, 0xF0, 0xFF, 0x02, 0xE0, 0xFF, 0x00, 0x40, 0xFF, + 0x3F, 0x00, 0xFD, 0x7F, 0x51, 0xFE, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, + 0xFF, 0xFF, 0xFF, 0xF6, 0xBF, 0x00, 0xF4, 0xFF, 0xFF, 0x07, 0xFD, 0x2F, 0x00, 0xE4, 0xBF, 0x06, + 0x40, 0xFF, 0x0B, + // Unicode: [0x0027, quotesingle] + 0xA9, 0xF9, 0xE7, 0x9F, 0x7F, 0xFD, 0xF5, 0xD7, 0x4F, 0x3F, + // Unicode: [0x0028, parenleft] + 0x00, 0x00, 0xAA, 0x06, 0x00, 0xF8, 0x2F, 0x00, 0xE0, 0xBF, 0x00, 0x40, 0xFF, 0x02, 0x00, 0xFC, + 0x1F, 0x00, 0xE0, 0xBF, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xF8, 0x1F, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0xFD, 0x0B, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0xF4, 0x2F, 0x00, 0x80, 0xFF, 0x01, + 0x00, 0xF8, 0x0F, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0xFD, + 0x0B, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFD, 0x07, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFD, 0x0B, 0x00, + 0xC0, 0xBF, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x40, 0xFF, + 0x01, 0x00, 0xF4, 0x2F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFD, 0x0B, 0x00, + 0xC0, 0xFF, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xFC, + 0x1F, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0xF8, 0x2F, + // Unicode: [0x0029, parenright] + 0xA9, 0x0A, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x40, 0xFF, + 0x03, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x40, 0xFF, 0x02, 0x00, 0xF0, 0x3F, 0x00, + 0x00, 0xFE, 0x07, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xF4, + 0x2F, 0x00, 0x00, 0xFF, 0x02, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xE0, 0x3F, 0x00, + 0x00, 0xFE, 0x03, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, + 0x03, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xF0, 0x3F, 0x00, 0x40, 0xFF, 0x02, 0x00, + 0xF4, 0x1F, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xFC, 0x0F, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFE, 0x07, + 0x00, 0xF0, 0x3F, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xFD, 0x0F, 0x00, 0xE0, 0x7F, 0x00, 0x40, 0xFF, + 0x03, 0x00, 0xFD, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0x80, 0xFF, 0x02, 0x00, + // Unicode: [0x002A, asterisk] + 0x00, 0x54, 0x01, 0x00, 0x80, 0x2F, 0x00, 0x10, 0xF4, 0x42, 0x40, 0x4B, 0x1F, 0x2D, 0xFC, 0xF2, + 0xF9, 0xD3, 0xFF, 0xFF, 0x7F, 0x90, 0xFF, 0x6F, 0x00, 0xE4, 0xBF, 0x01, 0xF4, 0xFF, 0xFF, 0xD1, + 0xBF, 0xEF, 0x7F, 0xF8, 0xF5, 0xF5, 0x43, 0x47, 0x2F, 0x1C, 0x00, 0xF4, 0x02, 0x00, 0x80, 0x3F, + 0x00, + // Unicode: [0x002B, plus] + 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFE, + 0x03, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x55, 0xE5, 0x7F, 0x55, 0xF5, + 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, + 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x03, + 0x00, + // Unicode: [0x002C, comma] + 0xD0, 0xBF, 0xE0, 0x3F, 0xE0, 0x2F, 0xF0, 0x1F, 0xF4, 0x0F, 0xF4, 0x0B, 0xF8, 0x03, 0xFC, 0x02, + 0xFC, 0x01, 0xFD, 0x00, + // Unicode: [0x002D, hyphen] + 0x54, 0x55, 0x55, 0x15, 0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0x7F, + 0xFE, 0xFF, 0xFF, 0x7F, + // Unicode: [0x002E, period] + 0xA0, 0x02, 0xFF, 0xD3, 0xFF, 0xF5, 0x7F, 0xFC, 0x1F, 0xB9, 0x01, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xF0, 0x2F, 0x00, + 0x00, 0xFD, 0x07, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x40, + 0xFF, 0x02, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFF, 0x02, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xF0, 0x2F, 0x00, + 0x00, 0xFD, 0x07, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x40, + 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFF, 0x02, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0xF4, 0x2F, 0x00, + 0x00, 0xFD, 0x07, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x40, + 0xFF, 0x01, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0xFF, 0x02, 0x00, 0xD0, 0x7F, + 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0x50, 0x5A, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x06, 0x00, 0xF8, 0xFF, 0xFF, 0x07, 0x80, 0xFF, + 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0xFF, 0x03, 0xFE, 0x1F, 0xE0, 0xFF, 0xC1, 0xFF, 0x01, 0xE0, + 0xBF, 0xF4, 0x2F, 0x00, 0xF0, 0x3F, 0xFE, 0x07, 0x00, 0xF8, 0x9F, 0xFF, 0x00, 0x00, 0xFD, 0xF7, + 0x3F, 0x00, 0x40, 0xFF, 0xFE, 0x0B, 0x00, 0xC0, 0xBF, 0xFF, 0x02, 0x00, 0xF0, 0xEF, 0xBF, 0x00, + 0x00, 0xFC, 0xFB, 0x2F, 0x00, 0x00, 0xFF, 0xFE, 0x0B, 0x00, 0xC0, 0xBF, 0xFF, 0x02, 0x00, 0xF4, + 0xEF, 0xFF, 0x00, 0x00, 0xFD, 0xE7, 0x3F, 0x00, 0x40, 0xFF, 0xF9, 0x1F, 0x00, 0xE0, 0x3F, 0xFD, + 0x0B, 0x00, 0xFD, 0x0B, 0xFF, 0x0B, 0xC0, 0xFF, 0x41, 0xFF, 0xAF, 0xFE, 0x3F, 0xC0, 0xFF, 0xFF, + 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xBF, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0x40, 0xFE, 0x2B, 0x00, + 0x00, + // Unicode: [0x0031, one] + 0xFE, 0xFF, 0xFA, 0xFF, 0xEB, 0xFF, 0xAF, 0xFF, 0xBF, 0xA9, 0xFF, 0x02, 0xFD, 0x0B, 0xF4, 0x2F, + 0xD0, 0xBF, 0x40, 0xFF, 0x02, 0xFD, 0x0B, 0xF4, 0x2F, 0xD0, 0xBF, 0x40, 0xFF, 0x02, 0xFD, 0x0B, + 0xF4, 0x2F, 0xD0, 0xBF, 0x40, 0xFF, 0x02, 0xFD, 0x0B, 0xF4, 0x2F, 0xD0, 0xBF, 0x40, 0xFF, 0x02, + 0xFD, 0x0B, 0xF4, 0x2F, 0xD0, 0xBF, 0x40, 0xFF, 0x02, 0xFD, 0x0B, + // Unicode: [0x0032, two] + 0x00, 0xE4, 0xBF, 0x01, 0x00, 0xE4, 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, + 0xFF, 0x1F, 0xF8, 0xBF, 0xE5, 0xFF, 0xC2, 0xFF, 0x01, 0xF4, 0x3F, 0xFD, 0x0B, 0x00, 0xFF, 0xD7, + 0x7F, 0x00, 0xE0, 0x7F, 0xA9, 0x06, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x1F, + 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x40, 0xFF, + 0x1F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, + 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, + // Unicode: [0x0033, three] + 0x00, 0xA4, 0xBF, 0x06, 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0xBF, 0x00, 0xFF, 0xFF, + 0xFF, 0x2F, 0xF4, 0xBF, 0xD5, 0xFF, 0x83, 0xFF, 0x02, 0xF0, 0x7F, 0xFC, 0x0F, 0x00, 0xFD, 0x87, + 0x6A, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xD0, + 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, + 0xD0, 0xFF, 0xFF, 0x00, 0x00, 0x40, 0xF9, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xC0, + 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xDF, 0x7F, 0x00, 0x80, 0xFF, 0xFD, 0x0B, 0x00, 0xFC, 0xCB, 0xFF, + 0x01, 0xE0, 0xBF, 0xF8, 0xBF, 0x95, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x3F, 0xD0, 0xFF, 0xFF, 0xFF, + 0x00, 0xE4, 0xFF, 0xFF, 0x02, 0x00, 0xA4, 0xBF, 0x06, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x00, 0xA9, 0x06, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0xBF, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, + 0x00, 0xF0, 0xAF, 0xBF, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x02, 0x00, 0xD0, 0x7F, 0xF8, 0x0B, 0x00, + 0xC0, 0xBF, 0xE0, 0x2F, 0x00, 0x80, 0xFF, 0x80, 0xBF, 0x00, 0x80, 0xFF, 0x01, 0xFE, 0x02, 0x40, + 0xFF, 0x02, 0xF8, 0x0B, 0x00, 0xFF, 0x03, 0xE0, 0x2F, 0x00, 0xFE, 0x07, 0x80, 0xBF, 0x00, 0xFD, + 0x0B, 0x00, 0xFE, 0x02, 0xFC, 0x5F, 0x55, 0xFD, 0x5F, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0xF0, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xFC, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0x2F, 0x00, + // Unicode: [0x0035, five] + 0xFE, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, + 0xFF, 0x0F, 0xFE, 0x56, 0x55, 0x55, 0xE0, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xE0, + 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x92, 0xBF, 0x06, 0xE0, 0xAF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, + 0xBF, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0x6F, 0xD4, 0xFF, 0xE2, 0xBF, 0x00, 0xF0, 0x3F, 0xFE, + 0x03, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x00, 0xC0, + 0xBF, 0x55, 0x01, 0x00, 0xFD, 0xFB, 0x3F, 0x00, 0xE0, 0x7F, 0xFE, 0x0B, 0x40, 0xFF, 0xD3, 0xFF, + 0x56, 0xFE, 0x2F, 0xF8, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0x1F, + 0x00, 0x90, 0xFE, 0x1B, 0x00, + // Unicode: [0x0036, six] + 0x00, 0xA0, 0xBF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0xF8, 0xFF, 0xFF, 0x0B, 0x40, 0xFF, + 0xFF, 0xFF, 0x07, 0xF0, 0xBF, 0x91, 0xFF, 0x03, 0xFD, 0x07, 0x80, 0xFF, 0x81, 0xBF, 0x00, 0xD0, + 0x7F, 0xF0, 0x1F, 0x00, 0x50, 0x15, 0xFD, 0x03, 0x00, 0x00, 0x40, 0xFF, 0x00, 0x00, 0x00, 0xD0, + 0x2F, 0xE4, 0xBF, 0x00, 0xF4, 0x8B, 0xFF, 0xFF, 0x01, 0xFE, 0xFE, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE1, 0xFF, 0x07, 0xF4, 0xBF, 0xF8, 0x3F, 0x00, 0xF4, 0x3F, 0xFD, 0x07, 0x00, 0xF8, + 0x5F, 0xFF, 0x01, 0x00, 0xFD, 0xD7, 0x3F, 0x00, 0x40, 0xFF, 0xF1, 0x1F, 0x00, 0xD0, 0x7F, 0xF8, + 0x0B, 0x00, 0xF8, 0x0F, 0xFD, 0x07, 0x40, 0xFF, 0x03, 0xFF, 0x5B, 0xF9, 0x7F, 0x40, 0xFF, 0xFF, + 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFA, 0x6F, 0x00, + 0x00, + // Unicode: [0x0037, seven] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x55, 0x55, 0x55, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, + 0xF4, 0x2F, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, + 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xF4, 0x2F, 0x00, + 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xF4, 0x2F, 0x00, 0x00, 0xE0, 0x7F, + 0x00, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0xE4, 0xBF, 0x06, 0x00, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0xFF, 0x0F, 0xD0, 0xFF, + 0xFF, 0xFF, 0x0B, 0xFC, 0x7F, 0x90, 0xFF, 0x47, 0xFF, 0x03, 0x80, 0xFF, 0xD2, 0xBF, 0x00, 0xC0, + 0xBF, 0xF4, 0x1F, 0x00, 0xF0, 0x2F, 0xFD, 0x0B, 0x00, 0xFC, 0x0B, 0xFF, 0x02, 0x40, 0xFF, 0x41, + 0xFF, 0x02, 0xF4, 0x3F, 0x80, 0xFF, 0xEB, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0x2F, 0x00, 0xE4, 0xFF, + 0xFF, 0x1F, 0x40, 0xFF, 0xFF, 0xFF, 0x2F, 0xF0, 0xBF, 0x01, 0xFD, 0x1F, 0xFD, 0x0B, 0x00, 0xFD, + 0x8F, 0xFF, 0x00, 0x00, 0xFE, 0xF7, 0x2F, 0x00, 0x40, 0xFF, 0xFD, 0x0B, 0x00, 0xD0, 0x7F, 0xFF, + 0x03, 0x00, 0xF8, 0x9F, 0xFF, 0x02, 0x40, 0xFF, 0xD3, 0xFF, 0x06, 0xF9, 0xBF, 0xE0, 0xFF, 0xFF, + 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0x40, 0xFE, 0x6B, 0x00, + 0x00, + // Unicode: [0x0039, nine] + 0x00, 0x00, 0x01, 0x00, 0x00, 0x90, 0xFF, 0x6F, 0x00, 0x80, 0xFF, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, + 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0x06, 0xF9, 0x2F, 0xFD, 0x0B, 0x00, 0xFE, 0xE3, + 0x7F, 0x00, 0xC0, 0x7F, 0xFE, 0x03, 0x00, 0xFC, 0xEB, 0x3F, 0x00, 0xC0, 0xBF, 0xFE, 0x07, 0x00, + 0xFC, 0xDB, 0xBF, 0x00, 0xE0, 0xFF, 0xFC, 0x6F, 0x90, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, + 0xFF, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0x6F, 0xFF, 0x00, 0xF9, 0x6F, 0xF4, 0x0F, 0x00, 0x00, 0x80, + 0xBF, 0x00, 0x00, 0x00, 0xF8, 0x4B, 0x55, 0x00, 0xC0, 0x7F, 0xFC, 0x0F, 0x00, 0xFD, 0x87, 0xFF, + 0x01, 0xE0, 0x3F, 0xF4, 0xBF, 0x91, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, 0x0F, 0xC0, 0xFF, 0xFF, 0x7F, + 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0xE4, 0xBF, 0x02, 0x00, + // Unicode: [0x003A, colon] + 0xE4, 0x06, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFC, 0x0F, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xF0, 0x3F, 0xFD, 0x5F, 0xFF, 0xC7, + 0xFF, 0x91, 0x1B, + // Unicode: [0x003B, semicolon] + 0x90, 0x1B, 0xF4, 0x3F, 0xF8, 0x7F, 0xF4, 0x7F, 0xF0, 0x3F, 0x90, 0x0A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x7F, + 0xE0, 0x3F, 0xF0, 0x2F, 0xF0, 0x1F, 0xF4, 0x0F, 0xF8, 0x07, 0xF8, 0x03, 0xFC, 0x02, 0xFD, 0x01, + 0xBD, 0x00, + // Unicode: [0x003C, less] + 0x00, 0xC0, 0xFF, 0x03, 0xC0, 0xFF, 0x07, 0xC0, 0xFF, 0x07, 0x80, 0xFF, 0x07, 0x80, 0xFF, 0x07, + 0x80, 0xFF, 0x07, 0x80, 0xFF, 0x07, 0x80, 0xFF, 0x07, 0x00, 0xFE, 0x1F, 0x00, 0xE0, 0xFF, 0x01, + 0x00, 0xFE, 0x1F, 0x00, 0xF0, 0xFF, 0x01, 0x00, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0x01, 0x00, 0xFF, + 0x1F, 0x00, 0xF4, 0xFF, + // Unicode: [0x003D, equal] + 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, + 0xFF, 0xFF, 0xFF, 0x7F, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x15, 0xFE, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, + 0x7F, + // Unicode: [0x003E, greater] + 0xFD, 0x2F, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0x02, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0xFE, + 0x2F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0x80, 0xFF, 0x0B, + 0x00, 0xFE, 0x2F, 0x00, 0xF8, 0xBF, 0x00, 0xE0, 0xFF, 0x02, 0x80, 0xFF, 0x0B, 0x00, 0xFD, 0x2F, + 0x00, 0xF4, 0xBF, 0x00, 0xD0, 0xFF, 0x02, 0x00, + // Unicode: [0x003F, question] + 0x00, 0xE9, 0x6F, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, + 0x1F, 0xFD, 0x6F, 0xF5, 0xBF, 0xF8, 0x1F, 0x00, 0xFF, 0xE3, 0x3F, 0x00, 0xF8, 0x5F, 0x55, 0x00, + 0xD0, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x90, 0xFF, 0x0B, 0xD0, + 0xFF, 0xFF, 0x0F, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0x5F, 0x00, 0x00, + 0xD0, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFC, 0x2F, + 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x02, 0x00, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0x00, 0x00, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x0A, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0x80, 0xFF, 0x6F, 0x00, 0xE4, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xF4, + 0x3F, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x02, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xF4, 0x1F, 0x40, 0xFF, 0x01, 0xE4, 0x2F, 0xA9, 0x82, 0xBF, 0x00, 0xFF, 0x01, 0xFD, 0xFF, 0xFB, + 0x0B, 0xFC, 0x03, 0xFD, 0x02, 0xFD, 0xFF, 0xFF, 0x1F, 0xF0, 0x0F, 0xFC, 0x03, 0xFC, 0xBF, 0xFF, + 0x7F, 0x80, 0x7F, 0xF4, 0x0B, 0xF8, 0x1F, 0xD0, 0xFF, 0x00, 0xFE, 0xE1, 0x1F, 0xF4, 0x1F, 0x00, + 0xFE, 0x03, 0xF8, 0xC7, 0x3F, 0xE0, 0x2F, 0x00, 0xF4, 0x0B, 0xE0, 0x0F, 0xBF, 0xC0, 0x7F, 0x00, + 0xD0, 0x2F, 0x80, 0x3F, 0xFD, 0x02, 0xFF, 0x01, 0x80, 0x7F, 0x00, 0xBF, 0xF4, 0x07, 0xFC, 0x07, + 0x00, 0xFF, 0x01, 0xFD, 0xD1, 0x1F, 0xF0, 0x1F, 0x00, 0xFE, 0x03, 0xF8, 0x43, 0x7F, 0xC0, 0xFF, + 0x00, 0xFE, 0x0F, 0xF4, 0x0B, 0xFD, 0x01, 0xFE, 0xAF, 0xFF, 0xBF, 0xF5, 0x0F, 0xF4, 0x0B, 0xF4, + 0xFF, 0xFF, 0xFD, 0xFF, 0x1F, 0xC0, 0x3F, 0x80, 0xFF, 0xBF, 0xE1, 0xFF, 0x1F, 0x00, 0xFF, 0x01, + 0xE4, 0x6F, 0x00, 0xF9, 0x0A, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x16, 0x40, 0x79, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x54, 0x55, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xF7, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0xFC, 0x0F, 0x00, 0x00, 0xF4, + 0x2F, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0x80, 0xFF, 0x00, 0x00, + 0xF4, 0x2F, 0xD0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0xF0, 0x2F, 0x00, 0xC0, 0xFF, 0x00, 0xF8, 0x0F, + 0x00, 0xF4, 0x2F, 0x00, 0xFD, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0xF4, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0xF8, 0x2F, 0x00, 0x00, 0xFD, 0x0B, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xD3, 0xFF, + 0x00, 0x00, 0x80, 0xFF, 0xF9, 0x2F, 0x00, 0x00, 0xD0, 0xBF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0x3F, + // Unicode: [0x0042, B] + 0xFE, 0xFF, 0xFF, 0x1A, 0x80, 0xFF, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, + 0xFF, 0xFF, 0x2F, 0xFE, 0x07, 0x40, 0xFF, 0x8F, 0xFF, 0x01, 0x00, 0xFF, 0xE7, 0x7F, 0x00, 0x80, + 0xFF, 0xF9, 0x1F, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0xFC, 0x8F, 0xFF, 0x01, 0x80, 0xFF, 0xE2, + 0xFF, 0xAA, 0xFF, 0x2F, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE0, 0x7F, 0x00, 0xE4, 0xFF, 0xF8, 0x1F, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0xF0, + 0xAF, 0xFF, 0x01, 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0x00, 0xFF, 0xFB, 0x1F, 0x00, 0xE0, 0xBF, 0xFE, + 0x07, 0x40, 0xFE, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, + 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x1B, 0x00, + // Unicode: [0x0043, C] + 0x00, 0x00, 0xE9, 0xBF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xAF, 0xEA, 0xFF, 0x1F, 0xE0, 0xFF, + 0x06, 0x00, 0xFE, 0x3F, 0xF4, 0xBF, 0x00, 0x00, 0xF8, 0x7F, 0xFC, 0x2F, 0x00, 0x00, 0xE0, 0xFF, + 0xFD, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0xF4, 0xBF, 0x00, 0x00, + 0xF8, 0x7F, 0xE0, 0xFF, 0x02, 0x00, 0xFE, 0x3F, 0xC0, 0xFF, 0xAF, 0xE9, 0xFF, 0x1F, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xE9, 0xBF, 0x01, 0x00, + // Unicode: [0x0044, D] + 0xFE, 0xFF, 0xBF, 0x06, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0x57, 0x95, 0xFF, 0x7F, 0xE0, 0x7F, 0x00, 0x40, 0xFF, + 0x0F, 0xFE, 0x07, 0x00, 0xD0, 0xFF, 0xE1, 0x7F, 0x00, 0x00, 0xF4, 0x3F, 0xFE, 0x07, 0x00, 0x00, + 0xFF, 0xE7, 0x7F, 0x00, 0x00, 0xE0, 0xBF, 0xFE, 0x07, 0x00, 0x00, 0xFD, 0xEB, 0x7F, 0x00, 0x00, + 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0x00, 0xFD, 0xEB, 0x7F, 0x00, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, + 0x00, 0xFD, 0xEB, 0x7F, 0x00, 0x00, 0xE0, 0xBF, 0xFE, 0x07, 0x00, 0x00, 0xFF, 0xE7, 0x7F, 0x00, + 0x00, 0xF4, 0x3F, 0xFE, 0x07, 0x00, 0xD0, 0xFF, 0xE2, 0x7F, 0x00, 0x40, 0xFF, 0x0F, 0xFE, 0x57, + 0x95, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, + 0xFF, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0xBF, 0x06, 0x00, 0x00, + // Unicode: [0x0045, E] + 0xFE, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xBF, 0xFE, + 0x07, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFE, 0x07, + 0x00, 0x80, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xBF, 0xF8, 0xFF, 0xFF, 0x2F, 0xFE, 0xFF, 0xFF, + 0x8B, 0xFF, 0xFF, 0xFF, 0xE2, 0x7F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x80, + 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x80, 0xFF, + 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0x2F, + // Unicode: [0x0046, F] + 0xFE, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xBF, + 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, + 0xFE, 0xFF, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x03, 0xFE, 0x07, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, + // Unicode: [0x0047, G] + 0x00, 0x00, 0xE9, 0xBF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0xD0, 0xFF, 0xFF, + 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0xEA, 0xFF, 0x1F, 0x80, + 0xFF, 0x1B, 0x00, 0xF8, 0xFF, 0x40, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x0B, 0xFF, 0x0B, 0x00, 0x00, + 0xA8, 0x2A, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0xBF, 0xFE, 0x07, 0x80, 0xFF, 0xFF, + 0xFF, 0xFA, 0x1F, 0x00, 0xFE, 0xFF, 0xFF, 0xEB, 0x7F, 0x00, 0xA4, 0xAA, 0xFE, 0x6F, 0xFF, 0x02, + 0x00, 0x00, 0xD0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0xF1, 0xBF, 0x00, 0x00, 0x40, 0xFF, + 0x43, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0x0B, 0xF8, 0xBF, 0x01, 0x40, 0xFF, 0x0F, 0xC0, 0xFF, 0xBF, + 0xEA, 0xFF, 0x1F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0xF4, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE9, 0xBF, 0x01, 0x00, 0x00, + // Unicode: [0x0048, H] + 0xFE, 0x07, 0x00, 0x40, 0xFF, 0xFA, 0x1F, 0x00, 0x00, 0xFD, 0xEB, 0x7F, 0x00, 0x00, 0xF4, 0xAF, + 0xFF, 0x01, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0x40, 0xFF, 0xFA, 0x1F, 0x00, 0x00, 0xFD, 0xEB, + 0x7F, 0x00, 0x00, 0xF4, 0xAF, 0xFF, 0x01, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0x40, 0xFF, 0xFA, + 0x1F, 0x00, 0x00, 0xFD, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0x7F, 0x00, 0x00, 0xF4, 0xAF, 0xFF, + 0x01, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0x40, 0xFF, 0xFA, 0x1F, 0x00, 0x00, 0xFD, 0xEB, 0x7F, + 0x00, 0x00, 0xF4, 0xAF, 0xFF, 0x01, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0x40, 0xFF, 0xFA, 0x1F, + 0x00, 0x00, 0xFD, 0xEB, 0x7F, 0x00, 0x00, 0xF4, 0xAF, 0xFF, 0x01, 0x00, 0xD0, 0xBF, 0xFE, 0x07, + 0x00, 0x40, 0xFF, 0x02, + // Unicode: [0x0049, I] + 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, + 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, + 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0x07, + // Unicode: [0x004A, J] + 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0xD0, 0xBF, 0xAA, 0x06, 0xD0, 0xBF, 0xFE, 0x07, 0xD0, 0xBF, 0xFD, 0x0B, 0xF0, 0x7F, + 0xFC, 0xBF, 0xFE, 0x3F, 0xF8, 0xFF, 0xFF, 0x2F, 0xF0, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x02, + 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x004B, K] + 0xFE, 0x07, 0x00, 0xF4, 0xBF, 0xFE, 0x07, 0x00, 0xFC, 0x3F, 0xFE, 0x07, 0x00, 0xFE, 0x0F, 0xFE, + 0x07, 0x80, 0xFF, 0x07, 0xFE, 0x07, 0xD0, 0xFF, 0x01, 0xFE, 0x07, 0xF4, 0xBF, 0x00, 0xFE, 0x07, + 0xFC, 0x2F, 0x00, 0xFE, 0x07, 0xFE, 0x0F, 0x00, 0xFE, 0x87, 0xFF, 0x07, 0x00, 0xFE, 0xD7, 0xFF, + 0x01, 0x00, 0xFE, 0xF7, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, + 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0xFB, 0xBF, 0x00, 0x00, 0xFE, 0xD7, 0xFF, 0x02, 0x00, + 0xFE, 0x87, 0xFF, 0x07, 0x00, 0xFE, 0x07, 0xFE, 0x1F, 0x00, 0xFE, 0x07, 0xFC, 0x3F, 0x00, 0xFE, + 0x07, 0xF4, 0xFF, 0x00, 0xFE, 0x07, 0xD0, 0xFF, 0x02, 0xFE, 0x07, 0x80, 0xFF, 0x0B, 0xFE, 0x07, + 0x00, 0xFE, 0x1F, 0xFE, 0x07, 0x00, 0xFC, 0x7F, 0xFE, 0x07, 0x00, 0xF4, 0xFF, + // Unicode: [0x004C, L] + 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, + 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, + 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, + 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, + 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, + 0xE7, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0x07, + // Unicode: [0x004D, M] + 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xEF, 0xFF, 0x03, + 0x00, 0x00, 0xE0, 0xFF, 0xFB, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0x40, + 0xFF, 0xBF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xEF, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0xFB, + 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0xF0, 0xFF, 0xBF, 0xFF, 0xFE, 0x03, + 0x00, 0xFD, 0xFF, 0xEF, 0x7F, 0xFF, 0x01, 0xC0, 0x7F, 0xFF, 0xFB, 0x9F, 0xBF, 0x00, 0xF4, 0xCF, + 0xFF, 0xFE, 0xC7, 0x7F, 0x00, 0xFE, 0xF2, 0xBF, 0xFF, 0xE1, 0x2F, 0xC0, 0x7F, 0xFC, 0xEF, 0x7F, + 0xF4, 0x0F, 0xF8, 0x0F, 0xFF, 0xFB, 0x1F, 0xFC, 0x07, 0xFF, 0xC1, 0xFF, 0xFE, 0x07, 0xFE, 0xD3, + 0x3F, 0xF0, 0xBF, 0xFF, 0x01, 0xFF, 0xF9, 0x0B, 0xFC, 0xEF, 0x7F, 0x80, 0xFF, 0xFF, 0x01, 0xFF, + 0xFB, 0x1F, 0xD0, 0xFF, 0x2F, 0xC0, 0xFF, 0xFE, 0x07, 0xF0, 0xFF, 0x07, 0xF0, 0xBF, 0xFF, 0x01, + 0xF8, 0xFF, 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0xFC, 0x2F, 0x00, 0xFF, 0xFB, 0x1F, 0x00, 0xFE, 0x07, + 0xC0, 0xFF, 0xFE, 0x07, 0x40, 0xBF, 0x00, 0xF0, 0x3F, + // Unicode: [0x004E, N] + 0xFE, 0x0B, 0x00, 0x00, 0xFE, 0xE7, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0xFE, + 0xE7, 0xFF, 0x0B, 0x00, 0xE0, 0x7F, 0xFE, 0xFF, 0x01, 0x00, 0xFE, 0xE7, 0xFF, 0x3F, 0x00, 0xE0, + 0x7F, 0xFE, 0xFF, 0x0B, 0x00, 0xFE, 0xE7, 0xFF, 0xFF, 0x01, 0xE0, 0x7F, 0xFE, 0xFB, 0x2F, 0x00, + 0xFE, 0xE7, 0x7F, 0xFE, 0x07, 0xE0, 0x7F, 0xFE, 0xC7, 0xFF, 0x00, 0xFE, 0xE7, 0x7F, 0xF4, 0x2F, + 0xE0, 0x7F, 0xFE, 0x07, 0xFE, 0x07, 0xFE, 0xE7, 0x7F, 0xC0, 0xFF, 0xE0, 0x7F, 0xFE, 0x07, 0xF4, + 0x2F, 0xFE, 0xE7, 0x7F, 0x00, 0xFE, 0xE7, 0x7F, 0xFE, 0x07, 0xC0, 0xFF, 0xFE, 0xE7, 0x7F, 0x00, + 0xF4, 0xFF, 0x7F, 0xFE, 0x07, 0x00, 0xFE, 0xFF, 0xE7, 0x7F, 0x00, 0xD0, 0xFF, 0x7F, 0xFE, 0x07, + 0x00, 0xF8, 0xFF, 0xE7, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0xFE, 0x07, 0x00, 0xD0, 0xFF, 0xE7, 0x7F, + 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0xFF, 0x07, + // Unicode: [0x004F, O] + 0x00, 0x00, 0xE9, 0xBF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xC0, 0xFF, 0xAF, 0xEA, 0xFF, 0x1F, + 0x00, 0xFE, 0x6F, 0x00, 0xD0, 0xFF, 0x07, 0xF4, 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x80, 0xFF, 0x02, + 0x00, 0x00, 0xFD, 0x1F, 0xFC, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0xD2, 0xBF, 0x00, 0x00, 0x00, 0xF4, + 0x3F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xE3, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFE, 0x07, + 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, + 0xFF, 0xD3, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0xFC, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x82, 0xFF, + 0x02, 0x00, 0x00, 0xFD, 0x1F, 0xF4, 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0xFE, 0x2F, 0x00, 0xD0, + 0xFF, 0x07, 0xC0, 0xFF, 0xAF, 0xE9, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE9, 0xBF, + 0x01, 0x00, 0x00, + // Unicode: [0x0050, P] + 0xFE, 0xFF, 0xBF, 0x06, 0x80, 0xFF, 0xFF, 0xFF, 0x1B, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFE, 0x07, 0x90, 0xFF, 0x8B, 0xFF, 0x01, 0x40, 0xFF, 0xE3, 0x7F, 0x00, 0xC0, + 0xFF, 0xF8, 0x1F, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0xFC, 0x8F, 0xFF, 0x01, 0x40, 0xFF, 0xE3, + 0x7F, 0x00, 0xF4, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, + 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0x6F, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, + 0x80, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xFE, + 0x07, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, + 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0x00, 0xE9, 0xBF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xC0, 0xFF, 0xAF, 0xEA, 0xFF, 0x1F, + 0x00, 0xFE, 0x6F, 0x00, 0xD0, 0xFF, 0x07, 0xF4, 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x80, 0xFF, 0x02, + 0x00, 0x00, 0xFD, 0x1F, 0xFC, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0xD2, 0xBF, 0x00, 0x00, 0x00, 0xF4, + 0x3F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xE3, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFE, 0x07, + 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, + 0xFF, 0xD3, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0xFC, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x82, 0xFF, + 0x02, 0x00, 0x00, 0xFD, 0x1F, 0xF4, 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0xFE, 0x2F, 0x00, 0xD0, + 0xFF, 0x03, 0xC0, 0xFF, 0xAF, 0xE9, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xE9, 0xBF, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, + // Unicode: [0x0052, R] + 0xFE, 0xFF, 0xFF, 0x06, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, + 0xFF, 0xFF, 0x1F, 0xFE, 0x07, 0x90, 0xFF, 0x8B, 0xFF, 0x01, 0x40, 0xFF, 0xE3, 0x7F, 0x00, 0xC0, + 0xFF, 0xF9, 0x1F, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0xF8, 0x9F, 0xFF, 0x01, 0x00, 0xFF, 0xE3, + 0x7F, 0x00, 0xE0, 0xBF, 0xF8, 0xAF, 0xEA, 0xFF, 0x1F, 0xFE, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, + 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0x1F, 0xFC, 0x1F, 0x00, 0xFE, 0x07, 0xFE, 0x0F, + 0x80, 0xFF, 0x01, 0xFF, 0x07, 0xE0, 0x7F, 0x40, 0xFF, 0x03, 0xF8, 0x1F, 0xC0, 0xFF, 0x02, 0xFE, + 0x07, 0xD0, 0xFF, 0x81, 0xFF, 0x01, 0xF0, 0xBF, 0xE0, 0x7F, 0x00, 0xF4, 0x7F, 0xF8, 0x1F, 0x00, + 0xF8, 0x2F, 0xFE, 0x07, 0x00, 0xFD, 0x1F, + // Unicode: [0x0053, S] + 0x00, 0xE9, 0xAF, 0x01, 0x00, 0xF9, 0xFF, 0xBF, 0x01, 0xF4, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, + 0xFF, 0x0F, 0xFE, 0x5F, 0xE5, 0xFF, 0xF2, 0x7F, 0x00, 0xF8, 0x3F, 0xFF, 0x03, 0x40, 0xFF, 0xF3, + 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x06, 0x00, 0x00, 0xFD, 0xFF, 0x1B, + 0x00, 0x40, 0xFF, 0xFF, 0x2F, 0x00, 0x90, 0xFF, 0xFF, 0x2F, 0x00, 0x90, 0xFF, 0xFF, 0x0B, 0x00, + 0x40, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x57, 0x15, 0x00, 0xE0, + 0x7F, 0xFF, 0x07, 0x00, 0xFE, 0xF7, 0xBF, 0x00, 0xF0, 0x7F, 0xFE, 0x6F, 0xD4, 0xFF, 0xC3, 0xFF, + 0xFF, 0xFF, 0x1F, 0xF4, 0xFF, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0xE9, 0xBF, 0x01, + 0x00, + // Unicode: [0x0054, T] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, + 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, + 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, + 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, + 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, + 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0xD0, 0xBF, 0x00, + 0x00, + // Unicode: [0x0055, U] + 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, + 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, + 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, + 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, + 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, + 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFD, 0x0B, 0x00, 0xD0, 0xFF, 0xFD, 0x0F, 0x00, 0xE0, 0xBF, 0xFC, + 0x2F, 0x00, 0xF8, 0x7F, 0xF4, 0xFF, 0xAA, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x90, 0xFF, 0x1A, 0x00, + // Unicode: [0x0056, V] + 0xFD, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xF1, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0x82, 0xFF, 0x02, 0x00, + 0x00, 0xFE, 0x07, 0xFD, 0x0F, 0x00, 0x00, 0xFC, 0x0F, 0xF0, 0x7F, 0x00, 0x00, 0xF4, 0x2F, 0x80, + 0xFF, 0x02, 0x00, 0xE0, 0x7F, 0x00, 0xFD, 0x0F, 0x00, 0xC0, 0xFF, 0x00, 0xE0, 0x7F, 0x00, 0x40, + 0xFF, 0x02, 0x40, 0xFF, 0x02, 0x00, 0xFE, 0x07, 0x00, 0xFC, 0x0F, 0x00, 0xFC, 0x0F, 0x00, 0xE0, + 0x7F, 0x00, 0xF4, 0x2F, 0x00, 0x40, 0xFF, 0x02, 0xE0, 0x7F, 0x00, 0x00, 0xFC, 0x0F, 0xC0, 0xFF, + 0x00, 0x00, 0xE0, 0x7F, 0x40, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0x02, 0xFE, 0x03, 0x00, 0x00, 0xFC, + 0x0F, 0xFC, 0x0B, 0x00, 0x00, 0xE0, 0x7F, 0xF4, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xE2, 0x3F, 0x00, + 0x00, 0x00, 0xFC, 0xCF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0x00, + // Unicode: [0x0057, W] + 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0xE0, + 0xBF, 0xFE, 0x0B, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0xFE, 0xD7, 0xBF, 0x00, 0x80, 0xFF, 0x2F, 0x00, + 0xF0, 0x3F, 0xFC, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x40, 0xFF, 0x83, 0xFF, 0x01, 0xC0, 0xFF, 0x3F, + 0x00, 0xF4, 0x2F, 0xF8, 0x1F, 0x00, 0xFD, 0xFF, 0x07, 0x80, 0xFF, 0x41, 0xFF, 0x02, 0xE0, 0xFF, + 0xBF, 0x00, 0xFC, 0x0F, 0xF0, 0x3F, 0x00, 0xFF, 0xFA, 0x0B, 0xC0, 0xBF, 0x00, 0xFE, 0x03, 0xF0, + 0x9F, 0xFF, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x40, 0xFF, 0xF4, 0x1F, 0xE0, 0x7F, 0x00, 0xFD, 0x0B, + 0xF8, 0x0B, 0xFF, 0x02, 0xFE, 0x03, 0xC0, 0xBF, 0xC0, 0x7F, 0xE0, 0x2F, 0xF0, 0x2F, 0x00, 0xF8, + 0x0F, 0xFC, 0x07, 0xFD, 0x43, 0xFF, 0x01, 0x40, 0xFF, 0xD1, 0x3F, 0xD0, 0x7F, 0xF4, 0x0F, 0x00, + 0xF0, 0x1F, 0xFE, 0x02, 0xFC, 0x8B, 0xFF, 0x00, 0x00, 0xFF, 0xF2, 0x1F, 0x80, 0xBF, 0xFC, 0x0B, + 0x00, 0xE0, 0x7F, 0xFF, 0x00, 0xF4, 0xDF, 0x7F, 0x00, 0x00, 0xFD, 0xFB, 0x0F, 0x40, 0xFF, 0xFE, + 0x03, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0xFE, + 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x02, 0x00, + 0xFD, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x01, + 0x00, 0xF8, 0x7F, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xFD, 0x1F, 0x00, 0x40, 0xFF, 0x87, 0xFF, 0x03, 0x00, 0xF8, 0x2F, 0xF0, 0xBF, 0x00, 0xD0, 0xFF, + 0x00, 0xFD, 0x1F, 0x00, 0xFF, 0x07, 0x80, 0xFF, 0x02, 0xF8, 0x2F, 0x00, 0xF4, 0x7F, 0xC0, 0xFF, + 0x01, 0x00, 0xFE, 0x0F, 0xFE, 0x0B, 0x00, 0xC0, 0xFF, 0xF6, 0x3F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, + 0xF9, 0x3F, 0x00, 0x00, 0xFE, 0x0B, 0xFF, 0x0B, 0x00, 0xF4, 0x3F, 0xD0, 0xFF, 0x01, 0x80, 0xFF, + 0x02, 0xF8, 0x2F, 0x00, 0xFD, 0x0F, 0x40, 0xFF, 0x07, 0xF0, 0x7F, 0x00, 0xE0, 0xFF, 0x80, 0xFF, + 0x02, 0x00, 0xFC, 0x2F, 0xFD, 0x1F, 0x00, 0x40, 0xFF, 0x07, + // Unicode: [0x0059, Y] + 0xFD, 0x0F, 0x00, 0x00, 0xFF, 0xCB, 0xFF, 0x02, 0x00, 0xF4, 0x3F, 0xF4, 0x3F, 0x00, 0x80, 0xFF, + 0x02, 0xFE, 0x0B, 0x00, 0xFD, 0x0F, 0xD0, 0xFF, 0x00, 0xE0, 0xBF, 0x00, 0xF8, 0x1F, 0x00, 0xFF, + 0x03, 0x40, 0xFF, 0x03, 0xF8, 0x2F, 0x00, 0xE0, 0x7F, 0xC0, 0xFF, 0x00, 0x00, 0xFD, 0x0B, 0xFD, + 0x0B, 0x00, 0x80, 0xFF, 0xF1, 0x3F, 0x00, 0x00, 0xF4, 0x6F, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, + 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0xD0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x0B, 0x00, 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, + 0xD0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, + // Unicode: [0x005A, Z] + 0xFD, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, + 0xFF, 0x7F, 0x54, 0x55, 0x95, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xBF, 0x00, + 0x00, 0x40, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x40, 0xFF, + 0x03, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + 0xFC, 0x2F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x2F, 0x00, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x6F, 0x55, 0x55, 0xD1, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, + 0x07, + // Unicode: [0x005B, bracketleft] + 0xFD, 0xFF, 0xDB, 0xFF, 0xBF, 0xFD, 0xFF, 0xDB, 0xFF, 0xBF, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, + 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, + 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, + 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, + 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, + 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0x07, 0xD0, 0x7F, 0x00, 0xFD, 0xFF, 0xDB, 0xFF, 0xBF, 0xFD, + 0xFF, 0xDB, 0xFF, 0xBF, + // Unicode: [0x005C, backslash] + 0xFE, 0x03, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0xF8, + 0x0F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x40, 0xFF, 0x01, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0xE0, 0x3F, + 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0x00, + 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x00, 0xFE, 0x03, 0x00, + 0x80, 0xFF, 0x01, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x40, 0xFF, 0x01, 0x00, 0xC0, 0xBF, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xF8, + 0x1F, 0x00, 0x00, 0xFD, 0x07, 0x00, 0x00, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xE0, 0x7F, + 0x00, 0x00, 0xF4, 0x1F, 0x00, 0x00, 0xFC, 0x0B, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0x01, + 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xF0, 0x2F, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0xFE, 0x07, 0x00, + 0x40, 0xFF, 0x01, 0x00, 0xC0, 0xBF, + // Unicode: [0x005D, bracketright] + 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0xFF, 0x02, 0xFC, 0x0B, 0xF0, 0x2F, + 0xC0, 0xBF, 0x00, 0xFF, 0x02, 0xFC, 0x0B, 0xF0, 0x2F, 0xC0, 0xBF, 0x00, 0xFF, 0x02, 0xFC, 0x0B, + 0xF0, 0x2F, 0xC0, 0xBF, 0x00, 0xFF, 0x02, 0xFC, 0x0B, 0xF0, 0x2F, 0xC0, 0xBF, 0x00, 0xFF, 0x02, + 0xFC, 0x0B, 0xF0, 0x2F, 0xC0, 0xBF, 0x00, 0xFF, 0x02, 0xFC, 0x0B, 0xF0, 0x2F, 0xC0, 0xBF, 0x00, + 0xFF, 0x02, 0xFC, 0x0B, 0xF0, 0x2F, 0xC0, 0xBF, 0x00, 0xFF, 0x02, 0xFC, 0x0B, 0xF0, 0x2F, 0xC0, + 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, + // Unicode: [0x005E, asciicircum] + 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0xF4, 0xAF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xF5, 0x2F, 0x00, 0x00, 0xFD, 0x0B, 0xFF, + 0x03, 0x00, 0xE0, 0x7F, 0xE0, 0x7F, 0x00, 0x00, 0xFF, 0x03, 0xFC, 0x0F, 0x00, 0xF8, 0x1F, 0x80, + 0xFF, 0x01, 0xC0, 0xFF, 0x00, 0xF4, 0x2F, 0x00, 0xFD, 0x0B, 0x00, 0xFE, 0x07, 0xF0, 0x3F, 0x00, + 0xD0, 0xBF, 0x40, 0xFF, 0x02, 0x00, 0xFC, 0x0F, 0xF8, 0x1F, 0x00, 0x40, 0xFF, 0xD2, 0xBF, 0x00, + 0x00, 0xF0, 0x3F, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, + // Unicode: [0x005F, underscore] + 0xA9, 0xAA, 0xAA, 0xAA, 0xAA, 0xD6, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + // Unicode: [0x0060, grave] + 0x05, 0x00, 0xB8, 0x01, 0xE0, 0x2F, 0x80, 0xFF, 0x0B, 0xF9, 0xFF, 0x41, 0xFE, 0x07, 0x80, 0x1F, + 0x00, 0x60, + // Unicode: [0x0061, a] + 0x00, 0xE4, 0xBF, 0x81, 0xFF, 0x01, 0xF8, 0xFF, 0x2F, 0xFE, 0x07, 0xFC, 0xFF, 0xFF, 0xFA, 0x1F, + 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0x96, 0xFF, 0xFF, 0xF1, 0xFF, 0x01, 0xE0, 0xFF, 0xD7, + 0xFF, 0x01, 0x00, 0xFE, 0x9F, 0xFF, 0x02, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0x80, 0xFF, 0xF9, + 0x1F, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0xF8, 0x9F, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0xFE, + 0x0B, 0x00, 0xC0, 0xFF, 0xF5, 0x7F, 0x00, 0x80, 0xFF, 0xC7, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0xFD, + 0xBF, 0xE5, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xBF, 0xFE, 0x07, 0xE0, + 0xFF, 0xBF, 0xF8, 0x1F, 0x00, 0xF9, 0x6F, 0xE0, 0x7F, + // Unicode: [0x0062, b] + 0x55, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xE0, + 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x41, 0xFE, 0x0A, 0x00, 0xFE, 0x87, 0xFF, 0xFF, 0x02, 0xF8, + 0xDF, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0xFF, 0xBF, 0xE5, 0xFF, 0x1F, 0xFE, + 0x7F, 0x00, 0xF4, 0xBF, 0xF8, 0x7F, 0x00, 0x40, 0xFF, 0xE3, 0xFF, 0x00, 0x00, 0xFC, 0x9F, 0xFF, + 0x01, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x40, 0xFF, 0xFA, 0x1F, 0x00, 0x00, 0xFE, 0xEB, 0x7F, + 0x00, 0x00, 0xF8, 0x9F, 0xFF, 0x02, 0x00, 0xF0, 0x7F, 0xFE, 0x1F, 0x00, 0xE0, 0xFF, 0xF8, 0xFF, + 0x01, 0xD0, 0xFF, 0xE2, 0xFF, 0x6F, 0xF9, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFE, 0xFB, + 0xFF, 0xFF, 0x0B, 0xF8, 0x5F, 0xFF, 0xFF, 0x0B, 0xE0, 0x7F, 0x90, 0xBF, 0x02, 0x00, + // Unicode: [0x0063, c] + 0x00, 0x90, 0xFF, 0x06, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, + 0xFF, 0xFF, 0x1F, 0xF4, 0xBF, 0x95, 0xFF, 0x0F, 0xFF, 0x0B, 0x40, 0xFF, 0xD7, 0xFF, 0x00, 0x80, + 0xFF, 0xFA, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xE0, + 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x40, 0xFF, 0x03, + 0x00, 0xFE, 0xCB, 0xFF, 0x02, 0xD0, 0xFF, 0xD1, 0xFF, 0x56, 0xFE, 0x3F, 0xE0, 0xFF, 0xFF, 0xFF, + 0x07, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFE, 0x1B, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x1F, + 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x07, + 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0xF9, 0x6B, 0xE0, 0x7F, 0x00, 0xFE, 0xFF, 0x8B, 0xFF, 0x01, + 0xFF, 0xFF, 0xBF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xBF, 0xE5, 0xFF, 0x7F, 0xFC, + 0x7F, 0x00, 0xF8, 0xFF, 0xF5, 0x7F, 0x00, 0x80, 0xFF, 0xE7, 0xBF, 0x00, 0x00, 0xFC, 0x9F, 0xFF, + 0x01, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x80, 0xFF, 0xF9, 0x1F, 0x00, 0x00, 0xFE, 0xE7, 0x7F, + 0x00, 0x00, 0xF8, 0x9F, 0xFF, 0x02, 0x00, 0xF0, 0x7F, 0xFD, 0x1F, 0x00, 0xE0, 0xFF, 0xF1, 0xFF, + 0x01, 0xE0, 0xFF, 0x47, 0xFF, 0x6F, 0xF9, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0xFF, + 0xFF, 0xAF, 0xFF, 0x01, 0xF8, 0xFF, 0x2F, 0xFE, 0x07, 0x40, 0xFE, 0x1B, 0xF8, 0x1F, + // Unicode: [0x0065, e] + 0x00, 0x90, 0xFF, 0x06, 0x00, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x02, 0xE0, + 0xFF, 0xFF, 0xFF, 0x07, 0xF4, 0xBF, 0x41, 0xFE, 0x1F, 0xFC, 0x1F, 0x00, 0xF8, 0x2F, 0xFD, 0x0B, + 0x00, 0xF0, 0x3F, 0xFE, 0x07, 0x00, 0xE0, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0x57, 0x55, 0x55, 0x15, 0xFE, 0x07, 0x00, 0x00, + 0x00, 0xFD, 0x0B, 0x00, 0xA4, 0x1A, 0xFC, 0x1F, 0x00, 0xFC, 0x2F, 0xF4, 0xBF, 0x51, 0xFF, 0x0F, + 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0x00, + 0x90, 0xFF, 0x06, 0x00, + // Unicode: [0x0066, f] + 0x00, 0x90, 0x3E, 0x00, 0xF8, 0x3F, 0x00, 0xFE, 0x3F, 0x40, 0xFF, 0x3F, 0x80, 0xFF, 0x17, 0xC0, + 0xFF, 0x01, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xFD, 0xFF, 0x7F, 0xFD, 0xFF, 0x7F, 0xFD, 0xFF, + 0x7F, 0xFD, 0xFF, 0x7F, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, + 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, + 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, 0x00, 0xC0, 0xFF, + 0x00, 0xC0, 0xFF, 0x00, + // Unicode: [0x0067, g] + 0x00, 0xE4, 0xBF, 0x81, 0xFF, 0x01, 0xF8, 0xFF, 0x2F, 0xFE, 0x07, 0xFC, 0xFF, 0xFF, 0xFB, 0x1F, + 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0x96, 0xFF, 0xFF, 0xF1, 0xFF, 0x01, 0xE0, 0xFF, 0xD7, + 0xFF, 0x01, 0x00, 0xFE, 0x9F, 0xFF, 0x02, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0x80, 0xFF, 0xF9, + 0x1F, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0xF8, 0x9F, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0xFE, + 0x0B, 0x00, 0xC0, 0xFF, 0xF5, 0x7F, 0x00, 0x80, 0xFF, 0xC7, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0xFD, + 0xBF, 0xE5, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xBF, 0xFE, 0x07, 0xE0, + 0xFF, 0xBF, 0xF8, 0x1F, 0x00, 0xF9, 0x6F, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xFE, 0xC7, 0xFF, 0x01, 0x00, 0xFD, 0x0F, 0xFE, 0x0F, 0x00, 0xFD, 0x2F, 0xF4, 0xFF, + 0x56, 0xFE, 0x7F, 0x80, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0xFF, 0xBF, 0x00, 0x40, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, + // Unicode: [0x0068, h] + 0x55, 0x01, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x1F, + 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, + 0x00, 0xF8, 0x1F, 0xE4, 0x6F, 0x00, 0xFE, 0xD7, 0xFF, 0xBF, 0x80, 0xFF, 0xFE, 0xFF, 0xFF, 0xE0, + 0xFF, 0xFF, 0xFF, 0xBF, 0xF8, 0xFF, 0x56, 0xFE, 0x3F, 0xFE, 0x2F, 0x00, 0xFD, 0x9F, 0xFF, 0x03, + 0x00, 0xFE, 0xEB, 0x7F, 0x00, 0x40, 0xFF, 0xFA, 0x1F, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xF0, + 0xBF, 0xFF, 0x01, 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0x00, 0xFF, 0xFB, 0x1F, 0x00, 0xC0, 0xFF, 0xFE, + 0x07, 0x00, 0xF0, 0xBF, 0xFF, 0x01, 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0x00, 0xFF, 0xFB, 0x1F, 0x00, + 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xF0, 0xBF, 0xFF, 0x01, 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0x00, 0xFF, + 0x03, + // Unicode: [0x0069, i] + 0xA4, 0xE1, 0x7F, 0xFF, 0xFB, 0xBF, 0xFE, 0x87, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0xFE, + 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, + 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, + // Unicode: [0x006A, j] + 0x00, 0xBE, 0x00, 0xFE, 0x07, 0xFC, 0x2F, 0xF0, 0xBF, 0x80, 0xFF, 0x01, 0xA4, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0x01, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x07, + 0xF8, 0x1F, 0xE0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0x80, 0xFF, 0x01, + 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0x80, + 0xFF, 0x01, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0xD5, 0xFF, 0xFD, 0xFF, 0xF3, 0xFF, 0xCB, 0xFF, + 0x0B, 0xFF, 0x06, 0x00, + // Unicode: [0x006B, k] + 0x55, 0x01, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xE0, 0x7F, 0x00, + 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xE0, + 0x7F, 0x00, 0xF8, 0xBF, 0xFE, 0x07, 0xD0, 0xFF, 0xE3, 0x7F, 0x00, 0xFF, 0x0F, 0xFE, 0x07, 0xF8, + 0x7F, 0xE0, 0x7F, 0xE0, 0xFF, 0x01, 0xFE, 0x47, 0xFF, 0x0B, 0xE0, 0x7F, 0xFD, 0x2F, 0x00, 0xFE, + 0xF7, 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0x00, + 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xE0, 0x7F, 0xFF, 0x0B, 0x00, 0xFE, 0xD7, 0xFF, 0x02, 0xE0, 0x7F, + 0xF4, 0xBF, 0x00, 0xFE, 0x07, 0xFE, 0x1F, 0xE0, 0x7F, 0x80, 0xFF, 0x07, 0xFE, 0x07, 0xF0, 0xFF, + 0xE0, 0x7F, 0x00, 0xFD, 0x3F, 0xFE, 0x07, 0x40, 0xFF, 0x0B, + // Unicode: [0x006C, l] + 0x55, 0xE1, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, + 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, + 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0xE7, 0x7F, 0xFE, 0x07, + // Unicode: [0x006D, m] + 0xFE, 0x47, 0xFE, 0x1A, 0x00, 0xE4, 0x6F, 0x00, 0xF8, 0x9F, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, 0x1F, + 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0xFD, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, + 0x1F, 0xFE, 0xBF, 0x95, 0xFF, 0xFF, 0x5B, 0xFE, 0xBF, 0xF8, 0xBF, 0x00, 0xF4, 0xFF, 0x07, 0x80, + 0xFF, 0xE3, 0xFF, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xFC, 0x9F, 0xFF, 0x02, 0x00, 0xFD, 0x0F, 0x00, + 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0xF0, 0x3F, 0x00, 0x40, 0xFF, 0xF9, 0x1F, 0x00, 0xC0, 0xFF, 0x00, + 0x00, 0xFD, 0xE7, 0x7F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0xF4, 0x9F, 0xFF, 0x01, 0x00, 0xFC, 0x0F, + 0x00, 0xD0, 0x7F, 0xFE, 0x07, 0x00, 0xF0, 0x3F, 0x00, 0x40, 0xFF, 0xF9, 0x1F, 0x00, 0xC0, 0xFF, + 0x00, 0x00, 0xFD, 0xE7, 0x7F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0xF4, 0x9F, 0xFF, 0x01, 0x00, 0xFC, + 0x0F, 0x00, 0xD0, 0x7F, 0xFE, 0x07, 0x00, 0xF0, 0x3F, 0x00, 0x40, 0xFF, 0xF9, 0x1F, 0x00, 0xC0, + 0xFF, 0x00, 0x00, 0xFD, 0xE7, 0x7F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0xF4, 0x9F, 0xFF, 0x01, 0x00, + 0xFC, 0x0F, 0x00, 0xD0, 0x7F, + // Unicode: [0x006E, n] + 0xFE, 0x07, 0xFA, 0x1B, 0x80, 0xFF, 0xF5, 0xFF, 0x2F, 0xE0, 0xBF, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, + 0xFF, 0xFF, 0x2F, 0xFE, 0xBF, 0x95, 0xFF, 0x9F, 0xFF, 0x0B, 0x40, 0xFF, 0xEB, 0xFF, 0x00, 0x80, + 0xFF, 0xFA, 0x1F, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0xF0, 0xBF, 0xFF, 0x01, 0x00, 0xFC, 0xEF, + 0x7F, 0x00, 0x00, 0xFF, 0xFB, 0x1F, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xF0, 0xBF, 0xFF, 0x01, + 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0x00, 0xFF, 0xFB, 0x1F, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xF0, + 0xBF, 0xFF, 0x01, 0x00, 0xFC, 0xEF, 0x7F, 0x00, 0x00, 0xFF, 0xFB, 0x1F, 0x00, 0xC0, 0xFF, + // Unicode: [0x006F, o] + 0x00, 0x90, 0xFF, 0x06, 0x00, 0x00, 0xFD, 0xFF, 0xBF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, + 0xFF, 0xFF, 0xFF, 0x0F, 0xF4, 0xFF, 0x96, 0xFF, 0x2F, 0xFC, 0x2F, 0x00, 0xF8, 0x7F, 0xFD, 0x0F, + 0x00, 0xE0, 0xBF, 0xFE, 0x0B, 0x00, 0xD0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, + 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0xFE, 0x0B, 0x00, 0xD0, + 0xFF, 0xFD, 0x0F, 0x00, 0xF0, 0xBF, 0xFC, 0x2F, 0x00, 0xF8, 0x3F, 0xF4, 0xFF, 0x96, 0xFF, 0x2F, + 0xE0, 0xFF, 0xFF, 0xFF, 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0xBF, 0x00, 0x00, + 0x90, 0xFF, 0x06, 0x00, + // Unicode: [0x0070, p] + 0xFE, 0x07, 0xF9, 0x2B, 0x00, 0xF8, 0x5F, 0xFE, 0xFF, 0x0B, 0xE0, 0xBF, 0xFF, 0xFF, 0xBF, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFE, 0xFF, 0x96, 0xFF, 0x7F, 0xF8, 0xFF, 0x01, 0xD0, 0xFF, 0xE2, + 0xFF, 0x01, 0x00, 0xFD, 0x8F, 0xFF, 0x03, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0x80, 0xFF, 0xF9, + 0x1F, 0x00, 0x00, 0xFD, 0xEB, 0x7F, 0x00, 0x00, 0xF8, 0xAF, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0xFE, + 0x0B, 0x00, 0xC0, 0xFF, 0xF9, 0x7F, 0x00, 0x80, 0xFF, 0xE3, 0xFF, 0x07, 0x40, 0xFF, 0x8B, 0xFF, + 0xBF, 0xE5, 0xFF, 0x1F, 0xFE, 0xFF, 0xFF, 0xFF, 0x2F, 0xF8, 0xDF, 0xFF, 0xFF, 0x2F, 0xE0, 0x7F, + 0xF8, 0xFF, 0x2F, 0x80, 0xFF, 0x41, 0xFE, 0x0A, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x1F, + 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x07, + 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x00, 0xA4, 0xBF, 0x81, 0xFF, 0x01, 0xF8, 0xFF, 0x6F, 0xFE, 0x07, 0xF8, 0xFF, 0xFF, 0xFB, 0x1F, + 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xF4, 0xFF, 0x96, 0xFF, 0xFF, 0xF1, 0xFF, 0x01, 0xE0, 0xFF, 0xD7, + 0xFF, 0x01, 0x00, 0xFE, 0x9F, 0xFF, 0x02, 0x00, 0xF0, 0x7F, 0xFE, 0x07, 0x00, 0x80, 0xFF, 0xF9, + 0x1F, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0xF8, 0x9F, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0xFE, + 0x0B, 0x00, 0xC0, 0xFF, 0xF5, 0x7F, 0x00, 0x80, 0xFF, 0xC7, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0xFD, + 0xBF, 0xE5, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFE, 0x07, 0xE0, + 0xFF, 0xBF, 0xF8, 0x1F, 0x00, 0xF9, 0x6F, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, + 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, + // Unicode: [0x0072, r] + 0xFE, 0x07, 0x79, 0xFE, 0xD7, 0x7F, 0xFE, 0xF7, 0x7F, 0xFE, 0xFF, 0x7F, 0xFE, 0xFF, 0x7F, 0xFE, + 0xBF, 0x15, 0xFE, 0x1F, 0x00, 0xFE, 0x0B, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, + 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, + 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, + // Unicode: [0x0073, s] + 0x00, 0xE9, 0xAF, 0x01, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, + 0x1F, 0xFC, 0x1F, 0xE0, 0xFF, 0xF0, 0x2F, 0x00, 0xFE, 0xC3, 0xBF, 0x00, 0x54, 0x05, 0xFF, 0x1B, + 0x00, 0x00, 0xF4, 0xFF, 0x1B, 0x00, 0x80, 0xFF, 0xFF, 0x1B, 0x00, 0xE4, 0xFF, 0xFF, 0x02, 0x00, + 0xE4, 0xFF, 0x2F, 0x00, 0x00, 0xE4, 0xFF, 0x54, 0x15, 0x00, 0xFD, 0xD7, 0xBF, 0x00, 0xF4, 0x1F, + 0xFF, 0x0B, 0xF4, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0xF8, 0xFF, 0xFF, + 0x01, 0x00, 0xF9, 0x6F, 0x00, + // Unicode: [0x0074, t] + 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xE0, 0x7F, 0x00, 0xE0, 0x3F, + 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, + 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x7F, 0x00, 0xE0, 0xBF, 0x15, 0xD0, + 0xFF, 0x7F, 0xC0, 0xFF, 0x7F, 0x40, 0xFF, 0x7F, 0x00, 0xE8, 0x7F, + // Unicode: [0x0075, u] + 0xFE, 0x03, 0x00, 0xF4, 0xAF, 0xFF, 0x00, 0x00, 0xFD, 0xEB, 0x3F, 0x00, 0x40, 0xFF, 0xFA, 0x0F, + 0x00, 0xD0, 0xBF, 0xFE, 0x03, 0x00, 0xF4, 0xAF, 0xFF, 0x00, 0x00, 0xFD, 0xEB, 0x3F, 0x00, 0x40, + 0xFF, 0xFA, 0x0F, 0x00, 0xD0, 0xBF, 0xFE, 0x03, 0x00, 0xF4, 0xAF, 0xFF, 0x00, 0x00, 0xFD, 0xEB, + 0x3F, 0x00, 0x40, 0xFF, 0xFA, 0x1F, 0x00, 0xD0, 0xBF, 0xFE, 0x07, 0x00, 0xF4, 0xAF, 0xFF, 0x02, + 0x00, 0xFE, 0xDB, 0xFF, 0x01, 0xD0, 0xFF, 0xF2, 0xFF, 0x56, 0xFE, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, + 0x2F, 0xF8, 0xFF, 0xFF, 0xFE, 0x0B, 0xF8, 0xFF, 0x6F, 0xFF, 0x02, 0xA4, 0xBF, 0xD1, 0xBF, + // Unicode: [0x0076, v] + 0xFD, 0x0B, 0x00, 0x80, 0xFF, 0xF1, 0x3F, 0x00, 0x00, 0xFF, 0x83, 0xFF, 0x01, 0x00, 0xFD, 0x0B, + 0xFD, 0x0B, 0x00, 0xF8, 0x1F, 0xF0, 0x3F, 0x00, 0xF0, 0x3F, 0x80, 0xFF, 0x01, 0xD0, 0xBF, 0x00, + 0xFD, 0x0B, 0x80, 0xFF, 0x01, 0xF0, 0x3F, 0x00, 0xFF, 0x03, 0x80, 0xFF, 0x01, 0xFD, 0x0B, 0x00, + 0xFD, 0x0B, 0xF8, 0x1F, 0x00, 0xF0, 0x3F, 0xF0, 0x3F, 0x00, 0x80, 0xFF, 0xD1, 0x7F, 0x00, 0x00, + 0xFD, 0x8B, 0xFF, 0x00, 0x00, 0xF0, 0x3F, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0xFE, 0x07, 0x00, 0x00, + 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0x00, + // Unicode: [0x0077, w] + 0xFE, 0x07, 0x00, 0xFE, 0x0B, 0x00, 0xFE, 0xF7, 0x2F, 0x00, 0xFC, 0x3F, 0x00, 0xF8, 0xCF, 0xBF, + 0x00, 0xF4, 0xFF, 0x00, 0xF0, 0x2F, 0xFE, 0x03, 0xD0, 0xFF, 0x07, 0xD0, 0x7F, 0xF4, 0x1F, 0x80, + 0xFF, 0x2F, 0x40, 0xFF, 0xD0, 0x7F, 0x00, 0xFF, 0xFF, 0x00, 0xFE, 0x02, 0xFF, 0x02, 0xFD, 0xFE, + 0x03, 0xFC, 0x07, 0xF8, 0x0F, 0xF4, 0xE7, 0x1F, 0xF0, 0x1F, 0xD0, 0x3F, 0xE0, 0x9F, 0xBF, 0xD0, + 0x3F, 0x00, 0xFF, 0xC1, 0x3F, 0xFD, 0x82, 0xBF, 0x00, 0xF8, 0x4B, 0xBF, 0xF0, 0x0F, 0xFE, 0x01, + 0xD0, 0x2F, 0xFD, 0x81, 0x7F, 0xFC, 0x03, 0x40, 0xFF, 0xF8, 0x07, 0xFE, 0xF6, 0x0B, 0x00, 0xFC, + 0xF7, 0x0F, 0xF4, 0xDB, 0x1F, 0x00, 0xE0, 0xEF, 0x2F, 0xC0, 0xBF, 0x7F, 0x00, 0x40, 0xFF, 0x7F, + 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0x03, 0xD0, + 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0xF8, 0x2F, + 0x00, + // Unicode: [0x0078, x] + 0xFD, 0x0F, 0x00, 0xFC, 0x1F, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xFF, 0x07, 0xF0, 0x3F, 0x40, 0xFF, + 0x03, 0xFE, 0x07, 0x80, 0xFF, 0xD2, 0xBF, 0x00, 0xD0, 0xFF, 0xF9, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, + 0x01, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, + 0x00, 0xFE, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x80, 0xFF, + 0xFF, 0x07, 0x00, 0xF4, 0x6F, 0xFF, 0x03, 0x00, 0xFE, 0x87, 0xFF, 0x02, 0xD0, 0xBF, 0xC0, 0xFF, + 0x01, 0xFC, 0x0F, 0xD0, 0xFF, 0x80, 0xFF, 0x01, 0xE0, 0xBF, 0xF4, 0x3F, 0x00, 0xF4, 0x7F, + // Unicode: [0x0079, y] + 0xFE, 0x0F, 0x00, 0x40, 0xFF, 0xF6, 0x7F, 0x00, 0x00, 0xFE, 0x87, 0xFF, 0x02, 0x00, 0xFD, 0x0F, + 0xFD, 0x0F, 0x00, 0xF8, 0x2F, 0xF0, 0x7F, 0x00, 0xF0, 0x3F, 0x80, 0xFF, 0x02, 0xD0, 0xBF, 0x00, + 0xFD, 0x0F, 0x80, 0xFF, 0x01, 0xE0, 0x7F, 0x00, 0xFF, 0x03, 0x40, 0xFF, 0x02, 0xFD, 0x07, 0x00, + 0xFC, 0x0F, 0xF8, 0x0F, 0x00, 0xE0, 0x7F, 0xF0, 0x2F, 0x00, 0x40, 0xFF, 0xE3, 0x7F, 0x00, 0x00, + 0xF8, 0xDF, 0xBF, 0x00, 0x00, 0xD0, 0xBF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xF4, + 0x2F, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFE, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x7F, 0x00, + 0x00, 0xFE, 0x0F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFC, 0x2F, 0x00, 0x80, 0xFF, 0x03, 0x00, 0xF4, + 0x7F, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0xD0, 0xFF, 0x01, + 0x00, 0xFC, 0x2F, 0x00, 0x80, 0xFF, 0x03, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xAF, + 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xBF, + // Unicode: [0x007B, braceleft] + 0x00, 0xE4, 0x3F, 0x80, 0xFF, 0x0F, 0xF8, 0xFF, 0x03, 0xFF, 0xFF, 0xD0, 0xFF, 0x15, 0xF4, 0x1F, + 0x00, 0xFD, 0x07, 0x40, 0xFF, 0x01, 0xD0, 0x7F, 0x00, 0xF4, 0x2F, 0x00, 0xFC, 0x0B, 0x00, 0xFF, + 0x02, 0xC0, 0xBF, 0x00, 0xE0, 0x3F, 0x00, 0xF8, 0x0F, 0x00, 0xFF, 0x03, 0xD0, 0xBF, 0x00, 0xFD, + 0x1F, 0xF0, 0xFF, 0x02, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x0B, 0x40, 0xFF, 0x07, 0x40, + 0xFF, 0x02, 0xC0, 0xFF, 0x00, 0xE0, 0x3F, 0x00, 0xF8, 0x0F, 0x00, 0xFF, 0x02, 0xC0, 0xBF, 0x00, + 0xF0, 0x2F, 0x00, 0xFD, 0x0B, 0x40, 0xFF, 0x01, 0xD0, 0x7F, 0x00, 0xF4, 0x1F, 0x00, 0xFD, 0x07, + 0x40, 0xFF, 0x57, 0xC0, 0xFF, 0x3F, 0xE0, 0xFF, 0x0F, 0xE0, 0xFF, 0x03, 0x90, 0xFF, + // Unicode: [0x007C, bar] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + // Unicode: [0x007D, braceright] + 0xFD, 0x1B, 0x00, 0xFD, 0x7F, 0x00, 0xFD, 0xFF, 0x01, 0xFD, 0xFF, 0x02, 0x54, 0xFF, 0x03, 0x00, + 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x03, 0x00, 0xFE, 0x03, 0x00, 0xFE, 0x03, 0x00, 0xFF, + 0x03, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x02, + 0x00, 0xFF, 0x03, 0x00, 0xFE, 0x1B, 0x00, 0xFC, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, + 0xFC, 0xFF, 0x00, 0xFE, 0x1B, 0x00, 0xFF, 0x03, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x02, 0x00, 0xFF, + 0x02, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x02, 0x00, 0xFE, 0x03, 0x00, 0xFE, 0x03, 0x00, 0xFE, 0x03, + 0x00, 0xFE, 0x03, 0x00, 0xFE, 0x07, 0x00, 0xFE, 0x07, 0x54, 0xFF, 0x03, 0xFD, 0xFF, 0x02, 0xFD, + 0xFF, 0x01, 0xFD, 0x7F, 0x00, 0xFD, 0x1B, 0x00, + // Unicode: [0x007E, asciitilde] + 0x40, 0xFE, 0x01, 0xC0, 0x1F, 0xF4, 0xFF, 0x07, 0xF8, 0x47, 0xFF, 0xFF, 0x9B, 0xFF, 0xE0, 0xFF, + 0xFF, 0xFF, 0x2F, 0xFD, 0xEB, 0xFF, 0xFF, 0x83, 0x7F, 0x40, 0xFF, 0x7F, 0xE0, 0x0B, 0x00, 0xFE, + 0x02, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_35_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_35_2bpp_4.cpp new file mode 100644 index 00000000..8e269068 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_35_2bpp_4.cpp @@ -0,0 +1,9 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_35_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0xA0, 0x02, 0xA4, 0x02, 0xA4, 0xC1, 0xFF, 0xD0, 0xBF, 0xE0, 0x7F, 0xFD, 0x1F, 0xFE, 0x0F, 0xFF, + 0xDB, 0xFF, 0xE1, 0xFF, 0xF0, 0xFF, 0xFC, 0x1F, 0xFD, 0x0B, 0xFE, 0x4B, 0x6E, 0x40, 0x2F, 0x80, + 0x2F +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_40_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_40_2bpp_0.cpp new file mode 100644 index 00000000..4f981c32 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_40_2bpp_0.cpp @@ -0,0 +1,972 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_40_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, + 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x2F, 0xF8, 0x1F, + 0xF4, 0x1F, 0xF4, 0x1F, 0xF4, 0x1F, 0xA4, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x90, 0x06, 0xF8, 0x2F, + 0xFC, 0x7F, 0xFD, 0x7F, 0xFD, 0x7F, 0xF8, 0x3F, 0xE0, 0x0B, + // Unicode: [0x0022, quotedbl] + 0xA9, 0x86, 0xAA, 0xFD, 0x87, 0xFF, 0xFD, 0x83, 0xFF, 0xFD, 0x83, 0xFF, 0xFD, 0x83, 0xBF, 0xFD, + 0x43, 0xBF, 0xFC, 0x43, 0xBF, 0xFC, 0x43, 0xBF, 0xFC, 0x42, 0xBF, + // Unicode: [0x0023, numbersign] + 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xFE, 0x0B, + 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0xF4, 0x3F, + 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x80, 0xFF, + 0x02, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xFE, 0x0B, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0B, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, + 0xF4, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x00, + 0x80, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x0B, + 0x00, 0xFD, 0x0F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFC, + 0x1F, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0xF4, 0x2F, 0x00, 0x00, 0x00, + 0xF4, 0x3F, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x00, 0xC0, 0x0B, 0x00, 0x00, + 0x00, 0x50, 0x6F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0xBF, 0xBD, 0xFE, 0xBF, 0xF4, + 0xBF, 0xF0, 0xE2, 0xFF, 0xE3, 0xFF, 0xC0, 0x0B, 0xFF, 0xDF, 0xFF, 0x03, 0x2F, 0xA4, 0x6A, 0xFF, + 0x0F, 0xBC, 0x00, 0x00, 0xF8, 0xBF, 0xF0, 0x02, 0x00, 0xE0, 0xFF, 0xCB, 0x0B, 0x00, 0x00, 0xFF, + 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x1A, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE4, + 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xE4, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0xBF, 0x00, 0x00, + 0xF0, 0xF6, 0xFF, 0x07, 0x00, 0xC0, 0x0B, 0xFE, 0x2F, 0x00, 0x00, 0x2F, 0xF4, 0xBF, 0xA9, 0x0A, + 0xBC, 0xD0, 0xFF, 0xFA, 0x7F, 0xF0, 0x42, 0xFF, 0xEB, 0xFF, 0xC2, 0x0B, 0xFE, 0x5F, 0xFF, 0x6F, + 0x6F, 0xFE, 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, + 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x40, 0xFE, 0x06, 0x00, 0x00, 0x00, 0xF0, + 0x02, 0x00, 0x00, 0x00, 0xC0, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, + // Unicode: [0x0025, percent] + 0x40, 0xFE, 0x0A, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x01, 0x40, + 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0x2F, 0x00, 0xF0, 0xBF, 0xFE, 0x0B, 0x40, 0xFF, 0x07, 0x00, 0xFD, + 0x03, 0xFD, 0x03, 0xE0, 0xBF, 0x00, 0x40, 0xBF, 0x00, 0xFF, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0x2F, + 0xC0, 0x7F, 0x80, 0xFF, 0x02, 0x00, 0xF4, 0x0B, 0xF0, 0x0F, 0xF4, 0x3F, 0x00, 0x00, 0xFC, 0x07, + 0xFE, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xFF, 0x7F, 0xD0, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x0B, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x54, 0x01, + 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x40, 0x15, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0x07, 0xF9, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0xD0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0x0F, + 0xFC, 0xFF, 0xBF, 0x00, 0x00, 0xC0, 0xFF, 0x82, 0xFF, 0xD1, 0x7F, 0x00, 0x00, 0xF4, 0x3F, 0xE0, + 0x1F, 0xE0, 0x2F, 0x00, 0x00, 0xFF, 0x0B, 0xFC, 0x03, 0xF4, 0x0B, 0x00, 0xD0, 0xFF, 0x00, 0xFF, + 0x00, 0xFD, 0x02, 0x00, 0xFC, 0x1F, 0xC0, 0x7F, 0x80, 0xBF, 0x00, 0x80, 0xFF, 0x03, 0xE0, 0x2F, + 0xF0, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0xF4, 0x6F, 0xFE, 0x03, 0x00, 0xFE, 0x0B, 0x00, 0xF8, 0xFF, + 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xE4, 0x6F, + 0x00, + // Unicode: [0x0026, ampersand] + 0x00, 0x00, 0xE4, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, + 0xBF, 0xF9, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x0F, + 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x54, 0x05, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xBF, 0x00, 0xF4, 0xBF, + 0x00, 0xFF, 0xBF, 0xFF, 0x2F, 0x80, 0xFF, 0x03, 0xF8, 0xBF, 0xC0, 0xFF, 0x0B, 0xFD, 0x1F, 0xC0, + 0xFF, 0x02, 0xF0, 0xFF, 0xF6, 0xFF, 0x00, 0xFD, 0x1F, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, + 0x00, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0xFE, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0x01, + 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0xC0, 0xFF, 0x1B, 0x00, + 0xFE, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xFF, 0xFF, 0x2F, 0xFC, 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0x2F, 0x00, 0x90, 0xFF, 0x6B, 0x00, 0xD0, 0xFF, 0x0B, + // Unicode: [0x0027, quotesingle] + 0xA9, 0xD6, 0x7F, 0xFD, 0xD3, 0x3F, 0xFD, 0xD3, 0x3F, 0xFC, 0xC3, 0x3F, 0xFC, 0x02, + // Unicode: [0x0028, parenleft] + 0x00, 0x00, 0xA9, 0x2A, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, + 0xF8, 0xBF, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xFD, 0x2F, 0x00, 0x80, 0xFF, + 0x03, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xF4, 0x7F, 0x00, + 0x00, 0xFD, 0x0F, 0x00, 0x80, 0xFF, 0x03, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x80, 0xFF, + 0x02, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x80, 0xFF, 0x02, + 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xF8, + 0x7F, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x40, 0xFF, + 0x0B, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x03, + // Unicode: [0x0029, parenright] + 0xA9, 0x2A, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, + 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFF, + 0x0B, 0x00, 0x80, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFC, 0x2F, + 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x3F, 0x00, + 0x00, 0xFD, 0x0F, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, + 0xFD, 0x0F, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xFF, + 0x0B, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0xC0, 0xFF, 0x02, + 0x00, 0xF4, 0xBF, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xF4, 0x7F, 0x00, 0x00, + 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x02, 0x00, 0xFC, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF4, 0xBF, + 0x00, 0x00, 0xFF, 0x0F, 0x00, 0xF0, 0xFF, 0x01, 0x00, 0xFE, 0x1F, 0x00, 0x00, + // Unicode: [0x002A, asterisk] + 0x00, 0x54, 0x05, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x40, 0x7F, 0x00, 0xA0, 0xD0, 0x0F, 0x1D, 0xFD, + 0xF1, 0xD3, 0x8F, 0xFF, 0xBD, 0xFE, 0xE7, 0xFF, 0xFF, 0xFF, 0x41, 0xFE, 0xFF, 0x06, 0x40, 0xFE, + 0x2F, 0x00, 0xFE, 0xFF, 0xBF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFA, 0xCB, 0xDB, 0x7F, 0xBC, 0xF0, 0x83, + 0x0B, 0x09, 0xFD, 0x80, 0x00, 0x40, 0x7F, 0x00, 0x00, 0xE0, 0x1F, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, + 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, + 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, + 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + // Unicode: [0x002C, comma] + 0x40, 0x55, 0x01, 0xFF, 0x07, 0xFD, 0x0F, 0xF4, 0x2F, 0xE0, 0x7F, 0xC0, 0xFF, 0x00, 0xFF, 0x01, + 0xFD, 0x03, 0xF8, 0x0B, 0xF0, 0x1F, 0xC0, 0x2F, 0x40, 0x7F, 0x00, + // Unicode: [0x002D, hyphen] + 0xAA, 0xAA, 0xAA, 0xAA, 0xFE, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + // Unicode: [0x002E, period] + 0x90, 0x06, 0xF4, 0x2F, 0xFC, 0x7F, 0xFD, 0xBF, 0xFC, 0x7F, 0xF8, 0x3F, 0xE0, 0x1B, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xF8, + 0x3F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + 0xFD, 0x0F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, + 0x40, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF0, 0x7F, 0x00, + 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xFC, 0x1F, + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0xFF, + 0x07, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0xC0, + 0xFF, 0x02, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, + 0xF0, 0xBF, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0x00, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x03, + 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xD0, 0xFF, + 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xF4, + 0x3F, 0x00, 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x06, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x07, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0x0B, 0xF4, 0xFF, 0x06, 0xF9, 0xFF, 0x80, 0xFF, 0x07, 0x00, 0xFE, 0x1F, 0xFC, 0x2F, 0x00, 0xC0, + 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0xF8, 0x3F, 0xFD, 0x0F, 0x00, 0x40, 0xFF, 0xE7, 0xFF, 0x00, 0x00, + 0xF0, 0x7F, 0xFE, 0x0B, 0x00, 0x00, 0xFF, 0xEB, 0xBF, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0B, 0x00, + 0x00, 0xFF, 0xFB, 0xBF, 0x00, 0x00, 0xE0, 0xBF, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xEB, 0xBF, 0x00, + 0x00, 0xF0, 0xBF, 0xFE, 0x0B, 0x00, 0x00, 0xFF, 0xEB, 0xBF, 0x00, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, + 0x00, 0x00, 0xFF, 0xD7, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFC, 0x1F, 0x00, 0x80, 0xFF, 0xC3, 0xFF, + 0x03, 0x00, 0xFC, 0x2F, 0xF8, 0xBF, 0x00, 0xE0, 0xFF, 0x01, 0xFF, 0x7F, 0xE5, 0xFF, 0x0F, 0xE0, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x80, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, + // Unicode: [0x0031, one] + 0xFE, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0xFF, 0x4F, 0xE5, 0xFF, 0x00, + 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, + 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, + 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, + 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, + // Unicode: [0x0032, two] + 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0xFF, 0x7F, 0x00, + 0xF4, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x3F, 0xD0, 0xFF, 0x07, 0xF4, 0xFF, 0x81, + 0xFF, 0x07, 0x40, 0xFF, 0x0B, 0xFF, 0x0B, 0x00, 0xFC, 0x2F, 0xFC, 0x1F, 0x00, 0xE0, 0xFF, 0xF4, + 0x7F, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x02, 0x00, + 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x0B, 0x00, 0x00, + 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x0F, 0x00, 0x00, 0xD0, + 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, + 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0xAF, 0xAA, 0xAA, 0xD6, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + // Unicode: [0x0033, three] + 0x00, 0x90, 0xAA, 0x06, 0x00, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, + 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0xBF, 0x41, 0xFE, 0x2F, 0xFD, 0x2F, + 0x00, 0xFC, 0x3F, 0xFE, 0x0F, 0x00, 0xF4, 0x3F, 0xFE, 0x0B, 0x00, 0xF4, 0x3F, 0x00, 0x00, 0x00, + 0xF4, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x90, 0xFF, + 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xBF, 0x01, 0x00, 0xC0, 0xFF, 0x7F, 0x00, + 0x00, 0xC0, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFA, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, + 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0xFF, 0x07, + 0x00, 0xE0, 0xBF, 0xFF, 0x0B, 0x00, 0xF0, 0xBF, 0xFE, 0x0F, 0x00, 0xF4, 0x7F, 0xFD, 0x7F, 0x00, + 0xFD, 0x7F, 0xFC, 0xFF, 0xEB, 0xFF, 0x2F, 0xF4, 0xFF, 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0xFF, + 0x07, 0x40, 0xFE, 0xFF, 0xBF, 0x01, 0x00, 0xA4, 0xFF, 0x1A, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x00, 0xA8, 0x6A, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, + 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0xAF, 0xFF, 0x01, 0x00, 0x80, + 0xFF, 0xE3, 0x7F, 0x00, 0x00, 0xF4, 0x7F, 0xF8, 0x1F, 0x00, 0x00, 0xFF, 0x0B, 0xFE, 0x07, 0x00, + 0xE0, 0xFF, 0x80, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0xE0, 0x7F, 0x00, 0xC0, 0xFF, 0x02, 0xF8, 0x1F, + 0x00, 0xF8, 0x3F, 0x00, 0xFE, 0x07, 0x40, 0xFF, 0x07, 0x80, 0xFF, 0x01, 0xF0, 0xBF, 0x00, 0xE0, + 0x7F, 0x00, 0xFE, 0x0F, 0x00, 0xF8, 0x1F, 0xD0, 0xFF, 0x01, 0x00, 0xFE, 0x07, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, + // Unicode: [0x0035, five] + 0xFD, 0xFF, 0xFF, 0xFF, 0x2F, 0xF4, 0xFF, 0xFF, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, 0x2F, 0xF4, 0x2F, 0x00, 0x00, 0x00, 0xD0, + 0xBF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0xF4, + 0x2F, 0x00, 0x00, 0x00, 0xD0, 0xBF, 0x90, 0xBF, 0x06, 0x40, 0xFF, 0xF6, 0xFF, 0xBF, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0x0F, 0xF4, 0xFF, 0xFF, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0xFE, 0xFF, 0x47, 0xFF, + 0x2F, 0x00, 0xFE, 0x2F, 0xFD, 0x2F, 0x00, 0xE0, 0xFF, 0xA4, 0x2A, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x56, 0x15, + 0x00, 0x00, 0xFF, 0xE7, 0xFF, 0x00, 0x00, 0xFD, 0x5F, 0xFF, 0x0B, 0x00, 0xFC, 0x3F, 0xFC, 0xBF, + 0x00, 0xF9, 0xBF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x40, 0xFE, 0x6F, 0x00, 0x00, + // Unicode: [0x0036, six] + 0x00, 0x00, 0xA9, 0x16, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x0B, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFD, 0x6F, 0x90, 0xFF, + 0x0B, 0xF0, 0xBF, 0x00, 0xE0, 0xFF, 0x40, 0xFF, 0x03, 0x00, 0xFC, 0x1F, 0xF4, 0x1F, 0x00, 0x40, + 0xAA, 0x81, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0xA9, + 0x05, 0x00, 0xFC, 0x4B, 0xFE, 0xFF, 0x06, 0xC0, 0xBF, 0xFD, 0xFF, 0xFF, 0x01, 0xFD, 0xFB, 0xFF, + 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFD, 0xFF, 0x06, 0xF8, 0xFF, 0xD1, 0xFF, 0x07, + 0x00, 0xFD, 0x2F, 0xFC, 0x2F, 0x00, 0x80, 0xFF, 0xC3, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0xFC, 0x1F, + 0x00, 0x00, 0xFF, 0x87, 0xFF, 0x01, 0x00, 0xF0, 0x7F, 0xF8, 0x1F, 0x00, 0x40, 0xFF, 0x47, 0xFF, + 0x02, 0x00, 0xF8, 0x3F, 0xF0, 0x7F, 0x00, 0xC0, 0xFF, 0x02, 0xFE, 0x2F, 0x40, 0xFF, 0x1F, 0xD0, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, + 0x40, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x40, 0xFE, 0x6F, 0x00, 0x00, + // Unicode: [0x0037, seven] + 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, + 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0x00, + 0xFF, 0x0B, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, + 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0x3F, 0x00, + 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, + 0x00, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xD0, + 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x3F, + 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, + 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0x90, 0xFE, 0x6B, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x6F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xAB, 0xFF, 0xFF, 0x80, 0xFF, 0x1B, 0x40, 0xFF, + 0x1F, 0xFC, 0x3F, 0x00, 0xD0, 0xFF, 0xC2, 0xFF, 0x02, 0x00, 0xFC, 0x2F, 0xFC, 0x2F, 0x00, 0x80, + 0xFF, 0x82, 0xFF, 0x02, 0x00, 0xFC, 0x2F, 0xF8, 0x2F, 0x00, 0xC0, 0xFF, 0x01, 0xFF, 0x0B, 0x00, + 0xFE, 0x0B, 0xD0, 0xFF, 0x56, 0xFD, 0x3F, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, + 0xFF, 0x03, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0x1F, + 0x90, 0xFF, 0x1F, 0xFC, 0x2F, 0x00, 0xD0, 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0xF8, 0x3F, 0xFE, 0x0F, + 0x00, 0x40, 0xFF, 0xE7, 0xBF, 0x00, 0x00, 0xF0, 0x7F, 0xFE, 0x0B, 0x00, 0x40, 0xFF, 0xE7, 0xFF, + 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x2F, 0x00, 0xC0, 0xFF, 0xC3, 0xFF, 0x1B, 0x40, 0xFF, 0x2F, 0xF4, + 0xFF, 0xAF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0xD0, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x90, 0xFE, 0x6B, 0x00, 0x00, + // Unicode: [0x0039, nine] + 0x00, 0x50, 0xBA, 0x06, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0xFF, 0x7F, 0x00, + 0xF4, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0x2F, 0xD0, 0xFF, 0x07, 0xF4, 0xFF, 0xC1, + 0xFF, 0x07, 0x00, 0xFF, 0x0B, 0xFF, 0x0B, 0x00, 0xF4, 0x3F, 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0xF5, + 0x3F, 0x00, 0x00, 0xFE, 0xD7, 0xFF, 0x00, 0x00, 0xF8, 0x5F, 0xFF, 0x03, 0x00, 0xE0, 0xBF, 0xFD, + 0x1F, 0x00, 0xC0, 0xFF, 0xF2, 0xFF, 0x00, 0x80, 0xFF, 0x8B, 0xFF, 0x0B, 0x40, 0xFF, 0x2F, 0xFD, + 0xFF, 0xEA, 0xFF, 0xBF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, 0xFE, 0x0B, 0xE0, + 0xFF, 0xFF, 0xF6, 0x2F, 0x00, 0xE4, 0xAF, 0xD0, 0xBF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xFD, 0x47, 0x55, 0x01, 0x00, 0xF8, 0x1F, 0xFD, 0x0F, 0x00, 0xF0, 0x3F, 0xF4, 0x7F, + 0x00, 0xD0, 0xBF, 0xC0, 0xFF, 0x07, 0xD0, 0xFF, 0x01, 0xFD, 0xFF, 0xFA, 0xFF, 0x03, 0xE0, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE8, + 0xBF, 0x01, 0x00, + // Unicode: [0x003A, colon] + 0xE0, 0x1B, 0xF8, 0x3F, 0xFC, 0x7F, 0xFD, 0xBF, 0xFC, 0x7F, 0xF4, 0x2F, 0x90, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x06, 0xF4, 0x2F, 0xFC, 0x7F, 0xFD, 0xBF, 0xFC, 0x7F, 0xF8, 0x3F, 0xE0, 0x1B, + // Unicode: [0x003B, semicolon] + 0xE0, 0x1B, 0xF8, 0x3F, 0xFC, 0x7F, 0xFD, 0xBF, 0xFC, 0x7F, 0xF4, 0x2F, 0x90, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xBF, 0xF0, 0x7F, 0xF4, 0x3F, 0xF8, 0x1F, 0xF8, 0x0F, 0xFC, 0x0B, 0xFD, 0x07, + 0xFD, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xBF, 0x00, 0x15, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x00, 0x54, 0x55, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x07, + 0x00, 0xF8, 0xFF, 0x01, 0x00, 0xFE, 0x7F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x07, 0x00, + 0xF8, 0xFF, 0x01, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0x02, 0x00, + 0xD0, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0x02, + 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x7F, + // Unicode: [0x003D, equal] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0B, + // Unicode: [0x003E, greater] + 0x55, 0x15, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, + 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0xC0, + 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xF4, 0xFF, 0x02, 0x40, 0xFF, 0x2F, 0x00, 0xF4, 0xFF, + 0x02, 0x40, 0xFF, 0x2F, 0x00, 0xF4, 0xFF, 0x03, 0x40, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x03, 0x00, + 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, + // Unicode: [0x003F, question] + 0x00, 0x90, 0xAA, 0x01, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, + 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0x2F, 0xD0, 0xFF, 0xD7, 0xFF, 0x01, 0xD0, + 0xFF, 0xFA, 0x3F, 0x00, 0xF0, 0xBF, 0xA9, 0x0A, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x0B, + 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xD4, 0xFF, 0x0F, 0x80, 0xFF, + 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x2F, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xAF, 0x06, + 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x06, + 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, + 0x00, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x00, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0x00, 0x40, 0xFA, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x01, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0xE0, 0xFF, + 0x07, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x2F, 0x40, 0xFF, 0x07, 0x00, 0x14, 0x00, 0x00, 0xE0, + 0x7F, 0x80, 0xFF, 0x01, 0xE0, 0xFF, 0xC2, 0xBF, 0xC0, 0xBF, 0xD0, 0x7F, 0x00, 0xFD, 0xFF, 0xDF, + 0x7F, 0x80, 0xBF, 0xF0, 0x2F, 0x40, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0xF4, 0x1F, 0xD0, 0xFF, + 0xFF, 0xFF, 0x3F, 0x40, 0xFF, 0xF8, 0x0B, 0xF0, 0xFF, 0x41, 0xFE, 0x3F, 0x40, 0xFF, 0xFC, 0x07, + 0xF4, 0x3F, 0x00, 0xFC, 0x2F, 0x40, 0xFF, 0xFD, 0x03, 0xFC, 0x1F, 0x00, 0xF4, 0x2F, 0x40, 0xFF, + 0xFE, 0x02, 0xFD, 0x0B, 0x00, 0xF4, 0x1F, 0x40, 0xFF, 0xFF, 0x02, 0xFD, 0x0B, 0x00, 0xF4, 0x1F, + 0x80, 0xBF, 0xFF, 0x01, 0xFE, 0x07, 0x00, 0xF8, 0x0F, 0x80, 0xBF, 0xFF, 0x01, 0xFE, 0x07, 0x00, + 0xFC, 0x0F, 0xC0, 0x7F, 0xFF, 0x01, 0xFE, 0x07, 0x00, 0xFD, 0x0B, 0xD0, 0x3F, 0xFF, 0x01, 0xFE, + 0x0F, 0x40, 0xFF, 0x0B, 0xF0, 0x1F, 0xFF, 0x01, 0xFD, 0x7F, 0xE5, 0xFF, 0x0F, 0xF8, 0x0F, 0xFF, + 0x02, 0xFC, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0x07, 0xFE, 0x02, 0xF8, 0xFF, 0xFF, 0xF2, 0xFF, 0xFF, + 0x01, 0xFE, 0x07, 0xE0, 0xFF, 0xBF, 0xD0, 0xFF, 0x7F, 0x00, 0xFD, 0x0B, 0x40, 0xFE, 0x06, 0x40, + 0xFE, 0x06, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0x6F, 0x01, 0x50, 0x2E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0xAB, 0x01, 0x00, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0x00, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0xFE, 0xEF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xF2, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xFD, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0xFF, 0x0B, + 0x00, 0x00, 0xF4, 0x7F, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0xD0, 0xFF, 0x01, 0x00, 0xC0, + 0xFF, 0x02, 0xF0, 0xBF, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFE, 0x0F, 0x00, + 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xFF, 0x0B, 0x00, 0xF4, 0x7F, 0x00, 0x80, 0xFF, 0x03, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF4, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0xAB, 0xAA, 0xAA, + 0xFF, 0x0B, 0xF4, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0xFE, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0xC1, + 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xBF, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0xFE, 0x0F, 0x00, + 0x00, 0x00, 0xFD, 0x1F, + // Unicode: [0x0042, B] + 0xFD, 0xFF, 0xFF, 0xAF, 0x01, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 0xAF, 0xAA, 0xFE, 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0xFE, + 0x3F, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x40, + 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xF8, 0x3F, 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0xD2, 0xFF, 0x01, 0x40, + 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0xFD, 0xFF, 0xFF, + 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0x6F, 0x55, 0xF9, 0xFF, 0xD1, 0xFF, 0x01, + 0x00, 0xF8, 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0xE0, 0xBF, 0xFD, 0x1F, + 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x40, 0xFF, 0xDF, 0xFF, + 0x01, 0x00, 0xFD, 0xBF, 0xFD, 0xAF, 0xAA, 0xFE, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFD, + 0xFF, 0xFF, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0xFF, 0xFF, 0xBF, 0x01, 0x00, + // Unicode: [0x0043, C] + 0x00, 0x00, 0x90, 0xFF, 0x5B, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xBF, 0x55, 0xF9, 0xFF, 0x0B, 0xD0, 0xFF, 0x0B, 0x00, 0x90, 0xFF, + 0x1F, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0x3F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0x7F, 0xF8, + 0x7F, 0x00, 0x00, 0x00, 0x50, 0x15, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x54, 0x15, 0xF4, 0xFF, 0x00, 0x00, + 0x00, 0xFD, 0x7F, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0x3F, 0xD0, 0xFF, 0x0B, 0x00, 0xD0, 0xFF, + 0x1F, 0x80, 0xFF, 0xBF, 0x45, 0xF9, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x40, 0xFE, + 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x5B, 0x00, 0x00, + // Unicode: [0x0044, D] + 0xFD, 0xFF, 0xFF, 0x6B, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0x7F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0xBF, 0xEA, 0xFF, 0xFF, 0x0B, + 0xD0, 0xFF, 0x01, 0x40, 0xFE, 0xFF, 0x02, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x7F, 0xD0, 0xFF, 0x01, + 0x00, 0x80, 0xFF, 0x0B, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFE, + 0x1F, 0xFD, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0x3F, 0xFD, 0x1F, + 0x00, 0x00, 0x80, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x80, + 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xD3, 0xFF, + 0x01, 0x00, 0x00, 0xF8, 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xD2, 0xFF, 0x01, 0x00, 0x00, + 0xFE, 0x2F, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0xD1, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x0B, 0xFD, + 0x1F, 0x00, 0x00, 0xFE, 0x7F, 0xD0, 0xFF, 0x01, 0x40, 0xFE, 0xFF, 0x02, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xD0, + 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x6B, 0x00, 0x00, 0x00, + // Unicode: [0x0045, E] + 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFD, 0xAF, 0xAA, 0xAA, 0xF6, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0x07, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x40, 0xFF, + 0x07, 0x00, 0x00, 0xFD, 0xAF, 0xAA, 0x6A, 0xF4, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0xFF, 0xFF, 0x4B, + 0xFF, 0xFF, 0xFF, 0x2F, 0xFD, 0xFF, 0xFF, 0xBF, 0xF4, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0x01, + 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xAF, 0xAA, 0xAA, 0xF6, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x03, + // Unicode: [0x0046, F] + 0xFD, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFD, 0xAF, 0xAA, 0xAA, 0xDA, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xAF, 0xAA, 0x2A, 0xD0, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, + 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0x01, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, + 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, + // Unicode: [0x0047, G] + 0x00, 0x00, 0x90, 0xFF, 0x6B, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x5A, 0xE5, 0xFF, 0x3F, 0x00, 0xFD, 0xFF, 0x01, 0x00, + 0xFD, 0xFF, 0x02, 0xFC, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xFC, + 0x7F, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x07, 0x00, + 0xFE, 0xFF, 0xFF, 0x7F, 0xFD, 0x1F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xF5, 0xBF, 0x00, 0x50, 0x55, + 0x95, 0xFF, 0xC7, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xFC, + 0x3F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x00, + 0xFD, 0xFF, 0x01, 0x00, 0xF4, 0xFF, 0x02, 0xE0, 0xFF, 0x6F, 0x55, 0xFE, 0xFF, 0x02, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x6B, + 0x00, 0x00, 0x00, + // Unicode: [0x0048, H] + 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, + 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0xAF, 0xAA, 0xAA, 0xFA, 0xFF, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, + 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, + 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xE0, 0xFF, + // Unicode: [0x0049, I] + 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, + 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, + 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, + 0x7F, 0xFD, 0x1F, + // Unicode: [0x004A, J] + 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, + 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, + 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xFE, 0x0F, 0x00, 0xFE, 0xDF, 0xFF, + 0x01, 0xE0, 0xFF, 0xFD, 0x2F, 0x40, 0xFF, 0xCB, 0xFF, 0x1B, 0xFD, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, + 0x03, 0xFF, 0xFF, 0xFF, 0x2F, 0xD0, 0xFF, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0xE4, + 0xBF, 0x02, 0x00, + // Unicode: [0x004B, K] + 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x2F, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0x0F, 0xFD, 0x1F, 0x00, 0xD0, + 0xFF, 0x07, 0xFD, 0x1F, 0x00, 0xF4, 0xFF, 0x01, 0xFD, 0x1F, 0x00, 0xFC, 0xBF, 0x00, 0xFD, 0x1F, + 0x00, 0xFE, 0x2F, 0x00, 0xFD, 0x1F, 0x80, 0xFF, 0x0F, 0x00, 0xFD, 0x1F, 0xD0, 0xFF, 0x07, 0x00, + 0xFD, 0x1F, 0xF4, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0xFC, 0xBF, 0x00, 0x00, 0xFD, 0x1F, 0xFE, 0x2F, + 0x00, 0x00, 0xFD, 0x5F, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0xEF, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0xFD, 0xEF, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0x9F, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0xFE, 0x3F, + 0x00, 0x00, 0xFD, 0x1F, 0xFC, 0xFF, 0x00, 0x00, 0xFD, 0x1F, 0xF4, 0xFF, 0x02, 0x00, 0xFD, 0x1F, + 0xD0, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, 0x80, 0xFF, 0x1F, 0x00, 0xFD, 0x1F, 0x00, 0xFE, 0x7F, 0x00, + 0xFD, 0x1F, 0x00, 0xFC, 0xFF, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0xFF, 0x02, 0xFD, 0x1F, 0x00, 0xD0, + 0xFF, 0x0B, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x7F, + // Unicode: [0x004C, L] + 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0xFD, 0xAF, 0xAA, 0x6A, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, + 0xFD, 0xFF, 0xFF, 0xBF, + // Unicode: [0x004D, M] + 0xFD, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x7F, 0xFD, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, + 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0x7F, + 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x7F, + 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0xFD, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x7F, + 0xFD, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0xFD, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF, 0x7F, + 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0xFD, 0xDF, 0xFF, 0x00, 0x00, 0xFF, 0xF7, 0x7F, + 0xFD, 0x9F, 0xFF, 0x01, 0x40, 0xFF, 0xF6, 0x7F, 0xFD, 0x5F, 0xFF, 0x02, 0x80, 0xFF, 0xF5, 0x7F, + 0xFD, 0x1F, 0xFF, 0x03, 0xC0, 0xFF, 0xF4, 0x7F, 0xFD, 0x1F, 0xFE, 0x0B, 0xE0, 0x7F, 0xF4, 0x7F, + 0xFD, 0x1F, 0xFC, 0x0F, 0xF0, 0x3F, 0xF4, 0x7F, 0xFD, 0x1F, 0xF8, 0x1F, 0xF4, 0x2F, 0xF4, 0x7F, + 0xFD, 0x1F, 0xF4, 0x2F, 0xF8, 0x1F, 0xF4, 0x7F, 0xFD, 0x1F, 0xF0, 0x3F, 0xFC, 0x0F, 0xF4, 0x7F, + 0xFD, 0x1F, 0xE0, 0xBF, 0xFE, 0x07, 0xF4, 0x7F, 0xFD, 0x1F, 0xC0, 0xFF, 0xFF, 0x03, 0xF4, 0x7F, + 0xFD, 0x1F, 0x80, 0xFF, 0xFF, 0x02, 0xF4, 0x7F, 0xFD, 0x1F, 0x40, 0xFF, 0xFF, 0x01, 0xF4, 0x7F, + 0xFD, 0x1F, 0x00, 0xFF, 0xFF, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xFE, 0xBF, 0x00, 0xF4, 0x7F, + 0xFD, 0x1F, 0x00, 0xFC, 0x3F, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0xF8, 0x2F, 0x00, 0xF4, 0x7F, + 0xFD, 0x1F, 0x00, 0xF4, 0x1F, 0x00, 0xF4, 0x7F, + // Unicode: [0x004E, N] + 0xFD, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0xF6, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x0F, 0x00, + 0x00, 0xFC, 0x6F, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xF6, + 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0xFF, 0x01, 0x00, 0xFC, 0x6F, 0xFF, 0xFF, 0x0F, 0x00, + 0xF0, 0xBF, 0xFD, 0xFF, 0xBF, 0x00, 0xC0, 0xFF, 0xF6, 0xBF, 0xFF, 0x07, 0x00, 0xFF, 0xDB, 0xFF, + 0xF9, 0x3F, 0x00, 0xFC, 0x6F, 0xFF, 0xC7, 0xFF, 0x02, 0xF0, 0xBF, 0xFD, 0x1F, 0xFD, 0x1F, 0xC0, + 0xFF, 0xF6, 0x7F, 0xE0, 0xFF, 0x00, 0xFF, 0xDB, 0xFF, 0x41, 0xFF, 0x0B, 0xFC, 0x6F, 0xFF, 0x07, + 0xF8, 0x7F, 0xF0, 0xBF, 0xFD, 0x1F, 0xC0, 0xFF, 0xC3, 0xFF, 0xF6, 0x7F, 0x00, 0xFD, 0x2F, 0xFF, + 0xDB, 0xFF, 0x01, 0xE0, 0xFF, 0xFC, 0x6F, 0xFF, 0x07, 0x00, 0xFF, 0xFB, 0xBF, 0xFD, 0x1F, 0x00, + 0xF4, 0xFF, 0xFF, 0xF6, 0x7F, 0x00, 0x80, 0xFF, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0xFC, 0xFF, 0x6F, + 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0xF6, 0x7F, 0x00, 0x00, + 0xF4, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0xBF, 0xFD, + 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x02, + // Unicode: [0x004F, O] + 0x00, 0x00, 0x90, 0xFE, 0x6B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x16, 0xE5, 0xFF, 0x3F, 0x00, 0xFD, 0xBF, 0x00, 0x00, + 0xF8, 0xFF, 0x02, 0xFC, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x1F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xF8, + 0xBF, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xC7, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFD, 0x5F, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFB, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF7, 0xBF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xCB, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xFC, + 0x7F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x01, + 0xFD, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0x02, 0xE0, 0xFF, 0x6F, 0x41, 0xFE, 0xFF, 0x03, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x90, 0xFE, 0x6B, + 0x00, 0x00, 0x00, + // Unicode: [0x0050, P] + 0xFD, 0xFF, 0xFF, 0x6B, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x1B, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 0xAF, 0xAA, 0xFF, 0xFF, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0xD7, + 0xFF, 0x01, 0x00, 0xFD, 0x6F, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0xF7, + 0x7F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xF8, 0x7F, 0xFF, 0x07, 0x00, 0xF4, 0xBF, 0xFD, + 0x1F, 0x00, 0xF4, 0xFF, 0xF5, 0xBF, 0xAA, 0xFA, 0xFF, 0xD3, 0xFF, 0xFF, 0xFF, 0xFF, 0x47, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0xAF, 0x01, 0xD0, 0xFF, + 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0x00, 0x90, 0xFE, 0x6B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x16, 0xE5, 0xFF, 0x3F, 0x00, 0xFD, 0xBF, 0x00, 0x00, + 0xF8, 0xFF, 0x02, 0xFC, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x1F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xF8, + 0xBF, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xC7, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFD, 0x5F, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFB, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF7, 0xBF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xCB, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xFC, + 0x7F, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xBF, 0xC0, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x01, + 0xFD, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0x02, 0xE0, 0xFF, 0x6F, 0x41, 0xFE, 0xFF, 0x03, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x90, 0xFE, 0xEB, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xAA, 0x0A, + // Unicode: [0x0052, R] + 0xFD, 0xFF, 0xFF, 0x6B, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x2F, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFD, 0xAF, 0xAA, 0xFF, 0xFF, 0xD1, 0xFF, 0x01, 0x40, 0xFF, + 0x2F, 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0xD3, 0xFF, 0x01, 0x00, 0xF8, 0x7F, 0xFD, 0x1F, 0x00, 0x40, + 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x80, 0xFF, 0xD7, 0xFF, 0x01, 0x00, + 0xFC, 0x3F, 0xFD, 0x1F, 0x00, 0xE0, 0xFF, 0xD2, 0xFF, 0x56, 0x95, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, + 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0xD0, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0xF8, 0xBF, 0x00, 0xD0, 0xFF, 0x41, 0xFF, 0x0F, 0x00, 0xFD, 0x1F, + 0xE0, 0xFF, 0x02, 0xD0, 0xFF, 0x01, 0xFC, 0x7F, 0x00, 0xFD, 0x1F, 0x40, 0xFF, 0x0B, 0xD0, 0xFF, + 0x01, 0xF0, 0xFF, 0x01, 0xFD, 0x1F, 0x00, 0xFD, 0x3F, 0xD0, 0xFF, 0x01, 0x80, 0xFF, 0x0B, 0xFD, + 0x1F, 0x00, 0xF4, 0xFF, 0xD1, 0xFF, 0x01, 0x00, 0xFE, 0x2F, 0xFD, 0x1F, 0x00, 0xC0, 0xFF, 0x07, + // Unicode: [0x0053, S] + 0x00, 0xA4, 0xFF, 0x1A, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0xFF, 0x7F, 0x00, + 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFB, 0xFF, 0x3F, 0xF4, 0xFF, 0x01, 0xF8, 0xFF, 0xE1, + 0xFF, 0x01, 0x80, 0xFF, 0x8B, 0xFF, 0x03, 0x00, 0xFD, 0x3F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, + 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, + 0xFF, 0xBF, 0x01, 0x00, 0x80, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0xF4, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xF9, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF9, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, + 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x55, 0x05, 0x00, 0xE0, 0xFF, 0xFD, 0x7F, + 0x00, 0x80, 0xFF, 0xE7, 0xFF, 0x02, 0x00, 0xFF, 0x4F, 0xFF, 0x2F, 0x40, 0xFE, 0x2F, 0xFC, 0xFF, + 0xEB, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, 0xFF, 0xBF, 0x00, 0x80, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0x90, 0xFE, 0x1B, 0x00, 0x00, + // Unicode: [0x0054, T] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xA9, 0xAA, 0xFF, 0xAB, 0xAA, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, + // Unicode: [0x0055, U] + 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, + 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, + 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, + 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, + 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, + 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, + 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, + 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xF8, 0x3F, 0xFC, 0x2F, 0x00, 0x00, 0xFC, 0x3F, 0xF8, 0x7F, + 0x00, 0x00, 0xFD, 0x2F, 0xF8, 0xFF, 0x00, 0x40, 0xFF, 0x1F, 0xF0, 0xFF, 0x5B, 0xE5, 0xFF, 0x0F, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x40, 0xFA, 0xAF, 0x01, 0x00, + // Unicode: [0x0056, V] + 0xFD, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xF8, 0x7F, + 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0xF0, 0xFF, 0x00, 0x00, + 0x00, 0xFE, 0x1F, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x0F, 0xC0, 0xFF, 0x02, 0x00, 0x40, 0xFF, + 0x0B, 0x80, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0x07, 0x40, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x03, 0x00, + 0xFF, 0x0B, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFE, 0x0F, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0xF8, + 0x3F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0xE0, 0xFF, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0xFF, 0x0B, 0x00, 0x00, 0xC0, + 0xFF, 0x42, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x83, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0xC7, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x0B, 0x00, 0x00, + // Unicode: [0x0057, W] + 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xFC, 0xBF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x0F, + 0x00, 0x40, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xF5, 0xBF, 0x00, + 0x00, 0xFD, 0xFF, 0x02, 0x00, 0xF8, 0x3F, 0xFC, 0x3F, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0xFF, + 0x0F, 0xFE, 0x0F, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0xD0, 0xFF, 0x42, 0xFF, 0x07, 0x00, 0xFC, 0xFF, + 0x1F, 0x00, 0xF4, 0x7F, 0xD0, 0xFF, 0x02, 0x40, 0xFF, 0xFF, 0x0B, 0x00, 0xFE, 0x0F, 0xF0, 0xBF, + 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0x02, 0xF8, 0x3F, 0x00, 0xFC, 0xDF, 0xFF, 0x00, 0xF0, + 0xBF, 0x00, 0xFD, 0x1F, 0x40, 0xFF, 0xF3, 0x7F, 0x00, 0xFD, 0x1F, 0x00, 0xFF, 0x07, 0xD0, 0xBF, + 0xF8, 0x1F, 0x80, 0xFF, 0x03, 0xC0, 0xFF, 0x02, 0xF8, 0x1F, 0xFE, 0x0B, 0xE0, 0xBF, 0x00, 0xE0, + 0xBF, 0x00, 0xFF, 0x43, 0xFF, 0x03, 0xFC, 0x1F, 0x00, 0xF4, 0x3F, 0xD0, 0xBF, 0xC0, 0xFF, 0x41, + 0xFF, 0x07, 0x00, 0xFC, 0x1F, 0xF4, 0x2F, 0xE0, 0x7F, 0xD0, 0xFF, 0x00, 0x00, 0xFF, 0x07, 0xFE, + 0x07, 0xF4, 0x2F, 0xF8, 0x2F, 0x00, 0x80, 0xFF, 0xC2, 0xFF, 0x00, 0xFD, 0x0F, 0xFF, 0x07, 0x00, + 0xD0, 0xFF, 0xF4, 0x2F, 0x00, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0xF0, 0x3F, 0xFD, 0x07, 0x80, 0xFF, + 0xF5, 0x3F, 0x00, 0x00, 0xF8, 0x9F, 0xFF, 0x01, 0xD0, 0xBF, 0xFE, 0x0B, 0x00, 0x00, 0xFE, 0xFB, + 0x3F, 0x00, 0xF4, 0xBF, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0xFF, 0x0B, 0x00, 0xFC, 0xFF, 0x3F, 0x00, + 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x40, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, + 0xFF, 0x02, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x02, + 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xFD, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xE1, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0x03, 0xFF, 0x2F, 0x00, + 0xC0, 0xFF, 0x07, 0xF4, 0xFF, 0x00, 0x80, 0xFF, 0x0B, 0x80, 0xFF, 0x0B, 0x00, 0xFF, 0x0F, 0x00, + 0xFC, 0x7F, 0x00, 0xFE, 0x1F, 0x00, 0xD0, 0xFF, 0x03, 0xFD, 0x3F, 0x00, 0x00, 0xFE, 0x2F, 0xF8, + 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xF5, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xBF, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xBF, + 0xF8, 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0xD1, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x02, 0xFE, 0x3F, 0x00, + 0xC0, 0xFF, 0x03, 0xF0, 0xFF, 0x02, 0x80, 0xFF, 0x07, 0x40, 0xFF, 0x0F, 0x40, 0xFF, 0x0F, 0x00, + 0xF8, 0xBF, 0x00, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x07, 0xFD, 0x2F, 0x00, 0x00, 0xFD, 0x3F, 0xFC, + 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x02, + // Unicode: [0x0059, Y] + 0xFD, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xE2, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0x47, 0xFF, 0x0F, 0x00, + 0x40, 0xFF, 0x0B, 0xF8, 0x7F, 0x00, 0x00, 0xFF, 0x1F, 0xD0, 0xFF, 0x02, 0x00, 0xFD, 0x2F, 0x00, + 0xFE, 0x1F, 0x00, 0xF8, 0x7F, 0x00, 0xF4, 0xBF, 0x00, 0xF4, 0xBF, 0x00, 0x80, 0xFF, 0x03, 0xE0, + 0xFF, 0x01, 0x00, 0xFD, 0x2F, 0xC0, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0x80, 0xFF, 0x07, 0x00, 0x40, + 0xFF, 0x0B, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0x3F, 0xFD, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFD, 0x2F, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xBF, 0x00, 0x00, 0x00, + // Unicode: [0x005A, Z] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0xF8, + 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0x2F, 0x00, + 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0x00, 0xF0, + 0xFF, 0x01, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0x7F, 0x00, + 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xD0, + 0xFF, 0x02, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0xBF, 0xAA, 0xAA, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + // Unicode: [0x005B, bracketleft] + 0xA9, 0xAA, 0x9A, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF9, 0xFF, 0x7F, 0xFE, 0xFF, 0x9F, 0xFF, 0x02, + 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, + 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, + 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, + 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, + 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, + 0xF8, 0x2F, 0x00, 0xFE, 0x0B, 0x80, 0xFF, 0x02, 0xE0, 0xBF, 0x00, 0xF8, 0x2F, 0x00, 0xFE, 0x0B, + 0x80, 0xFF, 0xAB, 0xE6, 0xFF, 0xFF, 0xF9, 0xFF, 0x7F, 0xFE, 0xFF, 0x9F, 0xFF, 0xFF, 0x07, + // Unicode: [0x005C, backslash] + 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, + 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00, 0xF4, + 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0x0B, 0x00, 0x00, 0xF4, 0x3F, 0x00, 0x00, + 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x00, + 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, 0x80, 0xFF, + 0x03, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x02, 0x00, 0x00, + 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0x0B, 0x00, + 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x2F, + 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xE0, + 0xBF, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, + 0x80, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, + 0x00, 0x00, 0xFE, 0x0B, + // Unicode: [0x005D, bracketright] + 0xA9, 0xAA, 0x9A, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF9, 0xFF, 0x7F, 0xFE, 0xFF, 0x1F, 0x00, 0xFF, + 0x07, 0xC0, 0xFF, 0x01, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, + 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, + 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, + 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, + 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, + 0x01, 0xF0, 0x7F, 0x00, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xC0, 0xFF, 0x01, 0xF0, 0x7F, 0x00, 0xFC, + 0x5F, 0xAA, 0xFF, 0xE7, 0xFF, 0xFF, 0xF9, 0xFF, 0x7F, 0xFE, 0xFF, 0x9F, 0xFF, 0xFF, 0x07, + // Unicode: [0x005E, asciicircum] + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xFF, + 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0xF8, 0x3F, 0x00, 0x00, 0xD0, 0xFF, 0xD1, 0xFF, 0x01, 0x00, 0x80, + 0xFF, 0x03, 0xFE, 0x0F, 0x00, 0x00, 0xFF, 0x0B, 0xF4, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0xC0, 0xFF, + 0x02, 0x00, 0xFC, 0x2F, 0x00, 0xFE, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xF0, 0xBF, 0x00, 0xF0, 0xFF, + 0x00, 0x80, 0xFF, 0x03, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x80, 0xFF, 0x03, 0x00, 0xE0, 0xFF, + 0x00, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x07, 0xFE, 0x0F, 0x00, 0x00, 0xFC, 0x2F, 0xFC, 0x2F, 0x00, + 0x00, 0xE0, 0xFF, 0xF5, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x0B, + // Unicode: [0x005F, underscore] + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xBF, + // Unicode: [0x0060, grave] + 0x0A, 0x00, 0xE0, 0x0B, 0x00, 0xFE, 0x07, 0xE0, 0xFF, 0x07, 0xFD, 0xFF, 0x07, 0xFD, 0xBF, 0x00, + 0xFD, 0x0B, 0x00, 0xB9, 0x00, 0x00, 0x05, + // Unicode: [0x0061, a] + 0x00, 0x90, 0xFE, 0x06, 0xF4, 0x7F, 0x00, 0xF8, 0xFF, 0xBF, 0xF4, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, + 0xF6, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF4, 0xFF, + 0x1B, 0xE4, 0xFF, 0x7F, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x1F, 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x0F, 0x00, 0x00, + 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x1F, + 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xF4, 0xFF, 0x1B, 0xE4, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xF6, 0x7F, 0x00, 0xF8, + 0xFF, 0xBF, 0xF4, 0x7F, 0x00, 0x90, 0xFE, 0x0A, 0xF4, 0x7F, + // Unicode: [0x0062, b] + 0x54, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x90, 0xBF, 0x06, 0x00, 0xFD, 0x1F, 0xFD, 0xFF, 0x2F, 0x00, 0xFD, 0x9F, 0xFF, 0xFF, + 0xFF, 0x01, 0xFD, 0xEF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFD, 0xFF, + 0x1B, 0xE4, 0xFF, 0x1F, 0xFD, 0xFF, 0x01, 0x00, 0xFF, 0x3F, 0xFD, 0xBF, 0x00, 0x00, 0xFC, 0x7F, + 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, + 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x2F, + 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0xBF, 0x00, 0x00, 0xFD, 0x7F, + 0xFD, 0xFF, 0x01, 0x40, 0xFF, 0x3F, 0xFD, 0xFF, 0x1B, 0xE4, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFD, 0x9F, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0x1F, + 0xFD, 0xFF, 0x2F, 0x00, 0xFD, 0x1F, 0x90, 0xBF, 0x06, 0x00, + // Unicode: [0x0063, c] + 0x00, 0x40, 0xFE, 0x6B, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x2F, + 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x0B, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xFF, 0x2F, 0x40, 0xFF, + 0x2F, 0xF8, 0xBF, 0x00, 0xD0, 0xFF, 0xC7, 0xFF, 0x03, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xF8, 0xBF, 0xF8, 0xBF, 0x00, 0xD0, 0xFF, 0x47, 0xFF, 0x6F, + 0x40, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, + 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x40, 0xFE, 0x6B, 0x00, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x00, 0x00, 0x50, 0x15, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x90, 0xFE, 0x06, 0xF4, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0xF4, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, + 0xF6, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF4, 0xFF, + 0x1B, 0xE4, 0xFF, 0x7F, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x1F, 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x0F, 0x00, 0x00, + 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x1F, + 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xF4, 0xFF, 0x1B, 0xE4, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xF6, 0x7F, 0x00, 0xF8, + 0xFF, 0xBF, 0xF4, 0x7F, 0x00, 0x80, 0xFE, 0x06, 0xF4, 0x7F, + // Unicode: [0x0065, e] + 0x00, 0x40, 0xFE, 0x6B, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xE0, 0xFF, 0xAF, 0xFE, 0xFF, 0x02, 0xFD, 0x7F, 0x00, + 0xF8, 0xFF, 0x80, 0xFF, 0x07, 0x00, 0xF4, 0xBF, 0xF0, 0xBF, 0x00, 0x00, 0xF8, 0x3F, 0xFD, 0x1F, + 0x00, 0x00, 0xFE, 0x8F, 0xFF, 0xAF, 0xAA, 0xEA, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, 0xA9, 0x1A, 0xF8, 0x7F, 0x00, 0xC0, + 0xFF, 0x07, 0xFD, 0xBF, 0x00, 0xF9, 0xFF, 0x00, 0xFE, 0xFF, 0xFA, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xE4, 0xBF, 0x06, 0x00, 0x00, + // Unicode: [0x0066, f] + 0x00, 0x40, 0xAA, 0x00, 0xF8, 0xBF, 0x00, 0xFE, 0xBF, 0x80, 0xFF, 0xBF, 0xC0, 0xFF, 0xBF, 0xD0, + 0xFF, 0x07, 0xE0, 0xFF, 0x01, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xAA, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, + 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, + 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, + 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, 0xE0, 0xFF, 0x00, + // Unicode: [0x0067, g] + 0x00, 0x90, 0xFE, 0x06, 0xF4, 0x7F, 0x00, 0xF8, 0xFF, 0xBF, 0xF4, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, + 0xF6, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF4, 0xFF, + 0x1B, 0xE4, 0xFF, 0x7F, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x1F, 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x0F, 0x00, 0x00, + 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x1F, + 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xF4, 0xFF, 0x1B, 0xE4, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFB, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xF6, 0x7F, 0x00, 0xF8, + 0xFF, 0x7F, 0xF4, 0x7F, 0x00, 0x80, 0xFE, 0x06, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0xA4, 0x1A, 0x00, 0x00, 0xF8, 0x3F, 0xF8, 0x7F, 0x00, 0x00, + 0xFC, 0x3F, 0xF4, 0xFF, 0x00, 0x00, 0xFE, 0x2F, 0xF0, 0xFF, 0x1B, 0xD0, 0xFF, 0x1F, 0xD0, 0xFF, + 0xFF, 0xFF, 0xFF, 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xBF, 0x00, + 0x00, 0xE4, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x40, 0xFA, 0xBF, 0x01, 0x00, + // Unicode: [0x0068, h] + 0x54, 0x05, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0xA4, 0xBF, + 0x01, 0xD0, 0xFF, 0xE1, 0xFF, 0xFF, 0x01, 0xFD, 0xDF, 0xFF, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0x6F, 0x40, 0xFF, 0x7F, 0xFD, 0xBF, 0x00, + 0xC0, 0xFF, 0xDB, 0xFF, 0x03, 0x00, 0xF4, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x01, + 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, + 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, + 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, + 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x0F, + // Unicode: [0x0069, i] + 0xE4, 0x47, 0xFF, 0xE7, 0xFF, 0xFB, 0xFF, 0xFE, 0x2F, 0xFF, 0x07, 0x29, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, + 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, + 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, + // Unicode: [0x006A, j] + 0x00, 0xA8, 0x00, 0xF0, 0x7F, 0x80, 0xFF, 0x0B, 0xF8, 0xFF, 0x80, 0xFF, 0x0F, 0xF4, 0x7F, 0x00, + 0xF9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, + 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, + 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, + 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, + 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF4, 0x7F, 0x40, 0xFF, 0x07, 0xF8, 0x7F, 0xFF, + 0xFF, 0xF3, 0xFF, 0x2F, 0xFF, 0xFF, 0xF1, 0xFF, 0x07, 0xFF, 0x06, 0x00, + // Unicode: [0x006B, k] + 0x54, 0x05, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x40, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0xF8, 0xFF, 0xF6, + 0x7F, 0x00, 0xF4, 0xFF, 0xD2, 0xFF, 0x01, 0xF0, 0xFF, 0x43, 0xFF, 0x07, 0xE0, 0xFF, 0x07, 0xFD, + 0x1F, 0xE0, 0xFF, 0x07, 0xF4, 0x7F, 0xD0, 0xFF, 0x07, 0xD0, 0xFF, 0xD1, 0xFF, 0x0B, 0x40, 0xFF, + 0xC7, 0xFF, 0x0B, 0x00, 0xFD, 0x9F, 0xFF, 0x0B, 0x00, 0xF4, 0xBF, 0xFF, 0x0F, 0x00, 0xD0, 0xFF, + 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0xF4, 0xBF, + 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0xF9, 0xBF, 0x00, 0x40, 0xFF, 0xC7, 0xFF, 0x0B, 0x00, 0xFD, 0x1F, + 0xFC, 0xBF, 0x00, 0xF4, 0x7F, 0xD0, 0xFF, 0x07, 0xD0, 0xFF, 0x01, 0xFE, 0x7F, 0x40, 0xFF, 0x07, + 0xE0, 0xFF, 0x07, 0xFD, 0x1F, 0x00, 0xFF, 0x3F, 0xF4, 0x7F, 0x00, 0xF4, 0xFF, 0xD2, 0xFF, 0x01, + 0x80, 0xFF, 0x2F, + // Unicode: [0x006C, l] + 0x54, 0x45, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, + 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, + 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0xF5, + 0x7F, 0xFD, 0x5F, 0xFF, 0xD7, 0xFF, 0x01, + // Unicode: [0x006D, m] + 0xFD, 0x1F, 0xE4, 0xBF, 0x01, 0x00, 0xE9, 0x6F, 0x00, 0xD0, 0xFF, 0xE5, 0xFF, 0xFF, 0x01, 0xF8, + 0xFF, 0xBF, 0x00, 0xFD, 0xEF, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0x2F, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, + 0xFF, 0x6F, 0x40, 0xFF, 0xFF, 0x2F, 0x90, 0xFF, 0x2F, 0xFD, 0xBF, 0x00, 0xC0, 0xFF, 0x7F, 0x00, + 0xE0, 0xFF, 0xD3, 0xFF, 0x03, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0xFC, 0x7F, 0xFD, 0x2F, 0x00, 0x00, + 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFD, + 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x00, 0x00, + 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, + 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, + 0x01, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x40, + 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, + 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, 0x7F, 0xFD, 0x1F, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x40, 0xFF, 0xD7, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF4, + 0x7F, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x40, 0xFF, 0x07, + // Unicode: [0x006E, n] + 0xFD, 0x1F, 0xE4, 0xBF, 0x01, 0xD0, 0xFF, 0xE1, 0xFF, 0xFF, 0x01, 0xFD, 0xEF, 0xFF, 0xFF, 0x7F, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0x6F, 0x40, 0xFF, + 0x7F, 0xFD, 0xBF, 0x00, 0xC0, 0xFF, 0xD7, 0xFF, 0x03, 0x00, 0xF4, 0xBF, 0xFD, 0x2F, 0x00, 0x00, + 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, + 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, + 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, + 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, + 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFD, 0x1F, 0x00, 0x00, 0xFE, 0x0F, + // Unicode: [0x006F, o] + 0x00, 0x40, 0xFA, 0x6F, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0x01, + 0xF9, 0xFF, 0x82, 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0xF0, 0xFF, 0x00, 0x00, 0xF8, 0xBF, 0xFD, 0x2F, + 0x00, 0x00, 0xFC, 0x6F, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xFB, + 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFE, 0x0F, 0x00, 0x00, 0xF8, 0x7F, 0xFF, 0x07, 0x00, 0x00, 0xFF, + 0xDF, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0xF2, 0xFF, 0x00, 0x00, 0xF8, 0xBF, 0xF8, 0xBF, 0x00, 0x80, + 0xFF, 0x0F, 0xFD, 0xFF, 0x01, 0xF9, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0xA4, 0xFF, 0x06, 0x00, 0x00, + // Unicode: [0x0070, p] + 0xFD, 0x1F, 0x90, 0xBF, 0x06, 0x00, 0xFD, 0x1F, 0xFD, 0xFF, 0x2F, 0x00, 0xFD, 0x9F, 0xFF, 0xFF, + 0xFF, 0x01, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFD, 0xFF, + 0x1B, 0xE4, 0xFF, 0x1F, 0xFD, 0xFF, 0x01, 0x00, 0xFF, 0x3F, 0xFD, 0xBF, 0x00, 0x00, 0xFC, 0x7F, + 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0xBF, 0xFD, 0x2F, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x1F, 0x00, 0x00, + 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x2F, + 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0xBF, 0x00, 0x00, 0xFD, 0x7F, + 0xFD, 0xFF, 0x01, 0x40, 0xFF, 0x3F, 0xFD, 0xFF, 0x1B, 0xE4, 0xFF, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFD, 0x9F, 0xFF, 0xFF, 0xFF, 0x01, 0xFD, 0x1F, + 0xFD, 0xFF, 0x2F, 0x00, 0xFD, 0x1F, 0x90, 0xBF, 0x06, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x00, 0x40, 0xFE, 0x1A, 0xF4, 0x7F, 0x00, 0xF8, 0xFF, 0xBF, 0xF4, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, + 0xF7, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF4, 0xFF, + 0x1B, 0xE4, 0xFF, 0x7F, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x1F, 0x00, 0x00, 0xF8, 0x7F, 0xFE, 0x0F, 0x00, 0x00, + 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF4, 0x7F, 0xFE, 0x1F, + 0x00, 0x00, 0xF8, 0x7F, 0xFD, 0x2F, 0x00, 0x00, 0xFC, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0xFD, 0x7F, + 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0x7F, 0xF4, 0xFF, 0x1B, 0xE4, 0xFF, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xF6, 0x7F, 0x00, 0xF8, + 0xFF, 0xBF, 0xF4, 0x7F, 0x00, 0x80, 0xFE, 0x06, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x7F, + // Unicode: [0x0072, r] + 0xFD, 0x1F, 0xA0, 0xF7, 0x7F, 0xF4, 0xDF, 0xFF, 0xF9, 0x7F, 0xFF, 0xFB, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0xFF, 0xFF, 0xDF, 0xFF, 0x6F, 0x40, 0xFF, 0x2F, 0x00, 0xFD, 0x3F, 0x00, 0xF4, 0xBF, 0x00, + 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, + 0x40, 0xFF, 0x07, 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x07, + 0x00, 0xFD, 0x1F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x01, 0x00, + // Unicode: [0x0073, s] + 0x00, 0xA4, 0xFF, 0x06, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xFD, 0xFF, 0xFF, 0x2F, 0xC0, 0xFF, + 0xFF, 0xFF, 0x1F, 0xF4, 0xFF, 0xEA, 0xFF, 0x0F, 0xFE, 0x0F, 0x80, 0xFF, 0xC7, 0xFF, 0x02, 0xC0, + 0xFF, 0xF2, 0xBF, 0x00, 0x50, 0x55, 0xF8, 0xBF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0x1B, 0x00, 0x00, + 0xFD, 0xFF, 0xBF, 0x01, 0x00, 0xFD, 0xFF, 0xFF, 0x07, 0x00, 0xE4, 0xFF, 0xFF, 0x07, 0x00, 0x40, + 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xE4, 0xFF, 0x56, 0x15, 0x00, 0xE0, 0xFF, 0xFD, 0x2F, 0x00, 0xF4, + 0x3F, 0xFF, 0x1F, 0x00, 0xFF, 0x8B, 0xFF, 0xAF, 0xFA, 0xFF, 0x82, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, + 0xFF, 0xFF, 0xFF, 0x07, 0x40, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xF9, 0xAF, 0x01, 0x00, + // Unicode: [0x0074, t] + 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, + 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xF7, + 0xFF, 0xFF, 0x7F, 0xEA, 0xFF, 0xAA, 0x02, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, + 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xD0, + 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0xD0, 0xFF, 0x01, + 0x00, 0xFD, 0x2F, 0x00, 0xC0, 0xFF, 0xBF, 0x06, 0xF8, 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0x07, 0xD0, + 0xFF, 0x7F, 0x00, 0x90, 0xFF, 0x07, + // Unicode: [0x0075, u] + 0xFD, 0x0F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0xFF, + 0xDB, 0xFF, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0xF0, + 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, + 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x00, 0x00, + 0xF0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0xFF, 0xDB, 0xFF, 0x01, 0x00, 0xF0, 0xBF, 0xFD, 0x1F, 0x00, + 0x40, 0xFF, 0xDB, 0xFF, 0x02, 0x00, 0xF8, 0xBF, 0xFC, 0x7F, 0x00, 0xD0, 0xFF, 0x8B, 0xFF, 0x2F, + 0x40, 0xFF, 0xBF, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, + 0xFF, 0xBF, 0xFF, 0x0B, 0xE0, 0xFF, 0xFF, 0xF1, 0xBF, 0x00, 0xA4, 0xBF, 0x01, 0xFF, 0x0B, + // Unicode: [0x0076, v] + 0xFD, 0x2F, 0x00, 0x00, 0xF8, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0xF8, 0x7F, 0x00, 0x00, + 0xFD, 0x2F, 0xF4, 0xBF, 0x00, 0x00, 0xFE, 0x1F, 0xF0, 0xFF, 0x00, 0x00, 0xFF, 0x0F, 0xE0, 0xFF, + 0x01, 0x40, 0xFF, 0x0B, 0xD0, 0xFF, 0x01, 0x80, 0xFF, 0x07, 0xC0, 0xFF, 0x02, 0x80, 0xFF, 0x03, + 0x80, 0xFF, 0x03, 0xC0, 0xFF, 0x02, 0x40, 0xFF, 0x07, 0xD0, 0xFF, 0x01, 0x00, 0xFF, 0x0B, 0xE0, + 0xBF, 0x00, 0x00, 0xFE, 0x0F, 0xF0, 0x7F, 0x00, 0x00, 0xFC, 0x1F, 0xF4, 0x3F, 0x00, 0x00, 0xF8, + 0x2F, 0xF8, 0x2F, 0x00, 0x00, 0xF4, 0x3F, 0xFC, 0x1F, 0x00, 0x00, 0xF0, 0x7F, 0xFD, 0x0F, 0x00, + 0x00, 0xE0, 0xBF, 0xFE, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, 0x00, 0x00, + // Unicode: [0x0077, w] + 0xFE, 0x0F, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xFF, 0xD7, 0xFF, 0x01, 0x40, 0xFF, 0x1F, 0x00, 0xF4, + 0x3F, 0xFC, 0x2F, 0x00, 0xF4, 0xFF, 0x02, 0x40, 0xFF, 0x82, 0xFF, 0x02, 0x80, 0xFF, 0x3F, 0x00, + 0xF8, 0x1F, 0xF4, 0x3F, 0x00, 0xFC, 0xFF, 0x03, 0xC0, 0xFF, 0x01, 0xFF, 0x07, 0xD0, 0xFF, 0x7F, + 0x00, 0xFC, 0x0F, 0xF0, 0x7F, 0x00, 0xFD, 0xFF, 0x0B, 0xD0, 0xBF, 0x00, 0xFE, 0x0B, 0xE0, 0xEF, + 0xBF, 0x00, 0xFE, 0x07, 0xD0, 0xFF, 0x00, 0xFF, 0xFA, 0x0F, 0xE0, 0x3F, 0x00, 0xFC, 0x0F, 0xF4, + 0x5F, 0xFF, 0x01, 0xFF, 0x02, 0x80, 0xFF, 0x41, 0xFF, 0xF4, 0x2F, 0xF4, 0x2F, 0x00, 0xF4, 0x2F, + 0xF8, 0x0B, 0xFF, 0x42, 0xFF, 0x01, 0x40, 0xFF, 0xC2, 0xBF, 0xE0, 0x3F, 0xF8, 0x0F, 0x00, 0xF0, + 0x3F, 0xFC, 0x07, 0xFD, 0xC7, 0xBF, 0x00, 0x00, 0xFE, 0xD7, 0x3F, 0xD0, 0x7F, 0xFC, 0x07, 0x00, + 0xD0, 0x7F, 0xFE, 0x02, 0xFC, 0xDB, 0x3F, 0x00, 0x00, 0xFC, 0xFB, 0x2F, 0x80, 0xFF, 0xFE, 0x03, + 0x00, 0x80, 0xFF, 0xFF, 0x01, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x40, 0xFF, 0xFF, + 0x01, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0B, 0x00, 0xFE, + 0xBF, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0xD0, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x03, 0x00, + 0xFD, 0x3F, 0x00, 0x00, + // Unicode: [0x0078, x] + 0xFD, 0x3F, 0x00, 0xC0, 0xFF, 0xE3, 0xFF, 0x02, 0x80, 0xFF, 0x07, 0xFF, 0x1F, 0x40, 0xFF, 0x0B, + 0xF4, 0xFF, 0x00, 0xFE, 0x0F, 0x80, 0xFF, 0x0B, 0xFD, 0x1F, 0x00, 0xFD, 0x3F, 0xFC, 0x2F, 0x00, + 0xE0, 0xFF, 0xFA, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, + 0xC0, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xDF, 0xFF, 0x07, 0x00, 0xFD, 0x2F, 0xFE, 0x2F, 0x00, 0xF8, + 0x3F, 0xF0, 0xFF, 0x01, 0xF4, 0x7F, 0x40, 0xFF, 0x0F, 0xF0, 0xBF, 0x00, 0xF8, 0xBF, 0xE0, 0xFF, + 0x01, 0xC0, 0xFF, 0xD7, 0xFF, 0x02, 0x00, 0xFD, 0x3F, + // Unicode: [0x0079, y] + 0xFE, 0x2F, 0x00, 0x00, 0xF4, 0xBF, 0xFD, 0x3F, 0x00, 0x00, 0xF8, 0x7F, 0xF8, 0x7F, 0x00, 0x00, + 0xFC, 0x3F, 0xF4, 0xBF, 0x00, 0x00, 0xFD, 0x2F, 0xF0, 0xFF, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0xFF, + 0x01, 0x00, 0xFF, 0x0B, 0xD0, 0xFF, 0x02, 0x40, 0xFF, 0x07, 0xC0, 0xFF, 0x03, 0x80, 0xFF, 0x03, + 0x40, 0xFF, 0x07, 0xC0, 0xFF, 0x02, 0x00, 0xFF, 0x0F, 0xD0, 0xFF, 0x00, 0x00, 0xFE, 0x1F, 0xE0, + 0xBF, 0x00, 0x00, 0xFD, 0x2F, 0xF0, 0x7F, 0x00, 0x00, 0xFC, 0x3F, 0xF4, 0x3F, 0x00, 0x00, 0xF4, + 0x7F, 0xFC, 0x2F, 0x00, 0x00, 0xF0, 0xBF, 0xFD, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xFE, 0x0B, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFD, 0xFF, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, 0xFF, 0x6F, 0xFF, 0xFF, 0xFF, + 0xBF, 0xA9, 0xAA, 0xFA, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x80, + 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, + 0xFE, 0x2F, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xF8, 0xBF, 0x00, 0x00, + 0xF4, 0xFF, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0xAB, 0xAA, + 0x6A, 0xFF, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, + 0xFF, 0x2F, + // Unicode: [0x007B, braceleft] + 0x00, 0x80, 0xFE, 0x03, 0xD0, 0xFF, 0x0F, 0xD0, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, + 0x02, 0xFD, 0x2F, 0x00, 0xF4, 0x3F, 0x00, 0xD0, 0xFF, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xFD, 0x0F, + 0x00, 0xF4, 0x3F, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xFF, 0x07, 0x00, 0xFC, 0x1F, 0x00, 0xF0, 0x7F, + 0x00, 0x80, 0xFF, 0x02, 0x00, 0xFE, 0x0B, 0x00, 0xF8, 0x2F, 0x00, 0xF0, 0xBF, 0x00, 0xE0, 0xFF, + 0x01, 0xE4, 0xFF, 0x03, 0xF8, 0xFF, 0x07, 0xE0, 0xFF, 0x02, 0x80, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, + 0x01, 0x94, 0xFF, 0x0F, 0x00, 0xF8, 0x7F, 0x00, 0xC0, 0xFF, 0x02, 0x00, 0xFE, 0x0B, 0x00, 0xF8, + 0x2F, 0x00, 0xE0, 0xBF, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xFF, 0x07, 0x00, 0xFC, 0x1F, 0x00, 0xF4, + 0x7F, 0x00, 0xD0, 0xFF, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xFD, 0x0F, 0x00, 0xF4, 0x3F, 0x00, 0xD0, + 0xFF, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0x0F, 0xE0, 0xFF, 0x3F, 0x40, 0xFF, 0xFF, 0x00, + 0xF4, 0xFF, 0x03, 0x00, 0xFA, 0x0F, + // Unicode: [0x007C, bar] + 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, + 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, + 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, + 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, 0xFE, 0xEF, 0xFF, + // Unicode: [0x007D, braceright] + 0xFE, 0x1B, 0x00, 0xF8, 0xFF, 0x02, 0xE0, 0xFF, 0x2F, 0x80, 0xFF, 0xFF, 0x00, 0xFA, 0xFF, 0x07, + 0x00, 0xFD, 0x2F, 0x00, 0xE0, 0xBF, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xFE, 0x0B, 0x00, 0xF8, 0x2F, + 0x00, 0xE0, 0xBF, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xFF, 0x07, 0x00, 0xFC, 0x1F, 0x00, 0xF0, 0x7F, + 0x00, 0xD0, 0xFF, 0x00, 0x40, 0xFF, 0x03, 0x00, 0xFD, 0x0F, 0x00, 0xF4, 0x7F, 0x00, 0xC0, 0xFF, + 0x02, 0x00, 0xFE, 0xBF, 0x01, 0xE0, 0xFF, 0x0F, 0x00, 0xFD, 0x3F, 0x00, 0xF4, 0xFF, 0x00, 0xF8, + 0xFF, 0x03, 0xF8, 0xFF, 0x06, 0xF0, 0xFF, 0x00, 0xD0, 0xFF, 0x01, 0x40, 0xFF, 0x03, 0x00, 0xFD, + 0x0F, 0x00, 0xF4, 0x3F, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xFF, 0x07, 0x00, 0xFC, 0x1F, 0x00, 0xF0, + 0x7F, 0x00, 0x80, 0xFF, 0x02, 0x00, 0xFE, 0x0B, 0x00, 0xF8, 0x2F, 0x00, 0xE0, 0xBF, 0x00, 0x80, + 0xFF, 0x02, 0x40, 0xFF, 0x0B, 0xF8, 0xFF, 0x1F, 0xE0, 0xFF, 0x3F, 0x80, 0xFF, 0xBF, 0x00, 0xFE, + 0xBF, 0x00, 0xF8, 0x6F, 0x00, 0x00, + // Unicode: [0x007E, asciitilde] + 0x00, 0xF9, 0x0B, 0x00, 0xFC, 0x07, 0xF8, 0xFF, 0x07, 0xD0, 0x3F, 0xE0, 0xFF, 0xFF, 0x46, 0xFF, + 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xBF, 0xE5, 0xFF, 0xFF, + 0x07, 0xFD, 0x03, 0xE0, 0xFF, 0x1F, 0xE0, 0x1F, 0x00, 0xE4, 0x2F, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_40_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_40_2bpp_4.cpp new file mode 100644 index 00000000..60bdfea0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_40_2bpp_4.cpp @@ -0,0 +1,9 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_40_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x90, 0x06, 0x40, 0x1A, 0x00, 0x69, 0xD0, 0xBF, 0x80, 0xFF, 0x02, 0xFE, 0xC7, 0xFF, 0x47, 0xFF, + 0x1F, 0xFD, 0x7F, 0xFF, 0x2F, 0xFD, 0x7F, 0xF8, 0xFF, 0xFC, 0x7F, 0xF4, 0xFF, 0xE1, 0xFF, 0xE3, + 0xFF, 0xC0, 0xFF, 0x02, 0xFF, 0x0B, 0xBE, 0x01, 0xF8, 0x02, 0xE4, 0x0B +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_60_2bpp_0.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_60_2bpp_0.cpp new file mode 100644 index 00000000..2f8effb3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_60_2bpp_0.cpp @@ -0,0 +1,1947 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_60_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x0020, space] + // (Has no glyph data) + // Unicode: [0x0021, exclam] + 0x54, 0x55, 0x05, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0xFF, 0x3F, 0xFC, 0xFF, 0x0F, 0xFF, 0xFF, + 0xC3, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xF8, 0xFF, 0x0B, 0xFE, 0xFF, 0x82, 0xFF, 0xBF, 0xE0, 0xFF, + 0x2F, 0xF8, 0xFF, 0x0B, 0xFE, 0xFF, 0x82, 0xFF, 0xBF, 0xE0, 0xFF, 0x2F, 0xF8, 0xFF, 0x07, 0xFD, + 0xFF, 0x41, 0xFF, 0x7F, 0xD0, 0xFF, 0x1F, 0xF4, 0xFF, 0x07, 0xFD, 0xFF, 0x41, 0xFF, 0x7F, 0xD0, + 0xFF, 0x1F, 0xF4, 0xFF, 0x07, 0xFD, 0xFF, 0x41, 0xFF, 0x3F, 0xC0, 0xFF, 0x0F, 0xF0, 0xFF, 0x03, + 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x0A, + 0xC0, 0xFF, 0x1F, 0xF8, 0xFF, 0x4F, 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, 0xFA, 0xFF, 0xBF, 0xFD, 0xFF, + 0x2F, 0xFF, 0xFF, 0x43, 0xFF, 0x7F, 0x00, 0xFE, 0x06, + // Unicode: [0x0022, quotedbl] + 0xAA, 0x6A, 0x90, 0xAA, 0xE6, 0xFF, 0x07, 0xFE, 0xBF, 0xFE, 0x7F, 0xE0, 0xFF, 0xE7, 0xFF, 0x07, + 0xFD, 0x7F, 0xFE, 0x7F, 0xD0, 0xFF, 0xD7, 0xFF, 0x03, 0xFD, 0x7F, 0xFD, 0x3F, 0xD0, 0xFF, 0xD7, + 0xFF, 0x03, 0xFD, 0x7F, 0xFD, 0x3F, 0xC0, 0xFF, 0xD3, 0xFF, 0x03, 0xFC, 0x3F, 0xFC, 0x3F, 0xC0, + 0xFF, 0xC3, 0xFF, 0x02, 0xFC, 0x3F, 0xFC, 0x2F, 0xC0, 0xFF, 0x03, + // Unicode: [0x0023, numbersign] + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0x01, 0x00, 0x00, 0xAA, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x01, + 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, + 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xA9, 0xAA, + 0xEA, 0xFF, 0xBF, 0xAA, 0xAA, 0xFA, 0xFF, 0xAF, 0xAA, 0x06, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, + 0x00, 0x40, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0x00, 0x00, + 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xA9, 0xAA, 0xFA, 0xFF, 0xAB, 0xAA, 0xAA, + 0xFE, 0xFF, 0xAA, 0xAA, 0x06, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, + 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0x00, + // Unicode: [0x0024, dollar] + 0x00, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x6B, 0x01, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0x7F, + 0xF4, 0xDB, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x07, 0xFD, 0xD1, 0xFF, 0xFF, 0xD3, 0xFF, 0x7F, 0x40, + 0x7F, 0xD0, 0xFF, 0xFF, 0xF8, 0xFF, 0x0F, 0xD0, 0x1F, 0xF0, 0xFF, 0x7F, 0xFE, 0xFF, 0x03, 0xF4, + 0x07, 0xF8, 0xFF, 0x9F, 0xFF, 0xFF, 0x00, 0xFD, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x40, 0x7F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0xF4, 0x07, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x6F, 0xFD, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xD0, 0x5F, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0x07, 0xFD, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0xFD, 0x01, 0xFD, 0xFF, 0x0F, 0x00, 0x00, 0x40, 0x7F, 0x00, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0xD0, 0x1F, 0x80, 0xFF, 0xFF, 0xFE, 0xFF, 0x07, 0xF4, 0x07, 0xE0, 0xFF, 0xBF, 0xFF, + 0xFF, 0x02, 0xFD, 0x01, 0xFC, 0xFF, 0xEF, 0xFF, 0xFF, 0x40, 0x7F, 0x40, 0xFF, 0xFF, 0xF6, 0xFF, + 0xBF, 0xD0, 0x1F, 0xF0, 0xFF, 0x7F, 0xFC, 0xFF, 0xBF, 0xF5, 0x47, 0xFF, 0xFF, 0x0F, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x90, 0xFE, + 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0x00, + // Unicode: [0x0025, percent] + 0x00, 0x40, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xAF, 0xFE, 0xFF, 0x01, 0x00, + 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0x7F, 0x00, 0xFE, 0x2F, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, + 0xE0, 0xFF, 0x02, 0xD0, 0xFF, 0x03, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0xFC, + 0x7F, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0xC0, 0xFF, 0x07, 0x40, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xFC, 0x7F, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, + 0x02, 0xC0, 0xFF, 0x03, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0x3F, 0x00, 0xFD, 0x3F, 0x00, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x1B, 0xF4, 0xFF, 0x02, 0xF4, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x02, 0xF4, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE4, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0xF9, 0xAF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0xFD, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0xFF, 0x01, 0xF8, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x02, 0xF8, 0xFF, 0x41, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0xC0, + 0xFF, 0x07, 0xD0, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xFD, 0x3F, 0x00, 0xFC, 0x7F, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0xD0, 0xFF, 0x02, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, + 0x1F, 0x00, 0xFD, 0x2F, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0xD0, 0xFF, 0x02, + 0x80, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0xFD, 0x2F, 0x00, 0xF8, 0x7F, 0x00, 0x00, + 0xD0, 0xFF, 0x2F, 0x00, 0xC0, 0xFF, 0x03, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, + 0xFC, 0xBF, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0xBF, 0xFE, 0xFF, + 0x02, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0xFF, + 0x02, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 0x01, 0x00, + // Unicode: [0x0026, ampersand] + 0x00, 0x00, 0x00, 0x40, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, + 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0xBF, 0x91, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xF8, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF4, + 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0xBF, 0xF5, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0xF4, 0xFF, + 0x7F, 0x40, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xF4, 0xFF, 0xFF, + 0xD1, 0xFF, 0xBF, 0x00, 0xD0, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0x01, 0x40, + 0xFF, 0xFF, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x40, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x07, + 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0xD0, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0xFF, 0xAB, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, + 0xFF, 0x01, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0x90, 0xFF, 0xFF, 0xBF, 0x01, 0x00, + 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x40, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0027, quotesingle] + 0xAA, 0x6A, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFD, 0x3F, 0xFD, 0x3F, 0xFD, 0x3F, + 0xFD, 0x3F, 0xFD, 0x3F, 0xFC, 0x3F, 0xFC, 0x2F, 0xFC, 0x2F, + // Unicode: [0x0028, parenleft] + 0x00, 0x00, 0x00, 0xA8, 0xAA, 0x0A, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xD0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, + 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, + 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x03, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + // Unicode: [0x0029, parenright] + 0xAA, 0xAA, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, + 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x0B, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xD0, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, + 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, + // Unicode: [0x002A, asterisk] + 0x00, 0x00, 0xA9, 0x2A, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, + 0x00, 0x00, 0x01, 0xF0, 0x7F, 0x00, 0x01, 0xD0, 0x02, 0xF8, 0x0F, 0xE0, 0x02, 0xFC, 0x03, 0xFE, + 0x03, 0xFE, 0x80, 0xFF, 0x47, 0xBF, 0xF4, 0xBF, 0xF0, 0xFF, 0xDB, 0x6F, 0xFF, 0x7F, 0xFE, 0xFF, + 0xFB, 0xFB, 0xFF, 0x2F, 0xF9, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x90, 0xFF, 0xFF, 0xBF, 0x01, 0x00, + 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x1B, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x6F, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xFF, 0xDB, 0xAF, 0xFF, 0x7F, 0xF8, 0xBF, 0xF4, 0x4B, + 0xFF, 0x0B, 0xFC, 0x07, 0xFE, 0x42, 0xFF, 0x01, 0x7E, 0x80, 0xFF, 0x40, 0x2F, 0x00, 0x07, 0xF0, + 0x3F, 0x00, 0x02, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x02, 0x00, 0x00, + // Unicode: [0x002B, plus] + 0x00, 0x00, 0x80, 0xAA, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x56, 0x55, 0x55, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x00, 0x00, 0x80, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, + 0x00, + // Unicode: [0x002C, comma] + 0x40, 0xFF, 0xFF, 0x80, 0xFF, 0xBF, 0x80, 0xFF, 0x7F, 0xC0, 0xFF, 0x3F, 0xD0, 0xFF, 0x1F, 0xD0, + 0xFF, 0x0F, 0xE0, 0xFF, 0x0B, 0xF0, 0xFF, 0x07, 0xF0, 0xFF, 0x02, 0xF4, 0xFF, 0x01, 0xF8, 0xFF, + 0x00, 0xFC, 0xBF, 0x00, 0xFC, 0x3F, 0x00, 0xFD, 0x2F, 0x00, 0xFE, 0x1F, 0x00, 0xFE, 0x0F, 0x00, + 0xFF, 0x0B, 0x00, + // Unicode: [0x002D, hyphen] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + // Unicode: [0x002E, period] + 0x40, 0xBE, 0x01, 0xF8, 0xFF, 0x81, 0xFF, 0xFF, 0xF1, 0xFF, 0xBF, 0xFD, 0xFF, 0x7F, 0xFF, 0xFF, + 0xCF, 0xFF, 0xFF, 0xE2, 0xFF, 0x7F, 0xF0, 0xFF, 0x0B, 0xE0, 0x6F, 0x00, + // Unicode: [0x002F, slash] + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0030, zero] + 0x00, 0x00, 0x40, 0xAA, 0xAB, 0x05, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0x17, 0x90, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0xF4, + 0xFF, 0xBF, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x40, 0xFF, 0xFF, 0x03, 0xFD, 0xFF, 0x07, 0x00, 0x00, + 0xF4, 0xFF, 0x1F, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xC2, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x4F, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0x3F, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF9, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0xE7, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x9F, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFA, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xEB, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xAF, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFA, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xE7, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x9F, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF5, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xC3, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x7F, + 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0xFF, + 0x03, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0x06, 0x40, 0xFF, 0xFF, + 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFA, 0xBF, + 0x06, 0x00, 0x00, 0x00, + // Unicode: [0x0031, one] + 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xAA, 0xEA, 0xFF, 0xBF, 0x00, 0xF0, + 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0xFC, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xFC, + 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, + 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, + 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xFF, + 0xFF, 0x02, 0xC0, 0xFF, 0xBF, + // Unicode: [0x0032, two] + 0x00, 0x00, 0xA4, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x1B, 0xD0, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, + 0x3F, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0xFC, 0xFF, 0x03, + 0x00, 0x00, 0xFC, 0xFF, 0x47, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0xAA, 0x1A, 0x00, + 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + // Unicode: [0x0033, three] + 0x00, 0x00, 0x90, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x80, 0xFF, 0xFF, 0x1B, 0x90, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, + 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, + 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x54, 0x55, 0x05, + 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF9, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xA1, 0xAA, 0x0A, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x1F, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0xC7, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE1, + 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x0F, 0xFC, + 0xFF, 0xBF, 0x05, 0xF5, 0xFF, 0xFF, 0x01, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x50, 0xFA, 0xBF, 0x06, 0x00, 0x00, + // Unicode: [0x0034, four] + 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xEB, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xE3, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xE1, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0x3F, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0xE0, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0xE0, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, + 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, + 0x1F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, + 0xFE, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x1F, + 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0xE0, + 0xFF, 0x1F, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x54, 0x55, 0x55, 0x55, 0x55, + 0xF5, 0xFF, 0x5F, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, + // Unicode: [0x0035, five] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xE0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0x5B, 0x55, 0x55, 0x55, 0x55, 0x01, 0xFE, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x90, + 0xFE, 0x6B, 0x00, 0x00, 0xF8, 0xFF, 0x43, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xF9, 0xFF, + 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x7F, 0x01, 0xF9, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0xF4, + 0xFF, 0x7F, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, + 0xFF, 0x4F, 0xAA, 0x6A, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x55, 0x55, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0xCF, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xE2, 0xFF, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xF4, + 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0x0F, 0xFC, 0xFF, 0xFF, 0x06, 0xE5, 0xFF, 0xFF, 0x02, 0xFD, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x50, + 0xFA, 0xBF, 0x06, 0x00, 0x00, + // Unicode: [0x0036, six] + 0x00, 0x00, 0x90, 0xFE, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x1B, 0x40, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, + 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xFC, 0xFF, 0x03, 0x00, 0x40, 0xFF, 0xFF, 0x41, 0xFF, 0x7F, + 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0xFC, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, 0x00, 0xA4, + 0xFF, 0x1A, 0x00, 0x80, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0x6F, 0x00, 0xE0, 0xFF, 0x4B, 0xFF, 0xFF, + 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0x2F, 0xFE, 0xFF, 0x2F, 0x00, 0x00, 0xFD, + 0xFF, 0x8F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xE7, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFA, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, + 0x6F, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xDF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0xF3, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x2F, + 0xFE, 0xBF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x4B, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC1, + 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0xF4, + 0xFF, 0xBF, 0x55, 0xF9, 0xFF, 0xFF, 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFD, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x50, 0xFA, 0xBF, 0x06, 0x00, 0x00, + // Unicode: [0x0037, seven] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0x55, 0x55, 0x55, 0x55, 0x95, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + // Unicode: [0x0038, eight] + 0x00, 0x00, 0x90, 0xFE, 0xBF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xBF, 0x01, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xE0, 0xFF, 0xFF, 0x06, 0x40, 0xFF, 0xFF, 0x1F, + 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0x2F, + 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x3F, + 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x3F, + 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, + 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0x07, + 0x40, 0xFF, 0xFF, 0x5B, 0xD5, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x06, 0x90, 0xFF, 0xFF, 0x1F, + 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x7F, + 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0xBF, + 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, + 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0xBF, + 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0xF4, 0xFF, 0xBF, 0x01, 0x00, 0xFD, 0xFF, 0x3F, + 0xF0, 0xFF, 0xFF, 0xAF, 0xEA, 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, + 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, + // Unicode: [0x0039, nine] + 0x00, 0x00, 0xE4, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x06, 0x90, 0xFF, 0xFF, 0x02, 0xFC, 0xFF, + 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x41, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xBF, 0xE0, 0xFF, 0x3F, + 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0x0F, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xF4, 0xFF, 0xC7, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xF2, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0xFF, 0xBF, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0xCF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xE3, 0xFF, 0x2F, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x3F, 0xFC, 0xFF, 0x1F, 0x00, 0x40, + 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, + 0xFF, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0x41, 0xFF, 0x3F, 0x00, 0x00, 0xA4, 0xBF, 0x06, 0xD0, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x2F, 0x54, 0x55, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x07, + 0xFE, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0xD0, + 0xFF, 0x3F, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0xF0, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xF8, + 0xFF, 0xBF, 0x01, 0xF9, 0xFF, 0x3F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0xF9, + 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFE, 0xAF, 0x01, 0x00, 0x00, + // Unicode: [0x003A, colon] + 0x00, 0x55, 0x00, 0xF4, 0xBF, 0x40, 0xFF, 0xFF, 0xF0, 0xFF, 0xBF, 0xFD, 0xFF, 0x7F, 0xFF, 0xFF, + 0xDF, 0xFF, 0xFF, 0xF2, 0xFF, 0xBF, 0xF4, 0xFF, 0x0F, 0xF4, 0xBF, 0x00, 0x50, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0xBE, 0x01, 0xF8, 0xFF, 0x81, 0xFF, 0xFF, 0xF1, 0xFF, 0xBF, 0xFD, 0xFF, 0x7F, + 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xE2, 0xFF, 0x7F, 0xF0, 0xFF, 0x0B, 0xE0, 0x6F, 0x00, + // Unicode: [0x003B, semicolon] + 0x00, 0x54, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0xF8, 0xFF, 0x07, 0xF4, 0xFF, 0x3F, 0xE0, 0xFF, 0xFF, + 0xC1, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0x1F, 0xF4, 0xFF, 0x3F, 0x80, 0xFF, 0x7F, 0x00, 0xF8, 0x7F, + 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0xC0, 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0x00, 0xFD, + 0xFF, 0x01, 0xF8, 0xFF, 0x03, 0xF0, 0xFF, 0x0B, 0xC0, 0xFF, 0x1F, 0x40, 0xFF, 0x2F, 0x00, 0xFE, + 0x7F, 0x00, 0xF8, 0xFF, 0x00, 0xF0, 0xFF, 0x02, 0xD0, 0xFF, 0x03, 0x80, 0xFF, 0x0B, 0x00, 0xFE, + 0x1F, 0x00, 0xFC, 0x3F, 0x00, 0xF4, 0x7F, 0x00, 0xD0, 0xFF, 0x00, 0x00, + // Unicode: [0x003C, less] + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, + 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFD, + 0xFF, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x02, + // Unicode: [0x003D, equal] + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x47, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xD5, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + // Unicode: [0x003E, greater] + 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, + 0x7F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0x00, + 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, + 0x00, 0x00, + // Unicode: [0x003F, question] + 0x00, 0x00, 0xE5, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0xF9, + 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0xFC, 0xFF, 0x7F, 0x41, 0xFE, 0xFF, 0x2F, 0xFD, 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0x3F, 0xFE, + 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0x7F, 0xFE, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x00, + 0x00, 0x80, 0xFF, 0xBF, 0xAA, 0xAA, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0xE5, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xF0, 0xFF, 0xFF, + 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xAF, 0x05, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xBE, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x40, 0xBE, + 0x01, 0x00, 0x00, 0x00, + // Unicode: [0x0040, at] + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xFE, 0xBF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xBF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x6F, 0x01, 0x00, 0x90, 0xFE, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0x01, 0x00, 0xE4, 0xFF, 0x1B, 0xA0, 0xAA, 0x02, 0xF4, 0xFF, + 0x02, 0x80, 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0xFD, 0xBF, 0x00, 0xFC, 0xFF, 0x00, 0xF4, + 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0x6F, 0xFF, 0x2F, 0x00, 0xFE, 0x3F, 0x00, 0xFF, 0x3F, 0x00, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x40, 0xFF, 0x1F, 0xE0, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0x0B, 0xFC, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x42, 0xFF, 0x1F, 0x00, 0xFD, 0xFF, 0x1F, 0x90, 0xFF, 0xFF, 0x0F, + 0x00, 0xFC, 0xBF, 0xE0, 0xFF, 0x03, 0x80, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0xFE, + 0x2F, 0xFC, 0xBF, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x80, 0xFF, 0x4B, 0xFF, + 0x1F, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0xE2, 0xFF, 0x03, 0xC0, + 0xFF, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xFC, 0xBF, 0xFC, 0xBF, 0x00, 0xF4, 0xFF, 0x03, + 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0xD7, 0xFF, 0x07, 0xC0, 0xFF, 0x2F, 0x00, 0x00, 0xC0, 0xFF, 0x0B, + 0x00, 0xF4, 0xFF, 0xF4, 0xFF, 0x00, 0xF0, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0xFE, + 0x3F, 0xFE, 0x3F, 0x00, 0xFC, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0xC0, 0xFF, 0x8B, 0xFF, + 0x0F, 0x00, 0xFF, 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x0F, 0x00, 0xF4, 0xFF, 0xE1, 0xFF, 0x03, 0xC0, + 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xFE, 0x3F, 0xF8, 0xFF, 0x00, 0xF0, 0xFF, 0x0F, + 0x00, 0x80, 0xFF, 0xFF, 0x00, 0xD0, 0xFF, 0x07, 0xFE, 0x3F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xF8, + 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x80, 0xFF, 0x0F, 0x00, 0xFE, 0xFF, 0x5F, 0xE5, 0xFF, 0xFF, 0x1F, + 0x80, 0xFF, 0x1F, 0xE0, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xFE, 0xFF, + 0x02, 0xF4, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFD, + 0xBF, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0x2F, 0x00, + 0xD0, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF, 0x2F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x90, 0xFF, + 0xFF, 0x2F, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0x0B, 0x00, 0x40, 0xFA, 0x6F, 0x00, + 0x00, 0xE4, 0xBF, 0x06, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xBF, 0x16, 0x00, 0x94, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, + 0xBA, 0xAA, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0041, A] + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xDF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xD1, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0xF8, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0xF4, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, + 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, + 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0xFF, 0xAF, 0xAA, 0xAA, 0xFE, 0xFF, 0x1F, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x03, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x03, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, + 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0xFF, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, + // Unicode: [0x0042, B] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0xFF, 0xFF, 0xAB, 0xAA, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0xFF, 0x2F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xFF, 0x3F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x2F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0xFF, 0x0F, + 0xFF, 0xFF, 0x02, 0x00, 0x90, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0xAA, 0xAA, 0xEA, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xFF, 0x2F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x40, 0xFE, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6B, 0x00, 0x00, + // Unicode: [0x0043, C] + 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, + 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0x5B, 0x50, 0xF9, 0xFF, 0xFF, 0x1F, 0x00, 0xFD, 0xFF, 0xFF, + 0x01, 0x00, 0x40, 0xFE, 0xFF, 0xBF, 0x00, 0xFC, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0x07, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x3F, 0xF0, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xD1, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x8B, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xA9, 0xAA, 0x46, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x2F, 0xF8, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0xBF, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, + 0x1F, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0x02, 0x40, 0xFF, 0xFF, 0xFF, 0xAF, 0xEA, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x40, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x94, 0xFE, 0xAF, 0x05, 0x00, 0x00, 0x00, + // Unicode: [0x0044, D] + 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x05, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0xC0, 0xFF, 0xBF, 0x00, 0x50, 0xF9, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, + 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x2F, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0F, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0xF2, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xCF, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0x7F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xEF, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, + 0xF7, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFC, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xF1, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xC3, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x0B, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0x6F, 0x55, 0x55, 0xFE, + 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xBF, + 0x16, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0045, E] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xAF, 0xAA, 0xAA, 0x6A, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + // Unicode: [0x0046, F] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xAA, 0xAA, 0xAA, 0xFA, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0xBF, 0xAA, 0xAA, 0xAA, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, + // Unicode: [0x0047, G] + 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, + 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x6F, 0x55, 0xFE, 0xFF, 0xFF, 0x2F, 0x00, 0xF4, + 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x55, 0x15, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xEF, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x03, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0x3F, 0x00, 0x00, 0x54, 0x55, 0x55, 0x95, 0xFF, + 0xFF, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, + 0x87, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xF4, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, + 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0xD0, 0xFF, 0xFF, 0x1F, 0x00, + 0xD0, 0xFF, 0xFF, 0xFF, 0xAB, 0xFA, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xE9, 0xFF, 0x5A, + 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0048, H] + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, + // Unicode: [0x0049, I] + 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, + 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, + 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, + // Unicode: [0x004A, J] + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x54, 0x55, 0x00, + 0x00, 0xF0, 0xFF, 0xAF, 0xFF, 0xBF, 0x00, 0x00, 0xFC, 0xFF, 0xEB, 0xFF, 0x2F, 0x00, 0x00, 0xFF, + 0xFF, 0xF9, 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x7F, 0xFD, 0xFF, 0x0B, 0x00, 0xF8, 0xFF, 0x1F, 0xFF, + 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xAF, 0xFE, 0xFF, 0xBF, 0xD0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xF9, 0xBF, 0x06, 0x00, 0x00, + // Unicode: [0x004B, K] + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFD, 0xFF, + 0x2F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xF8, + 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0x2F, 0x00, 0x40, + 0xFF, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFC, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0xD0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xF0, + 0xFF, 0x2F, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xF0, 0xFF, 0x6F, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF6, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0xFE, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x82, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0xFD, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x40, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, + 0xFF, 0x02, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF8, 0xFF, 0xBF, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0xFF, 0x07, + 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFE, 0xFF, + 0x3F, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xF7, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, + // Unicode: [0x004C, L] + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xAF, 0xAA, 0xAA, 0x6A, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, + // Unicode: [0x004D, M] + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xBF, 0xFF, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, + 0xFB, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, + 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFA, 0xFF, 0x02, 0x00, 0x00, 0xF8, + 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0x6F, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x9F, 0xFF, 0xBF, 0xFF, + 0xFF, 0xF2, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0xFD, 0xFF, 0x00, + 0x00, 0xF0, 0xFF, 0x87, 0xFF, 0xBF, 0xFF, 0xFF, 0xC2, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0x3F, 0xF8, + 0xFF, 0xFB, 0xFF, 0x2F, 0xF8, 0xFF, 0x03, 0x00, 0xFC, 0xFF, 0x82, 0xFF, 0xBF, 0xFF, 0xFF, 0x42, + 0xFF, 0x7F, 0x00, 0xD0, 0xFF, 0x1F, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0xE0, 0xFF, 0x0B, 0x00, 0xFE, + 0xBF, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, 0x00, 0xF0, 0xFF, 0x07, 0xF8, 0xFF, 0xFB, + 0xFF, 0x2F, 0xC0, 0xFF, 0x2F, 0x80, 0xFF, 0x3F, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0xF8, 0xFF, + 0x03, 0xFC, 0xFF, 0x02, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x40, 0xFF, 0x7F, 0xD0, 0xFF, 0x0F, 0x80, + 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0xE0, 0xFF, 0x0B, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, + 0x00, 0xFD, 0xFF, 0xF5, 0xFF, 0x07, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0xC0, 0xFF, 0xAF, 0xFF, + 0x3F, 0x00, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0xE0, + 0xFF, 0xFF, 0xBF, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0xFF, 0x07, 0x00, + 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, + 0x02, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0xFF, 0xFF, + 0x0F, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0xF8, 0xFF, + 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, + 0x80, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, + 0x80, 0xFF, 0xBF, + // Unicode: [0x004E, N] + 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFA, 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xFF, + 0xFF, 0xFF, 0xD2, 0xFF, 0x7F, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0xFF, 0xFF, 0x00, 0x40, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, + 0x07, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xF8, 0xFF, 0x0F, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0xF0, 0xFF, 0x2F, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0xFF, + 0xFF, 0x02, 0x80, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0x42, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xF8, 0xFF, + 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xF0, 0xFF, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0xD0, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, + // Unicode: [0x004F, O] + 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, + 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x5B, 0x41, 0xF9, 0xFF, 0xFF, 0x2F, + 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x40, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x07, 0xF0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0xFD, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xBF, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFD, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x5F, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xEB, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFA, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xAF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xDB, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xFF, 0xF5, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0xFC, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0B, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, + 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xAA, 0xFE, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xFE, 0xAF, 0x05, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0050, P] + 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x05, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xCF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xF7, 0xFF, 0x2F, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0xFC, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xF3, 0xFF, 0x2F, 0x00, 0x40, + 0xFE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, + 0x00, 0xC0, 0xFF, 0xFF, 0xAA, 0xAA, 0x5A, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0051, Q] + 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, + 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x5B, 0x41, 0xF9, 0xFF, + 0xFF, 0x2F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x7F, 0x00, 0x80, 0xFF, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0xF4, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, + 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0xFD, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFE, 0xFF, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x2F, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0xFD, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0x1F, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0xF8, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x40, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x02, + 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xBF, 0xAA, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x40, 0xE9, 0xFF, 0x9A, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, + // Unicode: [0x0052, R] + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x06, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x02, 0x00, 0x94, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x2F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF0, 0xFF, 0x2F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0x0F, + 0xFF, 0xFF, 0x02, 0x00, 0x94, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0xFF, 0xFF, 0x56, 0xFE, 0xFF, 0x0F, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xF4, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0x01, 0x00, + 0xFF, 0xFF, 0x02, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFC, 0xFF, 0x2F, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xF0, 0xFF, 0xBF, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0x0F, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFC, 0xFF, 0x2F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0x7F, + // Unicode: [0x0053, S] + 0x00, 0x00, 0x40, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xBF, 0x01, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xAB, 0xFA, 0xFF, 0xFF, 0x0B, 0xFC, 0xFF, + 0x2F, 0x00, 0xE0, 0xFF, 0xFF, 0x43, 0xFF, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0xFF, 0xE1, 0xFF, 0x7F, + 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0xFE, 0xFF, 0x03, + 0x00, 0x00, 0x54, 0x55, 0x85, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xBF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xAF, + 0x01, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x57, 0x55, 0x15, 0x00, 0x00, 0x40, 0xFF, 0xFF, + 0xFD, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x9F, + 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xD3, 0xFF, 0xFF, 0x02, 0x00, 0xE0, 0xFF, 0xBF, 0xE0, + 0xFF, 0xFF, 0x07, 0x50, 0xFF, 0xFF, 0x1F, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x90, + 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xFF, 0x1A, 0x00, 0x00, 0x00, + // Unicode: [0x0054, T] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xAA, + 0xAA, 0xFE, 0xFF, 0xAF, 0xAA, 0xAA, 0x02, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, + // Unicode: [0x0055, U] + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFE, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEB, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFD, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xC7, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0x3F, + 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, 0x6F, 0x00, 0x90, 0xFF, 0xFF, + 0x0F, 0xE0, 0xFF, 0xFF, 0xBF, 0xEA, 0xFF, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xA4, + 0xFF, 0x6B, 0x01, 0x00, 0x00, + // Unicode: [0x0056, V] + 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFA, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xD7, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x3F, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0xFE, 0xFF, + 0x03, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0xFF, 0x03, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, + 0x00, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, + 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, + 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x80, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, + 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x80, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, + 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0x2F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xD0, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x87, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x2F, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0057, W] + 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xCB, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xE1, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xF4, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, + 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x02, + 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xC0, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF4, + 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, + 0x03, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0xF0, 0xFF, 0xFB, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xBF, 0x00, + 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0xE0, + 0xFF, 0x2F, 0x00, 0x80, 0xFF, 0x3F, 0xFE, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xF8, 0xFF, + 0x0B, 0x00, 0xE0, 0xFF, 0x4B, 0xFF, 0x7F, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0x03, + 0x00, 0xFC, 0xFF, 0xD1, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x40, + 0xFF, 0x7F, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, + 0x0F, 0xF8, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x02, + 0xFD, 0xFF, 0x01, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0xFF, 0x7F, 0x00, 0xFF, + 0xBF, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0xD0, 0xFF, 0x0F, 0xC0, 0xFF, 0x3F, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0xF8, 0xFF, 0x02, 0xE0, 0xFF, 0x0F, 0xC0, + 0xFF, 0x3F, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xFF, 0xBF, 0x00, 0xF4, 0xFF, 0x07, 0xF4, 0xFF, + 0x0B, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0xD0, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x02, 0xFE, 0xFF, 0x01, + 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0xF4, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0x80, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0x07, 0xFE, 0xBF, 0x00, 0x80, 0xFF, 0x3F, 0xF0, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0xC2, 0xFF, 0x1F, 0x00, 0xD0, 0xFF, 0x1F, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, + 0xBF, 0xF4, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0x4B, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, + 0xFD, 0xFF, 0x00, 0x00, 0xF8, 0xFF, 0xE3, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x9F, 0xFF, + 0x2F, 0x00, 0x00, 0xFE, 0xFF, 0xFC, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xF7, 0xFF, 0x07, + 0x00, 0x40, 0xFF, 0xBF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0x00, 0x00, + // Unicode: [0x0058, X] + 0xFD, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x03, 0xF4, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xFD, + 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0xFF, 0x2F, + 0x00, 0x00, 0xFF, 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x00, 0xE0, + 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x2F, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0x0F, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xBF, 0xFE, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xDB, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0x1F, 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0x2F, + 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, + 0xFE, 0xFF, 0x0F, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0xF0, 0xFF, 0xBF, 0x00, 0x00, 0xFF, 0xFF, + 0x03, 0x00, 0x40, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, + 0xFD, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x02, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, + 0xFF, 0x1F, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xF4, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x0B, + // Unicode: [0x0059, Y] + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xF9, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0xC2, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0xFE, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x40, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x3F, + 0x00, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0xC0, + 0xFF, 0xFF, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xFF, + 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, + 0xF0, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xF4, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xC0, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x83, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF4, + 0xFF, 0x1F, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFE, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x005A, Z] + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x40, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0B, + // Unicode: [0x005B, bracketleft] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, + 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, + 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, + 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, + 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, + 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, + 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, + 0x0F, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, + 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, + 0xFC, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, + 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, + 0x03, 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, + 0x00, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + // Unicode: [0x005C, backslash] + 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, + // Unicode: [0x005D, bracketright] + 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, + 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xBF, + 0x00, 0x40, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, + 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xBF, + // Unicode: [0x005E, asciicircum] + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xF2, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0x47, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0xFC, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x02, 0x00, + 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0x2F, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x80, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x0B, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xD2, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x8F, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + // Unicode: [0x005F, underscore] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + // Unicode: [0x0060, grave] + 0x09, 0x00, 0x00, 0x40, 0x2F, 0x00, 0x00, 0xD0, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0x01, 0x00, 0xFD, + 0xFF, 0x07, 0x40, 0xFF, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0x6F, 0x90, 0xFF, 0xFF, 0x7F, 0x40, 0xFE, + 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0xD0, 0xFF, 0x01, 0x00, 0x40, 0x7F, 0x00, 0x00, 0x00, + 0x19, + // Unicode: [0x0061, a] + 0x00, 0x00, 0x00, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xBF, 0x00, 0xFC, + 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x02, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC2, 0xFF, 0xBF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x2F, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0xFF, 0x2F, 0xFD, + 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xCB, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xF6, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xBF, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xAF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xEB, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFE, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xAF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xDB, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xF2, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0xBF, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x2F, 0xFD, 0xFF, 0x7F, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x01, 0xE4, 0xFF, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x80, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0xF9, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x50, 0x55, 0x00, 0x00, + 0x00, 0x00, 0x00, + // Unicode: [0x0062, b] + 0xAA, 0xAA, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0x0B, 0x00, 0x54, 0x55, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xE4, 0xFF, 0xFF, 0x06, + 0x00, 0xC0, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0xF0, 0xFF, 0x2F, 0xFD, 0xFF, 0xFF, + 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0x2F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0xFF, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0x0B, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0xF2, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFC, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x3F, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xDF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0xDF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, + 0xFF, 0xBF, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0xE0, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x06, 0x90, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xC0, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, + 0xFF, 0x2F, 0xFD, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xBF, 0x01, + 0x00, 0xFF, 0xFF, 0x02, 0xE4, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 0x05, + 0x00, 0x00, 0x00, + // Unicode: [0x0063, c] + 0x00, 0x00, 0x00, 0x54, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xD0, 0xFF, 0xFF, 0xBF, 0xFA, 0xFF, 0xFF, 0x0F, + 0xF0, 0xFF, 0xFF, 0x06, 0x40, 0xFF, 0xFF, 0x2F, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x3F, + 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0xBF, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0xFD, 0xFF, 0x07, 0x00, 0x00, 0x40, 0x55, 0x55, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0xFF, 0x07, 0x00, 0x00, 0x40, 0x55, 0x55, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x3F, + 0xF0, 0xFF, 0xFF, 0x06, 0x40, 0xFE, 0xFF, 0x2F, 0xD0, 0xFF, 0xFF, 0xBF, 0xFA, 0xFF, 0xFF, 0x0F, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x2B, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x54, 0x55, 0x00, 0x00, 0x00, + // Unicode: [0x0064, d] + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xAA, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x54, 0x15, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xE4, 0xFF, 0xBF, 0x01, 0xF0, + 0xFF, 0x2F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0x0B, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0x0B, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xBF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xFF, 0xFF, 0x6F, 0x00, 0xF9, 0xFF, 0xFF, 0xBF, 0xF4, + 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, + 0xDB, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xF6, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0xBF, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xAF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFA, + 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0x6F, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xCB, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0xF4, 0xFF, 0xFF, 0x01, 0x00, + 0xE0, 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xFF, 0x07, 0x90, 0xFF, 0xFF, 0xFF, 0x0B, 0xFD, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x0B, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0xFF, 0xFF, 0xBF, 0xC0, 0xFF, + 0xBF, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x40, 0x55, 0x01, 0x00, + 0x00, 0x00, 0x00, + // Unicode: [0x0065, e] + 0x00, 0x00, 0x00, 0x54, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFE, 0xFF, 0xBF, 0x01, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xF4, 0xFF, 0xFF, 0x6B, 0xFA, 0xFF, + 0xFF, 0x0B, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x3F, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x82, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xD0, 0xFF, 0x7F, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFA, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0xA0, 0xAA, 0x2A, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0xD0, 0xFF, + 0xFF, 0x01, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0xF4, + 0xFF, 0xFF, 0xAB, 0xFA, 0xFF, 0xFF, 0x07, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 0x05, 0x00, 0x00, + 0x00, + // Unicode: [0x0066, f] + 0x00, 0x00, 0x00, 0xE9, 0x0F, 0x00, 0x00, 0xF9, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0xFD, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, + 0xFF, 0x00, 0xF4, 0xFF, 0xFF, 0x15, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, + 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, + 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, + 0xFF, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, + 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, + 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, + 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + // Unicode: [0x0067, g] + 0x00, 0x00, 0x00, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xBF, 0x00, 0xFC, + 0xFF, 0x0B, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0xBF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x2F, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0xFF, 0x2F, 0xFD, + 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xCB, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0xFF, + 0xF6, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xBF, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xAF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xEB, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFE, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xAF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xDB, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xF2, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0xBF, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x2F, 0xFD, 0xFF, 0x7F, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x01, 0xE4, 0xFF, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x80, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x02, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0xF9, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x50, 0x55, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x47, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0xF0, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, + 0xFD, 0xFF, 0xFF, 0x06, 0x90, 0xFF, 0xFF, 0x2F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x90, + 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x15, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0068, h] + 0xAA, 0xAA, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x55, 0x05, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0xF8, 0xFF, 0xBF, 0x01, 0x00, 0xFF, 0xFF, 0x82, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xAF, 0xFA, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x2F, + 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x7F, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + // Unicode: [0x0069, i] + 0x90, 0xBF, 0x00, 0xFD, 0xFF, 0xC1, 0xFF, 0xFF, 0xF8, 0xFF, 0x7F, 0xFE, 0xFF, 0xAF, 0xFF, 0xFF, + 0xEB, 0xFF, 0xFF, 0xF1, 0xFF, 0x3F, 0xF4, 0xFF, 0x03, 0xA0, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, 0xFF, + 0xFF, 0xC2, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0xF0, + 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, + 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, + 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, + 0x0B, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0xF0, 0xFF, 0x2F, 0xFC, 0xFF, 0x0B, 0xFF, 0xFF, 0xC2, 0xFF, + 0xBF, 0x00, + // Unicode: [0x006A, j] + 0x00, 0x40, 0xFE, 0x02, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x7F, + 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xD0, 0xFF, 0x0F, 0x00, 0x00, 0xBA, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0xF4, 0xFF, 0x1F, 0x54, 0xFD, 0xFF, 0x1F, + 0xFE, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x0B, 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x02, + 0xFE, 0xFF, 0xBF, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0xFE, 0xAF, 0x01, 0x00, + // Unicode: [0x006B, k] + 0xAA, 0xAA, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, + 0x00, 0x80, 0xFF, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xF1, 0xFF, 0x2F, 0x00, + 0x40, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0x0B, 0x00, 0xF0, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x00, + 0xFF, 0xFF, 0x2F, 0xC0, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0x2F, 0x00, 0xFD, + 0xFF, 0x2F, 0x00, 0xFC, 0xFF, 0x0B, 0xD0, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x02, 0xFC, 0xFF, + 0x7F, 0x00, 0xC0, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0x2F, 0xF8, 0xFF, 0x7F, + 0x00, 0x00, 0xFC, 0xFF, 0x4B, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xF6, 0xFF, 0xBF, 0x00, + 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xC0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0xFB, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF6, 0xFF, 0xBF, 0x00, 0x00, 0xC0, + 0xFF, 0xBF, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xFC, + 0xFF, 0x0B, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xFC, 0xFF, 0x7F, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0xFD, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0xFC, 0xFF, + 0x0B, 0x00, 0xFE, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x2F, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0xF0, 0xFF, 0x2F, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0x0B, + 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0xFF, 0xFF, 0x1F, + // Unicode: [0x006C, l] + 0xAA, 0xAA, 0xFD, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, + 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, + 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, + 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, + // Unicode: [0x006D, m] + 0x00, 0x00, 0x00, 0x40, 0x55, 0x05, 0x00, 0x00, 0x00, 0x50, 0x55, 0x01, 0x00, 0xC0, 0xFF, 0xBF, + 0x00, 0xFE, 0xFF, 0x6F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1B, 0x00, 0xF0, 0xFF, 0x2F, 0xF8, 0xFF, + 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x6F, 0x00, 0xFC, 0xFF, 0xCB, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0xF4, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, + 0xFF, 0x06, 0x90, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0xD0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x1F, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x0B, + 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, + 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x0F, + // Unicode: [0x006E, n] + 0x00, 0x00, 0x00, 0x00, 0x55, 0x05, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xF8, 0xFF, 0xBF, 0x01, 0x00, + 0xFF, 0xFF, 0x42, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xAF, 0xFA, 0xFF, 0xFF, 0x1F, + 0xFF, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xF8, 0xFF, 0x3F, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xD0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, 0xFF, 0xBF, + // Unicode: [0x006F, o] + 0x00, 0x00, 0x00, 0x50, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x1B, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0xFF, 0x00, 0xFC, + 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x3F, + 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFD, + 0xFF, 0x8B, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE2, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF4, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xF7, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFE, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x8F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xD2, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x1F, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0xFD, 0xFF, 0x2F, 0x00, 0x00, + 0xF9, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xBF, 0x01, 0xE4, 0xFF, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 0x05, 0x00, + 0x00, 0x00, 0x00, + // Unicode: [0x0070, p] + 0x00, 0x00, 0x00, 0x00, 0x55, 0x15, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0xF9, 0xFF, 0xBF, 0x01, + 0x00, 0xF0, 0xFF, 0x2F, 0xE0, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0xFC, 0xFF, 0x4B, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x0B, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x1B, 0x40, 0xFE, 0xFF, 0xFF, 0xC2, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xBF, + 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xCF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xF7, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xDF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xF7, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0x2F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xBF, 0x01, 0xE4, 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF0, 0xFF, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFC, + 0xFF, 0x4B, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0x02, 0xFE, 0xFF, 0xFF, 0x6F, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0xF9, 0xFF, 0xBF, 0x01, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x50, 0x55, 0x01, + 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x0071, q] + 0x00, 0x00, 0x00, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xBF, 0x01, 0xFC, + 0xFF, 0x0B, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x02, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC7, 0xFF, 0xBF, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x2F, 0x80, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0xFF, 0x2F, 0xFD, + 0xFF, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xCB, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF4, 0xFF, 0xFF, + 0xF2, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xBF, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xAF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xEB, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x02, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFB, 0xFF, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFE, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xAF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xDB, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xF2, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xBF, 0xF8, 0xFF, 0xBF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xBF, 0x01, 0x00, + 0xFD, 0xFF, 0xFF, 0x0B, 0xFE, 0xFF, 0xFF, 0x5B, 0xF9, 0xFF, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x0B, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x02, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x0B, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0xA4, 0xFF, 0x1A, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + // Unicode: [0x0072, r] + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xFF, 0xBF, 0x00, 0xF9, 0xFB, 0xFF, 0x2F, 0xE0, 0xFF, 0xFE, 0xFF, + 0x4B, 0xFF, 0xBF, 0xFF, 0xFF, 0xF6, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x5A, 0xF5, + 0xFF, 0xFF, 0x0B, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0x0B, 0x00, 0xC0, 0xFF, 0xFF, + 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, + 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, + 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, + 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0x00, + 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF0, 0xFF, + 0x2F, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xC0, 0xFF, 0xBF, 0x00, + 0x00, 0x00, + // Unicode: [0x0073, s] + 0x00, 0x00, 0x40, 0x55, 0x05, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0xE4, + 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0xF4, 0xFF, 0xBF, 0x55, 0xFE, 0xFF, 0x2F, 0xF8, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0x3F, 0xF8, + 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x7F, 0xFC, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x7F, 0xF8, 0xFF, 0x0B, + 0x00, 0x40, 0x55, 0x55, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x90, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE5, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, + 0xBF, 0xA9, 0xAA, 0x01, 0x00, 0x40, 0xFF, 0xFF, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFD, + 0xFF, 0x0B, 0x00, 0x40, 0xFF, 0xFF, 0xFC, 0xFF, 0x2F, 0x00, 0xC0, 0xFF, 0xBF, 0xF8, 0xFF, 0xFF, + 0x45, 0xF9, 0xFF, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, + 0x40, 0x55, 0x15, 0x00, 0x00, + // Unicode: [0x0074, t] + 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, + 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xE0, + 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, + 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, + 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, + 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0xFF, + 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, + 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x01, 0x00, 0x40, 0xFA, 0xFF, 0x07, + // Unicode: [0x0075, u] + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xBF, + 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0xBF, 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0xBF, + 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0xFC, 0xFF, 0xFF, 0x56, 0xE5, 0xFF, 0xFF, 0xBF, + 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xBF, + 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xC2, 0xFF, 0xBF, 0x00, 0xD0, 0xFF, 0xFF, 0x7F, 0xC0, 0xFF, 0xBF, + 0x00, 0x00, 0xE9, 0xBF, 0x06, 0xC0, 0xFF, 0xBF, + // Unicode: [0x0076, v] + 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0x4B, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xC1, 0xFF, 0xBF, 0x00, 0x00, 0x00, + 0xE0, 0xFF, 0x3F, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0xF4, 0xFF, 0x1F, 0x00, + 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, + 0x03, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0x40, 0xFF, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0xFF, 0x01, 0xC0, + 0xFF, 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF, 0x07, + 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x40, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0xE0, 0xFF, + 0x2F, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x40, + 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xD0, 0xFF, 0x3F, + 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0x0B, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0x41, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0xE0, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x5F, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xEB, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xD0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x7F, 0x00, 0x00, + 0x00, + // Unicode: [0x0077, w] + 0xFD, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0xCF, 0xFF, 0x7F, 0x00, + 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0x40, 0xFF, 0xBF, 0xFC, 0xFF, 0x0B, 0x00, 0x00, 0xFD, 0xFF, + 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x87, 0xFF, 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x80, + 0xFF, 0x7F, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0xFF, + 0xFF, 0x01, 0x00, 0xF4, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x2F, 0xE0, 0xFF, 0x1F, 0x00, 0x40, + 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0x01, 0xFD, 0xFF, 0x02, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, + 0x00, 0xE0, 0xFF, 0x0F, 0xC0, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xBF, + 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0x07, 0x40, 0xFF, 0x7F, + 0x00, 0xD0, 0xFF, 0xFB, 0xFF, 0x02, 0x40, 0xFF, 0x3F, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0xFE, 0x7F, + 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xF2, 0xFF, 0x07, 0x80, + 0xFF, 0x2F, 0x00, 0xE0, 0xFF, 0x0F, 0x40, 0xFF, 0x1F, 0xFE, 0x7F, 0x00, 0xFC, 0xFF, 0x01, 0x00, + 0xFD, 0xFF, 0x01, 0xF4, 0xFF, 0xD1, 0xFF, 0x0B, 0xD0, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x2F, 0x80, + 0xFF, 0x0F, 0xFD, 0xFF, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0x02, 0xFC, 0xBF, 0xC0, 0xFF, + 0x0F, 0xE0, 0xFF, 0x07, 0x00, 0x40, 0xFF, 0x3F, 0xD0, 0xFF, 0x07, 0xF8, 0xFF, 0x01, 0xFF, 0x3F, + 0x00, 0x00, 0xF0, 0xFF, 0x07, 0xFE, 0x3F, 0x40, 0xFF, 0x2F, 0xF0, 0xFF, 0x02, 0x00, 0x00, 0xFE, + 0x7F, 0xE0, 0xFF, 0x03, 0xF0, 0xFF, 0x43, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x0B, 0xFF, 0x2F, + 0x00, 0xFF, 0x3F, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xF4, 0xFF, 0x01, 0xE0, 0xFF, 0xC7, + 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0x9F, 0xFF, 0x0F, 0x00, 0xFD, 0xBF, 0xFC, 0xBF, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xF9, 0xBF, 0x00, 0xC0, 0xFF, 0xDF, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0xEF, + 0xFF, 0x0B, 0x00, 0xF8, 0xFF, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x7F, 0x00, 0x80, + 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0xF4, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0xFD, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0xD0, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, + // Unicode: [0x0078, x] + 0xFD, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x3F, + 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0xFD, 0xFF, 0x0B, + 0x80, 0xFF, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0x0B, 0x40, 0xFF, 0xFF, 0x01, + 0x00, 0xFD, 0xFF, 0x1F, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0xE0, 0xFF, 0x3F, 0x00, + 0x00, 0xE0, 0xFF, 0xBF, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFD, 0xFF, 0x0B, 0x00, + 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x0B, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0xFE, 0xFF, 0x0B, 0x00, + 0x00, 0xE0, 0xFF, 0x2F, 0xFD, 0xFF, 0x1F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0xF8, 0xFF, 0x3F, 0x00, + 0x00, 0xFD, 0xFF, 0x07, 0xE0, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0xD0, 0xFF, 0xFF, 0x01, + 0x40, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0x0B, + 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x3F, + 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xBF, + // Unicode: [0x0079, y] + 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xBF, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0x7F, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0xF4, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0xF4, 0xFF, 0x1F, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0xD0, 0xFF, 0xBF, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0B, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x80, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0x02, 0x40, 0xFF, 0xFF, 0x03, 0x00, 0x40, 0xFF, 0xFF, + 0x01, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xC0, + 0xFF, 0xBF, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, + 0x00, 0xE0, 0xFF, 0x2F, 0x00, 0x00, 0xF0, 0xFF, 0x2F, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, + 0xFF, 0x3F, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x07, 0x00, + 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x43, + 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x87, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xCB, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xDF, 0xFF, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xD0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x007A, z] + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x80, + 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xFD, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x2F, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x7F, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, + // Unicode: [0x007B, braceleft] + 0x00, 0x00, 0x40, 0xFE, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0x00, + 0x80, 0xFF, 0xFF, 0xBF, 0x00, 0xD0, 0xFF, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0xFF, 0xBF, 0x00, 0xF4, + 0xFF, 0xFF, 0xBF, 0x00, 0xF4, 0xFF, 0x7F, 0x01, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, + 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x07, + 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, + 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, + 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, + 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, + 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, + 0x00, 0x00, 0xFE, 0xFF, 0x0B, 0x00, 0xE4, 0xFF, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, + 0xFD, 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0x0A, 0x00, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0xFD, + 0xFF, 0x7F, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0xE4, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, + 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, + 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, + 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, + 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, + 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF4, 0xFF, 0x0B, 0x00, 0x00, 0xF8, + 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, + 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x0B, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF4, 0xFF, 0x7F, + 0x15, 0x00, 0xF4, 0xFF, 0xFF, 0xBF, 0x00, 0xF0, 0xFF, 0xFF, 0xBF, 0x00, 0xD0, 0xFF, 0xFF, 0xBF, + 0x00, 0x80, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0xF4, 0xFF, 0xBF, 0x00, + 0x00, 0x40, 0xFE, 0xBF, + // Unicode: [0x007C, bar] + 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, + 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, + 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, + 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, + // Unicode: [0x007D, braceright] + 0xFF, 0xAF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x02, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0xFC, 0xFF, + 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, 0xBF, + 0x00, 0x00, 0xF9, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, + 0x00, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xFC, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0xF4, 0xFF, 0x0B, + 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, + 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0xFF, + 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, + 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xFD, 0xFF, 0x1F, 0x00, 0x00, + 0xFE, 0xFF, 0xAF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x40, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xF9, + 0xFF, 0x0F, 0x00, 0x40, 0xFE, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, + 0x00, 0xF8, 0xFF, 0xBF, 0x06, 0x40, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0xF8, + 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, + 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, + 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x40, 0xFF, + 0xBF, 0x00, 0x00, 0xD0, 0xFF, 0x2F, 0x00, 0x00, 0xF4, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0x03, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, + 0xFC, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x55, 0xFE, 0xFF, + 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, 0x02, 0xF0, 0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0xBF, 0x00, 0x00, 0xFC, 0xBF, + 0x06, 0x00, 0x00, + // Unicode: [0x007E, asciitilde] + 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, 0xA4, 0x6A, 0x00, 0xE0, 0xFF, 0x6F, 0x00, 0x00, 0xFC, 0x7F, + 0x00, 0xFD, 0xFF, 0xFF, 0x02, 0x00, 0xFD, 0x3F, 0x40, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0xFF, 0x3F, + 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xFF, 0x2F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFD, 0xFF, 0x41, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0x3F, 0x00, 0xE4, 0xFF, 0xFF, 0x7F, 0x00, + 0xFE, 0x1F, 0x00, 0x40, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xE4, 0xBF, 0x01, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_60_2bpp_4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_60_2bpp_4.cpp new file mode 100644 index 00000000..03809c57 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Font_Poppins_SemiBold_60_2bpp_4.cpp @@ -0,0 +1,12 @@ +#include + +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_60_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { + // Unicode: [0x2026, ellipsis] + 0x40, 0xBE, 0x01, 0x00, 0xF9, 0x06, 0x00, 0xE4, 0x1B, 0x00, 0xFE, 0x7F, 0x00, 0xF8, 0xFF, 0x02, + 0xD0, 0xFF, 0x0B, 0xF8, 0xFF, 0x1F, 0xE0, 0xFF, 0x7F, 0x40, 0xFF, 0xFF, 0xC2, 0xFF, 0xFF, 0x02, + 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0x3F, 0xFD, 0xFF, 0x3F, 0xF4, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xD7, + 0xFF, 0xFF, 0x43, 0xFF, 0xFF, 0x0F, 0xFC, 0xFF, 0x7F, 0xFC, 0xFF, 0x2F, 0xF0, 0xFF, 0xFF, 0x80, + 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0x07, 0xF4, 0xFF, 0x2F, 0xF0, 0xFF, 0x0B, 0x80, + 0xFF, 0x2F, 0x00, 0xFE, 0xBF, 0x00, 0xF8, 0x1B, 0x00, 0x90, 0x6F, 0x00, 0x40, 0xFE, 0x01 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/GeneratedFont.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/GeneratedFont.cpp new file mode 100644 index 00000000..fcb40d1e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/GeneratedFont.cpp @@ -0,0 +1,310 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include +#include + +namespace touchgfx +{ +GeneratedFont::GeneratedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable) + : ConstFont(glyphs, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, fallbackChar, ellipsisChar), + glyphData(glyphDataInternalFlash), + kerningData(kerningList), + gsubTable(gsubData), + arabicTable(formsTable) +{ +} + +const uint8_t* GeneratedFont::getPixelData(const GlyphNode* glyph) const +{ + // Read dataOffset as 16bit, as it may be unaligned + volatile const uint16_t* dataOffset = (const uint16_t*)((const uint8_t*)glyph + offsetof(GlyphNode, dataOffset)); + uint32_t offset = dataOffset[0]; + offset |= dataOffset[1] << 16; + + const uint8_t* const* table = (const uint8_t* const*)glyphData; + const uint8_t* pixels = table[glyph->unicode / 2048]; + return pixels + offset; +} + +int8_t GeneratedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const +{ + if (!glyph || glyph->kerningTableSize == 0) + { + return 0; + } + + const KerningNode* kerndata = kerningData + glyph->kerningTablePos(); + for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++) + { + if (prevChar == kerndata->unicodePrevChar) + { + return kerndata->distance; + } + if (prevChar < kerndata->unicodePrevChar) + { + break; + } + } + return 0; +} + +const GlyphNode* FusedFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const +{ + if (unicode < 0xAC00 || unicode > 0xD7A3) + { + return GeneratedFont::getGlyph(unicode, pixelData, bitsPerPixel); + } + else + { + fusedNode.unicode = unicode; + bitsPerPixel = 1; + pixelData = 0; + return const_cast(&fusedNode); + } +} + +GlyphNode GeneratedVectorFont::glyphNode; // Static member + +GeneratedVectorFont::GeneratedVectorFont(uint16_t baseline, float scale, const VectorFontNode* vectorGlyphs, const VectorFontData& fontData, + const uint16_t* const* glyphData, const VectorKerningNode* kerning, + const uint16_t* const gsubData, const FontContextualFormsTable* formsTable) + : Font((int)ceilf((fontData.maxBelowBottom + fontData.baselineHeight) * scale), baseline, + (uint8_t)ceilf(fontData.maxAboveTop * scale), + (uint8_t)ceilf(fontData.maxBelowBottom * scale), 0 /*bitsPerPixel*/, 0 /*byteAlignRow*/, + (uint8_t)ceilf(fontData.maxLeft * scale), + (uint8_t)ceilf(fontData.maxRight * scale), + fontData.fallbackChar, + fontData.ellipsisChar), + scaleFactor(scale), vectorNodes(vectorGlyphs), vectorTable(glyphData), kerningTable(kerning), + arabicTable(formsTable), numberOfGlyphs(fontData.numberOfGlyphs) +{ + if (gsubData[0] != 0) + { + gsubTable = gsubData; + } + else + { + gsubTable = 0; + } +} + +const GlyphNode* GeneratedVectorFont::getGlyph(Unicode::UnicodeChar unicode) const +{ + const VectorFontNode* const node = find(unicode); + if (node == 0) + { + return 0; + } + else + { + return getGlyphNode(node); + } +} + +const GlyphNode* GeneratedVectorFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const +{ + const VectorFontNode* const node = find(unicode); + if (node == 0) + { + return 0; + } + else + { + const uint16_t* contourData = &(vectorTable[unicode / 2048][node->dataOffset]); + pixelData = (const uint8_t*)contourData; + bitsPerPixel = 0xFF; + return getGlyphNode(node); + } +} + +const GlyphNode* GeneratedVectorFont::getGlyphNode(const VectorFontNode* node) const +{ + glyphNode.dataOffset = 0; + uint8_t flags = 0; + + //Convert data from VectorFontNode to glyphNode using scaleFactor + glyphNode.unicode = node->unicode; + + const int width = (node->width == 0) ? 0 : ((int)ceilf(node->width * scaleFactor) + 1); + glyphNode._width = width; // Save low 8 bit + // Set flags bits for values above 8 bit + if (width > 255) + { + flags |= GLYPH_DATA_WIDTH_BIT8; + } + + const int height = (int)ceilf(node->height * scaleFactor); + glyphNode._height = height; + if (height > 255) + { + flags |= GLYPH_DATA_HEIGHT_BIT8; + } + + const int top = (int)ceilf(node->top * scaleFactor); + glyphNode._top = top; + if (top > 255) + { + flags |= ((top & 0x300) >> 3); // GLYPH_DATA_TOP_BIT8 + 9 + } + + const int left = (int)(node->left * scaleFactor); + glyphNode.left = left; + + const int advance = (int)(node->advance * scaleFactor + 0.5f); + glyphNode._advance = advance; + if (advance > 255) + { + flags |= GLYPH_DATA_ADVANCE_BIT8; + } + + glyphNode._kerningTablePos = (uint8_t)node->kerningTablePos; + if (node->kerningTablePos > 255) + { + flags |= (node->kerningTablePos >> 8) & GLYPH_DATA_KERNINGTABLEPOS_BIT8_10; + } + + glyphNode.kerningTableSize = node->kerningTableSize; + + glyphNode.flags = flags; + + return &glyphNode; +} + +int8_t GeneratedVectorFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const +{ + if (!glyph || glyph->kerningTableSize == 0) + { + return 0; + } + + const VectorKerningNode* kerndata = kerningTable + glyph->kerningTablePos(); + for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++) + { + if (prevChar == kerndata->unicodePrevChar) + { + const float scaledDistance = kerndata->distance * scaleFactor; + return (int)(scaledDistance >= 0.0f ? (scaledDistance + 0.5f) : (scaledDistance - 0.5f)); + } + if (prevChar < kerndata->unicodePrevChar) + { + break; + } + } + return 0; +} + +const VectorFontNode* GeneratedVectorFont::find(Unicode::UnicodeChar unicode) const +{ + // Some fonts does not have a glyphList. Cannot be searched... + if (vectorNodes == 0) + { + return 0; + } + + int32_t min = 0; + int32_t max = numberOfGlyphs - 1; + + int32_t mid = min + (unicode - vectorNodes[min].unicode); // Linear up from [min].unicode + if (mid < min) + { + // Unicode < [min].unicode => not found + return (VectorFontNode*)0; + } + if (mid > max) + { + // Linear up ends too high + mid = max - (vectorNodes[max].unicode - unicode); // Linear down from [max].unicode + if (mid > max) + { + // Unicode > [max].unicode => not found + return (VectorFontNode*)0; + } + if (mid < min) + { + // Linear down ends too low, take the middle element + mid = (min + max) / 2; + } + } + while (min <= max) + { + const Unicode::UnicodeChar midUnicode = vectorNodes[mid].unicode; + if (unicode == midUnicode) + { + // Found at [mid] + return vectorNodes + mid; + } + if (unicode < midUnicode) + { + // Unicode is in lower half + max = mid - 1; + if (max < min) + { + // Range is empty => not found + break; + } + // We adjusted max, try linear down from [max].unicode + mid = max - (vectorNodes[max].unicode - unicode); + if (mid > max) + { + // Unicode > [max].unicode => not found + break; + } + if (mid < min) + { + // Linear down ends too low, take the middle element + mid = (min + max) / 2; + } + } + else + { + // Unicode is in upper half + min = mid + 1; + if (min > max) + { + // Range is empty => not found + break; + } + // We adjusted min, try linear up from [min].unicode + mid = min + (unicode - vectorNodes[min].unicode); + if (mid < min) + { + // Unicode < [min].unicode => not found + break; + } + if (mid > max) + { + // Linear up ends too high, take the middle element + mid = (min + max) / 2; + } + } + } + return (VectorFontNode*)0; +} + +CompressedMappedFont::CompressedMappedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable) + : GeneratedFont(glyphs, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, glyphDataInternalFlash, kerningList, fallbackChar, ellipsisChar, gsubData, formsTable) +{ +} + +const GlyphNode* CompressedMappedFont::getGlyph(Unicode::UnicodeChar unicode) const +{ + return find(unicode); +} + +const uint8_t* CompressedMappedFont::getPixelData(const GlyphNode* glyph) const +{ + const uint8_t* pixelData = CompressedFontCache::hasCachedGlyph(glyph); + if (pixelData) + { + return pixelData; + } + + const uint8_t* const* table = (const uint8_t* const*)glyphData; + const uint8_t* compressedData = &(table[glyph->unicode / 2048][glyph->dataOffset & 0x3FFFFFFF]); + return CompressedFontCache::cacheGlyph(glyph, compressedData); +} + +} // namespace touchgfx diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Italic_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Italic_18_2bpp.cpp new file mode 100644 index 00000000..c6feee7e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Italic_18_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Italic_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Italic_20_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Italic_20_2bpp.cpp new file mode 100644 index 00000000..ba9fb98a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Italic_20_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Italic_20_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_10_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_10_2bpp.cpp new file mode 100644 index 00000000..9838310e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_10_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_10_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_18_2bpp.cpp new file mode 100644 index 00000000..ffab07e1 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_18_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_25_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_25_2bpp.cpp new file mode 100644 index 00000000..4ac9a569 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_25_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_25_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_50_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_50_2bpp.cpp new file mode 100644 index 00000000..8bda024a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Medium_50_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_50_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_14_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_14_2bpp.cpp new file mode 100644 index 00000000..58dd2c6e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_14_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Regular_14_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_16_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_16_2bpp.cpp new file mode 100644 index 00000000..30bc3e03 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_16_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Regular_16_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_18_2bpp.cpp new file mode 100644 index 00000000..d1ca4090 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_Regular_18_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Regular_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_18_2bpp.cpp new file mode 100644 index 00000000..188b5008 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_18_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_20_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_20_2bpp.cpp new file mode 100644 index 00000000..9037503c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_20_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_20_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_25_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_25_2bpp.cpp new file mode 100644 index 00000000..c30ef3de --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_25_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_25_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_30_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_30_2bpp.cpp new file mode 100644 index 00000000..75e81a3f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_30_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_30_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_35_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_35_2bpp.cpp new file mode 100644 index 00000000..769a8ad9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_35_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_35_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_40_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_40_2bpp.cpp new file mode 100644 index 00000000..7165270a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_40_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_40_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_60_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_60_2bpp.cpp new file mode 100644 index 00000000..3d18abdb --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Kerning_Poppins_SemiBold_60_2bpp.cpp @@ -0,0 +1,6 @@ +#include + +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_60_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0 } +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Italic_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Italic_18_2bpp.cpp new file mode 100644 index 00000000..3953c0fe --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Italic_18_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Italic_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 5, 0, 0, 0x00 }, // space + { 0, 0x0021, 4, 13, 13, 1, 5, 0, 0, 0x00 }, // exclam + { 13, 0x0022, 4, 4, 15, 2, 5, 0, 0, 0x00 }, // quotedbl + { 17, 0x0023, 15, 13, 13, 0, 15, 0, 0, 0x00 }, // numbersign + { 66, 0x0024, 10, 16, 14, 0, 11, 0, 0, 0x00 }, // dollar + { 106, 0x0025, 11, 13, 13, 1, 12, 0, 0, 0x00 }, // percent + { 142, 0x0026, 13, 13, 13, 0, 14, 0, 0, 0x00 }, // ampersand + { 185, 0x0027, 2, 4, 15, 2, 3, 0, 0, 0x00 }, // quotesingle + { 187, 0x0028, 8, 20, 17, 2, 8, 0, 0, 0x00 }, // parenleft + { 227, 0x0029, 8, 20, 17, -1, 8, 0, 0, 0x00 }, // parenright + { 267, 0x002A, 7, 7, 13, 2, 9, 0, 0, 0x00 }, // asterisk + { 280, 0x002B, 10, 11, 12, 1, 12, 0, 0, 0x00 }, // plus + { 308, 0x002C, 5, 5, 2, -2, 4, 0, 0, 0x00 }, // comma + { 315, 0x002D, 8, 2, 7, 1, 10, 0, 0, 0x00 }, // hyphen + { 319, 0x002E, 3, 3, 3, 0, 4, 0, 0, 0x00 }, // period + { 322, 0x002F, 11, 20, 17, -1, 9, 0, 0, 0x00 }, // slash + { 377, 0x0030, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // zero + { 410, 0x0031, 5, 13, 13, 1, 6, 0, 0, 0x00 }, // one + { 427, 0x0032, 10, 13, 13, 0, 10, 0, 0, 0x00 }, // two + { 460, 0x0033, 10, 13, 13, 0, 11, 0, 0, 0x00 }, // three + { 493, 0x0034, 11, 13, 13, 0, 11, 0, 0, 0x00 }, // four + { 529, 0x0035, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // five + { 562, 0x0036, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // six + { 595, 0x0037, 10, 13, 13, 1, 10, 0, 0, 0x00 }, // seven + { 628, 0x0038, 11, 13, 13, 0, 11, 0, 0, 0x00 }, // eight + { 664, 0x0039, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // nine + { 697, 0x003A, 3, 10, 10, 0, 4, 0, 0, 0x00 }, // colon + { 705, 0x003B, 5, 13, 10, -1, 5, 0, 0, 0x00 }, // semicolon + { 722, 0x003C, 7, 9, 11, 2, 10, 0, 0, 0x00 }, // less + { 738, 0x003D, 11, 6, 9, 1, 13, 0, 0, 0x00 }, // equal + { 755, 0x003E, 7, 9, 11, 1, 10, 0, 0, 0x00 }, // greater + { 771, 0x003F, 9, 13, 13, 1, 9, 0, 0, 0x00 }, // question + { 801, 0x0040, 16, 15, 12, 1, 18, 0, 0, 0x00 }, // at + { 861, 0x0041, 11, 13, 13, 0, 12, 0, 0, 0x00 }, // A + { 897, 0x0042, 11, 13, 13, 0, 11, 0, 0, 0x00 }, // B + { 933, 0x0043, 13, 13, 13, 1, 14, 0, 0, 0x00 }, // C + { 976, 0x0044, 13, 13, 13, 0, 13, 0, 0, 0x00 }, // D + { 1019, 0x0045, 10, 13, 13, 0, 9, 0, 0, 0x00 }, // E + { 1052, 0x0046, 10, 13, 13, 0, 9, 0, 0, 0x00 }, // F + { 1085, 0x0047, 13, 13, 13, 1, 14, 0, 0, 0x00 }, // G + { 1128, 0x0048, 13, 13, 13, 0, 12, 0, 0, 0x00 }, // H + { 1171, 0x0049, 5, 13, 13, 0, 4, 0, 0, 0x00 }, // I + { 1188, 0x004A, 9, 13, 13, 0, 10, 0, 0, 0x00 }, // J + { 1218, 0x004B, 11, 13, 13, 0, 11, 0, 0, 0x00 }, // K + { 1254, 0x004C, 7, 13, 13, 0, 8, 0, 0, 0x00 }, // L + { 1277, 0x004D, 16, 13, 13, 0, 16, 0, 0, 0x00 }, // M + { 1329, 0x004E, 13, 13, 13, 0, 13, 0, 0, 0x00 }, // N + { 1372, 0x004F, 13, 13, 13, 1, 14, 0, 0, 0x00 }, // O + { 1415, 0x0050, 11, 13, 13, 0, 10, 0, 0, 0x00 }, // P + { 1451, 0x0051, 13, 15, 13, 1, 14, 0, 0, 0x00 }, // Q + { 1500, 0x0052, 11, 13, 13, 0, 11, 0, 0, 0x00 }, // R + { 1536, 0x0053, 9, 13, 13, 1, 10, 0, 0, 0x00 }, // S + { 1566, 0x0054, 10, 13, 13, 1, 10, 0, 0, 0x00 }, // T + { 1599, 0x0055, 11, 13, 13, 1, 12, 0, 0, 0x00 }, // U + { 1635, 0x0056, 12, 13, 13, 1, 12, 0, 0, 0x00 }, // V + { 1674, 0x0057, 18, 13, 13, 1, 18, 0, 0, 0x00 }, // W + { 1733, 0x0058, 12, 13, 13, 0, 11, 0, 0, 0x00 }, // X + { 1772, 0x0059, 11, 13, 13, 1, 11, 0, 0, 0x00 }, // Y + { 1808, 0x005A, 10, 13, 13, 0, 10, 0, 0, 0x00 }, // Z + { 1841, 0x005B, 7, 21, 17, 1, 8, 0, 0, 0x00 }, // bracketleft + { 1878, 0x005C, 4, 20, 17, 3, 9, 0, 0, 0x00 }, // backslash + { 1898, 0x005D, 8, 21, 17, 0, 8, 0, 0, 0x00 }, // bracketright + { 1940, 0x005E, 10, 10, 13, 0, 11, 0, 0, 0x00 }, // asciicircum + { 1965, 0x005F, 11, 2, 0, 0, 13, 0, 0, 0x00 }, // underscore + { 1971, 0x0060, 5, 3, 14, 1, 5, 0, 0, 0x00 }, // grave + { 1975, 0x0061, 12, 10, 10, 0, 12, 0, 0, 0x00 }, // a + { 2005, 0x0062, 12, 13, 13, 0, 12, 0, 0, 0x00 }, // b + { 2044, 0x0063, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // c + { 2072, 0x0064, 12, 13, 13, 0, 12, 0, 0, 0x00 }, // d + { 2111, 0x0065, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // e + { 2139, 0x0066, 6, 13, 13, 1, 6, 0, 0, 0x00 }, // f + { 2159, 0x0067, 12, 15, 10, 0, 12, 0, 0, 0x00 }, // g + { 2204, 0x0068, 11, 13, 13, 0, 12, 0, 0, 0x00 }, // h + { 2240, 0x0069, 5, 13, 13, 0, 4, 0, 0, 0x00 }, // i + { 2257, 0x006A, 7, 18, 13, -2, 4, 0, 0, 0x00 }, // j + { 2289, 0x006B, 10, 13, 13, 0, 9, 0, 0, 0x00 }, // k + { 2322, 0x006C, 5, 13, 13, 0, 4, 0, 0, 0x00 }, // l + { 2339, 0x006D, 18, 10, 10, 0, 19, 0, 0, 0x00 }, // m + { 2384, 0x006E, 11, 10, 10, 0, 12, 0, 0, 0x00 }, // n + { 2412, 0x006F, 11, 10, 10, 0, 12, 0, 0, 0x00 }, // o + { 2440, 0x0070, 13, 15, 10, -1, 12, 0, 0, 0x00 }, // p + { 2489, 0x0071, 12, 15, 10, 0, 12, 0, 0, 0x00 }, // q + { 2534, 0x0072, 7, 10, 10, 0, 7, 0, 0, 0x00 }, // r + { 2552, 0x0073, 9, 10, 10, 0, 9, 0, 0, 0x00 }, // s + { 2575, 0x0074, 6, 13, 13, 1, 7, 0, 0, 0x00 }, // t + { 2595, 0x0075, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // u + { 2620, 0x0076, 10, 10, 10, 1, 10, 0, 0, 0x00 }, // v + { 2645, 0x0077, 14, 10, 10, 1, 15, 0, 0, 0x00 }, // w + { 2680, 0x0078, 10, 10, 10, -1, 9, 0, 0, 0x00 }, // x + { 2705, 0x0079, 11, 15, 10, 0, 10, 0, 0, 0x00 }, // y + { 2747, 0x007A, 8, 10, 10, 0, 8, 0, 0, 0x00 }, // z + { 2767, 0x007B, 7, 21, 17, 2, 8, 0, 0, 0x00 }, // braceleft + { 2804, 0x007C, 5, 16, 14, 0, 5, 0, 0, 0x00 }, // bar + { 2824, 0x007D, 7, 21, 17, 0, 8, 0, 0, 0x00 }, // braceright + { 2861, 0x007E, 8, 3, 7, 1, 9, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 9, 3, 3, 0, 10, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Italic_18_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Italic_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Italic_18_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Italic_18_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Italic_18_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Italic_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Italic_18_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Italic_18_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Italic_18_2bpp(glyphs_Poppins_Italic_18_2bpp, 96, 23, 18, 0, 0, 2, 0, 2, 2, unicodes_Poppins_Italic_18_2bpp, kerning_Poppins_Italic_18_2bpp, 63, 8230, 0, 0); + return Poppins_Italic_18_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Italic_20_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Italic_20_2bpp.cpp new file mode 100644 index 00000000..875edbd7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Italic_20_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Italic_20_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 6, 0, 0, 0x00 }, // space + { 0, 0x0021, 5, 14, 14, 1, 6, 0, 0, 0x00 }, // exclam + { 18, 0x0022, 5, 4, 16, 2, 6, 0, 0, 0x00 }, // quotedbl + { 23, 0x0023, 17, 15, 15, 0, 17, 0, 0, 0x00 }, // numbersign + { 87, 0x0024, 10, 18, 16, 1, 12, 0, 0, 0x00 }, // dollar + { 132, 0x0025, 12, 14, 14, 1, 14, 0, 0, 0x00 }, // percent + { 174, 0x0026, 14, 14, 14, 0, 15, 0, 0, 0x00 }, // ampersand + { 223, 0x0027, 2, 4, 16, 2, 3, 0, 0, 0x00 }, // quotesingle + { 225, 0x0028, 9, 22, 18, 2, 9, 0, 0, 0x00 }, // parenleft + { 275, 0x0029, 9, 22, 18, -1, 9, 0, 0, 0x00 }, // parenright + { 325, 0x002A, 8, 8, 15, 2, 10, 0, 0, 0x00 }, // asterisk + { 341, 0x002B, 11, 10, 12, 2, 14, 0, 0, 0x00 }, // plus + { 369, 0x002C, 5, 6, 3, -2, 4, 0, 0, 0x00 }, // comma + { 377, 0x002D, 9, 2, 8, 1, 11, 0, 0, 0x00 }, // hyphen + { 382, 0x002E, 3, 3, 3, 0, 4, 0, 0, 0x00 }, // period + { 385, 0x002F, 12, 22, 19, -1, 10, 0, 0, 0x00 }, // slash + { 451, 0x0030, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // zero + { 493, 0x0031, 5, 14, 14, 1, 6, 0, 0, 0x00 }, // one + { 511, 0x0032, 11, 15, 15, 0, 12, 0, 0, 0x00 }, // two + { 553, 0x0033, 12, 15, 15, 0, 12, 0, 0, 0x00 }, // three + { 598, 0x0034, 12, 14, 14, 0, 13, 0, 0, 0x00 }, // four + { 640, 0x0035, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // five + { 682, 0x0036, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // six + { 724, 0x0037, 10, 15, 15, 2, 11, 0, 0, 0x00 }, // seven + { 762, 0x0038, 12, 15, 15, 0, 13, 0, 0, 0x00 }, // eight + { 807, 0x0039, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // nine + { 849, 0x003A, 3, 11, 11, 0, 4, 0, 0, 0x00 }, // colon + { 858, 0x003B, 6, 14, 11, -1, 5, 0, 0, 0x00 }, // semicolon + { 879, 0x003C, 8, 9, 12, 2, 11, 0, 0, 0x00 }, // less + { 897, 0x003D, 11, 6, 10, 2, 14, 0, 0, 0x00 }, // equal + { 914, 0x003E, 7, 9, 12, 2, 11, 0, 0, 0x00 }, // greater + { 930, 0x003F, 10, 14, 14, 1, 10, 0, 0, 0x00 }, // question + { 965, 0x0040, 18, 18, 13, 1, 20, 0, 0, 0x00 }, // at + { 1046, 0x0041, 12, 14, 14, 0, 13, 0, 0, 0x00 }, // A + { 1088, 0x0042, 12, 14, 14, 0, 12, 0, 0, 0x00 }, // B + { 1130, 0x0043, 14, 14, 14, 1, 15, 0, 0, 0x00 }, // C + { 1179, 0x0044, 14, 14, 14, 0, 14, 0, 0, 0x00 }, // D + { 1228, 0x0045, 11, 14, 14, 0, 10, 0, 0, 0x00 }, // E + { 1267, 0x0046, 11, 14, 14, 0, 10, 0, 0, 0x00 }, // F + { 1306, 0x0047, 14, 14, 14, 1, 16, 0, 0, 0x00 }, // G + { 1355, 0x0048, 14, 14, 14, 0, 14, 0, 0, 0x00 }, // H + { 1404, 0x0049, 5, 14, 14, 0, 5, 0, 0, 0x00 }, // I + { 1422, 0x004A, 10, 14, 14, 0, 11, 0, 0, 0x00 }, // J + { 1457, 0x004B, 13, 14, 14, 0, 12, 0, 0, 0x00 }, // K + { 1503, 0x004C, 8, 14, 14, 0, 9, 0, 0, 0x00 }, // L + { 1531, 0x004D, 17, 14, 14, 0, 17, 0, 0, 0x00 }, // M + { 1591, 0x004E, 14, 14, 14, 0, 14, 0, 0, 0x00 }, // N + { 1640, 0x004F, 14, 14, 14, 1, 16, 0, 0, 0x00 }, // O + { 1689, 0x0050, 12, 14, 14, 0, 12, 0, 0, 0x00 }, // P + { 1731, 0x0051, 14, 17, 14, 1, 16, 0, 0, 0x00 }, // Q + { 1791, 0x0052, 12, 14, 14, 0, 12, 0, 0, 0x00 }, // R + { 1833, 0x0053, 10, 14, 14, 1, 12, 0, 0, 0x00 }, // S + { 1868, 0x0054, 10, 14, 14, 2, 11, 0, 0, 0x00 }, // T + { 1903, 0x0055, 13, 14, 14, 1, 14, 0, 0, 0x00 }, // U + { 1949, 0x0056, 13, 14, 14, 2, 14, 0, 0, 0x00 }, // V + { 1995, 0x0057, 19, 14, 14, 2, 20, 0, 0, 0x00 }, // W + { 2062, 0x0058, 13, 14, 14, 0, 12, 0, 0, 0x00 }, // X + { 2108, 0x0059, 11, 14, 14, 2, 12, 0, 0, 0x00 }, // Y + { 2147, 0x005A, 12, 14, 14, 0, 11, 0, 0, 0x00 }, // Z + { 2189, 0x005B, 8, 22, 18, 1, 8, 0, 0, 0x00 }, // bracketleft + { 2233, 0x005C, 4, 22, 19, 3, 10, 0, 0, 0x00 }, // backslash + { 2255, 0x005D, 8, 22, 18, 0, 8, 0, 0, 0x00 }, // bracketright + { 2299, 0x005E, 12, 11, 14, 0, 13, 0, 0, 0x00 }, // asciicircum + { 2332, 0x005F, 12, 2, 0, 0, 15, 0, 0, 0x00 }, // underscore + { 2338, 0x0060, 4, 3, 15, 2, 5, 0, 0, 0x00 }, // grave + { 2341, 0x0061, 13, 11, 11, 0, 14, 0, 0, 0x00 }, // a + { 2377, 0x0062, 13, 15, 15, 0, 14, 0, 0, 0x00 }, // b + { 2426, 0x0063, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // c + { 2459, 0x0064, 14, 15, 15, 0, 14, 0, 0, 0x00 }, // d + { 2512, 0x0065, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // e + { 2545, 0x0066, 7, 15, 15, 1, 7, 0, 0, 0x00 }, // f + { 2572, 0x0067, 13, 16, 11, 0, 14, 0, 0, 0x00 }, // g + { 2624, 0x0068, 12, 15, 15, 0, 13, 0, 0, 0x00 }, // h + { 2669, 0x0069, 5, 15, 15, 0, 5, 0, 0, 0x00 }, // i + { 2688, 0x006A, 8, 20, 15, -3, 5, 0, 0, 0x00 }, // j + { 2728, 0x006B, 11, 15, 15, 0, 10, 0, 0, 0x00 }, // k + { 2770, 0x006C, 5, 15, 15, 0, 5, 0, 0, 0x00 }, // l + { 2789, 0x006D, 20, 11, 11, 0, 21, 0, 0, 0x00 }, // m + { 2844, 0x006E, 12, 11, 11, 0, 13, 0, 0, 0x00 }, // n + { 2877, 0x006F, 12, 11, 11, 0, 13, 0, 0, 0x00 }, // o + { 2910, 0x0070, 14, 16, 11, -1, 14, 0, 0, 0x00 }, // p + { 2966, 0x0071, 13, 16, 11, 0, 14, 0, 0, 0x00 }, // q + { 3018, 0x0072, 8, 11, 11, 0, 7, 0, 0, 0x00 }, // r + { 3040, 0x0073, 10, 11, 11, 0, 10, 0, 0, 0x00 }, // s + { 3068, 0x0074, 7, 14, 14, 1, 7, 0, 0, 0x00 }, // t + { 3093, 0x0075, 11, 11, 11, 1, 13, 0, 0, 0x00 }, // u + { 3124, 0x0076, 11, 11, 11, 1, 11, 0, 0, 0x00 }, // v + { 3155, 0x0077, 16, 11, 11, 1, 16, 0, 0, 0x00 }, // w + { 3199, 0x0078, 11, 11, 11, -1, 10, 0, 0, 0x00 }, // x + { 3230, 0x0079, 11, 16, 11, 1, 11, 0, 0, 0x00 }, // y + { 3274, 0x007A, 9, 11, 11, 0, 9, 0, 0, 0x00 }, // z + { 3299, 0x007B, 8, 22, 18, 2, 9, 0, 0, 0x00 }, // braceleft + { 3343, 0x007C, 6, 18, 16, 0, 6, 0, 0, 0x00 }, // bar + { 3370, 0x007D, 9, 22, 18, -1, 9, 0, 0, 0x00 }, // braceright + { 3420, 0x007E, 10, 3, 8, 0, 10, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 10, 3, 3, 0, 12, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Italic_20_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Italic_20_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_20_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Italic_20_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Italic_20_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Italic_20_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Italic_20_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Italic_20_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Italic_20_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Italic_20_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Italic_20_2bpp(glyphs_Poppins_Italic_20_2bpp, 96, 25, 20, 0, 0, 2, 0, 3, 2, unicodes_Poppins_Italic_20_2bpp, kerning_Poppins_Italic_20_2bpp, 63, 8230, 0, 0); + return Poppins_Italic_20_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_10_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_10_2bpp.cpp new file mode 100644 index 00000000..4c60de26 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_10_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_10_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 3, 0, 0, 0x00 }, // space + { 0, 0x0021, 2, 7, 7, 1, 3, 0, 0, 0x00 }, // exclam + { 4, 0x0022, 3, 3, 9, 0, 3, 0, 0, 0x00 }, // quotedbl + { 7, 0x0023, 8, 8, 8, 0, 9, 0, 0, 0x00 }, // numbersign + { 23, 0x0024, 6, 9, 8, 0, 7, 0, 0, 0x00 }, // dollar + { 37, 0x0025, 8, 7, 7, 0, 8, 0, 0, 0x00 }, // percent + { 51, 0x0026, 8, 7, 7, 0, 8, 0, 0, 0x00 }, // ampersand + { 65, 0x0027, 2, 2, 8, 0, 2, 0, 0, 0x00 }, // quotesingle + { 66, 0x0028, 4, 12, 10, 1, 5, 0, 0, 0x00 }, // parenleft + { 78, 0x0029, 4, 12, 10, 0, 5, 0, 0, 0x00 }, // parenright + { 90, 0x002A, 3, 4, 8, 1, 5, 0, 0, 0x00 }, // asterisk + { 93, 0x002B, 5, 6, 7, 1, 7, 0, 0, 0x00 }, // plus + { 101, 0x002C, 2, 3, 2, 0, 2, 0, 0, 0x00 }, // comma + { 103, 0x002D, 4, 1, 4, 1, 6, 0, 0, 0x00 }, // hyphen + { 104, 0x002E, 2, 2, 2, 0, 2, 0, 0, 0x00 }, // period + { 105, 0x002F, 5, 12, 10, 0, 5, 0, 0, 0x00 }, // slash + { 120, 0x0030, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // zero + { 132, 0x0031, 3, 8, 8, 0, 4, 0, 0, 0x00 }, // one + { 138, 0x0032, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // two + { 150, 0x0033, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // three + { 162, 0x0034, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // four + { 174, 0x0035, 5, 8, 8, 1, 6, 0, 0, 0x00 }, // five + { 184, 0x0036, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // six + { 196, 0x0037, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // seven + { 208, 0x0038, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // eight + { 220, 0x0039, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // nine + { 232, 0x003A, 2, 6, 6, 0, 2, 0, 0, 0x00 }, // colon + { 235, 0x003B, 2, 8, 6, 0, 3, 0, 0, 0x00 }, // semicolon + { 239, 0x003C, 4, 5, 6, 1, 6, 0, 0, 0x00 }, // less + { 244, 0x003D, 6, 3, 5, 1, 8, 0, 0, 0x00 }, // equal + { 249, 0x003E, 4, 5, 6, 1, 6, 0, 0, 0x00 }, // greater + { 254, 0x003F, 5, 7, 7, 0, 5, 0, 0, 0x00 }, // question + { 263, 0x0040, 10, 9, 7, 0, 10, 0, 0, 0x00 }, // at + { 286, 0x0041, 7, 7, 7, 0, 7, 0, 0, 0x00 }, // A + { 299, 0x0042, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // B + { 310, 0x0043, 7, 7, 7, 0, 8, 0, 0, 0x00 }, // C + { 323, 0x0044, 7, 7, 7, 0, 7, 0, 0, 0x00 }, // D + { 336, 0x0045, 5, 7, 7, 0, 5, 0, 0, 0x00 }, // E + { 345, 0x0046, 5, 7, 7, 0, 5, 0, 0, 0x00 }, // F + { 354, 0x0047, 8, 7, 7, 0, 8, 0, 0, 0x00 }, // G + { 368, 0x0048, 7, 7, 7, 0, 7, 0, 0, 0x00 }, // H + { 381, 0x0049, 2, 7, 7, 0, 3, 0, 0, 0x00 }, // I + { 385, 0x004A, 5, 7, 7, 0, 6, 0, 0, 0x00 }, // J + { 394, 0x004B, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // K + { 405, 0x004C, 5, 7, 7, 0, 4, 0, 0, 0x00 }, // L + { 414, 0x004D, 8, 7, 7, 0, 9, 0, 0, 0x00 }, // M + { 428, 0x004E, 7, 7, 7, 0, 7, 0, 0, 0x00 }, // N + { 441, 0x004F, 8, 7, 7, 0, 8, 0, 0, 0x00 }, // O + { 455, 0x0050, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // P + { 466, 0x0051, 8, 9, 7, 0, 8, 0, 0, 0x00 }, // Q + { 484, 0x0052, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // R + { 495, 0x0053, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // S + { 506, 0x0054, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // T + { 517, 0x0055, 7, 7, 7, 0, 7, 0, 0, 0x00 }, // U + { 530, 0x0056, 7, 7, 7, 0, 7, 0, 0, 0x00 }, // V + { 543, 0x0057, 10, 7, 7, 0, 10, 0, 0, 0x00 }, // W + { 561, 0x0058, 6, 7, 7, 0, 7, 0, 0, 0x00 }, // X + { 572, 0x0059, 6, 7, 7, 0, 6, 0, 0, 0x00 }, // Y + { 583, 0x005A, 5, 7, 7, 0, 6, 0, 0, 0x00 }, // Z + { 592, 0x005B, 3, 12, 10, 1, 5, 0, 0, 0x00 }, // bracketleft + { 601, 0x005C, 5, 12, 10, 1, 7, 0, 0, 0x00 }, // backslash + { 616, 0x005D, 3, 12, 10, 1, 5, 0, 0, 0x00 }, // bracketright + { 625, 0x005E, 6, 6, 8, 0, 7, 0, 0, 0x00 }, // asciicircum + { 634, 0x005F, 6, 1, 0, 1, 8, 0, 0, 0x00 }, // underscore + { 636, 0x0060, 3, 3, 9, 0, 3, 0, 0, 0x00 }, // grave + { 639, 0x0061, 6, 6, 6, 0, 7, 0, 0, 0x00 }, // a + { 648, 0x0062, 7, 8, 8, 0, 7, 0, 0, 0x00 }, // b + { 662, 0x0063, 6, 6, 6, 0, 6, 0, 0, 0x00 }, // c + { 671, 0x0064, 6, 8, 8, 0, 7, 0, 0, 0x00 }, // d + { 683, 0x0065, 6, 6, 6, 0, 6, 0, 0, 0x00 }, // e + { 692, 0x0066, 3, 8, 8, 0, 3, 0, 0, 0x00 }, // f + { 698, 0x0067, 6, 9, 6, 0, 7, 0, 0, 0x00 }, // g + { 712, 0x0068, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // h + { 724, 0x0069, 2, 8, 8, 0, 3, 0, 0, 0x00 }, // i + { 728, 0x006A, 3, 11, 8, -1, 3, 0, 0, 0x00 }, // j + { 737, 0x006B, 5, 8, 8, 0, 6, 0, 0, 0x00 }, // k + { 747, 0x006C, 2, 8, 8, 0, 3, 0, 0, 0x00 }, // l + { 751, 0x006D, 10, 6, 6, 0, 10, 0, 0, 0x00 }, // m + { 766, 0x006E, 6, 6, 6, 0, 6, 0, 0, 0x00 }, // n + { 775, 0x006F, 6, 6, 6, 0, 6, 0, 0, 0x00 }, // o + { 784, 0x0070, 7, 9, 6, 0, 7, 0, 0, 0x00 }, // p + { 800, 0x0071, 6, 9, 6, 0, 7, 0, 0, 0x00 }, // q + { 814, 0x0072, 4, 6, 6, 0, 4, 0, 0, 0x00 }, // r + { 820, 0x0073, 5, 6, 6, 0, 5, 0, 0, 0x00 }, // s + { 828, 0x0074, 4, 7, 7, 0, 4, 0, 0, 0x00 }, // t + { 835, 0x0075, 6, 6, 6, 0, 6, 0, 0, 0x00 }, // u + { 844, 0x0076, 6, 6, 6, 0, 6, 0, 0, 0x00 }, // v + { 853, 0x0077, 8, 6, 6, 0, 8, 0, 0, 0x00 }, // w + { 865, 0x0078, 5, 6, 6, 0, 5, 0, 0, 0x00 }, // x + { 873, 0x0079, 6, 9, 6, 0, 6, 0, 0, 0x00 }, // y + { 887, 0x007A, 5, 6, 6, 0, 5, 0, 0, 0x00 }, // z + { 895, 0x007B, 4, 12, 10, 1, 5, 0, 0, 0x00 }, // braceleft + { 907, 0x007C, 2, 10, 9, 1, 3, 0, 0, 0x00 }, // bar + { 912, 0x007D, 3, 12, 10, 1, 5, 0, 0, 0x00 }, // braceright + { 921, 0x007E, 5, 2, 5, 0, 6, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 6, 2, 2, 0, 6, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Medium_10_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_10_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_10_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_10_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Medium_10_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Medium_10_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Medium_10_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_10_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Medium_10_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Medium_10_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Medium_10_2bpp(glyphs_Poppins_Medium_10_2bpp, 96, 13, 10, 0, 0, 2, 0, 1, 1, unicodes_Poppins_Medium_10_2bpp, kerning_Poppins_Medium_10_2bpp, 63, 8230, 0, 0); + return Poppins_Medium_10_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_18_2bpp.cpp new file mode 100644 index 00000000..6370315c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_18_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 5, 0, 0, 0x00 }, // space + { 0, 0x0021, 3, 12, 12, 1, 6, 0, 0, 0x00 }, // exclam + { 9, 0x0022, 5, 4, 15, 0, 6, 0, 0, 0x00 }, // quotedbl + { 14, 0x0023, 15, 13, 13, 0, 16, 0, 0, 0x00 }, // numbersign + { 63, 0x0024, 9, 16, 14, 1, 12, 0, 0, 0x00 }, // dollar + { 99, 0x0025, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // percent + { 141, 0x0026, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // ampersand + { 183, 0x0027, 3, 4, 15, 0, 3, 0, 0, 0x00 }, // quotesingle + { 186, 0x0028, 6, 20, 17, 2, 9, 0, 0, 0x00 }, // parenleft + { 216, 0x0029, 7, 20, 17, 0, 9, 0, 0, 0x00 }, // parenright + { 251, 0x002A, 7, 7, 13, 1, 9, 0, 0, 0x00 }, // asterisk + { 264, 0x002B, 9, 9, 11, 2, 13, 0, 0, 0x00 }, // plus + { 285, 0x002C, 4, 5, 3, 0, 4, 0, 0, 0x00 }, // comma + { 290, 0x002D, 8, 2, 8, 1, 11, 0, 0, 0x00 }, // hyphen + { 294, 0x002E, 3, 3, 3, 1, 4, 0, 0, 0x00 }, // period + { 297, 0x002F, 7, 20, 17, 1, 9, 0, 0, 0x00 }, // slash + { 332, 0x0030, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // zero + { 365, 0x0031, 5, 13, 13, 0, 6, 0, 0, 0x00 }, // one + { 382, 0x0032, 9, 13, 13, 1, 10, 0, 0, 0x00 }, // two + { 412, 0x0033, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // three + { 442, 0x0034, 11, 13, 13, 0, 12, 0, 0, 0x00 }, // four + { 478, 0x0035, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // five + { 511, 0x0036, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // six + { 544, 0x0037, 10, 13, 13, 0, 10, 0, 0, 0x00 }, // seven + { 577, 0x0038, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // eight + { 610, 0x0039, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // nine + { 643, 0x003A, 3, 10, 10, 1, 4, 0, 0, 0x00 }, // colon + { 651, 0x003B, 4, 13, 10, 0, 5, 0, 0, 0x00 }, // semicolon + { 664, 0x003C, 6, 8, 10, 2, 11, 0, 0, 0x00 }, // less + { 676, 0x003D, 10, 6, 10, 2, 14, 0, 0, 0x00 }, // equal + { 691, 0x003E, 7, 8, 10, 2, 11, 0, 0, 0x00 }, // greater + { 705, 0x003F, 9, 12, 12, 0, 10, 0, 0, 0x00 }, // question + { 732, 0x0040, 16, 16, 12, 1, 18, 0, 0, 0x00 }, // at + { 796, 0x0041, 12, 12, 12, 0, 13, 0, 0, 0x00 }, // A + { 832, 0x0042, 10, 12, 12, 1, 11, 0, 0, 0x00 }, // B + { 862, 0x0043, 13, 12, 12, 0, 14, 0, 0, 0x00 }, // C + { 901, 0x0044, 11, 12, 12, 1, 13, 0, 0, 0x00 }, // D + { 934, 0x0045, 8, 12, 12, 1, 9, 0, 0, 0x00 }, // E + { 958, 0x0046, 8, 12, 12, 1, 9, 0, 0, 0x00 }, // F + { 982, 0x0047, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // G + { 1024, 0x0048, 11, 12, 12, 1, 13, 0, 0, 0x00 }, // H + { 1057, 0x0049, 3, 12, 12, 1, 5, 0, 0, 0x00 }, // I + { 1066, 0x004A, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // J + { 1090, 0x004B, 10, 12, 12, 1, 11, 0, 0, 0x00 }, // K + { 1120, 0x004C, 7, 12, 12, 1, 8, 0, 0, 0x00 }, // L + { 1141, 0x004D, 14, 12, 12, 1, 16, 0, 0, 0x00 }, // M + { 1183, 0x004E, 11, 12, 12, 1, 13, 0, 0, 0x00 }, // N + { 1216, 0x004F, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // O + { 1258, 0x0050, 9, 12, 12, 1, 11, 0, 0, 0x00 }, // P + { 1285, 0x0051, 14, 14, 12, 0, 14, 0, 0, 0x00 }, // Q + { 1334, 0x0052, 9, 12, 12, 1, 11, 0, 0, 0x00 }, // R + { 1361, 0x0053, 9, 12, 12, 1, 11, 0, 0, 0x00 }, // S + { 1388, 0x0054, 10, 12, 12, 0, 10, 0, 0, 0x00 }, // T + { 1418, 0x0055, 10, 12, 12, 1, 12, 0, 0, 0x00 }, // U + { 1448, 0x0056, 12, 12, 12, 0, 12, 0, 0, 0x00 }, // V + { 1484, 0x0057, 18, 12, 12, 0, 18, 0, 0, 0x00 }, // W + { 1538, 0x0058, 10, 12, 12, 1, 12, 0, 0, 0x00 }, // X + { 1568, 0x0059, 11, 12, 12, 0, 11, 0, 0, 0x00 }, // Y + { 1601, 0x005A, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // Z + { 1625, 0x005B, 5, 20, 17, 2, 9, 0, 0, 0x00 }, // bracketleft + { 1650, 0x005C, 8, 20, 17, 3, 13, 0, 0, 0x00 }, // backslash + { 1690, 0x005D, 4, 20, 17, 2, 9, 0, 0, 0x00 }, // bracketright + { 1710, 0x005E, 10, 10, 13, 1, 12, 0, 0, 0x00 }, // asciicircum + { 1735, 0x005F, 11, 2, 255, 2, 14, 0, 0, 0x60 }, // underscore + { 1741, 0x0060, 4, 3, 14, 0, 5, 0, 0, 0x00 }, // grave + { 1744, 0x0061, 11, 10, 10, 0, 12, 0, 0, 0x00 }, // a + { 1772, 0x0062, 11, 13, 13, 1, 12, 0, 0, 0x00 }, // b + { 1808, 0x0063, 10, 10, 10, 0, 11, 0, 0, 0x00 }, // c + { 1833, 0x0064, 11, 13, 13, 0, 12, 0, 0, 0x00 }, // d + { 1869, 0x0065, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // e + { 1897, 0x0066, 6, 14, 14, 0, 6, 0, 0, 0x00 }, // f + { 1918, 0x0067, 11, 15, 10, 0, 12, 0, 0, 0x00 }, // g + { 1960, 0x0068, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // h + { 1993, 0x0069, 3, 14, 14, 1, 5, 0, 0, 0x00 }, // i + { 2004, 0x006A, 5, 19, 14, -1, 5, 0, 0, 0x00 }, // j + { 2028, 0x006B, 9, 13, 13, 1, 10, 0, 0, 0x00 }, // k + { 2058, 0x006C, 3, 13, 13, 1, 5, 0, 0, 0x00 }, // l + { 2068, 0x006D, 17, 10, 10, 1, 19, 0, 0, 0x00 }, // m + { 2111, 0x006E, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // n + { 2136, 0x006F, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // o + { 2164, 0x0070, 11, 15, 10, 1, 12, 0, 0, 0x00 }, // p + { 2206, 0x0071, 11, 15, 10, 0, 12, 0, 0, 0x00 }, // q + { 2248, 0x0072, 6, 10, 10, 1, 7, 0, 0, 0x00 }, // r + { 2263, 0x0073, 8, 10, 10, 1, 10, 0, 0, 0x00 }, // s + { 2283, 0x0074, 6, 12, 12, 0, 7, 0, 0, 0x00 }, // t + { 2301, 0x0075, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // u + { 2326, 0x0076, 10, 10, 10, 0, 10, 0, 0, 0x00 }, // v + { 2351, 0x0077, 15, 10, 10, 0, 15, 0, 0, 0x00 }, // w + { 2389, 0x0078, 9, 10, 10, 0, 9, 0, 0, 0x00 }, // x + { 2412, 0x0079, 10, 15, 10, 0, 10, 0, 0, 0x00 }, // y + { 2450, 0x007A, 8, 10, 10, 0, 8, 0, 0, 0x00 }, // z + { 2470, 0x007B, 6, 20, 17, 2, 9, 0, 0, 0x00 }, // braceleft + { 2500, 0x007C, 2, 17, 15, 2, 6, 0, 0, 0x00 }, // bar + { 2509, 0x007D, 6, 20, 17, 1, 9, 0, 0, 0x00 }, // braceright + { 2539, 0x007E, 9, 3, 7, 0, 10, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 10, 3, 3, 1, 11, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Medium_18_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Medium_18_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Medium_18_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Medium_18_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Medium_18_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Medium_18_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Medium_18_2bpp(glyphs_Poppins_Medium_18_2bpp, 96, 23, 18, 0, 0, 2, 0, 1, 0, unicodes_Poppins_Medium_18_2bpp, kerning_Poppins_Medium_18_2bpp, 63, 8230, 0, 0); + return Poppins_Medium_18_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_25_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_25_2bpp.cpp new file mode 100644 index 00000000..bb2f2948 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_25_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_25_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 7, 0, 0, 0x00 }, // space + { 0, 0x0021, 4, 17, 17, 2, 8, 0, 0, 0x00 }, // exclam + { 17, 0x0022, 6, 5, 20, 1, 8, 0, 0, 0x00 }, // quotedbl + { 25, 0x0023, 21, 19, 19, 0, 22, 0, 0, 0x00 }, // numbersign + { 125, 0x0024, 13, 22, 20, 1, 16, 0, 0, 0x00 }, // dollar + { 197, 0x0025, 18, 17, 17, 1, 20, 0, 0, 0x00 }, // percent + { 274, 0x0026, 18, 17, 17, 1, 19, 0, 0, 0x00 }, // ampersand + { 351, 0x0027, 3, 5, 20, 1, 4, 0, 0, 0x00 }, // quotesingle + { 355, 0x0028, 9, 28, 23, 3, 12, 0, 0, 0x00 }, // parenleft + { 418, 0x0029, 9, 28, 23, 1, 12, 0, 0, 0x00 }, // parenright + { 481, 0x002A, 9, 10, 19, 2, 13, 0, 0, 0x00 }, // asterisk + { 504, 0x002B, 14, 13, 16, 2, 18, 0, 0, 0x00 }, // plus + { 550, 0x002C, 5, 7, 4, 0, 6, 0, 0, 0x00 }, // comma + { 559, 0x002D, 11, 3, 11, 2, 15, 0, 0, 0x00 }, // hyphen + { 568, 0x002E, 4, 4, 4, 1, 6, 0, 0, 0x00 }, // period + { 572, 0x002F, 10, 28, 24, 1, 13, 0, 0, 0x00 }, // slash + { 642, 0x0030, 14, 19, 19, 1, 16, 0, 0, 0x00 }, // zero + { 709, 0x0031, 6, 19, 19, 1, 9, 0, 0, 0x00 }, // one + { 738, 0x0032, 13, 19, 19, 1, 14, 0, 0, 0x00 }, // two + { 800, 0x0033, 13, 19, 19, 1, 15, 0, 0, 0x00 }, // three + { 862, 0x0034, 15, 18, 18, 1, 16, 0, 0, 0x00 }, // four + { 930, 0x0035, 13, 19, 19, 2, 16, 0, 0, 0x00 }, // five + { 992, 0x0036, 13, 19, 19, 2, 16, 0, 0, 0x00 }, // six + { 1054, 0x0037, 12, 19, 19, 1, 14, 0, 0, 0x00 }, // seven + { 1111, 0x0038, 14, 19, 19, 1, 16, 0, 0, 0x00 }, // eight + { 1178, 0x0039, 13, 19, 19, 2, 16, 0, 0, 0x00 }, // nine + { 1240, 0x003A, 4, 14, 14, 1, 6, 0, 0, 0x00 }, // colon + { 1254, 0x003B, 5, 17, 14, 1, 8, 0, 0, 0x00 }, // semicolon + { 1276, 0x003C, 10, 12, 15, 2, 15, 0, 0, 0x00 }, // less + { 1306, 0x003D, 14, 8, 13, 3, 19, 0, 0, 0x00 }, // equal + { 1334, 0x003E, 9, 12, 15, 3, 15, 0, 0, 0x00 }, // greater + { 1361, 0x003F, 11, 17, 17, 1, 13, 0, 0, 0x00 }, // question + { 1408, 0x0040, 23, 21, 16, 1, 26, 0, 0, 0x00 }, // at + { 1529, 0x0041, 16, 17, 17, 1, 17, 0, 0, 0x00 }, // A + { 1597, 0x0042, 13, 17, 17, 2, 16, 0, 0, 0x00 }, // B + { 1653, 0x0043, 17, 17, 17, 1, 19, 0, 0, 0x00 }, // C + { 1726, 0x0044, 15, 17, 17, 2, 18, 0, 0, 0x00 }, // D + { 1790, 0x0045, 10, 17, 17, 2, 13, 0, 0, 0x00 }, // E + { 1833, 0x0046, 10, 17, 17, 2, 13, 0, 0, 0x00 }, // F + { 1876, 0x0047, 18, 17, 17, 1, 19, 0, 0, 0x00 }, // G + { 1953, 0x0048, 14, 17, 17, 2, 18, 0, 0, 0x00 }, // H + { 2013, 0x0049, 3, 17, 17, 2, 7, 0, 0, 0x00 }, // I + { 2026, 0x004A, 11, 17, 17, 1, 14, 0, 0, 0x00 }, // J + { 2073, 0x004B, 13, 17, 17, 2, 16, 0, 0, 0x00 }, // K + { 2129, 0x004C, 9, 17, 17, 2, 11, 0, 0, 0x00 }, // L + { 2168, 0x004D, 19, 17, 17, 2, 22, 0, 0, 0x00 }, // M + { 2249, 0x004E, 14, 17, 17, 2, 18, 0, 0, 0x00 }, // N + { 2309, 0x004F, 18, 17, 17, 1, 20, 0, 0, 0x00 }, // O + { 2386, 0x0050, 12, 17, 17, 2, 15, 0, 0, 0x00 }, // P + { 2437, 0x0051, 18, 20, 17, 1, 20, 0, 0, 0x00 }, // Q + { 2527, 0x0052, 12, 17, 17, 2, 16, 0, 0, 0x00 }, // R + { 2578, 0x0053, 13, 17, 17, 1, 15, 0, 0, 0x00 }, // S + { 2634, 0x0054, 12, 17, 17, 1, 14, 0, 0, 0x00 }, // T + { 2685, 0x0055, 14, 17, 17, 2, 17, 0, 0, 0x00 }, // U + { 2745, 0x0056, 17, 17, 17, 0, 17, 0, 0, 0x00 }, // V + { 2818, 0x0057, 25, 17, 17, 0, 25, 0, 0, 0x00 }, // W + { 2925, 0x0058, 14, 17, 17, 1, 17, 0, 0, 0x00 }, // X + { 2985, 0x0059, 15, 17, 17, 0, 15, 0, 0, 0x00 }, // Y + { 3049, 0x005A, 12, 17, 17, 1, 14, 0, 0, 0x00 }, // Z + { 3100, 0x005B, 6, 28, 23, 3, 12, 0, 0, 0x00 }, // bracketleft + { 3142, 0x005C, 11, 28, 24, 4, 18, 0, 0, 0x00 }, // backslash + { 3219, 0x005D, 6, 28, 23, 3, 12, 0, 0, 0x00 }, // bracketright + { 3261, 0x005E, 15, 13, 17, 1, 16, 0, 0, 0x00 }, // asciicircum + { 3310, 0x005F, 14, 3, 255, 3, 20, 0, 0, 0x60 }, // underscore + { 3321, 0x0060, 6, 5, 20, 0, 6, 0, 0, 0x00 }, // grave + { 3329, 0x0061, 14, 14, 14, 1, 17, 0, 0, 0x00 }, // a + { 3378, 0x0062, 14, 19, 19, 2, 17, 0, 0, 0x00 }, // b + { 3445, 0x0063, 13, 14, 14, 1, 15, 0, 0, 0x00 }, // c + { 3491, 0x0064, 14, 19, 19, 1, 17, 0, 0, 0x00 }, // d + { 3558, 0x0065, 14, 14, 14, 1, 15, 0, 0, 0x00 }, // e + { 3607, 0x0066, 8, 20, 20, 0, 8, 0, 0, 0x00 }, // f + { 3647, 0x0067, 14, 21, 14, 1, 17, 0, 0, 0x00 }, // g + { 3721, 0x0068, 13, 19, 19, 2, 16, 0, 0, 0x00 }, // h + { 3783, 0x0069, 4, 20, 20, 1, 7, 0, 0, 0x00 }, // i + { 3803, 0x006A, 6, 27, 20, -1, 7, 0, 0, 0x00 }, // j + { 3844, 0x006B, 12, 19, 19, 2, 14, 0, 0, 0x00 }, // k + { 3901, 0x006C, 3, 19, 19, 2, 7, 0, 0, 0x00 }, // l + { 3916, 0x006D, 23, 14, 14, 2, 26, 0, 0, 0x00 }, // m + { 3997, 0x006E, 13, 14, 14, 2, 16, 0, 0, 0x00 }, // n + { 4043, 0x006F, 14, 14, 14, 1, 16, 0, 0, 0x00 }, // o + { 4092, 0x0070, 14, 21, 14, 2, 17, 0, 0, 0x00 }, // p + { 4166, 0x0071, 14, 21, 14, 1, 17, 0, 0, 0x00 }, // q + { 4240, 0x0072, 7, 14, 14, 2, 10, 0, 0, 0x00 }, // r + { 4265, 0x0073, 11, 14, 14, 1, 13, 0, 0, 0x00 }, // s + { 4304, 0x0074, 9, 17, 17, 0, 9, 0, 0, 0x00 }, // t + { 4343, 0x0075, 14, 14, 14, 1, 16, 0, 0, 0x00 }, // u + { 4392, 0x0076, 14, 14, 14, 0, 14, 0, 0, 0x00 }, // v + { 4441, 0x0077, 21, 14, 14, 0, 21, 0, 0, 0x00 }, // w + { 4515, 0x0078, 12, 14, 14, 0, 12, 0, 0, 0x00 }, // x + { 4557, 0x0079, 14, 21, 14, 0, 15, 0, 0, 0x00 }, // y + { 4631, 0x007A, 10, 14, 14, 1, 12, 0, 0, 0x00 }, // z + { 4666, 0x007B, 8, 28, 23, 3, 13, 0, 0, 0x00 }, // braceleft + { 4722, 0x007C, 4, 23, 20, 2, 8, 0, 0, 0x00 }, // bar + { 4745, 0x007D, 8, 28, 23, 2, 13, 0, 0, 0x00 }, // braceright + { 4801, 0x007E, 12, 4, 10, 1, 14, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 14, 4, 4, 1, 16, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Medium_25_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_25_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_25_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_25_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Medium_25_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Medium_25_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Medium_25_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_25_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Medium_25_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Medium_25_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Medium_25_2bpp(glyphs_Poppins_Medium_25_2bpp, 96, 32, 25, 0, 0, 2, 0, 1, 0, unicodes_Poppins_Medium_25_2bpp, kerning_Poppins_Medium_25_2bpp, 63, 8230, 0, 0); + return Poppins_Medium_25_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_50_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_50_2bpp.cpp new file mode 100644 index 00000000..83f2d135 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Medium_50_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_50_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 13, 0, 0, 0x00 }, // space + { 0, 0x0021, 8, 35, 35, 4, 16, 0, 0, 0x00 }, // exclam + { 70, 0x0022, 14, 11, 41, 1, 16, 0, 0, 0x00 }, // quotedbl + { 109, 0x0023, 40, 37, 37, 1, 44, 0, 0, 0x00 }, // numbersign + { 479, 0x0024, 25, 44, 40, 3, 33, 0, 0, 0x00 }, // dollar + { 754, 0x0025, 36, 35, 35, 2, 40, 0, 0, 0x00 }, // percent + { 1069, 0x0026, 37, 35, 35, 1, 38, 0, 0, 0x00 }, // ampersand + { 1393, 0x0027, 6, 11, 41, 1, 9, 0, 0, 0x00 }, // quotesingle + { 1410, 0x0028, 18, 56, 47, 6, 25, 0, 0, 0x00 }, // parenleft + { 1662, 0x0029, 18, 56, 47, 1, 25, 0, 0, 0x00 }, // parenright + { 1914, 0x002A, 19, 19, 37, 3, 25, 0, 0, 0x00 }, // asterisk + { 2005, 0x002B, 26, 26, 31, 5, 36, 0, 0, 0x00 }, // plus + { 2174, 0x002C, 10, 14, 7, 0, 11, 0, 0, 0x00 }, // comma + { 2209, 0x002D, 21, 5, 21, 4, 29, 0, 0, 0x00 }, // hyphen + { 2236, 0x002E, 8, 8, 8, 2, 12, 0, 0, 0x00 }, // period + { 2252, 0x002F, 19, 56, 47, 3, 26, 0, 0, 0x00 }, // slash + { 2518, 0x0030, 26, 37, 37, 3, 32, 0, 0, 0x00 }, // zero + { 2759, 0x0031, 11, 37, 37, 2, 18, 0, 0, 0x00 }, // one + { 2861, 0x0032, 25, 37, 38, 2, 29, 0, 0, 0x00 }, // two + { 3093, 0x0033, 25, 38, 38, 2, 30, 0, 0, 0x00 }, // three + { 3331, 0x0034, 29, 36, 36, 2, 32, 0, 0, 0x00 }, // four + { 3592, 0x0035, 26, 37, 37, 3, 32, 0, 0, 0x00 }, // five + { 3833, 0x0036, 26, 37, 37, 3, 32, 0, 0, 0x00 }, // six + { 4074, 0x0037, 24, 36, 36, 2, 28, 0, 0, 0x00 }, // seven + { 4290, 0x0038, 26, 38, 38, 3, 32, 0, 0, 0x00 }, // eight + { 4537, 0x0039, 25, 37, 37, 4, 32, 0, 0, 0x00 }, // nine + { 4769, 0x003A, 8, 28, 28, 2, 12, 0, 0, 0x00 }, // colon + { 4825, 0x003B, 10, 35, 28, 1, 15, 0, 0, 0x00 }, // semicolon + { 4913, 0x003C, 19, 23, 30, 5, 31, 0, 0, 0x00 }, // less + { 5023, 0x003D, 27, 16, 26, 6, 39, 0, 0, 0x00 }, // equal + { 5131, 0x003E, 18, 23, 30, 6, 30, 0, 0, 0x00 }, // greater + { 5235, 0x003F, 23, 35, 35, 2, 27, 0, 0, 0x00 }, // question + { 5437, 0x0040, 45, 43, 33, 3, 51, 0, 0, 0x00 }, // at + { 5921, 0x0041, 31, 35, 35, 2, 35, 0, 0, 0x00 }, // A + { 6193, 0x0042, 26, 35, 35, 3, 32, 0, 0, 0x00 }, // B + { 6421, 0x0043, 34, 35, 35, 2, 39, 0, 0, 0x00 }, // C + { 6719, 0x0044, 31, 35, 35, 3, 35, 0, 0, 0x00 }, // D + { 6991, 0x0045, 20, 35, 35, 3, 26, 0, 0, 0x00 }, // E + { 7166, 0x0046, 22, 35, 35, 3, 26, 0, 0, 0x00 }, // F + { 7359, 0x0047, 35, 35, 35, 2, 39, 0, 0, 0x00 }, // G + { 7666, 0x0048, 29, 35, 35, 3, 35, 0, 0, 0x00 }, // H + { 7920, 0x0049, 7, 35, 35, 3, 13, 0, 0, 0x00 }, // I + { 7982, 0x004A, 21, 35, 35, 2, 28, 0, 0, 0x00 }, // J + { 8166, 0x004B, 27, 35, 35, 3, 32, 0, 0, 0x00 }, // K + { 8403, 0x004C, 19, 35, 35, 3, 22, 0, 0, 0x00 }, // L + { 8570, 0x004D, 38, 35, 35, 3, 44, 0, 0, 0x00 }, // M + { 8903, 0x004E, 30, 35, 35, 3, 36, 0, 0, 0x00 }, // N + { 9166, 0x004F, 36, 35, 35, 2, 39, 0, 0, 0x00 }, // O + { 9481, 0x0050, 25, 35, 35, 3, 30, 0, 0, 0x00 }, // P + { 9700, 0x0051, 36, 41, 35, 2, 39, 0, 0, 0x00 }, // Q + { 10069, 0x0052, 26, 35, 35, 3, 32, 0, 0, 0x00 }, // R + { 10297, 0x0053, 25, 35, 35, 3, 30, 0, 0, 0x00 }, // S + { 10516, 0x0054, 25, 35, 35, 2, 28, 0, 0, 0x00 }, // T + { 10735, 0x0055, 28, 35, 35, 3, 35, 0, 0, 0x00 }, // U + { 10980, 0x0056, 33, 35, 35, 1, 35, 0, 0, 0x00 }, // V + { 11269, 0x0057, 48, 35, 35, 1, 50, 0, 0, 0x00 }, // W + { 11689, 0x0058, 29, 35, 35, 2, 33, 0, 0, 0x00 }, // X + { 11943, 0x0059, 29, 35, 35, 1, 30, 0, 0, 0x00 }, // Y + { 12197, 0x005A, 24, 35, 35, 2, 28, 0, 0, 0x00 }, // Z + { 12407, 0x005B, 11, 56, 47, 7, 24, 0, 0, 0x00 }, // bracketleft + { 12561, 0x005C, 21, 56, 47, 8, 36, 0, 0, 0x00 }, // backslash + { 12855, 0x005D, 11, 56, 47, 6, 24, 0, 0, 0x00 }, // bracketright + { 13009, 0x005E, 29, 27, 35, 2, 33, 0, 0, 0x00 }, // asciicircum + { 13205, 0x005F, 29, 6, 255, 6, 40, 0, 0, 0x60 }, // underscore + { 13249, 0x0060, 12, 11, 40, 0, 13, 0, 0, 0x00 }, // grave + { 13282, 0x0061, 28, 28, 28, 2, 34, 0, 0, 0x00 }, // a + { 13478, 0x0062, 29, 37, 37, 3, 34, 0, 0, 0x00 }, // b + { 13747, 0x0063, 26, 28, 28, 2, 30, 0, 0, 0x00 }, // c + { 13929, 0x0064, 28, 37, 37, 2, 34, 0, 0, 0x00 }, // d + { 14188, 0x0065, 27, 28, 28, 2, 31, 0, 0, 0x00 }, // e + { 14377, 0x0066, 15, 39, 39, 1, 17, 0, 0, 0x00 }, // f + { 14524, 0x0067, 28, 41, 28, 2, 34, 0, 0, 0x00 }, // g + { 14811, 0x0068, 26, 37, 37, 3, 32, 0, 0, 0x00 }, // h + { 15052, 0x0069, 8, 39, 39, 3, 13, 0, 0, 0x00 }, // i + { 15130, 0x006A, 13, 52, 39, -2, 13, 0, 0, 0x00 }, // j + { 15299, 0x006B, 24, 37, 37, 3, 28, 0, 0, 0x00 }, // k + { 15521, 0x006C, 7, 37, 37, 3, 13, 0, 0, 0x00 }, // l + { 15586, 0x006D, 46, 28, 28, 3, 52, 0, 0, 0x00 }, // m + { 15908, 0x006E, 26, 28, 28, 3, 32, 0, 0, 0x00 }, // n + { 16090, 0x006F, 28, 28, 28, 2, 32, 0, 0, 0x00 }, // o + { 16286, 0x0070, 29, 41, 28, 3, 34, 0, 0, 0x00 }, // p + { 16584, 0x0071, 28, 41, 28, 2, 34, 0, 0, 0x00 }, // q + { 16871, 0x0072, 15, 28, 28, 3, 19, 0, 0, 0x00 }, // r + { 16976, 0x0073, 23, 28, 28, 2, 27, 0, 0, 0x00 }, // s + { 17137, 0x0074, 16, 35, 35, 1, 19, 0, 0, 0x00 }, // t + { 17277, 0x0075, 26, 28, 28, 3, 32, 0, 0, 0x00 }, // u + { 17459, 0x0076, 28, 28, 28, 0, 29, 0, 0, 0x00 }, // v + { 17655, 0x0077, 41, 28, 28, 0, 41, 0, 0, 0x00 }, // w + { 17942, 0x0078, 24, 28, 28, 0, 25, 0, 0, 0x00 }, // x + { 18110, 0x0079, 29, 41, 28, 0, 29, 0, 0, 0x00 }, // y + { 18408, 0x007A, 20, 28, 28, 2, 24, 0, 0, 0x00 }, // z + { 18548, 0x007B, 16, 56, 47, 6, 26, 0, 0, 0x00 }, // braceleft + { 18772, 0x007C, 6, 46, 40, 5, 16, 0, 0, 0x00 }, // bar + { 18841, 0x007D, 16, 56, 47, 4, 26, 0, 0, 0x00 }, // braceright + { 19065, 0x007E, 24, 8, 20, 2, 28, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 28, 8, 8, 2, 32, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Medium_50_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Medium_50_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_50_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Medium_50_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Medium_50_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Medium_50_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Medium_50_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Medium_50_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Medium_50_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Medium_50_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Medium_50_2bpp(glyphs_Poppins_Medium_50_2bpp, 96, 63, 50, 0, 0, 2, 0, 2, 0, unicodes_Poppins_Medium_50_2bpp, kerning_Poppins_Medium_50_2bpp, 63, 8230, 0, 0); + return Poppins_Medium_50_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_14_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_14_2bpp.cpp new file mode 100644 index 00000000..0e4f2446 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_14_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Regular_14_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 4, 0, 0, 0x00 }, // space + { 0, 0x0021, 2, 10, 10, 1, 4, 0, 0, 0x00 }, // exclam + { 5, 0x0022, 4, 3, 12, 0, 4, 0, 0, 0x00 }, // quotedbl + { 8, 0x0023, 11, 11, 11, 0, 12, 0, 0, 0x00 }, // numbersign + { 39, 0x0024, 7, 13, 12, 1, 9, 0, 0, 0x00 }, // dollar + { 62, 0x0025, 10, 10, 10, 0, 11, 0, 0, 0x00 }, // percent + { 87, 0x0026, 10, 10, 10, 0, 10, 0, 0, 0x00 }, // ampersand + { 112, 0x0027, 2, 3, 12, 0, 2, 0, 0, 0x00 }, // quotesingle + { 114, 0x0028, 5, 16, 13, 1, 6, 0, 0, 0x00 }, // parenleft + { 134, 0x0029, 5, 16, 13, 0, 6, 0, 0, 0x00 }, // parenright + { 154, 0x002A, 5, 6, 11, 1, 7, 0, 0, 0x00 }, // asterisk + { 162, 0x002B, 8, 8, 10, 1, 10, 0, 0, 0x00 }, // plus + { 178, 0x002C, 3, 4, 2, 0, 3, 0, 0, 0x00 }, // comma + { 181, 0x002D, 7, 1, 6, 0, 8, 0, 0, 0x00 }, // hyphen + { 183, 0x002E, 2, 2, 2, 0, 3, 0, 0, 0x00 }, // period + { 184, 0x002F, 5, 16, 14, 1, 7, 0, 0, 0x00 }, // slash + { 204, 0x0030, 7, 11, 11, 1, 9, 0, 0, 0x00 }, // zero + { 224, 0x0031, 3, 11, 11, 0, 4, 0, 0, 0x00 }, // one + { 233, 0x0032, 8, 11, 11, 0, 8, 0, 0, 0x00 }, // two + { 255, 0x0033, 8, 11, 11, 0, 8, 0, 0, 0x00 }, // three + { 277, 0x0034, 9, 10, 10, 0, 9, 0, 0, 0x00 }, // four + { 300, 0x0035, 7, 11, 11, 1, 9, 0, 0, 0x00 }, // five + { 320, 0x0036, 7, 11, 11, 1, 9, 0, 0, 0x00 }, // six + { 340, 0x0037, 7, 11, 11, 0, 8, 0, 0, 0x00 }, // seven + { 360, 0x0038, 7, 11, 11, 1, 9, 0, 0, 0x00 }, // eight + { 380, 0x0039, 7, 11, 11, 1, 9, 0, 0, 0x00 }, // nine + { 400, 0x003A, 2, 8, 8, 0, 3, 0, 0, 0x00 }, // colon + { 404, 0x003B, 3, 10, 8, 0, 4, 0, 0, 0x00 }, // semicolon + { 412, 0x003C, 5, 7, 9, 1, 8, 0, 0, 0x00 }, // less + { 421, 0x003D, 8, 4, 7, 1, 10, 0, 0, 0x00 }, // equal + { 429, 0x003E, 5, 7, 9, 1, 8, 0, 0, 0x00 }, // greater + { 438, 0x003F, 7, 10, 10, 0, 7, 0, 0, 0x00 }, // question + { 456, 0x0040, 12, 12, 9, 1, 14, 0, 0, 0x00 }, // at + { 492, 0x0041, 9, 10, 10, 0, 9, 0, 0, 0x00 }, // A + { 515, 0x0042, 7, 10, 10, 1, 9, 0, 0, 0x00 }, // B + { 533, 0x0043, 10, 10, 10, 0, 11, 0, 0, 0x00 }, // C + { 558, 0x0044, 9, 10, 10, 1, 10, 0, 0, 0x00 }, // D + { 581, 0x0045, 6, 10, 10, 1, 7, 0, 0, 0x00 }, // E + { 596, 0x0046, 6, 10, 10, 1, 7, 0, 0, 0x00 }, // F + { 611, 0x0047, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // G + { 639, 0x0048, 8, 10, 10, 1, 10, 0, 0, 0x00 }, // H + { 659, 0x0049, 2, 10, 10, 1, 3, 0, 0, 0x00 }, // I + { 664, 0x004A, 6, 10, 10, 0, 7, 0, 0, 0x00 }, // J + { 679, 0x004B, 7, 10, 10, 1, 8, 0, 0, 0x00 }, // K + { 697, 0x004C, 5, 10, 10, 1, 6, 0, 0, 0x00 }, // L + { 710, 0x004D, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // M + { 735, 0x004E, 8, 10, 10, 1, 10, 0, 0, 0x00 }, // N + { 755, 0x004F, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // O + { 783, 0x0050, 7, 10, 10, 1, 8, 0, 0, 0x00 }, // P + { 801, 0x0051, 11, 12, 10, 0, 11, 0, 0, 0x00 }, // Q + { 834, 0x0052, 7, 10, 10, 1, 9, 0, 0, 0x00 }, // R + { 852, 0x0053, 7, 10, 10, 1, 8, 0, 0, 0x00 }, // S + { 870, 0x0054, 7, 10, 10, 0, 8, 0, 0, 0x00 }, // T + { 888, 0x0055, 8, 10, 10, 1, 9, 0, 0, 0x00 }, // U + { 908, 0x0056, 9, 10, 10, 0, 9, 0, 0, 0x00 }, // V + { 931, 0x0057, 14, 10, 10, 0, 14, 0, 0, 0x00 }, // W + { 966, 0x0058, 7, 10, 10, 1, 9, 0, 0, 0x00 }, // X + { 984, 0x0059, 8, 10, 10, 0, 8, 0, 0, 0x00 }, // Y + { 1004, 0x005A, 7, 10, 10, 0, 8, 0, 0, 0x00 }, // Z + { 1022, 0x005B, 3, 16, 13, 2, 6, 0, 0, 0x00 }, // bracketleft + { 1034, 0x005C, 6, 16, 14, 2, 9, 0, 0, 0x00 }, // backslash + { 1058, 0x005D, 3, 16, 13, 1, 6, 0, 0, 0x00 }, // bracketright + { 1070, 0x005E, 8, 8, 10, 0, 9, 0, 0, 0x00 }, // asciicircum + { 1086, 0x005F, 8, 2, 255, 1, 10, 0, 0, 0x60 }, // underscore + { 1090, 0x0060, 3, 2, 11, 0, 4, 0, 0, 0x00 }, // grave + { 1092, 0x0061, 9, 8, 8, 0, 9, 0, 0, 0x00 }, // a + { 1110, 0x0062, 8, 11, 11, 1, 9, 0, 0, 0x00 }, // b + { 1132, 0x0063, 8, 8, 8, 0, 9, 0, 0, 0x00 }, // c + { 1148, 0x0064, 9, 11, 11, 0, 9, 0, 0, 0x00 }, // d + { 1173, 0x0065, 8, 8, 8, 0, 9, 0, 0, 0x00 }, // e + { 1189, 0x0066, 5, 11, 11, 0, 5, 0, 0, 0x00 }, // f + { 1203, 0x0067, 9, 12, 8, 0, 9, 0, 0, 0x00 }, // g + { 1230, 0x0068, 7, 11, 11, 1, 9, 0, 0, 0x00 }, // h + { 1250, 0x0069, 2, 11, 11, 1, 3, 0, 0, 0x00 }, // i + { 1256, 0x006A, 4, 15, 11, -1, 3, 0, 0, 0x00 }, // j + { 1271, 0x006B, 6, 11, 11, 1, 7, 0, 0, 0x00 }, // k + { 1288, 0x006C, 2, 11, 11, 1, 3, 0, 0, 0x00 }, // l + { 1294, 0x006D, 13, 8, 8, 1, 14, 0, 0, 0x00 }, // m + { 1320, 0x006E, 7, 8, 8, 1, 9, 0, 0, 0x00 }, // n + { 1334, 0x006F, 9, 8, 8, 0, 9, 0, 0, 0x00 }, // o + { 1352, 0x0070, 8, 12, 8, 1, 9, 0, 0, 0x00 }, // p + { 1376, 0x0071, 9, 12, 8, 0, 9, 0, 0, 0x00 }, // q + { 1403, 0x0072, 4, 8, 8, 1, 5, 0, 0, 0x00 }, // r + { 1411, 0x0073, 6, 8, 8, 1, 7, 0, 0, 0x00 }, // s + { 1423, 0x0074, 5, 10, 10, 0, 5, 0, 0, 0x00 }, // t + { 1436, 0x0075, 7, 8, 8, 1, 9, 0, 0, 0x00 }, // u + { 1450, 0x0076, 8, 8, 8, 0, 8, 0, 0, 0x00 }, // v + { 1466, 0x0077, 11, 8, 8, 0, 11, 0, 0, 0x00 }, // w + { 1488, 0x0078, 7, 8, 8, 0, 7, 0, 0, 0x00 }, // x + { 1502, 0x0079, 8, 12, 8, 0, 8, 0, 0, 0x00 }, // y + { 1526, 0x007A, 6, 8, 8, 0, 6, 0, 0, 0x00 }, // z + { 1538, 0x007B, 5, 16, 13, 1, 6, 0, 0, 0x00 }, // braceleft + { 1558, 0x007C, 2, 13, 11, 1, 4, 0, 0, 0x00 }, // bar + { 1565, 0x007D, 4, 16, 13, 1, 6, 0, 0, 0x00 }, // braceright + { 1581, 0x007E, 7, 2, 6, 0, 7, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 8, 2, 2, 0, 8, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Regular_14_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Regular_14_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_14_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_14_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Regular_14_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Regular_14_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Regular_14_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Regular_14_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Regular_14_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Regular_14_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Regular_14_2bpp(glyphs_Poppins_Regular_14_2bpp, 96, 18, 14, 0, 0, 2, 0, 1, 0, unicodes_Poppins_Regular_14_2bpp, kerning_Poppins_Regular_14_2bpp, 63, 8230, 0, 0); + return Poppins_Regular_14_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_16_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_16_2bpp.cpp new file mode 100644 index 00000000..e7788b4a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_16_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Regular_16_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 4, 0, 0, 0x00 }, // space + { 0, 0x0021, 3, 11, 11, 1, 5, 0, 0, 0x00 }, // exclam + { 9, 0x0022, 4, 4, 14, 0, 5, 0, 0, 0x00 }, // quotedbl + { 13, 0x0023, 13, 12, 12, 0, 13, 0, 0, 0x00 }, // numbersign + { 52, 0x0024, 8, 15, 13, 1, 10, 0, 0, 0x00 }, // dollar + { 82, 0x0025, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // percent + { 115, 0x0026, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // ampersand + { 148, 0x0027, 2, 4, 14, 0, 3, 0, 0, 0x00 }, // quotesingle + { 150, 0x0028, 6, 18, 15, 1, 7, 0, 0, 0x00 }, // parenleft + { 177, 0x0029, 6, 18, 15, 0, 7, 0, 0, 0x00 }, // parenright + { 204, 0x002A, 6, 6, 12, 1, 8, 0, 0, 0x00 }, // asterisk + { 213, 0x002B, 9, 9, 11, 1, 11, 0, 0, 0x00 }, // plus + { 234, 0x002C, 3, 5, 3, 0, 3, 0, 0, 0x00 }, // comma + { 238, 0x002D, 7, 2, 7, 1, 9, 0, 0, 0x00 }, // hyphen + { 242, 0x002E, 2, 2, 2, 1, 3, 0, 0, 0x00 }, // period + { 243, 0x002F, 6, 18, 15, 1, 8, 0, 0, 0x00 }, // slash + { 270, 0x0030, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // zero + { 294, 0x0031, 4, 12, 12, 0, 5, 0, 0, 0x00 }, // one + { 306, 0x0032, 9, 12, 12, 0, 9, 0, 0, 0x00 }, // two + { 333, 0x0033, 8, 12, 12, 1, 9, 0, 0, 0x00 }, // three + { 357, 0x0034, 10, 11, 11, 0, 10, 0, 0, 0x00 }, // four + { 385, 0x0035, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // five + { 409, 0x0036, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // six + { 433, 0x0037, 8, 12, 12, 0, 9, 0, 0, 0x00 }, // seven + { 457, 0x0038, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // eight + { 481, 0x0039, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // nine + { 505, 0x003A, 2, 9, 9, 1, 3, 0, 0, 0x00 }, // colon + { 510, 0x003B, 3, 11, 9, 0, 4, 0, 0, 0x00 }, // semicolon + { 519, 0x003C, 6, 8, 10, 1, 9, 0, 0, 0x00 }, // less + { 531, 0x003D, 9, 5, 8, 1, 12, 0, 0, 0x00 }, // equal + { 543, 0x003E, 5, 8, 10, 2, 9, 0, 0, 0x00 }, // greater + { 553, 0x003F, 8, 11, 11, 0, 8, 0, 0, 0x00 }, // question + { 575, 0x0040, 14, 14, 11, 1, 16, 0, 0, 0x00 }, // at + { 624, 0x0041, 10, 11, 11, 0, 11, 0, 0, 0x00 }, // A + { 652, 0x0042, 8, 11, 11, 1, 10, 0, 0, 0x00 }, // B + { 674, 0x0043, 11, 11, 11, 0, 12, 0, 0, 0x00 }, // C + { 705, 0x0044, 10, 11, 11, 1, 11, 0, 0, 0x00 }, // D + { 733, 0x0045, 7, 11, 11, 1, 8, 0, 0, 0x00 }, // E + { 753, 0x0046, 7, 11, 11, 1, 8, 0, 0, 0x00 }, // F + { 773, 0x0047, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // G + { 806, 0x0048, 9, 11, 11, 1, 11, 0, 0, 0x00 }, // H + { 831, 0x0049, 2, 11, 11, 1, 4, 0, 0, 0x00 }, // I + { 837, 0x004A, 7, 11, 11, 0, 8, 0, 0, 0x00 }, // J + { 857, 0x004B, 8, 11, 11, 1, 10, 0, 0, 0x00 }, // K + { 879, 0x004C, 6, 11, 11, 1, 7, 0, 0, 0x00 }, // L + { 896, 0x004D, 12, 11, 11, 1, 14, 0, 0, 0x00 }, // M + { 929, 0x004E, 9, 11, 11, 1, 11, 0, 0, 0x00 }, // N + { 954, 0x004F, 12, 11, 11, 0, 13, 0, 0, 0x00 }, // O + { 987, 0x0050, 8, 11, 11, 1, 9, 0, 0, 0x00 }, // P + { 1009, 0x0051, 12, 13, 11, 0, 13, 0, 0, 0x00 }, // Q + { 1048, 0x0052, 8, 11, 11, 1, 10, 0, 0, 0x00 }, // R + { 1070, 0x0053, 8, 11, 11, 1, 9, 0, 0, 0x00 }, // S + { 1092, 0x0054, 8, 11, 11, 0, 9, 0, 0, 0x00 }, // T + { 1114, 0x0055, 9, 11, 11, 1, 11, 0, 0, 0x00 }, // U + { 1139, 0x0056, 11, 11, 11, 0, 11, 0, 0, 0x00 }, // V + { 1170, 0x0057, 15, 11, 11, 0, 16, 0, 0, 0x00 }, // W + { 1212, 0x0058, 8, 11, 11, 1, 10, 0, 0, 0x00 }, // X + { 1234, 0x0059, 9, 11, 11, 0, 9, 0, 0, 0x00 }, // Y + { 1259, 0x005A, 8, 11, 11, 0, 9, 0, 0, 0x00 }, // Z + { 1281, 0x005B, 3, 19, 15, 2, 7, 0, 0, 0x00 }, // bracketleft + { 1296, 0x005C, 7, 18, 15, 2, 11, 0, 0, 0x00 }, // backslash + { 1328, 0x005D, 4, 19, 15, 1, 7, 0, 0, 0x00 }, // bracketright + { 1347, 0x005E, 10, 9, 12, 0, 10, 0, 0, 0x00 }, // asciicircum + { 1370, 0x005F, 10, 2, 255, 1, 12, 0, 0, 0x60 }, // underscore + { 1375, 0x0060, 4, 4, 13, 0, 4, 0, 0, 0x00 }, // grave + { 1379, 0x0061, 10, 9, 9, 0, 11, 0, 0, 0x00 }, // a + { 1402, 0x0062, 9, 12, 12, 1, 11, 0, 0, 0x00 }, // b + { 1429, 0x0063, 9, 9, 9, 0, 10, 0, 0, 0x00 }, // c + { 1450, 0x0064, 10, 12, 12, 0, 11, 0, 0, 0x00 }, // d + { 1480, 0x0065, 10, 9, 9, 0, 10, 0, 0, 0x00 }, // e + { 1503, 0x0066, 5, 12, 12, 0, 5, 0, 0, 0x00 }, // f + { 1518, 0x0067, 10, 13, 9, 0, 11, 0, 0, 0x00 }, // g + { 1551, 0x0068, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // h + { 1575, 0x0069, 2, 12, 12, 1, 4, 0, 0, 0x00 }, // i + { 1581, 0x006A, 4, 16, 12, -1, 4, 0, 0, 0x00 }, // j + { 1597, 0x006B, 7, 12, 12, 1, 8, 0, 0, 0x00 }, // k + { 1618, 0x006C, 2, 12, 12, 1, 4, 0, 0, 0x00 }, // l + { 1624, 0x006D, 15, 9, 9, 1, 16, 0, 0, 0x00 }, // m + { 1658, 0x006E, 8, 9, 9, 1, 10, 0, 0, 0x00 }, // n + { 1676, 0x006F, 10, 9, 9, 0, 10, 0, 0, 0x00 }, // o + { 1699, 0x0070, 9, 13, 9, 1, 11, 0, 0, 0x00 }, // p + { 1729, 0x0071, 10, 13, 9, 0, 11, 0, 0, 0x00 }, // q + { 1762, 0x0072, 5, 9, 9, 1, 6, 0, 0, 0x00 }, // r + { 1774, 0x0073, 7, 9, 9, 1, 8, 0, 0, 0x00 }, // s + { 1790, 0x0074, 6, 11, 11, 0, 6, 0, 0, 0x00 }, // t + { 1807, 0x0075, 8, 9, 9, 1, 10, 0, 0, 0x00 }, // u + { 1825, 0x0076, 9, 9, 9, 0, 9, 0, 0, 0x00 }, // v + { 1846, 0x0077, 13, 9, 9, 0, 13, 0, 0, 0x00 }, // w + { 1876, 0x0078, 7, 9, 9, 0, 8, 0, 0, 0x00 }, // x + { 1892, 0x0079, 9, 13, 9, 0, 9, 0, 0, 0x00 }, // y + { 1922, 0x007A, 7, 9, 9, 0, 7, 0, 0, 0x00 }, // z + { 1938, 0x007B, 6, 19, 15, 1, 7, 0, 0, 0x00 }, // braceleft + { 1967, 0x007C, 2, 15, 13, 1, 5, 0, 0, 0x00 }, // bar + { 1975, 0x007D, 5, 19, 15, 1, 7, 0, 0, 0x00 }, // braceright + { 1999, 0x007E, 8, 3, 6, 0, 8, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 8, 2, 2, 1, 9, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Regular_16_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Regular_16_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_16_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_16_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Regular_16_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Regular_16_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Regular_16_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Regular_16_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Regular_16_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Regular_16_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Regular_16_2bpp(glyphs_Poppins_Regular_16_2bpp, 96, 20, 16, 0, 0, 2, 0, 1, 0, unicodes_Poppins_Regular_16_2bpp, kerning_Poppins_Regular_16_2bpp, 63, 8230, 0, 0); + return Poppins_Regular_16_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_18_2bpp.cpp new file mode 100644 index 00000000..9dcc8e16 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_Regular_18_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Regular_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 5, 0, 0, 0x00 }, // space + { 0, 0x0021, 3, 13, 13, 1, 5, 0, 0, 0x00 }, // exclam + { 10, 0x0022, 5, 4, 15, 0, 5, 0, 0, 0x00 }, // quotedbl + { 15, 0x0023, 14, 13, 13, 0, 15, 0, 0, 0x00 }, // numbersign + { 61, 0x0024, 9, 16, 14, 1, 11, 0, 0, 0x00 }, // dollar + { 97, 0x0025, 13, 13, 13, 0, 14, 0, 0, 0x00 }, // percent + { 140, 0x0026, 13, 13, 13, 0, 13, 0, 0, 0x00 }, // ampersand + { 183, 0x0027, 2, 4, 15, 0, 3, 0, 0, 0x00 }, // quotesingle + { 185, 0x0028, 6, 20, 17, 2, 8, 0, 0, 0x00 }, // parenleft + { 215, 0x0029, 6, 20, 17, 1, 8, 0, 0, 0x00 }, // parenright + { 245, 0x002A, 7, 7, 13, 1, 9, 0, 0, 0x00 }, // asterisk + { 258, 0x002B, 10, 9, 11, 1, 12, 0, 0, 0x00 }, // plus + { 281, 0x002C, 3, 5, 2, 0, 4, 0, 0, 0x00 }, // comma + { 285, 0x002D, 8, 2, 7, 1, 10, 0, 0, 0x00 }, // hyphen + { 289, 0x002E, 2, 2, 2, 1, 4, 0, 0, 0x00 }, // period + { 290, 0x002F, 7, 20, 17, 1, 9, 0, 0, 0x00 }, // slash + { 325, 0x0030, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // zero + { 355, 0x0031, 4, 13, 13, 0, 6, 0, 0, 0x00 }, // one + { 368, 0x0032, 9, 13, 13, 1, 10, 0, 0, 0x00 }, // two + { 398, 0x0033, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // three + { 428, 0x0034, 11, 13, 13, 0, 11, 0, 0, 0x00 }, // four + { 464, 0x0035, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // five + { 497, 0x0036, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // six + { 530, 0x0037, 9, 13, 13, 0, 10, 0, 0, 0x00 }, // seven + { 560, 0x0038, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // eight + { 593, 0x0039, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // nine + { 623, 0x003A, 2, 10, 10, 1, 4, 0, 0, 0x00 }, // colon + { 628, 0x003B, 4, 12, 10, 0, 5, 0, 0, 0x00 }, // semicolon + { 640, 0x003C, 6, 9, 11, 2, 10, 0, 0, 0x00 }, // less + { 654, 0x003D, 11, 6, 9, 1, 13, 0, 0, 0x00 }, // equal + { 671, 0x003E, 6, 9, 11, 2, 10, 0, 0, 0x00 }, // greater + { 685, 0x003F, 8, 13, 13, 1, 9, 0, 0, 0x00 }, // question + { 711, 0x0040, 16, 15, 12, 1, 18, 0, 0, 0x00 }, // at + { 771, 0x0041, 12, 13, 13, 0, 12, 0, 0, 0x00 }, // A + { 810, 0x0042, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // B + { 840, 0x0043, 13, 13, 13, 0, 14, 0, 0, 0x00 }, // C + { 883, 0x0044, 11, 13, 13, 1, 13, 0, 0, 0x00 }, // D + { 919, 0x0045, 7, 13, 13, 1, 9, 0, 0, 0x00 }, // E + { 942, 0x0046, 8, 13, 13, 1, 9, 0, 0, 0x00 }, // F + { 968, 0x0047, 14, 13, 13, 0, 14, 0, 0, 0x00 }, // G + { 1014, 0x0048, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // H + { 1047, 0x0049, 2, 13, 13, 1, 4, 0, 0, 0x00 }, // I + { 1054, 0x004A, 7, 13, 13, 1, 10, 0, 0, 0x00 }, // J + { 1077, 0x004B, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // K + { 1107, 0x004C, 7, 13, 13, 1, 8, 0, 0, 0x00 }, // L + { 1130, 0x004D, 13, 13, 13, 1, 16, 0, 0, 0x00 }, // M + { 1173, 0x004E, 11, 13, 13, 1, 13, 0, 0, 0x00 }, // N + { 1209, 0x004F, 14, 13, 13, 0, 14, 0, 0, 0x00 }, // O + { 1255, 0x0050, 9, 13, 13, 1, 10, 0, 0, 0x00 }, // P + { 1285, 0x0051, 14, 15, 13, 0, 14, 0, 0, 0x00 }, // Q + { 1338, 0x0052, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // R + { 1368, 0x0053, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // S + { 1398, 0x0054, 9, 13, 13, 0, 10, 0, 0, 0x00 }, // T + { 1428, 0x0055, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // U + { 1461, 0x0056, 12, 13, 13, 0, 12, 0, 0, 0x00 }, // V + { 1500, 0x0057, 17, 13, 13, 0, 18, 0, 0, 0x00 }, // W + { 1556, 0x0058, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // X + { 1586, 0x0059, 10, 13, 13, 0, 11, 0, 0, 0x00 }, // Y + { 1619, 0x005A, 9, 13, 13, 0, 10, 0, 0, 0x00 }, // Z + { 1649, 0x005B, 4, 21, 17, 2, 8, 0, 0, 0x00 }, // bracketleft + { 1670, 0x005C, 8, 20, 17, 2, 12, 0, 0, 0x00 }, // backslash + { 1710, 0x005D, 4, 21, 17, 2, 8, 0, 0, 0x00 }, // bracketright + { 1731, 0x005E, 10, 10, 13, 1, 11, 0, 0, 0x00 }, // asciicircum + { 1756, 0x005F, 10, 2, 0, 2, 13, 0, 0, 0x00 }, // underscore + { 1761, 0x0060, 4, 3, 14, 0, 5, 0, 0, 0x00 }, // grave + { 1764, 0x0061, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // a + { 1789, 0x0062, 11, 13, 13, 1, 12, 0, 0, 0x00 }, // b + { 1825, 0x0063, 9, 10, 10, 1, 11, 0, 0, 0x00 }, // c + { 1848, 0x0064, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // d + { 1881, 0x0065, 10, 10, 10, 1, 11, 0, 0, 0x00 }, // e + { 1906, 0x0066, 6, 13, 13, 0, 6, 0, 0, 0x00 }, // f + { 1926, 0x0067, 10, 15, 10, 1, 12, 0, 0, 0x00 }, // g + { 1964, 0x0068, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // h + { 1997, 0x0069, 3, 13, 13, 1, 4, 0, 0, 0x00 }, // i + { 2007, 0x006A, 5, 18, 13, -1, 4, 0, 0, 0x00 }, // j + { 2030, 0x006B, 8, 13, 13, 1, 9, 0, 0, 0x00 }, // k + { 2056, 0x006C, 2, 13, 13, 1, 4, 0, 0, 0x00 }, // l + { 2063, 0x006D, 17, 10, 10, 1, 19, 0, 0, 0x00 }, // m + { 2106, 0x006E, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // n + { 2131, 0x006F, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // o + { 2156, 0x0070, 11, 15, 10, 1, 12, 0, 0, 0x00 }, // p + { 2198, 0x0071, 10, 15, 10, 1, 12, 0, 0, 0x00 }, // q + { 2236, 0x0072, 6, 10, 10, 1, 7, 0, 0, 0x00 }, // r + { 2251, 0x0073, 8, 10, 10, 1, 9, 0, 0, 0x00 }, // s + { 2271, 0x0074, 6, 13, 13, 0, 7, 0, 0, 0x00 }, // t + { 2291, 0x0075, 9, 10, 10, 1, 12, 0, 0, 0x00 }, // u + { 2314, 0x0076, 10, 10, 10, 0, 10, 0, 0, 0x00 }, // v + { 2339, 0x0077, 15, 10, 10, 0, 15, 0, 0, 0x00 }, // w + { 2377, 0x0078, 8, 10, 10, 0, 9, 0, 0, 0x00 }, // x + { 2397, 0x0079, 10, 15, 10, 0, 10, 0, 0, 0x00 }, // y + { 2435, 0x007A, 8, 10, 10, 0, 8, 0, 0, 0x00 }, // z + { 2455, 0x007B, 5, 21, 17, 2, 8, 0, 0, 0x00 }, // braceleft + { 2482, 0x007C, 3, 16, 14, 1, 5, 0, 0, 0x00 }, // bar + { 2494, 0x007D, 6, 21, 17, 1, 8, 0, 0, 0x00 }, // braceright + { 2526, 0x007E, 8, 3, 7, 1, 9, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 9, 3, 3, 1, 10, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_Regular_18_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_Regular_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_Regular_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_Regular_18_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_Regular_18_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_Regular_18_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_Regular_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_Regular_18_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_Regular_18_2bpp() +{ + static touchgfx::GeneratedFont Poppins_Regular_18_2bpp(glyphs_Poppins_Regular_18_2bpp, 96, 23, 18, 0, 0, 2, 0, 1, 0, unicodes_Poppins_Regular_18_2bpp, kerning_Poppins_Regular_18_2bpp, 63, 8230, 0, 0); + return Poppins_Regular_18_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_18_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_18_2bpp.cpp new file mode 100644 index 00000000..ea09381a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_18_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 4, 0, 0, 0x00 }, // space + { 0, 0x0021, 4, 12, 12, 1, 6, 0, 0, 0x00 }, // exclam + { 12, 0x0022, 6, 4, 14, 0, 7, 0, 0, 0x00 }, // quotedbl + { 18, 0x0023, 15, 13, 13, 0, 16, 0, 0, 0x00 }, // numbersign + { 67, 0x0024, 9, 16, 14, 1, 12, 0, 0, 0x00 }, // dollar + { 103, 0x0025, 15, 12, 12, 0, 15, 0, 0, 0x00 }, // percent + { 148, 0x0026, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // ampersand + { 190, 0x0027, 3, 4, 14, 0, 4, 0, 0, 0x00 }, // quotesingle + { 193, 0x0028, 7, 20, 17, 2, 9, 0, 0, 0x00 }, // parenleft + { 228, 0x0029, 7, 20, 17, 0, 9, 0, 0, 0x00 }, // parenright + { 263, 0x002A, 7, 7, 13, 1, 9, 0, 0, 0x00 }, // asterisk + { 276, 0x002B, 10, 9, 11, 1, 12, 0, 0, 0x00 }, // plus + { 299, 0x002C, 4, 5, 3, 0, 5, 0, 0, 0x00 }, // comma + { 304, 0x002D, 8, 2, 7, 1, 11, 0, 0, 0x00 }, // hyphen + { 308, 0x002E, 3, 3, 3, 1, 5, 0, 0, 0x00 }, // period + { 311, 0x002F, 8, 20, 17, 0, 9, 0, 0, 0x00 }, // slash + { 351, 0x0030, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // zero + { 384, 0x0031, 5, 13, 13, 0, 7, 0, 0, 0x00 }, // one + { 401, 0x0032, 10, 13, 13, 0, 10, 0, 0, 0x00 }, // two + { 434, 0x0033, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // three + { 464, 0x0034, 11, 12, 12, 1, 12, 0, 0, 0x00 }, // four + { 497, 0x0035, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // five + { 530, 0x0036, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // six + { 563, 0x0037, 10, 13, 13, 0, 10, 0, 0, 0x00 }, // seven + { 596, 0x0038, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // eight + { 629, 0x0039, 10, 13, 13, 1, 11, 0, 0, 0x00 }, // nine + { 662, 0x003A, 3, 10, 10, 1, 5, 0, 0, 0x00 }, // colon + { 670, 0x003B, 4, 12, 10, 1, 6, 0, 0, 0x00 }, // semicolon + { 682, 0x003C, 7, 8, 10, 1, 11, 0, 0, 0x00 }, // less + { 696, 0x003D, 11, 6, 10, 1, 13, 0, 0, 0x00 }, // equal + { 713, 0x003E, 7, 8, 10, 2, 10, 0, 0, 0x00 }, // greater + { 727, 0x003F, 9, 12, 12, 0, 10, 0, 0, 0x00 }, // question + { 754, 0x0040, 17, 16, 12, 1, 19, 0, 0, 0x00 }, // at + { 822, 0x0041, 13, 12, 12, 0, 13, 0, 0, 0x00 }, // A + { 861, 0x0042, 10, 12, 12, 1, 12, 0, 0, 0x00 }, // B + { 891, 0x0043, 13, 12, 12, 0, 14, 0, 0, 0x00 }, // C + { 930, 0x0044, 12, 12, 12, 1, 13, 0, 0, 0x00 }, // D + { 966, 0x0045, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // E + { 990, 0x0046, 8, 12, 12, 1, 10, 0, 0, 0x00 }, // F + { 1014, 0x0047, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // G + { 1056, 0x0048, 11, 12, 12, 1, 13, 0, 0, 0x00 }, // H + { 1089, 0x0049, 3, 12, 12, 1, 5, 0, 0, 0x00 }, // I + { 1098, 0x004A, 9, 12, 12, 0, 10, 0, 0, 0x00 }, // J + { 1125, 0x004B, 10, 12, 12, 1, 12, 0, 0, 0x00 }, // K + { 1155, 0x004C, 7, 12, 12, 1, 8, 0, 0, 0x00 }, // L + { 1176, 0x004D, 14, 12, 12, 1, 16, 0, 0, 0x00 }, // M + { 1218, 0x004E, 11, 12, 12, 1, 13, 0, 0, 0x00 }, // N + { 1251, 0x004F, 14, 12, 12, 0, 14, 0, 0, 0x00 }, // O + { 1293, 0x0050, 10, 12, 12, 1, 11, 0, 0, 0x00 }, // P + { 1323, 0x0051, 14, 14, 12, 0, 14, 0, 0, 0x00 }, // Q + { 1372, 0x0052, 10, 12, 12, 1, 12, 0, 0, 0x00 }, // R + { 1402, 0x0053, 9, 12, 12, 1, 11, 0, 0, 0x00 }, // S + { 1429, 0x0054, 10, 12, 12, 0, 10, 0, 0, 0x00 }, // T + { 1459, 0x0055, 11, 12, 12, 1, 13, 0, 0, 0x00 }, // U + { 1492, 0x0056, 13, 12, 12, 0, 13, 0, 0, 0x00 }, // V + { 1531, 0x0057, 18, 12, 12, 0, 18, 0, 0, 0x00 }, // W + { 1585, 0x0058, 11, 12, 12, 1, 12, 0, 0, 0x00 }, // X + { 1618, 0x0059, 11, 12, 12, 0, 11, 0, 0, 0x00 }, // Y + { 1651, 0x005A, 9, 12, 12, 1, 10, 0, 0, 0x00 }, // Z + { 1678, 0x005B, 5, 20, 17, 2, 9, 0, 0, 0x00 }, // bracketleft + { 1703, 0x005C, 8, 20, 17, 3, 14, 0, 0, 0x00 }, // backslash + { 1743, 0x005D, 5, 20, 17, 2, 9, 0, 0, 0x00 }, // bracketright + { 1768, 0x005E, 12, 10, 13, 0, 12, 0, 0, 0x00 }, // asciicircum + { 1798, 0x005F, 11, 3, 0, 2, 14, 0, 0, 0x00 }, // underscore + { 1807, 0x0060, 5, 3, 14, 0, 5, 0, 0, 0x00 }, // grave + { 1811, 0x0061, 11, 10, 10, 0, 12, 0, 0, 0x00 }, // a + { 1839, 0x0062, 11, 14, 14, 1, 12, 0, 0, 0x00 }, // b + { 1878, 0x0063, 10, 10, 10, 0, 11, 0, 0, 0x00 }, // c + { 1903, 0x0064, 11, 13, 13, 0, 12, 0, 0, 0x00 }, // d + { 1939, 0x0065, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // e + { 1967, 0x0066, 6, 14, 14, 0, 6, 0, 0, 0x00 }, // f + { 1988, 0x0067, 11, 15, 10, 0, 12, 0, 0, 0x00 }, // g + { 2030, 0x0068, 10, 13, 13, 1, 12, 0, 0, 0x00 }, // h + { 2063, 0x0069, 3, 14, 14, 1, 5, 0, 0, 0x00 }, // i + { 2074, 0x006A, 5, 19, 14, -1, 5, 0, 0, 0x00 }, // j + { 2098, 0x006B, 9, 13, 13, 1, 11, 0, 0, 0x00 }, // k + { 2128, 0x006C, 3, 13, 13, 1, 5, 0, 0, 0x00 }, // l + { 2138, 0x006D, 17, 10, 10, 1, 19, 0, 0, 0x00 }, // m + { 2181, 0x006E, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // n + { 2206, 0x006F, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // o + { 2234, 0x0070, 11, 15, 10, 1, 12, 0, 0, 0x00 }, // p + { 2276, 0x0071, 11, 15, 10, 0, 12, 0, 0, 0x00 }, // q + { 2318, 0x0072, 6, 10, 10, 1, 7, 0, 0, 0x00 }, // r + { 2333, 0x0073, 8, 10, 10, 1, 10, 0, 0, 0x00 }, // s + { 2353, 0x0074, 7, 12, 12, 0, 7, 0, 0, 0x00 }, // t + { 2374, 0x0075, 10, 10, 10, 1, 12, 0, 0, 0x00 }, // u + { 2399, 0x0076, 11, 10, 10, 0, 11, 0, 0, 0x00 }, // v + { 2427, 0x0077, 15, 10, 10, 0, 15, 0, 0, 0x00 }, // w + { 2465, 0x0078, 10, 10, 10, 0, 10, 0, 0, 0x00 }, // x + { 2490, 0x0079, 11, 15, 10, 0, 11, 0, 0, 0x00 }, // y + { 2532, 0x007A, 8, 10, 10, 0, 9, 0, 0, 0x00 }, // z + { 2552, 0x007B, 6, 20, 16, 2, 9, 0, 0, 0x00 }, // braceleft + { 2582, 0x007C, 3, 17, 15, 1, 6, 0, 0, 0x00 }, // bar + { 2595, 0x007D, 6, 20, 16, 1, 9, 0, 0, 0x00 }, // braceright + { 2625, 0x007E, 10, 4, 8, 0, 11, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 11, 3, 3, 1, 13, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_18_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_18_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_18_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_18_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_18_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_18_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_18_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_18_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_18_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_18_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_18_2bpp(glyphs_Poppins_SemiBold_18_2bpp, 96, 23, 18, 0, 0, 2, 0, 1, 0, unicodes_Poppins_SemiBold_18_2bpp, kerning_Poppins_SemiBold_18_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_18_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_20_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_20_2bpp.cpp new file mode 100644 index 00000000..4ab3ee99 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_20_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_20_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 5, 0, 0, 0x00 }, // space + { 0, 0x0021, 4, 14, 14, 2, 7, 0, 0, 0x00 }, // exclam + { 14, 0x0022, 7, 4, 15, 0, 7, 0, 0, 0x00 }, // quotedbl + { 21, 0x0023, 17, 15, 15, 0, 18, 0, 0, 0x00 }, // numbersign + { 85, 0x0024, 11, 17, 15, 1, 13, 0, 0, 0x00 }, // dollar + { 132, 0x0025, 16, 14, 14, 0, 17, 0, 0, 0x00 }, // percent + { 188, 0x0026, 15, 14, 14, 0, 16, 0, 0, 0x00 }, // ampersand + { 241, 0x0027, 3, 4, 15, 0, 4, 0, 0, 0x00 }, // quotesingle + { 244, 0x0028, 7, 22, 18, 2, 10, 0, 0, 0x00 }, // parenleft + { 283, 0x0029, 8, 22, 18, 0, 10, 0, 0, 0x00 }, // parenright + { 327, 0x002A, 8, 8, 15, 1, 10, 0, 0, 0x00 }, // asterisk + { 343, 0x002B, 11, 10, 12, 1, 13, 0, 0, 0x00 }, // plus + { 371, 0x002C, 4, 6, 3, 0, 5, 0, 0, 0x00 }, // comma + { 377, 0x002D, 9, 3, 9, 1, 12, 0, 0, 0x00 }, // hyphen + { 384, 0x002E, 4, 3, 3, 1, 5, 0, 0, 0x00 }, // period + { 387, 0x002F, 8, 22, 18, 1, 10, 0, 0, 0x00 }, // slash + { 431, 0x0030, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // zero + { 473, 0x0031, 6, 14, 14, 0, 7, 0, 0, 0x00 }, // one + { 494, 0x0032, 10, 15, 15, 1, 11, 0, 0, 0x00 }, // two + { 532, 0x0033, 10, 15, 15, 1, 12, 0, 0, 0x00 }, // three + { 570, 0x0034, 12, 14, 14, 1, 13, 0, 0, 0x00 }, // four + { 612, 0x0035, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // five + { 654, 0x0036, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // six + { 696, 0x0037, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // seven + { 738, 0x0038, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // eight + { 780, 0x0039, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // nine + { 822, 0x003A, 4, 11, 11, 1, 5, 0, 0, 0x00 }, // colon + { 833, 0x003B, 4, 14, 11, 1, 6, 0, 0, 0x00 }, // semicolon + { 847, 0x003C, 8, 9, 12, 1, 12, 0, 0, 0x00 }, // less + { 865, 0x003D, 11, 7, 11, 2, 15, 0, 0, 0x00 }, // equal + { 885, 0x003E, 8, 9, 12, 2, 11, 0, 0, 0x00 }, // greater + { 903, 0x003F, 10, 14, 14, 0, 11, 0, 0, 0x00 }, // question + { 938, 0x0040, 19, 17, 13, 1, 21, 0, 0, 0x00 }, // at + { 1019, 0x0041, 14, 14, 14, 0, 14, 0, 0, 0x00 }, // A + { 1068, 0x0042, 11, 14, 14, 1, 13, 0, 0, 0x00 }, // B + { 1107, 0x0043, 14, 14, 14, 0, 15, 0, 0, 0x00 }, // C + { 1156, 0x0044, 13, 14, 14, 1, 14, 0, 0, 0x00 }, // D + { 1202, 0x0045, 9, 14, 14, 1, 11, 0, 0, 0x00 }, // E + { 1234, 0x0046, 9, 14, 14, 1, 11, 0, 0, 0x00 }, // F + { 1266, 0x0047, 15, 14, 14, 0, 15, 0, 0, 0x00 }, // G + { 1319, 0x0048, 12, 14, 14, 1, 14, 0, 0, 0x00 }, // H + { 1361, 0x0049, 4, 14, 14, 1, 6, 0, 0, 0x00 }, // I + { 1375, 0x004A, 10, 14, 14, 0, 11, 0, 0, 0x00 }, // J + { 1410, 0x004B, 12, 14, 14, 1, 13, 0, 0, 0x00 }, // K + { 1452, 0x004C, 8, 14, 14, 1, 9, 0, 0, 0x00 }, // L + { 1480, 0x004D, 16, 14, 14, 1, 18, 0, 0, 0x00 }, // M + { 1536, 0x004E, 13, 14, 14, 1, 15, 0, 0, 0x00 }, // N + { 1582, 0x004F, 15, 14, 14, 0, 16, 0, 0, 0x00 }, // O + { 1635, 0x0050, 11, 14, 14, 1, 12, 0, 0, 0x00 }, // P + { 1674, 0x0051, 15, 17, 14, 0, 16, 0, 0, 0x00 }, // Q + { 1738, 0x0052, 11, 14, 14, 1, 13, 0, 0, 0x00 }, // R + { 1777, 0x0053, 10, 14, 14, 1, 12, 0, 0, 0x00 }, // S + { 1812, 0x0054, 11, 14, 14, 0, 12, 0, 0, 0x00 }, // T + { 1851, 0x0055, 12, 14, 14, 1, 14, 0, 0, 0x00 }, // U + { 1893, 0x0056, 14, 14, 14, 0, 14, 0, 0, 0x00 }, // V + { 1942, 0x0057, 20, 14, 14, 0, 20, 0, 0, 0x00 }, // W + { 2012, 0x0058, 12, 14, 14, 1, 14, 0, 0, 0x00 }, // X + { 2054, 0x0059, 13, 14, 14, 0, 13, 0, 0, 0x00 }, // Y + { 2100, 0x005A, 10, 14, 14, 1, 12, 0, 0, 0x00 }, // Z + { 2135, 0x005B, 6, 22, 18, 2, 10, 0, 0, 0x00 }, // bracketleft + { 2168, 0x005C, 9, 22, 18, 3, 15, 0, 0, 0x00 }, // backslash + { 2218, 0x005D, 6, 22, 18, 2, 10, 0, 0, 0x00 }, // bracketright + { 2251, 0x005E, 12, 11, 14, 1, 14, 0, 0, 0x00 }, // asciicircum + { 2284, 0x005F, 12, 3, 0, 2, 16, 0, 0, 0x00 }, // underscore + { 2293, 0x0060, 5, 5, 16, 0, 5, 0, 0, 0x00 }, // grave + { 2300, 0x0061, 13, 11, 11, 0, 14, 0, 0, 0x00 }, // a + { 2336, 0x0062, 12, 15, 15, 1, 14, 0, 0, 0x00 }, // b + { 2381, 0x0063, 11, 11, 11, 0, 12, 0, 0, 0x00 }, // c + { 2412, 0x0064, 13, 15, 15, 0, 14, 0, 0, 0x00 }, // d + { 2461, 0x0065, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // e + { 2494, 0x0066, 7, 16, 16, 0, 7, 0, 0, 0x00 }, // f + { 2522, 0x0067, 13, 16, 11, 0, 14, 0, 0, 0x00 }, // g + { 2574, 0x0068, 11, 15, 15, 1, 13, 0, 0, 0x00 }, // h + { 2616, 0x0069, 4, 15, 15, 1, 6, 0, 0, 0x00 }, // i + { 2631, 0x006A, 6, 20, 15, -1, 6, 0, 0, 0x00 }, // j + { 2661, 0x006B, 11, 15, 15, 1, 12, 0, 0, 0x00 }, // k + { 2703, 0x006C, 4, 15, 15, 1, 6, 0, 0, 0x00 }, // l + { 2718, 0x006D, 19, 11, 11, 1, 21, 0, 0, 0x00 }, // m + { 2771, 0x006E, 11, 11, 11, 1, 13, 0, 0, 0x00 }, // n + { 2802, 0x006F, 12, 11, 11, 0, 13, 0, 0, 0x00 }, // o + { 2835, 0x0070, 12, 16, 11, 1, 14, 0, 0, 0x00 }, // p + { 2883, 0x0071, 13, 16, 11, 0, 14, 0, 0, 0x00 }, // q + { 2935, 0x0072, 7, 11, 11, 1, 8, 0, 0, 0x00 }, // r + { 2955, 0x0073, 9, 11, 11, 1, 11, 0, 0, 0x00 }, // s + { 2980, 0x0074, 7, 14, 14, 0, 8, 0, 0, 0x00 }, // t + { 3005, 0x0075, 11, 11, 11, 1, 13, 0, 0, 0x00 }, // u + { 3036, 0x0076, 12, 11, 11, 0, 12, 0, 0, 0x00 }, // v + { 3069, 0x0077, 17, 11, 11, 0, 17, 0, 0, 0x00 }, // w + { 3116, 0x0078, 11, 11, 11, 0, 11, 0, 0, 0x00 }, // x + { 3147, 0x0079, 12, 16, 11, 0, 12, 0, 0, 0x00 }, // y + { 3195, 0x007A, 9, 11, 11, 0, 10, 0, 0, 0x00 }, // z + { 3220, 0x007B, 7, 22, 18, 2, 10, 0, 0, 0x00 }, // braceleft + { 3259, 0x007C, 4, 18, 16, 1, 6, 0, 0, 0x00 }, // bar + { 3277, 0x007D, 7, 22, 18, 1, 10, 0, 0, 0x00 }, // braceright + { 3316, 0x007E, 11, 4, 8, 0, 12, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 12, 3, 3, 1, 14, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_20_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_20_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_20_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_20_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_20_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_20_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_20_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_20_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_20_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_20_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_20_2bpp(glyphs_Poppins_SemiBold_20_2bpp, 96, 25, 20, 0, 0, 2, 0, 1, 0, unicodes_Poppins_SemiBold_20_2bpp, kerning_Poppins_SemiBold_20_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_20_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_25_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_25_2bpp.cpp new file mode 100644 index 00000000..00452e32 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_25_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_25_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 6, 0, 0, 0x00 }, // space + { 0, 0x0021, 5, 17, 17, 2, 9, 0, 0, 0x00 }, // exclam + { 22, 0x0022, 7, 6, 21, 1, 9, 0, 0, 0x00 }, // quotedbl + { 33, 0x0023, 21, 19, 19, 0, 22, 0, 0, 0x00 }, // numbersign + { 133, 0x0024, 13, 22, 20, 1, 16, 0, 0, 0x00 }, // dollar + { 205, 0x0025, 19, 17, 17, 1, 21, 0, 0, 0x00 }, // percent + { 286, 0x0026, 18, 17, 17, 1, 19, 0, 0, 0x00 }, // ampersand + { 363, 0x0027, 3, 6, 21, 1, 5, 0, 0, 0x00 }, // quotesingle + { 368, 0x0028, 10, 28, 23, 2, 12, 0, 0, 0x00 }, // parenleft + { 438, 0x0029, 10, 28, 23, 0, 12, 0, 0, 0x00 }, // parenright + { 508, 0x002A, 9, 10, 19, 2, 13, 0, 0, 0x00 }, // asterisk + { 531, 0x002B, 13, 13, 16, 2, 17, 0, 0, 0x00 }, // plus + { 574, 0x002C, 6, 7, 4, 0, 6, 0, 0, 0x00 }, // comma + { 585, 0x002D, 12, 3, 10, 1, 15, 0, 0, 0x00 }, // hyphen + { 594, 0x002E, 5, 4, 4, 1, 7, 0, 0, 0x00 }, // period + { 599, 0x002F, 10, 28, 24, 1, 12, 0, 0, 0x00 }, // slash + { 669, 0x0030, 14, 19, 19, 1, 16, 0, 0, 0x00 }, // zero + { 736, 0x0031, 6, 19, 19, 1, 9, 0, 0, 0x00 }, // one + { 765, 0x0032, 13, 18, 18, 1, 14, 0, 0, 0x00 }, // two + { 824, 0x0033, 13, 19, 19, 1, 15, 0, 0, 0x00 }, // three + { 886, 0x0034, 15, 18, 18, 1, 17, 0, 0, 0x00 }, // four + { 954, 0x0035, 13, 18, 18, 2, 16, 0, 0, 0x00 }, // five + { 1013, 0x0036, 14, 19, 19, 1, 16, 0, 0, 0x00 }, // six + { 1080, 0x0037, 12, 18, 18, 1, 14, 0, 0, 0x00 }, // seven + { 1134, 0x0038, 14, 19, 19, 1, 16, 0, 0, 0x00 }, // eight + { 1201, 0x0039, 14, 19, 19, 1, 16, 0, 0, 0x00 }, // nine + { 1268, 0x003A, 5, 14, 14, 1, 7, 0, 0, 0x00 }, // colon + { 1286, 0x003B, 5, 17, 14, 1, 8, 0, 0, 0x00 }, // semicolon + { 1308, 0x003C, 10, 11, 14, 2, 15, 0, 0, 0x00 }, // less + { 1336, 0x003D, 14, 9, 14, 2, 18, 0, 0, 0x00 }, // equal + { 1368, 0x003E, 10, 11, 14, 2, 14, 0, 0, 0x00 }, // greater + { 1396, 0x003F, 12, 17, 17, 1, 13, 0, 0, 0x00 }, // question + { 1447, 0x0040, 24, 22, 17, 1, 26, 0, 0, 0x00 }, // at + { 1579, 0x0041, 16, 17, 17, 1, 18, 0, 0, 0x00 }, // A + { 1647, 0x0042, 14, 17, 17, 1, 16, 0, 0, 0x00 }, // B + { 1707, 0x0043, 17, 17, 17, 1, 19, 0, 0, 0x00 }, // C + { 1780, 0x0044, 16, 17, 17, 1, 18, 0, 0, 0x00 }, // D + { 1848, 0x0045, 11, 17, 17, 1, 13, 0, 0, 0x00 }, // E + { 1895, 0x0046, 12, 17, 17, 1, 13, 0, 0, 0x00 }, // F + { 1946, 0x0047, 18, 17, 17, 1, 19, 0, 0, 0x00 }, // G + { 2023, 0x0048, 16, 17, 17, 1, 18, 0, 0, 0x00 }, // H + { 2091, 0x0049, 5, 17, 17, 1, 7, 0, 0, 0x00 }, // I + { 2113, 0x004A, 11, 17, 17, 1, 14, 0, 0, 0x00 }, // J + { 2160, 0x004B, 15, 17, 17, 1, 17, 0, 0, 0x00 }, // K + { 2224, 0x004C, 10, 17, 17, 1, 11, 0, 0, 0x00 }, // L + { 2267, 0x004D, 20, 17, 17, 1, 22, 0, 0, 0x00 }, // M + { 2352, 0x004E, 16, 17, 17, 1, 18, 0, 0, 0x00 }, // N + { 2420, 0x004F, 18, 17, 17, 1, 20, 0, 0, 0x00 }, // O + { 2497, 0x0050, 14, 17, 17, 1, 15, 0, 0, 0x00 }, // P + { 2557, 0x0051, 18, 20, 17, 1, 20, 0, 0, 0x00 }, // Q + { 2647, 0x0052, 14, 17, 17, 1, 16, 0, 0, 0x00 }, // R + { 2707, 0x0053, 13, 17, 17, 1, 15, 0, 0, 0x00 }, // S + { 2763, 0x0054, 14, 17, 17, 0, 14, 0, 0, 0x00 }, // T + { 2823, 0x0055, 15, 17, 17, 1, 17, 0, 0, 0x00 }, // U + { 2887, 0x0056, 18, 17, 17, 0, 18, 0, 0, 0x00 }, // V + { 2964, 0x0057, 25, 17, 17, 0, 26, 0, 0, 0x00 }, // W + { 3071, 0x0058, 15, 17, 17, 1, 17, 0, 0, 0x00 }, // X + { 3135, 0x0059, 16, 17, 17, 0, 16, 0, 0, 0x00 }, // Y + { 3203, 0x005A, 12, 17, 17, 1, 14, 0, 0, 0x00 }, // Z + { 3254, 0x005B, 7, 28, 23, 3, 12, 0, 0, 0x00 }, // bracketleft + { 3303, 0x005C, 11, 28, 24, 4, 19, 0, 0, 0x00 }, // backslash + { 3380, 0x005D, 7, 28, 23, 2, 12, 0, 0, 0x00 }, // bracketright + { 3429, 0x005E, 15, 14, 18, 1, 17, 0, 0, 0x00 }, // asciicircum + { 3482, 0x005F, 16, 4, 0, 2, 20, 0, 0, 0x00 }, // underscore + { 3498, 0x0060, 6, 5, 20, 0, 7, 0, 0, 0x00 }, // grave + { 3506, 0x0061, 15, 14, 14, 1, 17, 0, 0, 0x00 }, // a + { 3559, 0x0062, 15, 19, 19, 1, 17, 0, 0, 0x00 }, // b + { 3631, 0x0063, 13, 14, 14, 1, 15, 0, 0, 0x00 }, // c + { 3677, 0x0064, 15, 19, 19, 1, 17, 0, 0, 0x00 }, // d + { 3749, 0x0065, 14, 14, 14, 1, 15, 0, 0, 0x00 }, // e + { 3798, 0x0066, 8, 19, 19, 0, 9, 0, 0, 0x00 }, // f + { 3836, 0x0067, 15, 21, 14, 1, 17, 0, 0, 0x00 }, // g + { 3915, 0x0068, 14, 19, 19, 1, 17, 0, 0, 0x00 }, // h + { 3982, 0x0069, 5, 19, 19, 1, 7, 0, 0, 0x00 }, // i + { 4006, 0x006A, 7, 26, 19, -1, 7, 0, 0, 0x00 }, // j + { 4052, 0x006B, 13, 19, 19, 1, 15, 0, 0, 0x00 }, // k + { 4114, 0x006C, 5, 19, 19, 1, 7, 0, 0, 0x00 }, // l + { 4138, 0x006D, 24, 14, 14, 1, 26, 0, 0, 0x00 }, // m + { 4222, 0x006E, 14, 14, 14, 1, 17, 0, 0, 0x00 }, // n + { 4271, 0x006F, 14, 14, 14, 1, 16, 0, 0, 0x00 }, // o + { 4320, 0x0070, 15, 21, 14, 1, 17, 0, 0, 0x00 }, // p + { 4399, 0x0071, 15, 21, 14, 1, 17, 0, 0, 0x00 }, // q + { 4478, 0x0072, 9, 14, 14, 1, 10, 0, 0, 0x00 }, // r + { 4510, 0x0073, 12, 14, 14, 1, 14, 0, 0, 0x00 }, // s + { 4552, 0x0074, 9, 17, 17, 0, 10, 0, 0, 0x00 }, // t + { 4591, 0x0075, 14, 14, 14, 1, 17, 0, 0, 0x00 }, // u + { 4640, 0x0076, 15, 14, 14, 0, 15, 0, 0, 0x00 }, // v + { 4693, 0x0077, 21, 14, 14, 0, 21, 0, 0, 0x00 }, // w + { 4767, 0x0078, 13, 14, 14, 0, 14, 0, 0, 0x00 }, // x + { 4813, 0x0079, 15, 21, 14, 0, 15, 0, 0, 0x00 }, // y + { 4892, 0x007A, 10, 14, 14, 1, 12, 0, 0, 0x00 }, // z + { 4927, 0x007B, 9, 28, 23, 2, 13, 0, 0, 0x00 }, // braceleft + { 4990, 0x007C, 4, 23, 20, 2, 8, 0, 0, 0x00 }, // bar + { 5013, 0x007D, 8, 28, 23, 2, 13, 0, 0, 0x00 }, // braceright + { 5069, 0x007E, 13, 5, 11, 1, 15, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 16, 4, 4, 1, 17, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_25_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_25_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_25_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_25_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_25_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_25_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_25_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_25_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_25_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_25_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_25_2bpp(glyphs_Poppins_SemiBold_25_2bpp, 96, 32, 25, 0, 0, 2, 0, 1, 0, unicodes_Poppins_SemiBold_25_2bpp, kerning_Poppins_SemiBold_25_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_25_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_30_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_30_2bpp.cpp new file mode 100644 index 00000000..cb571b02 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_30_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_30_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 7, 0, 0, 0x00 }, // space + { 0, 0x0021, 6, 21, 21, 2, 11, 0, 0, 0x00 }, // exclam + { 32, 0x0022, 9, 7, 25, 1, 11, 0, 0, 0x00 }, // quotedbl + { 48, 0x0023, 26, 23, 23, 0, 27, 0, 0, 0x00 }, // numbersign + { 198, 0x0024, 16, 27, 24, 1, 20, 0, 0, 0x00 }, // dollar + { 306, 0x0025, 23, 21, 21, 1, 25, 0, 0, 0x00 }, // percent + { 427, 0x0026, 22, 21, 21, 1, 23, 0, 0, 0x00 }, // ampersand + { 543, 0x0027, 4, 7, 25, 1, 6, 0, 0, 0x00 }, // quotesingle + { 550, 0x0028, 11, 34, 28, 3, 15, 0, 0, 0x00 }, // parenleft + { 644, 0x0029, 12, 34, 28, 0, 15, 0, 0, 0x00 }, // parenright + { 746, 0x002A, 12, 12, 23, 2, 16, 0, 0, 0x00 }, // asterisk + { 782, 0x002B, 16, 16, 19, 2, 20, 0, 0, 0x00 }, // plus + { 846, 0x002C, 7, 9, 5, 0, 8, 0, 0, 0x00 }, // comma + { 862, 0x002D, 13, 4, 13, 2, 17, 0, 0, 0x00 }, // hyphen + { 875, 0x002E, 6, 5, 5, 1, 8, 0, 0, 0x00 }, // period + { 883, 0x002F, 13, 34, 29, 1, 15, 0, 0, 0x00 }, // slash + { 994, 0x0030, 17, 22, 22, 1, 19, 0, 0, 0x00 }, // zero + { 1088, 0x0031, 8, 22, 22, 1, 11, 0, 0, 0x00 }, // one + { 1132, 0x0032, 16, 22, 22, 1, 17, 0, 0, 0x00 }, // two + { 1220, 0x0033, 16, 23, 23, 1, 18, 0, 0, 0x00 }, // three + { 1312, 0x0034, 18, 22, 22, 1, 20, 0, 0, 0x00 }, // four + { 1411, 0x0035, 16, 22, 22, 2, 19, 0, 0, 0x00 }, // five + { 1499, 0x0036, 16, 23, 23, 2, 19, 0, 0, 0x00 }, // six + { 1591, 0x0037, 15, 22, 22, 1, 16, 0, 0, 0x00 }, // seven + { 1674, 0x0038, 17, 23, 23, 1, 19, 0, 0, 0x00 }, // eight + { 1772, 0x0039, 15, 23, 23, 2, 19, 0, 0, 0x00 }, // nine + { 1859, 0x003A, 6, 17, 17, 1, 8, 0, 0, 0x00 }, // colon + { 1885, 0x003B, 7, 21, 17, 1, 10, 0, 0, 0x00 }, // semicolon + { 1922, 0x003C, 12, 14, 18, 2, 18, 0, 0, 0x00 }, // less + { 1964, 0x003D, 17, 11, 16, 3, 22, 0, 0, 0x00 }, // equal + { 2011, 0x003E, 12, 14, 18, 3, 17, 0, 0, 0x00 }, // greater + { 2053, 0x003F, 14, 21, 21, 1, 16, 0, 0, 0x00 }, // question + { 2127, 0x0040, 28, 26, 20, 2, 32, 0, 0, 0x00 }, // at + { 2309, 0x0041, 20, 21, 21, 1, 21, 0, 0, 0x00 }, // A + { 2414, 0x0042, 16, 21, 21, 2, 19, 0, 0, 0x00 }, // B + { 2498, 0x0043, 21, 21, 21, 1, 23, 0, 0, 0x00 }, // C + { 2609, 0x0044, 19, 21, 21, 2, 22, 0, 0, 0x00 }, // D + { 2709, 0x0045, 13, 21, 21, 2, 16, 0, 0, 0x00 }, // E + { 2778, 0x0046, 13, 21, 21, 2, 16, 0, 0, 0x00 }, // F + { 2847, 0x0047, 21, 21, 21, 1, 23, 0, 0, 0x00 }, // G + { 2958, 0x0048, 18, 21, 21, 2, 22, 0, 0, 0x00 }, // H + { 3053, 0x0049, 5, 21, 21, 2, 8, 0, 0, 0x00 }, // I + { 3080, 0x004A, 14, 21, 21, 1, 17, 0, 0, 0x00 }, // J + { 3154, 0x004B, 17, 21, 21, 2, 20, 0, 0, 0x00 }, // K + { 3244, 0x004C, 12, 21, 21, 2, 14, 0, 0, 0x00 }, // L + { 3307, 0x004D, 23, 21, 21, 2, 27, 0, 0, 0x00 }, // M + { 3428, 0x004E, 18, 21, 21, 2, 22, 0, 0, 0x00 }, // N + { 3523, 0x004F, 22, 21, 21, 1, 24, 0, 0, 0x00 }, // O + { 3639, 0x0050, 16, 21, 21, 2, 18, 0, 0, 0x00 }, // P + { 3723, 0x0051, 22, 25, 21, 1, 24, 0, 0, 0x00 }, // Q + { 3861, 0x0052, 16, 21, 21, 2, 19, 0, 0, 0x00 }, // R + { 3945, 0x0053, 16, 21, 21, 1, 18, 0, 0, 0x00 }, // S + { 4029, 0x0054, 16, 21, 21, 1, 17, 0, 0, 0x00 }, // T + { 4113, 0x0055, 17, 21, 21, 2, 21, 0, 0, 0x00 }, // U + { 4203, 0x0056, 21, 21, 21, 0, 21, 0, 0, 0x00 }, // V + { 4314, 0x0057, 30, 21, 21, 0, 31, 0, 0, 0x00 }, // W + { 4472, 0x0058, 18, 21, 21, 1, 21, 0, 0, 0x00 }, // X + { 4567, 0x0059, 19, 21, 21, 0, 19, 0, 0, 0x00 }, // Y + { 4667, 0x005A, 15, 21, 21, 1, 17, 0, 0, 0x00 }, // Z + { 4746, 0x005B, 8, 34, 28, 4, 15, 0, 0, 0x00 }, // bracketleft + { 4814, 0x005C, 13, 34, 29, 5, 23, 0, 0, 0x00 }, // backslash + { 4925, 0x005D, 8, 34, 28, 3, 15, 0, 0, 0x00 }, // bracketright + { 4993, 0x005E, 19, 16, 21, 1, 20, 0, 0, 0x00 }, // asciicircum + { 5069, 0x005F, 18, 4, 255, 3, 24, 0, 0, 0x60 }, // underscore + { 5087, 0x0060, 8, 7, 25, 0, 8, 0, 0, 0x00 }, // grave + { 5101, 0x0061, 18, 17, 17, 1, 20, 0, 0, 0x00 }, // a + { 5178, 0x0062, 18, 23, 23, 2, 20, 0, 0, 0x00 }, // b + { 5282, 0x0063, 16, 17, 17, 1, 18, 0, 0, 0x00 }, // c + { 5350, 0x0064, 18, 23, 23, 1, 20, 0, 0, 0x00 }, // d + { 5454, 0x0065, 17, 17, 17, 1, 19, 0, 0, 0x00 }, // e + { 5527, 0x0066, 10, 24, 24, 0, 10, 0, 0, 0x00 }, // f + { 5587, 0x0067, 18, 25, 17, 1, 20, 0, 0, 0x00 }, // g + { 5700, 0x0068, 16, 23, 23, 2, 20, 0, 0, 0x00 }, // h + { 5792, 0x0069, 6, 24, 24, 1, 8, 0, 0, 0x00 }, // i + { 5828, 0x006A, 8, 32, 24, -1, 8, 0, 0, 0x00 }, // j + { 5892, 0x006B, 15, 23, 23, 2, 18, 0, 0, 0x00 }, // k + { 5979, 0x006C, 5, 23, 23, 2, 8, 0, 0, 0x00 }, // l + { 6008, 0x006D, 28, 17, 17, 2, 31, 0, 0, 0x00 }, // m + { 6127, 0x006E, 16, 17, 17, 2, 20, 0, 0, 0x00 }, // n + { 6195, 0x006F, 17, 17, 17, 1, 19, 0, 0, 0x00 }, // o + { 6268, 0x0070, 18, 25, 17, 2, 20, 0, 0, 0x00 }, // p + { 6381, 0x0071, 18, 25, 17, 1, 20, 0, 0, 0x00 }, // q + { 6494, 0x0072, 10, 17, 17, 2, 12, 0, 0, 0x00 }, // r + { 6537, 0x0073, 14, 17, 17, 1, 16, 0, 0, 0x00 }, // s + { 6597, 0x0074, 11, 21, 21, 0, 12, 0, 0, 0x00 }, // t + { 6655, 0x0075, 16, 17, 17, 2, 20, 0, 0, 0x00 }, // u + { 6723, 0x0076, 18, 17, 17, 0, 18, 0, 0, 0x00 }, // v + { 6800, 0x0077, 25, 17, 17, 0, 25, 0, 0, 0x00 }, // w + { 6907, 0x0078, 16, 17, 17, 0, 16, 0, 0, 0x00 }, // x + { 6975, 0x0079, 18, 25, 17, 0, 18, 0, 0, 0x00 }, // y + { 7088, 0x007A, 13, 17, 17, 1, 14, 0, 0, 0x00 }, // z + { 7144, 0x007B, 10, 34, 28, 3, 15, 0, 0, 0x00 }, // braceleft + { 7229, 0x007C, 5, 28, 24, 2, 9, 0, 0, 0x00 }, // bar + { 7264, 0x007D, 10, 34, 28, 2, 15, 0, 0, 0x00 }, // braceright + { 7349, 0x007E, 16, 6, 13, 1, 18, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 19, 5, 5, 1, 21, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_30_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_30_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_30_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_30_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_30_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_30_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_30_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_30_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_30_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_30_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_30_2bpp(glyphs_Poppins_SemiBold_30_2bpp, 96, 38, 30, 0, 0, 2, 0, 1, 0, unicodes_Poppins_SemiBold_30_2bpp, kerning_Poppins_SemiBold_30_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_30_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_35_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_35_2bpp.cpp new file mode 100644 index 00000000..c90c571e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_35_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_35_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 8, 0, 0, 0x00 }, // space + { 0, 0x0021, 6, 25, 25, 3, 12, 0, 0, 0x00 }, // exclam + { 38, 0x0022, 11, 8, 29, 1, 13, 0, 0, 0x00 }, // quotedbl + { 60, 0x0023, 29, 27, 27, 1, 31, 0, 0, 0x00 }, // numbersign + { 256, 0x0024, 18, 31, 28, 2, 23, 0, 0, 0x00 }, // dollar + { 396, 0x0025, 27, 25, 25, 1, 29, 0, 0, 0x00 }, // percent + { 565, 0x0026, 26, 25, 25, 1, 27, 0, 0, 0x00 }, // ampersand + { 728, 0x0027, 5, 8, 29, 1, 7, 0, 0, 0x00 }, // quotesingle + { 738, 0x0028, 14, 40, 33, 3, 17, 0, 0, 0x00 }, // parenleft + { 878, 0x0029, 14, 40, 33, 0, 17, 0, 0, 0x00 }, // parenright + { 1018, 0x002A, 14, 14, 27, 2, 18, 0, 0, 0x00 }, // asterisk + { 1067, 0x002B, 18, 18, 22, 3, 24, 0, 0, 0x00 }, // plus + { 1148, 0x002C, 8, 10, 5, 0, 9, 0, 0, 0x00 }, // comma + { 1168, 0x002D, 16, 5, 16, 2, 20, 0, 0, 0x00 }, // hyphen + { 1188, 0x002E, 7, 6, 6, 1, 9, 0, 0, 0x00 }, // period + { 1199, 0x002F, 15, 40, 34, 1, 17, 0, 0, 0x00 }, // slash + { 1349, 0x0030, 19, 27, 27, 2, 23, 0, 0, 0x00 }, // zero + { 1478, 0x0031, 9, 26, 26, 1, 13, 0, 0, 0x00 }, // one + { 1537, 0x0032, 18, 26, 26, 1, 20, 0, 0, 0x00 }, // two + { 1654, 0x0033, 18, 27, 27, 1, 21, 0, 0, 0x00 }, // three + { 1776, 0x0034, 21, 26, 26, 1, 23, 0, 0, 0x00 }, // four + { 1913, 0x0035, 18, 26, 26, 3, 23, 0, 0, 0x00 }, // five + { 2030, 0x0036, 19, 27, 27, 2, 22, 0, 0, 0x00 }, // six + { 2159, 0x0037, 17, 26, 26, 1, 19, 0, 0, 0x00 }, // seven + { 2270, 0x0038, 19, 27, 27, 2, 23, 0, 0, 0x00 }, // eight + { 2399, 0x0039, 18, 27, 27, 2, 22, 0, 0, 0x00 }, // nine + { 2521, 0x003A, 7, 20, 20, 1, 9, 0, 0, 0x00 }, // colon + { 2556, 0x003B, 8, 25, 20, 1, 11, 0, 0, 0x00 }, // semicolon + { 2606, 0x003C, 13, 16, 21, 3, 20, 0, 0, 0x00 }, // less + { 2658, 0x003D, 20, 13, 19, 3, 26, 0, 0, 0x00 }, // equal + { 2723, 0x003E, 14, 16, 21, 3, 20, 0, 0, 0x00 }, // greater + { 2779, 0x003F, 17, 26, 26, 1, 19, 0, 0, 0x00 }, // question + { 2890, 0x0040, 33, 32, 24, 2, 37, 0, 0, 0x00 }, // at + { 3154, 0x0041, 23, 25, 25, 1, 25, 0, 0, 0x00 }, // A + { 3298, 0x0042, 19, 25, 25, 2, 23, 0, 0, 0x00 }, // B + { 3417, 0x0043, 24, 25, 25, 1, 27, 0, 0, 0x00 }, // C + { 3567, 0x0044, 22, 25, 25, 2, 25, 0, 0, 0x00 }, // D + { 3705, 0x0045, 15, 25, 25, 2, 19, 0, 0, 0x00 }, // E + { 3799, 0x0046, 16, 25, 25, 2, 19, 0, 0, 0x00 }, // F + { 3899, 0x0047, 25, 25, 25, 1, 27, 0, 0, 0x00 }, // G + { 4056, 0x0048, 21, 25, 25, 2, 25, 0, 0, 0x00 }, // H + { 4188, 0x0049, 6, 25, 25, 2, 10, 0, 0, 0x00 }, // I + { 4226, 0x004A, 16, 25, 25, 1, 20, 0, 0, 0x00 }, // J + { 4326, 0x004B, 20, 25, 25, 2, 23, 0, 0, 0x00 }, // K + { 4451, 0x004C, 14, 25, 25, 2, 16, 0, 0, 0x00 }, // L + { 4539, 0x004D, 27, 25, 25, 2, 31, 0, 0, 0x00 }, // M + { 4708, 0x004E, 22, 25, 25, 2, 26, 0, 0, 0x00 }, // N + { 4846, 0x004F, 26, 25, 25, 1, 27, 0, 0, 0x00 }, // O + { 5009, 0x0050, 19, 25, 25, 2, 21, 0, 0, 0x00 }, // P + { 5128, 0x0051, 26, 29, 25, 1, 28, 0, 0, 0x00 }, // Q + { 5317, 0x0052, 19, 25, 25, 2, 22, 0, 0, 0x00 }, // R + { 5436, 0x0053, 18, 25, 25, 2, 21, 0, 0, 0x00 }, // S + { 5549, 0x0054, 18, 25, 25, 1, 20, 0, 0, 0x00 }, // T + { 5662, 0x0055, 20, 25, 25, 2, 24, 0, 0, 0x00 }, // U + { 5787, 0x0056, 25, 25, 25, 0, 25, 0, 0, 0x00 }, // V + { 5944, 0x0057, 34, 25, 25, 1, 36, 0, 0, 0x00 }, // W + { 6157, 0x0058, 22, 25, 25, 1, 24, 0, 0, 0x00 }, // X + { 6295, 0x0059, 22, 25, 25, 0, 22, 0, 0, 0x00 }, // Y + { 6433, 0x005A, 18, 25, 25, 1, 20, 0, 0, 0x00 }, // Z + { 6546, 0x005B, 10, 40, 33, 4, 17, 0, 0, 0x00 }, // bracketleft + { 6646, 0x005C, 15, 40, 34, 6, 26, 0, 0, 0x00 }, // backslash + { 6796, 0x005D, 9, 40, 33, 4, 17, 0, 0, 0x00 }, // bracketright + { 6886, 0x005E, 22, 19, 25, 1, 24, 0, 0, 0x00 }, // asciicircum + { 6991, 0x005F, 22, 5, 255, 3, 28, 0, 0, 0x60 }, // underscore + { 7019, 0x0060, 9, 8, 29, 0, 9, 0, 0, 0x00 }, // grave + { 7037, 0x0061, 21, 20, 20, 1, 24, 0, 0, 0x00 }, // a + { 7142, 0x0062, 21, 27, 27, 2, 24, 0, 0, 0x00 }, // b + { 7284, 0x0063, 19, 20, 20, 1, 21, 0, 0, 0x00 }, // c + { 7379, 0x0064, 21, 27, 27, 1, 24, 0, 0, 0x00 }, // d + { 7521, 0x0065, 20, 20, 20, 1, 22, 0, 0, 0x00 }, // e + { 7621, 0x0066, 12, 28, 28, 0, 12, 0, 0, 0x00 }, // f + { 7705, 0x0067, 21, 29, 20, 1, 24, 0, 0, 0x00 }, // g + { 7858, 0x0068, 19, 27, 27, 2, 23, 0, 0, 0x00 }, // h + { 7987, 0x0069, 6, 28, 28, 2, 10, 0, 0, 0x00 }, // i + { 8029, 0x006A, 9, 37, 28, -1, 10, 0, 0, 0x00 }, // j + { 8113, 0x006B, 18, 27, 27, 2, 20, 0, 0, 0x00 }, // k + { 8235, 0x006C, 6, 27, 27, 2, 10, 0, 0, 0x00 }, // l + { 8276, 0x006D, 33, 20, 20, 2, 37, 0, 0, 0x00 }, // m + { 8441, 0x006E, 19, 20, 20, 2, 23, 0, 0, 0x00 }, // n + { 8536, 0x006F, 20, 20, 20, 1, 22, 0, 0, 0x00 }, // o + { 8636, 0x0070, 21, 29, 20, 2, 24, 0, 0, 0x00 }, // p + { 8789, 0x0071, 21, 29, 20, 1, 24, 0, 0, 0x00 }, // q + { 8942, 0x0072, 12, 20, 20, 2, 14, 0, 0, 0x00 }, // r + { 9002, 0x0073, 17, 20, 20, 1, 19, 0, 0, 0x00 }, // s + { 9087, 0x0074, 12, 25, 25, 1, 14, 0, 0, 0x00 }, // t + { 9162, 0x0075, 19, 20, 20, 2, 23, 0, 0, 0x00 }, // u + { 9257, 0x0076, 21, 20, 20, 0, 21, 0, 0, 0x00 }, // v + { 9362, 0x0077, 29, 20, 20, 0, 30, 0, 0, 0x00 }, // w + { 9507, 0x0078, 19, 20, 20, 0, 19, 0, 0, 0x00 }, // x + { 9602, 0x0079, 21, 29, 20, 0, 21, 0, 0, 0x00 }, // y + { 9755, 0x007A, 15, 20, 20, 1, 17, 0, 0, 0x00 }, // z + { 9830, 0x007B, 11, 40, 33, 4, 18, 0, 0, 0x00 }, // braceleft + { 9940, 0x007C, 5, 33, 29, 3, 11, 0, 0, 0x00 }, // bar + { 9982, 0x007D, 12, 40, 33, 2, 18, 0, 0, 0x00 }, // braceright + { 10102, 0x007E, 19, 7, 15, 1, 21, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 22, 6, 6, 1, 24, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_35_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_35_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_35_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_35_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_35_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_35_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_35_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_35_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_35_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_35_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_35_2bpp(glyphs_Poppins_SemiBold_35_2bpp, 96, 44, 35, 0, 0, 2, 0, 1, 0, unicodes_Poppins_SemiBold_35_2bpp, kerning_Poppins_SemiBold_35_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_35_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_40_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_40_2bpp.cpp new file mode 100644 index 00000000..be1b1a3d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_40_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_40_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 10, 0, 0, 0x00 }, // space + { 0, 0x0021, 8, 29, 29, 3, 14, 0, 0, 0x00 }, // exclam + { 58, 0x0022, 12, 9, 33, 1, 15, 0, 0, 0x00 }, // quotedbl + { 85, 0x0023, 33, 30, 30, 1, 35, 0, 0, 0x00 }, // numbersign + { 333, 0x0024, 21, 36, 32, 2, 26, 0, 0, 0x00 }, // dollar + { 522, 0x0025, 31, 29, 29, 1, 33, 0, 0, 0x00 }, // percent + { 747, 0x0026, 30, 29, 29, 1, 31, 0, 0, 0x00 }, // ampersand + { 965, 0x0027, 6, 9, 33, 1, 8, 0, 0, 0x00 }, // quotesingle + { 979, 0x0028, 15, 46, 38, 4, 19, 0, 0, 0x00 }, // parenleft + { 1152, 0x0029, 15, 46, 38, 0, 19, 0, 0, 0x00 }, // parenright + { 1325, 0x002A, 15, 16, 31, 3, 21, 0, 0, 0x00 }, // asterisk + { 1385, 0x002B, 21, 21, 25, 3, 27, 0, 0, 0x00 }, // plus + { 1496, 0x002C, 9, 12, 7, 0, 10, 0, 0, 0x00 }, // comma + { 1523, 0x002D, 17, 5, 17, 3, 23, 0, 0, 0x00 }, // hyphen + { 1545, 0x002E, 8, 7, 7, 1, 10, 0, 0, 0x00 }, // period + { 1559, 0x002F, 17, 46, 39, 1, 19, 0, 0, 0x00 }, // slash + { 1755, 0x0030, 22, 31, 31, 2, 26, 0, 0, 0x00 }, // zero + { 1926, 0x0031, 10, 30, 30, 1, 14, 0, 0, 0x00 }, // one + { 2001, 0x0032, 21, 30, 30, 1, 23, 0, 0, 0x00 }, // two + { 2159, 0x0033, 20, 31, 31, 2, 24, 0, 0, 0x00 }, // three + { 2314, 0x0034, 23, 30, 30, 2, 26, 0, 0, 0x00 }, // four + { 2487, 0x0035, 21, 30, 30, 3, 26, 0, 0, 0x00 }, // five + { 2645, 0x0036, 22, 31, 31, 2, 26, 0, 0, 0x00 }, // six + { 2816, 0x0037, 20, 30, 30, 1, 22, 0, 0, 0x00 }, // seven + { 2966, 0x0038, 22, 31, 31, 2, 26, 0, 0, 0x00 }, // eight + { 3137, 0x0039, 21, 31, 31, 2, 25, 0, 0, 0x00 }, // nine + { 3300, 0x003A, 8, 23, 23, 1, 11, 0, 0, 0x00 }, // colon + { 3346, 0x003B, 8, 29, 23, 2, 13, 0, 0, 0x00 }, // semicolon + { 3404, 0x003C, 16, 19, 24, 3, 23, 0, 0, 0x00 }, // less + { 3480, 0x003D, 22, 15, 22, 4, 30, 0, 0, 0x00 }, // equal + { 3563, 0x003E, 15, 19, 24, 4, 23, 0, 0, 0x00 }, // greater + { 3635, 0x003F, 19, 30, 30, 1, 22, 0, 0, 0x00 }, // question + { 3778, 0x0040, 36, 35, 27, 3, 42, 0, 0, 0x00 }, // at + { 4093, 0x0041, 27, 29, 29, 1, 29, 0, 0, 0x00 }, // A + { 4289, 0x0042, 22, 29, 29, 2, 26, 0, 0, 0x00 }, // B + { 4449, 0x0043, 28, 29, 29, 1, 31, 0, 0, 0x00 }, // C + { 4652, 0x0044, 26, 29, 29, 2, 29, 0, 0, 0x00 }, // D + { 4841, 0x0045, 17, 29, 29, 2, 21, 0, 0, 0x00 }, // E + { 4965, 0x0046, 18, 29, 29, 2, 21, 0, 0, 0x00 }, // F + { 5096, 0x0047, 29, 29, 29, 1, 31, 0, 0, 0x00 }, // G + { 5307, 0x0048, 24, 29, 29, 2, 29, 0, 0, 0x00 }, // H + { 5481, 0x0049, 7, 29, 29, 2, 11, 0, 0, 0x00 }, // I + { 5532, 0x004A, 18, 29, 29, 1, 23, 0, 0, 0x00 }, // J + { 5663, 0x004B, 24, 29, 29, 2, 27, 0, 0, 0x00 }, // K + { 5837, 0x004C, 16, 29, 29, 2, 18, 0, 0, 0x00 }, // L + { 5953, 0x004D, 32, 29, 29, 2, 36, 0, 0, 0x00 }, // M + { 6185, 0x004E, 25, 29, 29, 2, 29, 0, 0, 0x00 }, // N + { 6367, 0x004F, 29, 29, 29, 1, 31, 0, 0, 0x00 }, // O + { 6578, 0x0050, 21, 29, 29, 2, 24, 0, 0, 0x00 }, // P + { 6731, 0x0051, 29, 34, 29, 1, 31, 0, 0, 0x00 }, // Q + { 6978, 0x0052, 22, 29, 29, 2, 26, 0, 0, 0x00 }, // R + { 7138, 0x0053, 21, 29, 29, 2, 24, 0, 0, 0x00 }, // S + { 7291, 0x0054, 21, 29, 29, 1, 23, 0, 0, 0x00 }, // T + { 7444, 0x0055, 24, 29, 29, 2, 28, 0, 0, 0x00 }, // U + { 7618, 0x0056, 28, 29, 29, 0, 28, 0, 0, 0x00 }, // V + { 7821, 0x0057, 39, 29, 29, 1, 41, 0, 0, 0x00 }, // W + { 8104, 0x0058, 25, 29, 29, 1, 27, 0, 0, 0x00 }, // X + { 8286, 0x0059, 25, 29, 29, 0, 25, 0, 0, 0x00 }, // Y + { 8468, 0x005A, 19, 29, 29, 2, 23, 0, 0, 0x00 }, // Z + { 8606, 0x005B, 11, 46, 38, 5, 20, 0, 0, 0x00 }, // bracketleft + { 8733, 0x005C, 17, 46, 39, 7, 30, 0, 0, 0x00 }, // backslash + { 8929, 0x005D, 11, 46, 38, 4, 20, 0, 0, 0x00 }, // bracketright + { 9056, 0x005E, 25, 22, 29, 1, 27, 0, 0, 0x00 }, // asciicircum + { 9194, 0x005F, 24, 6, 255, 4, 32, 0, 0, 0x60 }, // underscore + { 9230, 0x0060, 10, 9, 33, 0, 11, 0, 0, 0x00 }, // grave + { 9253, 0x0061, 24, 23, 23, 1, 27, 0, 0, 0x00 }, // a + { 9391, 0x0062, 24, 31, 31, 2, 27, 0, 0, 0x00 }, // b + { 9577, 0x0063, 22, 23, 23, 1, 24, 0, 0, 0x00 }, // c + { 9704, 0x0064, 24, 31, 31, 1, 27, 0, 0, 0x00 }, // d + { 9890, 0x0065, 23, 23, 23, 1, 25, 0, 0, 0x00 }, // e + { 10023, 0x0066, 12, 32, 32, 1, 14, 0, 0, 0x00 }, // f + { 10119, 0x0067, 24, 34, 23, 1, 27, 0, 0, 0x00 }, // g + { 10323, 0x0068, 22, 31, 31, 2, 26, 0, 0, 0x00 }, // h + { 10494, 0x0069, 7, 32, 32, 2, 11, 0, 0, 0x00 }, // i + { 10550, 0x006A, 10, 43, 32, -1, 11, 0, 0, 0x00 }, // j + { 10658, 0x006B, 21, 31, 31, 2, 23, 0, 0, 0x00 }, // k + { 10821, 0x006C, 7, 31, 31, 2, 11, 0, 0, 0x00 }, // l + { 10876, 0x006D, 38, 23, 23, 2, 42, 0, 0, 0x00 }, // m + { 11095, 0x006E, 22, 23, 23, 2, 26, 0, 0, 0x00 }, // n + { 11222, 0x006F, 23, 23, 23, 1, 26, 0, 0, 0x00 }, // o + { 11355, 0x0070, 24, 34, 23, 2, 27, 0, 0, 0x00 }, // p + { 11559, 0x0071, 24, 34, 23, 1, 27, 0, 0, 0x00 }, // q + { 11763, 0x0072, 13, 23, 23, 2, 16, 0, 0, 0x00 }, // r + { 11838, 0x0073, 19, 23, 23, 1, 22, 0, 0, 0x00 }, // s + { 11948, 0x0074, 14, 29, 29, 1, 16, 0, 0, 0x00 }, // t + { 12050, 0x0075, 22, 23, 23, 2, 26, 0, 0, 0x00 }, // u + { 12177, 0x0076, 24, 23, 23, 0, 24, 0, 0, 0x00 }, // v + { 12315, 0x0077, 34, 23, 23, 0, 34, 0, 0, 0x00 }, // w + { 12511, 0x0078, 21, 23, 23, 0, 22, 0, 0, 0x00 }, // x + { 12632, 0x0079, 24, 34, 23, 0, 24, 0, 0, 0x00 }, // y + { 12836, 0x007A, 17, 23, 23, 1, 19, 0, 0, 0x00 }, // z + { 12934, 0x007B, 13, 46, 38, 4, 20, 0, 0, 0x00 }, // braceleft + { 13084, 0x007C, 6, 38, 33, 3, 12, 0, 0, 0x00 }, // bar + { 13141, 0x007D, 13, 46, 38, 3, 20, 0, 0, 0x00 }, // braceright + { 13291, 0x007E, 22, 8, 17, 1, 24, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 25, 7, 7, 1, 28, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_40_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_40_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_40_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_40_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_40_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_40_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_40_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_40_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_40_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_40_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_40_2bpp(glyphs_Poppins_SemiBold_40_2bpp, 96, 51, 40, 0, 0, 2, 0, 1, 0, unicodes_Poppins_SemiBold_40_2bpp, kerning_Poppins_SemiBold_40_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_40_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_60_2bpp.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_60_2bpp.cpp new file mode 100644 index 00000000..1a19c11d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/Table_Poppins_SemiBold_60_2bpp.cpp @@ -0,0 +1,130 @@ +// Autogenerated, do not edit + +#include + +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_60_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { + { 0, 0x0020, 0, 0, 0, 0, 14, 0, 0, 0x00 }, // space + { 0, 0x0021, 11, 44, 44, 5, 21, 0, 0, 0x00 }, // exclam + { 121, 0x0022, 18, 13, 48, 2, 22, 0, 0, 0x00 }, // quotedbl + { 180, 0x0023, 50, 45, 45, 1, 53, 0, 0, 0x00 }, // numbersign + { 743, 0x0024, 31, 53, 48, 3, 39, 0, 0, 0x00 }, // dollar + { 1154, 0x0025, 46, 44, 43, 2, 50, 0, 0, 0x00 }, // percent + { 1660, 0x0026, 45, 44, 43, 2, 47, 0, 0, 0x00 }, // ampersand + { 2155, 0x0027, 8, 13, 48, 2, 12, 0, 0, 0x00 }, // quotesingle + { 2181, 0x0028, 22, 68, 56, 6, 29, 0, 0, 0x00 }, // parenleft + { 2555, 0x0029, 22, 68, 56, 1, 29, 0, 0, 0x00 }, // parenright + { 2929, 0x002A, 23, 23, 45, 4, 31, 0, 0, 0x00 }, // asterisk + { 3062, 0x002B, 31, 31, 37, 5, 40, 0, 0, 0x00 }, // plus + { 3303, 0x002C, 12, 17, 9, 1, 15, 0, 0, 0x00 }, // comma + { 3354, 0x002D, 26, 7, 25, 4, 35, 0, 0, 0x00 }, // hyphen + { 3400, 0x002E, 11, 10, 10, 2, 16, 0, 0, 0x00 }, // period + { 3428, 0x002F, 25, 68, 57, 2, 29, 0, 0, 0x00 }, // slash + { 3853, 0x0030, 33, 45, 45, 3, 39, 0, 0, 0x00 }, // zero + { 4225, 0x0031, 15, 44, 44, 2, 22, 0, 0, 0x00 }, // one + { 4390, 0x0032, 31, 44, 45, 2, 34, 0, 0, 0x00 }, // two + { 4731, 0x0033, 31, 45, 45, 2, 36, 0, 0, 0x00 }, // three + { 5080, 0x0034, 36, 44, 44, 2, 40, 0, 0, 0x00 }, // four + { 5476, 0x0035, 31, 44, 44, 5, 39, 0, 0, 0x00 }, // five + { 5817, 0x0036, 31, 45, 45, 4, 38, 0, 0, 0x00 }, // six + { 6166, 0x0037, 29, 44, 44, 2, 33, 0, 0, 0x00 }, // seven + { 6485, 0x0038, 32, 46, 45, 3, 39, 0, 0, 0x00 }, // eight + { 6853, 0x0039, 31, 45, 45, 4, 38, 0, 0, 0x00 }, // nine + { 7202, 0x003A, 11, 34, 34, 2, 16, 0, 0, 0x00 }, // colon + { 7296, 0x003B, 13, 43, 34, 2, 19, 0, 0, 0x00 }, // semicolon + { 7436, 0x003C, 23, 27, 35, 5, 35, 0, 0, 0x00 }, // less + { 7592, 0x003D, 34, 22, 33, 5, 44, 0, 0, 0x00 }, // equal + { 7779, 0x003E, 24, 27, 35, 5, 34, 0, 0, 0x00 }, // greater + { 7941, 0x003F, 28, 44, 44, 2, 32, 0, 0, 0x00 }, // question + { 8249, 0x0040, 55, 53, 40, 4, 63, 0, 0, 0x00 }, // at + { 8978, 0x0041, 41, 42, 42, 1, 43, 0, 0, 0x00 }, // A + { 9409, 0x0042, 32, 42, 42, 4, 39, 0, 0, 0x00 }, // B + { 9745, 0x0043, 41, 43, 43, 2, 46, 0, 0, 0x00 }, // C + { 10186, 0x0044, 37, 42, 42, 4, 43, 0, 0, 0x00 }, // D + { 10575, 0x0045, 25, 42, 42, 4, 32, 0, 0, 0x00 }, // E + { 10838, 0x0046, 26, 42, 42, 4, 32, 0, 0, 0x00 }, // F + { 11111, 0x0047, 42, 43, 43, 2, 46, 0, 0, 0x00 }, // G + { 11563, 0x0048, 35, 42, 42, 4, 43, 0, 0, 0x00 }, // H + { 11931, 0x0049, 9, 42, 42, 4, 17, 0, 0, 0x00 }, // I + { 12026, 0x004A, 27, 42, 42, 2, 34, 0, 0, 0x00 }, // J + { 12310, 0x004B, 34, 42, 42, 4, 40, 0, 0, 0x00 }, // K + { 12667, 0x004C, 23, 42, 42, 4, 28, 0, 0, 0x00 }, // L + { 12909, 0x004D, 46, 42, 42, 4, 54, 0, 0, 0x00 }, // M + { 13392, 0x004E, 36, 42, 42, 4, 44, 0, 0, 0x00 }, // N + { 13770, 0x004F, 43, 43, 43, 2, 47, 0, 0, 0x00 }, // O + { 14233, 0x0050, 31, 42, 42, 4, 36, 0, 0, 0x00 }, // P + { 14559, 0x0051, 44, 50, 43, 2, 47, 0, 0, 0x00 }, // Q + { 15109, 0x0052, 32, 42, 42, 4, 38, 0, 0, 0x00 }, // R + { 15445, 0x0053, 31, 43, 43, 3, 37, 0, 0, 0x00 }, // S + { 15779, 0x0054, 31, 42, 42, 2, 35, 0, 0, 0x00 }, // T + { 16105, 0x0055, 34, 42, 42, 4, 42, 0, 0, 0x00 }, // U + { 16462, 0x0056, 41, 42, 42, 1, 43, 0, 0, 0x00 }, // V + { 16893, 0x0057, 59, 42, 42, 1, 61, 0, 0, 0x00 }, // W + { 17513, 0x0058, 37, 42, 42, 2, 41, 0, 0, 0x00 }, // X + { 17902, 0x0059, 37, 42, 42, 1, 38, 0, 0, 0x00 }, // Y + { 18291, 0x005A, 29, 42, 42, 3, 35, 0, 0, 0x00 }, // Z + { 18596, 0x005B, 15, 68, 56, 8, 30, 0, 0, 0x00 }, // bracketleft + { 18851, 0x005C, 26, 68, 57, 10, 45, 0, 0, 0x00 }, // backslash + { 19293, 0x005D, 16, 68, 56, 6, 30, 0, 0, 0x00 }, // bracketright + { 19565, 0x005E, 37, 32, 42, 2, 41, 0, 0, 0x00 }, // asciicircum + { 19861, 0x005F, 36, 8, 254, 6, 47, 0, 0, 0x60 }, // underscore + { 19933, 0x0060, 15, 13, 49, 0, 16, 0, 0, 0x00 }, // grave + { 19982, 0x0061, 35, 35, 34, 2, 41, 0, 0, 0x00 }, // a + { 20289, 0x0062, 35, 46, 45, 4, 41, 0, 0, 0x00 }, // b + { 20692, 0x0063, 32, 35, 34, 2, 36, 0, 0, 0x00 }, // c + { 20972, 0x0064, 35, 46, 45, 2, 41, 0, 0, 0x00 }, // d + { 21375, 0x0065, 33, 35, 34, 2, 37, 0, 0, 0x00 }, // e + { 21664, 0x0066, 19, 47, 47, 1, 21, 0, 0, 0x00 }, // f + { 21888, 0x0067, 35, 51, 34, 2, 41, 0, 0, 0x00 }, // g + { 22335, 0x0068, 32, 45, 45, 4, 40, 0, 0, 0x00 }, // h + { 22695, 0x0069, 11, 47, 47, 3, 17, 0, 0, 0x00 }, // i + { 22825, 0x006A, 16, 63, 47, -2, 17, 0, 0, 0x00 }, // j + { 23077, 0x006B, 31, 45, 45, 4, 35, 0, 0, 0x00 }, // k + { 23426, 0x006C, 9, 45, 45, 4, 17, 0, 0, 0x00 }, // l + { 23528, 0x006D, 55, 34, 34, 4, 63, 0, 0, 0x00 }, // m + { 23996, 0x006E, 32, 34, 34, 4, 40, 0, 0, 0x00 }, // n + { 24268, 0x006F, 35, 35, 34, 2, 38, 0, 0, 0x00 }, // o + { 24575, 0x0070, 35, 50, 34, 4, 41, 0, 0, 0x00 }, // p + { 25013, 0x0071, 35, 50, 34, 2, 41, 0, 0, 0x00 }, // q + { 25451, 0x0072, 19, 34, 34, 4, 24, 0, 0, 0x00 }, // r + { 25613, 0x0073, 28, 35, 34, 2, 33, 0, 0, 0x00 }, // s + { 25858, 0x0074, 21, 42, 42, 1, 23, 0, 0, 0x00 }, // t + { 26079, 0x0075, 32, 33, 33, 4, 40, 0, 0, 0x00 }, // u + { 26343, 0x0076, 35, 33, 33, 0, 36, 0, 0, 0x00 }, // v + { 26632, 0x0077, 50, 33, 33, 0, 51, 0, 0, 0x00 }, // w + { 27045, 0x0078, 32, 33, 33, 0, 32, 0, 0, 0x00 }, // x + { 27309, 0x0079, 36, 49, 33, 0, 36, 0, 0, 0x00 }, // y + { 27750, 0x007A, 25, 33, 33, 2, 29, 0, 0, 0x00 }, // z + { 27957, 0x007B, 20, 68, 56, 6, 30, 0, 0, 0x00 }, // braceleft + { 28297, 0x007C, 9, 56, 49, 5, 19, 0, 0, 0x00 }, // bar + { 28423, 0x007D, 19, 68, 56, 5, 30, 0, 0, 0x00 }, // braceright + { 28746, 0x007E, 32, 12, 25, 2, 36, 0, 0, 0x00 }, // asciitilde + { 0, 0x2026, 38, 10, 10, 2, 42, 0, 0, 0x00 } // ellipsis +}; + +// GSUB tables: + +// Poppins_SemiBold_60_2bpp +FONT_TABLE_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::GlyphNode glyphs_Poppins_SemiBold_60_2bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_60_2bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_GLYPH_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t unicodes_Poppins_SemiBold_60_2bpp_4[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE; +FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA +KEEP extern const uint8_t* const unicodes_Poppins_SemiBold_60_2bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = { + unicodes_Poppins_SemiBold_60_2bpp_0, + 0, + 0, + 0, + unicodes_Poppins_SemiBold_60_2bpp_4 +}; +FONT_KERNING_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::KerningNode kerning_Poppins_SemiBold_60_2bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_60_2bpp(); + +touchgfx::GeneratedFont& getFont_Poppins_SemiBold_60_2bpp() +{ + static touchgfx::GeneratedFont Poppins_SemiBold_60_2bpp(glyphs_Poppins_SemiBold_60_2bpp, 96, 77, 60, 0, 0, 2, 0, 2, 0, unicodes_Poppins_SemiBold_60_2bpp, kerning_Poppins_SemiBold_60_2bpp, 63, 8230, 0, 0); + return Poppins_SemiBold_60_2bpp; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/UnmappedDataFont.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/UnmappedDataFont.cpp new file mode 100644 index 00000000..a4386692 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/UnmappedDataFont.cpp @@ -0,0 +1,236 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include +#include + +namespace touchgfx +{ +GlyphNode UnmappedDataFont::glyphNodeBuffer; + +UnmappedDataFont::UnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodeList, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable) + : Font(height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, fallbackChar, ellipsisChar), + glyphList(glyphs), + listSize(numGlyphs), + unicodes(unicodeList), + glyphDataList(glyphDataList), + kerningData(kerningList), + gsubTable(gsubData), + arabicTable(formsTable) +{ +} + +const GlyphNode* UnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const +{ + int index = lookupUnicode(unicode); + + if (index != -1) + { + // Read glyphNode from unmapped flash + touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader(); + if (flashReader) + { + flashReader->copyData(glyphList + index, &glyphNodeBuffer, sizeof(GlyphNode)); + + pixelData = getPixelData(const_cast(&glyphNodeBuffer)); + bitsPerPixel = getBitsPerPixel(); + return &glyphNodeBuffer; + } + } + return 0; +} + +const uint8_t* UnmappedDataFont::getPixelData(const GlyphNode* glyph) const +{ + const uint8_t* const* table = (const uint8_t* const*)glyphDataList; + return &(table[glyph->unicode / 2048][glyph->dataOffset]); +} + +int8_t UnmappedDataFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const +{ + if (!glyph || glyph->kerningTableSize == 0) + { + return 0; + } + + const KerningNode* kerndata = kerningData + glyph->kerningTablePos(); + for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++) + { + if (prevChar == kerndata->unicodePrevChar) + { + return kerndata->distance; + } + if (prevChar < kerndata->unicodePrevChar) + { + break; + } + } + return 0; +} + +int UnmappedDataFont::lookupUnicode(uint16_t unicode) const +{ + int32_t min = 0; + int32_t max = listSize - 1; + + int32_t mid = min + (unicode - unicodes[min]); // Linear up from [min].unicode + if (mid < min) + { + // Unicode < unicodes[min] => not found + return -1; + } + if (mid > max) + { + // Linear up ends too high + mid = max - (unicodes[max] - unicode); // Linear down from [max].unicode + if (mid > max) + { + // Unicode > unicodes[max] => not found + return -1; + } + if (mid < min) + { + // Linear down ends too low, take the middle element + mid = (min + max) / 2; + } + } + while (min <= max) + { + if (unicode == unicodes[mid]) + { + // Found at [mid] + return mid; + } + if (unicode < unicodes[mid]) + { + // Unicode is in lower half + max = mid - 1; + if (max < min) + { + // Range is empty => not found + break; + } + // We adjusted max, try linear down from [max].unicode + mid = max - (unicodes[max] - unicode); + if (mid > max) + { + // Unicode > [max].unicode => not found + break; + } + if (mid < min) + { + // Linear down ends too low, take the middle element + mid = (min + max) / 2; + } + } + else + { + // Unicode is in upper half + min = mid + 1; + if (min > max) + { + // Range is empty => not found + break; + } + // We adjusted min, try linear up from [min].unicode + mid = min + (unicode - unicodes[min]); + if (mid < min) + { + // Unicode < [min].unicode => not found + break; + } + if (mid > max) + { + // Linear up ends too high, take the middle element + mid = (min + max) / 2; + } + } + } + return -1; +} + +CompressedUnmappedDataFont::CompressedUnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodes, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable) + : UnmappedDataFont(glyphs, unicodes, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, glyphDataList, kerningList, fallbackChar, ellipsisChar, gsubData, formsTable) +{ +} + +const GlyphNode* CompressedUnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode) const +{ + const int index = lookupUnicode(unicode); + if (index != -1) + { + const GlyphNode* glyphNode = glyphList + index; + + // Is the GlyphNode already cached + const GlyphNode* cachedNode = CompressedUnmappedFontCache::hasCachedGlyphNode(glyphNode); + if (cachedNode) + { + return cachedNode; + } + + // Read glyphNode from unmapped flash + touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader(); + if (flashReader) + { + GlyphNode* newGlyphNode = CompressedUnmappedFontCache::cacheGlyphNode(glyphNode); + flashReader->copyData(glyphList + index, (uint8_t*)newGlyphNode, sizeof(GlyphNode)); + return newGlyphNode; + } + } + + return 0; +} + +const GlyphNode* CompressedUnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const +{ + const int index = lookupUnicode(unicode); + if (index != -1) + { + const GlyphNode* glyphNode = glyphList + index; + const uint8_t* pixels = 0; + const GlyphNode* cachedNode = CompressedUnmappedFontCache::hasCachedGlyphData(glyphNode, pixels); + if (pixels) + { + pixelData = pixels; + bitsPerPixel = 4; + return cachedNode; + } + + // Cache glyphNode if not found already + if (cachedNode == 0) + { + cachedNode = getGlyph(unicode); + } + if (cachedNode->width() == 0) + { + bitsPerPixel = 4; + pixelData = 0; + return cachedNode; + } + + // Read data from unmapped flash + touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader(); + if (flashReader) + { + const uint8_t* const* table = (const uint8_t* const*)glyphDataList; + const uint32_t dataOffset = cachedNode->dataOffset & 0x3FFFFFFF; + const uint8_t* compressedData = &(table[unicode / 2048][dataOffset]); + const uint8_t* cachedData = CompressedUnmappedFontCache::cacheGlyphData(glyphNode, compressedData, flashReader); + if (cachedData) + { + bitsPerPixel = 4; + pixelData = cachedData; + return cachedNode; + } + } + } + return 0; +} + +const uint8_t* CompressedUnmappedDataFont::getPixelData(const GlyphNode* glyph) const +{ + return 0; +} +} // namespace touchgfx diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/VectorFontRendererBuffers.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/VectorFontRendererBuffers.cpp new file mode 100644 index 00000000..aa41900b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/fonts/src/VectorFontRendererBuffers.cpp @@ -0,0 +1,11 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ +#include + +void touchgfx::VectorFontRendererImpl::getVectorFontBuffers(float*& pointArray, int& pointArraySize, uint8_t*& commandArray, int& commandArraySize) +{ + pointArray = 0; + pointArraySize = 0; + commandArray = 0; + commandArraySize = 0; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/FrontendApplicationBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/FrontendApplicationBase.hpp new file mode 100644 index 00000000..d9386280 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/FrontendApplicationBase.hpp @@ -0,0 +1,107 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef FRONTENDAPPLICATIONBASE_HPP +#define FRONTENDAPPLICATIONBASE_HPP + +#include +#include + +class FrontendHeap; + +class FrontendApplicationBase : public touchgfx::MVPApplication +{ +public: + FrontendApplicationBase(Model& m, FrontendHeap& heap); + virtual ~FrontendApplicationBase() { } + + virtual void changeToStartScreen() + { + gotoMainScreenNoTransition(); + } + + // Main + void gotoMainScreenNoTransition(); + + // MenuSettings + void gotoMenuSettingsScreenNoTransition(); + + // MenuAlerts + void gotoMenuAlertsScreenNoTransition(); + + // MenuTime + void gotoMenuTimeScreenNoTransition(); + + // MenuTimeSaved + void gotoMenuTimeSavedScreenNoTransition(); + + // TrackStartConfirmation + void gotoTrackStartConfirmationScreenNoTransition(); + + // Track + void gotoTrackScreenNoTransition(); + + // TrackLap + void gotoTrackLapScreenNoTransition(); + + // TrackAction + void gotoTrackActionScreenNoTransition(); + + // TrackDiscardConfirmation + void gotoTrackDiscardConfirmationScreenNoTransition(); + + // TrackDiscarded + void gotoTrackDiscardedScreenNoTransition(); + + // TrackSaved + void gotoTrackSavedScreenNoTransition(); + + // TrackSummary + void gotoTrackSummaryScreenNoTransition(); + +protected: + touchgfx::Callback transitionCallback; + FrontendHeap& frontendHeap; + Model& model; + + // Main + void gotoMainScreenNoTransitionImpl(); + + // MenuSettings + void gotoMenuSettingsScreenNoTransitionImpl(); + + // MenuAlerts + void gotoMenuAlertsScreenNoTransitionImpl(); + + // MenuTime + void gotoMenuTimeScreenNoTransitionImpl(); + + // MenuTimeSaved + void gotoMenuTimeSavedScreenNoTransitionImpl(); + + // TrackStartConfirmation + void gotoTrackStartConfirmationScreenNoTransitionImpl(); + + // Track + void gotoTrackScreenNoTransitionImpl(); + + // TrackLap + void gotoTrackLapScreenNoTransitionImpl(); + + // TrackAction + void gotoTrackActionScreenNoTransitionImpl(); + + // TrackDiscardConfirmation + void gotoTrackDiscardConfirmationScreenNoTransitionImpl(); + + // TrackDiscarded + void gotoTrackDiscardedScreenNoTransitionImpl(); + + // TrackSaved + void gotoTrackSavedScreenNoTransitionImpl(); + + // TrackSummary + void gotoTrackSummaryScreenNoTransitionImpl(); +}; + +#endif // FRONTENDAPPLICATIONBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/FrontendHeapBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/FrontendHeapBase.hpp new file mode 100644 index 00000000..28f44ca8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/FrontendHeapBase.hpp @@ -0,0 +1,135 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef FRONTENDHEAPBASE_HPP +#define FRONTENDHEAPBASE_HPP + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + * This class provides the memory that shall be used for memory allocations + * in the frontend. A single instance of the FrontendHeap is allocated once (in heap + * memory), and all other frontend objects such as views, presenters and data model are + * allocated within the scope of this FrontendHeap. As such, the RAM usage of the entire + * user interface is sizeof(FrontendHeap). + * + * @note The FrontendHeap reserves memory for the most memory-consuming presenter and + * view only. The largest of these classes are determined at compile-time using template + * magic. As such, it is important to add all presenters, views and transitions to the + * type lists in this class. + * + */ +class FrontendHeapBase : public touchgfx::MVPHeap +{ +public: + /** + * A list of all view types. Must end with meta::Nil. + * @note All view types used in the application MUST be added to this list! + */ + typedef touchgfx::meta::TypeList< MainView, + touchgfx::meta::TypeList< MenuSettingsView, + touchgfx::meta::TypeList< MenuAlertsView, + touchgfx::meta::TypeList< MenuTimeView, + touchgfx::meta::TypeList< MenuTimeSavedView, + touchgfx::meta::TypeList< TrackStartConfirmationView, + touchgfx::meta::TypeList< TrackView, + touchgfx::meta::TypeList< TrackLapView, + touchgfx::meta::TypeList< TrackActionView, + touchgfx::meta::TypeList< TrackDiscardConfirmationView, + touchgfx::meta::TypeList< TrackDiscardedView, + touchgfx::meta::TypeList< TrackSavedView, + touchgfx::meta::TypeList< TrackSummaryView, + touchgfx::meta::Nil > > > > > > > > > > > > + > GeneratedViewTypes; + + /** + * Determine (compile time) the View type of largest size. + */ + typedef touchgfx::meta::select_type_maxsize< GeneratedViewTypes >::type MaxGeneratedViewType; + + /** + * A list of all presenter types. Must end with meta::Nil. + * @note All presenter types used in the application MUST be added to this list! + */ + typedef touchgfx::meta::TypeList< MainPresenter, + touchgfx::meta::TypeList< MenuSettingsPresenter, + touchgfx::meta::TypeList< MenuAlertsPresenter, + touchgfx::meta::TypeList< MenuTimePresenter, + touchgfx::meta::TypeList< MenuTimeSavedPresenter, + touchgfx::meta::TypeList< TrackStartConfirmationPresenter, + touchgfx::meta::TypeList< TrackPresenter, + touchgfx::meta::TypeList< TrackLapPresenter, + touchgfx::meta::TypeList< TrackActionPresenter, + touchgfx::meta::TypeList< TrackDiscardConfirmationPresenter, + touchgfx::meta::TypeList< TrackDiscardedPresenter, + touchgfx::meta::TypeList< TrackSavedPresenter, + touchgfx::meta::TypeList< TrackSummaryPresenter, + touchgfx::meta::Nil > > > > > > > > > > > > + > GeneratedPresenterTypes; + + /** + * Determine (compile time) the Presenter type of largest size. + */ + typedef touchgfx::meta::select_type_maxsize< GeneratedPresenterTypes >::type MaxGeneratedPresenterType; + + /** + * A list of all transition types. Must end with meta::Nil. + * @note All transition types used in the application MUST be added to this list! + */ + typedef touchgfx::meta::TypeList< touchgfx::NoTransition, + touchgfx::meta::Nil + > GeneratedTransitionTypes; + + /** + * Determine (compile time) the Transition type of largest size. + */ + typedef touchgfx::meta::select_type_maxsize< GeneratedTransitionTypes >::type MaxGeneratedTransitionType; + + virtual void gotoStartScreen(FrontendApplication& app) + { + app.gotoMainScreenNoTransition(); + } +protected: + FrontendHeapBase(touchgfx::AbstractPartition& presenters, touchgfx::AbstractPartition& views, touchgfx::AbstractPartition& transitions, FrontendApplication& app) + : MVPHeap(presenters, views, transitions, app) + { + + } + +}; + +#endif // FRONTENDHEAPBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/SimConstants.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/SimConstants.hpp new file mode 100644 index 00000000..712aaf1c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/common/SimConstants.hpp @@ -0,0 +1,11 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef SIMCONSTANTS_HPP +#define SIMCONSTANTS_HPP + +static unsigned short SIM_WIDTH = 240; +static unsigned short SIM_HEIGHT = 240; +#define SIM_TITLE "WorkoutGUI" + +#endif // SIMCONSTANTS_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/BatteryBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/BatteryBase.hpp new file mode 100644 index 00000000..94fdca1c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/BatteryBase.hpp @@ -0,0 +1,55 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef BATTERYBASE_HPP +#define BATTERYBASE_HPP + +#include +#include +#include +#include +#include + +class BatteryBase : public touchgfx::Container +{ +public: + BatteryBase(); + virtual ~BatteryBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box s1box; + touchgfx::Line s1line1; + touchgfx::PainterABGR2222 s1line1Painter; + touchgfx::Line s1line2; + touchgfx::PainterABGR2222 s1line2Painter; + touchgfx::Box s2box; + touchgfx::Line s2line1; + touchgfx::PainterABGR2222 s2line1Painter; + touchgfx::Line s2line2; + touchgfx::PainterABGR2222 s2line2Painter; + touchgfx::Box s3box; + touchgfx::Line s3line1; + touchgfx::PainterABGR2222 s3line1Painter; + touchgfx::Line s3line2; + touchgfx::PainterABGR2222 s3line2Painter; + touchgfx::Box s4box; + touchgfx::Line s4line1; + touchgfx::PainterABGR2222 s4line1Painter; + touchgfx::Line s4line2; + touchgfx::PainterABGR2222 s4line2Painter; + touchgfx::Line s4line3; + touchgfx::PainterABGR2222 s4line3Painter; + +private: + +}; + +#endif // BATTERYBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ButtonsBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ButtonsBase.hpp new file mode 100644 index 00000000..a03f1f07 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ButtonsBase.hpp @@ -0,0 +1,40 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef BUTTONSBASE_HPP +#define BUTTONSBASE_HPP + +#include +#include +#include +#include + +class ButtonsBase : public touchgfx::Container +{ +public: + ButtonsBase(); + virtual ~ButtonsBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Circle bL1; + touchgfx::PainterABGR2222 bL1Painter; + touchgfx::Circle bL2; + touchgfx::PainterABGR2222 bL2Painter; + touchgfx::Circle bR2; + touchgfx::PainterABGR2222 bR2Painter; + touchgfx::Circle bR1; + touchgfx::PainterABGR2222 bR1Painter; + +private: + +}; + +#endif // BUTTONSBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/HeartRateZoneBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/HeartRateZoneBase.hpp new file mode 100644 index 00000000..7d6fb3c0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/HeartRateZoneBase.hpp @@ -0,0 +1,37 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef HEARTRATEZONEBASE_HPP +#define HEARTRATEZONEBASE_HPP + +#include +#include +#include + +class HeartRateZoneBase : public touchgfx::Container +{ +public: + HeartRateZoneBase(); + virtual ~HeartRateZoneBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Image group; + touchgfx::Image hr1; + touchgfx::Image hr2; + touchgfx::Image hr3; + touchgfx::Image hr4; + touchgfx::Image hr5; + +private: + +}; + +#endif // HEARTRATEZONEBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/InfoCarouselBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/InfoCarouselBase.hpp new file mode 100644 index 00000000..1a1818f8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/InfoCarouselBase.hpp @@ -0,0 +1,45 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef INFOCAROUSELBASE_HPP +#define INFOCAROUSELBASE_HPP + +#include +#include +#include +#include +#include + +class InfoCarouselBase : public touchgfx::Container +{ +public: + InfoCarouselBase(); + virtual ~InfoCarouselBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Line line; + touchgfx::PainterABGR2222 linePainter; + touchgfx::TextAreaWithOneWildcard dataValue; + touchgfx::TextAreaWithOneWildcard titleText; + + /* + * Wildcard Buffers + */ + static const uint16_t DATAVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar dataValueBuffer[DATAVALUE_SIZE]; + static const uint16_t TITLETEXT_SIZE = 15; + touchgfx::Unicode::UnicodeChar titleTextBuffer[TITLETEXT_SIZE]; + +private: + +}; + +#endif // INFOCAROUSELBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/LapListItemBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/LapListItemBase.hpp new file mode 100644 index 00000000..7c066c31 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/LapListItemBase.hpp @@ -0,0 +1,47 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef LAPLISTITEMBASE_HPP +#define LAPLISTITEMBASE_HPP + +#include +#include +#include + +class LapListItemBase : public touchgfx::Container +{ +public: + LapListItemBase(); + virtual ~LapListItemBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextAreaWithOneWildcard maxHRText; + touchgfx::TextAreaWithOneWildcard avgHRText; + touchgfx::TextAreaWithOneWildcard timeText; + touchgfx::TextAreaWithOneWildcard indexText; + + /* + * Wildcard Buffers + */ + static const uint16_t MAXHRTEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar maxHRTextBuffer[MAXHRTEXT_SIZE]; + static const uint16_t AVGHRTEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar avgHRTextBuffer[AVGHRTEXT_SIZE]; + static const uint16_t TIMETEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar timeTextBuffer[TIMETEXT_SIZE]; + static const uint16_t INDEXTEXT_SIZE = 5; + touchgfx::Unicode::UnicodeChar indexTextBuffer[INDEXTEXT_SIZE]; + +private: + +}; + +#endif // LAPLISTITEMBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuBackgroundBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuBackgroundBase.hpp new file mode 100644 index 00000000..a0e7ba70 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuBackgroundBase.hpp @@ -0,0 +1,34 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MAINMENUBACKGROUNDBASE_HPP +#define MAINMENUBACKGROUNDBASE_HPP + +#include +#include +#include +#include + +class MainMenuBackgroundBase : public touchgfx::Container +{ +public: + MainMenuBackgroundBase(); + virtual ~MainMenuBackgroundBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Circle circle; + touchgfx::PainterABGR2222 circlePainter; + +private: + +}; + +#endif // MAINMENUBACKGROUNDBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuBase.hpp new file mode 100644 index 00000000..461d74a9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuBase.hpp @@ -0,0 +1,58 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MAINMENUBASE_HPP +#define MAINMENUBASE_HPP + +#include +#include +#include +#include +#include +#include + +class MainMenuBase : public touchgfx::Container +{ +public: + MainMenuBase(); + virtual ~MainMenuBase(); + virtual void initialize(); + + virtual void wheelUpdateItem(MainMenuItem& item, int16_t itemIndex) + { + // Override and implement this function in MainMenu + } + + virtual void wheelUpdateCenterItem(MainMenuCenterItem& item, int16_t itemIndex) + { + // Override and implement this function in MainMenu + } + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::ScrollWheelWithSelectionStyle wheel; + touchgfx::DrawableListItems wheelListItems; + touchgfx::DrawableListItems wheelSelectedListItems; + ScrollIndicator scrollIndicator; + +private: + + /* + * Callback Declarations + */ + touchgfx::Callback updateItemCallback; + + /* + * Callback Handler Declarations + */ + void updateItemCallbackHandler(touchgfx::DrawableListItemsInterface* items, int16_t containerIndex, int16_t itemIndex); + +}; + +#endif // MAINMENUBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuCenterItemBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuCenterItemBase.hpp new file mode 100644 index 00000000..b3b6648e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuCenterItemBase.hpp @@ -0,0 +1,45 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MAINMENUCENTERITEMBASE_HPP +#define MAINMENUCENTERITEMBASE_HPP + +#include +#include +#include +#include +#include + +class MainMenuCenterItemBase : public touchgfx::Container +{ +public: + MainMenuCenterItemBase(); + virtual ~MainMenuCenterItemBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextAreaWithOneWildcard tipText; + touchgfx::TextAreaWithOneWildcard labelText; + Toggle toggle; + touchgfx::Image icon; + + /* + * Wildcard Buffers + */ + static const uint16_t TIPTEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar tipTextBuffer[TIPTEXT_SIZE]; + static const uint16_t LABELTEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar labelTextBuffer[LABELTEXT_SIZE]; + +private: + +}; + +#endif // MAINMENUCENTERITEMBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuItemBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuItemBase.hpp new file mode 100644 index 00000000..71ed036f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuItemBase.hpp @@ -0,0 +1,43 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MAINMENUITEMBASE_HPP +#define MAINMENUITEMBASE_HPP + +#include +#include +#include +#include + +class MainMenuItemBase : public touchgfx::Container +{ +public: + MainMenuItemBase(); + virtual ~MainMenuItemBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextAreaWithOneWildcard tipText; + touchgfx::TextAreaWithOneWildcard labelText; + touchgfx::Image icon; + + /* + * Wildcard Buffers + */ + static const uint16_t TIPTEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar tipTextBuffer[TIPTEXT_SIZE]; + static const uint16_t LABELTEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar labelTextBuffer[LABELTEXT_SIZE]; + +private: + +}; + +#endif // MAINMENUITEMBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuLayoutBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuLayoutBase.hpp new file mode 100644 index 00000000..54bc0235 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/MainMenuLayoutBase.hpp @@ -0,0 +1,46 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MAINMENULAYOUTBASE_HPP +#define MAINMENULAYOUTBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class MainMenuLayoutBase : public touchgfx::Container +{ +public: + MainMenuLayoutBase(); + virtual ~MainMenuLayoutBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + MainMenuBackground background; + Buttons buttons; + MainMenu menu; + touchgfx::TextAreaWithOneWildcard infoText; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t INFOTEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar infoTextBuffer[INFOTEXT_SIZE]; + +private: + +}; + +#endif // MAINMENULAYOUTBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/PauseIndicatorBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/PauseIndicatorBase.hpp new file mode 100644 index 00000000..9970393a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/PauseIndicatorBase.hpp @@ -0,0 +1,44 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef PAUSEINDICATORBASE_HPP +#define PAUSEINDICATORBASE_HPP + +#include +#include +#include +#include +#include +#include + +class PauseIndicatorBase : public touchgfx::Container +{ +public: + PauseIndicatorBase(); + virtual ~PauseIndicatorBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Circle background; + touchgfx::PainterABGR2222 backgroundPainter; + touchgfx::TextAreaWithOneWildcard timerValue; + touchgfx::Image pauseIcon; + + /* + * Wildcard Buffers + */ + static const uint16_t TIMERVALUE_SIZE = 32; + touchgfx::Unicode::UnicodeChar timerValueBuffer[TIMERVALUE_SIZE]; + +private: + +}; + +#endif // PAUSEINDICATORBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ScrollIndicatorBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ScrollIndicatorBase.hpp new file mode 100644 index 00000000..fe3b09f5 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ScrollIndicatorBase.hpp @@ -0,0 +1,38 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef SCROLLINDICATORBASE_HPP +#define SCROLLINDICATORBASE_HPP + +#include +#include +#include +#include + +class ScrollIndicatorBase : public touchgfx::Container +{ +public: + ScrollIndicatorBase(); + virtual ~ScrollIndicatorBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Circle rail; + touchgfx::PainterABGR2222 railPainter; + touchgfx::Circle handle; + touchgfx::PainterABGR2222 handlePainter; + touchgfx::Circle handleOvf; + touchgfx::PainterABGR2222 handleOvfPainter; + +private: + +}; + +#endif // SCROLLINDICATORBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceCalBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceCalBase.hpp new file mode 100644 index 00000000..94326522 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceCalBase.hpp @@ -0,0 +1,66 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef SUMMARYFACECALBASE_HPP +#define SUMMARYFACECALBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class SummaryFaceCalBase : public touchgfx::Container +{ +public: + SummaryFaceCalBase(); + virtual ~SummaryFaceCalBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextAreaWithOneWildcard restingValue; + touchgfx::TextAreaWithOneWildcard restingText; + touchgfx::Line line2; + touchgfx::PainterABGR2222 line2Painter; + touchgfx::TextAreaWithOneWildcard activeValue; + touchgfx::TextAreaWithOneWildcard activeText; + touchgfx::Line line1; + touchgfx::PainterABGR2222 line1Painter; + touchgfx::TextAreaWithOneWildcard totalValue; + touchgfx::TextAreaWithOneWildcard totalText; + touchgfx::TextAreaWithOneWildcard timerValue; + touchgfx::Image clockIcon; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t RESTINGVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar restingValueBuffer[RESTINGVALUE_SIZE]; + static const uint16_t RESTINGTEXT_SIZE = 14; + touchgfx::Unicode::UnicodeChar restingTextBuffer[RESTINGTEXT_SIZE]; + static const uint16_t ACTIVEVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar activeValueBuffer[ACTIVEVALUE_SIZE]; + static const uint16_t ACTIVETEXT_SIZE = 14; + touchgfx::Unicode::UnicodeChar activeTextBuffer[ACTIVETEXT_SIZE]; + static const uint16_t TOTALVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar totalValueBuffer[TOTALVALUE_SIZE]; + static const uint16_t TOTALTEXT_SIZE = 14; + touchgfx::Unicode::UnicodeChar totalTextBuffer[TOTALTEXT_SIZE]; + static const uint16_t TIMERVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar timerValueBuffer[TIMERVALUE_SIZE]; + +private: + +}; + +#endif // SUMMARYFACECALBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceLapsBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceLapsBase.hpp new file mode 100644 index 00000000..0b1dae03 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceLapsBase.hpp @@ -0,0 +1,72 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef SUMMARYFACELAPSBASE_HPP +#define SUMMARYFACELAPSBASE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SummaryFaceLapsBase : public touchgfx::Container +{ +public: + SummaryFaceLapsBase(); + virtual ~SummaryFaceLapsBase(); + virtual void initialize(); + + virtual void scrollListUpdateItem(LapListItem& item, int16_t itemIndex) + { + // Override and implement this function in SummaryFaceLaps + } + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::ScrollList scrollList; + touchgfx::DrawableListItems scrollListListItems; + touchgfx::TextArea maxHRText; + touchgfx::TextArea avgHRText; + touchgfx::TextArea timeText; + touchgfx::Line line; + touchgfx::PainterABGR2222 linePainter; + touchgfx::TextAreaWithOneWildcard timerText; + touchgfx::Image clockIcon; + touchgfx::TextAreaWithOneWildcard lapsText; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t TIMERTEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar timerTextBuffer[TIMERTEXT_SIZE]; + static const uint16_t LAPSTEXT_SIZE = 16; + touchgfx::Unicode::UnicodeChar lapsTextBuffer[LAPSTEXT_SIZE]; + +private: + + /* + * Callback Declarations + */ + touchgfx::Callback updateItemCallback; + + /* + * Callback Handler Declarations + */ + void updateItemCallbackHandler(touchgfx::DrawableListItemsInterface* items, int16_t containerIndex, int16_t itemIndex); + +}; + +#endif // SUMMARYFACELAPSBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceOverviewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceOverviewBase.hpp new file mode 100644 index 00000000..9e098436 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceOverviewBase.hpp @@ -0,0 +1,61 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef SUMMARYFACEOVERVIEWBASE_HPP +#define SUMMARYFACEOVERVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class SummaryFaceOverviewBase : public touchgfx::Container +{ +public: + SummaryFaceOverviewBase(); + virtual ~SummaryFaceOverviewBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Image heartIcon; + touchgfx::TextAreaWithOneWildcard maxHRValue; + touchgfx::TextAreaWithOneWildcard maxHRText; + touchgfx::Line line2; + touchgfx::PainterABGR2222 line2Painter; + touchgfx::TextAreaWithOneWildcard avgHRValue; + touchgfx::TextAreaWithOneWildcard avgHRText; + touchgfx::Line line1; + touchgfx::PainterABGR2222 line1Painter; + touchgfx::TextAreaWithOneWildcard timerValue; + touchgfx::Image clockIcon; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t MAXHRVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar maxHRValueBuffer[MAXHRVALUE_SIZE]; + static const uint16_t MAXHRTEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar maxHRTextBuffer[MAXHRTEXT_SIZE]; + static const uint16_t AVGHRVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar avgHRValueBuffer[AVGHRVALUE_SIZE]; + static const uint16_t AVGHRTEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar avgHRTextBuffer[AVGHRTEXT_SIZE]; + static const uint16_t TIMERVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar timerValueBuffer[TIMERVALUE_SIZE]; + +private: + +}; + +#endif // SUMMARYFACEOVERVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceZonesBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceZonesBase.hpp new file mode 100644 index 00000000..7056c3f7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/SummaryFaceZonesBase.hpp @@ -0,0 +1,38 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef SUMMARYFACEZONESBASE_HPP +#define SUMMARYFACEZONESBASE_HPP + +#include +#include +#include +#include + +class SummaryFaceZonesBase : public touchgfx::Container +{ +public: + SummaryFaceZonesBase(); + virtual ~SummaryFaceZonesBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + Title title; + ZoneInfo zoneInfo1; + ZoneInfo zoneInfo2; + ZoneInfo zoneInfo3; + ZoneInfo zoneInfo4; + ZoneInfo zoneInfo5; + +private: + +}; + +#endif // SUMMARYFACEZONESBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TimerRingBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TimerRingBase.hpp new file mode 100644 index 00000000..c603a5ee --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TimerRingBase.hpp @@ -0,0 +1,36 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TIMERRINGBASE_HPP +#define TIMERRINGBASE_HPP + +#include +#include +#include +#include + +class TimerRingBase : public touchgfx::Container +{ +public: + TimerRingBase(); + virtual ~TimerRingBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Circle track; + touchgfx::PainterABGR2222 trackPainter; + touchgfx::Circle progress; + touchgfx::PainterABGR2222 progressPainter; + +private: + +}; + +#endif // TIMERRINGBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TitleBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TitleBase.hpp new file mode 100644 index 00000000..7c118099 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TitleBase.hpp @@ -0,0 +1,42 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TITLEBASE_HPP +#define TITLEBASE_HPP + +#include +#include +#include +#include +#include + +class TitleBase : public touchgfx::Container +{ +public: + TitleBase(); + virtual ~TitleBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Line line; + touchgfx::PainterABGR2222 linePainter; + touchgfx::TextAreaWithOneWildcard titleText; + + /* + * Wildcard Buffers + */ + static const uint16_t TITLETEXT_SIZE = 16; + touchgfx::Unicode::UnicodeChar titleTextBuffer[TITLETEXT_SIZE]; + +private: + +}; + +#endif // TITLEBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ToggleBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ToggleBase.hpp new file mode 100644 index 00000000..a2363f8d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ToggleBase.hpp @@ -0,0 +1,37 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TOGGLEBASE_HPP +#define TOGGLEBASE_HPP + +#include +#include +#include +#include +#include + +class ToggleBase : public touchgfx::Container +{ +public: + ToggleBase(); + virtual ~ToggleBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Line rail; + touchgfx::PainterABGR2222 railPainter; + touchgfx::Circle handle; + touchgfx::PainterABGR2222 handlePainter; + +private: + +}; + +#endif // TOGGLEBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceLapBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceLapBase.hpp new file mode 100644 index 00000000..514c3721 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceLapBase.hpp @@ -0,0 +1,54 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKFACELAPBASE_HPP +#define TRACKFACELAPBASE_HPP + +#include +#include +#include +#include +#include +#include + +class TrackFaceLapBase : public touchgfx::Container +{ +public: + TrackFaceLapBase(); + virtual ~TrackFaceLapBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextArea timerText; + touchgfx::TextAreaWithOneWildcard timerValue; + touchgfx::Line line2; + touchgfx::PainterABGR2222 line2Painter; + touchgfx::TextAreaWithOneWildcard lapValue; + touchgfx::TextArea lapText; + touchgfx::Line line1; + touchgfx::PainterABGR2222 line1Painter; + touchgfx::TextAreaWithOneWildcard hrValue; + touchgfx::TextArea hrText; + + /* + * Wildcard Buffers + */ + static const uint16_t TIMERVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar timerValueBuffer[TIMERVALUE_SIZE]; + static const uint16_t LAPVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar lapValueBuffer[LAPVALUE_SIZE]; + static const uint16_t HRVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar hrValueBuffer[HRVALUE_SIZE]; + +private: + +}; + +#endif // TRACKFACELAPBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceStatusBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceStatusBase.hpp new file mode 100644 index 00000000..3c6e139b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceStatusBase.hpp @@ -0,0 +1,47 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKFACESTATUSBASE_HPP +#define TRACKFACESTATUSBASE_HPP + +#include +#include +#include +#include +#include +#include + +class TrackFaceStatusBase : public touchgfx::Container +{ +public: + TrackFaceStatusBase(); + virtual ~TrackFaceStatusBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextAreaWithOneWildcard percentValue; + Battery battery; + touchgfx::Line line; + touchgfx::PainterABGR2222 linePainter; + touchgfx::TextAreaWithOneWildcard dayTimeValue; + + /* + * Wildcard Buffers + */ + static const uint16_t PERCENTVALUE_SIZE = 5; + touchgfx::Unicode::UnicodeChar percentValueBuffer[PERCENTVALUE_SIZE]; + static const uint16_t DAYTIMEVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar dayTimeValueBuffer[DAYTIMEVALUE_SIZE]; + +private: + +}; + +#endif // TRACKFACESTATUSBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceTotalBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceTotalBase.hpp new file mode 100644 index 00000000..e921bd80 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/TrackFaceTotalBase.hpp @@ -0,0 +1,58 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKFACETOTALBASE_HPP +#define TRACKFACETOTALBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class TrackFaceTotalBase : public touchgfx::Container +{ +public: + TrackFaceTotalBase(); + virtual ~TrackFaceTotalBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::TextArea timerText; + touchgfx::TextAreaWithOneWildcard timerValue; + touchgfx::Line line3; + touchgfx::PainterABGR2222 line3Painter; + touchgfx::TextAreaWithOneWildcard caloriesValue; + touchgfx::TextArea caloriesText; + touchgfx::Line line1; + touchgfx::PainterABGR2222 line1Painter; + touchgfx::TextAreaWithOneWildcard hrText; + touchgfx::TextAreaWithOneWildcard hrValue; + HeartRateZone hrZone; + + /* + * Wildcard Buffers + */ + static const uint16_t TIMERVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar timerValueBuffer[TIMERVALUE_SIZE]; + static const uint16_t CALORIESVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar caloriesValueBuffer[CALORIESVALUE_SIZE]; + static const uint16_t HRTEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar hrTextBuffer[HRTEXT_SIZE]; + static const uint16_t HRVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar hrValueBuffer[HRVALUE_SIZE]; + +private: + +}; + +#endif // TRACKFACETOTALBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ZoneInfoBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ZoneInfoBase.hpp new file mode 100644 index 00000000..1be1517a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/containers/ZoneInfoBase.hpp @@ -0,0 +1,50 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef ZONEINFOBASE_HPP +#define ZONEINFOBASE_HPP + +#include +#include +#include +#include +#include + +class ZoneInfoBase : public touchgfx::Container +{ +public: + ZoneInfoBase(); + virtual ~ZoneInfoBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Line background; + touchgfx::PainterABGR2222 backgroundPainter; + touchgfx::Line bar; + touchgfx::PainterABGR2222 barPainter; + touchgfx::TextAreaWithOneWildcard zoneText; + touchgfx::TextAreaWithOneWildcard zoneTime; + touchgfx::TextAreaWithOneWildcard zonePercent; + + /* + * Wildcard Buffers + */ + static const uint16_t ZONETEXT_SIZE = 2; + touchgfx::Unicode::UnicodeChar zoneTextBuffer[ZONETEXT_SIZE]; + static const uint16_t ZONETIME_SIZE = 10; + touchgfx::Unicode::UnicodeChar zoneTimeBuffer[ZONETIME_SIZE]; + static const uint16_t ZONEPERCENT_SIZE = 10; + touchgfx::Unicode::UnicodeChar zonePercentBuffer[ZONEPERCENT_SIZE]; + +private: + +}; + +#endif // ZONEINFOBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/main_screen/MainViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/main_screen/MainViewBase.hpp new file mode 100644 index 00000000..2c2339fc --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/main_screen/MainViewBase.hpp @@ -0,0 +1,42 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MAINVIEWBASE_HPP +#define MAINVIEWBASE_HPP + +#include +#include +#include +#include +#include + +class MainViewBase : public touchgfx::View +{ +public: + MainViewBase(); + virtual ~MainViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + MainMenuLayout menuLayout; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // MAINVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menualerts_screen/MenuAlertsViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menualerts_screen/MenuAlertsViewBase.hpp new file mode 100644 index 00000000..aa9186d6 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menualerts_screen/MenuAlertsViewBase.hpp @@ -0,0 +1,42 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MENUALERTSVIEWBASE_HPP +#define MENUALERTSVIEWBASE_HPP + +#include +#include +#include +#include +#include + +class MenuAlertsViewBase : public touchgfx::View +{ +public: + MenuAlertsViewBase(); + virtual ~MenuAlertsViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + MainMenuLayout menuLayout; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // MENUALERTSVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menusettings_screen/MenuSettingsViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menusettings_screen/MenuSettingsViewBase.hpp new file mode 100644 index 00000000..3453b4ce --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menusettings_screen/MenuSettingsViewBase.hpp @@ -0,0 +1,42 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MENUSETTINGSVIEWBASE_HPP +#define MENUSETTINGSVIEWBASE_HPP + +#include +#include +#include +#include +#include + +class MenuSettingsViewBase : public touchgfx::View +{ +public: + MenuSettingsViewBase(); + virtual ~MenuSettingsViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + MainMenuLayout menuLayout; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // MENUSETTINGSVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menutime_screen/MenuTimeViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menutime_screen/MenuTimeViewBase.hpp new file mode 100644 index 00000000..e45fc506 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menutime_screen/MenuTimeViewBase.hpp @@ -0,0 +1,44 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MENUTIMEVIEWBASE_HPP +#define MENUTIMEVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include + +class MenuTimeViewBase : public touchgfx::View +{ +public: + MenuTimeViewBase(); + virtual ~MenuTimeViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + MainMenuLayout menuLayout; + touchgfx::Image tick; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // MENUTIMEVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menutimesaved_screen/MenuTimeSavedViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menutimesaved_screen/MenuTimeSavedViewBase.hpp new file mode 100644 index 00000000..9e006c43 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/menutimesaved_screen/MenuTimeSavedViewBase.hpp @@ -0,0 +1,53 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef MENUTIMESAVEDVIEWBASE_HPP +#define MENUTIMESAVEDVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class MenuTimeSavedViewBase : public touchgfx::View +{ +public: + MenuTimeSavedViewBase(); + virtual ~MenuTimeSavedViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + touchgfx::TextAreaWithOneWildcard savedText; + touchgfx::Image icon; + touchgfx::TextAreaWithOneWildcard messageText; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t MESSAGETEXT_SIZE = 32; + touchgfx::Unicode::UnicodeChar messageTextBuffer[MESSAGETEXT_SIZE]; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // MENUTIMESAVEDVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/track_screen/TrackViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/track_screen/TrackViewBase.hpp new file mode 100644 index 00000000..606be3fb --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/track_screen/TrackViewBase.hpp @@ -0,0 +1,50 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKVIEWBASE_HPP +#define TRACKVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TrackViewBase : public touchgfx::View +{ +public: + TrackViewBase(); + virtual ~TrackViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + ScrollIndicator scrollIndicator; + Buttons buttons; + TrackFaceStatus trackFaceStatus; + TrackFaceTotal trackFaceTotal; + TrackFaceLap trackFaceLap; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackaction_screen/TrackActionViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackaction_screen/TrackActionViewBase.hpp new file mode 100644 index 00000000..aec10596 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackaction_screen/TrackActionViewBase.hpp @@ -0,0 +1,46 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKACTIONVIEWBASE_HPP +#define TRACKACTIONVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class TrackActionViewBase : public touchgfx::View +{ +public: + TrackActionViewBase(); + virtual ~TrackActionViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + MainMenuLayout menuLayout; + PauseIndicator pauseIndicator; + InfoCarousel infoCarousel; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKACTIONVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackdiscardconfirmation_screen/TrackDiscardConfirmationViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackdiscardconfirmation_screen/TrackDiscardConfirmationViewBase.hpp new file mode 100644 index 00000000..366b9a44 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackdiscardconfirmation_screen/TrackDiscardConfirmationViewBase.hpp @@ -0,0 +1,54 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKDISCARDCONFIRMATIONVIEWBASE_HPP +#define TRACKDISCARDCONFIRMATIONVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +class TrackDiscardConfirmationViewBase : public touchgfx::View +{ +public: + TrackDiscardConfirmationViewBase(); + virtual ~TrackDiscardConfirmationViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + Buttons buttons; + touchgfx::TextAreaWithOneWildcard questionText; + touchgfx::Image tick; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t QUESTIONTEXT_SIZE = 40; + touchgfx::Unicode::UnicodeChar questionTextBuffer[QUESTIONTEXT_SIZE]; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKDISCARDCONFIRMATIONVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackdiscarded_screen/TrackDiscardedViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackdiscarded_screen/TrackDiscardedViewBase.hpp new file mode 100644 index 00000000..80b3f3ba --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackdiscarded_screen/TrackDiscardedViewBase.hpp @@ -0,0 +1,55 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKDISCARDEDVIEWBASE_HPP +#define TRACKDISCARDEDVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class TrackDiscardedViewBase : public touchgfx::View +{ +public: + TrackDiscardedViewBase(); + virtual ~TrackDiscardedViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + touchgfx::TextAreaWithOneWildcard subtitleText; + touchgfx::Image icon; + touchgfx::TextAreaWithOneWildcard headingText; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t SUBTITLETEXT_SIZE = 30; + touchgfx::Unicode::UnicodeChar subtitleTextBuffer[SUBTITLETEXT_SIZE]; + static const uint16_t HEADINGTEXT_SIZE = 15; + touchgfx::Unicode::UnicodeChar headingTextBuffer[HEADINGTEXT_SIZE]; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKDISCARDEDVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracklap_screen/TrackLapViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracklap_screen/TrackLapViewBase.hpp new file mode 100644 index 00000000..74d2e76f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracklap_screen/TrackLapViewBase.hpp @@ -0,0 +1,68 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKLAPVIEWBASE_HPP +#define TRACKLAPVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TrackLapViewBase : public touchgfx::View +{ +public: + TrackLapViewBase(); + virtual ~TrackLapViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + Buttons buttons; + touchgfx::Line line2; + touchgfx::PainterABGR2222 line2Painter; + touchgfx::TextAreaWithOneWildcard caloriesValue; + touchgfx::TextArea caloriesText; + touchgfx::TextAreaWithOneWildcard timeValue; + touchgfx::TextAreaWithOneWildcard timeText; + touchgfx::Line line1; + touchgfx::PainterABGR2222 line1Painter; + touchgfx::TextAreaWithOneWildcard hrValue; + touchgfx::TextArea hrText; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t CALORIESVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar caloriesValueBuffer[CALORIESVALUE_SIZE]; + static const uint16_t TIMEVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar timeValueBuffer[TIMEVALUE_SIZE]; + static const uint16_t HRVALUE_SIZE = 10; + touchgfx::Unicode::UnicodeChar hrValueBuffer[HRVALUE_SIZE]; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKLAPVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracksaved_screen/TrackSavedViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracksaved_screen/TrackSavedViewBase.hpp new file mode 100644 index 00000000..e7d74092 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracksaved_screen/TrackSavedViewBase.hpp @@ -0,0 +1,55 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKSAVEDVIEWBASE_HPP +#define TRACKSAVEDVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include + +class TrackSavedViewBase : public touchgfx::View +{ +public: + TrackSavedViewBase(); + virtual ~TrackSavedViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + touchgfx::TextAreaWithOneWildcard subtitleText; + touchgfx::Image icon; + touchgfx::TextAreaWithOneWildcard headingText; + Title title; + + /* + * Wildcard Buffers + */ + static const uint16_t SUBTITLETEXT_SIZE = 30; + touchgfx::Unicode::UnicodeChar subtitleTextBuffer[SUBTITLETEXT_SIZE]; + static const uint16_t HEADINGTEXT_SIZE = 10; + touchgfx::Unicode::UnicodeChar headingTextBuffer[HEADINGTEXT_SIZE]; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKSAVEDVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackstartconfirmation_screen/TrackStartConfirmationViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackstartconfirmation_screen/TrackStartConfirmationViewBase.hpp new file mode 100644 index 00000000..c2389082 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/trackstartconfirmation_screen/TrackStartConfirmationViewBase.hpp @@ -0,0 +1,48 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKSTARTCONFIRMATIONVIEWBASE_HPP +#define TRACKSTARTCONFIRMATIONVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +class TrackStartConfirmationViewBase : public touchgfx::View +{ +public: + TrackStartConfirmationViewBase(); + virtual ~TrackStartConfirmationViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + Buttons buttons; + touchgfx::TextAreaWithOneWildcard questionText; + touchgfx::Image tick; + Title title; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKSTARTCONFIRMATIONVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracksummary_screen/TrackSummaryViewBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracksummary_screen/TrackSummaryViewBase.hpp new file mode 100644 index 00000000..57b1b7da --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/include/gui_generated/tracksummary_screen/TrackSummaryViewBase.hpp @@ -0,0 +1,52 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TRACKSUMMARYVIEWBASE_HPP +#define TRACKSUMMARYVIEWBASE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TrackSummaryViewBase : public touchgfx::View +{ +public: + TrackSummaryViewBase(); + virtual ~TrackSummaryViewBase(); + virtual void setupScreen(); + virtual void transitionBegins(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::Box __background; + Buttons buttons; + ScrollIndicator scrollIndicator; + SummaryFaceLaps summaryFaceLaps; + SummaryFaceZones summaryFaceZones; + SummaryFaceCal summaryFaceCal; + SummaryFaceOverview summaryFaceOverview; + +private: + + /* + * Canvas Buffer Size + */ + static const uint32_t CANVAS_BUFFER_SIZE = 3600; + uint8_t canvasBuffer[CANVAS_BUFFER_SIZE]; + +}; + +#endif // TRACKSUMMARYVIEWBASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/common/FrontendApplicationBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/common/FrontendApplicationBase.cpp new file mode 100644 index 00000000..d8bc51d3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/common/FrontendApplicationBase.cpp @@ -0,0 +1,223 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace touchgfx; + +FrontendApplicationBase::FrontendApplicationBase(Model& m, FrontendHeap& heap) + : touchgfx::MVPApplication(), + transitionCallback(), + frontendHeap(heap), + model(m) +{ + touchgfx::HAL::getInstance()->setDisplayOrientation(touchgfx::ORIENTATION_LANDSCAPE); + touchgfx::Texts::setLanguage(GB); + reinterpret_cast(touchgfx::HAL::lcd()).enableTextureMapperABGR2222_NearestNeighbor(); +} + +/* + * Screen Transition Declarations + */ + +// Main + +void FrontendApplicationBase::gotoMainScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoMainScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoMainScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// MenuSettings + +void FrontendApplicationBase::gotoMenuSettingsScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoMenuSettingsScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoMenuSettingsScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// MenuAlerts + +void FrontendApplicationBase::gotoMenuAlertsScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoMenuAlertsScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoMenuAlertsScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// MenuTime + +void FrontendApplicationBase::gotoMenuTimeScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoMenuTimeScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoMenuTimeScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// MenuTimeSaved + +void FrontendApplicationBase::gotoMenuTimeSavedScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoMenuTimeSavedScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoMenuTimeSavedScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackStartConfirmation + +void FrontendApplicationBase::gotoTrackStartConfirmationScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackStartConfirmationScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackStartConfirmationScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// Track + +void FrontendApplicationBase::gotoTrackScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackLap + +void FrontendApplicationBase::gotoTrackLapScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackLapScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackLapScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackAction + +void FrontendApplicationBase::gotoTrackActionScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackActionScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackActionScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackDiscardConfirmation + +void FrontendApplicationBase::gotoTrackDiscardConfirmationScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackDiscardConfirmationScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackDiscardConfirmationScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackDiscarded + +void FrontendApplicationBase::gotoTrackDiscardedScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackDiscardedScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackDiscardedScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackSaved + +void FrontendApplicationBase::gotoTrackSavedScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackSavedScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackSavedScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} + +// TrackSummary + +void FrontendApplicationBase::gotoTrackSummaryScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoTrackSummaryScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; +} + +void FrontendApplicationBase::gotoTrackSummaryScreenNoTransitionImpl() +{ + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/BatteryBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/BatteryBase.cpp new file mode 100644 index 00000000..b44d679f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/BatteryBase.cpp @@ -0,0 +1,117 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +BatteryBase::BatteryBase() +{ + setWidth(90); + setHeight(28); + s1box.setPosition(4, 0, 14, 28); + s1box.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + add(s1box); + + s1line1.setPosition(0, 0, 8, 28); + s1line1Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s1line1.setPainter(s1line1Painter); + s1line1.setStart(4, 4); + s1line1.setEnd(4, 24); + s1line1.setLineWidth(8); + s1line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s1line1); + + s1line2.setPosition(16, 0, 4, 28); + s1line2Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s1line2.setPainter(s1line2Painter); + s1line2.setStart(2, 2); + s1line2.setEnd(2, 26); + s1line2.setLineWidth(4); + s1line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s1line2); + + s2box.setPosition(24, 0, 16, 28); + s2box.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + add(s2box); + + s2line1.setPosition(22, 0, 4, 28); + s2line1Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s2line1.setPainter(s2line1Painter); + s2line1.setStart(2, 2); + s2line1.setEnd(2, 26); + s2line1.setLineWidth(4); + s2line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s2line1); + + s2line2.setPosition(38, 0, 4, 28); + s2line2Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s2line2.setPainter(s2line2Painter); + s2line2.setStart(2, 2); + s2line2.setEnd(2, 26); + s2line2.setLineWidth(4); + s2line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s2line2); + + s3box.setPosition(46, 0, 16, 28); + s3box.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + add(s3box); + + s3line1.setPosition(44, 0, 4, 28); + s3line1Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s3line1.setPainter(s3line1Painter); + s3line1.setStart(2, 2); + s3line1.setEnd(2, 26); + s3line1.setLineWidth(4); + s3line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s3line1); + + s3line2.setPosition(60, 0, 4, 28); + s3line2Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s3line2.setPainter(s3line2Painter); + s3line2.setStart(2, 2); + s3line2.setEnd(2, 26); + s3line2.setLineWidth(4); + s3line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s3line2); + + s4box.setPosition(68, 0, 14, 28); + s4box.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + add(s4box); + + s4line1.setPosition(66, 0, 4, 28); + s4line1Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s4line1.setPainter(s4line1Painter); + s4line1.setStart(2, 2); + s4line1.setEnd(2, 26); + s4line1.setLineWidth(4); + s4line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s4line1); + + s4line2.setPosition(78, 0, 8, 28); + s4line2Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s4line2.setPainter(s4line2Painter); + s4line2.setStart(4, 4); + s4line2.setEnd(4, 24); + s4line2.setLineWidth(8); + s4line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s4line2); + + s4line3.setPosition(82, 6, 8, 16); + s4line3Painter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + s4line3.setPainter(s4line3Painter); + s4line3.setStart(4, 4); + s4line3.setEnd(4, 12); + s4line3.setLineWidth(8); + s4line3.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(s4line3); +} + +BatteryBase::~BatteryBase() +{ + +} + +void BatteryBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ButtonsBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ButtonsBase.cpp new file mode 100644 index 00000000..ffe13d63 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ButtonsBase.cpp @@ -0,0 +1,60 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +ButtonsBase::ButtonsBase() +{ + setWidth(240); + setHeight(146); + bL1.setPosition(0, 0, 240, 146); + bL1.setCenter(120, 73); + bL1.setRadius(113); + bL1.setLineWidth(6); + bL1.setArc(291, 308); + bL1.setCapPrecision(10); + bL1Painter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + bL1.setPainter(bL1Painter); + add(bL1); + + bL2.setPosition(0, 0, 240, 146); + bL2.setCenter(120, 73); + bL2.setRadius(113); + bL2.setLineWidth(6); + bL2.setArc(232, 249); + bL2.setCapPrecision(10); + bL2Painter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + bL2.setPainter(bL2Painter); + add(bL2); + + bR2.setPosition(0, 0, 240, 146); + bR2.setCenter(120, 73); + bR2.setRadius(113); + bR2.setLineWidth(6); + bR2.setArc(111, 128); + bR2.setCapPrecision(10); + bR2Painter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + bR2.setPainter(bR2Painter); + add(bR2); + + bR1.setPosition(0, 0, 240, 146); + bR1.setCenter(120, 73); + bR1.setRadius(113); + bR1.setLineWidth(6); + bR1.setArc(52, 69); + bR1.setCapPrecision(10); + bR1Painter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + bR1.setPainter(bR1Painter); + add(bR1); +} + +ButtonsBase::~ButtonsBase() +{ + +} + +void ButtonsBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/HeartRateZoneBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/HeartRateZoneBase.cpp new file mode 100644 index 00000000..df265fe8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/HeartRateZoneBase.cpp @@ -0,0 +1,49 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +HeartRateZoneBase::HeartRateZoneBase() +{ + setWidth(210); + setHeight(71); + group.setXY(0, 0); + group.setBitmap(touchgfx::Bitmap(BITMAP_HEARTRATEZONEGROUP_ID)); + add(group); + + hr1.setXY(0, 28); + hr1.setBitmap(touchgfx::Bitmap(BITMAP_HEARTRATEZONE1_ID)); + hr1.setVisible(false); + add(hr1); + + hr2.setXY(33, 3); + hr2.setBitmap(touchgfx::Bitmap(BITMAP_HEARTRATEZONE2_ID)); + hr2.setVisible(false); + add(hr2); + + hr3.setXY(80, 0); + hr3.setBitmap(touchgfx::Bitmap(BITMAP_HEARTRATEZONE3_ID)); + hr3.setVisible(false); + add(hr3); + + hr4.setXY(131, 3); + hr4.setBitmap(touchgfx::Bitmap(BITMAP_HEARTRATEZONE4_ID)); + hr4.setVisible(false); + add(hr4); + + hr5.setXY(173, 28); + hr5.setBitmap(touchgfx::Bitmap(BITMAP_HEARTRATEZONE5_ID)); + hr5.setVisible(false); + add(hr5); +} + +HeartRateZoneBase::~HeartRateZoneBase() +{ + +} + +void HeartRateZoneBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/InfoCarouselBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/InfoCarouselBase.cpp new file mode 100644 index 00000000..83761079 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/InfoCarouselBase.cpp @@ -0,0 +1,46 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +InfoCarouselBase::InfoCarouselBase() +{ + setWidth(160); + setHeight(87); + line.setPosition(0, 65, 160, 3); + linePainter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + line.setPainter(linePainter); + line.setStart(0, 0); + line.setEnd(160, 0); + line.setLineWidth(10); + line.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line); + + dataValue.setPosition(0, 29, 160, 45); + dataValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + dataValue.setLinespacing(0); + dataValueBuffer[0] = 0; + dataValue.setWildcard(dataValueBuffer); + dataValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_30)); + add(dataValue); + + titleText.setPosition(0, 10, 160, 27); + titleText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + titleText.setLinespacing(0); + titleTextBuffer[0] = 0; + titleText.setWildcard(titleTextBuffer); + titleText.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + add(titleText); +} + +InfoCarouselBase::~InfoCarouselBase() +{ + +} + +void InfoCarouselBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/LapListItemBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/LapListItemBase.cpp new file mode 100644 index 00000000..6a91ec09 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/LapListItemBase.cpp @@ -0,0 +1,53 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +LapListItemBase::LapListItemBase() +{ + setWidth(190); + setHeight(18); + maxHRText.setPosition(127, 0, 64, 18); + maxHRText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + maxHRText.setLinespacing(0); + Unicode::snprintf(maxHRTextBuffer, MAXHRTEXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_ACJE).getText()); + maxHRText.setWildcard(maxHRTextBuffer); + maxHRText.setTypedText(touchgfx::TypedText(T_TMP_REGULAR_14_L)); + add(maxHRText); + + avgHRText.setPosition(53, 0, 79, 18); + avgHRText.setColor(touchgfx::Color::getColorFromRGB(0, 192, 192)); + avgHRText.setLinespacing(0); + Unicode::snprintf(avgHRTextBuffer, AVGHRTEXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_BOEQ).getText()); + avgHRText.setWildcard(avgHRTextBuffer); + avgHRText.setTypedText(touchgfx::TypedText(T_TMP_REGULAR_14_L)); + add(avgHRText); + + timeText.setPosition(19, 0, 40, 18); + timeText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timeText.setLinespacing(0); + Unicode::snprintf(timeTextBuffer, TIMETEXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_NOCF).getText()); + timeText.setWildcard(timeTextBuffer); + timeText.setTypedText(touchgfx::TypedText(T_TMP_REGULAR_14_R)); + add(timeText); + + indexText.setPosition(0, 0, 21, 18); + indexText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + indexText.setLinespacing(0); + Unicode::snprintf(indexTextBuffer, INDEXTEXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_U3YM).getText()); + indexText.setWildcard(indexTextBuffer); + indexText.setTypedText(touchgfx::TypedText(T_TMP_REGULAR_14_R)); + add(indexText); +} + +LapListItemBase::~LapListItemBase() +{ + +} + +void LapListItemBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuBackgroundBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuBackgroundBase.cpp new file mode 100644 index 00000000..a179d57d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuBackgroundBase.cpp @@ -0,0 +1,29 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +MainMenuBackgroundBase::MainMenuBackgroundBase() +{ + setWidth(220); + setHeight(66); + circle.setPosition(0, 0, 220, 66); + circle.setCenter(110, 33); + circle.setRadius(110); + circle.setLineWidth(0); + circle.setArc(0, 360); + circlePainter.setColor(touchgfx::Color::getColorFromRGB(0, 64, 64)); + circle.setPainter(circlePainter); + add(circle); +} + +MainMenuBackgroundBase::~MainMenuBackgroundBase() +{ + +} + +void MainMenuBackgroundBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuBase.cpp new file mode 100644 index 00000000..c5115475 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuBase.cpp @@ -0,0 +1,66 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include + +MainMenuBase::MainMenuBase() : + updateItemCallback(this, &MainMenuBase::updateItemCallbackHandler) +{ + setWidth(240); + setHeight(240); + wheel.setPosition(0, 87, 240, 132); + wheel.setHorizontal(false); + wheel.setCircular(true); + wheel.setEasingEquation(touchgfx::EasingEquations::linearEaseOut); + wheel.setSwipeAcceleration(10); + wheel.setDragAcceleration(10); + wheel.setNumberOfItems(10); + wheel.setSelectedItemOffset(0); + wheel.setOvershootPercentage(100); + wheel.setSelectedItemExtraSize(0, 0); + wheel.setSelectedItemMargin(0, 15); + wheel.setDrawableSize(66, 0); + wheel.setDrawables(wheelListItems, updateItemCallback, + + wheelSelectedListItems, updateItemCallback); + wheel.animateToItem(0, 0); + add(wheel); + + scrollIndicator.setXY(0, 47); + add(scrollIndicator); +} + +MainMenuBase::~MainMenuBase() +{ + +} + +void MainMenuBase::initialize() +{ + wheel.initialize(); + for (int i = 0; i < wheelListItems.getNumberOfDrawables(); i++) + { + wheelListItems[i].initialize(); + } + for (int i = 0; i < wheelSelectedListItems.getNumberOfDrawables(); i++) + { + wheelSelectedListItems[i].initialize(); + } + scrollIndicator.initialize(); +} + +void MainMenuBase::updateItemCallbackHandler(touchgfx::DrawableListItemsInterface* items, int16_t containerIndex, int16_t itemIndex) +{ + if (items == &wheelListItems) + { + touchgfx::Drawable* d = items->getDrawable(containerIndex); + MainMenuItem* cc = (MainMenuItem*)d; + wheelUpdateItem(*cc, itemIndex); + } + if (items == &wheelSelectedListItems) + { + touchgfx::Drawable* d = items->getDrawable(containerIndex); + MainMenuCenterItem* cc = (MainMenuCenterItem*)d; + wheelUpdateCenterItem(*cc, itemIndex); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuCenterItemBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuCenterItemBase.cpp new file mode 100644 index 00000000..25d21984 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuCenterItemBase.cpp @@ -0,0 +1,47 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +MainMenuCenterItemBase::MainMenuCenterItemBase() +{ + setWidth(240); + setHeight(66); + tipText.setPosition(0, 40, 240, 25); + tipText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + tipText.setLinespacing(-8); + tipTextBuffer[0] = 0; + tipText.setWildcard(tipTextBuffer); + tipText.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + tipText.setVisible(false); + add(tipText); + + labelText.setPosition(0, 13, 240, 40); + labelText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + labelText.setLinespacing(-8); + labelTextBuffer[0] = 0; + labelText.setWildcard(labelTextBuffer); + labelText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_30)); + add(labelText); + + toggle.setXY(151, 18); + toggle.setVisible(false); + add(toggle); + + icon.setXY(20, 3); + icon.setVisible(false); + add(icon); +} + +MainMenuCenterItemBase::~MainMenuCenterItemBase() +{ + +} + +void MainMenuCenterItemBase::initialize() +{ + toggle.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuItemBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuItemBase.cpp new file mode 100644 index 00000000..19af5745 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuItemBase.cpp @@ -0,0 +1,43 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +MainMenuItemBase::MainMenuItemBase() +{ + setWidth(240); + setHeight(66); + tipText.setPosition(0, 44, 240, 25); + tipText.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + tipText.setLinespacing(-8); + tipTextBuffer[0] = 0; + tipText.setWildcard(tipTextBuffer); + tipText.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + tipText.setVisible(false); + add(tipText); + + labelText.setPosition(0, 20, 240, 23); + labelText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + labelText.setLinespacing(-6); + labelTextBuffer[0] = 0; + labelText.setWildcard(labelTextBuffer); + labelText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_18)); + add(labelText); + + icon.setXY(46, 7); + icon.setVisible(false); + add(icon); +} + +MainMenuItemBase::~MainMenuItemBase() +{ + +} + +void MainMenuItemBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuLayoutBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuLayoutBase.cpp new file mode 100644 index 00000000..354b8df4 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/MainMenuLayoutBase.cpp @@ -0,0 +1,45 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +MainMenuLayoutBase::MainMenuLayoutBase() +{ + setWidth(240); + setHeight(240); + background.setXY(16, 87); + add(background); + + buttons.setXY(0, 47); + add(buttons); + + menu.setXY(0, 0); + add(menu); + + infoText.setPosition(35, 57, 170, 23); + infoText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + infoText.setLinespacing(0); + infoTextBuffer[0] = 0; + infoText.setWildcard(infoTextBuffer); + infoText.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + infoText.setVisible(false); + add(infoText); + + title.setXY(50, 0); + add(title); +} + +MainMenuLayoutBase::~MainMenuLayoutBase() +{ + +} + +void MainMenuLayoutBase::initialize() +{ + background.initialize(); + buttons.initialize(); + menu.initialize(); + title.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/PauseIndicatorBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/PauseIndicatorBase.cpp new file mode 100644 index 00000000..6a59c306 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/PauseIndicatorBase.cpp @@ -0,0 +1,43 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +PauseIndicatorBase::PauseIndicatorBase() +{ + setWidth(240); + setHeight(34); + background.setPosition(38, 0, 164, 34); + background.setCenter(82, -82); + background.setRadius(116); + background.setLineWidth(0); + background.setArc(0, 360); + backgroundPainter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + background.setPainter(backgroundPainter); + add(background); + + timerValue.setPosition(88, 5, 85, 23); + timerValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerValue.setLinespacing(0); + timerValueBuffer[0] = 0; + timerValue.setWildcard(timerValueBuffer); + timerValue.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + add(timerValue); + + pauseIcon.setXY(76, 10); + pauseIcon.setBitmap(touchgfx::Bitmap(BITMAP_PAUSE_14X14_ID)); + add(pauseIcon); +} + +PauseIndicatorBase::~PauseIndicatorBase() +{ + +} + +void PauseIndicatorBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ScrollIndicatorBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ScrollIndicatorBase.cpp new file mode 100644 index 00000000..6821c3b0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ScrollIndicatorBase.cpp @@ -0,0 +1,51 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +ScrollIndicatorBase::ScrollIndicatorBase() +{ + setWidth(36); + setHeight(146); + rail.setPosition(0, 0, 36, 146); + rail.setCenter(120, 73); + rail.setRadius(112); + rail.setLineWidth(8.5f); + rail.setArc(232, 308); + rail.setCapPrecision(10); + railPainter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + rail.setPainter(railPainter); + add(rail); + + handle.setPosition(0, 0, 36, 146); + handle.setCenter(120, 73); + handle.setRadius(112); + handle.setLineWidth(8.5f); + handle.setArc(290, 308); + handle.setCapPrecision(10); + handlePainter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + handle.setPainter(handlePainter); + add(handle); + + handleOvf.setPosition(0, 0, 36, 146); + handleOvf.setCenter(120, 73); + handleOvf.setRadius(112); + handleOvf.setLineWidth(8.5f); + handleOvf.setArc(290, 308); + handleOvf.setCapPrecision(10); + handleOvfPainter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + handleOvf.setPainter(handleOvfPainter); + handleOvf.setVisible(false); + add(handleOvf); +} + +ScrollIndicatorBase::~ScrollIndicatorBase() +{ + +} + +void ScrollIndicatorBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceCalBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceCalBase.cpp new file mode 100644 index 00000000..d7aca819 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceCalBase.cpp @@ -0,0 +1,103 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +SummaryFaceCalBase::SummaryFaceCalBase() +{ + setWidth(240); + setHeight(240); + restingValue.setPosition(146, 167, 74, 32); + restingValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + restingValue.setLinespacing(0); + Unicode::snprintf(restingValueBuffer, RESTINGVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_5LBG).getText()); + restingValue.setWildcard(restingValueBuffer); + restingValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_25)); + add(restingValue); + + restingText.setPosition(32, 171, 124, 23); + restingText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + restingText.setLinespacing(0); + Unicode::snprintf(restingTextBuffer, RESTINGTEXT_SIZE, "%s", touchgfx::TypedText(T_RESOURCEID15).getText()); + restingText.setWildcard(restingTextBuffer); + restingText.setTypedText(touchgfx::TypedText(T___SINGLEUSE_0SLK)); + add(restingText); + + line2.setPosition(25, 166, 190, 3); + line2Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line2.setPainter(line2Painter); + line2.setStart(0, 0); + line2.setEnd(190, 0); + line2.setLineWidth(10); + line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line2); + + activeValue.setPosition(146, 137, 74, 32); + activeValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + activeValue.setLinespacing(0); + Unicode::snprintf(activeValueBuffer, ACTIVEVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_WFDB).getText()); + activeValue.setWildcard(activeValueBuffer); + activeValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_25)); + add(activeValue); + + activeText.setPosition(32, 141, 124, 21); + activeText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + activeText.setLinespacing(0); + Unicode::snprintf(activeTextBuffer, ACTIVETEXT_SIZE, "%s", touchgfx::TypedText(T_RESOURCEID16).getText()); + activeText.setWildcard(activeTextBuffer); + activeText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_18)); + add(activeText); + + line1.setPosition(25, 136, 190, 3); + line1Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line1.setPainter(line1Painter); + line1.setStart(0, 0); + line1.setEnd(190, 0); + line1.setLineWidth(10); + line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line1); + + totalValue.setPosition(146, 107, 74, 32); + totalValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + totalValue.setLinespacing(0); + Unicode::snprintf(totalValueBuffer, TOTALVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_M1HM).getText()); + totalValue.setWildcard(totalValueBuffer); + totalValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_25)); + add(totalValue); + + totalText.setPosition(32, 111, 124, 21); + totalText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + totalText.setLinespacing(0); + Unicode::snprintf(totalTextBuffer, TOTALTEXT_SIZE, "%s", touchgfx::TypedText(T_RESOURCEID17).getText()); + totalText.setWildcard(totalTextBuffer); + totalText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_18)); + add(totalText); + + timerValue.setPosition(66, 60, 134, 35); + timerValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerValue.setLinespacing(0); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_IYCO).getText()); + timerValue.setWildcard(timerValueBuffer); + timerValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_40)); + add(timerValue); + + clockIcon.setXY(45, 62); + clockIcon.setBitmap(touchgfx::Bitmap(BITMAP_CLOCK_24X29_ID)); + add(clockIcon); + + title.setXY(50, 0); + add(title); +} + +SummaryFaceCalBase::~SummaryFaceCalBase() +{ + +} + +void SummaryFaceCalBase::initialize() +{ + title.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceLapsBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceLapsBase.cpp new file mode 100644 index 00000000..fb043909 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceLapsBase.cpp @@ -0,0 +1,100 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +SummaryFaceLapsBase::SummaryFaceLapsBase() : + updateItemCallback(this, &SummaryFaceLapsBase::updateItemCallbackHandler) +{ + setWidth(240); + setHeight(240); + scrollList.setPosition(25, 126, 190, 90); + scrollList.setHorizontal(false); + scrollList.setCircular(false); + scrollList.setEasingEquation(touchgfx::EasingEquations::linearEaseOut); + scrollList.setSwipeAcceleration(10); + scrollList.setDragAcceleration(10); + scrollList.setNumberOfItems(3); + scrollList.setPadding(0, 0); + scrollList.setSnapping(false); + scrollList.setOvershootPercentage(100); + scrollList.setDrawableSize(18, 0); + scrollList.setDrawables(scrollListListItems, updateItemCallback); + add(scrollList); + + maxHRText.setPosition(151, 104, 64, 23); + maxHRText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + maxHRText.setLinespacing(0); + maxHRText.setTypedText(touchgfx::TypedText(T_RESOURCEID10)); + add(maxHRText); + + avgHRText.setPosition(78, 104, 79, 21); + avgHRText.setColor(touchgfx::Color::getColorFromRGB(0, 192, 192)); + avgHRText.setLinespacing(0); + avgHRText.setTypedText(touchgfx::TypedText(T_RESOURCEID11)); + add(avgHRText); + + timeText.setXY(40, 104); + timeText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timeText.setLinespacing(0); + timeText.setTypedText(touchgfx::TypedText(T_RESOURCEID12)); + add(timeText); + + line.setPosition(25, 100, 190, 3); + linePainter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line.setPainter(linePainter); + line.setStart(0, 0); + line.setEnd(190, 0); + line.setLineWidth(10); + line.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line); + + timerText.setPosition(73, 75, 118, 23); + timerText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerText.setLinespacing(0); + timerTextBuffer[0] = 0; + timerText.setWildcard(timerTextBuffer); + timerText.setTypedText(touchgfx::TypedText(T_TMP_REGULAR_18)); + add(timerText); + + clockIcon.setXY(54, 75); + clockIcon.setBitmap(touchgfx::Bitmap(BITMAP_CLOCK_16X19_ID)); + add(clockIcon); + + lapsText.setPosition(20, 40, 200, 38); + lapsText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + lapsText.setLinespacing(0); + lapsTextBuffer[0] = 0; + lapsText.setWildcard(lapsTextBuffer); + lapsText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_30)); + add(lapsText); + + title.setXY(50, 0); + add(title); +} + +SummaryFaceLapsBase::~SummaryFaceLapsBase() +{ + +} + +void SummaryFaceLapsBase::initialize() +{ + scrollList.initialize(); + for (int i = 0; i < scrollListListItems.getNumberOfDrawables(); i++) + { + scrollListListItems[i].initialize(); + } + title.initialize(); +} + +void SummaryFaceLapsBase::updateItemCallbackHandler(touchgfx::DrawableListItemsInterface* items, int16_t containerIndex, int16_t itemIndex) +{ + if (items == &scrollListListItems) + { + scrollListUpdateItem(scrollListListItems[containerIndex], itemIndex); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceOverviewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceOverviewBase.cpp new file mode 100644 index 00000000..2d127bde --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceOverviewBase.cpp @@ -0,0 +1,91 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +SummaryFaceOverviewBase::SummaryFaceOverviewBase() +{ + setWidth(240); + setHeight(240); + heartIcon.setXY(27, 128); + heartIcon.setBitmap(touchgfx::Bitmap(BITMAP_HEART_30X30_ID)); + add(heartIcon); + + maxHRValue.setPosition(135, 129, 77, 32); + maxHRValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + maxHRValue.setLinespacing(0); + Unicode::snprintf(maxHRValueBuffer, MAXHRVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_XTK2).getText()); + maxHRValue.setWildcard(maxHRValueBuffer); + maxHRValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_25)); + add(maxHRValue); + + maxHRText.setPosition(48, 133, 91, 21); + maxHRText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + maxHRText.setLinespacing(0); + Unicode::snprintf(maxHRTextBuffer, MAXHRTEXT_SIZE, "%s", touchgfx::TypedText(T_TEXT_MAX_HR_UC).getText()); + maxHRText.setWildcard(maxHRTextBuffer); + maxHRText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_18)); + add(maxHRText); + + line2.setPosition(25, 166, 190, 3); + line2Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line2.setPainter(line2Painter); + line2.setStart(0, 0); + line2.setEnd(190, 0); + line2.setLineWidth(10); + line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line2); + + avgHRValue.setPosition(132, 175, 78, 32); + avgHRValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + avgHRValue.setLinespacing(0); + Unicode::snprintf(avgHRValueBuffer, AVGHRVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_ZJSJ).getText()); + avgHRValue.setWildcard(avgHRValueBuffer); + avgHRValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_25)); + add(avgHRValue); + + avgHRText.setPosition(48, 179, 91, 23); + avgHRText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + avgHRText.setLinespacing(0); + Unicode::snprintf(avgHRTextBuffer, AVGHRTEXT_SIZE, "%s", touchgfx::TypedText(T_TEXT_AVG_HR_UC).getText()); + avgHRText.setWildcard(avgHRTextBuffer); + avgHRText.setTypedText(touchgfx::TypedText(T___SINGLEUSE_Q39K)); + add(avgHRText); + + line1.setPosition(25, 120, 190, 3); + line1Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line1.setPainter(line1Painter); + line1.setStart(0, 0); + line1.setEnd(190, 0); + line1.setLineWidth(10); + line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line1); + + timerValue.setPosition(66, 60, 134, 35); + timerValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerValue.setLinespacing(0); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_5T2E).getText()); + timerValue.setWildcard(timerValueBuffer); + timerValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_40)); + add(timerValue); + + clockIcon.setXY(45, 62); + clockIcon.setBitmap(touchgfx::Bitmap(BITMAP_CLOCK_24X29_ID)); + add(clockIcon); + + title.setXY(50, 0); + add(title); +} + +SummaryFaceOverviewBase::~SummaryFaceOverviewBase() +{ + +} + +void SummaryFaceOverviewBase::initialize() +{ + title.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceZonesBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceZonesBase.cpp new file mode 100644 index 00000000..54af2871 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/SummaryFaceZonesBase.cpp @@ -0,0 +1,42 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include + +SummaryFaceZonesBase::SummaryFaceZonesBase() +{ + setWidth(240); + setHeight(240); + title.setXY(50, 0); + add(title); + + zoneInfo1.setXY(29, 154); + add(zoneInfo1); + + zoneInfo2.setXY(29, 133); + add(zoneInfo2); + + zoneInfo3.setXY(29, 112); + add(zoneInfo3); + + zoneInfo4.setXY(29, 91); + add(zoneInfo4); + + zoneInfo5.setXY(29, 70); + add(zoneInfo5); +} + +SummaryFaceZonesBase::~SummaryFaceZonesBase() +{ + +} + +void SummaryFaceZonesBase::initialize() +{ + title.initialize(); + zoneInfo1.initialize(); + zoneInfo2.initialize(); + zoneInfo3.initialize(); + zoneInfo4.initialize(); + zoneInfo5.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TimerRingBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TimerRingBase.cpp new file mode 100644 index 00000000..b8230651 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TimerRingBase.cpp @@ -0,0 +1,40 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +TimerRingBase::TimerRingBase() +{ + setWidth(240); + setHeight(240); + track.setPosition(0, 0, 240, 240); + track.setCenter(120, 120); + track.setRadius(112); + track.setLineWidth(8.5f); + track.setArc(138, 402); + track.setCapPrecision(10); + trackPainter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + track.setPainter(trackPainter); + add(track); + + progress.setPosition(0, 0, 240, 240); + progress.setCenter(120, 120); + progress.setRadius(112); + progress.setLineWidth(8.5f); + progress.setArc(138, 160); + progress.setCapPrecision(10); + progressPainter.setColor(touchgfx::Color::getColorFromRGB(192, 128, 0)); + progress.setPainter(progressPainter); + add(progress); +} + +TimerRingBase::~TimerRingBase() +{ + +} + +void TimerRingBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TitleBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TitleBase.cpp new file mode 100644 index 00000000..7f6ed290 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TitleBase.cpp @@ -0,0 +1,38 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TitleBase::TitleBase() +{ + setWidth(140); + setHeight(41); + line.setPosition(0, 38, 140, 3); + linePainter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + line.setPainter(linePainter); + line.setStart(0, 0); + line.setEnd(140, 0); + line.setLineWidth(10); + line.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line); + + titleText.setPosition(10, 11, 120, 23); + titleText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + titleText.setLinespacing(0); + titleTextBuffer[0] = 0; + titleText.setWildcard(titleTextBuffer); + titleText.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + add(titleText); +} + +TitleBase::~TitleBase() +{ + +} + +void TitleBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ToggleBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ToggleBase.cpp new file mode 100644 index 00000000..884891e5 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ToggleBase.cpp @@ -0,0 +1,38 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +ToggleBase::ToggleBase() +{ + setWidth(60); + setHeight(30); + rail.setPosition(0, 0, 60, 30); + railPainter.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + rail.setPainter(railPainter); + rail.setStart(15, 15); + rail.setEnd(45, 15); + rail.setLineWidth(30); + rail.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(rail); + + handle.setPosition(0, 0, 30, 30); + handle.setCenter(15, 15); + handle.setRadius(15); + handle.setLineWidth(0); + handle.setArc(0, 360); + handlePainter.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + handle.setPainter(handlePainter); + add(handle); +} + +ToggleBase::~ToggleBase() +{ + +} + +void ToggleBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceLapBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceLapBase.cpp new file mode 100644 index 00000000..417f0fa9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceLapBase.cpp @@ -0,0 +1,81 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TrackFaceLapBase::TrackFaceLapBase() +{ + setWidth(240); + setHeight(240); + timerText.setPosition(60, 204, 120, 23); + timerText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerText.setLinespacing(0); + timerText.setTypedText(touchgfx::TypedText(T_RESOURCEID3)); + add(timerText); + + timerValue.setPosition(35, 162, 170, 42); + timerValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerValue.setLinespacing(0); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_KERT).getText()); + timerValue.setWildcard(timerValueBuffer); + timerValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_35)); + add(timerValue); + + line2.setPosition(35, 159, 170, 3); + line2Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line2.setPainter(line2Painter); + line2.setStart(0, 0); + line2.setEnd(170, 0); + line2.setLineWidth(10); + line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line2); + + lapValue.setPosition(53, 111, 134, 42); + lapValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + lapValue.setLinespacing(0); + Unicode::snprintf(lapValueBuffer, LAPVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_4SCV).getText()); + lapValue.setWildcard(lapValueBuffer); + lapValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_35)); + add(lapValue); + + lapText.setPosition(50, 88, 140, 23); + lapText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + lapText.setLinespacing(0); + lapText.setTypedText(touchgfx::TypedText(T_RESOURCEID4)); + add(lapText); + + line1.setPosition(35, 79, 170, 3); + line1Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line1.setPainter(line1Painter); + line1.setStart(0, 0); + line1.setEnd(170, 0); + line1.setLineWidth(10); + line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line1); + + hrValue.setPosition(58, 30, 124, 42); + hrValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + hrValue.setLinespacing(0); + Unicode::snprintf(hrValueBuffer, HRVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_8WSQ).getText()); + hrValue.setWildcard(hrValueBuffer); + hrValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_40)); + add(hrValue); + + hrText.setPosition(70, 10, 100, 23); + hrText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + hrText.setLinespacing(0); + hrText.setTypedText(touchgfx::TypedText(T_RESOURCEID5)); + add(hrText); +} + +TrackFaceLapBase::~TrackFaceLapBase() +{ + +} + +void TrackFaceLapBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceStatusBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceStatusBase.cpp new file mode 100644 index 00000000..901b4ef1 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceStatusBase.cpp @@ -0,0 +1,49 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TrackFaceStatusBase::TrackFaceStatusBase() +{ + setWidth(240); + setHeight(240); + percentValue.setPosition(85, 172, 70, 32); + percentValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + percentValue.setLinespacing(0); + Unicode::snprintf(percentValueBuffer, PERCENTVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_ICBU).getText()); + percentValue.setWildcard(percentValueBuffer); + percentValue.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_25)); + add(percentValue); + + battery.setXY(75, 138); + add(battery); + + line.setPosition(35, 120, 170, 3); + linePainter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line.setPainter(linePainter); + line.setStart(170, 0); + line.setEnd(0, 0); + line.setLineWidth(10); + line.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line); + + dayTimeValue.setPosition(35, 43, 170, 77); + dayTimeValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + dayTimeValue.setLinespacing(0); + Unicode::snprintf(dayTimeValueBuffer, DAYTIMEVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_YHFT).getText()); + dayTimeValue.setWildcard(dayTimeValueBuffer); + dayTimeValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_60)); + add(dayTimeValue); +} + +TrackFaceStatusBase::~TrackFaceStatusBase() +{ + +} + +void TrackFaceStatusBase::initialize() +{ + battery.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceTotalBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceTotalBase.cpp new file mode 100644 index 00000000..73e0946c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/TrackFaceTotalBase.cpp @@ -0,0 +1,86 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TrackFaceTotalBase::TrackFaceTotalBase() +{ + setWidth(240); + setHeight(240); + timerText.setPosition(75, 204, 91, 22); + timerText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerText.setLinespacing(0); + timerText.setTypedText(touchgfx::TypedText(T_RESOURCEID2)); + add(timerText); + + timerValue.setPosition(35, 162, 170, 42); + timerValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timerValue.setLinespacing(0); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_GAMW).getText()); + timerValue.setWildcard(timerValueBuffer); + timerValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_35)); + add(timerValue); + + line3.setPosition(35, 159, 170, 3); + line3Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line3.setPainter(line3Painter); + line3.setStart(0, 0); + line3.setEnd(170, 0); + line3.setLineWidth(10); + line3.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line3); + + caloriesValue.setPosition(18, 111, 204, 48); + caloriesValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + caloriesValue.setLinespacing(0); + Unicode::snprintf(caloriesValueBuffer, CALORIESVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_OTQI).getText()); + caloriesValue.setWildcard(caloriesValueBuffer); + caloriesValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_35)); + add(caloriesValue); + + caloriesText.setPosition(20, 88, 200, 23); + caloriesText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + caloriesText.setLinespacing(0); + caloriesText.setTypedText(touchgfx::TypedText(T_RESOURCEID1)); + add(caloriesText); + + line1.setPosition(35, 79, 170, 3); + line1Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line1.setPainter(line1Painter); + line1.setStart(0, 0); + line1.setEnd(170, 0); + line1.setLineWidth(10); + line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line1); + + hrText.setPosition(160, 50, 45, 23); + hrText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + hrText.setLinespacing(0); + Unicode::snprintf(hrTextBuffer, HRTEXT_SIZE, "%s", touchgfx::TypedText(T_TEXT_HR_UC).getText()); + hrText.setWildcard(hrTextBuffer); + hrText.setTypedText(touchgfx::TypedText(T_TMP_REGULAR_18_L)); + add(hrText); + + hrValue.setPosition(75, 29, 90, 44); + hrValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + hrValue.setLinespacing(0); + Unicode::snprintf(hrValueBuffer, HRVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_HFND).getText()); + hrValue.setWildcard(hrValueBuffer); + hrValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_40)); + add(hrValue); + + hrZone.setXY(15, 4); + add(hrZone); +} + +TrackFaceTotalBase::~TrackFaceTotalBase() +{ + +} + +void TrackFaceTotalBase::initialize() +{ + hrZone.initialize(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ZoneInfoBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ZoneInfoBase.cpp new file mode 100644 index 00000000..0c90f93e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/containers/ZoneInfoBase.cpp @@ -0,0 +1,65 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +ZoneInfoBase::ZoneInfoBase() +{ + setWidth(180); + setHeight(20); + background.setPosition(66, 0, 60, 20); + backgroundPainter.setColor(touchgfx::Color::getColorFromRGB(64, 64, 64)); + background.setPainter(backgroundPainter); + background.setStart(6, 10); + background.setEnd(48, 10); + background.setLineWidth(11); + background.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(background); + + bar.setPosition(66, 0, 60, 20); + barPainter.setColor(touchgfx::Color::getColorFromRGB(192, 0, 0)); + bar.setPainter(barPainter); + bar.setStart(6, 10); + bar.setEnd(26, 10); + bar.setLineWidth(11); + bar.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(bar); + + zoneText.setXY(0, 0); + zoneText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + zoneText.setLinespacing(0); + Unicode::snprintf(zoneTextBuffer, ZONETEXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_AIE6).getText()); + zoneText.setWildcard(zoneTextBuffer); + zoneText.resizeToCurrentText(); + zoneText.setTypedText(touchgfx::TypedText(T___SINGLEUSE_RUD6)); + add(zoneText); + + zoneTime.setXY(135, 0); + zoneTime.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + zoneTime.setLinespacing(0); + Unicode::snprintf(zoneTimeBuffer, ZONETIME_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_X62D).getText()); + zoneTime.setWildcard(zoneTimeBuffer); + zoneTime.resizeToCurrentText(); + zoneTime.setTypedText(touchgfx::TypedText(T___SINGLEUSE_F90O)); + add(zoneTime); + + zonePercent.setPosition(18, 0, 37, 20); + zonePercent.setColor(touchgfx::Color::getColorFromRGB(0, 192, 192)); + zonePercent.setLinespacing(0); + Unicode::snprintf(zonePercentBuffer, ZONEPERCENT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_LZ0O).getText()); + zonePercent.setWildcard(zonePercentBuffer); + zonePercent.setTypedText(touchgfx::TypedText(T___SINGLEUSE_CRAK)); + add(zonePercent); +} + +ZoneInfoBase::~ZoneInfoBase() +{ + +} + +void ZoneInfoBase::initialize() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/main_screen/MainViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/main_screen/MainViewBase.cpp new file mode 100644 index 00000000..2d558b66 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/main_screen/MainViewBase.cpp @@ -0,0 +1,37 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +MainViewBase::MainViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + menuLayout.setXY(0, 0); + add(menuLayout); +} + +MainViewBase::~MainViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void MainViewBase::setupScreen() +{ + menuLayout.initialize(); + transitionBegins(); +} + +void MainViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to Main + //Go to Main with no screen transition + application().gotoMainScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menualerts_screen/MenuAlertsViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menualerts_screen/MenuAlertsViewBase.cpp new file mode 100644 index 00000000..10edb5d8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menualerts_screen/MenuAlertsViewBase.cpp @@ -0,0 +1,37 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +MenuAlertsViewBase::MenuAlertsViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + menuLayout.setXY(0, 0); + add(menuLayout); +} + +MenuAlertsViewBase::~MenuAlertsViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void MenuAlertsViewBase::setupScreen() +{ + menuLayout.initialize(); + transitionBegins(); +} + +void MenuAlertsViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to MenuAlerts + //Go to MenuAlerts with no screen transition + application().gotoMenuAlertsScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menusettings_screen/MenuSettingsViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menusettings_screen/MenuSettingsViewBase.cpp new file mode 100644 index 00000000..c2f44f38 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menusettings_screen/MenuSettingsViewBase.cpp @@ -0,0 +1,37 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +MenuSettingsViewBase::MenuSettingsViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + menuLayout.setXY(0, 0); + add(menuLayout); +} + +MenuSettingsViewBase::~MenuSettingsViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void MenuSettingsViewBase::setupScreen() +{ + menuLayout.initialize(); + transitionBegins(); +} + +void MenuSettingsViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to MenuSettings + //Go to MenuSettings with no screen transition + application().gotoMenuSettingsScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menutime_screen/MenuTimeViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menutime_screen/MenuTimeViewBase.cpp new file mode 100644 index 00000000..aebd04e8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menutime_screen/MenuTimeViewBase.cpp @@ -0,0 +1,42 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +MenuTimeViewBase::MenuTimeViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + menuLayout.setXY(0, 0); + add(menuLayout); + + tick.setXY(186, 60); + tick.setBitmap(touchgfx::Bitmap(BITMAP_TICKAMBER_22X17_ID)); + add(tick); +} + +MenuTimeViewBase::~MenuTimeViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void MenuTimeViewBase::setupScreen() +{ + menuLayout.initialize(); + transitionBegins(); +} + +void MenuTimeViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to MenuTime + //Go to MenuTime with no screen transition + application().gotoMenuTimeScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menutimesaved_screen/MenuTimeSavedViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menutimesaved_screen/MenuTimeSavedViewBase.cpp new file mode 100644 index 00000000..69bfdb47 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/menutimesaved_screen/MenuTimeSavedViewBase.cpp @@ -0,0 +1,59 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +MenuTimeSavedViewBase::MenuTimeSavedViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + savedText.setXY(73, 150); + savedText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + savedText.setLinespacing(0); + savedText.setWildcard(touchgfx::TypedText(T_TEXT_SAVED).getText()); + savedText.resizeToCurrentText(); + savedText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_30)); + add(savedText); + + icon.setXY(95, 95); + icon.setBitmap(touchgfx::Bitmap(BITMAP_CIRCLETICK_50X50_ID)); + add(icon); + + messageText.setPosition(60, 53, 120, 32); + messageText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + messageText.setLinespacing(0); + messageTextBuffer[0] = 0; + messageText.setWildcard(messageTextBuffer); + messageText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_25)); + add(messageText); + + title.setXY(50, 0); + add(title); +} + +MenuTimeSavedViewBase::~MenuTimeSavedViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void MenuTimeSavedViewBase::setupScreen() +{ + title.initialize(); + transitionBegins(); +} + +void MenuTimeSavedViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to MenuTimeSaved + //Go to MenuTimeSaved with no screen transition + application().gotoMenuTimeSavedScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/track_screen/TrackViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/track_screen/TrackViewBase.cpp new file mode 100644 index 00000000..f1a789a7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/track_screen/TrackViewBase.cpp @@ -0,0 +1,55 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TrackViewBase::TrackViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + scrollIndicator.setXY(0, 47); + add(scrollIndicator); + + buttons.setXY(0, 47); + add(buttons); + + trackFaceStatus.setXY(0, 0); + trackFaceStatus.setVisible(false); + add(trackFaceStatus); + + trackFaceTotal.setXY(0, 0); + add(trackFaceTotal); + + trackFaceLap.setXY(0, 0); + trackFaceLap.setVisible(false); + add(trackFaceLap); +} + +TrackViewBase::~TrackViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackViewBase::setupScreen() +{ + scrollIndicator.initialize(); + buttons.initialize(); + trackFaceStatus.initialize(); + trackFaceTotal.initialize(); + trackFaceLap.initialize(); + transitionBegins(); +} + +void TrackViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to Track + //Go to Track with no screen transition + application().gotoTrackScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackaction_screen/TrackActionViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackaction_screen/TrackActionViewBase.cpp new file mode 100644 index 00000000..59b52ef8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackaction_screen/TrackActionViewBase.cpp @@ -0,0 +1,45 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TrackActionViewBase::TrackActionViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + menuLayout.setXY(0, 0); + add(menuLayout); + + pauseIndicator.setXY(0, 200); + add(pauseIndicator); + + infoCarousel.setXY(40, 0); + add(infoCarousel); +} + +TrackActionViewBase::~TrackActionViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackActionViewBase::setupScreen() +{ + menuLayout.initialize(); + pauseIndicator.initialize(); + infoCarousel.initialize(); + transitionBegins(); +} + +void TrackActionViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to TrackAction + //Go to TrackAction with no screen transition + application().gotoTrackActionScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationViewBase.cpp new file mode 100644 index 00000000..3593cb4d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationViewBase.cpp @@ -0,0 +1,55 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +TrackDiscardConfirmationViewBase::TrackDiscardConfirmationViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + buttons.setXY(0, 47); + add(buttons); + + questionText.setPosition(35, 88, 170, 80); + questionText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + questionText.setLinespacing(-5); + Unicode::snprintf(questionTextBuffer, QUESTIONTEXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_FZIH).getText()); + questionText.setWildcard(questionTextBuffer); + questionText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_20)); + add(questionText); + + tick.setXY(186, 60); + tick.setBitmap(touchgfx::Bitmap(BITMAP_TICKAMBER_22X17_ID)); + add(tick); + + title.setXY(50, 0); + add(title); +} + +TrackDiscardConfirmationViewBase::~TrackDiscardConfirmationViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackDiscardConfirmationViewBase::setupScreen() +{ + buttons.initialize(); + title.initialize(); + transitionBegins(); +} + +void TrackDiscardConfirmationViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to TrackDiscardConfirmation + //Go to TrackDiscardConfirmation with no screen transition + application().gotoTrackDiscardConfirmationScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackdiscarded_screen/TrackDiscardedViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackdiscarded_screen/TrackDiscardedViewBase.cpp new file mode 100644 index 00000000..a910a155 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackdiscarded_screen/TrackDiscardedViewBase.cpp @@ -0,0 +1,59 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +TrackDiscardedViewBase::TrackDiscardedViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + subtitleText.setPosition(48, 158, 144, 57); + subtitleText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + subtitleText.setLinespacing(0); + subtitleTextBuffer[0] = 0; + subtitleText.setWildcard(subtitleTextBuffer); + subtitleText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_18)); + add(subtitleText); + + icon.setXY(95, 95); + icon.setBitmap(touchgfx::Bitmap(BITMAP_CIRCLECROSS_50X50_ID)); + add(icon); + + headingText.setPosition(41, 47, 159, 42); + headingText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + headingText.setLinespacing(0); + Unicode::snprintf(headingTextBuffer, HEADINGTEXT_SIZE, "%s", touchgfx::TypedText(T_TEXT_DISCARTED).getText()); + headingText.setWildcard(headingTextBuffer); + headingText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_30)); + add(headingText); + + title.setXY(50, 0); + add(title); +} + +TrackDiscardedViewBase::~TrackDiscardedViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackDiscardedViewBase::setupScreen() +{ + title.initialize(); + transitionBegins(); +} + +void TrackDiscardedViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to TrackDiscarded + //Go to TrackDiscarded with no screen transition + application().gotoTrackDiscardedScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracklap_screen/TrackLapViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracklap_screen/TrackLapViewBase.cpp new file mode 100644 index 00000000..e9d28d0a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracklap_screen/TrackLapViewBase.cpp @@ -0,0 +1,104 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include + +TrackLapViewBase::TrackLapViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + buttons.setXY(0, 47); + add(buttons); + + line2.setPosition(35, 127, 170, 3); + line2Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line2.setPainter(line2Painter); + line2.setStart(0, 0); + line2.setEnd(170, 0); + line2.setLineWidth(10); + line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line2); + + caloriesValue.setPosition(70, 158, 100, 44); + caloriesValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + caloriesValue.setLinespacing(0); + Unicode::snprintf(caloriesValueBuffer, CALORIESVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_WXKL).getText()); + caloriesValue.setWildcard(caloriesValueBuffer); + caloriesValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_40)); + add(caloriesValue); + + caloriesText.setPosition(70, 137, 100, 23); + caloriesText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + caloriesText.setLinespacing(0); + caloriesText.setTypedText(touchgfx::TypedText(T_RESOURCEID7)); + add(caloriesText); + + timeValue.setPosition(122, 82, 100, 44); + timeValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timeValue.setLinespacing(0); + Unicode::snprintf(timeValueBuffer, TIMEVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_3KKT).getText()); + timeValue.setWildcard(timeValueBuffer); + timeValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_35)); + add(timeValue); + + timeText.setXY(136, 58); + timeText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + timeText.setLinespacing(0); + timeText.setWildcard(touchgfx::TypedText(T_TEXT_TIME).getText()); + timeText.resizeToCurrentText(); + timeText.setTypedText(touchgfx::TypedText(T_TMP_ITALIC_18)); + add(timeText); + + line1.setPosition(119, 84, 3, 44); + line1Painter.setColor(touchgfx::Color::getColorFromRGB(0, 128, 128)); + line1.setPainter(line1Painter); + line1.setStart(0, 0); + line1.setEnd(0, 44); + line1.setLineWidth(10); + line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING); + add(line1); + + hrValue.setPosition(18, 82, 100, 44); + hrValue.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + hrValue.setLinespacing(0); + Unicode::snprintf(hrValueBuffer, HRVALUE_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_Z0WD).getText()); + hrValue.setWildcard(hrValueBuffer); + hrValue.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_35)); + add(hrValue); + + hrText.setXY(40, 58); + hrText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + hrText.setLinespacing(0); + hrText.setTypedText(touchgfx::TypedText(T_RESOURCEID6)); + add(hrText); + + title.setXY(50, 0); + add(title); +} + +TrackLapViewBase::~TrackLapViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackLapViewBase::setupScreen() +{ + buttons.initialize(); + title.initialize(); + transitionBegins(); +} + +void TrackLapViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to TrackLap + //Go to TrackLap with no screen transition + application().gotoTrackLapScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracksaved_screen/TrackSavedViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracksaved_screen/TrackSavedViewBase.cpp new file mode 100644 index 00000000..36f47c7f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracksaved_screen/TrackSavedViewBase.cpp @@ -0,0 +1,59 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +TrackSavedViewBase::TrackSavedViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + subtitleText.setPosition(48, 156, 144, 57); + subtitleText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + subtitleText.setLinespacing(0); + subtitleTextBuffer[0] = 0; + subtitleText.setWildcard(subtitleTextBuffer); + subtitleText.setTypedText(touchgfx::TypedText(T_TMP_MEDIUM_18)); + add(subtitleText); + + icon.setXY(95, 95); + icon.setBitmap(touchgfx::Bitmap(BITMAP_CIRCLETICK_50X50_ID)); + add(icon); + + headingText.setPosition(41, 47, 159, 42); + headingText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + headingText.setLinespacing(0); + Unicode::snprintf(headingTextBuffer, HEADINGTEXT_SIZE, "%s", touchgfx::TypedText(T_TEXT_SAVED).getText()); + headingText.setWildcard(headingTextBuffer); + headingText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_30)); + add(headingText); + + title.setXY(50, 0); + add(title); +} + +TrackSavedViewBase::~TrackSavedViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackSavedViewBase::setupScreen() +{ + title.initialize(); + transitionBegins(); +} + +void TrackSavedViewBase::transitionBegins() +{ + //Interaction2 + //When screen transition begins change screen to TrackSaved + //Go to TrackSaved with no screen transition + application().gotoTrackSavedScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackstartconfirmation_screen/TrackStartConfirmationViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackstartconfirmation_screen/TrackStartConfirmationViewBase.cpp new file mode 100644 index 00000000..e8b2351d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/trackstartconfirmation_screen/TrackStartConfirmationViewBase.cpp @@ -0,0 +1,53 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +TrackStartConfirmationViewBase::TrackStartConfirmationViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + buttons.setXY(0, 47); + add(buttons); + + questionText.setPosition(35, 94, 170, 52); + questionText.setColor(touchgfx::Color::getColorFromRGB(192, 192, 192)); + questionText.setLinespacing(-5); + questionText.setTypedText(touchgfx::TypedText(T_TMP_SEMIBOLD_20)); + add(questionText); + + tick.setXY(186, 60); + tick.setBitmap(touchgfx::Bitmap(BITMAP_TICKAMBER_22X17_ID)); + add(tick); + + title.setXY(50, 0); + add(title); +} + +TrackStartConfirmationViewBase::~TrackStartConfirmationViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackStartConfirmationViewBase::setupScreen() +{ + buttons.initialize(); + title.initialize(); + transitionBegins(); +} + +void TrackStartConfirmationViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to TrackStartConfirmation + //Go to TrackStartConfirmation with no screen transition + application().gotoTrackStartConfirmationScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracksummary_screen/TrackSummaryViewBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracksummary_screen/TrackSummaryViewBase.cpp new file mode 100644 index 00000000..0bfc54eb --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/gui_generated/src/tracksummary_screen/TrackSummaryViewBase.cpp @@ -0,0 +1,60 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +TrackSummaryViewBase::TrackSummaryViewBase() +{ + touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); + + __background.setPosition(0, 0, 240, 240); + __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0)); + add(__background); + + buttons.setXY(0, 46); + add(buttons); + + scrollIndicator.setXY(0, 47); + add(scrollIndicator); + + summaryFaceLaps.setXY(0, 0); + summaryFaceLaps.setVisible(false); + add(summaryFaceLaps); + + summaryFaceZones.setXY(0, 0); + summaryFaceZones.setVisible(false); + add(summaryFaceZones); + + summaryFaceCal.setXY(0, 0); + summaryFaceCal.setVisible(false); + add(summaryFaceCal); + + summaryFaceOverview.setXY(0, 0); + add(summaryFaceOverview); +} + +TrackSummaryViewBase::~TrackSummaryViewBase() +{ + touchgfx::CanvasWidgetRenderer::resetBuffer(); +} + +void TrackSummaryViewBase::setupScreen() +{ + buttons.initialize(); + scrollIndicator.initialize(); + summaryFaceLaps.initialize(); + summaryFaceZones.initialize(); + summaryFaceCal.initialize(); + summaryFaceOverview.initialize(); + transitionBegins(); +} + +void TrackSummaryViewBase::transitionBegins() +{ + //Interaction1 + //When screen transition begins change screen to TrackSummary + //Go to TrackSummary with no screen transition + application().gotoTrackSummaryScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/BitmapDatabase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/BitmapDatabase.hpp new file mode 100644 index 00000000..3ab724be --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/BitmapDatabase.hpp @@ -0,0 +1 @@ +#include diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/images/BitmapDatabase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/images/BitmapDatabase.hpp new file mode 100644 index 00000000..9f25cc72 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/images/BitmapDatabase.hpp @@ -0,0 +1,33 @@ +// Generated by imageconverter. Please, do not edit! + +#ifndef TOUCHGFX_BITMAPDATABASE_HPP +#define TOUCHGFX_BITMAPDATABASE_HPP + +#include +#include + +const uint16_t BITMAP_CIRCLECROSS_50X50_ID = 0; +const uint16_t BITMAP_CIRCLETICK_50X50_ID = 1; +const uint16_t BITMAP_CLOCK_16X19_ID = 2; +const uint16_t BITMAP_CLOCK_24X29_ID = 3; +const uint16_t BITMAP_CROSSAMBER_17X17_ID = 4; +const uint16_t BITMAP_CROSSWHITE_17X17_ID = 5; +const uint16_t BITMAP_HEART_30X30_ID = 6; +const uint16_t BITMAP_HEART_46X39_ID = 7; +const uint16_t BITMAP_HEARTRATEZONE1_ID = 8; +const uint16_t BITMAP_HEARTRATEZONE2_ID = 9; +const uint16_t BITMAP_HEARTRATEZONE3_ID = 10; +const uint16_t BITMAP_HEARTRATEZONE4_ID = 11; +const uint16_t BITMAP_HEARTRATEZONE5_ID = 12; +const uint16_t BITMAP_HEARTRATEZONEGROUP_ID = 13; +const uint16_t BITMAP_PAUSE_14X14_ID = 14; +const uint16_t BITMAP_TICKAMBER_22X17_ID = 15; +const uint16_t BITMAP_WORKOUTMAN_30X30_ID = 16; + +namespace BitmapDatabase +{ +const touchgfx::Bitmap::BitmapData* getInstance(); +uint16_t getInstanceSize(); +} // namespace BitmapDatabase + +#endif // TOUCHGFX_BITMAPDATABASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/images/SVGDatabase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/images/SVGDatabase.hpp new file mode 100644 index 00000000..1fba9b77 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/include/images/SVGDatabase.hpp @@ -0,0 +1,20 @@ +// Generated by imageconverter. Please, do not edit! + +#ifndef TOUCHGFX_SVGDATABASE_HPP +#define TOUCHGFX_SVGDATABASE_HPP + +#include +#include + +enum SVGImages +{ + NUMBER_OF_SVG_IMAGES = 0 +}; + +namespace SVGDatabase +{ +const touchgfx::VGObject* getInstance(); +uint16_t getInstanceSize(); +} // namespace SVGDatabase + +#endif // TOUCHGFX_SVGDATABASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/BitmapDatabase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/BitmapDatabase.cpp new file mode 100644 index 00000000..5ab272b3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/BitmapDatabase.cpp @@ -0,0 +1,56 @@ +// 4.26.1 0x33c56435 +// Generated by imageconverter. Please, do not edit! + +#include +#include + +extern const unsigned char image_circlecross_50x50[]; // BITMAP_CIRCLECROSS_50X50_ID = 0, Size: 50x50 pixels +extern const unsigned char image_circletick_50x50[]; // BITMAP_CIRCLETICK_50X50_ID = 1, Size: 50x50 pixels +extern const unsigned char image_clock_16x19[]; // BITMAP_CLOCK_16X19_ID = 2, Size: 16x19 pixels +extern const unsigned char image_clock_24x29[]; // BITMAP_CLOCK_24X29_ID = 3, Size: 24x29 pixels +extern const unsigned char image_crossamber_17x17[]; // BITMAP_CROSSAMBER_17X17_ID = 4, Size: 17x17 pixels +extern const unsigned char image_crosswhite_17x17[]; // BITMAP_CROSSWHITE_17X17_ID = 5, Size: 17x17 pixels +extern const unsigned char image_heart_30x30[]; // BITMAP_HEART_30X30_ID = 6, Size: 30x30 pixels +extern const unsigned char image_heart_46x39[]; // BITMAP_HEART_46X39_ID = 7, Size: 46x39 pixels +extern const unsigned char image_heartratezone1[]; // BITMAP_HEARTRATEZONE1_ID = 8, Size: 39x44 pixels +extern const unsigned char image_heartratezone2[]; // BITMAP_HEARTRATEZONE2_ID = 9, Size: 47x37 pixels +extern const unsigned char image_heartratezone3[]; // BITMAP_HEARTRATEZONE3_ID = 10, Size: 50x28 pixels +extern const unsigned char image_heartratezone4[]; // BITMAP_HEARTRATEZONE4_ID = 11, Size: 47x37 pixels +extern const unsigned char image_heartratezone5[]; // BITMAP_HEARTRATEZONE5_ID = 12, Size: 39x44 pixels +extern const unsigned char image_heartratezonegroup[]; // BITMAP_HEARTRATEZONEGROUP_ID = 13, Size: 210x69 pixels +extern const unsigned char image_pause_14x14[]; // BITMAP_PAUSE_14X14_ID = 14, Size: 14x14 pixels +extern const unsigned char image_tickamber_22x17[]; // BITMAP_TICKAMBER_22X17_ID = 15, Size: 22x17 pixels +extern const unsigned char image_workoutman_30x30[]; // BITMAP_WORKOUTMAN_30X30_ID = 16, Size: 30x30 pixels + +const touchgfx::Bitmap::BitmapData bitmap_database[] = { + { image_circlecross_50x50, 0, 50, 50, 45, 15, 3, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 20, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_circletick_50x50, 0, 50, 50, 45, 15, 3, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 20, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_clock_16x19, 0, 16, 19, 4, 16, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 2, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_clock_24x29, 0, 24, 29, 12, 13, 4, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 8, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_crossamber_17x17, 0, 17, 17, 5, 5, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_crosswhite_17x17, 0, 17, 17, 5, 5, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heart_30x30, 0, 30, 30, 4, 7, 21, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 11, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heart_46x39, 0, 46, 39, 6, 6, 34, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 17, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heartratezone1, 0, 39, 44, 6, 27, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 12, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heartratezone2, 0, 47, 37, 28, 5, 16, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heartratezone3, 0, 50, 28, 2, 2, 46, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 9, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heartratezone4, 0, 47, 37, 2, 5, 16, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heartratezone5, 0, 39, 44, 26, 27, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 12, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_heartratezonegroup, 0, 210, 69, 83, 2, 44, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 5, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_pause_14x14, 0, 14, 14, 8, 4, 2, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 6, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_tickamber_22x17, 0, 22, 17, 4, 11, 7, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 3, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 }, + { image_workoutman_30x30, 0, 30, 30, 13, 7, 3, ((uint8_t)touchgfx::Bitmap::ABGR2222) >> 3, 12, ((uint8_t)touchgfx::Bitmap::ABGR2222) & 0x7 } +}; + +namespace BitmapDatabase +{ +const touchgfx::Bitmap::BitmapData* getInstance() +{ + return bitmap_database; +} + +uint16_t getInstanceSize() +{ + return (uint16_t)(sizeof(bitmap_database) / sizeof(touchgfx::Bitmap::BitmapData)); +} +} // namespace BitmapDatabase diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/SVGDatabase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/SVGDatabase.cpp new file mode 100644 index 00000000..29223276 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/SVGDatabase.cpp @@ -0,0 +1,19 @@ +// Generated by imageconverter. Please, do not edit! + +#include + +using namespace touchgfx; + + +namespace SVGDatabase +{ +const touchgfx::VGObject* getInstance() +{ + return (const touchgfx::VGObject*)0; +} + +uint16_t getInstanceSize() +{ + return 0; +} +} // namespace SVGDatabase diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CircleCross_50x50.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CircleCross_50x50.cpp new file mode 100644 index 00000000..417c7893 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CircleCross_50x50.cpp @@ -0,0 +1,217 @@ +// 4.26.1 0x81f6eeca D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_circlecross_50x50[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 50x50 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0x4b, 0x8b, 0x8b, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8b, 0x8b, 0x4b, 0x4b, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x8a, 0x4a, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0x4a, 0x8a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x4a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xc6, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x4a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x8a, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, + 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, + 0x0a, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, 0xcb, + 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, + 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x8a, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x8a, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x0a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x4b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x4b, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x4a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x4a, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4a, 0x8a, 0xca, + 0xca, 0xcb, 0xcb, 0xcb, 0xc6, 0xca, 0xca, 0x8a, 0x4a, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CircleTick_50x50.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CircleTick_50x50.cpp new file mode 100644 index 00000000..aae791ad --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CircleTick_50x50.cpp @@ -0,0 +1,217 @@ +// 4.26.1 0x3d69eeb5 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_circletick_50x50[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 50x50 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0x4b, 0x8b, 0x8b, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8b, 0x8b, 0x4b, 0x4b, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x8a, 0x4a, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0x4a, 0x8a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x4a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xc6, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x4a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, + 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x0a, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x8a, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, + 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, + 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0xca, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x0a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x4b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x4b, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x4a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x4a, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4a, 0x8a, 0xca, + 0xca, 0xcb, 0xcb, 0xcb, 0xc6, 0xca, 0xca, 0x8a, 0x4a, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Clock_16x19.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Clock_16x19.cpp new file mode 100644 index 00000000..cc32c074 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Clock_16x19.cpp @@ -0,0 +1,34 @@ +// 4.26.1 0x9e364eb9 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_clock_16x19[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 16x19 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0xff, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, + 0xff, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2a, 0xbf, 0xff, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x6a, 0xff, 0x2a, 0x00, 0x28, 0x68, 0xa8, 0x68, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xa9, 0xa8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xa8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0x54, 0x68, 0x68, 0xa8, 0xe8, 0xe8, + 0xe8, 0x68, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x6a, + 0xbf, 0x2a, 0x68, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0xa8, 0xe8, 0xe8, 0xa8, + 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0x6a, 0x54, 0xe8, 0xe8, 0xa8, 0x00, + 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0xff, 0x2a, + 0xd4, 0xe8, 0xe8, 0x00, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0xaa, + 0xff, 0xff, 0xff, 0x6a, 0xa8, 0xe8, 0xe8, 0x28, 0xe8, 0xe8, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0xff, 0x6a, 0xa8, 0xe8, 0xe8, 0x28, + 0xd4, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0xff, 0x2a, + 0xa8, 0xe8, 0xe8, 0x00, 0xa8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0xaa, + 0xff, 0xff, 0xaa, 0x28, 0xe8, 0xe8, 0xe8, 0x00, 0x68, 0xe8, 0xe8, 0xe8, + 0x28, 0x00, 0x00, 0x6a, 0xea, 0x6a, 0x28, 0xe8, 0xe8, 0xe8, 0x68, 0x00, + 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0x54, 0x28, 0x00, 0x28, 0x54, 0xe8, 0xe8, + 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x28, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0xa8, 0xe8, 0xa8, 0x54, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CrossAmber_17x17.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CrossAmber_17x17.cpp new file mode 100644 index 00000000..559f5899 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CrossAmber_17x17.cpp @@ -0,0 +1,33 @@ +// 4.26.1 0x2fbefec1 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_crossamber_17x17[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 17x17 ABGR2222 pixels. + 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, + 0x0a, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0x00, + 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, + 0x0a, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xca, 0xcb, 0xcb, 0xcb, 0xc6, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xc6, 0xcb, 0xcb, 0xcb, 0x8a, 0x0a, 0x8a, 0xcb, 0x8a, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8a, 0xcb, 0x8a, + 0x0a +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CrossWhite_17x17.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CrossWhite_17x17.cpp new file mode 100644 index 00000000..8b4db756 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_CrossWhite_17x17.cpp @@ -0,0 +1,33 @@ +// 4.26.1 0x56c43d46 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_crosswhite_17x17[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 17x17 ABGR2222 pixels. + 0x2a, 0xbf, 0xff, 0xbf, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xbf, 0xff, 0xbf, 0x2a, 0xea, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, + 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x2a, 0xea, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, + 0x2a, 0x00, 0x2a, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, + 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x6a, 0xea, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x2a, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, + 0x2a, 0x00, 0x2a, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0xea, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xff, 0xff, 0xff, 0xaa, 0x2a, 0xaa, 0xff, 0xaa, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xaa, 0xff, 0xaa, + 0x2a +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone1.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone1.cpp new file mode 100644 index 00000000..6c6d700a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone1.cpp @@ -0,0 +1,151 @@ +// 4.26.1 0xda9d70fc D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heartratezone1[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 39x44 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, + 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xaa, + 0x6a, 0x2a, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x6a, 0x6a, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xaa, 0xaa, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, + 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x55, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xaa, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xd5, 0x2a, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xaa, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xaa, 0xea, + 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xaa, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone2.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone2.cpp new file mode 100644 index 00000000..95e3c897 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone2.cpp @@ -0,0 +1,153 @@ +// 4.26.1 0x48e8b56c D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heartratezone2[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 47x37 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0d, 0x4d, 0x8c, 0xcc, 0x4c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x8c, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4c, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x4d, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x8c, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x49, 0xcc, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x89, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0d, 0x8c, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x89, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x8c, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x8c, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x8d, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x4d, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0x89, 0x0c, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xcc, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcc, 0x49, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x4c, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x8c, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x89, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcc, 0x8c, 0x49, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, + 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, + 0x89, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x8c, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x8d, 0x49, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc9, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x8c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0x8d, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x89, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0d, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x4c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0d, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x4d, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x8d, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0x89, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcc, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8c, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xc9, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcc, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x8c, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x8d, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xcd, 0xcd, 0xcd, 0xcd, 0x8d, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0xcc, 0xcd, 0xcd, 0xcc, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4c, 0xcd, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x8d, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x8c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0x8c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcd, 0xcd, 0x8c, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcd, 0x8d, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone3.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone3.cpp new file mode 100644 index 00000000..24acd656 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone3.cpp @@ -0,0 +1,125 @@ +// 4.26.1 0x2ae91e69 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heartratezone3[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 50x28 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0f, + 0x4f, 0x4f, 0x4f, 0x8f, 0x8f, 0x8f, 0x8f, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x4f, + 0x4f, 0x4f, 0x0f, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4f, 0x4f, 0x8f, 0x8f, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x8f, 0x8f, 0x4f, 0x4f, + 0x0a, 0x00, 0x00, 0x00, 0x8f, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0x8f, 0x8f, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0x8a, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x8a, 0x4a, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x4a, + 0x0a, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0x0a, 0x00, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xca, 0x00, 0x00, 0x8a, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0x8a, 0x00, 0x00, 0x4a, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x4a, 0x00, 0x00, 0x4a, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x0a, 0x00, 0x00, 0x00, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0xca, 0xca, 0xca, 0xca, + 0xca, 0xca, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x00, 0x00, + 0x00, 0x00, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0xca, 0x8a, + 0x8a, 0x4a, 0x4a, 0x4a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4a, 0x4a, + 0x4a, 0x8a, 0x8a, 0xca, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, + 0x00, 0x00, 0x00, 0x00, 0x8a, 0xca, 0x8a, 0x8a, 0x4a, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4a, 0x8a, 0x8a, + 0xca, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xca, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, + 0xcf, 0xcf, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xca, 0xcf, 0xcf, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4a, 0xcf, 0xcf, 0xcf, 0xcf, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x4a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone4.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone4.cpp new file mode 100644 index 00000000..6251b28a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone4.cpp @@ -0,0 +1,153 @@ +// 4.26.1 0xf58c9149 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heartratezone4[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 47x37 ABGR2222 pixels. + 0x00, 0x00, 0x0b, 0xcb, 0x8b, 0x4b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x4a, + 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x8b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xc7, 0x4b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xca, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x4b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0b, 0x47, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc6, 0x4b, 0x0b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x4a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x0b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4a, 0x8b, 0xca, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x4b, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, + 0x4b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x8b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xca, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, + 0xcb, 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xc6, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0x8b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x46, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0x8a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone5.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone5.cpp new file mode 100644 index 00000000..ff42b573 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZone5.cpp @@ -0,0 +1,151 @@ +// 4.26.1 0x5ca49022 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heartratezone5[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 39x44 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x83, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc3, + 0xc3, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc2, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x83, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x42, 0x42, 0x82, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x42, 0x43, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x43, 0x83, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x42, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x82, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc2, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x82, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc2, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x83, 0xc3, 0xc3, 0x82, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc2, 0xc3, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0x82, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc2, 0x83, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0x83, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZoneGroup.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZoneGroup.cpp new file mode 100644 index 00000000..64301911 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_HeartRateZoneGroup.cpp @@ -0,0 +1,1216 @@ +// 4.26.1 0xeb18db9f D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heartratezonegroup[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 210x69 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, + 0x8f, 0x8f, 0x8f, 0x8f, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0x8f, 0x8f, 0x8f, 0x8f, 0x4f, 0x4f, 0x4f, 0x0f, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x4f, 0x4f, 0x8f, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x8f, 0x8f, 0x4f, 0x4f, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x8f, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x8f, 0x8f, 0x4f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x4c, 0x8c, 0xcd, 0x4d, 0x00, 0x00, 0x00, 0x8a, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x8a, 0x00, 0x00, + 0x00, 0x4a, 0xcb, 0x8b, 0x4a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x4c, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0x8c, 0x00, + 0x00, 0x00, 0x4a, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0x4a, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, + 0xca, 0x47, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4d, 0xcc, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x00, 0x00, 0x00, 0x4a, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x4a, 0x00, 0x00, + 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8c, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x0c, + 0x00, 0x00, 0x00, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0xca, 0xca, 0xca, 0x8a, 0x8a, 0x8a, + 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0xca, 0xca, 0xca, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0x00, 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x4b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x8c, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x4c, 0x00, 0x00, 0x00, 0xca, 0xcf, 0xcf, + 0xcf, 0xcf, 0xcf, 0xca, 0xca, 0x8a, 0x8a, 0x4a, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x4a, 0x8a, + 0x8a, 0xca, 0xca, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xca, 0x00, 0x00, 0x00, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xc6, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xc9, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x8c, + 0x00, 0x00, 0x00, 0x8a, 0xca, 0x8a, 0x4a, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x4a, + 0x8a, 0xca, 0x8a, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x49, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x8c, 0x4c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x8b, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, + 0x8c, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4d, 0xcc, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcc, 0x8c, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0x8a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x4b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x8c, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xc7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x8d, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x49, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, + 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x8d, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0x8c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4b, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x8c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, + 0x8b, 0xc6, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x4b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, 0x4c, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x8c, + 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcc, 0x4c, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x4b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x8b, 0x0b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0x4d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x4a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x89, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0x8c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x8c, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x8c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8d, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcc, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc9, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, 0x4d, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0xcb, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4c, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xc9, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x8c, + 0xcd, 0xcd, 0xcd, 0xcc, 0x8d, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x8b, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x83, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xd5, 0xea, + 0xea, 0x2a, 0x00, 0x00, 0x00, 0x0c, 0xcd, 0xcd, 0xcc, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xcb, 0xcb, 0xcb, + 0x0b, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0xcc, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc3, + 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x82, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x82, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xd5, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xaa, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xd5, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc2, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x83, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x82, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x2a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x43, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, + 0x00, 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0x00, 0x00, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, + 0x6a, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, + 0x15, 0xaa, 0xea, 0xea, 0xea, 0xea, 0xea, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x02, 0x00, 0x00, 0x2a, 0xaa, 0xea, 0xea, + 0xea, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc3, 0xc3, 0x83, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, + 0x82, 0x02, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Heart_30x30.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Heart_30x30.cpp new file mode 100644 index 00000000..164d1d7b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Heart_30x30.cpp @@ -0,0 +1,83 @@ +// 4.26.1 0x20356b0a D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heart_30x30[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 30x30 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xa8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xaa, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x14, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0x94, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xbf, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0xaa, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, + 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, + 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, + 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, 0x00, + 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, + 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, + 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xff, 0x2a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe9, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xa8, 0x68, 0x14, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Heart_46x39.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Heart_46x39.cpp new file mode 100644 index 00000000..ad5e790a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Heart_46x39.cpp @@ -0,0 +1,158 @@ +// 4.26.1 0x69bd077e D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_heart_46x39[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 46x39 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xa8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xa8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xea, + 0xbf, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x28, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xea, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0x28, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, 0x00, + 0x00, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x28, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x68, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x6a, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xbf, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xaa, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x6a, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6a, 0x00, 0x00, 0x00, + 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xd4, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xd4, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xff, 0xea, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xfe, 0xff, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xea, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x29, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0xa9, 0xe8, 0xe8, 0xa9, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Pause_14x14.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Pause_14x14.cpp new file mode 100644 index 00000000..4756af8e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_Pause_14x14.cpp @@ -0,0 +1,25 @@ +// 4.26.1 0xd46823bb D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_pause_14x14[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 14x14 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x2a, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xaa, 0x6a, 0x6a, 0xaa, 0xff, + 0xff, 0x6a, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xaa, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x2a, 0xaa, 0xff, 0x7f, 0x00, 0x2a, 0xff, 0xaa, 0x00, 0x2a, 0x2a, + 0x00, 0x00, 0x2a, 0x2a, 0x00, 0xaa, 0xff, 0x2a, 0xaa, 0xff, 0x2a, 0x00, + 0xea, 0xff, 0x2a, 0x00, 0xff, 0xff, 0x00, 0x2a, 0xff, 0xaa, 0xff, 0xbf, + 0x00, 0x00, 0xea, 0xff, 0x2a, 0x00, 0xff, 0xff, 0x00, 0x00, 0xaa, 0xff, + 0xff, 0x6a, 0x00, 0x00, 0xea, 0xff, 0x2a, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x6a, 0xff, 0xff, 0x6a, 0x00, 0x00, 0xea, 0xff, 0x2a, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x6a, 0xff, 0xea, 0xaa, 0x00, 0x00, 0xea, 0xff, 0x2a, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xaa, 0xff, 0xaa, 0xff, 0x2a, 0x00, 0xea, 0xff, + 0x2a, 0x00, 0xff, 0xff, 0x00, 0x2a, 0xff, 0xbf, 0x2a, 0xff, 0xbf, 0x00, + 0x2a, 0x2a, 0x00, 0x00, 0x2a, 0x2a, 0x00, 0xbf, 0xff, 0x2a, 0x00, 0x6a, + 0xff, 0xbf, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbf, 0xff, 0x6a, 0x00, + 0x00, 0x00, 0x6a, 0xff, 0xff, 0xbf, 0x6a, 0x6a, 0xaa, 0xff, 0xff, 0x6a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xaa, 0xea, 0xff, 0xff, 0xea, 0xaa, + 0x2a, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_TickAmber_22x17.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_TickAmber_22x17.cpp new file mode 100644 index 00000000..54ff5731 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_TickAmber_22x17.cpp @@ -0,0 +1,40 @@ +// 4.26.1 0x9bf58d12 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_tickamber_22x17[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 22x17 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8b, 0xcb, 0x8b, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0x8b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x0a, 0x8b, + 0xcb, 0x8b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0xca, 0xcb, 0xcb, 0xcb, + 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0x0a, 0x00, 0x0a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8a, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x4b, + 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, + 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, + 0xcb, 0xcb, 0xcb, 0xca, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xca, 0xcb, + 0x8a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_WorkoutMan_30x30.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_WorkoutMan_30x30.cpp new file mode 100644 index 00000000..1f0afa5a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_WorkoutMan_30x30.cpp @@ -0,0 +1,83 @@ +// 4.26.1 0xbff72c63 D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_workoutman_30x30[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 30x30 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x14, 0x94, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, + 0x94, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xe8, 0xe8, + 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xe8, 0xd4, 0xe8, 0x14, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x00, 0x94, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xd4, + 0xe8, 0xd4, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe8, 0xe8, 0xe8, + 0xd4, 0xe8, 0x14, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x94, + 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x14, + 0xe8, 0xd4, 0xe8, 0xd4, 0xe8, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xd4, + 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0x14, 0x00, + 0x00, 0x54, 0xe8, 0xd4, 0xe8, 0xd4, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, + 0x94, 0x54, 0x14, 0x14, 0x94, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, + 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x94, + 0xe8, 0xd4, 0xd4, 0xd4, 0xe8, 0xe8, 0x54, 0x14, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xea, 0xea, 0xea, 0xff, 0x15, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0xe8, 0xd4, 0xe8, 0xfe, 0x15, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, + 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xd4, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x14, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xd4, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, + 0xd4, 0xe8, 0x14, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0x14, 0x00, 0x00, 0xe8, 0xd4, + 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xe8, 0xd4, 0xe8, + 0x14, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xd4, 0xe8, 0xd4, 0xe8, 0x14, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0x14, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xd4, 0xe8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x14, 0xe8, 0xd4, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0xe8, + 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xe8, + 0xe8, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x94, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_clock_24x29.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_clock_24x29.cpp new file mode 100644 index 00000000..1cc80b30 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/images/src/image_clock_24x29.cpp @@ -0,0 +1,66 @@ +// 4.26.1 0x0250722d D0 AN R0 FABGR2222 U222 N0 SIntFlashSection +// Generated by imageconverter. Please, do not edit! + +#include + +LOCATION_PRAGMA("IntFlashSection") +KEEP extern const unsigned char image_clock_24x29[] LOCATION_ATTRIBUTE("IntFlashSection") = { // 24x29 ABGR2222 pixels. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xbf, 0xff, 0xff, + 0xff, 0xbf, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6a, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbf, 0xbf, + 0xbf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x14, 0x54, 0x68, 0x68, + 0x68, 0x54, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0x54, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0xff, 0xff, 0x6a, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2a, 0xbf, 0x69, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0xa8, + 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, + 0x00, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x14, 0x00, 0x00, 0x00, 0x2a, + 0xbf, 0xbf, 0x2a, 0x00, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, + 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0x6a, 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0x54, 0x00, + 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0x6a, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, + 0xa8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, + 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x6a, 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0x28, + 0xe8, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, + 0xe8, 0xe8, 0xe8, 0xe8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0x28, + 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0x28, + 0xa8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, + 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, + 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, + 0x00, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0x94, 0x00, 0x00, 0x00, 0x00, 0x6a, + 0xff, 0xbf, 0x3f, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0x00, + 0x00, 0x14, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x14, 0x94, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, + 0x00, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x68, 0x68, + 0x68, 0xa8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x68, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xa8, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0xa8, 0xa8, + 0xa8, 0xa8, 0x68, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/mainBase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/mainBase.hpp new file mode 100644 index 00000000..bf27e23b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/mainBase.hpp @@ -0,0 +1,9 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include + +void setupSimulator(int argc, char** argv, touchgfx::HAL& hal); + +touchgfx::LCD& setupLCD(); diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/DirectFrameBufferVideoController.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/DirectFrameBufferVideoController.hpp new file mode 100644 index 00000000..ecc67eca --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/DirectFrameBufferVideoController.hpp @@ -0,0 +1,356 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TOUCHGFX_DIRECTFRAMEBUFFERVIDEOCONTROLLER_HPP +#define TOUCHGFX_DIRECTFRAMEBUFFERVIDEOCONTROLLER_HPP + +#include +#include +#include +#include + +/** + * Strategy: + * Decode directly into the framebuffer in draw. + * Tick will decide if we are going to a new frame. + */ +template +class DirectFrameBufferVideoController : public touchgfx::VideoController +{ +public: + DirectFrameBufferVideoController() + : VideoController(), allowSkipFrames(true) + { + assert((no_streams > 0) && "Video: Number of streams zero!"); + + // Clear arrays + memset(mjpegDecoders, 0, sizeof(mjpegDecoders)); + } + + Handle registerVideoWidget(touchgfx::VideoWidget& widget) + { + // Find stream handle for Widget + Handle handle = getFreeHandle(); + + streams[handle].isActive = true; + + //Set Widget buffer format and address + widget.setVideoBufferFormat(output_format, 0, 0); + widget.setVideoBuffer((uint8_t*)0); + + return handle; + } + + void unregisterVideoWidget(const Handle handle) + { + streams[handle].isActive = false; + } + + void setFrameRate(const Handle handle, uint32_t ui_frames, uint32_t video_frames) + { + assert(handle < no_streams); + Stream& stream = streams[handle]; + + // Reset counters + stream.frameCount = 0; + stream.tickCount = 0; + + // Save requested frame rate ratio + stream.frame_rate_ticks = ui_frames; + stream.frame_rate_video = video_frames; + } + + void setVideoData(const Handle handle, const uint8_t* movie, const uint32_t length) + { + assert(handle < no_streams); + + // Reset decoder to first frame + mjpegDecoders[handle]->setVideoData(movie, length); + + // Lower flag to show the first frame + Stream& stream = streams[handle]; + stream.frameNumber = mjpegDecoders[handle]->getCurrentFrameNumber(); + stream.doDecodeNextFrame = false; + + // Stop playing + setCommand(handle, PAUSE, 0); + } + + void setVideoData(const Handle handle, touchgfx::VideoDataReader& reader) + { + assert(handle < no_streams); + + // Reset decoder to first frame + mjpegDecoders[handle]->setVideoData(reader); + + // Lower flag to show the first frame + Stream& stream = streams[handle]; + stream.frameNumber = mjpegDecoders[handle]->getCurrentFrameNumber(); + stream.doDecodeNextFrame = false; + + // Stop playing + setCommand(handle, PAUSE, 0); + } + + void setCommand(const Handle handle, Command cmd, uint32_t param) + { + assert(handle < no_streams); + Stream& stream = streams[handle]; + + switch (cmd) + { + case PLAY: + // Cannot Play without movie + if (mjpegDecoders[handle]->hasVideo()) + { + stream.isPlaying = true; + stream.isShowingOneFrame = false; + // Reset counters + stream.frameCount = 0; + stream.tickCount = 0; + // If non-repeating video stopped at the end, kick to next frame + if (!stream.repeat) + { + MJPEGDecoder* const decoder = mjpegDecoders[handle]; + if (decoder->getCurrentFrameNumber() == decoder->getNumberOfFrames()) + { + decoder->gotoNextFrame(); + } + } + } + break; + case PAUSE: + stream.isPlaying = false; + stream.isShowingOneFrame = false; + break; + case SEEK: + stream.seek_to_frame = param; + // Reset counters + stream.frameCount = 0; + stream.tickCount = 0; + break; + case SHOW: + stream.seek_to_frame = param; + stream.isShowingOneFrame = true; + stream.doDecodeNextFrame = true; + // Reset counters + stream.frameCount = 0; + stream.tickCount = 0; + break; + case STOP: + stream.isPlaying = false; + stream.isShowingOneFrame = false; + stream.seek_to_frame = 1; + // Reset counters + stream.frameCount = 0; + stream.tickCount = 0; + break; + case SET_REPEAT: + stream.repeat = (param > 0); + break; + } + } + + bool updateFrame(const Handle handle, touchgfx::VideoWidget& widget) + { + assert(handle < no_streams); + Stream& stream = streams[handle]; + + bool hasMoreFrames = true; + + if (stream.isPlaying || stream.isShowingOneFrame) + { + // Increase tickCount + stream.tickCount+=HAL::getInstance()->getLCDRefreshCount(); + + // Lower flag + stream.isShowingOneFrame = false; + + if (stream.doDecodeNextFrame) + { + MJPEGDecoder* const decoder = mjpegDecoders[handle]; + // Invalidate to get widget redrawn + widget.invalidate(); + // Seek or increment video frame + if (stream.seek_to_frame > 0) + { + decoder->gotoFrame(stream.seek_to_frame); + hasMoreFrames = (stream.seek_to_frame < decoder->getNumberOfFrames()); + stream.seek_to_frame = 0; + } + else + { + if (stream.skip_frames > 0) + { + decoder->gotoFrame(decoder->getCurrentFrameNumber() + stream.skip_frames); + stream.frameCount += stream.skip_frames; + stream.skip_frames = 0; + } + if (stream.repeat) + { + hasMoreFrames = decoder->gotoNextFrame(); + } + else + { + if (decoder->getCurrentFrameNumber() < decoder->getNumberOfFrames()) + { + hasMoreFrames = decoder->gotoNextFrame(); + } + else + { + stream.isPlaying = false; + hasMoreFrames = false; + } + } + } + + stream.frameNumber = decoder->getCurrentFrameNumber(); + stream.frameCount++; + } + + // Save decode status for next frame + stream.doDecodeNextFrame = decodeForNextTick(stream); + } + + return hasMoreFrames; + } + + void draw(const Handle handle, const touchgfx::Rect& invalidatedArea, const touchgfx::VideoWidget& widget) + { + assert(handle < no_streams); + + if (output_format != Bitmap::RGB565 && output_format != Bitmap::RGB888 && output_format != Bitmap::ARGB8888) + { + return; + } + + if (mjpegDecoders[handle]->hasVideo()) + { + uint8_t* wbuf = (uint8_t*)touchgfx::HAL::getInstance()->lockFrameBuffer(); + touchgfx::Rect absolute = widget.getAbsoluteRect(); + DisplayTransformation::transformDisplayToFrameBuffer(absolute); + + // Get frame buffer pointer to upper left of widget in framebuffer coordinates + switch(output_format) + { + case Bitmap::RGB565: + wbuf += (absolute.x + absolute.y * touchgfx::HAL::FRAME_BUFFER_WIDTH) * 2; + break; + case Bitmap::RGB888: + wbuf += (absolute.x + absolute.y * touchgfx::HAL::FRAME_BUFFER_WIDTH) * 3; + break; + case Bitmap::ARGB8888: + wbuf += (absolute.x + absolute.y * touchgfx::HAL::FRAME_BUFFER_WIDTH) * 4; + break; + default: + break; + } + + // Decode relevant part of the frame to the framebuffer + mjpegDecoders[handle]->decodeFrame(invalidatedArea, wbuf, touchgfx::HAL::FRAME_BUFFER_WIDTH); + // Release frame buffer + touchgfx::HAL::getInstance()->unlockFrameBuffer(); + } + } + + void addDecoder(MJPEGDecoder& decoder, uint32_t index) + { + assert(index < no_streams); + mjpegDecoders[index] = &decoder; + } + + uint32_t getCurrentFrameNumber(const Handle handle) + { + assert(handle < no_streams); + Stream& stream = streams[handle]; + + return stream.frameNumber; + } + + void getVideoInformation(const Handle handle, touchgfx::VideoInformation* data) + { + assert(handle < no_streams); + mjpegDecoders[handle]->getVideoInfo(data); + } + + bool getIsPlaying(const Handle handle) + { + assert(handle < no_streams); + Stream& stream = streams[handle]; + return stream.isPlaying; + } + + void setVideoFrameRateCompensation(const bool allow) + { + allowSkipFrames = allow; + } + +private: + class Stream + { + public: + Stream() + : frameCount(0), frameNumber(0), tickCount(0), + frame_rate_video(0), frame_rate_ticks(0), + seek_to_frame(0), + isActive(false), isPlaying(false), isShowingOneFrame(false), repeat(true), + doDecodeNextFrame(false) + { + } + uint32_t frameCount; // Video frames decoded since play + uint32_t frameNumber; // Video frame showed number + uint32_t tickCount; // UI frames since play + uint32_t frame_rate_video; // Ratio of frames wanted counter + uint32_t frame_rate_ticks; // Ratio of frames wanted divider + uint32_t seek_to_frame; // Requested next frame number + uint32_t skip_frames; // Number of frames to skip to keep frame rate + bool isActive; + bool isPlaying; + bool isShowingOneFrame; + bool repeat; + bool doDecodeNextFrame; // High if we should go to next frame in next tick + }; + + MJPEGDecoder* mjpegDecoders[no_streams]; + Stream streams[no_streams]; + bool allowSkipFrames; + + /** + * Return true, if new video frame should be decoded for the next tick (keep video decode framerate low) + */ + bool decodeForNextTick(Stream& stream) + { + // Running in UI thread + + // Compare tickCount/frameNumber to frame_rate_ticks/frame_rate_video + if ((stream.tickCount * stream.frame_rate_video) > (stream.frame_rate_ticks * stream.frameCount)) + { + if (allowSkipFrames) + { + stream.skip_frames = (stream.tickCount * stream.frame_rate_video - stream.frame_rate_ticks * stream.frameCount) / stream.frame_rate_ticks; + if (stream.skip_frames > 0) + { + stream.skip_frames--; + } + } + return true; + } + return false; + } + + Handle getFreeHandle() + { + for (uint32_t i = 0; i < no_streams; i++) + { + if (streams[i].isActive == false) + { + return static_cast(i); + } + } + + assert(0 && "Unable to find free video stream handle!"); + return static_cast(0); + } +}; + +#endif // TOUCHGFX_DIRECTFRAMEBUFFERVIDEOCONTROLLER_HPP \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/MJPEGDecoder.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/MJPEGDecoder.hpp new file mode 100644 index 00000000..e367f7dd --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/MJPEGDecoder.hpp @@ -0,0 +1,75 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TOUCHGFX_MJPEGDECODER_HPP +#define TOUCHGFX_MJPEGDECODER_HPP + +#include +#include + +class MJPEGDecoder +{ +public: + virtual ~MJPEGDecoder() + { + } + + //Set video data for the decoder + virtual void setVideoData(const uint8_t* movie, const uint32_t length) = 0; + + //Set video data for the decoder + virtual void setVideoData(touchgfx::VideoDataReader& reader) = 0; + + /** + * Check if MJPEGDecoder has a video. + * + * @return Returns true if the MJPEGDecoder has a video. + */ + virtual bool hasVideo() = 0; + + //Increment position to next frame and decode and convert to RGB + virtual bool decodeNextFrame(uint8_t* buffer, uint16_t width, uint16_t height, uint32_t stride) = 0; + + //Increment position to next frame and decode. Used with decodeFrame. + virtual bool gotoNextFrame() = 0; + + //Decode part of the current frame, framebuffer is locked, area is drawn relative to frameBuffer + virtual bool decodeFrame(const touchgfx::Rect& area, uint8_t* frameBuffer, uint32_t framebufferStride) = 0; + + //Decode thumbnail, assumes buffer stride is width + virtual bool decodeThumbnail(uint32_t frameno, uint8_t* buffer, uint16_t width, uint16_t height) = 0; + + //Set current frame number + virtual void gotoFrame(uint32_t frameno) = 0; + + //Get current frame number + virtual uint32_t getCurrentFrameNumber() const = 0; + + //Get number of frames in video + virtual uint32_t getNumberOfFrames() = 0; + + //Read video information + virtual void getVideoInfo(touchgfx::VideoInformation* data) = 0; + + enum AVIErrors + { + AVI_NO_ERROR, + AVI_NO_BUFFERS, + AVI_NO_FILE, + AVI_ERROR_NOT_RIFF, + AVI_ERROR_AVI_HEADER_NOT_FOUND, + AVI_ERROR_AVI_LIST_NOT_FOUND, + AVI_ERROR_AVI_HDRL_NOT_FOUND, + AVI_ERROR_AVI_AVIH_NOT_FOUND, + AVI_ERROR_AVI_HEADER_TO_SHORT, //not full header provided + AVI_ERROR_FILE_BUFFER_TO_SMALL, + AVI_ERROR_MOVI_NOT_FOUND, + AVI_ERROR_IDX1_NOT_FOUND, + AVI_ERROR_FRAMENO_TO_HIGH, + AVI_ERROR_EOF_REACHED + }; + + AVIErrors virtual getLastError() = 0; +}; + +#endif // TOUCHGFX_MJPEGDECODER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/SoftwareMJPEGDecoder.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/SoftwareMJPEGDecoder.hpp new file mode 100644 index 00000000..d18831d4 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/include/simulator/video/SoftwareMJPEGDecoder.hpp @@ -0,0 +1,73 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef TOUCHGFX_SOFTWAREMJPEGDECODER_HPP +#define TOUCHGFX_SOFTWAREMJPEGDECODER_HPP + +#include + +class SoftwareMJPEGDecoder : public MJPEGDecoder +{ +public: + SoftwareMJPEGDecoder(uint8_t* linebuffer); + + virtual void setVideoData(const uint8_t* movie, const uint32_t length); + + virtual void setVideoData(touchgfx::VideoDataReader& reader); + + virtual bool hasVideo(); + + virtual bool decodeNextFrame(uint8_t* frameBuffer, uint16_t width, uint16_t height, uint32_t framebuffer_width); + + virtual bool gotoNextFrame(); + + virtual bool decodeFrame(const touchgfx::Rect& area, uint8_t* frameBuffer, uint32_t framebuffer_width); + + virtual bool decodeThumbnail(uint32_t frameno, uint8_t* buffer, uint16_t width, uint16_t height); + + virtual void gotoFrame(uint32_t frameno); + + virtual uint32_t getCurrentFrameNumber() const + { + return frameNumber; + } + + virtual uint32_t getNumberOfFrames(); + + virtual void getVideoInfo(touchgfx::VideoInformation* data); + + void setAVIFileBuffer(uint8_t* buffer, uint32_t size) + { + aviBuffer = buffer, aviBufferLength = size; + } + + AVIErrors getLastError() + { + return lastError; + } + +private: + void readVideoHeader(); + void decodeMJPEGFrame(const uint8_t* const mjpgdata, const uint32_t length, uint8_t* buffer, uint16_t width, uint16_t height, uint32_t stride); + int compare(const uint32_t offset, const char* str, uint32_t num); + uint32_t getU32(const uint32_t offset); + uint32_t getU16(const uint32_t offset); + const uint8_t* readData(uint32_t offset, uint32_t length); + + touchgfx::VideoInformation videoInfo; + uint32_t frameNumber; + uint32_t currentMovieOffset; + uint32_t indexOffset; + uint32_t firstFrameOffset; + uint32_t lastFrameEnd; + uint32_t movieLength; + const uint8_t* movieData; + touchgfx::VideoDataReader* reader; + uint8_t* lineBuffer; + uint8_t* aviBuffer; + uint32_t aviBufferLength; + uint32_t aviBufferStartOffset; + AVIErrors lastError; +}; + +#endif // TOUCHGFX_SOFTWAREMJPEGDECODER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx.props b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx.props new file mode 100644 index 00000000..a90a8530 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx.props @@ -0,0 +1,31 @@ + + + + + + true + + + PATH=$(TouchGFXReleasePath)\lib\sdl\win32 + + + + $(ApplicationRoot)\gui\include;$(ApplicationRoot)\generated\images\include;$(ApplicationRoot)\generated\bitmaps\include;$(ApplicationRoot)\generated\fonts\include;$(ApplicationRoot)\generated\texts\include;$(ApplicationRoot)\generated\videos\include;$(ApplicationRoot)\generated\gui_generated\include;$(ApplicationRoot)\generated\simulator\include;$(TouchGFXReleasePath)\framework\common\include;$(TouchGFXReleasePath)\framework\mvp\include;$(TouchGFXReleasePath)\framework\include\platform\hal\simulator\sdl\vendor\win32;$(TouchGFXReleasePath)\framework\platform\hal\simulator\sdl\3rdparty\sdl\include\win32;$(TouchGFXReleasePath)\3rdparty\libjpeg\include;$(TouchGFXReleasePath)\framework\include + $(UseBPPOption) + SIMULATOR;_ITERATOR_DEBUG_LEVEL=0 + 4355 + + + + + $(TouchGFXReleasePath)\lib\sdl\win32\SDL.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDLmain.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDL_image.lib;$(TouchGFXReleasePath)\3rdparty\libjpeg\lib\win32\libjpeg-8.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset)_debug.lib;user32.lib;shell32.lib + /NODEFAULTLIB:msvcrt.lib + + + + + $(TouchGFXReleasePath)\lib\sdl\win32\SDL.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDLmain.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDL_image.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset).lib;user32.lib;shell32.lib + + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx_prebuild.targets b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx_prebuild.targets new file mode 100644 index 00000000..9b8b27c3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx_prebuild.targets @@ -0,0 +1,86 @@ + + + + + + + + + + + + /DUSE_BPP=$(UseBPP) + + + + /D$(LCD) + + + + + + + $(TouchGFXReleasePath)\..\env + $(TouchGFXEnvPath) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx_sdl2.props b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx_sdl2.props new file mode 100644 index 00000000..0815193e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/msvs/touchgfx_sdl2.props @@ -0,0 +1,29 @@ + + + + + + true + + + PATH=$(TouchGFXReleasePath)\lib\sdl2\win32 + + + + $(ApplicationRoot)\gui\include;$(ApplicationRoot)\generated\images\include;$(ApplicationRoot)\generated\bitmaps\include;$(ApplicationRoot)\generated\fonts\include;$(ApplicationRoot)\generated\texts\include;$(ApplicationRoot)\generated\videos\include;$(ApplicationRoot)\generated\gui_generated\include;$(ApplicationRoot)\generated\simulator\include;$(TouchGFXReleasePath)\framework\common\include;$(TouchGFXReleasePath)\framework\mvp\include;$(TouchGFXReleasePath)\framework\include\platform\hal\simulator\sdl2\vendor;$(TouchGFXReleasePath)\3rdparty\libjpeg\include;$(TouchGFXReleasePath)\framework\include + $(UseBPPOption) + SIMULATOR;_ITERATOR_DEBUG_LEVEL=0 + 4355 + + + + + $(TouchGFXReleasePath)\lib\sdl2\win32\SDL2.lib;$(TouchGFXReleasePath)\lib\sdl2\win32\SDL2_image.lib;$(TouchGFXReleasePath)\3rdparty\libjpeg\lib\win32\libjpeg-8.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset)_debug.lib;user32.lib;shell32.lib /NODEFAULTLIB:msvcrt.lib + + + + + $(TouchGFXReleasePath)\lib\sdl2\win32\SDL2.lib;$(TouchGFXReleasePath)\lib\sdl2\win32\SDL2_image.lib;$(TouchGFXReleasePath)\3rdparty\libjpeg\lib\win32\libjpeg-8.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset).lib;user32.lib;shell32.lib + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/src/mainBase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/src/mainBase.cpp new file mode 100644 index 00000000..a4528cd0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/src/mainBase.cpp @@ -0,0 +1,29 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +#ifdef __GNUC__ +#define fopen_s(pFile, filename, mode) (((*(pFile)) = fopen((filename), (mode))) == NULL) +#endif +touchgfx::LCD8bpp_ABGR2222 lcd; + +void setupSimulator(int argc, char** argv, touchgfx::HAL& hal) +{ + // Simulate hardware running at 60Hz generating a vsync every 16.6667 ms + static_cast(hal).setVsyncInterval(16.6667f); + static_cast(hal).setWindowTitle("WorkoutGUI"); + + // Initialize SDL + bool sdl_init_result = static_cast(hal).sdl_init(argc, argv); + assert(sdl_init_result && "Error during SDL initialization"); +} + +touchgfx::LCD& setupLCD() +{ + return lcd; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/src/video/SoftwareMJPEGDecoder.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/src/video/SoftwareMJPEGDecoder.cpp new file mode 100644 index 00000000..183cb4a2 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/src/video/SoftwareMJPEGDecoder.cpp @@ -0,0 +1,619 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include +#include +#include + +#define VIDEO_DECODE_FORMAT 8 + +namespace +{ +struct JPEG_RGB +{ + uint8_t B; + uint8_t G; + uint8_t R; +}; +} // namespace + +SoftwareMJPEGDecoder::SoftwareMJPEGDecoder(uint8_t* buffer) + : frameNumber(0), currentMovieOffset(0), indexOffset(0), firstFrameOffset(0), lastFrameEnd(0), movieLength(0), movieData(0), + reader(0), lineBuffer(buffer), aviBuffer(0), aviBufferLength(0), aviBufferStartOffset(0), lastError(AVI_NO_ERROR) +{ + //clear video info + videoInfo.ms_between_frames = 0; + videoInfo.number_of_frames = 0; + videoInfo.frame_width = 0; + videoInfo.frame_height = 0; +} + +int SoftwareMJPEGDecoder::compare(const uint32_t offset, const char* str, uint32_t num) +{ + const char* src; + if (reader != 0) + { + // Assuming data is in buffer! + src = reinterpret_cast(aviBuffer + (offset - aviBufferStartOffset)); + } + else + { + src = (const char*)movieData + offset; + } + return strncmp(src, str, num); +} + +inline uint32_t SoftwareMJPEGDecoder::getU32(const uint32_t offset) +{ + if (reader != 0) + { + // Assuming data is in buffer! + const uint32_t index = offset - aviBufferStartOffset; + return aviBuffer[index + 0] | (aviBuffer[index + 1] << 8) | (aviBuffer[index + 2] << 16) | (aviBuffer[index + 3] << 24); + } + else + { + const uint8_t* const d = movieData + offset; + return d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); + } +} + +inline uint32_t SoftwareMJPEGDecoder::getU16(const uint32_t offset) +{ + if (reader != 0) + { + // Assuming data is in buffer! + const uint32_t index = offset - aviBufferStartOffset; + return aviBuffer[index + 0] | (aviBuffer[index + 1] << 8); + } + else + { + const uint8_t* const d = movieData + offset; + return d[0] | (d[1] << 8); + } +} + +const uint8_t* SoftwareMJPEGDecoder::readData(uint32_t offset, uint32_t length) +{ + if (reader != 0) + { + if (length > aviBufferLength) + { + lastError = AVI_ERROR_FILE_BUFFER_TO_SMALL; + assert(!"Buffer to small"); + } + + reader->seek(offset); + if (!reader->readData(aviBuffer, length)) + { + lastError = AVI_ERROR_EOF_REACHED; + } + + aviBufferStartOffset = offset; + return aviBuffer; + } + + return movieData + offset; +} + +bool SoftwareMJPEGDecoder::decodeNextFrame(uint8_t* buffer, uint16_t buffer_width, uint16_t buffer_height, uint32_t buffer_stride) +{ + assert((frameNumber > 0) && "SoftwareMJPEGDecoder decoding without frame data!"); + + //find next frame and decode it + readData(currentMovieOffset, 8); + uint32_t streamNo = getU16(currentMovieOffset); + uint32_t chunkType = getU16(currentMovieOffset + 2); + uint32_t chunkSize = getU32(currentMovieOffset + 4); + const uint16_t STREAM0 = 0x3030; + const uint16_t TYPEDC = 0x6364; + + bool isCurrentFrameLast; + //play frame if we have it all + if (currentMovieOffset + 8 + chunkSize < movieLength) + { + if (streamNo == STREAM0 && chunkType == TYPEDC && chunkSize > 0) + { + currentMovieOffset += 8; + //decode frame + const uint8_t* chunk = readData(currentMovieOffset, chunkSize); + decodeMJPEGFrame(chunk, chunkSize, buffer, buffer_width, buffer_height, buffer_stride); + frameNumber++; + } + + isCurrentFrameLast = false; + + // Advance to next frame + currentMovieOffset += chunkSize; + if (chunkSize == 0) // Skip empty frame + { + currentMovieOffset += 8; + } + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + + if (currentMovieOffset == lastFrameEnd) + { + frameNumber = 1; + currentMovieOffset = firstFrameOffset; //start over + isCurrentFrameLast = true; + } + } + else + { + frameNumber = 1; + currentMovieOffset = firstFrameOffset; //start over + isCurrentFrameLast = true; + } + return !isCurrentFrameLast; +} + +bool SoftwareMJPEGDecoder::gotoNextFrame() +{ + assert((frameNumber > 0) && "SoftwareMJPEGDecoder decoding without frame data!"); + + readData(currentMovieOffset, 8); + uint32_t chunkSize = getU32(currentMovieOffset + 4); + + //increment until next video frame + while (currentMovieOffset + 8 + chunkSize < movieLength) + { + //increment one frame + currentMovieOffset += chunkSize + 8; + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + frameNumber++; + + //next chunk + readData(currentMovieOffset, 8); + //check it is a video frame + uint32_t streamNo = getU16(currentMovieOffset); + uint32_t chunkType = getU16(currentMovieOffset + 2); + chunkSize = getU32(currentMovieOffset + 4); + const uint16_t STREAM0 = 0x3030; + const uint16_t TYPEDC = 0x6364; + + if (streamNo == STREAM0 && chunkType == TYPEDC && chunkSize > 0) + { + // Found next frame + return true; + } + } + + //skip back to first frame + frameNumber = 1; + currentMovieOffset = firstFrameOffset; //start over + return false; +} + +void SoftwareMJPEGDecoder::setVideoData(const uint8_t* movie, const uint32_t length) +{ + movieData = movie; + movieLength = length; + reader = 0; //not using reader + + readVideoHeader(); +} + +void SoftwareMJPEGDecoder::setVideoData(touchgfx::VideoDataReader& reader) +{ + this->reader = &reader; + movieData = 0; + movieLength = reader.getDataLength(); + + readVideoHeader(); +} + +bool SoftwareMJPEGDecoder::hasVideo() +{ + return (reader != 0) || (movieData != 0); +} + +void SoftwareMJPEGDecoder::readVideoHeader() +{ + // Start from the start + currentMovieOffset = 0; + lastError = AVI_NO_ERROR; + + // Make header available in buffer + readData(0, 72); + + // Decode the movie header to find first frame + // Must be RIFF file + if (compare(currentMovieOffset, "RIFF", 4)) + { + lastError = AVI_ERROR_NOT_RIFF; + assert(!"RIFF header not found"); + } + + //skip fourcc and length + currentMovieOffset += 8; + if (compare(currentMovieOffset, "AVI ", 4)) + { + lastError = AVI_ERROR_AVI_HEADER_NOT_FOUND; + assert(!"AVI header not found"); + } + + currentMovieOffset += 4; + if (compare(currentMovieOffset, "LIST", 4)) + { + lastError = AVI_ERROR_AVI_LIST_NOT_FOUND; + assert(!"AVI LIST not found"); + } + + //save AVI List info + const uint32_t aviListSize = getU32(currentMovieOffset + 4); + const uint32_t aviListOffset = currentMovieOffset; + assert(aviListSize); + + //look into header to find frame rate + bool foundFrame = true; + uint32_t offset = currentMovieOffset + 8; + if (compare(offset, "hdrl", 4)) + { + lastError = AVI_ERROR_AVI_HDRL_NOT_FOUND; + foundFrame = false; + } + + offset += 4; + if (compare(offset, "avih", 4)) + { + lastError = AVI_ERROR_AVI_AVIH_NOT_FOUND; + foundFrame = false; + } + + if (foundFrame) + { + offset += 8; //skip fourcc and cb in AVIMAINHEADER + videoInfo.ms_between_frames = getU32(offset) / 1000; + videoInfo.number_of_frames = getU32(offset + 16); + videoInfo.frame_width = getU32(offset + 32); + videoInfo.frame_height = getU32(offset + 36); + } + //skip rest of AVI header, start from end of AVI List + + //look for list with 'movi' header + uint32_t listOffset = aviListOffset + aviListSize + 8; + readData(listOffset, 12); + while (compare(listOffset + 8, "movi", 4) && (lastError == AVI_NO_ERROR) && listOffset < movieLength) + { + const uint32_t listSize = getU32(listOffset + 4) + 8; + listOffset += listSize; + readData(listOffset, 12); + } + + if (lastError != AVI_NO_ERROR) + { + lastError = AVI_ERROR_MOVI_NOT_FOUND; + return; + } + + //save first frame and end of last frame + currentMovieOffset = listOffset + 8 + 4; //skip LIST and 'movi' + lastFrameEnd = listOffset + 8 + getU32(listOffset + 4); + + //find idx + const uint32_t listSize = getU32(listOffset + 4) + 8; + listOffset += listSize; + readData(listOffset, 4); + if (!compare(listOffset, "idx1", 4)) + { + indexOffset = listOffset; + } + else + { + lastError = AVI_ERROR_IDX1_NOT_FOUND; + return; + } + + //start on first frame + frameNumber = 1; //next frame number is 1 + firstFrameOffset = currentMovieOffset; +} + +#if VIDEO_DECODE_FORMAT == 16 || VIDEO_DECODE_FORMAT == 24 || VIDEO_DECODE_FORMAT == 32 +void SoftwareMJPEGDecoder::decodeMJPEGFrame(const uint8_t* const mjpgdata, const uint32_t length, uint8_t* outputBuffer, uint16_t bufferWidth, uint16_t bufferHeight, uint32_t bufferStride) +{ + if (length == 0) + { + return; + } + + if (outputBuffer && lineBuffer) //only decode if buffers are assigned. + { + /* This struct contains the JPEG decompression parameters */ + struct jpeg_decompress_struct cinfo; + /* This struct represents a JPEG error handler */ + struct jpeg_error_mgr jerr; + + JSAMPROW lines[2] = { lineBuffer, 0 }; /* Output row buffer */ + + /* Step 1: allocate and initialize JPEG decompression object */ + cinfo.err = jpeg_std_error(&jerr); + + /* Initialize the JPEG decompression object */ + jpeg_create_decompress(&cinfo); + + //jpeg_stdio_src (&cinfo, file); + jpeg_mem_src(&cinfo, const_cast(mjpgdata), length); + + /* Step 3: read image parameters with jpeg_read_header() */ + jpeg_read_header(&cinfo, TRUE); + + /* Step 4: set parameters for decompression */ + cinfo.dct_method = JDCT_FLOAT; + + /* Step 5: start decompressor */ + jpeg_start_decompress(&cinfo); + + //restrict to minimum of movie and output buffer size + const uint32_t width = MIN(bufferWidth, cinfo.image_width); + const uint32_t height = MIN(bufferHeight, cinfo.output_height); + +#if VIDEO_DECODE_FORMAT == 16 + uint16_t* lineptr = reinterpret_cast(outputBuffer); +#elif VIDEO_DECODE_FORMAT == 24 + uint8_t* lineptr = outputBuffer; +#else + uint32_t* lineptr = reinterpret_cast(outputBuffer); +#endif + while (cinfo.output_scanline < height) + { + (void)jpeg_read_scanlines(&cinfo, lines, 1); +#if VIDEO_DECODE_FORMAT == 16 + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + JPEG_RGB* const RGB_end = RGB_matrix + width; + while (RGB_matrix < RGB_end) + { + const uint16_t pix = ((RGB_matrix->R & 0xF8) << 8) | ((RGB_matrix->G & 0xFC) << 3) | ((RGB_matrix->B & 0xF8) >> 3); + *lineptr++ = pix; + RGB_matrix++; + } + lineptr = (uint16_t*)((uint8_t*)lineptr + bufferStride - width * 2); //move to next line +#elif VIDEO_DECODE_FORMAT == 24 + memcpy(lineptr, lineBuffer, width * 3); + lineptr += bufferStride; //move to next line +#else + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + JPEG_RGB* const RGB_end = RGB_matrix + width; + while (RGB_matrix < RGB_end) + { + const uint32_t pix = (0xFF << 24) | (RGB_matrix->R << 16) | (RGB_matrix->G << 8) | (RGB_matrix->B); + *lineptr++ = pix; + RGB_matrix++; + } + lineptr = (uint32_t*)((uint8_t*)lineptr + bufferStride - width * 4); //move to next line +#endif + } + +#ifdef SIMULATOR + cinfo.output_scanline = cinfo.output_height; +#endif + /* Step 6: Finish decompression */ + jpeg_finish_decompress(&cinfo); + + /* Step 7: Release JPEG decompression object */ + jpeg_destroy_decompress(&cinfo); + } +} + +bool SoftwareMJPEGDecoder::decodeFrame(const touchgfx::Rect& area, uint8_t* frameBuffer, uint32_t framebuffer_width) +{ + // Assuming that chunk is available and streamNo and chunkType is correct. + // Check by gotoNextFrame + + readData(currentMovieOffset, 8); + const uint32_t length = getU32(currentMovieOffset + 4); + + // Ensure whole frame is read + const uint8_t* mjpgdata = readData(currentMovieOffset + 8, length); + + assert(lineBuffer && "LineBuffer must be assigned prior to decoding directly to framebuffer"); + + /* This struct contains the JPEG decompression parameters */ + struct jpeg_decompress_struct cinfo; + /* This struct represents a JPEG error handler */ + struct jpeg_error_mgr jerr; + + JSAMPROW lines[2] = { lineBuffer, 0 }; /* Output row buffer */ + + /* Step 1: allocate and initialize JPEG decompression object */ + cinfo.err = jpeg_std_error(&jerr); + + /* Initialize the JPEG decompression object */ + jpeg_create_decompress(&cinfo); + + //jpeg_stdio_src (&cinfo, file); + jpeg_mem_src(&cinfo, const_cast(mjpgdata), length); + + /* Step 3: read image parameters with jpeg_read_header() */ + jpeg_read_header(&cinfo, TRUE); + + /* Step 4: set parameters for decompression */ + cinfo.dct_method = JDCT_FLOAT; + + /* Step 5: start decompressor */ + jpeg_start_decompress(&cinfo); + + //restrict to minimum of movie and output buffer size + const uint32_t startY = area.y; + + //scan down to startY + while (cinfo.output_scanline < startY) + { + (void)jpeg_read_scanlines(&cinfo, lines, 1); + } + + const uint32_t startX = area.x; + const uint32_t endX = MIN((uint32_t)area.right(), cinfo.image_width); + +#if VIDEO_DECODE_FORMAT == 16 + uint16_t* lineptr = reinterpret_cast(frameBuffer); + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + lineptr += framebuffer_width * startY; + } + else + { + lineptr += framebuffer_width * (cinfo.image_width - 1); + lineptr += startY; + } +#elif VIDEO_DECODE_FORMAT == 24 + uint8_t* lineptr = frameBuffer; + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + lineptr += framebuffer_width * 3 * startY; + } + else + { + lineptr += framebuffer_width * (cinfo.image_width - 1) * 3; + lineptr += startY * 3; + } +#else + uint32_t* lineptr = reinterpret_cast(frameBuffer); + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + lineptr += framebuffer_width * startY; + } + else + { + lineptr += framebuffer_width * (cinfo.image_width - 1); + lineptr += startY; + } +#endif + const uint32_t endY = MIN((uint32_t)area.bottom(), cinfo.output_height); + + //scan relevant part + while (cinfo.output_scanline < endY) + { + (void)jpeg_read_scanlines(&cinfo, lines, 1); +#if VIDEO_DECODE_FORMAT == 16 + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + //loop row RGB888->RGB565 for required line part + for (uint32_t counter = startX; counter < endX; counter++) + { + const uint16_t pix = ((RGB_matrix[counter].R & 0xF8) << 8) | ((RGB_matrix[counter].G & 0xFC) << 3) | ((RGB_matrix[counter].B & 0xF8) >> 3); + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + *(lineptr + counter) = pix; + } + else + { + *(lineptr - counter * framebuffer_width) = pix; + } + } + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + lineptr += framebuffer_width; //move to next line + } + else + { + lineptr++; //move to next line + } +#elif VIDEO_DECODE_FORMAT == 24 + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + memcpy(lineptr + startX * 3, lineBuffer + startX * 3, (endX - startX) * 3); + lineptr += framebuffer_width * 3; //move to next line + } + else + { + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + //loop row RGB888->RGB888 for required line part + for (uint32_t counter = startX; counter < endX; counter++) + { + *(lineptr - counter * framebuffer_width * 3) = RGB_matrix[counter].B; + *(lineptr - counter * framebuffer_width * 3 + 1) = RGB_matrix[counter].G; + *(lineptr - counter * framebuffer_width * 3 + 2) = RGB_matrix[counter].R; + } + lineptr += 3; //move to next line + } +#else + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + //loop row RGB888->ARGB8888 for required line part + for (uint32_t counter = startX; counter < endX; counter++) + { + const uint32_t pix = (0xFF << 24) | (RGB_matrix[counter].R << 16) | (RGB_matrix[counter].G << 8) | RGB_matrix[counter].B; + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + *(lineptr + counter) = pix; + } + else + { + *(lineptr - counter * framebuffer_width) = pix; + } + } + if (touchgfx::HAL::DISPLAY_ROTATION == touchgfx::rotate0) + { + lineptr += framebuffer_width; //move to next line + } + else + { + lineptr++; //move to next line + } +#endif + } + +#ifdef SIMULATOR + cinfo.output_scanline = cinfo.output_height; +#endif + + /* Step 6: Finish decompression */ + jpeg_finish_decompress(&cinfo); + + /* Step 7: Release JPEG decompression object */ + jpeg_destroy_decompress(&cinfo); + + return true; +} +#else +void SoftwareMJPEGDecoder::decodeMJPEGFrame(const uint8_t* const, const uint32_t, uint8_t*, uint16_t, uint16_t, uint32_t) +{ +} +bool SoftwareMJPEGDecoder::decodeFrame(const touchgfx::Rect&, uint8_t*, uint32_t) +{ + return true; +} +#endif // VIDEO_DECODE_FORMAT == 16 || VIDEO_DECODE_FORMAT == 24 || VIDEO_DECODE_FORMAT == 32 + +bool SoftwareMJPEGDecoder::decodeThumbnail(uint32_t frameno, uint8_t* buffer, uint16_t width, uint16_t height) +{ + assert(0); + return false; +} + +void SoftwareMJPEGDecoder::gotoFrame(uint32_t frameNumber) +{ + if (frameNumber == 0) + { + frameNumber = 1; + } + + if (frameNumber > getNumberOfFrames()) + { + frameNumber = getNumberOfFrames(); + } + + uint32_t offset = indexOffset + 8 + (frameNumber - 1) * 16; + + readData(offset, 16); + + currentMovieOffset = getU32(offset + 8) + firstFrameOffset - 4; + this->frameNumber = frameNumber; +} + +uint32_t SoftwareMJPEGDecoder::getNumberOfFrames() +{ + return videoInfo.number_of_frames; +} + +void SoftwareMJPEGDecoder::getVideoInfo(touchgfx::VideoInformation* data) +{ + *data = videoInfo; + // For unsupported decode formats, set video dimension to 0x0, to avoid drawing anything +#if VIDEO_DECODE_FORMAT == 16 || VIDEO_DECODE_FORMAT == 24 || VIDEO_DECODE_FORMAT == 32 +#else + data->frame_width = 0; + data->frame_height = 0; +#endif +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.ico b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.ico new file mode 100644 index 00000000..89a1888e Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.ico differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.rc b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.rc new file mode 100644 index 00000000..20c2cf0d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.rc @@ -0,0 +1 @@ +id ICON touchgfx.ico diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.res b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.res new file mode 100644 index 00000000..796ef192 Binary files /dev/null and b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/simulator/touchgfx.res differ diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/include/texts/TextKeysAndLanguages.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/include/texts/TextKeysAndLanguages.hpp new file mode 100644 index 00000000..2d422f23 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/include/texts/TextKeysAndLanguages.hpp @@ -0,0 +1,163 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_TEXTKEYSANDLANGUAGES_HPP +#define TOUCHGFX_TEXTKEYSANDLANGUAGES_HPP + +enum LANGUAGES +{ + GB, + NUMBER_OF_LANGUAGES +}; + +enum TEXTS +{ + T_RESOURCEID17, + T_RESOURCEID16, + T_RESOURCEID14, + T_RESOURCEID13, + T_RESOURCEID12, + T_RESOURCEID11, + T_RESOURCEID10, + T_RESOURCEID9, + T_RESOURCEID7, + T_RESOURCEID6, + T_RESOURCEID5, + T_RESOURCEID4, + T_RESOURCEID3, + T_RESOURCEID2, + T_RESOURCEID1, + T_TMP_REGULAR_14, + T_TMP_REGULAR_14_L, + T_TMP_REGULAR_14_R, + T_TMP_REGULAR_16, + T_TMP_REGULAR_16_L, + T_TMP_REGULAR_16_R, + T_TMP_REGULAR_18, + T_TMP_REGULAR_18_L, + T_TMP_REGULAR_18_R, + T_TMP_MEDIUM_10, + T_TMP_MEDIUM_10_L, + T_TMP_MEDIUM_10_R, + T_TMP_MEDIUM_18, + T_TMP_MEDIUM_18_L, + T_TMP_MEDIUM_18_R, + T_TMP_MEDIUM_25, + T_TMP_MEDIUM_25_L, + T_TMP_MEDIUM_25_R, + T_TMP_MEDIUM_50, + T_TMP_MEDIUM_50_L, + T_TMP_MEDIUM_50_R, + T_TMP_SEMIBOLD_18, + T_TMP_SEMIBOLD_18_L, + T_TMP_SEMIBOLD_18_R, + T_TMP_SEMIBOLD_20, + T_TMP_SEMIBOLD_20_L, + T_TMP_SEMIBOLD_20_R, + T_TMP_SEMIBOLD_25, + T_TMP_SEMIBOLD_25_L, + T_TMP_SEMIBOLD_25_R, + T_TMP_SEMIBOLD_30, + T_TMP_SEMIBOLD_30_L, + T_TMP_SEMIBOLD_30_R, + T_TMP_SEMIBOLD_35, + T_TMP_SEMIBOLD_35_R, + T_TMP_SEMIBOLD_35_L, + T_TMP_SEMIBOLD_40, + T_TMP_SEMIBOLD_40_L, + T_TMP_SEMIBOLD_40_R, + T_TMP_SEMIBOLD_60, + T_TMP_SEMIBOLD_60_L, + T_TMP_SEMIBOLD_60_R, + T_TMP_ITALIC_18, + T_TMP_ITALIC_18_L, + T_TMP_ITALIC_18_R, + T_TMP_ITALIC_20, + T_TMP_ITALIC_20_L, + T_TMP_ITALIC_20_R, + T_TEXT_APP_NAME_UC, + T_TEXT_TOTAL, + T_TEXT_SUMMARY_UC, + T_TEXT_MAP_UC, + T_TEXT_LAPS_UC, + T_TEXT_HEART_RATE_UC, + T_TEXT_WORKOUT, + T_TEXT_COMPLETED, + T_TEXT_REMAINING, + T_TEXT_REMAINING_LC, + T_TEXT_ELAPSED, + T_TEXT_TIME, + T_TEXT_TIMER, + T_TEXT_TIME_UC, + T_TEXT_SAVED, + T_TEXT_SAVE, + T_TEXT_SETTINGS, + T_TEXT_SETTINGS_UC, + T_TEXT_START, + T_TEXT_LAP_ALERTS, + T_TEXT_LAP_ALERTS_UC, + T_TEXT_PHONE_NOTIF_DOT, + T_TEXT_PHONE_BR_NOTIF_DOT, + T_TEXT_MINUTES_LC, + T_TEXT_MINUTE_LC, + T_TEXT_MIN, + T_TEXT_SEC, + T_TEXT_MILE, + T_TEXT_MILES, + T_TEXT_MI, + T_TEXT_KM, + T_TEXT_M, + T_TEXT_OPEN, + T_TEXT_ON_UC, + T_TEXT_OFF_UC, + T_TEXT_AVG_HR_UC, + T_TEXT_CALORIE_UC, + T_TEXT_MAX_HR_UC, + T_TEXT_AVG_HR, + T_TEXT_AVG_DOT_PACE, + T_TEXT_HR_UC, + T_TEXT_LAP_TIME, + T_TEXT_PERCENT, + T_TEXT_DISCARTED, + T_TEXT_DISCARD, + T_TEXT_RESUME, + T_TEXT_SUMMARY, + T_TEXT_LAP, + T_TEXT_AVG_DOT_HR, + T___SINGLEUSE_X62D, + T___SINGLEUSE_AIE6, + T___SINGLEUSE_LZ0O, + T___SINGLEUSE_CRAK, + T___SINGLEUSE_F90O, + T___SINGLEUSE_RUD6, + T_RESOURCEID15, + T___SINGLEUSE_M1HM, + T___SINGLEUSE_IYCO, + T___SINGLEUSE_0SLK, + T___SINGLEUSE_5LBG, + T___SINGLEUSE_WFDB, + T___SINGLEUSE_FZIH, + T___SINGLEUSE_Q39K, + T_RESOURCEID8, + T___SINGLEUSE_ICBU, + T___SINGLEUSE_YHFT, + T___SINGLEUSE_WXKL, + T___SINGLEUSE_NOCF, + T___SINGLEUSE_U3YM, + T___SINGLEUSE_ACJE, + T___SINGLEUSE_BOEQ, + T___SINGLEUSE_5T2E, + T___SINGLEUSE_XTK2, + T___SINGLEUSE_ZJSJ, + T___SINGLEUSE_GAMW, + T___SINGLEUSE_Z0WD, + T___SINGLEUSE_3KKT, + T___SINGLEUSE_HFND, + T___SINGLEUSE_OTQI, + T___SINGLEUSE_8WSQ, + T___SINGLEUSE_4SCV, + T___SINGLEUSE_KERT, + NUMBER_OF_TEXT_KEYS +}; + +#endif // TOUCHGFX_TEXTKEYSANDLANGUAGES_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/include/texts/TypedTextDatabase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/include/texts/TypedTextDatabase.hpp new file mode 100644 index 00000000..0faee811 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/include/texts/TypedTextDatabase.hpp @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#ifndef TOUCHGFX_TYPEDTEXTDATABASE_HPP +#define TOUCHGFX_TYPEDTEXTDATABASE_HPP + +#include +#include + +namespace TypedTextDatabase +{ +class TypedTextData; +const touchgfx::TypedText::TypedTextData* getInstance(touchgfx::LanguageId id); +const touchgfx::TypedText::TypedTextData* getInstance(); +const touchgfx::Font** getFonts(); +const touchgfx::Font* setFont(touchgfx::FontId fontId, const touchgfx::Font*); +void resetFont(touchgfx::FontId fontId); +uint16_t getInstanceSize(); +} // namespace TypedTextDatabase + +#endif // TOUCHGFX_TYPEDTEXTDATABASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/LanguageGb.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/LanguageGb.cpp new file mode 100644 index 00000000..d417722f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/LanguageGb.cpp @@ -0,0 +1,158 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include + +TEXT_LOCATION_FLASH_PRAGMA +KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE; + +// Remap all strings +TEXT_LOCATION_FLASH_PRAGMA +KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = { + 144, // T_RESOURCEID17: "TOTAL KCAL" + 76, // T_RESOURCEID16: "ACTIVE KCAL" + 241, // T_RESOURCEID14: "New Text" + 241, // T_RESOURCEID13: "New Text" + 236, // T_RESOURCEID12: "Time" + 341, // T_RESOURCEID11: "Avg HR" + 355, // T_RESOURCEID10: "Max HR" + 241, // T_RESOURCEID9: "New Text" + 214, // T_RESOURCEID7: "CALORIES" + 270, // T_RESOURCEID6: "AVG. HR" + 341, // T_RESOURCEID5: "Avg HR" + 88, // T_RESOURCEID4: "Current Lap" + 232, // T_RESOURCEID3: "Lap Time" + 236, // T_RESOURCEID2: "Time" + 223, // T_RESOURCEID1: "Calories" + 268, // T_TMP_REGULAR_14: "<>" + 268, // T_TMP_REGULAR_14_L: "<>" + 268, // T_TMP_REGULAR_14_R: "<>" + 268, // T_TMP_REGULAR_16: "<>" + 268, // T_TMP_REGULAR_16_L: "<>" + 268, // T_TMP_REGULAR_16_R: "<>" + 268, // T_TMP_REGULAR_18: "<>" + 268, // T_TMP_REGULAR_18_L: "<>" + 268, // T_TMP_REGULAR_18_R: "<>" + 268, // T_TMP_MEDIUM_10: "<>" + 268, // T_TMP_MEDIUM_10_L: "<>" + 268, // T_TMP_MEDIUM_10_R: "<>" + 268, // T_TMP_MEDIUM_18: "<>" + 268, // T_TMP_MEDIUM_18_L: "<>" + 268, // T_TMP_MEDIUM_18_R: "<>" + 268, // T_TMP_MEDIUM_25: "<>" + 268, // T_TMP_MEDIUM_25_L: "<>" + 268, // T_TMP_MEDIUM_25_R: "<>" + 268, // T_TMP_MEDIUM_50: "<>" + 268, // T_TMP_MEDIUM_50_L: "<>" + 268, // T_TMP_MEDIUM_50_R: "<>" + 268, // T_TMP_SEMIBOLD_18: "<>" + 268, // T_TMP_SEMIBOLD_18_L: "<>" + 268, // T_TMP_SEMIBOLD_18_R: "<>" + 268, // T_TMP_SEMIBOLD_20: "<>" + 268, // T_TMP_SEMIBOLD_20_L: "<>" + 268, // T_TMP_SEMIBOLD_20_R: "<>" + 268, // T_TMP_SEMIBOLD_25: "<>" + 268, // T_TMP_SEMIBOLD_25_L: "<>" + 268, // T_TMP_SEMIBOLD_25_R: "<>" + 268, // T_TMP_SEMIBOLD_30: "<>" + 268, // T_TMP_SEMIBOLD_30_L: "<>" + 268, // T_TMP_SEMIBOLD_30_R: "<>" + 268, // T_TMP_SEMIBOLD_35: "<>" + 268, // T_TMP_SEMIBOLD_35_R: "<>" + 268, // T_TMP_SEMIBOLD_35_L: "<>" + 268, // T_TMP_SEMIBOLD_40: "<>" + 268, // T_TMP_SEMIBOLD_40_L: "<>" + 268, // T_TMP_SEMIBOLD_40_R: "<>" + 268, // T_TMP_SEMIBOLD_60: "<>" + 268, // T_TMP_SEMIBOLD_60_L: "<>" + 268, // T_TMP_SEMIBOLD_60_R: "<>" + 268, // T_TMP_ITALIC_18: "<>" + 268, // T_TMP_ITALIC_18_L: "<>" + 268, // T_TMP_ITALIC_18_R: "<>" + 268, // T_TMP_ITALIC_20: "<>" + 268, // T_TMP_ITALIC_20_L: "<>" + 268, // T_TMP_ITALIC_20_R: "<>" + 310, // T_TEXT_APP_NAME_UC: "WORKOUT" + 418, // T_TEXT_TOTAL: "Total" + 294, // T_TEXT_SUMMARY_UC: "SUMMARY" + 518, // T_TEXT_MAP_UC: "MAP" + 470, // T_TEXT_LAPS_UC: "LAPS" + 100, // T_TEXT_HEART_RATE_UC: "HEART RATE" + 318, // T_TEXT_WORKOUT: "Workout" + 165, // T_TEXT_COMPLETED: "Completed" + 185, // T_TEXT_REMAINING: "Remaining" + 195, // T_TEXT_REMAINING_LC: "remaining" + 286, // T_TEXT_ELAPSED: "Elapsed" + 236, // T_TEXT_TIME: "Time" + 412, // T_TEXT_TIMER: "Timer" + 480, // T_TEXT_TIME_UC: "TIME" + 400, // T_TEXT_SAVED: "Saved" + 133, // T_TEXT_SAVE: "Save & End" + 259, // T_TEXT_SETTINGS: "Settings" + 250, // T_TEXT_SETTINGS_UC: "SETTINGS" + 406, // T_TEXT_START: "Start" + 122, // T_TEXT_LAP_ALERTS: "Lap Alerts" + 111, // T_TEXT_LAP_ALERTS_UC: "LAP ALERTS" + 50, // T_TEXT_PHONE_NOTIF_DOT: "Phone Notif." + 37, // T_TEXT_PHONE_BR_NOTIF_DOT: "Phone\nNotif." + 326, // T_TEXT_MINUTES_LC: "minutes" + 369, // T_TEXT_MINUTE_LC: "minute" + 526, // T_TEXT_MIN: "min" + 530, // T_TEXT_SEC: "sec" + 485, // T_TEXT_MILE: "mile" + 424, // T_TEXT_MILES: "miles" + 540, // T_TEXT_MI: "mi" + 537, // T_TEXT_KM: "km" + 538, // T_TEXT_M: "m" + 475, // T_TEXT_OPEN: "Open" + 534, // T_TEXT_ON_UC: "ON" + 522, // T_TEXT_OFF_UC: "OFF" + 334, // T_TEXT_AVG_HR_UC: "AVG HR" + 214, // T_TEXT_CALORIE_UC: "CALORIES" + 348, // T_TEXT_MAX_HR_UC: "MAX HR" + 334, // T_TEXT_AVG_HR: "AVG HR" + 155, // T_TEXT_AVG_DOT_PACE: "Avg. Pace" + 275, // T_TEXT_HR_UC: "HR" + 232, // T_TEXT_LAP_TIME: "Lap Time" + 433, // T_TEXT_PERCENT: "%" + 175, // T_TEXT_DISCARTED: "Discarded" + 278, // T_TEXT_DISCARD: "Discard" + 362, // T_TEXT_RESUME: "Resume" + 302, // T_TEXT_SUMMARY: "Summary" + 96, // T_TEXT_LAP: "Lap" + 270, // T_TEXT_AVG_DOT_HR: "AVG. HR" + 388, // T___SINGLEUSE_X62D: "23:58" + 448, // T___SINGLEUSE_AIE6: "3" + 430, // T___SINGLEUSE_LZ0O: "100%" + 268, // T___SINGLEUSE_CRAK: "<>" + 268, // T___SINGLEUSE_F90O: "<>" + 268, // T___SINGLEUSE_RUD6: "<>" + 63, // T_RESOURCEID15: "RESTING KCAL" + 440, // T___SINGLEUSE_M1HM: "1301" + 205, // T___SINGLEUSE_IYCO: "10:05:49" + 268, // T___SINGLEUSE_0SLK: "<>" + 498, // T___SINGLEUSE_5LBG: "133" + 435, // T___SINGLEUSE_WFDB: "1145" + 0, // T___SINGLEUSE_FZIH: "Do you want\nto discard\nthe activity?" + 268, // T___SINGLEUSE_Q39K: "<>" + 241, // T_RESOURCEID8: "New Text" + 514, // T___SINGLEUSE_ICBU: "96%" + 382, // T___SINGLEUSE_YHFT: "17:35" + 450, // T___SINGLEUSE_WXKL: "4:27" + 455, // T___SINGLEUSE_NOCF: "5:02" + 506, // T___SINGLEUSE_U3YM: "24." + 502, // T___SINGLEUSE_ACJE: "208" + 494, // T___SINGLEUSE_BOEQ: "128" + 205, // T___SINGLEUSE_5T2E: "10:05:49" + 510, // T___SINGLEUSE_XTK2: "566" + 498, // T___SINGLEUSE_ZJSJ: "133" + 206, // T___SINGLEUSE_GAMW: "0:05:49" + 445, // T___SINGLEUSE_Z0WD: "2.33" + 376, // T___SINGLEUSE_3KKT: "15:37" + 490, // T___SINGLEUSE_HFND: "115" + 465, // T___SINGLEUSE_OTQI: "8:32" + 460, // T___SINGLEUSE_8WSQ: "6:27" + 394, // T___SINGLEUSE_4SCV: "44.44" + 206 // T___SINGLEUSE_KERT: "0:05:49" +}; diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/Texts.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/Texts.cpp new file mode 100644 index 00000000..d09ea34b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/Texts.cpp @@ -0,0 +1,197 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include +#include +#include +#include +#include +#include + +uint16_t touchgfx::Font::getStringWidth(const touchgfx::Unicode::UnicodeChar* text, ...) const +{ + va_list pArg; + va_start(pArg, text); + uint16_t width = getStringWidthLTR(TEXT_DIRECTION_LTR, text, pArg); + va_end(pArg); + return width; +} + +uint16_t touchgfx::Font::getStringWidth(touchgfx::TextDirection textDirection, const touchgfx::Unicode::UnicodeChar* text, ...) const +{ + va_list pArg; + va_start(pArg, text); + uint16_t width = getStringWidthLTR(textDirection, text, pArg); + va_end(pArg); + return width; +} + +touchgfx::Unicode::UnicodeChar touchgfx::TextProvider::getNextLigature(TextDirection direction) +{ + if (fontGsubTable && nextCharacters.peekChar()) + { + substituteGlyphs(); + if (nextCharacters.peekChar(1) == 0x093F) // Hindi I-matra + { + nextCharacters.replaceAt1(nextCharacters.peekChar()); + nextCharacters.replaceAt0(0x093F); + } + } + return getNextChar(); +} + +void touchgfx::TextProvider::initializeInternal() +{ + fillInputBuffer(); +} + +void touchgfx::LCD::drawString(touchgfx::Rect widgetArea, const touchgfx::Rect& invalidatedArea, const touchgfx::LCD::StringVisuals& stringVisuals, const touchgfx::Unicode::UnicodeChar* format, ...) +{ + va_list pArg; + va_start(pArg, format); + drawStringLTR(widgetArea, invalidatedArea, stringVisuals, format, pArg); + va_end(pArg); +} + +// Default TypedTextDatabase +extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[]; + +TEXT_LOCATION_FLASH_PRAGMA +KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE = { + 0x44, 0x6f, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x61, 0x6e, 0x74, 0xa, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0xa, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x3f, 0x0, // @0 "Do you want\nto discard\nthe activity?" + 0x50, 0x68, 0x6f, 0x6e, 0x65, 0xa, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x2e, 0x0, // @37 "Phone\nNotif." + 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x2e, 0x0, // @50 "Phone Notif." + 0x52, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x20, 0x4b, 0x43, 0x41, 0x4c, 0x0, // @63 "RESTING KCAL" + 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x20, 0x4b, 0x43, 0x41, 0x4c, 0x0, // @76 "ACTIVE KCAL" + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x4c, 0x61, 0x70, 0x0, // @88 "Current Lap" + 0x48, 0x45, 0x41, 0x52, 0x54, 0x20, 0x52, 0x41, 0x54, 0x45, 0x0, // @100 "HEART RATE" + 0x4c, 0x41, 0x50, 0x20, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x53, 0x0, // @111 "LAP ALERTS" + 0x4c, 0x61, 0x70, 0x20, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x0, // @122 "Lap Alerts" + 0x53, 0x61, 0x76, 0x65, 0x20, 0x26, 0x20, 0x45, 0x6e, 0x64, 0x0, // @133 "Save & End" + 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x20, 0x4b, 0x43, 0x41, 0x4c, 0x0, // @144 "TOTAL KCAL" + 0x41, 0x76, 0x67, 0x2e, 0x20, 0x50, 0x61, 0x63, 0x65, 0x0, // @155 "Avg. Pace" + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x0, // @165 "Completed" + 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, 0x64, 0x0, // @175 "Discarded" + 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x0, // @185 "Remaining" + 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x0, // @195 "remaining" + 0x31, 0x30, 0x3a, 0x30, 0x35, 0x3a, 0x34, 0x39, 0x0, // @205 "10:05:49" + 0x43, 0x41, 0x4c, 0x4f, 0x52, 0x49, 0x45, 0x53, 0x0, // @214 "CALORIES" + 0x43, 0x61, 0x6c, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x0, // @223 "Calories" + 0x4c, 0x61, 0x70, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x0, // @232 "Lap Time" + 0x4e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x0, // @241 "New Text" + 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x53, 0x0, // @250 "SETTINGS" + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x0, // @259 "Settings" + 0x2, 0x0, // @268 "<>" + 0x41, 0x56, 0x47, 0x2e, 0x20, 0x48, 0x52, 0x0, // @270 "AVG. HR" + 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x0, // @278 "Discard" + 0x45, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x0, // @286 "Elapsed" + 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x0, // @294 "SUMMARY" + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x0, // @302 "Summary" + 0x57, 0x4f, 0x52, 0x4b, 0x4f, 0x55, 0x54, 0x0, // @310 "WORKOUT" + 0x57, 0x6f, 0x72, 0x6b, 0x6f, 0x75, 0x74, 0x0, // @318 "Workout" + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x0, // @326 "minutes" + 0x41, 0x56, 0x47, 0x20, 0x48, 0x52, 0x0, // @334 "AVG HR" + 0x41, 0x76, 0x67, 0x20, 0x48, 0x52, 0x0, // @341 "Avg HR" + 0x4d, 0x41, 0x58, 0x20, 0x48, 0x52, 0x0, // @348 "MAX HR" + 0x4d, 0x61, 0x78, 0x20, 0x48, 0x52, 0x0, // @355 "Max HR" + 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x0, // @362 "Resume" + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x0, // @369 "minute" + 0x31, 0x35, 0x3a, 0x33, 0x37, 0x0, // @376 "15:37" + 0x31, 0x37, 0x3a, 0x33, 0x35, 0x0, // @382 "17:35" + 0x32, 0x33, 0x3a, 0x35, 0x38, 0x0, // @388 "23:58" + 0x34, 0x34, 0x2e, 0x34, 0x34, 0x0, // @394 "44.44" + 0x53, 0x61, 0x76, 0x65, 0x64, 0x0, // @400 "Saved" + 0x53, 0x74, 0x61, 0x72, 0x74, 0x0, // @406 "Start" + 0x54, 0x69, 0x6d, 0x65, 0x72, 0x0, // @412 "Timer" + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x0, // @418 "Total" + 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x0, // @424 "miles" + 0x31, 0x30, 0x30, 0x25, 0x0, // @430 "100%" + 0x31, 0x31, 0x34, 0x35, 0x0, // @435 "1145" + 0x31, 0x33, 0x30, 0x31, 0x0, // @440 "1301" + 0x32, 0x2e, 0x33, 0x33, 0x0, // @445 "2.33" + 0x34, 0x3a, 0x32, 0x37, 0x0, // @450 "4:27" + 0x35, 0x3a, 0x30, 0x32, 0x0, // @455 "5:02" + 0x36, 0x3a, 0x32, 0x37, 0x0, // @460 "6:27" + 0x38, 0x3a, 0x33, 0x32, 0x0, // @465 "8:32" + 0x4c, 0x41, 0x50, 0x53, 0x0, // @470 "LAPS" + 0x4f, 0x70, 0x65, 0x6e, 0x0, // @475 "Open" + 0x54, 0x49, 0x4d, 0x45, 0x0, // @480 "TIME" + 0x6d, 0x69, 0x6c, 0x65, 0x0, // @485 "mile" + 0x31, 0x31, 0x35, 0x0, // @490 "115" + 0x31, 0x32, 0x38, 0x0, // @494 "128" + 0x31, 0x33, 0x33, 0x0, // @498 "133" + 0x32, 0x30, 0x38, 0x0, // @502 "208" + 0x32, 0x34, 0x2e, 0x0, // @506 "24." + 0x35, 0x36, 0x36, 0x0, // @510 "566" + 0x39, 0x36, 0x25, 0x0, // @514 "96%" + 0x4d, 0x41, 0x50, 0x0, // @518 "MAP" + 0x4f, 0x46, 0x46, 0x0, // @522 "OFF" + 0x6d, 0x69, 0x6e, 0x0, // @526 "min" + 0x73, 0x65, 0x63, 0x0, // @530 "sec" + 0x4f, 0x4e, 0x0, // @534 "ON" + 0x6b, 0x6d, 0x0, // @537 "km" + 0x6d, 0x69, 0x0 // @540 "mi" +}; + +TEXT_LOCATION_FLASH_PRAGMA +KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE; + +// Array holding dynamically installed languages +struct TranslationHeader +{ + uint32_t offset_to_texts; + uint32_t offset_to_indices; + uint32_t offset_to_typedtext; +}; +static const TranslationHeader* languagesArray[1] = { 0 }; + +// Compiled and linked in languages +static const uint32_t* const staticLanguageIndices[] = { + indicesGb +}; + +touchgfx::LanguageId touchgfx::Texts::currentLanguage = static_cast(0); +static const touchgfx::Unicode::UnicodeChar* currentLanguagePtr = 0; +static const uint32_t* currentLanguageIndices = 0; + +void touchgfx::Texts::setLanguage(touchgfx::LanguageId id) +{ + const touchgfx::TypedText::TypedTextData* currentLanguageTypedText = 0; + if (id < 1) + { + if (languagesArray[id] != 0) + { + // Dynamic translation is added + const TranslationHeader* translation = languagesArray[id]; + currentLanguagePtr = (const touchgfx::Unicode::UnicodeChar*)(((const uint8_t*)translation) + translation->offset_to_texts); + currentLanguageIndices = (const uint32_t*)(((const uint8_t*)translation) + translation->offset_to_indices); + currentLanguageTypedText = (const touchgfx::TypedText::TypedTextData*)(((const uint8_t*)translation) + translation->offset_to_typedtext); + } + else + { + // Compiled and linked in languages + currentLanguagePtr = texts_all_languages; + currentLanguageIndices = staticLanguageIndices[id]; + currentLanguageTypedText = typedTextDatabaseArray[id]; + } + } + + if (currentLanguageTypedText) + { + currentLanguage = id; + touchgfx::TypedText::registerTypedTextDatabase(currentLanguageTypedText, + TypedTextDatabase::getFonts(), TypedTextDatabase::getInstanceSize()); + } +} + +void touchgfx::Texts::setTranslation(touchgfx::LanguageId id, const void* translation) +{ + languagesArray[id] = (const TranslationHeader*)translation; +} + +const touchgfx::Unicode::UnicodeChar* touchgfx::Texts::getText(TypedTextId id) const +{ + return ¤tLanguagePtr[currentLanguageIndices[id]]; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/TypedTextDatabase.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/TypedTextDatabase.cpp new file mode 100644 index 00000000..517fc96b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/texts/src/TypedTextDatabase.cpp @@ -0,0 +1,278 @@ +/* DO NOT EDIT THIS FILE */ +/* This file is autogenerated by the text-database code generator */ + +#include +#include +#include + +extern touchgfx::GeneratedFont& getFont_Poppins_Regular_18_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Regular_14_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Regular_16_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Medium_10_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Medium_18_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Medium_25_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Medium_50_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_18_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_20_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_25_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_30_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_35_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_40_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_SemiBold_60_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Italic_18_2bpp(); +extern touchgfx::GeneratedFont& getFont_Poppins_Italic_20_2bpp(); + +const touchgfx::Font* touchgfx_fonts[] = { + &(getFont_Poppins_Regular_18_2bpp()), + &(getFont_Poppins_Regular_14_2bpp()), + &(getFont_Poppins_Regular_16_2bpp()), + &(getFont_Poppins_Medium_10_2bpp()), + &(getFont_Poppins_Medium_18_2bpp()), + &(getFont_Poppins_Medium_25_2bpp()), + &(getFont_Poppins_Medium_50_2bpp()), + &(getFont_Poppins_SemiBold_18_2bpp()), + &(getFont_Poppins_SemiBold_20_2bpp()), + &(getFont_Poppins_SemiBold_25_2bpp()), + &(getFont_Poppins_SemiBold_30_2bpp()), + &(getFont_Poppins_SemiBold_35_2bpp()), + &(getFont_Poppins_SemiBold_40_2bpp()), + &(getFont_Poppins_SemiBold_60_2bpp()), + &(getFont_Poppins_Italic_18_2bpp()), + &(getFont_Poppins_Italic_20_2bpp()) +}; + +extern const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[]; +extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[]; + +TEXT_LOCATION_FLASH_PRAGMA +const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCATION_FLASH_ATTRIBUTE = { + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 3, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 3, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 4, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 5, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 5, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 5, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 6, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 6, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 7, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 7, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 8, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 9, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 9, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 9, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 11, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 11, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 11, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 12, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 12, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 13, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 13, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 13, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 14, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 15, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 15, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 15, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 10, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR } +}; + +const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[] = { + typedText_database_DEFAULT +}; + +namespace TypedTextDatabase +{ +const touchgfx::TypedText::TypedTextData* getInstance(touchgfx::LanguageId id) +{ + return typedTextDatabaseArray[id]; +} + +uint16_t getInstanceSize() +{ + return sizeof(typedText_database_DEFAULT) / sizeof(touchgfx::TypedText::TypedTextData); +} + +const touchgfx::Font** getFonts() +{ + return touchgfx_fonts; +} + +const touchgfx::Font* setFont(touchgfx::FontId fontId, const touchgfx::Font* font) +{ + const touchgfx::Font* old = touchgfx_fonts[fontId]; + touchgfx_fonts[fontId] = font; + return old; +} + +void resetFont(touchgfx::FontId fontId) +{ + switch (fontId) + { + case 0: + touchgfx_fonts[0] = &(getFont_Poppins_Regular_18_2bpp()); + break; + case 1: + touchgfx_fonts[1] = &(getFont_Poppins_Regular_14_2bpp()); + break; + case 2: + touchgfx_fonts[2] = &(getFont_Poppins_Regular_16_2bpp()); + break; + case 3: + touchgfx_fonts[3] = &(getFont_Poppins_Medium_10_2bpp()); + break; + case 4: + touchgfx_fonts[4] = &(getFont_Poppins_Medium_18_2bpp()); + break; + case 5: + touchgfx_fonts[5] = &(getFont_Poppins_Medium_25_2bpp()); + break; + case 6: + touchgfx_fonts[6] = &(getFont_Poppins_Medium_50_2bpp()); + break; + case 7: + touchgfx_fonts[7] = &(getFont_Poppins_SemiBold_18_2bpp()); + break; + case 8: + touchgfx_fonts[8] = &(getFont_Poppins_SemiBold_20_2bpp()); + break; + case 9: + touchgfx_fonts[9] = &(getFont_Poppins_SemiBold_25_2bpp()); + break; + case 10: + touchgfx_fonts[10] = &(getFont_Poppins_SemiBold_30_2bpp()); + break; + case 11: + touchgfx_fonts[11] = &(getFont_Poppins_SemiBold_35_2bpp()); + break; + case 12: + touchgfx_fonts[12] = &(getFont_Poppins_SemiBold_40_2bpp()); + break; + case 13: + touchgfx_fonts[13] = &(getFont_Poppins_SemiBold_60_2bpp()); + break; + case 14: + touchgfx_fonts[14] = &(getFont_Poppins_Italic_18_2bpp()); + break; + case 15: + touchgfx_fonts[15] = &(getFont_Poppins_Italic_20_2bpp()); + break; + } +} +} // namespace TypedTextDatabase diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/videos/include/videos/VideoDatabase.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/videos/include/videos/VideoDatabase.hpp new file mode 100644 index 00000000..af678e5a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/generated/videos/include/videos/VideoDatabase.hpp @@ -0,0 +1,8 @@ +// Generated by videoconvert. Please, do not edit! + +#ifndef TOUCHGFX_VIDEODATABASE_HPP +#define TOUCHGFX_VIDEODATABASE_HPP + +#include + +#endif // TOUCHGFX_VIDEODATABASE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/common/FrontendApplication.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/common/FrontendApplication.hpp new file mode 100644 index 00000000..7f96e6a0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/common/FrontendApplication.hpp @@ -0,0 +1,50 @@ +#ifndef FRONTENDAPPLICATION_HPP +#define FRONTENDAPPLICATION_HPP + +#include +#include "SDK/Port/TouchGFX/TouchGFXCommandProcessor.hpp" + +class FrontendHeap; + +#if defined(SIMULATOR) +#include "SDK/Simulator/Kernel/Kernel.hpp" +#include "SDK/Simulator/Components/InstanceSensorLayer.hpp" +#endif + +using namespace touchgfx; + +class FrontendApplication : public FrontendApplicationBase +{ +public: + FrontendApplication(Model& m, FrontendHeap& heap); + virtual ~FrontendApplication() { } + + virtual void handleTickEvent() + { +#if defined(SIMULATOR) + SDK::Simulator::KernelHolder::Get().tick(); +#endif + SDK::TouchGFXCommandProcessor::GetInstance().callCustomMessageHandler(); + model.tick(); + FrontendApplicationBase::handleTickEvent(); + } + + // Get keys event in Model to simulate backend actions + void handleKeyEvent(uint8_t key) + { +#if defined(SIMULATOR) + Instance::SensorLayer::getInstance().handlerButtons(key); + if (SDK::Simulator::KernelHolder::Get().keyFilter(key)) { + model.handleKeyEvent(key); + FrontendApplicationBase::handleKeyEvent(key); + } +#else + model.handleKeyEvent(key); + FrontendApplicationBase::handleKeyEvent(key); +#endif + } + +private: +}; + +#endif // FRONTENDAPPLICATION_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/common/FrontendHeap.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/common/FrontendHeap.hpp new file mode 100644 index 00000000..c054ff52 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/common/FrontendHeap.hpp @@ -0,0 +1,74 @@ +#ifndef FRONTENDHEAP_HPP +#define FRONTENDHEAP_HPP + +#include + +class FrontendHeap : public FrontendHeapBase +{ +public: + /* List any user-defined view types here*/ + typedef touchgfx::meta::TypeList< touchgfx::meta::Nil, //Replace this with first user-defined type + touchgfx::meta::Nil //List must always end with meta::Nil ! + > UserDefinedViewTypes; + + /* List any user-defined presenter types here*/ + typedef touchgfx::meta::TypeList< touchgfx::meta::Nil, //Replace this with first user-defined type + touchgfx::meta::Nil //List must always end with meta::Nil ! + > UserDefinedPresenterTypes; + + /* List any user-defined transition types here*/ + typedef touchgfx::meta::TypeList< touchgfx::meta::Nil, //Replace this with first user-defined type + touchgfx::meta::Nil //List must always end with meta::Nil ! + > UserDefinedTransitionTypes; + + + + /* Calculate largest view, both from generated and user-defined typelists */ + typedef touchgfx::meta::select_type_maxsize< UserDefinedViewTypes >::type MaxUserViewType; + + typedef touchgfx::meta::TypeList< MaxGeneratedViewType, + touchgfx::meta::TypeList< MaxUserViewType, + touchgfx::meta::Nil + > > CombinedViewTypes; + + typedef touchgfx::meta::select_type_maxsize< CombinedViewTypes >::type MaxViewType; + + /* Calculate largest presenter, both from generated and user-defined typelists */ + typedef touchgfx::meta::select_type_maxsize< UserDefinedPresenterTypes >::type MaxUserPresenterType; + + typedef touchgfx::meta::TypeList< MaxGeneratedPresenterType, + touchgfx::meta::TypeList< MaxUserPresenterType, + touchgfx::meta::Nil + > > CombinedPresenterTypes; + typedef touchgfx::meta::select_type_maxsize< CombinedPresenterTypes >::type MaxPresenterType; + + /* Calculate largest transition, both from generated and user-defined typelists */ + typedef touchgfx::meta::select_type_maxsize< UserDefinedTransitionTypes >::type MaxUserTransitionType; + + typedef touchgfx::meta::TypeList< MaxGeneratedTransitionType, + touchgfx::meta::TypeList< MaxUserTransitionType, + touchgfx::meta::Nil + > > CombinedTransitionTypes; + typedef touchgfx::meta::select_type_maxsize< CombinedTransitionTypes >::type MaxTransitionType; + + static FrontendHeap& getInstance() + { + static FrontendHeap instance; + return instance; + } + + touchgfx::Partition< CombinedPresenterTypes, 1 > presenters; + touchgfx::Partition< CombinedViewTypes, 1 > views; + touchgfx::Partition< CombinedTransitionTypes, 1 > transitions; + Model model; + FrontendApplication app; + +private: + FrontendHeap() : FrontendHeapBase(presenters, views, transitions, app), + app(model, *this) + { + gotoStartScreen(app); + } +}; + +#endif // FRONTENDHEAP_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Battery.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Battery.hpp new file mode 100644 index 00000000..e7a46c71 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Battery.hpp @@ -0,0 +1,47 @@ +#ifndef BATTERY_HPP +#define BATTERY_HPP + +#include + +/** + * @brief Four-segment battery level indicator. + * + * Each segment (s1-s4) represents a 25 % charge band (left to right). + * A segment is painted in the active color when the charge level reaches + * its lower bound; otherwise it uses the inactive (background) color. + * + * Special case: s1 is shown in red when the level is below 25 %. + * + * Level s1 s2 s3 s4 + * 0 % off off off off + * 1-24 % red off off off + * 25-49 % teal teal off off + * 50-74 % teal teal teal off + * 75-100 % teal teal teal teal + */ +class Battery : public BatteryBase +{ +public: + Battery(); + virtual ~Battery() {} + + virtual void initialize(); + + /** + * @brief Update the displayed charge level. + * @param level Charge percentage (0-100). + */ + void setLevel(uint8_t level); + +private: + /** Paint a two-line segment (s1-s3). */ + void setSegment(touchgfx::Box& box, + touchgfx::Line& line1, touchgfx::PainterABGR2222& p1, + touchgfx::Line& line2, touchgfx::PainterABGR2222& p2, + touchgfx::colortype color); + + /** Paint the three-line segment (s4, includes terminal nub). */ + void setSegment4(touchgfx::colortype color); +}; + +#endif // BATTERY_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Buttons.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Buttons.hpp new file mode 100644 index 00000000..79dcd9b5 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Buttons.hpp @@ -0,0 +1,54 @@ +#ifndef BUTTONS_HPP +#define BUTTONS_HPP + +#include + +/** + * @brief Physical button indicator container. + * + * Displays four watch-bezel arc indicators (L1, L2, R1, R2), each in one of + * four visual states: hidden (NONE), white, amber, or red. + * + * The arc geometry is fixed by the Designer-generated base. Only the colour + * and visibility are controlled at runtime. + * + * Usage: + * @code + * buttons.setL1(Buttons::NONE); + * buttons.setR1(Buttons::AMBER); + * buttons.setR2(Buttons::WHITE); + * @endcode + */ +class Buttons : public ButtonsBase +{ +public: + Buttons(); + virtual ~Buttons() {} + + virtual void initialize(); + + /** @brief Visual state for a single button indicator. */ + enum Color + { + NONE = 0, ///< Indicator hidden + WHITE, ///< White -- neutral action (#C0C0C0) + AMBER, ///< Amber -- primary action (#C08000) + RED, ///< Red -- warning / destructive action (#C00000) + }; + + void setL1(Color color = NONE); ///< Top-left button + void setL2(Color color = NONE); ///< Bottom-left button + void setR1(Color color = NONE); ///< Top-right button + void setR2(Color color = NONE); ///< Bottom-right button + +private: + /** Map a Color enum value to its RGB colortype. */ + static touchgfx::colortype toColortype(Color color); + + /** Apply @p color to a single arc indicator. */ + void applyColor(touchgfx::Circle& arc, + touchgfx::PainterABGR2222& painter, + Color color); +}; + +#endif // BUTTONS_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/CountdownTimer.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/CountdownTimer.hpp new file mode 100644 index 00000000..6bb06b9b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/CountdownTimer.hpp @@ -0,0 +1,79 @@ +#ifndef COUNTDOWNTIMER_HPP +#define COUNTDOWNTIMER_HPP + +#include +#include + +/** + * @brief Self-registering countdown timer for auto-dismissing screens. + * + * Inherits from touchgfx::Container solely to gain access to + * Application::registerTimerWidget(). Does not render anything and does + * not need to be added to the display tree. + * + * The callback is fired once when the countdown reaches zero. + * After firing, the timer stops automatically. + * + * Typical usage in a View: + * @code + * // .hpp member: + * CountdownTimer mDismissTimer; + * touchgfx::Callback mDismissCb; + * + * // constructor: + * MyView() : mDismissCb(this, &MyView::onDismiss) {} + * + * // setupScreen(): + * mDismissTimer.setDuration(SDK::Utils::secToTicks(3, 10)); + * mDismissTimer.setCallback(mDismissCb); + * mDismissTimer.start(); + * + * // callback: + * void onDismiss() { application().gotoXxxScreenNoTransition(); } + * + * // handleKeyEvent (optional -- manual dismiss): + * mDismissTimer.stop(); + * application().gotoXxxScreenNoTransition(); + * @endcode + */ +class CountdownTimer : public touchgfx::Container +{ +public: + CountdownTimer(); + virtual ~CountdownTimer(); + + /** + * @brief Set the countdown duration. + * @param ticks Number of ticks (use SDK::Utils::secToTicks / SDK::Utils::msToTicks). + */ + void setDuration(uint16_t ticks); + + /** + * @brief Register the callback invoked when the countdown expires. + * @param cb Callback with no arguments. + */ + void setCallback(touchgfx::GenericCallback<>& cb); + + /** @brief Start (or restart) the countdown and register the timer widget. */ + void start(); + + /** @brief Stop the countdown and unregister the timer widget. */ + void stop(); + + /** @brief Restart the countdown from the full duration without unregistering. */ + void reset(); + + virtual void handleTickEvent() override; + +private: + void registerTimer(); + void unregisterTimer(); + + uint16_t mDuration = 0; + uint16_t mCounter = 0; + bool mRegistered = false; + + touchgfx::GenericCallback<>* mpCb = nullptr; +}; + +#endif // COUNTDOWNTIMER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/HeartRateZone.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/HeartRateZone.hpp new file mode 100644 index 00000000..dc97144e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/HeartRateZone.hpp @@ -0,0 +1,41 @@ +#ifndef HEARTRATEZONE_HPP +#define HEARTRATEZONE_HPP + +#include + +/** + * @brief Segmented arc indicator showing the current heart rate zone. + * + * Displays one of five zone segments (hr1-hr5) based on the current HR value + * measured against a threshold array. Segments represent zones from lowest (1) + * to highest (5). No segment is shown when HR is below all thresholds. + * + * Usage: + * @code + * heartRateZone.setHR(bpm, thresholds, kHrThresholdsCount); + * @endcode + */ +class HeartRateZone : public HeartRateZoneBase +{ +public: + HeartRateZone(); + virtual ~HeartRateZone() {} + + virtual void initialize(); + + /** + * @brief Update the displayed heart rate zone. + * @param hr Current heart rate in bpm. + * @param thresholds Array of zone lower-bound thresholds in ascending order (bpm). + * @param thresholdCount Number of thresholds (must not exceed kZoneCount). + */ + void setHR(float hr, const uint8_t* thresholds, uint8_t thresholdCount); + +protected: + static constexpr uint8_t kZoneCount = 5; + + /** Ordered references to zone segment images (index 0 = zone 1, lowest). */ + touchgfx::Image* const mZones[kZoneCount]; +}; + +#endif // HEARTRATEZONE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/InfoCarousel.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/InfoCarousel.hpp new file mode 100644 index 00000000..acf49567 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/InfoCarousel.hpp @@ -0,0 +1,94 @@ +#ifndef INFOCAROUSEL_HPP +#define INFOCAROUSEL_HPP + +#include +#include + +/** + * @brief Cycling info panel that periodically rotates through a set of data slots. + * + * The component registers itself as a TouchGFX timer widget lazily -- only when + * count > 1 -- and unregisters in the destructor. This is safe because the + * Application outlives all screens. + * + * Typical setup in View::setupScreen(): + * @code + * infoCarousel.setPeriod(3000); + * infoCarousel.setUpdateCallback(mCarouselCb); + * infoCarousel.setCount(5); // registers timer, fires cb(0) immediately + * @endcode + * + * Inside the callback: + * @code + * void MyView::onCarouselUpdate(int16_t index) { + * infoCarousel.setTitle(T_TEXT_SOME_LABEL); + * infoCarousel.setValue(myBuffer); + * } + * @endcode + */ +class InfoCarousel : public InfoCarouselBase +{ +public: + InfoCarousel(); + virtual ~InfoCarousel(); + + virtual void initialize(); + + // ---- Cycling control --------------------------------------------------- + + /** + * @brief Set the number of slots to cycle through. + * Lazily registers the timer widget when count > 1, unregisters when <= 1. + * Resets the index to 0 and fires the callback immediately. + * @param count Number of slots (0 or 1 disables cycling). + */ + void setCount(uint16_t count); + + /** + * @brief Set the number of ticks between slot advances. + * @param ticks Must be > 0. + */ + void setPeriod(uint16_t ticks); + + /** + * @brief Register the update callback (must be called before setCount). + * Signature: void onUpdate(int16_t index). + */ + void setUpdateCallback(touchgfx::GenericCallback& cb); + + /** + * @brief Re-fire the callback for the current slot index. + * Call this whenever the underlying data changes so the visible slot + * stays up to date. + */ + void refresh(); + + // ---- Content (call from inside the update callback) -------------------- + + /** @brief Set the label text from a typed-text ID. */ + void setTitle(TypedTextId msgId); + + /** + * @brief Set the dataValue text. Pass nullptr to hide the dataValue field. + * @param messageText Null-terminated Unicode string (may be nullptr). + */ + void setValue(const touchgfx::Unicode::UnicodeChar* messageText); + + virtual void handleTickEvent() override; + +protected: + uint16_t mCount = 0; + uint16_t mPeriod = 1; + uint16_t mIndex = 0; + uint16_t mTick = 0; + bool mRegistered = false; + + touchgfx::GenericCallback* mpUpdateCb = nullptr; + +private: + void registerTimer(); + void unregisterTimer(); + void fireCallback(); +}; + +#endif // INFOCAROUSEL_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/LapListItem.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/LapListItem.hpp new file mode 100644 index 00000000..59b89977 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/LapListItem.hpp @@ -0,0 +1,38 @@ +#ifndef LAPLISTITEM_HPP +#define LAPLISTITEM_HPP + +#include + +/** + * @brief ScrollList item rendering one row of the lap table. + * + * Columns (left to right): lap index, lap time, lap average HR, lap max HR. + * Each setter takes pre-formatted text so the caller (typically + * @c SummaryFaceLaps::scrollListUpdateItem) controls formatting and unit + * decisions. Passing an empty (zero-terminated) buffer clears that field -- + * used for padding rows beyond the last real lap. + */ +class LapListItem : public LapListItemBase +{ +public: + LapListItem(); + virtual ~LapListItem() {} + + virtual void initialize(); + + /** @brief Lap index column (e.g. "3."). */ + void setIndex(const touchgfx::Unicode::UnicodeChar* text); + + /** @brief Lap time column (e.g. "4:12"). */ + void setTime (const touchgfx::Unicode::UnicodeChar* text); + + /** @brief Lap average HR column (e.g. "128" or "---"). */ + void setAvgHR(const touchgfx::Unicode::UnicodeChar* text); + + /** @brief Lap max HR column (e.g. "145" or "---"). */ + void setMaxHR(const touchgfx::Unicode::UnicodeChar* text); + +protected: +}; + +#endif // LAPLISTITEM_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenu.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenu.hpp new file mode 100644 index 00000000..1fcaaac3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenu.hpp @@ -0,0 +1,135 @@ +#ifndef MAINMENU_HPP +#define MAINMENU_HPP + +#include +#include +#include + +/** + * @brief Scroll-wheel menu container (wheel + scroll only). + * + * Pure navigation component -- no chrome (title / buttons / info / background). + * Use MainMenuLayout for the standard full-screen menu layout. + * + * Usage: + * 1. Call setNumberOfItems() to configure the wheel and scroll counter. + * 2. Register callbacks via setUpdateItemCallback() and + * setUpdateCenterItemCallback(). The screen owns MenuItemConfig arrays + * and calls item.apply(cfg) inside each callback. + * 3. Optionally call setCenterItemLayout() / setItemLayout() to adjust + * item geometry for all items of each type. + * 4. Navigate with selectNext() / selectPrev() / selectItem(). + * + * Animation callbacks: + * setAnimationMiddleCallback() -- fires at the midpoint of the animation, + * useful for updating background before the new item is fully centered. + * setAnimationEndedCallback() -- fires when animation completes. + * Both pass the target item index as argument. + * + * Layout priority (per item): + * MenuItemConfig::centerLayout / itemLayout + * > MainMenu::setCenterItemLayout() / setItemLayout() + * > built-in defaults + */ +class MainMenu : public MainMenuBase +{ +public: + MainMenu(); + virtual ~MainMenu() {} + + virtual void initialize(); + + /** Re-render all wheel items (call after batch config changes). */ + virtual void invalidate(); + + // ---- Wheel size -------------------------------------------------------- + void setNumberOfItems(int16_t numberOfItems); + int16_t getNumberOfItems(); + + // ---- Navigation -------------------------------------------------------- + void selectNext(); + void selectPrev(); + void selectItem(int16_t itemIndex); + uint16_t getSelectedItem(); + + // ---- Low-level access -------------------------------------------------- + touchgfx::ScrollWheelWithSelectionStyle &getWheel(); + + // ---- Item callbacks ---------------------------------------------------- + /** + * @brief Register the callback invoked for each surrounding item. + * Signature: void callback(MainMenuItem &item, int16_t index) + */ + void setUpdateItemCallback( + touchgfx::GenericCallback &cb); + + /** + * @brief Register the callback invoked for the center item. + * Signature: void callback(MainMenuCenterItem &item, int16_t index) + */ + void setUpdateCenterItemCallback( + touchgfx::GenericCallback &cb); + + // ---- Animation callbacks ----------------------------------------------- + /** + * @brief Fires at the midpoint of a selectNext/selectPrev animation. + * + * Useful for updating the background while the old item is still + * partially visible -- change happens smoothly mid-transition. + * Not fired by selectItem() (instant, no animation). + * Signature: void callback(int16_t targetItemIndex) + */ + void setAnimationMiddleCallback( + touchgfx::GenericCallback &cb); + + /** + * @brief Fires when the wheel animation completes. + * + * Signature: void callback(int16_t selectedItemIndex) + */ + void setAnimationEndedCallback( + touchgfx::GenericCallback &cb); + + // ---- Animation speed --------------------------------------------------- + /** + * @brief Set the number of animation steps for selectNext/selectPrev. + * Default: 4. Higher values = slower animation. + */ + void setAnimationSteps(int16_t steps); + + // ---- Layout ------------------------------------------------------------ + /** + * @brief Apply a geometry layout to all center items in the wheel buffer. + * Individual items may still override it via MenuItemConfig::centerLayout. + */ + void setCenterItemLayout(const CenterItemLayout &layout); + + /** + * @brief Apply a geometry layout to all surrounding items in the wheel buffer. + * Individual items may still override it via MenuItemConfig::itemLayout. + */ + void setItemLayout(const ItemLayout &layout); + +protected: + virtual void wheelUpdateItem(MainMenuItem &item, int16_t itemIndex) override; + virtual void wheelUpdateCenterItem(MainMenuCenterItem &item, int16_t itemIndex) override; + virtual void handleTickEvent() override; + +private: + touchgfx::Callback mWheelAnimationEndCb; + void onWheelAnimationEnded(); + + touchgfx::GenericCallback *mpUpdateItemCb = nullptr; + touchgfx::GenericCallback *mpUpdateCenterItemCb = nullptr; + touchgfx::GenericCallback *mpAnimationMiddleCb = nullptr; + touchgfx::GenericCallback *mpAnimationEndedCb = nullptr; + + int16_t mAnimSteps = 4; ///< Steps per selectNext/selectPrev animation + int16_t mAnimCountdown = 0; ///< Ticks remaining in current animation + int16_t mAnimTargetItem = 0; ///< Item index we are animating toward + + CenterItemLayout mCenterItemLayout; + ItemLayout mItemLayout; +}; + +#endif // MAINMENU_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuBackground.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuBackground.hpp new file mode 100644 index 00000000..9417f8bc --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuBackground.hpp @@ -0,0 +1,29 @@ +#ifndef MAINMENUBACKGROUND_HPP +#define MAINMENUBACKGROUND_HPP + +#include + +/** + * @brief Background for the main menu screen. + * + * Wraps a single canvas Circle that fills the region under center menu item. + * The fill color can be changed at any time via setColor(). + */ +class MainMenuBackground : public MainMenuBackgroundBase +{ +public: + MainMenuBackground(); + virtual ~MainMenuBackground() {} + + virtual void initialize(); + + /** + * @brief Set the background fill color. + * @param color Desired fill color. + */ + void setColor(touchgfx::colortype color); + +protected: +}; + +#endif // MAINMENUBACKGROUND_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuCenterItem.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuCenterItem.hpp new file mode 100644 index 00000000..12080f8d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuCenterItem.hpp @@ -0,0 +1,53 @@ +#ifndef MAINMENUCENTERITEM_HPP +#define MAINMENUCENTERITEM_HPP + +#include +#include + +/** + * @brief Center item for MainMenu's scroll wheel. + * + * Supports all display styles defined by MenuItemConfig::Style: + * SIMPLE -- centered labelText only + * TOGGLE -- labelText + interactive toggle switch + * TIP -- labelText + smaller hint line below + * ICON -- static bitmap + labelText + * ICON_EXT -- dynamic (external raw pixels) bitmap + labelText + * + * Layout resolution priority: + * MenuItemConfig::centerLayout > MainMenu::setCenterItemLayout() > built-in defaults + */ +class MainMenuCenterItem : public MainMenuCenterItemBase +{ +public: + MainMenuCenterItem(); + virtual ~MainMenuCenterItem() {} + + virtual void initialize() override; + + /** + * @brief Render this item according to the given configuration. + * Called from the screen's wheelUpdateCenterItem callback. + */ + void apply(const MenuItemConfig &cfg); + + /** + * @brief Set the default geometry layout for this item instance. + * Called by MainMenu::setCenterItemLayout() on all center wheel buffer items. + */ + void setLayout(const CenterItemLayout &layout); + +private: + const CenterItemLayout *mpLayout = nullptr; + BitmapId mDynamicIconId = BITMAP_INVALID; + + // Designer defaults -- captured in initialize() from the generated base widgets + TypedTextId mDefaultMsgType = TYPED_TEXT_INVALID; + TypedTextId mDefaultTipType = TYPED_TEXT_INVALID; + + const CenterItemLayout &activeLayout(const MenuItemConfig &cfg) const; + void renderStyle(const MenuItemConfig &cfg, + const CenterItemLayout &layout); +}; + +#endif // MAINMENUCENTERITEM_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuItem.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuItem.hpp new file mode 100644 index 00000000..72314d68 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuItem.hpp @@ -0,0 +1,54 @@ +#ifndef MAINMENUITEM_HPP +#define MAINMENUITEM_HPP + +#include +#include + +/** + * @brief Surrounding item for MainMenu's scroll wheel. + * + * Supports display styles defined by MenuItemConfig::Style: + * SIMPLE -- centered labelText only + * TIP -- labelText + smaller hint line below + * ICON -- static bitmap + labelText + * + * Note: TOGGLE and ICON_EXT styles gracefully degrade: + * - TOGGLE -> rendered as SIMPLE (toggle is only interactive in the center item) + * - ICON_EXT -> rendered as ICON if iconId is set, otherwise as SIMPLE + * + * Layout resolution priority: + * MenuItemConfig::itemLayout > MainMenu::setItemLayout() > built-in defaults + */ +class MainMenuItem : public MainMenuItemBase +{ +public: + MainMenuItem(); + virtual ~MainMenuItem() {} + + virtual void initialize() override; + + /** + * @brief Render this item according to the given configuration. + * Called from the screen's wheelUpdateItem callback. + */ + void apply(const MenuItemConfig &cfg); + + /** + * @brief Set the default geometry layout for this item instance. + * Called by MainMenu::setItemLayout() on all surrounding wheel buffer items. + */ + void setLayout(const ItemLayout &layout); + +private: + const ItemLayout *mpLayout = nullptr; + + // Designer defaults -- captured in initialize() from the generated base widgets + TypedTextId mDefaultMsgType = TYPED_TEXT_INVALID; + TypedTextId mDefaultTipType = TYPED_TEXT_INVALID; + + const ItemLayout &activeLayout(const MenuItemConfig &cfg) const; + void renderStyle(const MenuItemConfig &cfg, + const ItemLayout &layout); +}; + +#endif // MAINMENUITEM_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuLayout.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuLayout.hpp new file mode 100644 index 00000000..3c6246a0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MainMenuLayout.hpp @@ -0,0 +1,77 @@ +#ifndef MAINMENULAYOUT_HPP +#define MAINMENULAYOUT_HPP + +#include +#include +#include + +/** + * @brief Standard full-screen menu layout container. + * + * Combines MainMenu (scroll wheel + scroll indicator) with the common chrome: + * background image, title, infoText text, and navigation buttons. + * + * Most MainMenu operations are delegated directly, so screens can call + * layout.setNumberOfItems(5) instead of layout.getMenu().setNumberOfItems(5). + * For advanced wheel access use getMenu(). + * + * Typical screen setup: + * @code + * menuLayout.setTitle(T_TEXT_SETTINGS); + * menuLayout.getButtons().setR1(Buttons::AMBER); + * menuLayout.setUpdateItemCallback(mUpdateItemCb); + * menuLayout.setUpdateCenterItemCallback(mUpdateCenterItemCb); + * menuLayout.setNumberOfItems(kNumItems); + * menuLayout.invalidate(); + * @endcode + */ +class MainMenuLayout : public MainMenuLayoutBase +{ +public: + MainMenuLayout(); + virtual ~MainMenuLayout() {} + + virtual void initialize(); + + // ---- Delegated wheel operations ---------------------------------------- + void setNumberOfItems(int16_t numberOfItems); + int16_t getNumberOfItems(); + void selectNext(); + void selectPrev(); + void selectItem(int16_t itemIndex); + uint16_t getSelectedItem(); + virtual void invalidate(); + + void setUpdateItemCallback( + touchgfx::GenericCallback &cb); + void setUpdateCenterItemCallback( + touchgfx::GenericCallback &cb); + + /** @brief Apply geometry layout to all center items. */ + void setCenterItemLayout(const CenterItemLayout &layout); + + /** @brief Apply geometry layout to all surrounding items. */ + void setItemLayout(const ItemLayout &layout); + + void setAnimationSteps(int16_t steps); + void setAnimationMiddleCallback(touchgfx::GenericCallback &cb); + void setAnimationEndedCallback(touchgfx::GenericCallback &cb); + + // ---- Chrome ------------------------------------------------------------ + void setTitle(TypedTextId msgId); + void showTitle(bool state); + + void setBackground(touchgfx::colortype color); + void showBackground(bool state); + + void setInfoMsg(TypedTextId msgId); + void setInfoMsgColor(touchgfx::colortype color); + + // ---- Getters ----------------------------------------------------------- + /** Direct access to navigation buttons (set L1/L2/R1/R2 state). */ + Buttons &getButtons(); + /** Direct access to the scroll wheel menu (for advanced operations). */ + MainMenu &getMenu(); +}; + +#endif // MAINMENULAYOUT_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MenuItemConfig.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MenuItemConfig.hpp new file mode 100644 index 00000000..2042a547 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MenuItemConfig.hpp @@ -0,0 +1,169 @@ +#ifndef MENUITEMCONFIG_HPP +#define MENUITEMCONFIG_HPP + +#include +#include +#include +#include +#include + +// ============================================================================= +// CenterItemLayout +// ============================================================================= + +/** + * @brief Geometry layout for MainMenuCenterItem (default container: 240 x 66 px). + * + * Fields are grouped by style. Only the sub-struct relevant to the item's style + * is used during rendering; the rest are ignored. + * + * Set once per menu via MainMenu::setCenterItemLayout(). + * Override per individual item via MenuItemConfig::centerLayout. + * Omitting both uses the built-in defaults. + * + * @code + * static CenterItemLayout myLayout; + * myLayout.inl.mainX = 37; + * myLayout.inl.mainW = 130; + * item.centerLayout = &myLayout; + * @endcode + */ +struct CenterItemLayout +{ + struct { + int16_t textX = 21; ///< Text X when toggle is visible + int16_t textW = 128; ///< Text width when toggle is visible + int16_t x = 151; ///< Toggle widget X; Y is always centred vertically + } toggle; + + struct { + int16_t msgOffsetY = 3; ///< Main text Y nudge from centre of top half (+ = down) + int16_t hintOffsetY = -3; ///< Hint text Y nudge from centre of bottom half (+ = down) + } tip; + + struct { + int16_t mainX = 10; ///< Main text X + int16_t mainW = 110; ///< Main text width + int16_t tipX = 130; ///< Hint label X + int16_t tipW = 110; ///< Hint label width + } inl; + + struct { + int16_t x = 20; ///< Icon X + int16_t y = 3; ///< Icon Y + int16_t w = 60; ///< Icon width + int16_t h = 60; ///< Icon height + int16_t textX = 87; ///< Text X when icon is shown + int16_t textW = 153; ///< Text width when icon is shown + } icon; +}; + + +// ============================================================================= +// ItemLayout +// ============================================================================= + +/** + * @brief Geometry layout for MainMenuItem / surrounding items (default container: 240 x 60 px). + * + * Fields are grouped by style. Only the sub-struct relevant to the item's style + * is used during rendering; the rest are ignored. + * + * Set once per menu via MainMenu::setItemLayout(). + * Override per individual item via MenuItemConfig::itemLayout. + * Omitting both uses the built-in defaults. + * + * @code + * static ItemLayout myLayout; + * myLayout.inl.mainX = 70; + * myLayout.inl.mainW = 50; + * item.itemLayout = &myLayout; + * @endcode + */ +struct ItemLayout +{ + struct { + int16_t msgOffsetY = 0; ///< Main text Y nudge from vertical centre (+ = down) + } simple; + + struct { + int16_t msgOffsetY = 4; ///< Main text Y nudge from centre of top half (+ = down) + int16_t hintOffsetY = -4; ///< Hint text Y nudge from centre of bottom half (+ = down) + } tip; + + struct { + int16_t mainX = 10; ///< Main text X + int16_t mainW = 110; ///< Main text width + int16_t tipX = 130; ///< Hint label X + int16_t tipW = 110; ///< Hint label width + } inl; + + struct { + int16_t x = 46; ///< Icon X + int16_t y = 7; ///< Icon Y + int16_t w = 46; ///< Icon width + int16_t h = 46; ///< Icon height + int16_t textX = 102; ///< Text X when icon is shown + int16_t textW = 100; ///< Text width when icon is shown + } icon; +}; + + +// ============================================================================= +// MenuItemConfig +// ============================================================================= + +/** + * @brief Configuration for a single menu item. + * + * Owned by the screen. Passed into MainMenuCenterItem / MainMenuItem + * via apply() inside the wheel update callback. + * + * Text source priority: msgId (TypedText) > msgText (UnicodeChar*) > msgChar (UTF-8) + * Layout priority: cfg.centerLayout / cfg.itemLayout + * > MainMenu::setCenterItemLayout / setItemLayout() + * > built-in defaults + */ +struct MenuItemConfig +{ + /** + * @brief Visual style -- defines which widgets are shown. + */ + enum Style + { + SIMPLE = 0, ///< Centred text only + TOGGLE, ///< Text + interactive toggle switch (MainMenuCenterItem only) + TIP, ///< Main text + smaller hint below + INLINE, ///< Main text + hint on the same line, baseline-aligned + ICON, ///< Static bitmap icon + text + ICON_EXT, ///< External (dynamic) bitmap icon + text (MainMenuCenterItem only) + }; + + Style style = SIMPLE; + + // ---- Main text ---------------------------------------------------------- + TypedTextId msgId = TYPED_TEXT_INVALID; ///< Localized text (highest priority) + TypedTextId msgIdType = TYPED_TEXT_INVALID; ///< Text style; INVALID = use Designer default + const touchgfx::Unicode::UnicodeChar *msgText = nullptr; ///< Raw Unicode fallback + const char *msgChar = nullptr; ///< UTF-8 C-string (lowest priority) + + // ---- Tip / hint text (TIP / INLINE styles) ----------------------------- + TypedTextId tipId = TYPED_TEXT_INVALID; + TypedTextId tipIdType = TYPED_TEXT_INVALID; ///< Tip style; INVALID = use Designer default + const touchgfx::Unicode::UnicodeChar *tipText = nullptr; ///< Raw Unicode fallback + const char *tipChar = nullptr; ///< UTF-8 C-string (lowest priority) + touchgfx::colortype tipColor = touchgfx::Color::getColorFromRGB(192, 192, 192); + + // ---- Icon (ICON / ICON_EXT styles) ------------------------------------- + BitmapId iconId = BITMAP_INVALID; ///< Static bitmap (ICON) + const uint8_t *extIcon = nullptr; ///< Raw pixels, 60x60 ABGR2222 (ICON_EXT) + + // ---- Toggle (TOGGLE style) --------------------------------------------- + bool toggleState = false; + + // ---- Per-item layout overrides (optional) ------------------------------ + const CenterItemLayout *centerLayout = nullptr; ///< nullptr = use menu-level default + const ItemLayout *itemLayout = nullptr; ///< nullptr = use menu-level default +}; + +#endif // MENUITEMCONFIG_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MenuItemRenderer.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MenuItemRenderer.hpp new file mode 100644 index 00000000..f07b9e2d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/MenuItemRenderer.hpp @@ -0,0 +1,182 @@ +#ifndef MENUITEMRENDERER_HPP +#define MENUITEMRENDERER_HPP + +#include +#include +#include +#include +#include +#include + +/** + * @brief Stateless rendering helpers shared between menu item types. + * + * Header-only -- no .cpp required. + * All methods are static. Not intended to be instantiated. + */ +struct MenuItemRenderer +{ + /** + * @brief Write content into a wildcard TextArea. + * + * Text source priority: textId (TypedText) > rawText > clear. + * + * Always writes to @p buffer -- clears it when neither source is provided. + * This is important for scroll-wheel items, where the same container is + * reused for different items and must not retain stale text. + * + * Font is updated if typeId is valid. + * + * @param area Target TextArea widget. + * @param buffer Wildcard buffer belonging to the widget. + * @param bufSize Buffer capacity (in UnicodeChar units). + * @param textId Localized text ID; TYPED_TEXT_INVALID = fall through. + * @param typeId Text style (font, alignment); screens should always provide this + * to prevent stale style from a previously rendered item. + * @param rawText Raw Unicode string; nullptr = fall through. + * @param charText UTF-8 / ASCII C-string (lowest priority); nullptr = fall through. + */ + static void applyText( + touchgfx::TextAreaWithOneWildcard &area, + touchgfx::Unicode::UnicodeChar *buffer, uint16_t bufSize, + TypedTextId textId, + TypedTextId typeId, + const touchgfx::Unicode::UnicodeChar *rawText, + const char *charText = nullptr) + { + if (textId != TYPED_TEXT_INVALID) { + touchgfx::Unicode::snprintf(buffer, bufSize, "%s", + touchgfx::TypedText(textId).getText()); + } else if (rawText != nullptr) { + touchgfx::Unicode::strncpy(buffer, rawText, bufSize); + } else if (charText != nullptr) { + touchgfx::Unicode::fromUTF8( + reinterpret_cast(charText), buffer, bufSize); + } else { + buffer[0] = 0; // no content -- clear to prevent stale text from a previous item + } + + if (typeId != TYPED_TEXT_INVALID) { + area.setTypedText(touchgfx::TypedText(typeId)); + } + } + + /** + * @brief Write content + color into a tip TextArea. + * + * Same as applyText(), plus sets the text color. + */ + static void applyTip( + touchgfx::TextAreaWithOneWildcard &area, + touchgfx::Unicode::UnicodeChar *buffer, uint16_t bufSize, + TypedTextId textId, + TypedTextId typeId, + const touchgfx::Unicode::UnicodeChar *rawText, + touchgfx::colortype color, + const char *charText = nullptr) + { + applyText(area, buffer, bufSize, textId, typeId, rawText, charText); + area.setColor(color); + } + + /** + * @brief Set a static bitmap on an Image widget. + * + * Does nothing if iconId == BITMAP_INVALID. + */ + static void applyStaticIcon(touchgfx::Image &icon, BitmapId iconId) + { + if (iconId != BITMAP_INVALID) { + icon.setBitmap(touchgfx::Bitmap(iconId)); + } + } + + /** + * @brief Create a dynamic bitmap from raw pixel data and set it on an Image. + * + * Deletes the previous dynamic bitmap (if any) before creating a new one. + * Assumes ABGR2222 pixel format. + * + * @param icon Target Image widget. + * @param dynamicId In/out: tracks the current dynamic bitmap ID for cleanup. + * @param extIconData Raw pixel data pointer; nullptr = only deletes previous. + * @param w Bitmap width in pixels. + * @param h Bitmap height in pixels. + */ + static void applyDynamicIcon( + touchgfx::Image &icon, + BitmapId &dynamicId, + const uint8_t *extIconData, + int16_t w, int16_t h) + { + if (dynamicId != BITMAP_INVALID) { + touchgfx::Bitmap::dynamicBitmapDelete(dynamicId); + dynamicId = BITMAP_INVALID; + } + + if (extIconData != nullptr) { + dynamicId = touchgfx::Bitmap::dynamicBitmapCreateExternal( + w, h, extIconData, touchgfx::Bitmap::ABGR2222); + icon.setBitmap(touchgfx::Bitmap(dynamicId)); + } + } + + /** + * @brief Resize a TextArea to its content height and center it vertically. + * + * Uses resizeHeightToCurrentText(), which measures the rendered height of + * the TypedText string (including line wrapping). Correct for multi-line + * or variable-length text. + * + * @param area Target TextArea. + * @param containerHeight Height of the parent container in pixels. + */ + static void centerTextY(touchgfx::TextArea &area, int16_t containerHeight) + { + area.resizeHeightToCurrentText(); + area.setY((containerHeight - area.getHeight()) / 2); + } + + /** + * @brief Align @p tipArea's baseline to the baseline of the already-positioned @p mainText. + * + * Used in INLINE style so that the smaller hint label sits on the same + * optical line as the larger main text, regardless of font size difference. + * + * Algorithm: + * mainBaseline = mainText.getY() + mainFont->getBaseline() + * tipArea.Y = mainBaseline - tipFont->getBaseline() + * + * resizeHeightToCurrentText() is called on @p tipArea before positioning so + * the widget bounds reflect the actual rendered height. + * + * Falls back to centering @p tipArea at the same mid-Y as @p mainText when + * either font is unavailable. + * + * @param mainText Main text area -- must already have Y and font set. + * @param tipArea Tip text area to position. + */ + static void alignBaselineY(const touchgfx::TextArea &mainText, + touchgfx::TextArea &tipArea) + { + const touchgfx::Font *mainFont = mainText.getTypedText().getFont(); + const touchgfx::Font *tipFont = tipArea.getTypedText().getFont(); + + tipArea.resizeHeightToCurrentText(); + + if (mainFont != nullptr && tipFont != nullptr) + { + const int16_t baseline = mainText.getY() + + static_cast(mainFont->getBaseline()); + tipArea.setY(baseline - static_cast(tipFont->getBaseline())); + } + else + { + // Fallback: align vertical mid-points + const int16_t mainMid = mainText.getY() + mainText.getHeight() / 2; + tipArea.setY(mainMid - tipArea.getHeight() / 2); + } + } +}; + +#endif // MENUITEMRENDERER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/PauseIndicator.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/PauseIndicator.hpp new file mode 100644 index 00000000..a05828d7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/PauseIndicator.hpp @@ -0,0 +1,34 @@ +#ifndef PAUSEINDICATOR_HPP +#define PAUSEINDICATOR_HPP + +#include + +/** + * @brief Overlay indicator shown when a workout is paused. + * + * Displays a pause icon alongside an elapsed time in H:MM:SS / MM:SS format. + * + * @code + * pauseIndicator.setTime(7424); // -> "2:03:44" + * pauseIndicator.setTime(125); // -> "02:05" + * @endcode + */ +class PauseIndicator : public PauseIndicatorBase +{ +public: + PauseIndicator(); + virtual ~PauseIndicator() {} + + virtual void initialize() override; + + /** + * @brief Set the displayed elapsed time. + * + * Formats as H:MM:SS when hours > 0, otherwise MM:SS. + * + * @param seconds Total elapsed seconds. + */ + void setTime(std::time_t seconds); +}; + +#endif // PAUSEINDICATOR_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/ScrollIndicator.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/ScrollIndicator.hpp new file mode 100644 index 00000000..764ffb2b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/ScrollIndicator.hpp @@ -0,0 +1,139 @@ +#ifndef SCROLLINDICATOR_HPP +#define SCROLLINDICATOR_HPP + +#include +#include + +/** + * @brief Appearance and geometry configuration for ScrollIndicator. + * + * Two predefined configs are available as ScrollIndicator::kBig and kSmall. + * Both share the same circle geometry set by the Designer (center, radius, + * line width) but differ in rail arc range, handle length, and colours. + * + * You can also build a custom config: + * @code + * ScrollIndicatorConfig cfg = ScrollIndicator::kBig; + * cfg.handleColor = SDK::GUI::Color::rgb(255, 128, 0); + * scrollIndicator.setConfig(cfg); + * @endcode + */ +struct ScrollIndicatorConfig +{ + float handleLen = 18.0f; ///< Handle arc span (degrees) + float railMin = 232.0f; ///< Rail low bound (degrees) + float railMax = 308.0f; ///< Rail high bound (degrees) + uint32_t handleColor = 0; ///< Handle and overflow-handle colour (0xFFRRGGBB) + uint32_t railColor = 0; ///< Background rail colour (0xFFRRGGBB) +}; + +// --------------------------------------------------------------------------- + +/** + * @brief Circular arc position indicator for scroll-wheel menus. + * + * Renders a sliding arc handle on a circular rail that tracks the currently + * selected item in a list. Supports smooth animated transitions including + * wrap-around (last -> first and first -> last) using a dual-handle technique. + * + * The geometry (circle center, radius, line width) is fixed by the + * Designer-generated base. Only the arc range and colours are configurable + * at runtime via setConfig(). + * + * Usage: + * @code + * scrollIndicator.setConfig(ScrollIndicator::kSmall); // optional + * scrollIndicator.setCount(5); + * scrollIndicator.setActiveId(0); + * scrollIndicator.animateToId(2, 8); + * @endcode + */ +class ScrollIndicator : public ScrollIndicatorBase +{ +public: + ScrollIndicator(); + virtual ~ScrollIndicator(); + + virtual void initialize(); + + // ------------------------------------------------------------------ + // Predefined configs + // ------------------------------------------------------------------ + + /** Config matching the Big indicator: 76 deg rail, 18 deg handle. */ + static constexpr ScrollIndicatorConfig kBig = { 18.0f, 232.0f, 308.0f, 0xC0C0C0u, 0x404040u }; + + /** Config matching the Small indicator: 36 deg rail, 10 deg handle. */ + static constexpr ScrollIndicatorConfig kSmall = { 10.0f, 252.0f, 288.0f, 0xC0C0C0u, 0x404040u }; + + // ------------------------------------------------------------------ + // Configuration + // ------------------------------------------------------------------ + + /** + * @brief Apply an arc config (range + colours). Safe to call at any time. + * + * The Designer-generated base already applies kBig defaults in its + * constructor, so this call is only needed to switch to kSmall or a + * custom config. + */ + void setConfig(const ScrollIndicatorConfig& cfg); + + // ------------------------------------------------------------------ + // Item navigation + // ------------------------------------------------------------------ + + /** + * @brief Set the total number of items. Resets position to 0. + * The handle is hidden when count <= 1. + */ + void setCount(uint16_t count); + + /** @brief Instantly move the handle to the given item index. */ + void setActiveId(uint16_t index); + + /** + * @brief Animate the handle to the given item index. + * @param index Target item (wraps around if out of range). + * @param animationSteps Tick count for the animation; <= 0 means instant. + */ + void animateToId(int16_t index, int16_t animationSteps = 0); + + /** @brief Return the current (or target, if animating) item index. */ + uint16_t getActiveId(); + + virtual void handleTickEvent() override; + +protected: + // Arc geometry -- mirrors ScrollIndicatorConfig, updated by setConfig() + float mHandleLen = 18.0f; + float mRailMin = 232.0f; + float mRailMax = 308.0f; + + uint16_t mCount = 1; + uint16_t mPosition = 0; + + bool mAnimationRunning = false; + uint16_t mAnimationCounter = 0; + uint16_t mAnimationDuration = 0; + float mAnimationStartPos = 0.0f; + float mAnimationEndPos = 0.0f; + + bool mAnimWrap = false; ///< True when the animation wraps around the rail ends + float mAnimOutgoingEnd = 0.0f; ///< Outgoing handle's target position (slides off rail edge) + float mAnimIncomingStart = 0.0f; ///< Incoming handle's start position (slides in from opposite edge) + +private: + void nextAnimationStep(); + float getStartAngle(uint16_t index) const; + + /** + * @brief Stop any running animation and clean up the overflow handle. + * + * Must be called before setActiveId() or before starting a new animation + * when an overflow animation might be in progress. + */ + void stopAnimation(); +}; + +#endif // SCROLLINDICATOR_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceCal.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceCal.hpp new file mode 100644 index 00000000..446d9685 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceCal.hpp @@ -0,0 +1,29 @@ +#ifndef SUMMARYFACECAL_HPP +#define SUMMARYFACECAL_HPP + +#include +#include + +/** + * @brief Summary face: session time and total / active / resting calories (kcal). + * + * Swipe order on TrackSummary: after overview, before the heart-rate face. + * Label text widgets are set in TouchGFX Designer. + */ +class SummaryFaceCal : public SummaryFaceCalBase +{ +public: + SummaryFaceCal(); + virtual ~SummaryFaceCal() {} + + virtual void initialize(); + + void setTotalTime(std::time_t sec); + void setTotalCalories(float kcal); + void setActiveCalories(float kcal); + void setRestingCalories(float kcal); + +protected: +}; + +#endif // SUMMARYFACECAL_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceLaps.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceLaps.hpp new file mode 100644 index 00000000..8950ff7b --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceLaps.hpp @@ -0,0 +1,71 @@ +#ifndef SUMMARYFACELAPS_HPP +#define SUMMARYFACELAPS_HPP + +#include +#include +#include +#include "ActivitySummary.hpp" + +/** + * @brief Summary face showing individual lap metrics in a paginated scrollable list. + * + * One of four swipeable faces on the TrackSummary screen. Displays up to + * @c kVisible rows at a time; the L1/L2 buttons page through the list in + * increments of @c kPageSize. Unit conversion is performed internally so + * callers only need to supply the raw @c LapSummary vector. + * + * Padding items are appended to the underlying ScrollList so that every page + * transition always selects an off-screen item, guaranteeing the list scrolls + * by exactly @c kPageSize rows per button press. + * + * Unlike other containers that receive pre-converted values, this container + * stores a reference to the raw lap vector and formats each row on demand in + * scrollListUpdateItem(), filling the four columns: lap index, lap time, + * lap average HR, lap max HR. + */ +class SummaryFaceLaps : public SummaryFaceLapsBase +{ +public: + static constexpr uint8_t kPageSize = 3; ///< Rows advanced per L1/L2 press + static constexpr uint8_t kVisible = 5; ///< Rows visible on screen at once + + SummaryFaceLaps(); + virtual ~SummaryFaceLaps() {} + + virtual void initialize(); + + /** + * @brief Populate the list with lap data and reset to the first page. + * @param laps Reference to the lap vector owned by the activity summary. + * The reference must remain valid for the lifetime of this container. + */ + void setLaps(const std::vector& laps); + + /** @brief Return true if there is at least one more page below the current one. */ + bool canScrollDown() const; + + /** @brief Return true if there is at least one more page above the current one. */ + bool canScrollUp() const; + + /** @brief Advance to the next page and animate the list. No-op if already on the last page. */ + void scrollDown(); + + /** @brief Return to the previous page and animate the list. No-op if already on the first page. */ + void scrollUp(); + + /** @brief Return the zero-based index of the currently displayed page. */ + uint8_t getScrollPage() const { return mCurrentPage; } + + /** @brief Return the total number of pages for the current lap vector. */ + uint8_t getPageCount() const { return mNumPages; } + +protected: + /** @brief ScrollList callback -- formats and writes data for item at @p itemIndex. */ + virtual void scrollListUpdateItem(LapListItem& item, int16_t itemIndex) override; + + const std::vector* mLaps = nullptr; + uint8_t mCurrentPage = 0; + uint8_t mNumPages = 0; +}; + +#endif // SUMMARYFACELAPS_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceOverview.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceOverview.hpp new file mode 100644 index 00000000..a48bd094 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceOverview.hpp @@ -0,0 +1,33 @@ +#ifndef SUMMARYFACEOVERVIEW_HPP +#define SUMMARYFACEOVERVIEW_HPP + +#include +#include + +/** + * @brief Summary face: session time (H:MM:SS), average HR, and max HR. + * + * One of the swipeable faces on the TrackSummary screen. + * Label text widgets are expected to be set in TouchGFX Designer. + */ +class SummaryFaceOverview : public SummaryFaceOverviewBase +{ +public: + SummaryFaceOverview(); + virtual ~SummaryFaceOverview() {} + + virtual void initialize(); + + /** @brief Total active time as "H:MM:SS" in the top value area; no unit suffix. */ + void setTotalTime(std::time_t sec); + + /** @brief Average heart rate (bpm), or "---" when below @ref App::Display::kMinHR. */ + void setAvgHR(float hr); + + /** @brief Maximum heart rate (bpm), or "---" when below @ref App::Display::kMinHR. */ + void setMaxHR(float hr); + +protected: +}; + +#endif // SUMMARYFACEOVERVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceZones.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceZones.hpp new file mode 100644 index 00000000..78b3387f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/SummaryFaceZones.hpp @@ -0,0 +1,31 @@ +#ifndef SUMMARYFACEZONES_HPP +#define SUMMARYFACEZONES_HPP + +#include + +#include "ActivitySummary.hpp" + +/** + * @brief Summary face showing time spent in each heart-rate zone. + * + * Five rows are laid out by TouchGFX Designer with zone 5 at the top and zone 1 + * at the bottom (see @ref SummaryFaceZonesBase). Per-zone seconds come from + * @ref ActivitySummary::zoneTimeSec; any active seconds the session spent below + * zone 1 are absorbed into the zone-1 row for display only. Percentages are + * computed against @ref ActivitySummary::time so all five rows sum to 100%. + */ +class SummaryFaceZones : public SummaryFaceZonesBase +{ +public: + SummaryFaceZones(); + virtual ~SummaryFaceZones() {} + + virtual void initialize(); + + /** @brief Populate all five rows from the activity summary. */ + void setZoneSummary(const ActivitySummary& s); + +protected: +}; + +#endif // SUMMARYFACEZONES_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TimerRing.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TimerRing.hpp new file mode 100644 index 00000000..a4758f1e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TimerRing.hpp @@ -0,0 +1,180 @@ +#ifndef TIMERRING_HPP +#define TIMERRING_HPP + +#include + +/** + * @brief Animated arc-based ring for countdown / count-up timers. + * + * Wraps two Circle widgets from the Designer -- `track` (background ring) + * and `progress` (animated arc) -- plus their PainterABGR2222 painters. + * + * Arc direction (always clockwise): + * FILL -- progress.End moves from track.Start toward track.End as value grows. + * DRAIN -- progress.Start moves from track.Start toward track.End as value shrinks; + * progress.End stays fixed at track.End. + * + * Animation is tick-driven at a configurable speed (units per second). + * At 60 fps, speed = 60 means one full unit per tick. + * + * Designer requirements: + * Circle "track" -- background ring + * Circle "progress" -- animated progress arc + * PainterABGR2222 "trackPainter" -- track colour + * PainterABGR2222 "progressPainter" -- progress colour + * + * @code + * ring.setMaxValue(60); // 60-second countdown + * ring.setSpeed(1.0f); // 1 unit/s -> 60 s to complete + * ring.setMode(TimerRing::DRAIN); + * ring.setProgressColor(0xC08000); + * ring.setValue(60); // start full + * ring.setCompleteCallback(onDoneCb); + * ring.animateTo(0); // begin countdown + * @endcode + */ +class TimerRing : public TimerRingBase +{ +public: + /** Determines which arc endpoint moves as the value changes. */ + enum Mode + { + FILL, ///< End moves track.Start -> track.End (0 -> max: empty -> full) + DRAIN, ///< Start moves track.Start -> track.End (max -> 0: full -> empty) + }; + + TimerRing(); + virtual ~TimerRing() {} + + virtual void initialize() override; + virtual void handleTickEvent() override; + + // ------------------------------------------------------------------------- + // Configuration + // ------------------------------------------------------------------------- + + /** Maximum value; maps to 100 % of the arc. Must be > 0. Default: 100. */ + void setMaxValue(int32_t max); + + /** + * @brief Set the display refresh rate in Hz. + * + * Must be called before animateTo() to ensure correct speed calculation. + * The system may run anywhere from 10 Hz upward, so this value must be + * provided by the screen rather than hardcoded in the component. + * + * @param fps Frames per second (e.g. 10.0f, 30.0f, 60.0f). + */ + void setFPS(float fps); + + /** + * @brief Animation speed in value-units per second. + * + * Examples (at any fps): + * speed = 1, max = 60 -> 60-second countdown + * speed = 30, max = 100 -> ~3.3-second animation + */ + void setSpeed(float unitsPerSecond); + + /** Set which arc endpoint moves (FILL or DRAIN). Default: FILL. */ + void setMode(Mode mode); + + /** Set the progress arc colour at runtime. */ + void setProgressColor(touchgfx::colortype color); + + /** Set the track (background ring) colour at runtime. */ + void setTrackColor(touchgfx::colortype color); + + /** + * @brief Enable looping: when the target is reached the animation restarts + * automatically from the opposite end. + * + * The complete callback fires on every cycle. Default: disabled. + */ + void setLoopEnabled(bool enabled); + + // ------------------------------------------------------------------------- + // Control + // ------------------------------------------------------------------------- + + /** + * @brief Instantly position the arc at @p value with no animation. + * Clamps to [0, maxValue]. Stops any running animation. + */ + void setValue(int32_t value); + + /** + * @brief Start animating toward @p target at the configured speed. + * + * Registers this widget as a timer. Stops automatically when the target + * is reached. Calling animateTo() while already animating redirects to + * the new target without resetting the fractional accumulator. + */ + void animateTo(int32_t target); + + /** + * @brief Freeze animation; target is preserved. + * Call resume() to continue from the current position. + */ + void pause(); + + /** Resume a paused animation. No-op if not paused. */ + void resume(); + + /** Stop animation and discard the current target. */ + void stop(); + + // ------------------------------------------------------------------------- + // Getters + // ------------------------------------------------------------------------- + + int32_t getValue() const { return mValue; } + int32_t getTarget() const { return mTarget; } + float getProgress() const; ///< Normalised [0.0 ... 1.0] + bool isAnimating() const { return mAnimating; } + bool isPaused() const { return mPaused; } + Mode getMode() const { return mMode; } + + // ------------------------------------------------------------------------- + // Callbacks + // ------------------------------------------------------------------------- + + /** + * @brief Called on every tick where the integer value changes. + * Argument: new value. + */ + void setValueChangedCallback(touchgfx::GenericCallback& cb) + { + mpValueChangedCb = &cb; + } + + /** + * @brief Called when the animation reaches its target. + * Argument: final value (equals the target that was set). + * In loop mode this fires on every cycle. + */ + void setCompleteCallback(touchgfx::GenericCallback& cb) + { + mpCompleteCb = &cb; + } + +private: + int32_t mValue = 0; + int32_t mTarget = 0; + int32_t mMaxValue = 100; + float mSpeed = 10.0f; + float mFPS = 10.0f; + float mAccumulator = 0.0f; ///< Sub-tick fractional remainder + bool mAnimating = false; + bool mPaused = false; + bool mLoop = false; + Mode mMode = FILL; + + touchgfx::GenericCallback *mpValueChangedCb = nullptr; + touchgfx::GenericCallback *mpCompleteCb = nullptr; + + /** Recompute progress arc angles from mValue and repaint. */ + void updateArc(); +}; + +#endif // TIMERRING_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Title.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Title.hpp new file mode 100644 index 00000000..c991457a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Title.hpp @@ -0,0 +1,40 @@ +#ifndef TITLE_HPP +#define TITLE_HPP + +#include + +/** + * @brief Screen title titleText container. + * + * Wraps a TextAreaWithOneWildcard to display a localised or raw Unicode + * string as the screen heading. + * + * Usage: + * @code + * title.set(T_SCREEN_HEADING); // from typed-titleText ID + * title.set(myUnicodeBuffer); // from raw buffer + * title.setVisible(false); // hide when not needed + * @endcode + */ +class Title : public TitleBase +{ +public: + Title(); + virtual ~Title() {} + + virtual void initialize(); + + /** @brief Set title from a localised typed-titleText ID. */ + void set(TypedTextId msgId); + + /** @brief Set title from a raw Unicode string. Ignored if @p messageText is null. */ + void set(touchgfx::Unicode::UnicodeChar* messageText); + + /** @brief Set title from a UTF-8 / ASCII C-string. Ignored if @p messageText is null. */ + void set(const char* messageText); + + /** @brief Change the accent color (line + titleText). */ + void setColor(touchgfx::colortype color); +}; + +#endif // TITLE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Toggle.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Toggle.hpp new file mode 100644 index 00000000..f1515670 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/Toggle.hpp @@ -0,0 +1,65 @@ +#ifndef TOGGLE_HPP +#define TOGGLE_HPP + +#include + +/** + * @brief Two-state toggle switch widget. + * + * The rail (Line) changes color and the handle (Circle) slides + * between two positions to indicate ON / OFF state. + * + * Default colors: + * - Rail OFF : #000000 (black) + * - Rail ON : #C08000 (amber) + * - Handle : unchanged + * + * Colors can be customised at runtime via setRailOnColor() etc. + * before the first setState() call. + * + * Usage: + * @code + * toggle.setState(true); // switch ON with default colors + * toggle.setRailOnColor(myColor); // override ON rail color + * bool on = toggle.getState(); + * @endcode + */ +class Toggle : public ToggleBase +{ +public: + Toggle(); + virtual ~Toggle() {} + + virtual void initialize(); + + /** @brief Set the ON/OFF state and update visuals immediately. */ + void setState(bool state); + + /** @brief Return the current ON/OFF state. */ + bool getState() const; + + /** @brief Set the rail color used when the toggle is ON. */ + void setRailOnColor(touchgfx::colortype color); + + /** @brief Set the rail color used when the toggle is OFF. */ + void setRailOffColor(touchgfx::colortype color); + + /** @brief Set the handle color used when the toggle is ON. */ + void setHandleOnColor(touchgfx::colortype color); + + /** @brief Set the handle color used when the toggle is OFF. */ + void setHandleOffColor(touchgfx::colortype color); + +protected: + static constexpr int16_t kHandleOnX = 30; ///< Handle X position when ON + static constexpr int16_t kHandleOffX = 0; ///< Handle X position when OFF + + bool mState = false; ///< Current ON/OFF state + + touchgfx::colortype mRailOnColor; + touchgfx::colortype mRailOffColor; + touchgfx::colortype mHandleOnColor; + touchgfx::colortype mHandleOffColor; +}; + +#endif // TOGGLE_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceLap.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceLap.hpp new file mode 100644 index 00000000..0a8f88aa --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceLap.hpp @@ -0,0 +1,26 @@ +#ifndef TRACKFACELAP_HPP +#define TRACKFACELAP_HPP + +#include + +/** + * @brief Track face showing lap-focused metrics. + */ +class TrackFaceLap : public TrackFaceLapBase +{ +public: + TrackFaceLap(); + virtual ~TrackFaceLap() {} + + virtual void initialize(); + + void setLapAvgHR(float hr); + void setLapNumber(uint32_t lapNum); + + /** @brief Display current lap elapsed time as "M:SS" (or "H:MM" when >= 1 h). */ + void setTimer(std::time_t sec); + +protected: +}; + +#endif // TRACKFACELAP_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceStatus.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceStatus.hpp new file mode 100644 index 00000000..fd1a4c07 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceStatus.hpp @@ -0,0 +1,35 @@ +#ifndef TRACKFACESTATUS_HPP +#define TRACKFACESTATUS_HPP + +#include + +/** + * @brief Track face showing device status: current time of day and battery level. + * + * Intended as a low-information "status" face that the user can switch to during a session. + */ +class TrackFaceStatus : public TrackFaceStatusBase +{ +public: + TrackFaceStatus(); + virtual ~TrackFaceStatus() {} + + virtual void initialize(); + + /** + * @brief Display the current time of day. + * @param h Hour (0-23). + * @param m Minute (0-59). + */ + void setTime(uint8_t h, uint8_t m); + + /** + * @brief Display the battery charge level. + * @param level Charge percentage (0-100). + */ + void setBatteryLevel(uint8_t level); + +protected: +}; + +#endif // TRACKFACESTATUS_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceTotal.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceTotal.hpp new file mode 100644 index 00000000..ab4ff427 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/TrackFaceTotal.hpp @@ -0,0 +1,28 @@ +#ifndef TRACKFACETOTAL_HPP +#define TRACKFACETOTAL_HPP + +#include + +/** + * @brief Track face showing live HR, calories and elapsed time. + * + * All values are display-ready -- unit conversion is the view's responsibility. + */ +class TrackFaceTotal : public TrackFaceTotalBase +{ +public: + TrackFaceTotal(); + virtual ~TrackFaceTotal() {} + + virtual void initialize(); + + void setHR(float hr, const uint8_t* thresholds, uint8_t thresholdCount); + void setCalories(float calories); + + /** @brief Display total elapsed time as "H:MM:SS". */ + void setTimer(std::time_t sec); + +protected: +}; + +#endif // TRACKFACETOTAL_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/ZoneInfo.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/ZoneInfo.hpp new file mode 100644 index 00000000..ab7561e3 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/containers/ZoneInfo.hpp @@ -0,0 +1,47 @@ +#ifndef ZONEINFO_HPP +#define ZONEINFO_HPP + +#include + +#include + +/** + * @brief One row of the HR-zones summary face: zone digit, percent text, time text, + * and a coloured progress bar. + * + * Layout and styling are authored in TouchGFX Designer (@ref ZoneInfoBase). At + * runtime each row is populated by @ref setRow with the zone number, the time + * spent in that zone, the percent of the active session that represents, and + * the colour to paint the progress bar. + */ +class ZoneInfo : public ZoneInfoBase +{ +public: + ZoneInfo(); + virtual ~ZoneInfo() {} + + virtual void initialize(); + + /** + * @brief Populate this row. + * @param zoneNumber1to5 Zone digit shown on the left (1..5). + * @param seconds Seconds spent in this zone (formatted M:SS / MM:SS / H:MM:SS). + * @param percent0to100 Share of total active session time, used for the bar + * length and the percent text. Clamped to [0,100]. + * @param barColor Colour applied to the bar via its PainterABGR2222. + */ + void setRow(uint8_t zoneNumber1to5, + std::time_t seconds, + float percent0to100, + touchgfx::colortype barColor); + +protected: + /// Bar start x in the bar widget's local coordinate space (from generated base). + static constexpr int16_t kBarStartX = 6; + /// Bar end x at 100% (from generated base background line). + static constexpr int16_t kBarFullEndX = 48; + /// Bar y coordinate (from generated base). + static constexpr int16_t kBarY = 10; +}; + +#endif // ZONEINFO_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/main_screen/MainPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/main_screen/MainPresenter.hpp new file mode 100644 index 00000000..c7575a61 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/main_screen/MainPresenter.hpp @@ -0,0 +1,41 @@ +#ifndef MAINPRESENTER_HPP +#define MAINPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class MainView; + +class MainPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + MainPresenter(MainView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~MainPresenter() {} + + virtual void onIdleTimeout() override; + + void startTrack(); + void exitApp(); + +private: + MainPresenter(); + + MainView& view; +}; + +#endif // MAINPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/main_screen/MainView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/main_screen/MainView.hpp new file mode 100644 index 00000000..23e4dd6c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/main_screen/MainView.hpp @@ -0,0 +1,38 @@ +#ifndef MAINVIEW_HPP +#define MAINVIEW_HPP + +#include +#include + +class MainView : public MainViewBase +{ +public: + MainView(); + virtual ~MainView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setPositionId(uint16_t id); + uint16_t getPositionId(); + +protected: + using Menu = App::MenuNav::Root; + + MenuItemConfig mItems[Menu::ID_COUNT] {}; + MenuItemConfig mCenterItems[Menu::ID_COUNT] {}; + + touchgfx::Callback mUpdateItemCb; + touchgfx::Callback mUpdateCenterItemCb; + touchgfx::Callback mpAnimationMiddleCb; + + void setupItems(); + void updateItem(MainMenuItem& item, int16_t index); + void updateCenterItem(MainMenuCenterItem& item, int16_t index); + void onAnimationMiddle(int16_t index); + + virtual void handleKeyEvent(uint8_t key) override; + void onConfirm(); + void updateBackground(int16_t index); +}; + +#endif // MAINVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menualerts_screen/MenuAlertsPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menualerts_screen/MenuAlertsPresenter.hpp new file mode 100644 index 00000000..5a18734c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menualerts_screen/MenuAlertsPresenter.hpp @@ -0,0 +1,38 @@ +#ifndef MENUALERTSPRESENTER_HPP +#define MENUALERTSPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class MenuAlertsView; + +class MenuAlertsPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + MenuAlertsPresenter(MenuAlertsView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~MenuAlertsPresenter() {} + + virtual void onIdleTimeout() override { model->exitApp(); } + +private: + MenuAlertsPresenter(); + + MenuAlertsView& view; +}; + +#endif // MENUALERTSPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menualerts_screen/MenuAlertsView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menualerts_screen/MenuAlertsView.hpp new file mode 100644 index 00000000..d1fad663 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menualerts_screen/MenuAlertsView.hpp @@ -0,0 +1,41 @@ +#ifndef MENUALERTSVIEW_HPP +#define MENUALERTSVIEW_HPP + +#include +#include +#include + +class MenuAlertsView : public MenuAlertsViewBase +{ +public: + MenuAlertsView(); + virtual ~MenuAlertsView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setTime(Settings::Alerts::Time::Id id); + void setPositionId(uint16_t id); + uint16_t getPositionId(); + +protected: + using Menu = App::MenuNav::Root::Settings::Alerts; + using Time = App::MenuNav::Root::Settings::Alerts::Time; + + static const uint16_t kBuffSize = 32; + + Time::Id mTimeId = Time::ID_OFF; + + touchgfx::Unicode::UnicodeChar mTimeTipBuff[kBuffSize] {}; + touchgfx::colortype mTimeTipColor {}; + + touchgfx::Callback mUpdateItemCb; + touchgfx::Callback mUpdateCenterItemCb; + + void updateItem(MainMenuItem& item, int16_t index); + void updateCenterItem(MainMenuCenterItem& item, int16_t index); + void formatTips(); + + virtual void handleKeyEvent(uint8_t key) override; +}; + +#endif // MENUALERTSVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menusettings_screen/MenuSettingsPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menusettings_screen/MenuSettingsPresenter.hpp new file mode 100644 index 00000000..390a1e73 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menusettings_screen/MenuSettingsPresenter.hpp @@ -0,0 +1,40 @@ +#ifndef MENUSETTINGSPRESENTER_HPP +#define MENUSETTINGSPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class MenuSettingsView; + +class MenuSettingsPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + MenuSettingsPresenter(MenuSettingsView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~MenuSettingsPresenter() {} + + virtual void onIdleTimeout() override { model->exitApp(); } + + void savePhoneNotif(bool state); + +private: + MenuSettingsPresenter(); + + MenuSettingsView& view; +}; + +#endif // MENUSETTINGSPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menusettings_screen/MenuSettingsView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menusettings_screen/MenuSettingsView.hpp new file mode 100644 index 00000000..4701a3a0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menusettings_screen/MenuSettingsView.hpp @@ -0,0 +1,34 @@ +#ifndef MENUSETTINGSVIEW_HPP +#define MENUSETTINGSVIEW_HPP + +#include +#include +#include + +class MenuSettingsView : public MenuSettingsViewBase +{ +public: + MenuSettingsView(); + virtual ~MenuSettingsView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setPhoneNotif(bool state); + void setPositionId(uint16_t id); + uint16_t getPositionId(); + +protected: + using Menu = App::MenuNav::Root::Settings; + + bool mPhoneNotif = false; + + touchgfx::Callback mUpdateItemCb; + touchgfx::Callback mUpdateCenterItemCb; + + void updateItem(MainMenuItem& item, int16_t index); + void updateCenterItem(MainMenuCenterItem& item, int16_t index); + + virtual void handleKeyEvent(uint8_t key) override; +}; + +#endif // MENUSETTINGSVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutime_screen/MenuTimePresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutime_screen/MenuTimePresenter.hpp new file mode 100644 index 00000000..b62c9178 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutime_screen/MenuTimePresenter.hpp @@ -0,0 +1,40 @@ +#ifndef MENUTIMEPRESENTER_HPP +#define MENUTIMEPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class MenuTimeView; + +class MenuTimePresenter : public touchgfx::Presenter, public ModelListener +{ +public: + MenuTimePresenter(MenuTimeView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~MenuTimePresenter() {} + + virtual void onIdleTimeout() override { model->exitApp(); } + + void saveTime(Settings::Alerts::Time::Id id); + +private: + MenuTimePresenter(); + + MenuTimeView& view; +}; + +#endif // MENUTIMEPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutime_screen/MenuTimeView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutime_screen/MenuTimeView.hpp new file mode 100644 index 00000000..628216d4 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutime_screen/MenuTimeView.hpp @@ -0,0 +1,35 @@ +#ifndef MENUTIMEVIEW_HPP +#define MENUTIMEVIEW_HPP + +#include +#include +#include + +class MenuTimeView : public MenuTimeViewBase +{ +public: + MenuTimeView(); + virtual ~MenuTimeView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setTime(Settings::Alerts::Time::Id id); + +protected: + using Menu = App::MenuNav::Root::Settings::Alerts::Time; + + static const uint16_t kBuffSize = 32; + + touchgfx::Unicode::UnicodeChar mMainBuff[kBuffSize] {}; + touchgfx::Unicode::UnicodeChar mItemBuff[kBuffSize] {}; + + touchgfx::Callback mUpdateItemCb; + touchgfx::Callback mUpdateCenterItemCb; + + void updateItem(MainMenuItem& item, int16_t index); + void updateCenterItem(MainMenuCenterItem& item, int16_t index); + + virtual void handleKeyEvent(uint8_t key) override; +}; + +#endif // MENUTIMEVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutimesaved_screen/MenuTimeSavedPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutimesaved_screen/MenuTimeSavedPresenter.hpp new file mode 100644 index 00000000..cc4d5beb --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutimesaved_screen/MenuTimeSavedPresenter.hpp @@ -0,0 +1,36 @@ +#ifndef MENUTIMESAVEDPRESENTER_HPP +#define MENUTIMESAVEDPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class MenuTimeSavedView; + +class MenuTimeSavedPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + MenuTimeSavedPresenter(MenuTimeSavedView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~MenuTimeSavedPresenter() {} + +private: + MenuTimeSavedPresenter(); + + MenuTimeSavedView& view; +}; + +#endif // MENUTIMESAVEDPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutimesaved_screen/MenuTimeSavedView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutimesaved_screen/MenuTimeSavedView.hpp new file mode 100644 index 00000000..3e2b701d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/menutimesaved_screen/MenuTimeSavedView.hpp @@ -0,0 +1,28 @@ +#ifndef MENUTIMESAVEDVIEW_HPP +#define MENUTIMESAVEDVIEW_HPP + +#include +#include +#include +#include + +class MenuTimeSavedView : public MenuTimeSavedViewBase +{ +public: + MenuTimeSavedView(); + virtual ~MenuTimeSavedView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setTime(Settings::Alerts::Time::Id id); + +private: + using Menu = App::MenuNav::Root::Settings::Alerts::Time; + + void onDismiss(); + + CountdownTimer mDismissTimer; + touchgfx::Callback mDismissCb; +}; + +#endif // MENUTIMESAVEDVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/AppMenu.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/AppMenu.hpp new file mode 100644 index 00000000..b357564a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/AppMenu.hpp @@ -0,0 +1,130 @@ +/** + ****************************************************************************** + * @file AppMenu.hpp + * @date 17-04-2026 + * @author Denys Saienko + * @brief Menu configuration. + ****************************************************************************** + * + ****************************************************************************** + */ + +#ifndef APP_MENU_HPP +#define APP_MENU_HPP + +#include +#include "Settings.hpp" + +// ============================================================================= +// App::MenuNav -- Navigation state with hierarchical position tracking. +// +// Usage in Model: +// App::MenuNav::Nav mMenu {}; +// App::MenuNav::Nav& menu() { return mMenu; } +// +// Usage in Presenter: +// activate() -- view.setPositionId(model->menu().get()); // root level +// view.setPositionId(model->menu().settings.get()); // sub-level +// model->menu().settings.resetChildren(); +// deactivate() -- model->menu().set(view.getPositionId()); +// model->menu().reset(); // full tree reset (e.g. on idle timeout) +// ============================================================================= +namespace App::MenuNav +{ + +// ----------------------------------------------------------------------------- +// Position +// Stores the selected index for one menu level. +// TMenu must expose ID_DEFAULT as an unscoped enum member. +// ----------------------------------------------------------------------------- +template +struct Position { + uint16_t value = static_cast(TMenu::ID_DEFAULT); + + void set(uint16_t v) { value = v; } + uint16_t get() const { return value; } + void reset() { value = static_cast(TMenu::ID_DEFAULT); } +}; + + +// ----------------------------------------------------------------------------- +// Menu descriptors +// Each struct describes one menu screen: +// enum Id -- ordered item list (ID_COUNT and ID_DEFAULT required) +// kValues[] -- optional: domain values mapped 1-to-1 to enum items +// ----------------------------------------------------------------------------- + +struct Root { + enum Id { ID_START = 0, ID_SETTINGS, + ID_COUNT, ID_DEFAULT = ID_START }; + + struct Settings { + enum Id { + ID_ALERTS = 0, ID_PHONE_NOTIF, + ID_COUNT, ID_DEFAULT = ID_ALERTS + }; + + struct Alerts { + enum Id { + ID_TIME = 0, + ID_COUNT, ID_DEFAULT = ID_TIME + }; + + using Time = ::Settings::Alerts::Time; + }; + }; +}; + + +// TrackView is a destination reached from Root::START, but is not nested +// inside Root because TrackAction is always an overlay of TrackView. +// TrackAction is always an overlay of TrackView, so it lives inside it. +struct TrackView { + enum Id { ID_TRACK1 = 0, ID_TRACK2, ID_TRACK3, + ID_COUNT, ID_DEFAULT = ID_TRACK1 }; + + struct Action { + enum Id { ID_RESUME = 0, ID_SUMMARY, ID_SAVE, ID_DISCARD, + ID_COUNT, ID_DEFAULT = ID_RESUME }; + }; +}; + + +// ----------------------------------------------------------------------------- +// Nav +// Hierarchical navigation state. Each node inherits Position to provide +// get() / set() / reset() for its own index, and adds: +// resetChildren() -- resets all direct child nodes to their defaults +// reset() -- resets own position + all children (full subtree) +// +// Leaf nodes are plain Position -- no children, reset() already defined. +// xNav structs are created only for nodes that have children. +// ----------------------------------------------------------------------------- +struct Nav : Position { + + // TrackView node -- Action is a child (entered from any TrackView page) + struct TrackViewNav : Position { + Position action; + + void resetChildren() { action.reset(); } + void reset() { Position::reset(); resetChildren(); } + }; + + // Settings node -- alerts picker is a child + struct SettingsNav : Position { + Position alerts; + + void resetChildren() { alerts.reset(); } + void reset() { Position::reset(); resetChildren(); } + }; + + TrackViewNav track; // TrackView page + nested TrackAction + SettingsNav settings; // Settings menu + nested alerts + + void resetChildren() { track.reset(); settings.reset(); } + void reset() { Position::reset(); resetChildren(); } +}; + +} // namespace App::MenuNav + +#endif // APP_MENU_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/Model.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/Model.hpp new file mode 100644 index 00000000..17086b0c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/Model.hpp @@ -0,0 +1,140 @@ +#ifndef MODEL_HPP +#define MODEL_HPP + +#include "touchgfx/UIEventListener.hpp" + +#include +#include + +#include "SDK/Kernel/Kernel.hpp" +#include "SDK/Interfaces/IGuiLifeCycleCallback.hpp" +#include "SDK/Interfaces/ICustomMessageHandler.hpp" +#include +#include +#include +#include + +#include "Commands.hpp" +#include "Settings.hpp" +#include "ActivitySummary.hpp" +#include "Track.hpp" +#include "AppMenu.hpp" + + +// --------------------------------------------------------------------------- +// App::Config -- application-level constants (timing, frame rate). +// Screens include this transitively via Presenter -> ModelListener -> Model.hpp. +// --------------------------------------------------------------------------- +namespace App::Config +{ +constexpr uint32_t kFrameRate = SDK::GUI::Config::kFrameRate; + +constexpr uint32_t kMenuAnimationSteps = 4; +constexpr uint32_t kScreenTimeoutSteps = SDK::Utils::secToTicks(30, kFrameRate); // 30 s + +// HR thresholds +constexpr uint8_t kHrThresholdsCount = CustomMessage::kHrThresholdsCount; +} // namespace App::Config + +// --------------------------------------------------------------------------- +// App::Display -- minimum valid values for on-screen display. +// Below these thresholds the widget shows "---" instead of a number. +// --------------------------------------------------------------------------- +namespace App::Display +{ +constexpr float kMinDist = 0.0f; ///< km or mi -- negative = no data +constexpr float kMinPace = 30.0f; ///< sec/km or sec/mi -- below any human running pace +constexpr float kMinHR = 20.0f; ///< bpm -- below physiological minimum +} // namespace App::Display + + +class FrontendApplication; +class ModelListener; + +class Model : public touchgfx::UIEventListener, + public SDK::Interface::IGuiLifeCycleCallback, + public SDK::Interface::ICustomMessageHandler +{ +public: + Model(); + + void bind(ModelListener* listener) { modelListener = listener; } + + // Controls + FrontendApplication& application(); + App::MenuNav::Nav& menu(); + void tick(); + void handleKeyEvent(uint8_t key); + void invalidate(); + void resetIdleTimer(); + void exitApp(); + + // Date/Time + void getDate(uint8_t& month, uint8_t& day, uint8_t& weekday); + void getTime(uint8_t& h, uint8_t& m, uint8_t& s); + + // Power + uint8_t getBatteryLevel() const; + + // Settings + bool isUnitsImperial() const; + const uint8_t* getHrThresholds() const; + uint8_t getHrThresholdsCount() const; + const Settings& getSettings() const; + void saveSettings(const Settings& sett); + + // Track + void trackStart(); + bool isTrackActive() const; + void trackPause(); + void trackResume(); + bool isTrackPaused() const; + const Track::Data& getTrackData() const; + void saveLap(); + void saveTrack(); + void discardTrack(); + bool isTrackSummaryAvailable() const; + const ActivitySummary& getTrackSummary() const; + +private: + // Fields required for GUI <-> Service communication + ModelListener* modelListener; + const SDK::Kernel& mKernel; + CustomMessage::Sender mSrvSender; + + // IGuiLifeCycleCallback + void onStart() override; + void onResume() override; + void onSuspend() override; + void onStop() override; + + // ICustomMessageHandler + bool customMessageHandler(SDK::MessageBase* message) override; + + void decIdleTimer(); + bool isAnyKeyPressed(uint8_t key) const; + + // State + bool mIsRunning = false; + bool mInvalidate = false; + uint32_t mIdleTimer = 0; + + App::MenuNav::Nav mMenu {}; + std::tm mTime {}; + + // Settings (mirrored from Service) + bool mUnitsImperial = false; + uint8_t mHrThresholds[App::Config::kHrThresholdsCount] = {}; + uint8_t mHrThresholdsCount = App::Config::kHrThresholdsCount; + Settings mSettings {}; + + // Kernel state + uint8_t mBatteryLevel = 0; + + // Track + Track::State mTrackState {}; + const ActivitySummary* mActivitySummary = nullptr; + Track::Data mTrackData {}; +}; + +#endif // MODEL_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/ModelListener.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/ModelListener.hpp new file mode 100644 index 00000000..bf87d6e2 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/model/ModelListener.hpp @@ -0,0 +1,37 @@ +#ifndef MODELLISTENER_HPP +#define MODELLISTENER_HPP + +#include +#include + +class ModelListener +{ +public: + ModelListener() : model(0) {} + + virtual ~ModelListener() {} + + void bind(Model* m) + { + model = m; + } + + + virtual void onIdleTimeout() {} + virtual void onBatteryLevel(uint8_t level) {} + virtual void onDate(uint16_t year, uint8_t month, uint8_t day, uint8_t wday) {} + virtual void onTime(uint8_t hour, uint8_t minute, uint8_t sec) {} + virtual void onSettings(const Settings& settings) {} + virtual void onTrackState(const Track::State& state) {} + virtual void onTrackData(const Track::Data& data) {} + virtual void onLapChanged(uint8_t lapEnd) {} + virtual void onActivitySummary(const ActivitySummary& summary) {} + + +protected: + Model* model; + + +}; + +#endif // MODELLISTENER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/track_screen/TrackPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/track_screen/TrackPresenter.hpp new file mode 100644 index 00000000..54102307 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/track_screen/TrackPresenter.hpp @@ -0,0 +1,43 @@ +#ifndef TRACKPRESENTER_HPP +#define TRACKPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackView; + +class TrackPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackPresenter(TrackView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackPresenter() {} + + virtual void onTrackData(const Track::Data& data) override; + virtual void onBatteryLevel(uint8_t lvl) override; + virtual void onTime(uint8_t hour, uint8_t minute, uint8_t sec) override; + virtual void onLapChanged(uint8_t lapEnd) override; + + void saveLap(); + +private: + TrackPresenter(); + + TrackView& view; +}; + +#endif // TRACKPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/track_screen/TrackView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/track_screen/TrackView.hpp new file mode 100644 index 00000000..bc10c6e7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/track_screen/TrackView.hpp @@ -0,0 +1,34 @@ +#ifndef TRACKVIEW_HPP +#define TRACKVIEW_HPP + +#include +#include + +class TrackView : public TrackViewBase +{ +public: + TrackView(); + virtual ~TrackView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setPositionId(uint16_t id); + uint16_t getPositionId(); + + void setConfig(bool isImperial, const uint8_t* thresholds, uint8_t thresholdCount); + void setTrackData(const Track::Data& data); + + void setTime(uint8_t h, uint8_t m); + void setBatteryLevel(uint8_t level); + +protected: + + virtual void handleKeyEvent(uint8_t key) override; + + uint16_t mCurrentFaceId = 0; + bool mIsImperial = false; + uint8_t mHrThresholds[App::Config::kHrThresholdsCount] = {}; + uint8_t mHrThresholdCount = 0; +}; + +#endif // TRACKVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackaction_screen/TrackActionPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackaction_screen/TrackActionPresenter.hpp new file mode 100644 index 00000000..5f4d8c49 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackaction_screen/TrackActionPresenter.hpp @@ -0,0 +1,40 @@ +#ifndef TRACKACTIONPRESENTER_HPP +#define TRACKACTIONPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackActionView; + +class TrackActionPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackActionPresenter(TrackActionView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackActionPresenter() {} + + virtual void onTrackData(const Track::Data& data) override; + + void resumeTrack(); + +private: + TrackActionPresenter(); + + TrackActionView& view; +}; + +#endif // TRACKACTIONPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackaction_screen/TrackActionView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackaction_screen/TrackActionView.hpp new file mode 100644 index 00000000..db047bdd --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackaction_screen/TrackActionView.hpp @@ -0,0 +1,44 @@ +#ifndef TRACKACTIONVIEW_HPP +#define TRACKACTIONVIEW_HPP + +#include +#include +#include + +class TrackActionView : public TrackActionViewBase +{ +public: + TrackActionView(); + virtual ~TrackActionView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setPositionId(uint16_t id); + uint16_t getPositionId(); + void setUnitsImperial(bool isImperial); + void setTimer(std::time_t sec); + void setCalories(float calories); + void setAvgHR(float hr); + +protected: + using Menu = App::MenuNav::TrackView::Action; + + bool mIsImperial = false; + + float mCalories = 0.0f; + float mAvgHr = 0.0f; + + ItemLayout mItemLayout {}; + + touchgfx::Callback mUpdateItemCb; + touchgfx::Callback mUpdateCenterItemCb; + touchgfx::Callback mCarouselCb; + + void updateItem(MainMenuItem& item, int16_t index); + void updateCenterItem(MainMenuCenterItem& item, int16_t index); + void onCarouselUpdate(int16_t index); + + virtual void handleKeyEvent(uint8_t key) override; +}; + +#endif // TRACKACTIONVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscardconfirmation_screen/TrackDiscardConfirmationPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscardconfirmation_screen/TrackDiscardConfirmationPresenter.hpp new file mode 100644 index 00000000..ba578e50 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscardconfirmation_screen/TrackDiscardConfirmationPresenter.hpp @@ -0,0 +1,38 @@ +#ifndef TRACKDISCARDCONFIRMATIONPRESENTER_HPP +#define TRACKDISCARDCONFIRMATIONPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackDiscardConfirmationView; + +class TrackDiscardConfirmationPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackDiscardConfirmationPresenter(TrackDiscardConfirmationView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackDiscardConfirmationPresenter() {} + + virtual void onIdleTimeout() override { model->application().gotoTrackActionScreenNoTransition(); } + +private: + TrackDiscardConfirmationPresenter(); + + TrackDiscardConfirmationView& view; +}; + +#endif // TRACKDISCARDCONFIRMATIONPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscardconfirmation_screen/TrackDiscardConfirmationView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscardconfirmation_screen/TrackDiscardConfirmationView.hpp new file mode 100644 index 00000000..ca60bcec --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscardconfirmation_screen/TrackDiscardConfirmationView.hpp @@ -0,0 +1,18 @@ +#ifndef TRACKDISCARDCONFIRMATIONVIEW_HPP +#define TRACKDISCARDCONFIRMATIONVIEW_HPP + +#include +#include + +class TrackDiscardConfirmationView : public TrackDiscardConfirmationViewBase +{ +public: + TrackDiscardConfirmationView(); + virtual ~TrackDiscardConfirmationView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); +protected: + virtual void handleKeyEvent(uint8_t key) override; +}; + +#endif // TRACKDISCARDCONFIRMATIONVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscarded_screen/TrackDiscardedPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscarded_screen/TrackDiscardedPresenter.hpp new file mode 100644 index 00000000..3eddf3f4 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscarded_screen/TrackDiscardedPresenter.hpp @@ -0,0 +1,38 @@ +#ifndef TRACKDISCARDEDPRESENTER_HPP +#define TRACKDISCARDEDPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackDiscardedView; + +class TrackDiscardedPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackDiscardedPresenter(TrackDiscardedView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackDiscardedPresenter() {} + + void exitApp(); + +private: + TrackDiscardedPresenter(); + + TrackDiscardedView& view; +}; + +#endif // TRACKDISCARDEDPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscarded_screen/TrackDiscardedView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscarded_screen/TrackDiscardedView.hpp new file mode 100644 index 00000000..5d5c890f --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackdiscarded_screen/TrackDiscardedView.hpp @@ -0,0 +1,24 @@ +#ifndef TRACKDISCARDEDVIEW_HPP +#define TRACKDISCARDEDVIEW_HPP + +#include +#include +#include +#include + +class TrackDiscardedView : public TrackDiscardedViewBase +{ +public: + TrackDiscardedView(); + virtual ~TrackDiscardedView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + +private: + void onDismiss(); + + CountdownTimer mDismissTimer; + touchgfx::Callback mDismissCb; +}; + +#endif // TRACKDISCARDEDVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracklap_screen/TrackLapPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracklap_screen/TrackLapPresenter.hpp new file mode 100644 index 00000000..86fd6cae --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracklap_screen/TrackLapPresenter.hpp @@ -0,0 +1,36 @@ +#ifndef TRACKLAPPRESENTER_HPP +#define TRACKLAPPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackLapView; + +class TrackLapPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackLapPresenter(TrackLapView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackLapPresenter() {} + +private: + TrackLapPresenter(); + + TrackLapView& view; +}; + +#endif // TRACKLAPPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracklap_screen/TrackLapView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracklap_screen/TrackLapView.hpp new file mode 100644 index 00000000..6605000e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracklap_screen/TrackLapView.hpp @@ -0,0 +1,35 @@ +#ifndef TRACKLAPVIEW_HPP +#define TRACKLAPVIEW_HPP + +#include +#include +#include +#include + +class TrackLapView : public TrackLapViewBase +{ +public: + TrackLapView(); + virtual ~TrackLapView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setUnitsImperial(bool isImperial); + void setLapNum(uint32_t n); + void setLapCalories(float calories); + void setTimer(std::time_t sec); + void setAvgLapHR(float hr); + +protected: + virtual void handleKeyEvent(uint8_t key) override; + +private: + void onDismiss(); + + bool mIsImperial = false; + + CountdownTimer mDismissTimer; + touchgfx::Callback mDismissCb; +}; + +#endif // TRACKLAPVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksaved_screen/TrackSavedPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksaved_screen/TrackSavedPresenter.hpp new file mode 100644 index 00000000..fa168565 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksaved_screen/TrackSavedPresenter.hpp @@ -0,0 +1,36 @@ +#ifndef TRACKSAVEDPRESENTER_HPP +#define TRACKSAVEDPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackSavedView; + +class TrackSavedPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackSavedPresenter(TrackSavedView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackSavedPresenter() {} + +private: + TrackSavedPresenter(); + + TrackSavedView& view; +}; + +#endif // TRACKSAVEDPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksaved_screen/TrackSavedView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksaved_screen/TrackSavedView.hpp new file mode 100644 index 00000000..9e16f5e5 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksaved_screen/TrackSavedView.hpp @@ -0,0 +1,24 @@ +#ifndef TRACKSAVEDVIEW_HPP +#define TRACKSAVEDVIEW_HPP + +#include +#include +#include +#include + +class TrackSavedView : public TrackSavedViewBase +{ +public: + TrackSavedView(); + virtual ~TrackSavedView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + +private: + void onDismiss(); + + CountdownTimer mDismissTimer; + touchgfx::Callback mDismissCb; +}; + +#endif // TRACKSAVEDVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackstartconfirmation_screen/TrackStartConfirmationPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackstartconfirmation_screen/TrackStartConfirmationPresenter.hpp new file mode 100644 index 00000000..ce8adf79 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackstartconfirmation_screen/TrackStartConfirmationPresenter.hpp @@ -0,0 +1,39 @@ +#ifndef TRACKSTARTCONFIRMATIONPRESENTER_HPP +#define TRACKSTARTCONFIRMATIONPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackStartConfirmationView; + +class TrackStartConfirmationPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackStartConfirmationPresenter(TrackStartConfirmationView& v); + + /** + * The activate function is called automatically when this screen is "switched in" + * (ie. made active). Initialization logic can be placed here. + */ + virtual void activate(); + + /** + * The deactivate function is called automatically when this screen is "switched out" + * (ie. made inactive). Teardown functionality can be placed here. + */ + virtual void deactivate(); + + virtual ~TrackStartConfirmationPresenter() {} + + virtual void onIdleTimeout() override; + void startTrack(); + +private: + TrackStartConfirmationPresenter(); + + TrackStartConfirmationView& view; +}; + +#endif // TRACKSTARTCONFIRMATIONPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackstartconfirmation_screen/TrackStartConfirmationView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackstartconfirmation_screen/TrackStartConfirmationView.hpp new file mode 100644 index 00000000..633efbb6 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/trackstartconfirmation_screen/TrackStartConfirmationView.hpp @@ -0,0 +1,18 @@ +#ifndef TRACKSTARTCONFIRMATIONVIEW_HPP +#define TRACKSTARTCONFIRMATIONVIEW_HPP + +#include +#include + +class TrackStartConfirmationView : public TrackStartConfirmationViewBase +{ +public: + TrackStartConfirmationView(); + virtual ~TrackStartConfirmationView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); +protected: + virtual void handleKeyEvent(uint8_t key) override; +}; + +#endif // TRACKSTARTCONFIRMATIONVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksummary_screen/TrackSummaryPresenter.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksummary_screen/TrackSummaryPresenter.hpp new file mode 100644 index 00000000..d9749280 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksummary_screen/TrackSummaryPresenter.hpp @@ -0,0 +1,35 @@ +#ifndef TRACKSUMMARYPRESENTER_HPP +#define TRACKSUMMARYPRESENTER_HPP + +#include +#include + +using namespace touchgfx; + +class TrackSummaryView; + +class TrackSummaryPresenter : public touchgfx::Presenter, public ModelListener +{ +public: + TrackSummaryPresenter(TrackSummaryView& v); + + virtual void activate(); + virtual void deactivate(); + + virtual ~TrackSummaryPresenter() {} + + void exitApp(); + + /** + * @brief Called when R1 is pressed. + * Returns to TrackAction screen if track is paused, otherwise exits the app. + */ + void backToTrack(); + +private: + TrackSummaryPresenter(); + + TrackSummaryView& view; +}; + +#endif // TRACKSUMMARYPRESENTER_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksummary_screen/TrackSummaryView.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksummary_screen/TrackSummaryView.hpp new file mode 100644 index 00000000..5160b859 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/include/gui/tracksummary_screen/TrackSummaryView.hpp @@ -0,0 +1,36 @@ +#ifndef TRACKSUMMARYVIEW_HPP +#define TRACKSUMMARYVIEW_HPP + +#include +#include +#include +#include "ActivitySummary.hpp" + +class TrackSummaryView : public TrackSummaryViewBase +{ +public: + TrackSummaryView(); + virtual ~TrackSummaryView() {} + virtual void setupScreen(); + virtual void tearDownScreen(); + + void setSummary(const ActivitySummary& s, bool isPaused); + +protected: + enum Face : uint8_t { + FACE_OVERVIEW = 0, + FACE_CALORIES = 1, + FACE_ZONES = 2, + FACE_LAPS = 3, + }; + + uint8_t mCurrentFace = FACE_OVERVIEW; + bool mTrackIsPaused = false; + uint8_t mLapsPageCount = 0; + + virtual void handleKeyEvent(uint8_t key) override; + void updateFace(); + void updateScrollIndicator(); +}; + +#endif // TRACKSUMMARYVIEW_HPP diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/common/FrontendApplication.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/common/FrontendApplication.cpp new file mode 100644 index 00000000..5875945a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/common/FrontendApplication.cpp @@ -0,0 +1,7 @@ +#include + +FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap) + : FrontendApplicationBase(m, heap) +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Battery.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Battery.cpp new file mode 100644 index 00000000..382542e4 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Battery.cpp @@ -0,0 +1,67 @@ +#include + +// ----------------------------------------------------------------------------- +// Segment colors +// ----------------------------------------------------------------------------- +static constexpr uint32_t kColorInactive = 0x404040u; +static constexpr uint32_t kColorActive = 0x008080u; +static constexpr uint32_t kColorLow = 0xC00000u; + +// ----------------------------------------------------------------------------- +Battery::Battery() +{ +} + +void Battery::initialize() +{ + BatteryBase::initialize(); +} + +// ----------------------------------------------------------------------------- +// Private helpers +// ----------------------------------------------------------------------------- + +void Battery::setSegment(touchgfx::Box& box, + touchgfx::Line& line1, touchgfx::PainterABGR2222& p1, + touchgfx::Line& line2, touchgfx::PainterABGR2222& p2, + touchgfx::colortype color) +{ + box.setColor(color); + p1.setColor(color); + p2.setColor(color); + box.invalidate(); + line1.invalidate(); + line2.invalidate(); +} + +void Battery::setSegment4(touchgfx::colortype color) +{ + s4box.setColor(color); + s4line1Painter.setColor(color); + s4line2Painter.setColor(color); + s4line3Painter.setColor(color); + s4box.invalidate(); + s4line1.invalidate(); + s4line2.invalidate(); + s4line3.invalidate(); +} + +// ----------------------------------------------------------------------------- +// Public API +// ----------------------------------------------------------------------------- + +void Battery::setLevel(uint8_t level) +{ + // s1: red at 1-24 %, inactive at 0 % + const touchgfx::colortype c1 = (level == 0) ? kColorInactive : + (level < 25) ? kColorLow : kColorActive; + setSegment(s1box, s1line1, s1line1Painter, s1line2, s1line2Painter, c1); + + setSegment(s2box, s2line1, s2line1Painter, s2line2, s2line2Painter, + level >= 25 ? kColorActive : kColorInactive); + + setSegment(s3box, s3line1, s3line1Painter, s3line2, s3line2Painter, + level >= 50 ? kColorActive : kColorInactive); + + setSegment4(level >= 75 ? kColorActive : kColorInactive); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Buttons.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Buttons.cpp new file mode 100644 index 00000000..1d26ec72 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Buttons.cpp @@ -0,0 +1,41 @@ +#include +#include + +Buttons::Buttons() +{ +} + +void Buttons::initialize() +{ + ButtonsBase::initialize(); +} + +// --------------------------------------------------------------------------- + +touchgfx::colortype Buttons::toColortype(Color color) +{ + switch (color) { + case WHITE: return touchgfx::Color::getColorFromRGB(192, 192, 192); + case AMBER: return touchgfx::Color::getColorFromRGB(192, 128, 0); + case RED: return touchgfx::Color::getColorFromRGB(192, 0, 0); + default: return 0; + } +} + +void Buttons::applyColor(touchgfx::Circle& arc, + touchgfx::PainterABGR2222& painter, + Color color) +{ + arc.setVisible(color != NONE); + if (color != NONE) { + painter.setColor(toColortype(color)); + } + arc.invalidate(); +} + +// --------------------------------------------------------------------------- + +void Buttons::setL1(Color color) { applyColor(bL1, bL1Painter, color); } +void Buttons::setL2(Color color) { applyColor(bL2, bL2Painter, color); } +void Buttons::setR1(Color color) { applyColor(bR1, bR1Painter, color); } +void Buttons::setR2(Color color) { applyColor(bR2, bR2Painter, color); } diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/CountdownTimer.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/CountdownTimer.cpp new file mode 100644 index 00000000..cd2ecc5a --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/CountdownTimer.cpp @@ -0,0 +1,76 @@ +#include +#include + +CountdownTimer::CountdownTimer() +{ +} + +CountdownTimer::~CountdownTimer() +{ + unregisterTimer(); +} + +// ---- Configuration --------------------------------------------------------- + +void CountdownTimer::setDuration(uint16_t ticks) +{ + mDuration = ticks; +} + +void CountdownTimer::setCallback(touchgfx::GenericCallback<>& cb) +{ + mpCb = &cb; +} + +// ---- Control --------------------------------------------------------------- + +void CountdownTimer::start() +{ + mCounter = mDuration; + registerTimer(); +} + +void CountdownTimer::stop() +{ + unregisterTimer(); +} + +void CountdownTimer::reset() +{ + mCounter = mDuration; + // Timer stays registered -- no unregister/register cycle needed. +} + +// ---- Tick ------------------------------------------------------------------ + +void CountdownTimer::handleTickEvent() +{ + if (mCounter == 0) { + return; + } + + if (--mCounter == 0) { + unregisterTimer(); + if (mpCb != nullptr && mpCb->isValid()) { + mpCb->execute(); + } + } +} + +// ---- Private --------------------------------------------------------------- + +void CountdownTimer::registerTimer() +{ + if (!mRegistered) { + touchgfx::Application::getInstance()->registerTimerWidget(this); + mRegistered = true; + } +} + +void CountdownTimer::unregisterTimer() +{ + if (mRegistered) { + touchgfx::Application::getInstance()->unregisterTimerWidget(this); + mRegistered = false; + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/HeartRateZone.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/HeartRateZone.cpp new file mode 100644 index 00000000..bd137afa --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/HeartRateZone.cpp @@ -0,0 +1,45 @@ +#include + +HeartRateZone::HeartRateZone() + : mZones{&hr1, &hr2, &hr3, &hr4, &hr5} +{ +} + +void HeartRateZone::initialize() +{ + HeartRateZoneBase::initialize(); +} + +void HeartRateZone::setHR(float hr, const uint8_t* thresholds, uint8_t thresholdCount) +{ + if (thresholds == nullptr || thresholdCount == 0) { + return; + } + + if (thresholdCount > kZoneCount) { + thresholdCount = kZoneCount; + } + + for (touchgfx::Image* zone : mZones) { + zone->setVisible(false); + } + + // Walk thresholds from highest to lowest; the first threshold that hr exceeds + // determines the active zone. activeZone starts at the top and decrements + // until a matching threshold is found (or goes negative -- no zone shown). + int activeZone = kZoneCount - 1; + for (int i = thresholdCount - 1; i >= 0; --i) { + if (hr > thresholds[i]) { + break; + } + --activeZone; + } + + if (activeZone >= 0) { + mZones[activeZone]->setVisible(true); + } + + for (touchgfx::Image* zone : mZones) { + zone->invalidate(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/InfoCarousel.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/InfoCarousel.cpp new file mode 100644 index 00000000..2502d835 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/InfoCarousel.cpp @@ -0,0 +1,108 @@ +#include +#include + +InfoCarousel::InfoCarousel() +{ +} + +InfoCarousel::~InfoCarousel() +{ + unregisterTimer(); +} + +void InfoCarousel::initialize() +{ + InfoCarouselBase::initialize(); +} + +// ---- Private helpers ------------------------------------------------------- + +void InfoCarousel::registerTimer() +{ + if (!mRegistered) { + touchgfx::Application::getInstance()->registerTimerWidget(this); + mRegistered = true; + } +} + +void InfoCarousel::unregisterTimer() +{ + if (mRegistered) { + touchgfx::Application::getInstance()->unregisterTimerWidget(this); + mRegistered = false; + } +} + +void InfoCarousel::fireCallback() +{ + if (mpUpdateCb != nullptr && mpUpdateCb->isValid()) { + mpUpdateCb->execute(static_cast(mIndex)); + } +} + +// ---- Cycling control ------------------------------------------------------- + +void InfoCarousel::setCount(uint16_t count) +{ + mCount = count; + + if (mCount > 1) { + registerTimer(); + } else { + unregisterTimer(); + } + + mIndex = 0; + mTick = mPeriod; + fireCallback(); +} + +void InfoCarousel::setPeriod(uint16_t ticks) +{ + mPeriod = (ticks > 0) ? ticks : 1; + mTick = mPeriod; +} + +void InfoCarousel::setUpdateCallback(touchgfx::GenericCallback& cb) +{ + mpUpdateCb = &cb; +} + +void InfoCarousel::refresh() +{ + fireCallback(); +} + +// ---- Content --------------------------------------------------------------- + +void InfoCarousel::setTitle(TypedTextId msgId) +{ + Unicode::snprintf(titleTextBuffer, TITLETEXT_SIZE, "%s", + touchgfx::TypedText(msgId).getText()); + titleText.invalidate(); +} + +void InfoCarousel::setValue(const touchgfx::Unicode::UnicodeChar* messageText) +{ + if (messageText != nullptr) { + Unicode::snprintf(dataValueBuffer, DATAVALUE_SIZE, "%s", messageText); + dataValue.setVisible(true); + } else { + dataValue.setVisible(false); + } + dataValue.invalidate(); +} + +// ---- Timer ----------------------------------------------------------------- + +void InfoCarousel::handleTickEvent() +{ + if (mTick > 0) { + --mTick; + return; + } + + mTick = mPeriod; + mIndex = (mIndex + 1) % mCount; + fireCallback(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/LapListItem.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/LapListItem.cpp new file mode 100644 index 00000000..6ed377d8 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/LapListItem.cpp @@ -0,0 +1,34 @@ +#include + +LapListItem::LapListItem() +{ +} + +void LapListItem::initialize() +{ + LapListItemBase::initialize(); +} + +void LapListItem::setIndex(const touchgfx::Unicode::UnicodeChar* text) +{ + Unicode::strncpy(indexTextBuffer, text, INDEXTEXT_SIZE); + indexText.invalidate(); +} + +void LapListItem::setTime(const touchgfx::Unicode::UnicodeChar* text) +{ + Unicode::strncpy(timeTextBuffer, text, TIMETEXT_SIZE); + timeText.invalidate(); +} + +void LapListItem::setAvgHR(const touchgfx::Unicode::UnicodeChar* text) +{ + Unicode::strncpy(avgHRTextBuffer, text, AVGHRTEXT_SIZE); + avgHRText.invalidate(); +} + +void LapListItem::setMaxHR(const touchgfx::Unicode::UnicodeChar* text) +{ + Unicode::strncpy(maxHRTextBuffer, text, MAXHRTEXT_SIZE); + maxHRText.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenu.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenu.cpp new file mode 100644 index 00000000..89c89a0d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenu.cpp @@ -0,0 +1,172 @@ +#include +#include + +MainMenu::MainMenu() : + mWheelAnimationEndCb(this, &MainMenu::onWheelAnimationEnded) +{ +} + +void MainMenu::initialize() +{ + MainMenuBase::initialize(); + wheel.setAnimationEndedCallback(mWheelAnimationEndCb); + touchgfx::Application::getInstance()->registerTimerWidget(this); +} + +void MainMenu::invalidate() +{ + for (int i = 0; i < wheel.getNumberOfItems(); i++) { + wheel.itemChanged(i); + } + wheel.invalidate(); +} + +void MainMenu::setNumberOfItems(int16_t numberOfItems) +{ + wheel.setNumberOfItems(numberOfItems); + scrollIndicator.setCount(numberOfItems); + if (numberOfItems == 1) { + wheel.setCircular(false); + scrollIndicator.setVisible(false); + } +} + +int16_t MainMenu::getNumberOfItems() +{ + return wheel.getNumberOfItems(); +} + +void MainMenu::selectNext() +{ + if (wheel.getNumberOfItems() <= 1) { + return; + } + + int16_t targetId = static_cast(wheel.getSelectedItem()) + 1; + wheel.animateToItem(targetId, mAnimSteps); + mAnimTargetItem = static_cast(wheel.getSelectedItem()); // actual index after wrap + mAnimCountdown = mAnimSteps; + + scrollIndicator.animateToId(targetId, mAnimSteps); // virtual id for correct wrap direction +} + +void MainMenu::selectPrev() +{ + if (wheel.getNumberOfItems() <= 1) { + return; + } + + int16_t targetId = static_cast(wheel.getSelectedItem()) - 1; + wheel.animateToItem(targetId, mAnimSteps); + mAnimTargetItem = static_cast(wheel.getSelectedItem()); // actual index after wrap + mAnimCountdown = mAnimSteps; + + scrollIndicator.animateToId(targetId, mAnimSteps); // virtual id for correct wrap direction +} + +void MainMenu::selectItem(int16_t itemIndex) +{ + if (wheel.getNumberOfItems() <= 1) { + return; + } + + // Instant jump -- no animation, no mid callback + wheel.animateToItem(itemIndex, 0); + scrollIndicator.setActiveId(wheel.getSelectedItem()); +} + +uint16_t MainMenu::getSelectedItem() +{ + return wheel.getSelectedItem(); +} + +touchgfx::ScrollWheelWithSelectionStyle &MainMenu::getWheel() +{ + return wheel; +} + +void MainMenu::setUpdateItemCallback( + touchgfx::GenericCallback &cb) +{ + mpUpdateItemCb = &cb; +} + +void MainMenu::setUpdateCenterItemCallback( + touchgfx::GenericCallback &cb) +{ + mpUpdateCenterItemCb = &cb; +} + +void MainMenu::setAnimationMiddleCallback( + touchgfx::GenericCallback &cb) +{ + mpAnimationMiddleCb = &cb; +} + +void MainMenu::setAnimationEndedCallback( + touchgfx::GenericCallback &cb) +{ + mpAnimationEndedCb = &cb; +} + +void MainMenu::setAnimationSteps(int16_t steps) +{ + mAnimSteps = steps; +} + +void MainMenu::setCenterItemLayout(const CenterItemLayout &layout) +{ + mCenterItemLayout = layout; + + for (int i = 0; i < wheelSelectedListItems.getNumberOfDrawables(); i++) { + wheelSelectedListItems[i].setLayout(mCenterItemLayout); + } +} + +void MainMenu::setItemLayout(const ItemLayout &layout) +{ + mItemLayout = layout; + + for (int i = 0; i < wheelListItems.getNumberOfDrawables(); i++) { + wheelListItems[i].setLayout(mItemLayout); + } +} + +void MainMenu::wheelUpdateItem(MainMenuItem &item, int16_t itemIndex) +{ + if (mpUpdateItemCb != nullptr && mpUpdateItemCb->isValid()) { + mpUpdateItemCb->execute(item, itemIndex); + } +} + +void MainMenu::wheelUpdateCenterItem(MainMenuCenterItem &item, int16_t itemIndex) +{ + if (mpUpdateCenterItemCb != nullptr && mpUpdateCenterItemCb->isValid()) { + mpUpdateCenterItemCb->execute(item, itemIndex); + } +} + +void MainMenu::handleTickEvent() +{ + if (mAnimCountdown <= 0) { + return; + } + + mAnimCountdown--; + + // Fire middle callback at the halfway point of the animation + if (mAnimCountdown == mAnimSteps / 2) { + if (mpAnimationMiddleCb != nullptr && mpAnimationMiddleCb->isValid()) { + mpAnimationMiddleCb->execute(mAnimTargetItem); + } + } +} + +void MainMenu::onWheelAnimationEnded() +{ + mAnimCountdown = 0; + + if (mpAnimationEndedCb != nullptr && mpAnimationEndedCb->isValid()) { + mpAnimationEndedCb->execute(static_cast(wheel.getSelectedItem())); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuBackground.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuBackground.cpp new file mode 100644 index 00000000..30da6764 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuBackground.cpp @@ -0,0 +1,16 @@ +#include + +MainMenuBackground::MainMenuBackground() +{ +} + +void MainMenuBackground::initialize() +{ + MainMenuBackgroundBase::initialize(); +} + +void MainMenuBackground::setColor(touchgfx::colortype color) +{ + circlePainter.setColor(color); + circle.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuCenterItem.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuCenterItem.cpp new file mode 100644 index 00000000..cb4b892c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuCenterItem.cpp @@ -0,0 +1,143 @@ +#include +#include + +MainMenuCenterItem::MainMenuCenterItem() +{ +} + +void MainMenuCenterItem::initialize() +{ + MainMenuCenterItemBase::initialize(); + // Capture the Designer-configured styles so we can restore them when + // MenuItemConfig leaves msgIdType / tipIdType as TYPED_TEXT_INVALID. + mDefaultMsgType = labelText.getTypedText().getId(); + mDefaultTipType = tipText.getTypedText().getId(); + if (mDefaultTipType == TYPED_TEXT_INVALID) { + mDefaultTipType = mDefaultMsgType; // fallback: ensure resizeHeightToCurrentText() works + } +} + +void MainMenuCenterItem::setLayout(const CenterItemLayout &layout) +{ + mpLayout = &layout; +} + +const CenterItemLayout &MainMenuCenterItem::activeLayout(const MenuItemConfig &cfg) const +{ + if (cfg.centerLayout != nullptr) { return *cfg.centerLayout; } + if (mpLayout != nullptr) { return *mpLayout; } + static const CenterItemLayout sDefault; + return sDefault; +} + +void MainMenuCenterItem::apply(const MenuItemConfig &cfg) +{ + const CenterItemLayout &layout = activeLayout(cfg); + + const TypedTextId msgType = (cfg.msgIdType != TYPED_TEXT_INVALID) + ? cfg.msgIdType : mDefaultMsgType; + const TypedTextId tipType = (cfg.tipIdType != TYPED_TEXT_INVALID) + ? cfg.tipIdType : mDefaultTipType; + + MenuItemRenderer::applyText(labelText, labelTextBuffer, LABELTEXT_SIZE, + cfg.msgId, msgType, cfg.msgText, cfg.msgChar); + + MenuItemRenderer::applyTip(tipText, tipTextBuffer, TIPTEXT_SIZE, + cfg.tipId, tipType, cfg.tipText, cfg.tipColor, cfg.tipChar); + + switch (cfg.style) { + case MenuItemConfig::ICON: + MenuItemRenderer::applyStaticIcon(icon, cfg.iconId); + break; + case MenuItemConfig::ICON_EXT: + MenuItemRenderer::applyDynamicIcon(icon, mDynamicIconId, + cfg.extIcon, layout.icon.w, layout.icon.h); + break; + default: + break; + } + + renderStyle(cfg, layout); +} + +void MainMenuCenterItem::renderStyle(const MenuItemConfig &cfg, + const CenterItemLayout &layout) +{ + // Reset all optional widgets to Designer defaults before applying the active style. + // This prevents stale geometry (height/Y set by a previous style) from leaking + // into the current render -- especially important when containers are reused by + // the scroll wheel. + labelText.setVisible(true); + tipText.setVisible(false); + icon.setVisible(false); + toggle.setVisible(false); + + switch (cfg.style) { + case MenuItemConfig::SIMPLE: + labelText.setWidth(getWidth()); + labelText.setX(0); + MenuItemRenderer::centerTextY(labelText, getHeight()); + break; + + case MenuItemConfig::TOGGLE: + labelText.setWidth(layout.toggle.textW); + labelText.setX(layout.toggle.textX); + MenuItemRenderer::centerTextY(labelText, getHeight()); + toggle.setX(layout.toggle.x); + toggle.setY((getHeight() - toggle.getHeight()) / 2); + toggle.setState(cfg.toggleState); + toggle.setVisible(true); + break; + + case MenuItemConfig::TIP: { + const int16_t half = getHeight() / 2; + + labelText.setWidth(getWidth()); + labelText.setX(0); + labelText.resizeHeightToCurrentText(); + labelText.setY((half - labelText.getHeight()) / 2 + layout.tip.msgOffsetY); + + tipText.setWidth(getWidth()); + tipText.setX(0); + tipText.resizeHeightToCurrentText(); + tipText.setY(half + (half - tipText.getHeight()) / 2 + layout.tip.hintOffsetY); + tipText.setVisible(true); + break; + } + + case MenuItemConfig::INLINE: + labelText.setWidth(layout.inl.mainW); + labelText.setX(layout.inl.mainX); + MenuItemRenderer::centerTextY(labelText, getHeight()); + tipText.setWidth(layout.inl.tipW); + tipText.setX(layout.inl.tipX); + MenuItemRenderer::alignBaselineY(labelText, tipText); + tipText.setVisible(true); + break; + + case MenuItemConfig::ICON: + case MenuItemConfig::ICON_EXT: + if (cfg.iconId != BITMAP_INVALID || cfg.extIcon != nullptr) { + labelText.setWidth(layout.icon.textW); + labelText.setX(layout.icon.textX); + MenuItemRenderer::centerTextY(labelText, getHeight()); + icon.setPosition(layout.icon.x, layout.icon.y, + layout.icon.w, layout.icon.h); + icon.setVisible(true); + } else { + // No icon data -- fall back to simple layout + labelText.setWidth(getWidth()); + labelText.setX(0); + MenuItemRenderer::centerTextY(labelText, getHeight()); + } + break; + + default: + break; + } + + labelText.invalidate(); + tipText.invalidate(); + icon.invalidate(); + toggle.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuItem.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuItem.cpp new file mode 100644 index 00000000..4dffb6a1 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuItem.cpp @@ -0,0 +1,125 @@ +#include +#include + +MainMenuItem::MainMenuItem() +{ +} + +void MainMenuItem::initialize() +{ + MainMenuItemBase::initialize(); + // Capture the Designer-configured styles so we can restore them when + // MenuItemConfig leaves msgIdType / tipIdType as TYPED_TEXT_INVALID. + mDefaultMsgType = labelText.getTypedText().getId(); + mDefaultTipType = tipText.getTypedText().getId(); + if (mDefaultTipType == TYPED_TEXT_INVALID) { + mDefaultTipType = mDefaultMsgType; // fallback: ensure resizeHeightToCurrentText() works + } +} + +void MainMenuItem::setLayout(const ItemLayout &layout) +{ + mpLayout = &layout; +} + +const ItemLayout &MainMenuItem::activeLayout(const MenuItemConfig &cfg) const +{ + if (cfg.itemLayout != nullptr) { return *cfg.itemLayout; } + if (mpLayout != nullptr) { return *mpLayout; } + static const ItemLayout sDefault; + return sDefault; +} + +void MainMenuItem::apply(const MenuItemConfig &cfg) +{ + const ItemLayout &layout = activeLayout(cfg); + + const TypedTextId msgType = (cfg.msgIdType != TYPED_TEXT_INVALID) + ? cfg.msgIdType : mDefaultMsgType; + const TypedTextId tipType = (cfg.tipIdType != TYPED_TEXT_INVALID) + ? cfg.tipIdType : mDefaultTipType; + + MenuItemRenderer::applyText(labelText, labelTextBuffer, LABELTEXT_SIZE, + cfg.msgId, msgType, cfg.msgText, cfg.msgChar); + + MenuItemRenderer::applyTip(tipText, tipTextBuffer, TIPTEXT_SIZE, + cfg.tipId, tipType, cfg.tipText, cfg.tipColor, cfg.tipChar); + + // Static icon only -- ICON_EXT falls back to static if iconId is set + if (cfg.iconId != BITMAP_INVALID) { + MenuItemRenderer::applyStaticIcon(icon, cfg.iconId); + } + + renderStyle(cfg, layout); +} + +void MainMenuItem::renderStyle(const MenuItemConfig &cfg, + const ItemLayout &layout) +{ + // Reset all optional widgets to Designer defaults before applying the active style. + // This prevents stale geometry (height/Y set by a previous style) from leaking + // into the current render -- especially important when containers are reused by + // the scroll wheel. + labelText.setVisible(true); + tipText.setVisible(false); + icon.setVisible(false); + + switch (cfg.style) { + case MenuItemConfig::SIMPLE: + case MenuItemConfig::TOGGLE: // toggle not shown in surrounding items + labelText.setWidth(getWidth()); + labelText.setX(0); + MenuItemRenderer::centerTextY(labelText, getHeight()); + labelText.setY(labelText.getY() + layout.simple.msgOffsetY); + break; + + case MenuItemConfig::TIP: { + const int16_t half = getHeight() / 2; + + labelText.setWidth(getWidth()); + labelText.setX(0); + labelText.resizeHeightToCurrentText(); + labelText.setY((half - labelText.getHeight()) / 2 + layout.tip.msgOffsetY); + + tipText.setWidth(getWidth()); + tipText.setX(0); + tipText.resizeHeightToCurrentText(); + tipText.setY(half + (half - tipText.getHeight()) / 2 + layout.tip.hintOffsetY); + tipText.setVisible(true); + break; + } + + case MenuItemConfig::INLINE: + labelText.setWidth(layout.inl.mainW); + labelText.setX(layout.inl.mainX); + MenuItemRenderer::centerTextY(labelText, getHeight()); + tipText.setWidth(layout.inl.tipW); + tipText.setX(layout.inl.tipX); + MenuItemRenderer::alignBaselineY(labelText, tipText); + tipText.setVisible(true); + break; + + case MenuItemConfig::ICON: + case MenuItemConfig::ICON_EXT: + if (cfg.iconId != BITMAP_INVALID) { + labelText.setWidth(layout.icon.textW); + labelText.setX(layout.icon.textX); + icon.setPosition(layout.icon.x, layout.icon.y, + layout.icon.w, layout.icon.h); + icon.setVisible(true); + } else { + // No icon available -- fall back to simple layout + labelText.setWidth(getWidth()); + labelText.setX(0); + } + MenuItemRenderer::centerTextY(labelText, getHeight()); + break; + + default: + break; + } + + labelText.invalidate(); + tipText.invalidate(); + icon.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuLayout.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuLayout.cpp new file mode 100644 index 00000000..be22a6d9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/MainMenuLayout.cpp @@ -0,0 +1,144 @@ +#include + +MainMenuLayout::MainMenuLayout() +{ +} + +void MainMenuLayout::initialize() +{ + MainMenuLayoutBase::initialize(); + + // Default button states + buttons.setL1(Buttons::NONE); + buttons.setL2(Buttons::NONE); + buttons.setR1(Buttons::AMBER); + buttons.setR2(Buttons::WHITE); +} + +// ---- Delegated wheel operations -------------------------------------------- + +void MainMenuLayout::setNumberOfItems(int16_t numberOfItems) +{ + menu.setNumberOfItems(numberOfItems); +} + +int16_t MainMenuLayout::getNumberOfItems() +{ + return menu.getNumberOfItems(); +} + +void MainMenuLayout::selectNext() +{ + menu.selectNext(); +} + +void MainMenuLayout::selectPrev() +{ + menu.selectPrev(); +} + +void MainMenuLayout::selectItem(int16_t itemIndex) +{ + menu.selectItem(itemIndex); +} + +uint16_t MainMenuLayout::getSelectedItem() +{ + return menu.getSelectedItem(); +} + +void MainMenuLayout::invalidate() +{ + menu.invalidate(); +} + +void MainMenuLayout::setUpdateItemCallback( + touchgfx::GenericCallback &cb) +{ + menu.setUpdateItemCallback(cb); +} + +void MainMenuLayout::setUpdateCenterItemCallback( + touchgfx::GenericCallback &cb) +{ + menu.setUpdateCenterItemCallback(cb); +} + +void MainMenuLayout::setCenterItemLayout(const CenterItemLayout &layout) +{ + menu.setCenterItemLayout(layout); +} + +void MainMenuLayout::setItemLayout(const ItemLayout &layout) +{ + menu.setItemLayout(layout); +} + +void MainMenuLayout::setAnimationSteps(int16_t steps) +{ + menu.setAnimationSteps(steps); +} + +void MainMenuLayout::setAnimationMiddleCallback(touchgfx::GenericCallback &cb) +{ + menu.setAnimationMiddleCallback(cb); +} + +void MainMenuLayout::setAnimationEndedCallback(touchgfx::GenericCallback &cb) +{ + menu.setAnimationEndedCallback(cb); +} + +// ---- Chrome ---------------------------------------------------------------- + +void MainMenuLayout::setTitle(TypedTextId msgId) +{ + title.set(msgId); +} + +void MainMenuLayout::showTitle(bool state) +{ + title.setVisible(state); + title.invalidate(); +} + +void MainMenuLayout::setBackground(touchgfx::colortype color) +{ + background.setColor(color); +} + +void MainMenuLayout::showBackground(bool state) +{ + background.setVisible(state); + background.invalidate(); +} + +void MainMenuLayout::setInfoMsg(TypedTextId msgId) +{ + if (msgId != TYPED_TEXT_INVALID) { + touchgfx::Unicode::snprintf(infoTextBuffer, INFOTEXT_SIZE, "%s", + touchgfx::TypedText(msgId).getText()); + infoText.setVisible(true); + } else { + infoText.setVisible(false); + } + infoText.invalidate(); +} + +void MainMenuLayout::setInfoMsgColor(touchgfx::colortype color) +{ + infoText.setColor(color); + infoText.invalidate(); +} + +// ---- Getters --------------------------------------------------------------- + +Buttons &MainMenuLayout::getButtons() +{ + return buttons; +} + +MainMenu &MainMenuLayout::getMenu() +{ + return menu; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/PauseIndicator.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/PauseIndicator.cpp new file mode 100644 index 00000000..4d8969f2 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/PauseIndicator.cpp @@ -0,0 +1,27 @@ +#include + +PauseIndicator::PauseIndicator() +{ +} + +void PauseIndicator::initialize() +{ + PauseIndicatorBase::initialize(); +} + +void PauseIndicator::setTime(std::time_t seconds) +{ + const uint32_t h = static_cast(seconds / 3600u); + const uint32_t m = static_cast((seconds % 3600u) / 60u); + const uint32_t s = static_cast(seconds % 60u); + + if (h > 0u) { + touchgfx::Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, + "%u:%02u:%02u", h, m, s); + } else { + touchgfx::Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, + "%02u:%02u", m, s); + } + + timerValue.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/ScrollIndicator.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/ScrollIndicator.cpp new file mode 100644 index 00000000..147a95f6 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/ScrollIndicator.cpp @@ -0,0 +1,228 @@ +#include +#include + + +// --------------------------------------------------------------------------- + +ScrollIndicator::ScrollIndicator() +{ +} + +ScrollIndicator::~ScrollIndicator() +{ + stopAnimation(); +} + +void ScrollIndicator::initialize() +{ + ScrollIndicatorBase::initialize(); + // Designer-generated base already applies kBig geometry and colours + // in its constructor, so no explicit setConfig() call is needed here. +} + +// --------------------------------------------------------------------------- +// Configuration +// --------------------------------------------------------------------------- + +void ScrollIndicator::setConfig(const ScrollIndicatorConfig& cfg) +{ + mHandleLen = cfg.handleLen; + mRailMin = cfg.railMin; + mRailMax = cfg.railMax; + + rail.setArc(cfg.railMin, cfg.railMax); + railPainter.setColor(cfg.railColor); + rail.invalidate(); + + handlePainter.setColor(cfg.handleColor); + handleOvfPainter.setColor(cfg.handleColor); + + // Re-draw handle at the current position with the new geometry + setActiveId(mPosition); +} + +// --------------------------------------------------------------------------- +// Item navigation +// --------------------------------------------------------------------------- + +void ScrollIndicator::setCount(uint16_t count) +{ + if (count == 0) { + count = 1; + } + + mCount = count; + handle.setVisible(mCount > 1); + handle.invalidate(); + + setActiveId(0); +} + +void ScrollIndicator::stopAnimation() +{ + if (mAnimationRunning) { + touchgfx::Application::getInstance()->unregisterTimerWidget(this); + mAnimationRunning = false; + } + + // Always clean up the overflow handle -- it may be visible from a + // wrap-around animation that was interrupted before it could hide itself. + if (mAnimWrap) { + handleOvf.setVisible(false); + handleOvf.invalidate(); + mAnimWrap = false; + } +} + +void ScrollIndicator::setActiveId(uint16_t index) +{ + stopAnimation(); // ensure handleOvf is hidden and timer unregistered + + if (mCount <= 1) { + index = 0; + } + + mPosition = index; + const float start = getStartAngle(index); + + handle.setArc(start, start + mHandleLen); + handle.invalidate(); + rail.invalidate(); +} + +void ScrollIndicator::animateToId(int16_t index, int16_t animationSteps) +{ + if (mCount <= 1) { + index = 0; + } + + bool wrapForward = false; + bool isWrap = false; + + // Clamp and flag wrap-around for the dual-handle overflow animation + if (index < 0) { + index = static_cast(mCount) - 1; + isWrap = true; + } else if (index >= static_cast(mCount)) { + index = 0; + isWrap = true; + wrapForward = true; + } + + if (animationSteps <= 0) { + stopAnimation(); + setActiveId(static_cast(index)); + return; + } + + // Handle the case where a previous animation is still running + if (mAnimationRunning) { + if (mAnimWrap) { + // In a wrap-around animation the overflow handle is the one that + // visually approaches the target. Snap the main handle to its + // current position so the next animation starts from the right spot. + float snapPos; + handleOvf.getArcStart(snapPos); + handle.setArc(snapPos, snapPos + mHandleLen); + handleOvf.setVisible(false); + handleOvf.invalidate(); + mAnimWrap = false; + } + // Timer is already registered -- no need to re-register. + } else { + touchgfx::Application::getInstance()->registerTimerWidget(this); + } + + mAnimWrap = isWrap; + mAnimationDuration = static_cast(animationSteps); + mAnimationCounter = 0; + mPosition = static_cast(index); + + // Start from the current visual handle position (may be mid-animation) + handle.getArcStart(mAnimationStartPos); + mAnimationEndPos = getStartAngle(static_cast(index)); + + if (isWrap) { + // Outgoing handle slides off one end of the rail, + // incoming handle slides in from the opposite end. + if (wrapForward) { + mAnimOutgoingEnd = mAnimationStartPos - mHandleLen; + mAnimIncomingStart = mAnimationEndPos + mHandleLen; + } else { + mAnimOutgoingEnd = mAnimationStartPos + mHandleLen; + mAnimIncomingStart = mAnimationEndPos - mHandleLen; + } + } + + mAnimationRunning = true; +} + +uint16_t ScrollIndicator::getActiveId() +{ + return mPosition; +} + +// --------------------------------------------------------------------------- +// Tick / animation +// --------------------------------------------------------------------------- + +void ScrollIndicator::handleTickEvent() +{ + nextAnimationStep(); +} + +void ScrollIndicator::nextAnimationStep() +{ + if (!mAnimationRunning) { + return; + } + + mAnimationCounter++; + + const float t = static_cast(mAnimationCounter) / mAnimationDuration; + + float pos; + if (mAnimWrap) { + // Outgoing handle slides toward the rail edge + pos = mAnimationStartPos + t * (mAnimOutgoingEnd - mAnimationStartPos); + + // Incoming handle appears from the opposite rail edge + const float incomingPos = mAnimIncomingStart + t * (mAnimationEndPos - mAnimIncomingStart); + handleOvf.setArc(incomingPos, incomingPos + mHandleLen); + handleOvf.setVisible(true); + handleOvf.invalidate(); + } else { + pos = mAnimationStartPos + t * (mAnimationEndPos - mAnimationStartPos); + } + + handle.setArc(pos, pos + mHandleLen); + handle.invalidate(); + rail.invalidate(); + + if (mAnimationCounter >= mAnimationDuration) { + mAnimationRunning = false; + mAnimationCounter = 0; + touchgfx::Application::getInstance()->unregisterTimerWidget(this); + + if (mAnimWrap) { + mAnimWrap = false; + handleOvf.setVisible(false); + handleOvf.invalidate(); + setActiveId(mPosition); + } + } +} + +// --------------------------------------------------------------------------- + +float ScrollIndicator::getStartAngle(uint16_t index) const +{ + if (mCount <= 1) { + // Single item: center the handle on the rail + return (mRailMax + mRailMin - mHandleLen) / 2.0f; + } + + const float step = (mRailMax - mRailMin - mHandleLen) / (mCount - 1); + const float offset = step * index; + return (mRailMax - mHandleLen) - offset; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceCal.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceCal.cpp new file mode 100644 index 00000000..5f57dc7d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceCal.cpp @@ -0,0 +1,39 @@ +#include +#include +#include + +SummaryFaceCal::SummaryFaceCal() +{ +} + +void SummaryFaceCal::initialize() +{ + SummaryFaceCalBase::initialize(); + title.set(T_TEXT_SUMMARY_UC); +} + +void SummaryFaceCal::setTotalTime(std::time_t sec) +{ + auto hms = SDK::Utils::toHMS(sec); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, + "%u:%02u:%02u", hms.h, hms.m, hms.s); + timerValue.invalidate(); +} + +void SummaryFaceCal::setTotalCalories(float kcal) +{ + Unicode::snprintfFloat(totalValueBuffer, TOTALVALUE_SIZE, "%.0f", kcal); + totalValue.invalidate(); +} + +void SummaryFaceCal::setActiveCalories(float kcal) +{ + Unicode::snprintfFloat(activeValueBuffer, ACTIVEVALUE_SIZE, "%.0f", kcal); + activeValue.invalidate(); +} + +void SummaryFaceCal::setRestingCalories(float kcal) +{ + Unicode::snprintfFloat(restingValueBuffer, RESTINGVALUE_SIZE, "%.0f", kcal); + restingValue.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceLaps.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceLaps.cpp new file mode 100644 index 00000000..ba346c4d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceLaps.cpp @@ -0,0 +1,119 @@ +#include +#include +#include + +static constexpr uint32_t skListAnimationSteps = App::Config::kMenuAnimationSteps / 2; + +SummaryFaceLaps::SummaryFaceLaps() +{ +} + +void SummaryFaceLaps::initialize() +{ + SummaryFaceLapsBase::initialize(); + title.set(T_TEXT_LAPS_UC); +} + +void SummaryFaceLaps::setLaps(const std::vector& laps) +{ + mLaps = &laps; + + Unicode::snprintf(lapsTextBuffer, LAPSTEXT_SIZE, "%u %s", + static_cast(laps.size()), + touchgfx::TypedText(T_TEXT_LAPS_UC).getText()); + lapsText.invalidate(); + + time_t total = 0; + for (const auto& lap : laps) { + total += lap.duration; + } + auto hms = SDK::Utils::toHMS(total); + Unicode::snprintf(timerTextBuffer, TIMERTEXT_SIZE, "%s: %u:%02u:%02u", + touchgfx::TypedText(T_TEXT_TOTAL).getText(), hms.h, hms.m, hms.s); + timerText.invalidate(); + + mCurrentPage = 0; + mNumPages = (laps.empty()) + ? 0u + : static_cast((laps.size() + kPageSize - 1) / kPageSize); + + // Pad to (numPages-1)*kPageSize + kVisible so every page transition + // selects an item outside the current window, forcing a real scroll. + const int16_t paddedSize = (mNumPages > 0) + ? static_cast((mNumPages - 1) * kPageSize + kVisible) + : 0; + scrollList.setNumberOfItems(paddedSize); + scrollList.animateToItem(0, 0); +} + +bool SummaryFaceLaps::canScrollDown() const +{ + return mCurrentPage + 1 < mNumPages; +} + +bool SummaryFaceLaps::canScrollUp() const +{ + return mCurrentPage > 0; +} + +void SummaryFaceLaps::scrollDown() +{ + if (canScrollDown()) { + ++mCurrentPage; + // Select last item of new window -- always outside previous window. + scrollList.animateToItem( + static_cast(mCurrentPage * kPageSize + kVisible - 1), skListAnimationSteps); + } +} + +void SummaryFaceLaps::scrollUp() +{ + if (canScrollUp()) { + --mCurrentPage; + // Select first item of new window -- always outside previous window. + scrollList.animateToItem( + static_cast(mCurrentPage * kPageSize), skListAnimationSteps); + } +} + +void SummaryFaceLaps::scrollListUpdateItem(LapListItem& item, int16_t itemIndex) +{ + static const touchgfx::Unicode::UnicodeChar kEmpty[1] = {0}; + + if (mLaps == nullptr || itemIndex < 0 || itemIndex >= static_cast(mLaps->size())) { + item.setIndex(kEmpty); + item.setTime(kEmpty); + item.setAvgHR(kEmpty); + item.setMaxHR(kEmpty); + return; + } + + const LapSummary& lap = (*mLaps)[itemIndex]; + + touchgfx::Unicode::UnicodeChar buf[32]; + + Unicode::snprintf(buf, 32, "%u.", static_cast(itemIndex + 1)); + item.setIndex(buf); + + auto dur = SDK::Utils::toHMS(lap.duration); + if (dur.h > 0) { + Unicode::snprintf(buf, 32, "%u:%02u", dur.h, dur.m); + } else { + Unicode::snprintf(buf, 32, "%u:%02u", dur.m, dur.s); + } + item.setTime(buf); + + if (lap.hrAvg < App::Display::kMinHR) { + Unicode::snprintf(buf, 32, "---"); + } else { + Unicode::snprintfFloat(buf, 32, "%.0f", lap.hrAvg); + } + item.setAvgHR(buf); + + if (lap.hrMax < App::Display::kMinHR) { + Unicode::snprintf(buf, 32, "---"); + } else { + Unicode::snprintfFloat(buf, 32, "%.0f", lap.hrMax); + } + item.setMaxHR(buf); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceOverview.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceOverview.cpp new file mode 100644 index 00000000..e54739c0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceOverview.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +SummaryFaceOverview::SummaryFaceOverview() +{ +} + +void SummaryFaceOverview::initialize() +{ + SummaryFaceOverviewBase::initialize(); + title.set(T_TEXT_SUMMARY_UC); +} + +void SummaryFaceOverview::setTotalTime(std::time_t sec) +{ + auto hms = SDK::Utils::toHMS(sec); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, + "%u:%02u:%02u", hms.h, hms.m, hms.s); + timerValue.invalidate(); +} + +void SummaryFaceOverview::setAvgHR(float hr) +{ + if (hr < App::Display::kMinHR) { + Unicode::snprintf(avgHRValueBuffer, AVGHRVALUE_SIZE, "---"); + } else { + Unicode::snprintfFloat(avgHRValueBuffer, AVGHRVALUE_SIZE, "%.0f", hr); + } + avgHRValue.invalidate(); +} + +void SummaryFaceOverview::setMaxHR(float hr) +{ + if (hr < App::Display::kMinHR) { + Unicode::snprintf(maxHRValueBuffer, MAXHRVALUE_SIZE, "---"); + } else { + Unicode::snprintfFloat(maxHRValueBuffer, MAXHRVALUE_SIZE, "%.0f", hr); + } + maxHRValue.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceZones.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceZones.cpp new file mode 100644 index 00000000..ed361166 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/SummaryFaceZones.cpp @@ -0,0 +1,59 @@ +#include + +#include + +namespace { + +/// Bar colours indexed by 0..4 (zone 1..5). Matches the in-activity HR-zone +/// indicator palette: cyan -> green -> yellow -> orange -> red. +const touchgfx::colortype kZoneColors[5] = { + touchgfx::Color::getColorFromRGB( 0, 192, 192), // Zone 1 - cyan + touchgfx::Color::getColorFromRGB( 64, 192, 0), // Zone 2 - green + touchgfx::Color::getColorFromRGB(192, 192, 0), // Zone 3 - yellow + touchgfx::Color::getColorFromRGB(192, 128, 0), // Zone 4 - orange + touchgfx::Color::getColorFromRGB(192, 0, 0), // Zone 5 - red +}; + +} // namespace + +SummaryFaceZones::SummaryFaceZones() +{ +} + +void SummaryFaceZones::initialize() +{ + SummaryFaceZonesBase::initialize(); + title.set("HR ZONES"); +} + +void SummaryFaceZones::setZoneSummary(const ActivitySummary& s) +{ + std::time_t inZones = 0; + for (std::time_t z : s.zoneTimeSec) { + inZones += z; + } + + // Active seconds with HR below the zone-1 threshold get folded into the + // zone-1 row purely for display; the underlying telemetry is untouched. + const std::time_t belowZone1 = (s.time > inZones) ? (s.time - inZones) : 0; + const std::time_t displaySec[5] = { + s.zoneTimeSec[0] + belowZone1, + s.zoneTimeSec[1], + s.zoneTimeSec[2], + s.zoneTimeSec[3], + s.zoneTimeSec[4], + }; + + const float totalSec = (s.time > 0) ? static_cast(s.time) : 0.0f; + + ZoneInfo* const rows[5] = { + &zoneInfo1, &zoneInfo2, &zoneInfo3, &zoneInfo4, &zoneInfo5, + }; + + for (size_t i = 0; i < 5; ++i) { + const float pct = (totalSec > 0.0f) + ? (100.0f * static_cast(displaySec[i]) / totalSec) + : 0.0f; + rows[i]->setRow(static_cast(i + 1), displaySec[i], pct, kZoneColors[i]); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TimerRing.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TimerRing.cpp new file mode 100644 index 00000000..a402da6d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TimerRing.cpp @@ -0,0 +1,187 @@ +#include +#include + +TimerRing::TimerRing() +{ +} + +void TimerRing::initialize() +{ + TimerRingBase::initialize(); + updateArc(); +} + +// ----------------------------------------------------------------------------- +// handleTickEvent +// ----------------------------------------------------------------------------- + +void TimerRing::handleTickEvent() +{ + if (!mAnimating || mPaused) return; + + mAccumulator += mSpeed / mFPS; + + bool changed = false; + while (mAccumulator >= 1.0f && mValue != mTarget) + { + mAccumulator -= 1.0f; + mValue += (mValue < mTarget) ? 1 : -1; + changed = true; + } + + if (changed) + { + updateArc(); + if (mpValueChangedCb != nullptr && mpValueChangedCb->isValid()) + { + mpValueChangedCb->execute(mValue); + } + } + + if (mValue == mTarget) + { + const int32_t finalValue = mValue; + + if (mLoop) + { + // Restart from the opposite end toward the original starting value + const int32_t newTarget = (finalValue == mMaxValue) ? 0 : mMaxValue; + mAccumulator = 0.0f; + mTarget = newTarget; + } + else + { + stop(); + } + + if (mpCompleteCb != nullptr && mpCompleteCb->isValid()) + { + mpCompleteCb->execute(finalValue); + } + } +} + +// ----------------------------------------------------------------------------- +// Configuration +// ----------------------------------------------------------------------------- + +void TimerRing::setFPS(float fps) +{ + mFPS = (fps > 0.0f) ? fps : 1.0f; +} + +void TimerRing::setMaxValue(int32_t max) +{ + mMaxValue = (max > 0) ? max : 1; + updateArc(); +} + +void TimerRing::setSpeed(float unitsPerSecond) +{ + mSpeed = (unitsPerSecond > 0.0f) ? unitsPerSecond : 1.0f; +} + +void TimerRing::setMode(Mode mode) +{ + mMode = mode; + updateArc(); +} + +void TimerRing::setProgressColor(touchgfx::colortype color) +{ + progressPainter.setColor(color); + progress.invalidate(); +} + +void TimerRing::setTrackColor(touchgfx::colortype color) +{ + trackPainter.setColor(color); + track.invalidate(); +} + +void TimerRing::setLoopEnabled(bool enabled) +{ + mLoop = enabled; +} + +// ----------------------------------------------------------------------------- +// Control +// ----------------------------------------------------------------------------- + +void TimerRing::setValue(int32_t value) +{ + stop(); + mValue = (value < 0) ? 0 : (value > mMaxValue ? mMaxValue : value); + mTarget = mValue; + mAccumulator = 0.0f; + updateArc(); +} + +void TimerRing::animateTo(int32_t target) +{ + mTarget = (target < 0) ? 0 : (target > mMaxValue ? mMaxValue : target); + if (mValue == mTarget) return; + + mAccumulator = 0.0f; + mPaused = false; + + if (!mAnimating) + { + touchgfx::Application::getInstance()->registerTimerWidget(this); + mAnimating = true; + } +} + +void TimerRing::pause() +{ + mPaused = true; +} + +void TimerRing::resume() +{ + if (mAnimating) mPaused = false; +} + +void TimerRing::stop() +{ + if (mAnimating) + { + touchgfx::Application::getInstance()->unregisterTimerWidget(this); + mAnimating = false; + } + mPaused = false; + mAccumulator = 0.0f; +} + +// ----------------------------------------------------------------------------- +// Getters +// ----------------------------------------------------------------------------- + +float TimerRing::getProgress() const +{ + return (mMaxValue > 0) ? float(mValue) / float(mMaxValue) : 0.0f; +} + +// ----------------------------------------------------------------------------- +// Private +// ----------------------------------------------------------------------------- + +void TimerRing::updateArc() +{ + const int16_t trackStart = track.getArcStart(); + const int16_t trackEnd = track.getArcEnd(); + const float span = float(trackEnd - trackStart); + const int16_t arcSpan = int16_t(span * getProgress() + 0.5f); + + if (mMode == FILL) + { + progress.setArc(trackStart, trackStart + arcSpan); + } + else // DRAIN + { + progress.setArc(trackEnd - arcSpan, trackEnd); + } + + progress.invalidate(); + track.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Title.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Title.cpp new file mode 100644 index 00000000..12309f29 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Title.cpp @@ -0,0 +1,42 @@ +#include + +Title::Title() +{ +} + +void Title::initialize() +{ + TitleBase::initialize(); +} + +void Title::set(TypedTextId msgId) +{ + touchgfx::Unicode::snprintf(titleTextBuffer, TITLETEXT_SIZE, "%s", + touchgfx::TypedText(msgId).getText()); + titleText.invalidate(); +} + +void Title::set(touchgfx::Unicode::UnicodeChar* messageText) +{ + if (messageText != nullptr) { + touchgfx::Unicode::snprintf(titleTextBuffer, TITLETEXT_SIZE, "%s", messageText); + titleText.invalidate(); + } +} + +void Title::set(const char* messageText) +{ + if (messageText != nullptr) { + touchgfx::Unicode::fromUTF8( + reinterpret_cast(messageText), titleTextBuffer, TITLETEXT_SIZE); + titleText.invalidate(); + } +} + +void Title::setColor(touchgfx::colortype color) +{ + linePainter.setColor(color); + line.invalidate(); + titleText.setColor(color); + titleText.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Toggle.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Toggle.cpp new file mode 100644 index 00000000..a31d7f60 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/Toggle.cpp @@ -0,0 +1,63 @@ +#include + +// Default colors -- must match the values set in ToggleBase constructor. +// PainterABGR2222 has no getColor(), so they cannot be read back at runtime. +static constexpr uint32_t kDefaultRailOff = 0x000000u; +static constexpr uint32_t kDefaultRailOn = 0xC08000u; +static constexpr uint32_t kDefaultHandleColor = 0xC0C0C0u; + +// ----------------------------------------------------------------------------- + +Toggle::Toggle() + : mRailOnColor(kDefaultRailOn) + , mRailOffColor(kDefaultRailOff) + , mHandleOnColor(kDefaultHandleColor) + , mHandleOffColor(kDefaultHandleColor) +{ +} + +void Toggle::initialize() +{ + ToggleBase::initialize(); +} + +// ----------------------------------------------------------------------------- + +void Toggle::setState(bool state) +{ + mState = state; + + railPainter.setColor(mState ? mRailOnColor : mRailOffColor); + rail.invalidate(); + + handlePainter.setColor(mState ? mHandleOnColor : mHandleOffColor); + handle.setX(mState ? kHandleOnX : kHandleOffX); + handle.invalidate(); +} + +bool Toggle::getState() const +{ + return mState; +} + +// ----------------------------------------------------------------------------- + +void Toggle::setRailOnColor(touchgfx::colortype color) +{ + mRailOnColor = color; +} + +void Toggle::setRailOffColor(touchgfx::colortype color) +{ + mRailOffColor = color; +} + +void Toggle::setHandleOnColor(touchgfx::colortype color) +{ + mHandleOnColor = color; +} + +void Toggle::setHandleOffColor(touchgfx::colortype color) +{ + mHandleOffColor = color; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceLap.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceLap.cpp new file mode 100644 index 00000000..54568d17 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceLap.cpp @@ -0,0 +1,34 @@ +#include + +TrackFaceLap::TrackFaceLap() +{ +} + +void TrackFaceLap::initialize() +{ + TrackFaceLapBase::initialize(); +} + +void TrackFaceLap::setLapAvgHR(float hr) +{ + if (hr < App::Display::kMinHR) { + Unicode::snprintf(hrValueBuffer, HRVALUE_SIZE, "---"); + } else { + Unicode::snprintfFloat(hrValueBuffer, HRVALUE_SIZE, "%.0f", hr); + } + hrValue.invalidate(); +} + +void TrackFaceLap::setLapNumber(uint32_t lapNum) +{ + Unicode::snprintf(lapValueBuffer, LAPVALUE_SIZE, "%u", static_cast(lapNum + 1)); + lapValue.invalidate(); +} + +void TrackFaceLap::setTimer(std::time_t sec) +{ + auto hms = SDK::Utils::toHMS(sec); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, + "%u:%02u:%02u", hms.h, hms.m, hms.s); + timerValue.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceStatus.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceStatus.cpp new file mode 100644 index 00000000..8a31eab9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceStatus.cpp @@ -0,0 +1,25 @@ +#include + +TrackFaceStatus::TrackFaceStatus() +{ +} + +void TrackFaceStatus::initialize() +{ + TrackFaceStatusBase::initialize(); +} + +void TrackFaceStatus::setTime(uint8_t h, uint8_t m) +{ + Unicode::snprintf(dayTimeValueBuffer, DAYTIMEVALUE_SIZE, "%u:%02u", h, m); + dayTimeValue.invalidate(); +} + +void TrackFaceStatus::setBatteryLevel(uint8_t level) +{ + battery.setLevel(level); + + Unicode::snprintf(percentValueBuffer, PERCENTVALUE_SIZE, "%u%s", + level, touchgfx::TypedText(T_TEXT_PERCENT).getText()); + percentValue.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceTotal.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceTotal.cpp new file mode 100644 index 00000000..677b91c6 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/TrackFaceTotal.cpp @@ -0,0 +1,38 @@ +#include + +TrackFaceTotal::TrackFaceTotal() +{ +} + +void TrackFaceTotal::initialize() +{ + TrackFaceTotalBase::initialize(); +} + +void TrackFaceTotal::setHR(float hr, const uint8_t* thresholds, uint8_t thresholdCount) +{ + if (hr < App::Display::kMinHR) { + Unicode::snprintf(hrValueBuffer, HRVALUE_SIZE, "---"); + hrValue.invalidate(); + hrZone.setHR(0, thresholds, thresholdCount); + return; + } + + Unicode::snprintfFloat(hrValueBuffer, HRVALUE_SIZE, "%.0f", hr); + hrValue.invalidate(); + hrZone.setHR(static_cast(hr), thresholds, thresholdCount); +} + +void TrackFaceTotal::setCalories(float calories) +{ + Unicode::snprintfFloat(caloriesValueBuffer, CALORIESVALUE_SIZE, "%.0f", calories); + caloriesValue.invalidate(); +} + +void TrackFaceTotal::setTimer(std::time_t sec) +{ + auto hms = SDK::Utils::toHMS(sec); + Unicode::snprintf(timerValueBuffer, TIMERVALUE_SIZE, + "%u:%02u:%02u", hms.h, hms.m, hms.s); + timerValue.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/ZoneInfo.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/ZoneInfo.cpp new file mode 100644 index 00000000..9c6f66ee --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/containers/ZoneInfo.cpp @@ -0,0 +1,56 @@ +#include + +#include +#include + +#include +#include + +ZoneInfo::ZoneInfo() +{ +} + +void ZoneInfo::initialize() +{ + ZoneInfoBase::initialize(); +} + +void ZoneInfo::setRow(uint8_t zoneNumber1to5, + std::time_t seconds, + float percent0to100, + touchgfx::colortype barColor) +{ + Unicode::snprintf(zoneTextBuffer, ZONETEXT_SIZE, "%u", + static_cast(zoneNumber1to5)); + zoneText.invalidate(); + + const auto hms = SDK::Utils::toHMS(seconds); + if (hms.h > 0) { + Unicode::snprintf(zoneTimeBuffer, ZONETIME_SIZE, "%u:%02u:%02u", + static_cast(hms.h), + static_cast(hms.m), + static_cast(hms.s)); + } else { + Unicode::snprintf(zoneTimeBuffer, ZONETIME_SIZE, "%u:%02u", + static_cast(hms.m), + static_cast(hms.s)); + } + zoneTime.invalidate(); + + const float clampedPct = std::clamp(percent0to100, 0.0f, 100.0f); + Unicode::snprintf(zonePercentBuffer, ZONEPERCENT_SIZE, "%u%s", + static_cast(clampedPct + 0.5f), + touchgfx::TypedText(T_TEXT_PERCENT).getText()); + zonePercent.invalidate(); + + const bool barVisible = clampedPct > 0.0f; + bar.setVisible(barVisible); + if (barVisible) { + const int16_t span = kBarFullEndX - kBarStartX; + const int16_t endX = static_cast( + kBarStartX + std::lround(span * clampedPct / 100.0f)); + bar.updateEnd(endX, kBarY); + } + barPainter.setColor(barColor); + bar.invalidate(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/main_screen/MainPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/main_screen/MainPresenter.cpp new file mode 100644 index 00000000..6d5ba7f7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/main_screen/MainPresenter.cpp @@ -0,0 +1,37 @@ +#include +#include + +MainPresenter::MainPresenter(MainView& v) + : view(v) +{ + +} + +void MainPresenter::activate() +{ + view.setPositionId(model->menu().get()); + model->menu().resetChildren(); + model->resetIdleTimer(); +} + +void MainPresenter::deactivate() +{ + model->menu().set(view.getPositionId()); +} + +void MainPresenter::onIdleTimeout() +{ + if (view.getPositionId() != App::MenuNav::Root::ID_START) { + model->exitApp(); + } +} + +void MainPresenter::startTrack() +{ + model->trackStart(); +} + +void MainPresenter::exitApp() +{ + model->exitApp(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/main_screen/MainView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/main_screen/MainView.cpp new file mode 100644 index 00000000..998516b9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/main_screen/MainView.cpp @@ -0,0 +1,134 @@ +#include +#include + + +MainView::MainView() : + mUpdateItemCb(this, &MainView::updateItem), + mUpdateCenterItemCb(this, &MainView::updateCenterItem), + mpAnimationMiddleCb(this, &MainView::onAnimationMiddle) +{ +} + +void MainView::setupScreen() +{ + MainViewBase::setupScreen(); + + setupItems(); + menuLayout.setAnimationSteps(App::Config::kMenuAnimationSteps); + menuLayout.setTitle(T_TEXT_APP_NAME_UC); + menuLayout.setUpdateItemCallback(mUpdateItemCb); + menuLayout.setUpdateCenterItemCallback(mUpdateCenterItemCb); + menuLayout.setAnimationMiddleCallback(mpAnimationMiddleCb); + menuLayout.setNumberOfItems(Menu::ID_COUNT); + menuLayout.invalidate(); + + updateBackground(menuLayout.getSelectedItem()); +} + +void MainView::tearDownScreen() +{ + MainViewBase::tearDownScreen(); +} + +void MainView::setPositionId(uint16_t id) +{ + menuLayout.selectItem(id); + updateBackground(menuLayout.getSelectedItem()); +} + +uint16_t MainView::getPositionId() +{ + return menuLayout.getSelectedItem(); +} + +void MainView::setupItems() +{ + // START + mCenterItems[Menu::ID_START].msgId = T_TEXT_START; + mCenterItems[Menu::ID_START].msgIdType = T_TMP_SEMIBOLD_35; + + mItems[Menu::ID_START].msgId = T_TEXT_START; + + + // SETTINGS + mCenterItems[Menu::ID_SETTINGS].msgId = T_TEXT_SETTINGS; + + mItems[Menu::ID_SETTINGS].msgId = T_TEXT_SETTINGS; +} + +void MainView::updateItem(MainMenuItem& item, int16_t index) +{ + if (index < 0 || index >= static_cast(Menu::ID_COUNT)) { + return; + } + item.apply(mItems[index]); +} + +void MainView::updateCenterItem(MainMenuCenterItem& item, int16_t index) +{ + if (index < 0 || index >= static_cast(Menu::ID_COUNT)) { + return; + } + item.apply(mCenterItems[index]); +} + +void MainView::onAnimationMiddle(int16_t index) +{ + updateBackground(index); +} + +void MainView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + menuLayout.selectPrev(); + } + + if (key == SDK::GUI::Button::L2) { + menuLayout.selectNext(); + } + + if (key == SDK::GUI::Button::R1) { + onConfirm(); + } + + if (key == SDK::GUI::Button::R2) { + presenter->exitApp(); + } +} + +void MainView::onConfirm() +{ + int16_t idx = static_cast(menuLayout.getSelectedItem()); + if (idx < 0 || idx >= static_cast(Menu::ID_COUNT)) { + return; + } + + switch (idx) { + case Menu::ID_START: + presenter->startTrack(); + application().gotoTrackScreenNoTransition(); + break; + + case Menu::ID_SETTINGS: + application().gotoMenuSettingsScreenNoTransition(); + break; + + default: + break; + }; +} + +void MainView::updateBackground(int16_t index) +{ + switch (index) { + case Menu::ID_START: + menuLayout.setBackground(SDK::GUI::Color::TEAL_DARK); + menuLayout.getButtons().setR1(Buttons::AMBER); + break; + + default: + menuLayout.setBackground(SDK::GUI::Color::TEAL_DARK); + menuLayout.getButtons().setR1(Buttons::AMBER); + break; + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menualerts_screen/MenuAlertsPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menualerts_screen/MenuAlertsPresenter.cpp new file mode 100644 index 00000000..d6d79a9c --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menualerts_screen/MenuAlertsPresenter.cpp @@ -0,0 +1,21 @@ +#include +#include + +MenuAlertsPresenter::MenuAlertsPresenter(MenuAlertsView& v) + : view(v) +{ + +} + +void MenuAlertsPresenter::activate() +{ + view.setPositionId(model->menu().settings.alerts.get()); + model->resetIdleTimer(); + + view.setTime(model->getSettings().alertTimeId); +} + +void MenuAlertsPresenter::deactivate() +{ + model->menu().settings.alerts.set(view.getPositionId()); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menualerts_screen/MenuAlertsView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menualerts_screen/MenuAlertsView.cpp new file mode 100644 index 00000000..edcec577 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menualerts_screen/MenuAlertsView.cpp @@ -0,0 +1,118 @@ +#include + +MenuAlertsView::MenuAlertsView() : + mUpdateItemCb(this, &MenuAlertsView::updateItem), + mUpdateCenterItemCb(this, &MenuAlertsView::updateCenterItem) +{ +} + +void MenuAlertsView::setupScreen() +{ + MenuAlertsViewBase::setupScreen(); + + menuLayout.setAnimationSteps(App::Config::kMenuAnimationSteps); + menuLayout.setTitle(T_TEXT_LAP_ALERTS_UC); + menuLayout.setUpdateItemCallback(mUpdateItemCb); + menuLayout.setUpdateCenterItemCallback(mUpdateCenterItemCb); + menuLayout.setNumberOfItems(Menu::ID_COUNT); + + formatTips(); + menuLayout.invalidate(); +} + +void MenuAlertsView::tearDownScreen() +{ + MenuAlertsViewBase::tearDownScreen(); +} + +void MenuAlertsView::setTime(Time::Id id) +{ + mTimeId = id; + formatTips(); + menuLayout.invalidate(); +} + +void MenuAlertsView::setPositionId(uint16_t id) +{ + menuLayout.selectItem(id); +} + +uint16_t MenuAlertsView::getPositionId() +{ + return menuLayout.getSelectedItem(); +} + +void MenuAlertsView::formatTips() +{ + if (mTimeId == Time::ID_OFF) { + Unicode::snprintf(mTimeTipBuff, kBuffSize, "%s", + touchgfx::TypedText(T_TEXT_OFF_UC).getText()); + mTimeTipColor = SDK::GUI::Color::TEAL; + } else { + Unicode::snprintf(mTimeTipBuff, kBuffSize, "%d %s", + Time::kValues[mTimeId], touchgfx::TypedText(T_TEXT_MIN).getText()); + mTimeTipColor = SDK::GUI::Color::YELLOW_DARK; + } +} + +void MenuAlertsView::updateItem(MainMenuItem& item, int16_t index) +{ + MenuItemConfig cfg; + cfg.style = MenuItemConfig::TIP; + + switch (index) { + case Menu::ID_TIME: + cfg.msgId = T_TEXT_TIME; + cfg.tipText = mTimeTipBuff; + cfg.tipColor = mTimeTipColor; + break; + default: + return; + } + + item.apply(cfg); +} + +void MenuAlertsView::updateCenterItem(MainMenuCenterItem& item, int16_t index) +{ + MenuItemConfig cfg; + cfg.style = MenuItemConfig::TIP; + + switch (index) { + case Menu::ID_TIME: + cfg.msgId = T_TEXT_TIME; + cfg.tipText = mTimeTipBuff; + break; + default: + return; + } + + item.apply(cfg); +} + +void MenuAlertsView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + menuLayout.selectPrev(); + } + + if (key == SDK::GUI::Button::L2) { + menuLayout.selectNext(); + } + + if (key == SDK::GUI::Button::R1) { + uint32_t id = menuLayout.getSelectedItem(); + + switch (id) { + case Menu::ID_TIME: + application().gotoMenuTimeScreenNoTransition(); + break; + default: + break; + } + } + + if (key == SDK::GUI::Button::R2) { + application().gotoMenuSettingsScreenNoTransition(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menusettings_screen/MenuSettingsPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menusettings_screen/MenuSettingsPresenter.cpp new file mode 100644 index 00000000..737e3e01 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menusettings_screen/MenuSettingsPresenter.cpp @@ -0,0 +1,29 @@ +#include +#include + +MenuSettingsPresenter::MenuSettingsPresenter(MenuSettingsView& v) + : view(v) +{ + +} + +void MenuSettingsPresenter::activate() +{ + view.setPositionId(model->menu().settings.get()); + model->menu().settings.resetChildren(); + model->resetIdleTimer(); + + view.setPhoneNotif(model->getSettings().phoneNotifEn); +} + +void MenuSettingsPresenter::deactivate() +{ + model->menu().settings.set(view.getPositionId()); +} + +void MenuSettingsPresenter::savePhoneNotif(bool state) +{ + Settings sett = model->getSettings(); + sett.phoneNotifEn = state; + model->saveSettings(sett); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menusettings_screen/MenuSettingsView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menusettings_screen/MenuSettingsView.cpp new file mode 100644 index 00000000..99d76209 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menusettings_screen/MenuSettingsView.cpp @@ -0,0 +1,118 @@ +#include + +MenuSettingsView::MenuSettingsView() : + mUpdateItemCb(this, &MenuSettingsView::updateItem), + mUpdateCenterItemCb(this, &MenuSettingsView::updateCenterItem) +{ +} + +void MenuSettingsView::setupScreen() +{ + MenuSettingsViewBase::setupScreen(); + + menuLayout.setAnimationSteps(App::Config::kMenuAnimationSteps); + menuLayout.setTitle(T_TEXT_SETTINGS_UC); + menuLayout.setUpdateItemCallback(mUpdateItemCb); + menuLayout.setUpdateCenterItemCallback(mUpdateCenterItemCb); + menuLayout.setNumberOfItems(Menu::ID_COUNT); + + menuLayout.invalidate(); +} + +void MenuSettingsView::tearDownScreen() +{ + MenuSettingsViewBase::tearDownScreen(); +} + +void MenuSettingsView::setPhoneNotif(bool state) +{ + mPhoneNotif = state; + menuLayout.invalidate(); +} + +void MenuSettingsView::setPositionId(uint16_t id) +{ + menuLayout.selectItem(id); +} + +uint16_t MenuSettingsView::getPositionId() +{ + return menuLayout.getSelectedItem(); +} + +void MenuSettingsView::updateItem(MainMenuItem& item, int16_t index) +{ + MenuItemConfig cfg; + + switch (index) { + case Menu::ID_ALERTS: + cfg.style = MenuItemConfig::SIMPLE; + cfg.msgId = T_TEXT_LAP_ALERTS; + break; + case Menu::ID_PHONE_NOTIF: + cfg.style = MenuItemConfig::TIP; + cfg.msgId = T_TEXT_PHONE_NOTIF_DOT; + cfg.tipId = mPhoneNotif ? T_TEXT_ON_UC : T_TEXT_OFF_UC; + cfg.tipColor = mPhoneNotif ? SDK::GUI::Color::YELLOW_DARK + : SDK::GUI::Color::TEAL; + break; + default: + return; + } + + item.apply(cfg); +} + +void MenuSettingsView::updateCenterItem(MainMenuCenterItem& item, int16_t index) +{ + MenuItemConfig cfg; + + switch (index) { + case Menu::ID_ALERTS: + cfg.style = MenuItemConfig::SIMPLE; + cfg.msgId = T_TEXT_LAP_ALERTS; + break; + case Menu::ID_PHONE_NOTIF: + cfg.style = MenuItemConfig::TOGGLE; + cfg.msgId = T_TEXT_PHONE_BR_NOTIF_DOT; + cfg.msgIdType = T_TMP_SEMIBOLD_25; + cfg.toggleState = mPhoneNotif; + break; + default: + return; + } + + item.apply(cfg); +} + +void MenuSettingsView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + menuLayout.selectPrev(); + } + + if (key == SDK::GUI::Button::L2) { + menuLayout.selectNext(); + } + + if (key == SDK::GUI::Button::R1) { + uint32_t id = menuLayout.getSelectedItem(); + + switch (id) { + case Menu::ID_ALERTS: + application().gotoMenuAlertsScreenNoTransition(); + break; + case Menu::ID_PHONE_NOTIF: + mPhoneNotif = !mPhoneNotif; + setPhoneNotif(mPhoneNotif); + presenter->savePhoneNotif(mPhoneNotif); + break; + default: + break; + } + } + + if (key == SDK::GUI::Button::R2) { + application().gotoMainScreenNoTransition(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutime_screen/MenuTimePresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutime_screen/MenuTimePresenter.cpp new file mode 100644 index 00000000..442499e6 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutime_screen/MenuTimePresenter.cpp @@ -0,0 +1,29 @@ +#include +#include + +MenuTimePresenter::MenuTimePresenter(MenuTimeView& v) + : view(v) +{ + +} + +void MenuTimePresenter::activate() +{ + // Set current menu position + view.setTime(model->getSettings().alertTimeId); + + // Reset idle timer + model->resetIdleTimer(); +} + +void MenuTimePresenter::deactivate() +{ + +} + +void MenuTimePresenter::saveTime(Settings::Alerts::Time::Id id) +{ + Settings sett = model->getSettings(); + sett.alertTimeId = id; + model->saveSettings(sett); +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutime_screen/MenuTimeView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutime_screen/MenuTimeView.cpp new file mode 100644 index 00000000..049e65ce --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutime_screen/MenuTimeView.cpp @@ -0,0 +1,84 @@ +#include + +MenuTimeView::MenuTimeView() : + mUpdateItemCb(this, &MenuTimeView::updateItem), + mUpdateCenterItemCb(this, &MenuTimeView::updateCenterItem) +{ +} + +void MenuTimeView::setupScreen() +{ + MenuTimeViewBase::setupScreen(); + + menuLayout.setAnimationSteps(App::Config::kMenuAnimationSteps); + menuLayout.setTitle(T_TEXT_TIME_UC); + menuLayout.setUpdateItemCallback(mUpdateItemCb); + menuLayout.setUpdateCenterItemCallback(mUpdateCenterItemCb); + menuLayout.setNumberOfItems(Menu::ID_COUNT); + menuLayout.invalidate(); +} + +void MenuTimeView::tearDownScreen() +{ + MenuTimeViewBase::tearDownScreen(); +} + +void MenuTimeView::setTime(Menu::Id id) +{ + menuLayout.selectItem(static_cast(id)); +} + +void MenuTimeView::updateItem(MainMenuItem& item, int16_t index) +{ + if (index < 0 || index >= static_cast(Menu::ID_COUNT)) return; + + if (index == 0) { + Unicode::snprintf(mItemBuff, kBuffSize, "%s", + touchgfx::TypedText(T_TEXT_OFF_UC).getText()); + } else { + Unicode::snprintf(mItemBuff, kBuffSize, "%d %s", + Menu::kValues[index], touchgfx::TypedText(T_TEXT_MIN).getText()); + } + + MenuItemConfig cfg; + cfg.msgText = mItemBuff; + item.apply(cfg); +} + +void MenuTimeView::updateCenterItem(MainMenuCenterItem& item, int16_t index) +{ + if (index < 0 || index >= static_cast(Menu::ID_COUNT)) return; + + if (index == 0) { + Unicode::snprintf(mMainBuff, kBuffSize, "%s", + touchgfx::TypedText(T_TEXT_OFF_UC).getText()); + } else { + touchgfx::TypedTextId txt = Menu::kValues[index] > 1 ? T_TEXT_MINUTES_LC : T_TEXT_MINUTE_LC; + Unicode::snprintf(mMainBuff, kBuffSize, "%d %s", + Menu::kValues[index], touchgfx::TypedText(txt).getText()); + } + + MenuItemConfig cfg; + cfg.msgText = mMainBuff; + item.apply(cfg); +} + +void MenuTimeView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + menuLayout.selectPrev(); + } + + if (key == SDK::GUI::Button::L2) { + menuLayout.selectNext(); + } + + if (key == SDK::GUI::Button::R1) { + presenter->saveTime(static_cast(menuLayout.getSelectedItem())); + application().gotoMenuTimeSavedScreenNoTransition(); + } + + if (key == SDK::GUI::Button::R2) { + application().gotoMenuAlertsScreenNoTransition(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutimesaved_screen/MenuTimeSavedPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutimesaved_screen/MenuTimeSavedPresenter.cpp new file mode 100644 index 00000000..e6a12365 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutimesaved_screen/MenuTimeSavedPresenter.cpp @@ -0,0 +1,18 @@ +#include +#include + +MenuTimeSavedPresenter::MenuTimeSavedPresenter(MenuTimeSavedView& v) + : view(v) +{ + +} + +void MenuTimeSavedPresenter::activate() +{ + view.setTime(model->getSettings().alertTimeId); +} + +void MenuTimeSavedPresenter::deactivate() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutimesaved_screen/MenuTimeSavedView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutimesaved_screen/MenuTimeSavedView.cpp new file mode 100644 index 00000000..ddf4984d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/menutimesaved_screen/MenuTimeSavedView.cpp @@ -0,0 +1,42 @@ +#include + + +static constexpr uint16_t kDismissTicks = SDK::Utils::secToTicks(1, App::Config::kFrameRate); + +MenuTimeSavedView::MenuTimeSavedView() + : mDismissCb(this, &MenuTimeSavedView::onDismiss) +{ +} + +void MenuTimeSavedView::setupScreen() +{ + MenuTimeSavedViewBase::setupScreen(); + + title.set(T_TEXT_TIME_UC); + + mDismissTimer.setDuration(kDismissTicks); + mDismissTimer.setCallback(mDismissCb); + mDismissTimer.start(); +} + +void MenuTimeSavedView::tearDownScreen() +{ + mDismissTimer.stop(); + MenuTimeSavedViewBase::tearDownScreen(); +} + +void MenuTimeSavedView::setTime(Menu::Id id) +{ + if (id == Menu::ID_OFF) { + Unicode::snprintf(messageTextBuffer, MESSAGETEXT_SIZE, "%s", touchgfx::TypedText(T_TEXT_OFF_UC).getText()); + } else { + Unicode::snprintf(messageTextBuffer, MESSAGETEXT_SIZE, "%d %s", + Menu::kValues[id], touchgfx::TypedText(T_TEXT_MIN).getText()); + } + messageText.invalidate(); +} + +void MenuTimeSavedView::onDismiss() +{ + application().gotoMenuAlertsScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/model/Model.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/model/Model.cpp new file mode 100644 index 00000000..8be638d2 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/model/Model.cpp @@ -0,0 +1,326 @@ +#include +#include +#include + +#include "SDK/Kernel/KernelProviderGUI.hpp" +#include "SDK/Port/TouchGFX/TouchGFXCommandProcessor.hpp" + +#define LOG_MODULE_PRX "Model" +#define LOG_MODULE_LEVEL LOG_LEVEL_INFO +#include "SDK/UnaLogger/Logger.h" + +Model::Model() + : modelListener(nullptr) + , mKernel(SDK::KernelProviderGUI::GetInstance().getKernel()) + , mSrvSender(mKernel) +{ + SDK::TouchGFXCommandProcessor::GetInstance().setAppLifeCycleCallback(this); + SDK::TouchGFXCommandProcessor::GetInstance().setCustomMessageHandler(this); + memcpy(mHrThresholds, CustomMessage::kHrThresholdsDefault, sizeof(mHrThresholds)); + +#if defined(SIMULATOR) + std::string fsPath = SDK::Simulator::KernelHolder::Get().getFsPath(); + LOG_INFO("Simulator.\n"); + LOG_INFO("FS path: [%s].\n", fsPath.c_str()); + LOG_INFO("Buttons: 1=L1 2=L2 3=R1 4=R2\n\n"); +#endif +} + +// Controls + +FrontendApplication& Model::application() +{ + return *static_cast(touchgfx::Application::getInstance()); +} + +App::MenuNav::Nav& Model::menu() +{ + return mMenu; +} + +void Model::invalidate() +{ + mInvalidate = true; +} + +void Model::tick() +{ +#if defined(SIMULATOR) + decIdleTimer(); +#else + if (mIsRunning) { + decIdleTimer(); + } +#endif + if (mInvalidate) { + mInvalidate = false; + application().invalidate(); + } +} + +void Model::handleKeyEvent(uint8_t key) +{ + LOG_DEBUG("key = %c\n", static_cast(key)); + if (isAnyKeyPressed(key)) { + resetIdleTimer(); + } +} + +void Model::resetIdleTimer() +{ + mIdleTimer = App::Config::kScreenTimeoutSteps; +} + +void Model::exitApp() +{ + LOG_INFO("Manually exiting the application\n"); + + SDK::TouchGFXCommandProcessor::GetInstance().setAppLifeCycleCallback(nullptr); + SDK::TouchGFXCommandProcessor::GetInstance().setCustomMessageHandler(nullptr); + + mKernel.sys.exit(); + // On simulator sys.exit() only sets a flag -- the current tick completes normally. +} + + +// Date/Time + +void Model::getDate(uint8_t& month, uint8_t& day, uint8_t& weekday) +{ + month = static_cast(mTime.tm_mon); + day = static_cast(mTime.tm_mday); + weekday = static_cast(mTime.tm_wday); +} + +void Model::getTime(uint8_t& h, uint8_t& m, uint8_t& s) +{ + h = static_cast(mTime.tm_hour); + m = static_cast(mTime.tm_min); + s = static_cast(mTime.tm_sec); +} + +// Power + +uint8_t Model::getBatteryLevel() const +{ + return mBatteryLevel; +} + + +// Settings + +bool Model::isUnitsImperial() const +{ + return mUnitsImperial; +} + +const uint8_t* Model::getHrThresholds() const +{ + return mHrThresholds; +} + +uint8_t Model::getHrThresholdsCount() const +{ + return mHrThresholdsCount; +} + +const Settings& Model::getSettings() const +{ + return mSettings; +} + +void Model::saveSettings(const Settings& sett) +{ + mSettings = sett; + mSrvSender.settingsSave(mSettings); +} + + +// Track + +void Model::trackStart() +{ + mSrvSender.trackStart(); +} + +bool Model::isTrackActive() const +{ + return mTrackState != Track::State::INACTIVE; +} + +void Model::trackPause() +{ + mSrvSender.trackPause(); +} + +void Model::trackResume() +{ + mSrvSender.trackResume(); +} + +bool Model::isTrackPaused() const +{ + return mTrackState == Track::State::PAUSED; +} + +const Track::Data& Model::getTrackData() const +{ + return mTrackData; +} + +void Model::saveLap() +{ + mSrvSender.manualLap(); +} + +void Model::saveTrack() +{ + mSrvSender.trackStop(false); +} + +void Model::discardTrack() +{ + mSrvSender.trackStop(true); +} + +bool Model::isTrackSummaryAvailable() const +{ + return mActivitySummary != nullptr && mActivitySummary->time != 0; +} + +const ActivitySummary& Model::getTrackSummary() const +{ + return *mActivitySummary; +} + + +// Private + +void Model::decIdleTimer() +{ + if (mIdleTimer > 0) { + if (--mIdleTimer == 0) { + modelListener->onIdleTimeout(); + } + } +} + +bool Model::isAnyKeyPressed(uint8_t key) const +{ + return key == SDK::GUI::Button::L1 || + key == SDK::GUI::Button::L2 || + key == SDK::GUI::Button::R1 || + key == SDK::GUI::Button::R2; +} + + +// IGuiLifeCycleCallback + +void Model::onStart() +{ + LOG_INFO("Started\n"); +} + +void Model::onResume() +{ + mIsRunning = true; + resetIdleTimer(); + invalidate(); +} + +void Model::onSuspend() +{ + mIsRunning = false; +} + +void Model::onStop() +{ + LOG_INFO("Force exit from the application\n"); +} + + +// ICustomMessageHandler + +bool Model::customMessageHandler(SDK::MessageBase* message) +{ + switch (message->getType()) { + case CustomMessage::SETTINGS_UPDATE: { + LOG_DEBUG("SETTINGS_UPDATE\n"); + auto* msg = static_cast(message); + mSettings = msg->settings; + mUnitsImperial = msg->unitsImperial; + memcpy(mHrThresholds, msg->hrThresholds, sizeof(mHrThresholds)); + mHrThresholdsCount = msg->hrThresholdsCount; + modelListener->onSettings(mSettings); + } break; + + case CustomMessage::LOCAL_TIME: { + auto* msg = static_cast(message); + std::tm newTime = msg->localTime; + LOG_DEBUG("LOCAL_TIME %04u-%02u-%02u %02u:%02u:%02u\n", + newTime.tm_year + 1900, newTime.tm_mon + 1, newTime.tm_mday, + newTime.tm_hour, newTime.tm_min, newTime.tm_sec); + + const bool dateChanged = newTime.tm_year != mTime.tm_year || + newTime.tm_mon != mTime.tm_mon || + newTime.tm_mday != mTime.tm_mday; + const bool timeChanged = newTime.tm_hour != mTime.tm_hour || + newTime.tm_min != mTime.tm_min || + newTime.tm_sec != mTime.tm_sec; + mTime = newTime; + + if (dateChanged) { + modelListener->onDate(mTime.tm_year + 1900, mTime.tm_mon + 1, + mTime.tm_mday, mTime.tm_wday); + } + if (timeChanged) { + modelListener->onTime(mTime.tm_hour, mTime.tm_min, mTime.tm_sec); + } + } break; + + case CustomMessage::BATTERY: { + auto* msg = static_cast(message); + LOG_DEBUG("BATTERY Level %u\n", msg->level); + if (mBatteryLevel != msg->level) { + mBatteryLevel = msg->level; + modelListener->onBatteryLevel(mBatteryLevel); + } + } break; + + case CustomMessage::TRACK_STATE_UPDATE: { + LOG_DEBUG("TRACK_STATE_UPDATE\n"); + auto* msg = static_cast(message); + if (mTrackState != msg->state) { + mTrackState = msg->state; + modelListener->onTrackState(mTrackState); + } + } break; + + case CustomMessage::TRACK_DATA_UPDATE: { + LOG_DEBUG("TRACK_DATA_UPDATE\n"); + auto* msg = static_cast(message); + mTrackData = msg->data; + modelListener->onTrackData(mTrackData); + } break; + + case CustomMessage::LAP_END: { + LOG_DEBUG("LAP_END\n"); + auto* msg = static_cast(message); + modelListener->onLapChanged(msg->lapNum); + } break; + + case CustomMessage::SUMMARY: { + LOG_DEBUG("SUMMARY\n"); + auto* msg = static_cast(message); + if (msg->summary) { + mActivitySummary = msg->summary; + modelListener->onActivitySummary(*mActivitySummary); + } + } break; + + default: + break; + } + + return true; +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/track_screen/TrackPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/track_screen/TrackPresenter.cpp new file mode 100644 index 00000000..236f69bc --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/track_screen/TrackPresenter.cpp @@ -0,0 +1,58 @@ +#include +#include + +TrackPresenter::TrackPresenter(TrackView& v) + : view(v) +{ + +} + +void TrackPresenter::activate() +{ + // Reset nested action menu position + model->menu().track.action.reset(); + + view.setPositionId(model->menu().track.get()); + + view.setConfig(model->isUnitsImperial(), model->getHrThresholds(), model->getHrThresholdsCount()); + + onTrackData(model->getTrackData()); + + uint8_t hour; + uint8_t minute; + uint8_t sec; + model->getTime(hour, minute, sec); + view.setTime(hour, minute); + + view.setBatteryLevel(model->getBatteryLevel()); +} + +void TrackPresenter::deactivate() +{ + model->menu().track.set(view.getPositionId()); +} + +void TrackPresenter::onTrackData(const Track::Data& data) +{ + view.setTrackData(data); +} + +void TrackPresenter::onBatteryLevel(uint8_t lvl) +{ + view.setBatteryLevel(lvl); +} + +void TrackPresenter::onTime(uint8_t hour, uint8_t minute, uint8_t sec) +{ + view.setTime(hour, minute); +} + +void TrackPresenter::onLapChanged(uint8_t lapEnd) +{ + model->application().gotoTrackLapScreenNoTransition(); +} + +void TrackPresenter::saveLap() +{ + model->saveLap(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/track_screen/TrackView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/track_screen/TrackView.cpp new file mode 100644 index 00000000..29e14c8d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/track_screen/TrackView.cpp @@ -0,0 +1,120 @@ +#include +#include + +using FaceId = App::MenuNav::TrackView::Id; + +TrackView::TrackView() +{ + +} + +void TrackView::setupScreen() +{ + TrackViewBase::setupScreen(); + + buttons.setL1(Buttons::NONE); + buttons.setL2(Buttons::NONE); + buttons.setR1(Buttons::NONE); + buttons.setR2(Buttons::AMBER); + + scrollIndicator.setConfig(ScrollIndicator::kSmall); + scrollIndicator.setCount(FaceId::ID_COUNT); +} + +void TrackView::tearDownScreen() +{ + TrackViewBase::tearDownScreen(); +} + +void TrackView::setPositionId(uint16_t id) +{ + if (id < static_cast(FaceId::ID_TRACK1)) { + id = FaceId::ID_TRACK1; + } + if (id >= FaceId::ID_COUNT) { + id = FaceId::ID_COUNT - 1; + } + mCurrentFaceId = id; + + trackFaceTotal.setVisible(false); + trackFaceLap.setVisible(false); + trackFaceStatus.setVisible(false); + + scrollIndicator.setActiveId(id); + + switch (id) { + case FaceId::ID_TRACK1: trackFaceTotal.setVisible(true); break; + case FaceId::ID_TRACK2: trackFaceLap.setVisible(true); break; + case FaceId::ID_TRACK3: trackFaceStatus.setVisible(true); break; + default: break; + } + + trackFaceTotal.invalidate(); + trackFaceLap.invalidate(); + trackFaceStatus.invalidate(); +} + +uint16_t TrackView::getPositionId() +{ + return mCurrentFaceId; +} + +void TrackView::setConfig(bool isImperial, const uint8_t* thresholds, uint8_t thresholdCount) +{ + mIsImperial = isImperial; + mHrThresholdCount = thresholdCount < App::Config::kHrThresholdsCount ? + thresholdCount : static_cast(App::Config::kHrThresholdsCount); + memcpy(mHrThresholds, thresholds, mHrThresholdCount); +} + +void TrackView::setTrackData(const Track::Data& data) +{ + trackFaceTotal.setHR(data.hr, mHrThresholds, mHrThresholdCount); + trackFaceTotal.setCalories(data.totalCalories); + trackFaceTotal.setTimer(data.totalTime); + + trackFaceLap.setLapAvgHR(data.avgLapHR); + trackFaceLap.setLapNumber(data.lapNum); + trackFaceLap.setTimer(data.lapTime); + +} + +void TrackView::setTime(uint8_t h, uint8_t m) +{ + trackFaceStatus.setTime(h, m); +} + +void TrackView::setBatteryLevel(uint8_t level) +{ + trackFaceStatus.setBatteryLevel(level); +} + +void TrackView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + uint16_t p = mCurrentFaceId; + if (p <= FaceId::ID_TRACK1) { + p = FaceId::ID_COUNT - 1; + } else { + p--; + } + setPositionId(p); + } + + if (key == SDK::GUI::Button::L2) { + uint16_t p = mCurrentFaceId + 1u; + if (p >= FaceId::ID_COUNT) { + p = FaceId::ID_TRACK1; + } + setPositionId(p); + } + + if (key == SDK::GUI::Button::R1) { + application().gotoTrackActionScreenNoTransition(); + } + + if (key == SDK::GUI::Button::R2) { + presenter->saveLap(); + application().gotoTrackLapScreenNoTransition(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackaction_screen/TrackActionPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackaction_screen/TrackActionPresenter.cpp new file mode 100644 index 00000000..8aa00e34 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackaction_screen/TrackActionPresenter.cpp @@ -0,0 +1,37 @@ +#include +#include + +TrackActionPresenter::TrackActionPresenter(TrackActionView& v) + : view(v) +{ +} + +void TrackActionPresenter::activate() +{ + view.setUnitsImperial(model->isUnitsImperial()); + onTrackData(model->getTrackData()); + + // Reset idle timer + model->resetIdleTimer(); + + view.setPositionId(model->menu().track.action.get()); + + model->trackPause(); +} + +void TrackActionPresenter::deactivate() +{ + model->menu().track.action.set(view.getPositionId()); +} + +void TrackActionPresenter::onTrackData(const Track::Data& data) +{ + view.setTimer(data.totalTime); + view.setCalories(data.totalCalories); + view.setAvgHR(data.avgHR); +} + +void TrackActionPresenter::resumeTrack() +{ + model->trackResume(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackaction_screen/TrackActionView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackaction_screen/TrackActionView.cpp new file mode 100644 index 00000000..310ef6b7 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackaction_screen/TrackActionView.cpp @@ -0,0 +1,175 @@ +#include + +constexpr uint16_t kTrackTitleInfoSwitchPeriod = SDK::Utils::secToTicks(3, App::Config::kFrameRate); + +TrackActionView::TrackActionView() : + mUpdateItemCb(this, &TrackActionView::updateItem), + mUpdateCenterItemCb(this, &TrackActionView::updateCenterItem), + mCarouselCb(this, &TrackActionView::onCarouselUpdate) +{ +} + +void TrackActionView::setupScreen() +{ + TrackActionViewBase::setupScreen(); + + menuLayout.showTitle(false); + + menuLayout.getButtons().setL1(Buttons::NONE); + menuLayout.getButtons().setL2(Buttons::NONE); + menuLayout.getButtons().setR1(Buttons::AMBER); + menuLayout.getButtons().setR2(Buttons::NONE); + + menuLayout.setAnimationSteps(App::Config::kMenuAnimationSteps); + menuLayout.setUpdateItemCallback(mUpdateItemCb); + menuLayout.setUpdateCenterItemCallback(mUpdateCenterItemCb); + menuLayout.setNumberOfItems(Menu::ID_COUNT); + + mItemLayout.simple.msgOffsetY = -6; + menuLayout.getMenu().setItemLayout(mItemLayout); + + infoCarousel.setPeriod(kTrackTitleInfoSwitchPeriod); + infoCarousel.setUpdateCallback(mCarouselCb); + infoCarousel.setCount(2); // fires onCarouselUpdate(0) immediately + + menuLayout.invalidate(); +} + +void TrackActionView::tearDownScreen() +{ + TrackActionViewBase::tearDownScreen(); +} + +// ---- Presenter -> View ------------------------------------------------------ + +void TrackActionView::setPositionId(uint16_t id) +{ + menuLayout.selectItem(id); +} + +uint16_t TrackActionView::getPositionId() +{ + return menuLayout.getSelectedItem(); +} + +void TrackActionView::setUnitsImperial(bool isImperial) +{ + mIsImperial = isImperial; + infoCarousel.refresh(); +} + +void TrackActionView::setTimer(std::time_t sec) +{ + pauseIndicator.setTime(sec); +} + +void TrackActionView::setCalories(float calories) +{ + mCalories = calories; + infoCarousel.refresh(); +} + +void TrackActionView::setAvgHR(float hr) +{ + mAvgHr = hr; + infoCarousel.refresh(); +} + +// ---- Menu callbacks -------------------------------------------------------- + +void TrackActionView::updateItem(MainMenuItem& item, int16_t index) +{ + static const TypedTextId sIds[Menu::ID_COUNT] = { + T_TEXT_RESUME, + T_TEXT_SUMMARY, + T_TEXT_SAVE, + T_TEXT_DISCARD, + }; + + if (index < 0 || index >= static_cast(Menu::ID_COUNT)) return; + + MenuItemConfig cfg; + cfg.msgId = sIds[index]; + item.apply(cfg); +} + +void TrackActionView::updateCenterItem(MainMenuCenterItem& item, int16_t index) +{ + static const TypedTextId sIds[Menu::ID_COUNT] = { + T_TEXT_RESUME, + T_TEXT_SUMMARY, + T_TEXT_SAVE, + T_TEXT_DISCARD, + }; + + if (index < 0 || index >= static_cast(Menu::ID_COUNT)) return; + + MenuItemConfig cfg; + cfg.msgId = sIds[index]; + item.apply(cfg); +} + +// ---- Carousel callback ----------------------------------------------------- + +void TrackActionView::onCarouselUpdate(int16_t index) +{ + const uint16_t kBufSize = 10; + touchgfx::Unicode::UnicodeChar buf[kBufSize] {}; + + switch (index) { + + case 0: + infoCarousel.setTitle(T_TEXT_AVG_DOT_HR); + if (mAvgHr < App::Display::kMinHR) { + Unicode::snprintf(buf, kBufSize, "---"); + } else { + Unicode::snprintfFloat(buf, kBufSize, "%.0f", mAvgHr); + } + break; + + case 1: + infoCarousel.setTitle(T_TEXT_CALORIE_UC); + Unicode::snprintfFloat(buf, kBufSize, "%.0f", mCalories); + break; + + default: + break; + } + + infoCarousel.setValue(buf); +} + +// ---- Input ----------------------------------------------------------------- + +void TrackActionView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + menuLayout.selectPrev(); + infoCarousel.refresh(); // tick visibility depends on selected item + } + + if (key == SDK::GUI::Button::L2) { + menuLayout.selectNext(); + infoCarousel.refresh(); + } + + if (key == SDK::GUI::Button::R1) { + switch (menuLayout.getSelectedItem()) { + case Menu::ID_RESUME: + presenter->resumeTrack(); + application().gotoTrackScreenNoTransition(); + break; + case Menu::ID_SUMMARY: + application().gotoTrackSummaryScreenNoTransition(); + break; + case Menu::ID_SAVE: + application().gotoTrackSavedScreenNoTransition(); + break; + case Menu::ID_DISCARD: + application().gotoTrackDiscardConfirmationScreenNoTransition(); + break; + default: + break; + } + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationPresenter.cpp new file mode 100644 index 00000000..4f6527d5 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationPresenter.cpp @@ -0,0 +1,19 @@ +#include +#include + +TrackDiscardConfirmationPresenter::TrackDiscardConfirmationPresenter(TrackDiscardConfirmationView& v) + : view(v) +{ + +} + +void TrackDiscardConfirmationPresenter::activate() +{ + // Reset idle timer + model->resetIdleTimer(); +} + +void TrackDiscardConfirmationPresenter::deactivate() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationView.cpp new file mode 100644 index 00000000..4b8a75dd --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscardconfirmation_screen/TrackDiscardConfirmationView.cpp @@ -0,0 +1,42 @@ +#include + +TrackDiscardConfirmationView::TrackDiscardConfirmationView() +{ + +} + +void TrackDiscardConfirmationView::setupScreen() +{ + TrackDiscardConfirmationViewBase::setupScreen(); + + title.set(T_TEXT_APP_NAME_UC); + + buttons.setL1(Buttons::NONE); + buttons.setL2(Buttons::NONE); + buttons.setR1(Buttons::AMBER); + buttons.setR2(Buttons::WHITE); +} + +void TrackDiscardConfirmationView::tearDownScreen() +{ + TrackDiscardConfirmationViewBase::tearDownScreen(); +} + +void TrackDiscardConfirmationView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + + } + + if (key == SDK::GUI::Button::L2) { + + } + + if (key == SDK::GUI::Button::R1) { + application().gotoTrackDiscardedScreenNoTransition(); + } + + if (key == SDK::GUI::Button::R2) { + application().gotoTrackActionScreenNoTransition(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscarded_screen/TrackDiscardedPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscarded_screen/TrackDiscardedPresenter.cpp new file mode 100644 index 00000000..2da0b991 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscarded_screen/TrackDiscardedPresenter.cpp @@ -0,0 +1,26 @@ +#include +#include + +TrackDiscardedPresenter::TrackDiscardedPresenter(TrackDiscardedView& v) + : view(v) +{ + +} + +void TrackDiscardedPresenter::activate() +{ + // Reset idle timer + model->resetIdleTimer(); + + model->discardTrack(); +} + +void TrackDiscardedPresenter::deactivate() +{ + +} + +void TrackDiscardedPresenter::exitApp() +{ + model->exitApp(); +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscarded_screen/TrackDiscardedView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscarded_screen/TrackDiscardedView.cpp new file mode 100644 index 00000000..62e13141 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackdiscarded_screen/TrackDiscardedView.cpp @@ -0,0 +1,31 @@ +#include + + +static constexpr uint16_t kDismissTicks = SDK::Utils::secToTicks(2, App::Config::kFrameRate); + +TrackDiscardedView::TrackDiscardedView() + : mDismissCb(this, &TrackDiscardedView::onDismiss) +{ +} + +void TrackDiscardedView::setupScreen() +{ + TrackDiscardedViewBase::setupScreen(); + + title.set(T_TEXT_APP_NAME_UC); + + mDismissTimer.setDuration(kDismissTicks); + mDismissTimer.setCallback(mDismissCb); + mDismissTimer.start(); +} + +void TrackDiscardedView::tearDownScreen() +{ + mDismissTimer.stop(); + TrackDiscardedViewBase::tearDownScreen(); +} + +void TrackDiscardedView::onDismiss() +{ + presenter->exitApp(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracklap_screen/TrackLapPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracklap_screen/TrackLapPresenter.cpp new file mode 100644 index 00000000..ed4626b0 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracklap_screen/TrackLapPresenter.cpp @@ -0,0 +1,26 @@ +#include +#include + +TrackLapPresenter::TrackLapPresenter(TrackLapView& v) + : view(v) +{ +} + +void TrackLapPresenter::activate() +{ + // Reset idle timer + model->resetIdleTimer(); + + view.setUnitsImperial(model->isUnitsImperial()); + + const Track::Data& data = model->getTrackData(); + + view.setLapNum(data.lapNum); + view.setTimer(data.lapTime); + view.setAvgLapHR(data.avgLapHR); + view.setLapCalories(data.lapCalories); +} + +void TrackLapPresenter::deactivate() +{ +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracklap_screen/TrackLapView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracklap_screen/TrackLapView.cpp new file mode 100644 index 00000000..e1956c93 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracklap_screen/TrackLapView.cpp @@ -0,0 +1,87 @@ +#include +#include + + +static constexpr uint16_t kDismissTicks = SDK::Utils::secToTicks(5, App::Config::kFrameRate); + +TrackLapView::TrackLapView() + : mDismissCb(this, &TrackLapView::onDismiss) +{ +} + +void TrackLapView::setupScreen() +{ + TrackLapViewBase::setupScreen(); + + buttons.setL1(Buttons::NONE); + buttons.setL2(Buttons::NONE); + buttons.setR1(Buttons::NONE); + buttons.setR2(Buttons::NONE); + + mDismissTimer.setDuration(kDismissTicks); + mDismissTimer.setCallback(mDismissCb); + mDismissTimer.start(); +} + +void TrackLapView::tearDownScreen() +{ + mDismissTimer.stop(); + TrackLapViewBase::tearDownScreen(); +} + +void TrackLapView::setUnitsImperial(bool isImperial) +{ + mIsImperial = isImperial; +} + +void TrackLapView::setLapNum(uint32_t n) +{ + const uint16_t kBuffSize = 16; + touchgfx::Unicode::UnicodeChar buffer[kBuffSize] { }; + + Unicode::snprintf(buffer, kBuffSize, "%s %u", + touchgfx::TypedText(T_TEXT_LAP).getText(), n + 1); + + title.set(buffer); +} + +void TrackLapView::setAvgLapHR(float hr) +{ + if (hr < App::Display::kMinHR) { + Unicode::snprintf(hrValueBuffer, HRVALUE_SIZE, "---"); + } else { + Unicode::snprintfFloat(hrValueBuffer, HRVALUE_SIZE, "%.0f", hr); + } + hrValue.invalidate(); +} + +void TrackLapView::setLapCalories(float calories) +{ + Unicode::snprintfFloat(caloriesValueBuffer, CALORIESVALUE_SIZE, "%.0f", calories); + caloriesValue.invalidate(); +} + +void TrackLapView::setTimer(std::time_t sec) +{ + auto hms = SDK::Utils::toHMS(sec); + if (hms.h == 0) { + Unicode::snprintf(timeValueBuffer, TIMEVALUE_SIZE, "%u:%02u", hms.m, hms.s); + } else { + Unicode::snprintf(timeValueBuffer, TIMEVALUE_SIZE, "%u:%02u", hms.h, hms.m); + } + timeValue.invalidate(); +} + +void TrackLapView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L2) { + // Disabled by design + //mDismissTimer.stop(); + //application().gotoTrackScreenNoTransition(); + } +} + +void TrackLapView::onDismiss() +{ + application().gotoTrackScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksaved_screen/TrackSavedPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksaved_screen/TrackSavedPresenter.cpp new file mode 100644 index 00000000..c1f58237 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksaved_screen/TrackSavedPresenter.cpp @@ -0,0 +1,18 @@ +#include +#include + +TrackSavedPresenter::TrackSavedPresenter(TrackSavedView& v) + : view(v) +{ + +} + +void TrackSavedPresenter::activate() +{ + model->saveTrack(); +} + +void TrackSavedPresenter::deactivate() +{ + +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksaved_screen/TrackSavedView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksaved_screen/TrackSavedView.cpp new file mode 100644 index 00000000..6e1384c9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksaved_screen/TrackSavedView.cpp @@ -0,0 +1,31 @@ +#include + + +static constexpr uint16_t kDismissTicks = SDK::Utils::secToTicks(2, App::Config::kFrameRate); + +TrackSavedView::TrackSavedView() + : mDismissCb(this, &TrackSavedView::onDismiss) +{ +} + +void TrackSavedView::setupScreen() +{ + TrackSavedViewBase::setupScreen(); + + title.set(T_TEXT_APP_NAME_UC); + + mDismissTimer.setDuration(kDismissTicks); + mDismissTimer.setCallback(mDismissCb); + mDismissTimer.start(); +} + +void TrackSavedView::tearDownScreen() +{ + mDismissTimer.stop(); + TrackSavedViewBase::tearDownScreen(); +} + +void TrackSavedView::onDismiss() +{ + application().gotoTrackSummaryScreenNoTransition(); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackstartconfirmation_screen/TrackStartConfirmationPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackstartconfirmation_screen/TrackStartConfirmationPresenter.cpp new file mode 100644 index 00000000..4bccf8b1 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackstartconfirmation_screen/TrackStartConfirmationPresenter.cpp @@ -0,0 +1,30 @@ +#include +#include + +TrackStartConfirmationPresenter::TrackStartConfirmationPresenter(TrackStartConfirmationView& v) + : view(v) +{ + +} + +void TrackStartConfirmationPresenter::activate() +{ + // Reset idle timer + model->resetIdleTimer(); +} + +void TrackStartConfirmationPresenter::deactivate() +{ + +} + +void TrackStartConfirmationPresenter::onIdleTimeout() +{ + model->application().gotoMainScreenNoTransition(); +} + +void TrackStartConfirmationPresenter::startTrack() +{ + model->trackStart(); + model->application().gotoTrackScreenNoTransition(); +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackstartconfirmation_screen/TrackStartConfirmationView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackstartconfirmation_screen/TrackStartConfirmationView.cpp new file mode 100644 index 00000000..b4730e57 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/trackstartconfirmation_screen/TrackStartConfirmationView.cpp @@ -0,0 +1,42 @@ +#include + +TrackStartConfirmationView::TrackStartConfirmationView() +{ + +} + +void TrackStartConfirmationView::setupScreen() +{ + TrackStartConfirmationViewBase::setupScreen(); + + title.set(T_TEXT_APP_NAME_UC); + + buttons.setL1(Buttons::NONE); + buttons.setL2(Buttons::NONE); + buttons.setR1(Buttons::AMBER); + buttons.setR2(Buttons::WHITE); +} + +void TrackStartConfirmationView::tearDownScreen() +{ + TrackStartConfirmationViewBase::tearDownScreen(); +} + +void TrackStartConfirmationView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L1) { + + } + + if (key == SDK::GUI::Button::L2) { + + } + + if (key == SDK::GUI::Button::R1) { + presenter->startTrack(); + } + + if (key == SDK::GUI::Button::R2) { + application().gotoMainScreenNoTransition(); + } +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksummary_screen/TrackSummaryPresenter.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksummary_screen/TrackSummaryPresenter.cpp new file mode 100644 index 00000000..aa47dfa9 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksummary_screen/TrackSummaryPresenter.cpp @@ -0,0 +1,32 @@ +#include +#include + +TrackSummaryPresenter::TrackSummaryPresenter(TrackSummaryView& v) + : view(v) +{ +} + +void TrackSummaryPresenter::activate() +{ + model->resetIdleTimer(); + + view.setSummary(model->getTrackSummary(), model->isTrackPaused()); +} + +void TrackSummaryPresenter::deactivate() +{ +} + +void TrackSummaryPresenter::exitApp() +{ + model->exitApp(); +} + +void TrackSummaryPresenter::backToTrack() +{ + if (model->isTrackPaused()) { + model->application().gotoTrackActionScreenNoTransition(); + } else { + model->exitApp(); + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksummary_screen/TrackSummaryView.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksummary_screen/TrackSummaryView.cpp new file mode 100644 index 00000000..c09b710e --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/gui/src/tracksummary_screen/TrackSummaryView.cpp @@ -0,0 +1,121 @@ +#include +#include + +TrackSummaryView::TrackSummaryView() +{ +} + +void TrackSummaryView::setupScreen() +{ + TrackSummaryViewBase::setupScreen(); + + buttons.setL1(Buttons::NONE); + buttons.setL2(Buttons::NONE); + buttons.setR1(Buttons::NONE); + buttons.setR2(Buttons::NONE); + + scrollIndicator.setConfig(ScrollIndicator::kSmall); + scrollIndicator.setCount(3); + scrollIndicator.setActiveId(FACE_OVERVIEW); + + mCurrentFace = FACE_OVERVIEW; + updateFace(); +} + +void TrackSummaryView::tearDownScreen() +{ + TrackSummaryViewBase::tearDownScreen(); +} + +void TrackSummaryView::setSummary(const ActivitySummary& s, bool isPaused) +{ + mTrackIsPaused = isPaused; + + summaryFaceOverview.setTotalTime(s.time); + summaryFaceOverview.setAvgHR(s.hrAvg); + summaryFaceOverview.setMaxHR(s.hrMax); + + summaryFaceCal.setTotalTime(s.time); + summaryFaceCal.setTotalCalories(s.calories); + summaryFaceCal.setActiveCalories(s.activeCalories); + summaryFaceCal.setRestingCalories(s.restingCalories); + + summaryFaceZones.setZoneSummary(s); + + summaryFaceLaps.setLaps(s.laps); + mLapsPageCount = summaryFaceLaps.getPageCount(); + scrollIndicator.setCount(3 + mLapsPageCount); + + if (isPaused) { + buttons.setR1(Buttons::NONE); + buttons.setR2(Buttons::AMBER); + } else { + buttons.setR1(Buttons::AMBER); + buttons.setR2(Buttons::NONE); + } +} + +void TrackSummaryView::updateFace() +{ + summaryFaceOverview.setVisible(mCurrentFace == FACE_OVERVIEW); + summaryFaceCal.setVisible(mCurrentFace == FACE_CALORIES); + summaryFaceZones.setVisible(mCurrentFace == FACE_ZONES); + summaryFaceLaps.setVisible(mCurrentFace == FACE_LAPS); + + summaryFaceOverview.invalidate(); + summaryFaceCal.invalidate(); + summaryFaceZones.invalidate(); + summaryFaceLaps.invalidate(); + + updateScrollIndicator(); +} + +void TrackSummaryView::updateScrollIndicator() +{ + const uint8_t id = (mCurrentFace < FACE_LAPS) + ? mCurrentFace + : static_cast(FACE_LAPS + summaryFaceLaps.getScrollPage()); + scrollIndicator.animateToId(id); +} + +void TrackSummaryView::handleKeyEvent(uint8_t key) +{ + if (key == SDK::GUI::Button::L2) { + if (mCurrentFace == FACE_LAPS) { + if (summaryFaceLaps.canScrollDown()) { + summaryFaceLaps.scrollDown(); + updateScrollIndicator(); + } + } else if (mCurrentFace < FACE_ZONES || mLapsPageCount > 0) { + mCurrentFace++; + updateFace(); + } + return; + } + + if (key == SDK::GUI::Button::L1) { + if (mCurrentFace == FACE_LAPS) { + if (summaryFaceLaps.canScrollUp()) { + summaryFaceLaps.scrollUp(); + updateScrollIndicator(); + } else { + mCurrentFace--; + updateFace(); + } + } else if (mCurrentFace > FACE_OVERVIEW) { + mCurrentFace--; + updateFace(); + } + return; + } + + if (key == SDK::GUI::Button::R1) { + if (!mTrackIsPaused) presenter->backToTrack(); + return; + } + + if (key == SDK::GUI::Button::R2) { + if (mTrackIsPaused) presenter->backToTrack(); + return; + } +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/ConfigurationSimulator.hpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/ConfigurationSimulator.hpp new file mode 100644 index 00000000..df625359 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/ConfigurationSimulator.hpp @@ -0,0 +1,48 @@ +/** + ****************************************************************************** + * @file GonfigurationSimulator.hpp + * @date 28-March-2026 + * @author Vlad Andriyash + * @brief Gonfiguration Simulator file + * + ****************************************************************************** + * + ****************************************************************************** + */ + +#ifndef __CONFIG_SIMULATOR_HPP +#define __CONFIG_SIMULATOR_HPP + +#include + +//GPS Sensor +#define GSP_SIM_ENABLE 1 // 0 - Disable +#define GSP_SIM_SPEED_MIN 15 // km/h +#define GPS_SIM_SPEED_BASE 20 // km/h +#define GPS_SIM_SPEED_MAX 25 // km/h +#define GPS_SIM_TIME_SEACH_SATELLITE 4 // seconds + +//HeatRate Sensor +#define HEAT_RATE_SIM_ENABLE 1 // 0 - Disable +#define HEAT_RATE_SIM_MIN_HR 120 // Max - 255 +#define HEAT_RATE_SIM_MAX_HR 180 // Max - 255 +#define HEAT_RATE_SIM_TYPE_TRAINING 1// 0 - Cycling, 1 - Hiking, 2 - Running + +// Pressure Sensor +#define PRESSURE_SIM_ENABLE 1 // 0 - Disable +#define PRESSURE_SIM_PRESS_VALLUE 1020.2 + +// Battery Level Sensor +#define BATT_LEVEL_SIM_ENABLE 1 // 0 - Disable +#define BATT_LEVEL_SIM_START_VALUE 100 // 10 - 100% +#define BATT_LEVEL_SIM_STEP_VALUE 0.2 //percent + +// IMU Writs Sensor +#define IMU_WRIST_SIM_ENABLE 1 // 0 - Disable +#define IMU_WRIST_SIM_WRIST_DETECT_KEY '5' // char type + +// IMU StepCounter Sensor +#define IMU_STEP_COUNTER_SIM_ENABLE 1 // 0 - Disable +#define IMU_STEP_COUNTER_SIM_STRIDE_LENGTH 1 //meters per step. Walking 0.65–0.75 m, hiking 0.55–0.70 m, running 1.0–1.4 m + +#endif /* __CONFIG_SIMULATOR_HPP */ \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/gcc/Makefile b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/gcc/Makefile new file mode 100644 index 00000000..995b14aa --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/gcc/Makefile @@ -0,0 +1,102 @@ +# Helper macros to convert spaces into question marks and back again +e := +sp := $(e) $(e) +qs = $(subst ?,$(sp),$1) +sq = $(subst $(sp),?,$1) + +# Get name of this Makefile (avoid getting word 0 and a starting space) +makefile_name := $(wordlist 1,1000,$(MAKEFILE_LIST)) + +# Get path of this Makefile +makefile_path := $(call qs,$(dir $(call sq,$(abspath $(call sq,$(makefile_name)))))) + +# Get path where the Application is +application_path := $(call qs,$(abspath $(call sq,$(makefile_path)../..))) + +.PHONY: clean assets all + +ifneq ($(words $(makefile_path))$(words $(MAKEFILE_LIST)),11) +all clean assets: +$(error Spaces not allowed in path) +else + +define replace_car +$(subst $(3),$(2),$(1)) +endef + +#Change symbol \ to / +SDK := $(call replace_car,$(UNA_SDK),/,\) +#Add path to seach source files in UNA-SDK +VPATH := $(SDK) + +#If you want to add a source file from UNA-SDK, just write the path starting with the internal UNA-SDK folder +ADDITIONAL_SOURCES_UNA :=\ +Libs/Source/Simulator/Kernel/Mock/Backlight.cpp\ +Libs/Source/Simulator/Kernel/Mock/Buzzer.cpp\ +Libs/Source/Simulator/Kernel/Mock/FileSystem.cpp\ +Libs/Source/Simulator/Kernel/Mock/Vibro.cpp\ +Libs/Source/UnaLogger/Logger.cpp\ +Libs/Source/Wrappers/StdLibWrappers.c\ +ThirdParty/coreJSON/source/core_json.c\ +ThirdParty/FitSDKRelease_21.202.00/c/fit.c\ +ThirdParty/FitSDKRelease_21.202.00/c/fit_convert.c\ +ThirdParty/FitSDKRelease_21.202.00/c/fit_crc.c\ +ThirdParty/FitSDKRelease_21.202.00/c/fit_product.c\ +Libs/Source/JSON/JsonStreamReader.cpp\ +Libs/Source/JSON/JsonStreamWriter.cpp\ +Libs/Source/TrackMap/TrackMapBuilder.cpp\ +Libs/Source/Kernel/KernelBuilder.cpp\ +Libs/Source/FitHelper/FitHelper.cpp\ +Libs/Source/Timer/Timer.cpp\ +Libs/Source/Port/TouchGFX/TouchGFXCommandProcessor.cpp\ +Libs/Source/SensorLayer/SensorConnection.cpp\ +Libs/Source/Simulator/App/DualAppComm.cpp\ +Libs/Source/Simulator/App/AppCore.cpp\ +Libs/Source/Simulator/App/AppMessageCore.cpp\ +Libs/Source/Simulator/App/KernelMessageDispatcher.cpp\ +Libs/Source/Simulator/App/MessageManager.cpp\ +Libs/Source/Simulator/Kernel/Kernel.cpp\ +Libs/Source/Simulator/Kernel/Mock/System.cpp\ +Libs/Source/Simulator/OS/OS.cpp\ +Libs/Source/Simulator/OS/SwTimer.cpp\ +Libs/Source/Simulator/OS/OneShotTimer.cpp\ +Libs/Source/Simulator/Components/SensorManager.cpp\ +Libs/Source/Simulator/Components/SensorDataSample.cpp\ +Libs/Source/Simulator/Components/SensorDataQueue.cpp\ +Libs/Source/Simulator/Components/SampleRateAdapter.cpp\ +Libs/Source/Simulator/Components/InstanceSensorLayer.cpp\ +Libs/Source/Simulator/Components/Sensors/Gps/GpsSpeed.cpp\ +Libs/Source/Simulator/Components/Sensors/Gps/GpsLocation.cpp\ +Libs/Source/Simulator/Components/Sensors/Gps/GpsDistance.cpp\ +Libs/Source/Simulator/Components/Sensors/Gps/GpsAltimeter.cpp\ +Libs/Source/Simulator/Components/Sensors/HeartRate/SensorHeartRateMetrics.cpp\ +Libs/Source/Simulator/Components/Sensors/SensorBatteryLevel.cpp\ +Libs/Source/Simulator/Components/Sensors/HeartRate/SensorHeartRate.cpp\ +Libs/Source/Simulator/Components/Sensors/SensorPressure.cpp\ +Libs/Source/Simulator/Components/Sensors/Imu/ImuWristMotion.cpp\ +Libs/Source/Simulator/Components/Sensors/Imu/ImuStepCounter.cpp\ +Libs/Source/Simulator/Components/ComponentSimulator.cpp\ +Libs/Source/Simulator/Components/Simulator/GpsStepCounterSimulator.cpp\ +Libs/Source/Simulator/Components/SensorListener.cpp\ +Libs/Source/Simulator/Components/SensorDriver.cpp\ +../../Libs/Sources/ActivitySummarySerializer.cpp\ +../../Libs/Sources/ActivityWriter.cpp\ +../../Libs/Sources/Service.cpp\ +../../Libs/Sources/SettingsSerializer.cpp\ +../../Libs/Sources/WristTiltDetector.cpp\ +ADDITIONAL_SOURCES := +ADDITIONAL_INCLUDE_PATHS := $(SDK)/Libs/Header\ +../../Libs/Header\ +$(SDK)/ThirdParty/coreJSON/source/include\ +$(SDK)/ThirdParty/FitSDKRelease_21.202.00/c\ +ADDITIONAL_LIBRARY_PATHS := +ADDITIONAL_LIBRARIES := + +export ADDITIONAL_SOURCES ADDITIONAL_INCLUDE_PATHS ADDITIONAL_LIBRARY_PATHS ADDITIONAL_LIBRARIES ADDITIONAL_SOURCES_UNA SDK VPATH + +all: $(filter assets,$(MAKECMDGOALS)) +all assets: $(filter clean,$(MAKECMDGOALS)) +all clean assets: + @$(MAKE) -r -f una/Makefile -s $(MFLAGS) $@ -C "$(application_path)" +endif + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/main.cpp b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/main.cpp new file mode 100644 index 00000000..4de05f61 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/main.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "touchgfx/Utils.hpp" + +#include "SDK/Kernel/KernelBuilder.hpp" +#include "SDK/Simulator/Kernel/Kernel.hpp" +#include "SDK/Kernel/KernelProviderGUI.hpp" +#include "SDK/Kernel/KernelProviderService.hpp" +#include "SDK/Simulator/OS/OS.hpp" +#include "SDK/Simulator/App/AppCore.hpp" +#include "SDK/Simulator/App/AppMessageCore.hpp" +#include "SDK/Simulator/App/KernelMessageDispatcher.hpp" +#include "SDK/Simulator/Kernel/Mock/Backlight.hpp" +#include "SDK/Simulator/Kernel/Mock/Buzzer.hpp" +#include "SDK/Simulator/Kernel/Mock/Vibro.hpp" + +#include "Service.hpp" + +#include +#include + +#ifdef __linux__ +#include +#else +#include "Windows.h" +#endif + +#define LOG_MODULE_PRX "main" +#define LOG_MODULE_LEVEL LOG_LEVEL_DEBUG +#include "SDK/UnaLogger/Logger.h" + +using namespace touchgfx; + +// Kernel thread function +static void kernelThreadFunction(App::Core* appCore) +{ + appCore->run(); +} + +// GUI communication thread +static void guiCommThreadFunction(App::Core* appCore) +{ + appCore->runGuiComm(); +} + +// Service thread function +static void serviceThreadFunction(Service* service) +{ + service->run(); +} + +// KernelMessage thread function +static void appMessageThreadFunction(SDK::App::KernelMessageDispatcher* appMessage) +{ + appMessage->run(); +} + +static int runTouchGFX(SDK::App::DualAppComm& appComm, + SDK::Simulator::Kernel& srvKernel, + SDK::Simulator::Kernel& guiKernel, + int argc, + char** argv) +{ + // Initialize Logger with Service's kernel. In real app Service and GUI will have each its own kernel. + Logger_init(srvKernel.getKernel().log); + + // Save Service's kernel for global access + SDK::KernelProviderService::CreateInstance(&srvKernel.getKernel()); + + // Save GUI's kernel for global access + SDK::KernelProviderGUI::CreateInstance(&guiKernel.getKernel()); + + // Create the Service of the application + Service service(SDK::KernelProviderService::GetInstance().getKernel()); + + // Create KernelMessageDispatcher core + SDK::Simulator::Mock::Backlight mBacklight; + SDK::Simulator::Mock::Buzzer mBuzzer; + SDK::Simulator::Mock::Vibro mVibro; + SDK::App::KernelMessageDispatcher kernelMessage(appComm, appComm.getMsgManager(), mVibro, mBacklight, mBuzzer); + + // Create the Application core + App::Core appCore(appComm, srvKernel, guiKernel); + + //For windows/linux, DMA transfers are simulated + touchgfx::NoDMA dma; + LCD& lcd = setupLCD(); + touchgfx::NoTouchController tc; + + touchgfx::HAL& hal = touchgfx::touchgfx_generic_init(dma, lcd, tc, SIM_WIDTH, SIM_HEIGHT, 0, 0); + + setupSimulator(argc, argv, hal); + + // Set custom frame rate + static_cast(hal).setVsyncInterval(1000.0f / SDK::GUI::Config::kFrameRate); + + //// Ensure there is a console window to print to using printf() or + //// std::cout, and read from using e.g. fgets or std::cin. + //// Alternatively, instead of using printf(), always use + //// touchgfx_printf() which will ensure there is a console to write + //// to. + touchgfx_enable_stdio(); + + // Start service thread + std::thread serviceThread(serviceThreadFunction, &service); + std::thread appThread(kernelThreadFunction, &appCore); + std::thread guiCommThread(guiCommThreadFunction, &appCore); + std::thread appMessageThread(appMessageThreadFunction, &kernelMessage); + + + touchgfx::HAL::getInstance()->taskEntry(); // Main GUI loop + + appCore.stopRequest(); + + // Stop threads + serviceThread.join(); + appThread.join(); + guiCommThread.join(); + appMessageThread.join(); + + return EXIT_SUCCESS; +} + +#ifdef __linux__ +int main(int argc, char** argv) +{ +#else +#include +#ifdef _UNICODE +#error Cannot run in unicode mode +#endif +int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + int argc; + char** argv = touchgfx::HALSDL2::getArgv(&argc); +#endif + + // Create kernel objects and service control + SDK::App::MessageCore appMessageCore; + + SDK::Simulator::Mock::SystemService serviceSystem; + SDK::Simulator::Kernel serviceKernel("service"); + serviceKernel.setIAppComm(appMessageCore.getAppComm().getServiceComm()); + serviceKernel.setISystem(&serviceSystem); + + SDK::Simulator::Mock::SystemGUI guiSystem; + SDK::Simulator::Kernel guiKernel("gui"); + guiKernel.setIAppComm(appMessageCore.getAppComm().getGuiComm()); + guiKernel.setISystem(&guiSystem); + + // Save GUI kernel for simulator + SDK::Simulator::KernelHolder::Create(guiKernel); + + return runTouchGFX(appMessageCore.getAppComm(), + serviceKernel, + guiKernel, + argc, + argv); +} diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.sln b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.sln new file mode 100644 index 00000000..04ca9d5d --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34408.163 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Application", "Application.vcxproj", "{3C47683C-0505-487F-A1FD-75B8490BF72C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3C47683C-0505-487F-A1FD-75B8490BF72C}.Debug|x86.ActiveCfg = Debug|Win32 + {3C47683C-0505-487F-A1FD-75B8490BF72C}.Debug|x86.Build.0 = Debug|Win32 + {3C47683C-0505-487F-A1FD-75B8490BF72C}.Release|x86.ActiveCfg = Release|Win32 + {3C47683C-0505-487F-A1FD-75B8490BF72C}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.vcxproj b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.vcxproj new file mode 100644 index 00000000..3cbea3cb --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.vcxproj @@ -0,0 +1,567 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {3C47683C-0505-487F-A1FD-75B8490BF72C} + Win32Proj + Application + 10.0 + + + + Application + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + + + + + + + + + + + + + + + + + true + $(ApplicationRoot)\build\$(Configuration)\bin\ + $(ApplicationRoot)\build\$(Configuration)\obj\ + + + false + $(ApplicationRoot)\build\$(Configuration)\bin\ + $(ApplicationRoot)\build\$(Configuration)\obj\ + + + + + + Level3 + Disabled + WIN32;_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;APP_ID="ABCDEF1234567890";DEV_ID="UNA Simulator";BUILD_VERSION="1.2.3";NOMINMAX;FIT_PRODUCT_RELEASE;%(PreprocessorDefinitions) + false + 4355 + true + false + stdcpp17 + %(AdditionalIncludeDirectories);../../gui/include;../../../../Libs/Header;$(SdkPath)/ThirdParty/FitSDKRelease_21.202.00/c;$(SdkPath)/ThirdParty/coreJSON/source/include + + + Windows + true + true + + %(AdditionalOptions) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING;NDEBUG;_CONSOLE;FIT_PRODUCT_RELEASE;%(PreprocessorDefinitions) + true + true + stdcpp17 + $(ApplicationRoot)\simulator;(ApplicationRoot)\gui\include;$(ApplicationRoot)\generated\images\include;$(ApplicationRoot)\generated\bitmaps\include;$(ApplicationRoot)\generated\fonts\include;$(ApplicationRoot)\generated\texts\include;$(ApplicationRoot)\generated\videos\include;$(ApplicationRoot)\generated\gui_generated\include;$(ApplicationRoot)\generated\simulator\include;$(TouchGFXReleasePath)\framework\common\include;$(TouchGFXReleasePath)\framework\mvp\include;$(TouchGFXReleasePath)\framework\include\platform\hal\simulator\sdl2\vendor;$(TouchGFXReleasePath)\3rdparty\libjpeg\include;$(TouchGFXReleasePath)\framework\include;../../gui/include + + + Windows + true + true + true + + + + + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.vcxproj.filters b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.vcxproj.filters new file mode 100644 index 00000000..a611d202 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/Application.vcxproj.filters @@ -0,0 +1,2017 @@ + + + + + {4D1BFFCC-9CEB-4ABF-A951-582870FE71FD} + h;hpp;hxx;hm;inl;inc;xsd + + + {29C60541-803D-4F43-8683-028D9DA5E0CB} + + + {AF2BF67C-89EC-4545-B0D2-5BD6803628D4} + + + {A8F51E02-A400-49F1-AC86-371872A7E5E6} + + + {493CF637-721C-4516-8638-3EE4790FB455} + + + {7187028B-6482-4EB3-8556-EECD38E0636B} + + + {D2E6B448-6B79-434F-A8EB-C8F8415957E9} + + + {07737357-9365-4A8F-B2F6-908B5FC4E808} + + + {085B248B-6BE1-4BF8-9913-35526BAEE4C7} + + + {E08C6B18-2F0E-4861-87D5-80FB0411017E} + + + {29D72404-E5CB-472C-B00F-3784DF3CCD1E} + + + {09561B72-532B-45EB-8E32-CAA31C349F83} + + + {A89B6308-CBC1-48EC-BF14-B3C6106FACCE} + + + {DB82A963-BE52-4494-BD5E-358C5E79C081} + + + {509E01BB-FBF4-4198-B748-936C1B67839A} + + + {3F023E56-225A-4D4C-9D20-74447A23BAD9} + + + {0E9A8FD3-B71B-46B9-B1F6-3A18292FFAC4} + + + {9B32A742-EBA9-4EBA-832E-0421D7E68BC5} + + + {8C31441B-2191-4B32-869D-7B253AECB28F} + + + {464CC9FB-AFF6-4FFA-B4D8-BCAC4B2B8898} + + + {B7237C13-DD69-4F78-8446-9A554431E3F8} + + + {5E0E884F-0059-4306-94BA-3197219750E3} + + + {DBFF640A-BD63-40BC-A0A5-2468BC461037} + + + {EA3962C0-553C-4CFD-A89B-A116A9493818} + + + {29C60541-803D-4F44-8783-028D9DA5E0CC} + + + {29C60541-803D-4F43-8683-028D9DA5E0CC} + + + {92BBFF14-FBDB-4755-BA47-A830D863D92B} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;ttf;otf;bdf;png;wav;xml;props;mfcribbon-ms + + + {AF899B0F-78BE-47F9-A912-E92CB9156E40} + + + {29E8A9F8-6504-4625-AB47-671A3F665E51} + + + {382278FD-2B19-4E89-AE4F-24AF77E7A270} + + + {C24EAEDB-9A3F-43DC-87FB-C7AC2729A078} + + + {2F3FC0AA-97C4-4366-9939-94A0FF4E028C} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {C07B02A9-A55E-47AA-AD61-59A6AAD754E6} + + + {33EDC2DB-AF72-480C-92E5-2A2833BCAB6F} + + + {1D8EFD90-430A-4539-9080-16A38861D20A} + + + {E8DECBF2-0C8E-4397-8603-3101D6F922D6} + + + {40F0D55D-79D9-488A-AF83-ADC96179EADF} + + + {3FB50DD5-31DA-4042-B7FD-2151C58CDA80} + + + {B48CB42B-0F9E-4815-BFE1-1ACC1150ED8A} + + + {C07B03A9-A55E-47AA-AD61-59A6AAD754E6} + + + {C07B02B9-A55E-47AB-AD61-59A6AAD754E6} + + + {C07B02B9-A55E-47AA-AD61-59A6AAD754E6} + + + 56CB138C-CFD0-A0EE-833B-AD28D1B4512A + + + 16773D8A-23C1-3956-9FC2-DAE101D52FA0 + + + F32817E6-3DEB-BFE8-110D-F6E3FD38AF1E + + + CD092808-4F60-2994-D149-689EE56DC046 + + + D3D41952-65CC-E40F-D8E4-A7BB3169CAB4 + + + 23F3D11A-F277-6CDA-17F7-5DB7F8718F9A + + + E6846738-A694-71B7-1486-D8FFC6B94219 + + + CEC9C1E3-7E5B-0095-3E6C-6AA9C90A7957 + + + A74FD522-93D5-DA25-B511-3D65F8772975 + + + 88E97328-415C-5E94-F511-7F5956C4A5AD + + + 6B6E9F0D-0971-1F1C-8DA1-4483493F62C3 + + + C9A0BBB1-4BEB-8CD2-6982-26654D3C09E2 + + + 46B7D464-311A-591F-AD2E-AD5C77A0EA63 + + + 94E01F87-DB76-902C-7138-CF36029A8FB7 + + + 6B1F0BC9-4996-BE14-87BB-7CC4F730CE64 + + + E51925A4-D8A1-C9E9-3AFA-5852FB086A96 + + + 54B68AB8-1135-8A46-B907-39D9F286D372 + + + 7EF39A15-A2D6-51F9-00CD-5F58F855E57B + + + 045B703E-2769-8C5D-C741-3BB18B1CF4A2 + + + D7D6EC85-EC3E-AC42-4285-C7B18043B0D1 + + + 1CD958FF-460B-F0CF-4E8D-1ACD034A0985 + + + DA4AF7E8-045C-E12E-AF49-D1157352A111 + + + 49C7ADC4-5B49-9AEA-51F3-923D9850915F + + + 5C88625D-D0BE-675F-76F8-F5E1EFC278E7 + + + 7D707D9D-016A-FE9D-BF26-F98BFEF1B254 + + + 04110E91-5706-9CA8-A17A-D44A1EA60B2F + + + 1443DA36-AD14-E305-12B1-E8F5AE08B1EA + + + 67FCC8FC-684F-55AE-7394-74C7AEC2F48A + + + 4C3C1BAD-8564-7A8B-70B2-19B9C2A3620D + + + 9729FA07-C555-C8DB-E4C3-2E1F252F7F2F + + + 63C6BF88-A222-F05F-B564-C9DD31EAABE5 + + + A44875C7-94D1-698D-1E93-565DC7D9D795 + + + 72237B83-A74E-D8E2-63EA-4EDB1FF04F80 + + + 255DAEDF-62C5-0FD9-F1DF-BC7EB6709A8B + + + B6AC79BC-115B-AC38-59B5-4FF14F75BDF3 + + + 2E8D7AA3-2A6A-37B7-1728-3F0020B2144F + + + 491236B9-E2F7-DDD8-3D34-905890DB7050 + + + DC31D8A2-2EDD-F2CB-5C04-D88AA289F48E + + + C57D9EF1-C75C-2A33-F1E6-E7652A303D62 + + + C2997098-7E94-A266-E8DF-D8B1E2799DF7 + + + 2D0A9746-AAC7-33C7-35FA-197B32FB46A9 + + + DE048CCF-CC2A-ECB4-86A1-3D44245B2189 + + + 92F8F0D7-3074-439B-DAD7-A5D1F4006260 + + + 38885DCB-99A5-F48D-01F4-A1BF56AA2228 + + + E2408EAB-CB97-D605-25FA-B735B986F544 + + + 208C8D5A-AD32-F901-E62F-5B267259E065 + + + 5D3C3F90-B221-27A7-2FAA-D606E697C4BA + + + 9C82A6EE-A2BC-5055-EC7D-EE11F90D22D0 + + + 8515888D-D9F1-1260-90A5-B287F98F7DCC + + + BA858B02-97E0-48E0-CB9B-80E6560AECF5 + + + 7F976D8F-F210-BBB6-D820-CD9837BEDE9A + + + 3DD4BBDC-556C-B93D-B8A4-962324E79328 + + + D57051EE-BE11-BA3D-5877-12A17F376257 + + + A538AE7E-B75F-0A5A-F047-F1DDC192DFFD + + + 6AFCECD8-F005-A2D5-61C5-E8A1A9AD0937 + + + 301B3006-8E1A-1DA8-E16F-60C13834A5F2 + + + 7E3CD9CC-E491-C872-B219-3EB15B80A218 + + + A45E60F6-D83E-E468-2F76-0D15F3A678BB + + + D72D0EAB-548E-E4FC-8427-AD0208EC185F + + + 72332534-20A6-3682-4680-5530F7ECF750 + + + FE1A2664-B032-ED72-39A7-DA38496FFCBB + + + 6D7395F6-5C2A-EC5C-D513-67318558748F + + + {d0cdfb97-73ff-438e-a07d-6af41ee69f07} + + + {ee319ebd-f4cf-4da8-9a28-0bdc60fe5396} + + + {885ad249-d458-4ba4-8197-a5acd251a8f1} + + + {8b2072b3-80a5-4927-833e-58bfd31407d5} + + + {f3a37b1c-c854-4ba3-b96e-328eb0bf19ab} + + + {b7bff1f9-96da-4789-bffb-93bf6598efd9} + + + {936f7fe8-8503-4ae1-bd54-61cd2f354962} + + + {31af974c-bc20-4bc4-b2c2-e17bd81ea7bb} + + + {d85bbeea-167f-4c7d-bdfd-2b1086994a6f} + + + {c851549a-bb1f-4d70-bc63-788af31a1731} + + + {2527059e-260c-41b8-884a-557422fa4b0f} + + + {01c51c06-4319-4f55-80eb-88ab07c34645} + + + {25900e2b-74a8-484e-89b7-c1194d6d58c1} + + + {d7152964-b9ee-428a-adda-c9bc99434d07} + + + {47483096-3e2f-4950-971a-2bb65a81dd0a} + + + {94578671-151e-4ee4-aba0-e4badca371ab} + + + {0f56cfeb-ec18-49a3-8760-93875ed47540} + + + {4a882200-7775-4f1a-aa25-f5f480bb91fc} + + + {12f3528f-87a4-4baf-a203-0df3431ded53} + + + {f2007c93-643c-48bc-8320-f9989601c8bf} + + + {fd72bbbd-1471-4bf9-9c29-3b072cf3c64f} + + + {93cc23c7-b7fd-49fc-9e11-1be4eac92649} + + + {9cd0adae-3b13-4746-856c-b082a0453afd} + + + {c4b438f5-0c7b-417b-8ecb-e9cdb39f2fbd} + + + {a243601f-2537-43ea-87f5-82ff31d0e05e} + + + {d7a58b9f-46e0-4d0c-ac26-1078f88d55bc} + + + {681f519e-2619-415d-b28b-2f31e2279e24} + + + {d3f5dab6-09b9-4f3a-a091-e23f8bbbf5ea} + + + {29a8ce23-5024-45c8-bbe6-04a2d71f6c57} + + + {aef3fa24-fad3-4b33-a450-aa593d4aa8da} + + + {deab211e-4017-4b58-a20d-097abc115779} + + + {8cdf5567-1961-475a-a78c-f7765128285c} + + + {9f9e93f4-b708-49c3-abb9-6fe1d40588dc} + + + {50a5fe9a-94d8-447f-97e7-9c8fab22b452} + + + {e439ad10-52f0-481e-90df-09921f7a272c} + + + {c64a867d-c7a3-4bdd-99c4-abdaaeed283a} + + + {bc5647a6-f65e-49a6-a3b3-16c2ef0420b8} + + + {880c652f-6b0e-40ec-9961-cc008d32d1e3} + + + 684A498E-6E05-BEEF-C5BC-BF9F710F4EED + + + C2CF844D-9BCD-29E8-AE28-CB3A0F49FCA7 + + + C55ABC64-9380-939D-F1D4-5183CB46421D + + + F53C5E99-978D-7BCE-47B4-2FA97C34903C + + + {42249b05-77bc-41d0-9f47-fa02b337a975} + + + {ea1796c2-2c2b-4213-bfcb-bb8abe331374} + + + {e026a777-ef2e-4d9d-ab78-42d024e31430} + + + {972e4538-d73d-4242-9c01-7238da07675a} + + + {3711fad0-35c4-4c3a-b6e8-48ec36558803} + + + {0bdabd9d-8e0a-49b2-97c8-e5dfc6b7120b} + + + A1741364-C8BC-25BE-9356-77915ADDC6C2 + + + CA96765C-1F2B-B9A8-17EC-6879FCABA54B + + + 59C8CF86-6D4C-66E5-7F3F-0E111A7C4D00 + + + E10D42FA-02A2-0305-D49C-6080FFEFF8C8 + + + {cb0b4b10-e351-4495-a6bf-12065ff03d5b} + + + {7430e326-5c8e-4861-a043-17db789dc42b} + + + {7fa16e35-32dd-44c1-b517-8c744e0eb5a6} + + + {b2edc6fe-a693-4d20-9bb3-0ac21b703264} + + + {d226e3e7-24da-4752-9b18-54985fd390c5} + + + {e5c63f6e-4e4c-4d28-aa43-bc6d11de66c1} + + + {7df059d7-271d-4b32-8096-de7b34e3376c} + + + + + Source Files\TouchGFX\platform\driver\touch + + + Source Files\TouchGFX\platform\hal\simulator\sdl2 + + + Source Files\TouchGFX\platform\hal\simulator\sdl2 + + + Source Files\TouchGFX\platform\hal\simulator\sdl2 + + + Source Files\simulator + + + Source Files\generated\simulator + + + Source Files\generated\gui_generated\common + + + Source Files\gui\model + + + Source Files\generated\simulator\video + + + Source Files\gui\common + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\menualerts_screen + + + Source Files\gui\menualerts_screen + + + Source Files\generated\gui_generated\menualerts_screen + + + Source Files\gui\menusettings_screen + + + Source Files\gui\menusettings_screen + + + Source Files\generated\gui_generated\menusettings_screen + + + Source Files\gui\menutime_screen + + + Source Files\gui\menutimesaved_screen + + + Source Files\gui\menutimesaved_screen + + + Source Files\generated\gui_generated\menutimesaved_screen + + + Source Files\gui\menutime_screen + + + Source Files\generated\gui_generated\menutime_screen + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\trackaction_screen + + + Source Files\gui\trackaction_screen + + + Source Files\generated\gui_generated\trackaction_screen + + + Source Files\gui\trackdiscardconfirmation_screen + + + Source Files\gui\trackdiscardconfirmation_screen + + + Source Files\generated\gui_generated\trackdiscardconfirmation_screen + + + Source Files\gui\trackdiscarded_screen + + + Source Files\gui\trackdiscarded_screen + + + Source Files\generated\gui_generated\trackdiscarded_screen + + + Source Files\gui\tracklap_screen + + + Source Files\gui\tracklap_screen + + + Source Files\generated\gui_generated\tracklap_screen + + + Source Files\gui\track_screen + + + Source Files\gui\tracksaved_screen + + + Source Files\gui\tracksaved_screen + + + Source Files\generated\gui_generated\tracksaved_screen + + + Source Files\gui\tracksummary_screen + + + Source Files\gui\tracksummary_screen + + + Source Files\generated\gui_generated\tracksummary_screen + + + Source Files\gui\track_screen + + + Source Files\generated\gui_generated\track_screen + + + SDK\Libs\Source\Simulator\Kernel\Mock + + + SDK\Libs\Source\Simulator\Kernel\Mock + + + SDK\Libs\Source\Simulator\Kernel\Mock + + + SDK\Libs\Source\Simulator\Kernel\Mock + + + SDK\Libs\Source\UnaLogger + + + SDK\Libs\Source\Wrappers + + + Libs\Source + + + Libs\Source + + + Libs\Source + + + Libs\Source + + + SDK\ThirdParty\coreJSON + + + SDK\ThirdParty\coreJSON + + + SDK\ThirdParty\FIT + + + SDK\ThirdParty\FIT + + + SDK\ThirdParty\FIT + + + SDK\ThirdParty\FIT + + + SDK\Libs\Source\JSON + + + SDK\Libs\Source\JSON + + + SDK\Libs\Source\TrackMap + + + SDK\Libs\Source\Kernel + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\generated\simulator\include\simulator\video + + + Header Files\gui\common + + + Header Files\generated\gui_generated\common + + + Header Files\gui\common + + + Header Files\generated\gui_generated\common + + + Header Files\gui\menualerts_screen + + + Header Files\gui\menualerts_screen + + + Header Files\generated\gui_generated\menualerts_screen + + + Header Files\gui\menusettings_screen + + + Header Files\gui\menusettings_screen + + + Header Files\generated\gui_generated\menusettings_screen + + + Header Files\gui\menutime_screen + + + Header Files\gui\menutimesaved_screen + + + Header Files\gui\menutimesaved_screen + + + Header Files\generated\gui_generated\menutimesaved_screen + + + Header Files\gui\menutime_screen + + + Header Files\generated\gui_generated\menutime_screen + + + Header Files\generated\simulator\include\simulator\video + + + Header Files\gui\model + + + Header Files\gui\model + + + Header Files\generated\gui_generated\common + + + Header Files\generated\simulator\include\simulator\video + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\trackaction_screen + + + Header Files\gui\trackaction_screen + + + Header Files\generated\gui_generated\trackaction_screen + + + Header Files\gui\trackdiscardconfirmation_screen + + + Header Files\gui\trackdiscardconfirmation_screen + + + Header Files\generated\gui_generated\trackdiscardconfirmation_screen + + + Header Files\gui\trackdiscarded_screen + + + Header Files\gui\trackdiscarded_screen + + + Header Files\generated\gui_generated\trackdiscarded_screen + + + Header Files\gui\tracklap_screen + + + Header Files\gui\tracklap_screen + + + Header Files\generated\gui_generated\tracklap_screen + + + Header Files\gui\track_screen + + + Header Files\gui\tracksaved_screen + + + Header Files\gui\tracksaved_screen + + + Header Files\generated\gui_generated\tracksaved_screen + + + Header Files\gui\tracksummary_screen + + + Header Files\gui\tracksummary_screen + + + Header Files\generated\gui_generated\tracksummary_screen + + + Header Files\gui\track_screen + + + Header Files\generated\gui_generated\track_screen + + + Source Files\gui\trackstartconfirmation_screen + + + Source Files\gui\trackstartconfirmation_screen + + + Source Files\generated\gui_generated\trackstartconfirmation_screen + + + Header Files\gui\trackstartconfirmation_screen + + + Header Files\gui\trackstartconfirmation_screen + + + Header Files\generated\gui_generated\trackstartconfirmation_screen + + + SDK\Libs\Source\Simulator\App + + + SDK\Libs\Source\Simulator\App + + + SDK\Libs\Source\Simulator\App + + + SDK\Libs\Source\Simulator\App + + + SDK\Libs\Source\Simulator\App + + + SDK\Libs\Source\Simulator\OS + + + SDK\Libs\Source\Simulator\OS + + + SDK\Libs\Source\Simulator\OS + + + SDK\Libs\Source\Simulator\Kernel\Mock + + + SDK\Libs\Source\Simulator\Kernel + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\Simulator\Components + + + SDK\Libs\Source\SensorLayer + + + SDK\Libs\Source\Simulator\Components\Sensors\Imu + + + SDK\Libs\Source\Simulator\Components\Sensors\Imu + + + SDK\Libs\Source\Simulator\Components\Sensors\HeartRate + + + SDK\Libs\Source\Simulator\Components\Sensors\HeartRate + + + SDK\Libs\Source\Simulator\Components\Sensors\Gps + + + SDK\Libs\Source\Simulator\Components\Sensors\Gps + + + SDK\Libs\Source\Simulator\Components\Sensors\Gps + + + SDK\Libs\Source\Simulator\Components\Sensors\Gps + + + SDK\Libs\Source\Simulator\Components\Simulator + + + SDK\Libs\Source\Simulator\Components\Sensors + + + SDK\Libs\Source\Simulator\Components\Sensors + + + SDK\Libs\Source\FitHelper + + + Header Files\gui\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\main_screen + + + Source Files\gui\main_screen + + + Source Files\generated\gui_generated\main_screen + + + Header Files\gui\main_screen + + + Header Files\gui\main_screen + + + Header Files\generated\gui_generated\main_screen + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Header Files\gui\containers + + + SDK\Libs\Source\Timer + + + SDK\Libs\Source\FitHelper + + + SDK\Libs\Source\Port\TouchGFX + + + Header Files\gui\model + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Libs\Source + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + + + Resource Files\assets\texts + + + Resource Files\config\msvs + + + + + Header Files\TouchGFX\common + + + Header Files\TouchGFX\common + + + Header Files\TouchGFX\common + + + Header Files\TouchGFX\common + + + Header Files\TouchGFX\mvp + + + Header Files\TouchGFX\mvp + + + Header Files\TouchGFX\mvp + + + Header Files\TouchGFX\mvp + + + Header Files\TouchGFX\platform\driver\lcd + + + Header Files\TouchGFX\platform\driver\lcd + + + Header Files\TouchGFX\platform\driver\lcd + + + Header Files\TouchGFX\platform\driver\lcd + + + Header Files\TouchGFX\platform\driver\lcd + + + Header Files\TouchGFX\platform\driver\touch + + + Header Files\TouchGFX\platform\hal\simulator\sdl2 + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx\canvas_widget_renderer + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\containers\clock + + + Header Files\TouchGFX\touchgfx\containers\clock + + + Header Files\TouchGFX\touchgfx\containers\clock + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers\progress_indicators + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx\containers + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\events + + + Header Files\TouchGFX\touchgfx\events + + + Header Files\TouchGFX\touchgfx\events + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx\hal + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\lcd + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\mixins + + + Header Files\TouchGFX\touchgfx\mixins + + + Header Files\TouchGFX\touchgfx\mixins + + + Header Files\TouchGFX\touchgfx\mixins + + + Header Files\TouchGFX\touchgfx\mixins + + + Header Files\TouchGFX\touchgfx\mixins + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\transforms + + + Header Files\TouchGFX\touchgfx\transforms + + + Header Files\TouchGFX\touchgfx\transitions + + + Header Files\TouchGFX\touchgfx\transitions + + + Header Files\TouchGFX\touchgfx\transitions + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets\canvas + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\TouchGFX\touchgfx\widgets + + + Header Files\generated\simulator + + + Header Files\generated\simulator\include\simulator\video + + + Header Files\gui\common + + + Header Files\generated\gui_generated\common + + + Header Files\gui\common + + + Header Files\generated\gui_generated\common + + + Header Files\generated\simulator\include\simulator\video + + + Header Files\gui\model + + + Header Files\gui\model + + + Header Files\generated\gui_generated\common + + + Header Files\generated\simulator\include\simulator\video + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\menualerts_screen + + + Header Files\gui\menualerts_screen + + + Header Files\generated\gui_generated\menualerts_screen + + + Header Files\gui\menusettings_screen + + + Header Files\gui\menusettings_screen + + + Header Files\generated\gui_generated\menusettings_screen + + + Header Files\gui\menutime_screen + + + Header Files\gui\menutimesaved_screen + + + Header Files\gui\menutimesaved_screen + + + Header Files\generated\gui_generated\menutimesaved_screen + + + Header Files\gui\menutime_screen + + + Header Files\generated\gui_generated\menutime_screen + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + + + Header Files\gui\trackaction_screen + + + Header Files\gui\trackaction_screen + + + Header Files\generated\gui_generated\trackaction_screen + + + Header Files\gui\trackdiscardconfirmation_screen + + + Header Files\gui\trackdiscardconfirmation_screen + + + Header Files\generated\gui_generated\trackdiscardconfirmation_screen + + + Header Files\gui\trackdiscarded_screen + + + Header Files\gui\trackdiscarded_screen + + + Header Files\generated\gui_generated\trackdiscarded_screen + + + Header Files\gui\tracklap_screen + + + Header Files\gui\tracklap_screen + + + Header Files\generated\gui_generated\tracklap_screen + + + Header Files\gui\track_screen + + + Header Files\gui\tracksaved_screen + + + Header Files\gui\tracksaved_screen + + + Header Files\generated\gui_generated\tracksaved_screen + + + Header Files\gui\tracksummary_screen + + + Header Files\gui\tracksummary_screen + + + Header Files\generated\gui_generated\tracksummary_screen + + + Header Files\gui\track_screen + + + Header Files\generated\gui_generated\track_screen + + + SDK\Libs\Header\Platform\OS + + + SDK\Libs\Header\Simulator\Kernel + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Kernel\Mock + + + SDK\Libs\Header\Simulator\Sensors + + + SDK\Libs\Header\Simulator\Sensors + + + SDK\Libs\Header\SynchManager + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Timer + + + SDK\Libs\Header\UnaLogger + + + SDK\Libs\Header\Wrappers + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + SDK\Libs\Header\Interfaces + + + Libs\Header + + + Libs\Header + + + Libs\Header + + + Libs\Header + + + Libs\Header + + + Libs\Header + + + Libs\Header + + + SDK\Libs\Header\TrackMap + + + SDK\Libs\Header\TrackMap + + + SDK\Libs\Header\JSON + + + SDK\Libs\Header\JSON + + + SDK\Libs\Header\Kernel + + + SDK\Libs\Header\Kernel + + + SDK\Libs\Header\Kernel + + + SDK\Libs\Header\Kernel + + + Source Files\simulator + + + SDK\Libs\Header\FitHelper + + + SDK\Libs\Header\Messages + + + SDK\Libs\Header\Messages + + + SDK\Libs\Header\Messages + + + SDK\Libs\Header\Messages + + + SDK\Libs\Header\Messages + + + SDK\Libs\Header\Utils + + + SDK\Libs\Header\GUI + + + SDK\Libs\Header\GUI + + + SDK\Libs\Header\GUI + + + Header Files\gui\model + + + Libs\Header + + + SDK\Libs\Header\Metrics + + + SDK\Libs\Header\Metrics + + + SDK\Libs\Header\Metrics + + + SDK\Libs\Header\Metrics + + + SDK\Libs\Header\Filters + + + Libs\Header + + + + + Resource Files + + + diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/SDK.props b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/SDK.props new file mode 100644 index 00000000..8c1d3f69 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/simulator/msvs/SDK.props @@ -0,0 +1,18 @@ + + + + + $(UNA_SDK) + $(SdkPath)\Libs + + + <_PropertySheetDisplayName>SDK + + + + %(AdditionalIncludeDirectories);$(LibsPath)\Header + + + + + \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/target.config b/Apps/Workout/Software/Apps/TouchGFX-GUI/target.config new file mode 100644 index 00000000..04d46a41 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/target.config @@ -0,0 +1,12 @@ +{ + "target_configuration": { + "touchgfx_path": "../../../../../../ThirdParty/touchgfx", + "family": "STM32U5", + "sub_family": "STM32U575/585", + "toolchain": "STM32CubeIDE", + "platform": "m33", + "optional_components_root": "touchgfx_components", + "optional_components": [], + "additional_features": [] + } +} \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/touchgfx.cmake b/Apps/Workout/Software/Apps/TouchGFX-GUI/touchgfx.cmake new file mode 100644 index 00000000..b3a85cbd --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/touchgfx.cmake @@ -0,0 +1,21 @@ +file(GLOB_RECURSE TOUCHGFX_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/gui/src/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/generated/fonts/src/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/generated/gui_generated/src/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/generated/images/src/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/generated/texts/src/*.cpp +) + +set(TOUCHGFX_INCLUDE_DIRS + $ENV{UNA_SDK}/ThirdParty/touchgfx/framework/include + ${CMAKE_CURRENT_LIST_DIR}/generated/fonts/include + ${CMAKE_CURRENT_LIST_DIR}/generated/gui_generated/include + ${CMAKE_CURRENT_LIST_DIR}/generated/images/include + ${CMAKE_CURRENT_LIST_DIR}/generated/texts/include + ${CMAKE_CURRENT_LIST_DIR}/generated/videos/include + ${CMAKE_CURRENT_LIST_DIR}/gui/include +) + +set(TOUCHGFX_LIBS + $ENV{UNA_SDK}/ThirdParty/touchgfx/lib/core/cortex_m33/gcc/libtouchgfx-float-abi-hard.a +) \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/TouchGFX-GUI/una/Makefile b/Apps/Workout/Software/Apps/TouchGFX-GUI/una/Makefile new file mode 100644 index 00000000..2baea759 --- /dev/null +++ b/Apps/Workout/Software/Apps/TouchGFX-GUI/una/Makefile @@ -0,0 +1,279 @@ +# Get identification of this system +ifeq ($(OS),Windows_NT) +UNAME := MINGW32_NT-6.2 +else +UNAME := $(shell uname -s) +endif + +board_name := $(UNAME) + +.PHONY: all clean assets + +# Directories containing application-specific source and header files. +# Additional components can be added to this list. make will look for +# source files recursively in comp_name/src and setup an include directive +# for comp_name/include. +components := gui simulator generated/gui_generated generated/simulator + +# Location of folder containing bmp/png files. +asset_images_input := assets/images + +# Location of folder to search for ttf font files +asset_fonts_input := assets/fonts + +# Location of folder where the texts.xml is placed +asset_texts_input := assets/texts + +# Location of folder where video files are places +asset_videos_input := assets/videos + +build_root_path := build +object_output_path := $(build_root_path)/$(board_name) +binary_output_path := $(build_root_path)/bin + +# Location of output folders where autogenerated code from assets is placed +asset_root_path := generated +asset_images_output := $(asset_root_path)/images +asset_fonts_output := $(asset_root_path)/fonts +asset_texts_output := $(asset_root_path)/texts +asset_videos_output := $(asset_root_path)/videos + +#include application specific configuration +include config/gcc/app.mk + +### END OF USER SECTION. THE FOLLOWING SHOULD NOT BE MODIFIED ### + +ifeq ($(UNAME), Linux) +library_path := $(touchgfx_path)/3rdparty/libjpeg/lib/linux $(touchgfx_path)/lib/linux $(ADDITIONAL_LIBRARY_PATHS) +libraries := touchgfx SDL2 SDL2_image jpeg rt m pthread dl $(ADDITIONAL_LIBRARIES) +libstart := -Wl,--start-group +libend := -Wl,--end-group +libextra := +library_includes += $(touchgfx_path)/3rdparty/libjpeg/include +linker_options_local := -Xlinker -rpath -Xlinker $(touchgfx_path)/3rdparty/libjpeg/lib/linux +resource_file := +imageconvert_executable := $(touchgfx_path)/framework/tools/imageconvert/build/linux/imageconvert.out +fontconvert_executable := $(touchgfx_path)/framework/tools/fontconvert/build/linux/fontconvert.out +simulator_executable := simulator.out +linker_options += -static-libgcc -Xlinker --no-as-needed +else +sdl_library_path := $(touchgfx_path)/lib/sdl2/win32 +jpeg_library_path := $(touchgfx_path)/3rdparty/libjpeg/lib/win32 +library_path := $(sdl_library_path) $(jpeg_library_path) $(touchgfx_path)/lib/win/mingw32 $(ADDITIONAL_LIBRARY_PATHS) +libraries := touchgfx SDL2 SDL2_image jpeg-8 m pthread mingw32 $(ADDITIONAL_LIBRARIES) +libstart := -Wl,--start-group +libend := -Wl,--end-group +libextra := -Wl,--subsystem,windows +library_includes += $(touchgfx_path)/framework/include/platform/hal/simulator/sdl2/vendor $(touchgfx_path)/3rdparty/libjpeg/include +resource_file := generated/simulator/touchgfx.res +imageconvert_executable := $(touchgfx_path)/framework/tools/imageconvert/build/win/imageconvert.out +fontconvert_executable := $(touchgfx_path)/framework/tools/fontconvert/build/win/fontconvert.out +simulator_executable := simulator.exe +$(resource_file): $(resource_file:%.res=%.rc) $(resource_file:%.res=%.ico) + @echo Creating Windows resource file with program icon + @windres $(resource_file:%.res=%.rc) -O coff -o $@ +linker_options += -static-libgcc -static-libstdc++ +endif + +c_compiler := g++ +c_compiler_options += -DSIMULATOR='' -g +cpp_compiler := g++ +cpp_compiler_options += -g -DSIMULATOR='' -DENABLE_LOG +linker := g++ + +WARN = error all extra write-strings init-self cast-qual \ + pointer-arith strict-aliasing format=2 uninitialized \ + missing-declarations no-long-long no-unused-parameter \ + no-variadic-macros no-format-extra-args \ + no-conversion no-overloaded-virtual +CXXWARN = non-virtual-dtor ctor-dtor-privacy + +c_compiler_options_local += -pedantic $(addprefix -W,$(WARN)) +cpp_compiler_options_local += -pedantic $(addprefix -W,$(WARN) $(CXXWARN)) + +#include everything + specific vendor folders +framework_includes := $(touchgfx_path)/framework/include + +#only take in the source we want to build for this sim +framework_files := $(touchgfx_path)/framework/source/platform/driver/touch/SDL2TouchController.cpp +framework_source := $(touchgfx_path)/framework/source/platform/hal/simulator/sdl2 + +#this needs to change when assset include folder changes. +all_components := $(components) \ + $(asset_fonts_output) \ + $(asset_images_output) \ + $(asset_texts_output) \ + $(asset_videos_output) + +#keep framework include and source out of this +include_paths := $(library_includes) $(foreach comp, $(all_components), $(comp)/include) $(framework_includes) $(ADDITIONAL_INCLUDE_PATHS) +source_paths = $(foreach comp, $(all_components), $(comp)/src) $(framework_source) simulator + +# Finds files that matches the specified pattern. The directory list +# is searched recursively. It is safe to invoke this function with an +# empty list of directories. +# +# Param $(1): List of directories to search +# Param $(2): The file pattern to search for +define find + $(foreach dir,$(1),$(foreach d,$(wildcard $(dir)/*),\ + $(call find,$(d),$(2))) $(wildcard $(dir)/$(strip $(2)))) +endef +unexport find + +fontconvert_ttf_lower_files := $(call find, $(asset_fonts_input), *.ttf) +fontconvert_ttf_upper_files := $(call find, $(asset_fonts_input), *.TTF) +fontconvert_otf_lower_files := $(call find, $(asset_fonts_input), *.otf) +fontconvert_otf_upper_files := $(call find, $(asset_fonts_input), *.OTF) +fontconvert_bdf_lower_files := $(call find, $(asset_fonts_input), *.bdf) +fontconvert_bdf_upper_files := $(call find, $(asset_fonts_input), *.BDF) +fontconvert_font_files := $(fontconvert_ttf_lower_files) \ + $(fontconvert_ttf_upper_files) \ + $(fontconvert_otf_lower_files) \ + $(fontconvert_otf_upper_files) \ + $(fontconvert_bdf_lower_files) \ + $(fontconvert_bdf_upper_files) + +source_files := $(call find, $(source_paths),*.cpp) $(framework_files) $(ADDITIONAL_SOURCES) +c_source_files := $(call find, $(source_paths),*.c) + +object_files := $(source_files:$(touchgfx_path)/%.cpp=$(object_output_path)/touchgfx/%.o) +$(c_source_files:$(touchgfx_path)/%.c=$(object_output_path)/touchgfx/%.o) +object_files := $(object_files:%.cpp=$(object_output_path)/%.o) +object_files := $(object_files:%.c=$(object_output_path)/%.o) +dependency_files := $(object_files:%.o=%.d) + +#-------------------UNA-------------------------------------------------------- +define delete_strip_dotdots +$(subst ../,,$(1)) +endef + +files := $(foreach f,$(ADDITIONAL_SOURCES_UNA),$(call delete_strip_dotdots,$f)) +cpp_sources := $(filter %.cpp,$(files)) +c_sources := $(filter %.c,$(files)) + +object_files += $(cpp_sources:%.cpp=$(object_output_path)/%.o) +object_files += $(c_sources:%.c=$(object_output_path)/%.o) +dependency_files += $(object_files:%.o=%.d) + +# Add path for source to VPATH +define get_leading_dotdots +$(foreach part,$(subst /, ,$(dir $(1))),$(if $(filter ..,$(part)),$(part)/,)) +endef + +define remove_space +$(subst $(2),,$(1)) +endef + +VPATH_dirs := + $(foreach f,$(ADDITIONAL_SOURCES_UNA),\ + $(eval VPATH_dirs += $(call remove_space,$(call get_leading_dotdots,$f), ))\ +) + +VPATH_dirs := $(sort $(VPATH_dirs)) +$(eval VPATH := $(VPATH):$(VPATH_dirs)) +override user_cflags += -Wno-error +override user_cflags += -DBUILD_VERSION=\"1.2.3\" -DAPP_ID=\"ABCDEF1234567890\" -DDEV_ID=\"UNA_Simulator\" +# Workout uses FitSDKRelease_21.202.00 with the RELEASE product profile so it +# can emit native session.metabolic_calories. Other apps stay on EXAMPLE. +override user_cflags += -DFIT_PRODUCT_RELEASE +#------------------------------------------------------------------------------ + +textconvert_script_path := $(touchgfx_path)/framework/tools/textconvert +videoconvert_script_path := $(touchgfx_path)/framework/tools/videoconvert + +text_database := $(asset_texts_input)/texts.xml + +.PHONY: all clean assets generate_assets build_executable + +all: generate_assets + +generate_assets: assets + @$(MAKE) -f una/Makefile -r -s $(MFLAGS) build_executable + +build_executable: $(binary_output_path)/$(simulator_executable) post_build + +$(binary_output_path)/$(simulator_executable): $(object_files) $(resource_file) + @echo Linking $(@) + @mkdir -p $(@D) + @mkdir -p $(object_output_path) + @$(file >$(build_root_path)/objects.tmp) $(foreach F,$(object_files),$(file >>$(build_root_path)/objects.tmp,$F)) + @$(linker) \ + $(linker_options) $(linker_options_local) \ + $(patsubst %,-L%,$(library_path)) \ + @$(build_root_path)/objects.tmp -o $@ $(resource_file) \ + $(libstart) $(patsubst %,-l%,$(libraries)) $(libend) $(libextra) + @rm -f $(build_root_path)/objects.tmp + # Remove old images + @rm -f $(binary_output_path)/*.bin + @if ls $(asset_videos_output)/bin/*.bin >/dev/null 2>&1; then cp $(asset_videos_output)/bin/*.bin $(binary_output_path); fi +ifneq ($(UNAME), Linux) + @if [ ! -f $(binary_output_path)/SDL2.dll ]; then cp $(sdl_library_path)/SDL2.dll $(binary_output_path); fi + @if [ ! -f $(binary_output_path)/SDL2_image.dll ]; then cp $(sdl_library_path)/SDL2_image.dll $(binary_output_path); fi + @if [ ! -f $(binary_output_path)/libpng16-16.dll ]; then cp $(sdl_library_path)/libpng16-16.dll $(binary_output_path); fi + @if [ ! -f $(binary_output_path)/zlib1.dll ]; then cp $(sdl_library_path)/zlib1.dll $(binary_output_path); fi + @if [ ! -f $(binary_output_path)/libjpeg-8.dll ]; then cp $(jpeg_library_path)/libjpeg-8.dll $(binary_output_path); fi +endif + +.PHONY: post_build +post_build: + @mkdir -p $(binary_output_path) + @if [ -f simulator/landscape.png ]; then cp simulator/landscape.png $(binary_output_path); else rm -f $(binary_output_path)/landscape.png; fi + @if [ -f simulator/portrait.png ]; then cp simulator/portrait.png $(binary_output_path); else rm -f $(binary_output_path)/portrait.png; fi + +$(object_output_path)/touchgfx/%.o: $(touchgfx_path)/%.cpp config/gcc/app.mk + @echo Compiling $< + @mkdir -p $(@D) + @$(cpp_compiler) \ + -MMD -MP $(cpp_compiler_options) $(cpp_compiler_options_local) $(user_cflags) \ + $(patsubst %,-I%,$(include_paths)) \ + -c $< -o $@ + +$(object_output_path)/%.o: %.cpp config/gcc/app.mk + @echo Compiling $< + @mkdir -p $(@D) + @$(cpp_compiler) \ + -MMD -MP $(cpp_compiler_options) $(cpp_compiler_options_local) $(user_cflags) \ + $(patsubst %,-I%,$(include_paths)) \ + -c $< -o $@ + +$(object_output_path)/%.o: %.c config/gcc/app.mk + @echo Compiling $< + @mkdir -p $(@D) + @$(c_compiler) \ + -MMD -MP $(c_compiler_options) $(c_compiler_options_local) $(user_cflags) \ + $(patsubst %,-I%,$(include_paths)) \ + -c $< -o $@ + +ifeq ($(MAKECMDGOALS),build_executable) +$(firstword $(dependency_files)): config/gcc/app.mk + @rm -rf $(object_output_path) +-include $(dependency_files) +endif + +assets: images texts videos + +.PHONY: images +images: + @$(imageconvert_executable) -r $(asset_images_input) -w $(asset_images_output) + +.PHONY: texts +texts: + @ruby $(textconvert_script_path)/main.rb $(text_database) $(fontconvert_executable) $(asset_fonts_output) $(asset_texts_output) $(asset_fonts_input) . + +.PHONY: videos +videos: + @ruby $(videoconvert_script_path)/videoconvert.rb $(asset_videos_input) $(asset_videos_output) + +clean: + @echo Cleaning + @rm -rf $(build_root_path) + # Do not remove gui_generated + @rm -rf $(asset_images_output) + @rm -rf $(asset_fonts_output) + @rm -rf $(asset_texts_output) + @rm -rf $(asset_videos_output) + # Create directory to avoid error if it does not exist + @mkdir -p $(asset_root_path) + # Remove assets folder if it is empty (i.e. no gui_generated folder) + @rmdir --ignore-fail-on-non-empty $(asset_root_path) diff --git a/Apps/Workout/Software/Apps/Workout-CMake/.gitignore b/Apps/Workout/Software/Apps/Workout-CMake/.gitignore new file mode 100644 index 00000000..c795b054 --- /dev/null +++ b/Apps/Workout/Software/Apps/Workout-CMake/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/Workout-CMake/CMakeLists.txt b/Apps/Workout/Software/Apps/Workout-CMake/CMakeLists.txt new file mode 100644 index 00000000..fb845e60 --- /dev/null +++ b/Apps/Workout/Software/Apps/Workout-CMake/CMakeLists.txt @@ -0,0 +1,72 @@ +# Watch App CMakeLists.txt - Simplified version using SDK +cmake_minimum_required(VERSION 3.21) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build") + +# App configuration +set(APP_NAME "Workout") +set(APP_TYPE "Activity") +set(DEV_ID "UNA") +set(APP_ID "1430B92A76961A29") +set(RESOURCES_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../Resources") +set(OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../Output") +set(LIBS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../Libs") +set(TOUCHGFX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../TouchGFX-GUI") + +# Includes all build steps and required tools +# Sets toolchain before project +include($ENV{UNA_SDK}/cmake/una-app.cmake) + +# Workout uses the newer FIT SDK release so it can emit native FIT fields +# (e.g. session.metabolic_calories) that the older bundled SDK doesn't expose. +set(UNA_FIT_SDK_DIR "$ENV{UNA_SDK}/ThirdParty/FitSDKRelease_21.202.00") +add_compile_definitions(FIT_PRODUCT_RELEASE) + +# Includes sets: SCRIPTS_PATH, +# UNA_SDK_SOURCES_COMMON, UNA_SDK_SOURCES_SERVICE, UNA_SDK_SOURCES_GUI, +# UNA_SDK_INCLUDE_DIRS_COMMON, UNA_SDK_INCLUDE_DIRS_SERVICE, UNA_SDK_INCLUDE_DIRS_GUI +include($ENV{UNA_SDK}/cmake/una-sdk.cmake) + +# Includes LIBS_SOURCES, LIBS_INCLUDE_DIRS +include(${LIBS_PATH}/libs.cmake) + +# Includes TOUCHGFX_SOURCES, TOUCHGFX_INCLUDE_DIRS +if(DEFINED TOUCHGFX_PATH) + include(${TOUCHGFX_PATH}/touchgfx.cmake) +endif() + +project(${APP_NAME}) + +# Set up version +una_app_setup_version(BUILD_VERSION ${CMAKE_CURRENT_SOURCE_DIR}) + +# Build service +set(SERVICE_SOURCES + ${LIBS_SOURCES} + ${UNA_SDK_SOURCES_COMMON} + ${UNA_SDK_SOURCES_SERVICE} +) +set(SERVICE_INCLUDE_DIRS + ${LIBS_INCLUDE_DIRS} + ${UNA_SDK_INCLUDE_DIRS_COMMON} + ${UNA_SDK_INCLUDE_DIRS_SERVICE} +) +una_app_build_service(${APP_NAME}Service.elf) + + +if(DEFINED TOUCHGFX_PATH) + set(GUI_SOURCES + ${TOUCHGFX_SOURCES} + ${UNA_SDK_SOURCES_COMMON} + ${UNA_SDK_SOURCES_GUI} + ) + set(GUI_INCLUDE_DIRS + ${LIBS_INCLUDE_DIRS} + ${UNA_SDK_INCLUDE_DIRS_COMMON} + ${UNA_SDK_INCLUDE_DIRS_GUI} + ${TOUCHGFX_INCLUDE_DIRS} + ) + una_app_build_gui(${APP_NAME}GUI.elf) +endif() + +# Build the complete app using SDK functions +una_app_build_app() \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.cproject b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.cproject new file mode 100644 index 00000000..9ced79ca --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.cproject @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.gitignore b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.gitignore new file mode 100644 index 00000000..3ff73754 --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.gitignore @@ -0,0 +1,18 @@ +# Builds +/Debug/ +/Release/ +/MacOs/ + +#Local settings +/.settings/* + +# Contains firmware version +!/.settings/org.eclipse.cdt.core.prefs + +# Launch configuration +*.launch +*.cfg + +# fw images +*.hex +*.bin diff --git a/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.project b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.project new file mode 100644 index 00000000..8b7e1980 --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.project @@ -0,0 +1,268 @@ + + + WorkoutGUI-CubeIDE + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.st.stm32cube.ide.mcu.MCUProjectNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature + com.st.stm32cube.ide.mcu.MCUCubeProjectNature + com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature + com.st.stm32cube.ide.mcu.MCUEndUserDisabledTrustZoneProjectNature + com.st.stm32cube.ide.mcu.MCUNonSecureProjectNature + com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature + com.st.stm32cube.ide.mcu.MCURootProjectNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + GUI + 2 + virtual:/virtual + + + Libs + 2 + virtual:/virtual + + + SDK + 2 + virtual:/virtual + + + GUI/TouchGFX-GUI + 2 + PARENT-1-PROJECT_LOC/TouchGFX-GUI + + + Libs/Header + 2 + virtual:/virtual + + + Libs/Sources + 2 + virtual:/virtual + + + SDK/Libs + 2 + virtual:/virtual + + + Libs/Header/Commands.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Commands.hpp + + + Libs/Header/Settings.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Settings.hpp + + + Libs/Header/Track.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Track.hpp + + + SDK/Libs/Header + 2 + virtual:/virtual + + + SDK/Libs/Source + 2 + virtual:/virtual + + + SDK/Libs/Header/Interfaces + 2 + virtual:/virtual + + + SDK/Libs/Header/Port + 2 + virtual:/virtual + + + SDK/Libs/Header/UnaLogger + 2 + virtual:/virtual + + + SDK/Libs/Source/AppSystem + 2 + virtual:/virtual + + + SDK/Libs/Source/Kernel + 2 + virtual:/virtual + + + SDK/Libs/Source/Port + 2 + virtual:/virtual + + + SDK/Libs/Source/UnaLogger + 2 + virtual:/virtual + + + SDK/Libs/Header/Interfaces/IKernel.hpp + 1 + SDK_LOC/Libs/Header/SDK/Interfaces/IKernel.hpp + + + SDK/Libs/Header/Port/TouchGFX + 2 + virtual:/virtual + + + SDK/Libs/Header/UnaLogger/Logger.h + 1 + SDK_LOC/Libs/Header/SDK/UnaLogger/Logger.h + + + SDK/Libs/Source/AppSystem/AtExitImpl.cpp + 1 + SDK_LOC/Libs/Source/AppSystem/AtExitImpl.cpp + + + SDK/Libs/Source/AppSystem/main.cpp + 1 + SDK_LOC/Libs/Source/AppSystem/EntryPoint/TouchGFX/main.cpp + + + SDK/Libs/Source/AppSystem/startup_user_app.s + 1 + SDK_LOC/Libs/Source/AppSystem/startup_user_app.s + + + SDK/Libs/Source/AppSystem/system.cpp + 1 + SDK_LOC/Libs/Source/AppSystem/system.cpp + + + SDK/Libs/Source/Kernel/KernelBuilder.cpp + 1 + SDK_LOC/Libs/Source/Kernel/KernelBuilder.cpp + + + SDK/Libs/Source/Port/TouchGFX + 2 + virtual:/virtual + + + SDK/Libs/Source/UnaLogger/Logger.cpp + 1 + SDK_LOC/Libs/Source/UnaLogger/Logger.cpp + + + SDK/Libs/Header/Port/TouchGFX/STM32TouchController.hpp + 1 + SDK_LOC/Libs/Header/SDK/Port/TouchGFX/STM32TouchController.hpp + + + SDK/Libs/Header/Port/TouchGFX/TouchGFXCommandProcessor.hpp + 1 + SDK_LOC/Libs/Header/SDK/Port/TouchGFX/TouchGFXCommandProcessor.hpp + + + SDK/Libs/Header/Port/TouchGFX/TouchGFXHAL.hpp + 1 + SDK_LOC/Libs/Header/SDK/Port/TouchGFX/TouchGFXHAL.hpp + + + SDK/Libs/Header/Port/TouchGFX/app_touchgfx.h + 1 + SDK_LOC/Libs/Header/SDK/Port/TouchGFX/app_touchgfx.h + + + SDK/Libs/Header/Port/TouchGFX/generated + 2 + virtual:/virtual + + + SDK/Libs/Source/Port/TouchGFX/STM32TouchController.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/STM32TouchController.cpp + + + SDK/Libs/Source/Port/TouchGFX/TouchGFXCommandProcessor.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/TouchGFXCommandProcessor.cpp + + + SDK/Libs/Source/Port/TouchGFX/TouchGFXGPIO.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/TouchGFXGPIO.cpp + + + SDK/Libs/Source/Port/TouchGFX/TouchGFXHAL.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/TouchGFXHAL.cpp + + + SDK/Libs/Source/Port/TouchGFX/generated + 2 + virtual:/virtual + + + SDK/Libs/Header/Port/TouchGFX/generated/STM32DMA.hpp + 1 + SDK_LOC/Libs/Header/SDK/Port/TouchGFX/generated/STM32DMA.hpp + + + SDK/Libs/Header/Port/TouchGFX/generated/TouchGFXGeneratedHAL.hpp + 1 + SDK_LOC/Libs/Header/SDK/Port/TouchGFX/generated/TouchGFXGeneratedHAL.hpp + + + SDK/Libs/Source/Port/TouchGFX/generated/OSWrappers.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/generated/OSWrappers.cpp + + + SDK/Libs/Source/Port/TouchGFX/generated/STM32DMA.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/generated/STM32DMA.cpp + + + SDK/Libs/Source/Port/TouchGFX/generated/TouchGFXConfiguration.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/generated/TouchGFXConfiguration.cpp + + + SDK/Libs/Source/Port/TouchGFX/generated/TouchGFXGeneratedHAL.cpp + 1 + SDK_LOC/Libs/Source/Port/TouchGFX/generated/TouchGFXGeneratedHAL.cpp + + + + + SDK_LOC + $%7BPARENT-6-PROJECT_LOC%7D + + + diff --git a/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.settings/org.eclipse.cdt.core.prefs b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000..30306b7b --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_OUTPUT/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_OUTPUT/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_OUTPUT/value=../../../../Output +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_SCRIPTS/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_SCRIPTS/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_SCRIPTS/value=${UNA_SDK}/Utilities/Scripts +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/UNA_SDK/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/UNA_SDK/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/UNA_SDK/value=../../../../../../../ +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/append=true +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/appendContributed=true diff --git a/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/Linker.ld b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/Linker.ld new file mode 100644 index 00000000..54c1383b --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutGUI-CubeIDE/Linker.ld @@ -0,0 +1,4 @@ +STACK_SIZE = 10K; +RAM_LENGTH = 500K; + +INCLUDE "Main/Sections.ld" diff --git a/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.cproject b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.cproject new file mode 100644 index 00000000..044f5a5a --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.cproject @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.gitignore b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.gitignore new file mode 100644 index 00000000..3ff73754 --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.gitignore @@ -0,0 +1,18 @@ +# Builds +/Debug/ +/Release/ +/MacOs/ + +#Local settings +/.settings/* + +# Contains firmware version +!/.settings/org.eclipse.cdt.core.prefs + +# Launch configuration +*.launch +*.cfg + +# fw images +*.hex +*.bin diff --git a/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.project b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.project new file mode 100644 index 00000000..0968db34 --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.project @@ -0,0 +1,588 @@ + + + WorkoutService-CubeIDE + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.st.stm32cube.ide.mcu.MCUProjectNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature + com.st.stm32cube.ide.mcu.MCUCubeProjectNature + com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature + com.st.stm32cube.ide.mcu.MCUEndUserDisabledTrustZoneProjectNature + com.st.stm32cube.ide.mcu.MCUNonSecureProjectNature + com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature + com.st.stm32cube.ide.mcu.MCURootProjectNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Libs + 2 + virtual:/virtual + + + SDK + 2 + virtual:/virtual + + + Libs/Header + 2 + virtual:/virtual + + + Libs/Sources + 2 + virtual:/virtual + + + SDK/Libs + 2 + virtual:/virtual + + + SDK/ThirdParty + 2 + virtual:/virtual + + + Libs/Header/ActivitySummary.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/ActivitySummary.hpp + + + Libs/Header/ActivitySummarySerializer.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/ActivitySummarySerializer.hpp + + + Libs/Header/ActivityWriter.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/ActivityWriter.hpp + + + Libs/Header/Commands.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Commands.hpp + + + Libs/Header/Service.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Service.hpp + + + Libs/Header/Settings.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Settings.hpp + + + Libs/Header/SettingsSerializer.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/SettingsSerializer.hpp + + + Libs/Header/Track.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/Track.hpp + + + Libs/Header/WristTiltDetector.hpp + 1 + PARENT-2-PROJECT_LOC/Libs/Header/WristTiltDetector.hpp + + + Libs/Sources/ActivitySummarySerializer.cpp + 1 + PARENT-2-PROJECT_LOC/Libs/Sources/ActivitySummarySerializer.cpp + + + Libs/Sources/ActivityWriter.cpp + 1 + PARENT-2-PROJECT_LOC/Libs/Sources/ActivityWriter.cpp + + + Libs/Sources/Service.cpp + 1 + PARENT-2-PROJECT_LOC/Libs/Sources/Service.cpp + + + Libs/Sources/SettingsSerializer.cpp + 1 + PARENT-2-PROJECT_LOC/Libs/Sources/SettingsSerializer.cpp + + + Libs/Sources/WristTiltDetector.cpp + 1 + PARENT-2-PROJECT_LOC/Libs/Sources/WristTiltDetector.cpp + + + SDK/Libs/Header + 2 + virtual:/virtual + + + SDK/Libs/Source + 2 + virtual:/virtual + + + SDK/ThirdParty/FitSDK + 2 + virtual:/virtual + + + SDK/ThirdParty/coreJSON + 2 + virtual:/virtual + + + SDK/Libs/Header/Filters + 2 + virtual:/virtual + + + SDK/Libs/Header/FitHelper + 2 + virtual:/virtual + + + SDK/Libs/Header/Interfaces + 2 + virtual:/virtual + + + SDK/Libs/Header/JSON + 2 + virtual:/virtual + + + SDK/Libs/Header/Kernel + 2 + virtual:/virtual + + + SDK/Libs/Header/Messages + 2 + virtual:/virtual + + + SDK/Libs/Header/Metrics + 2 + virtual:/virtual + + + SDK/Libs/Header/SensorLayer + 2 + virtual:/virtual + + + SDK/Libs/Header/Timer + 2 + virtual:/virtual + + + SDK/Libs/Header/TrackMap + 2 + virtual:/virtual + + + SDK/Libs/Header/UnaLogger + 2 + virtual:/virtual + + + SDK/Libs/Source/AppSystem + 2 + virtual:/virtual + + + SDK/Libs/Source/FitHelper + 2 + virtual:/virtual + + + SDK/Libs/Source/JSON + 2 + virtual:/virtual + + + SDK/Libs/Source/Kernel + 2 + virtual:/virtual + + + SDK/Libs/Source/SensorLayer + 2 + virtual:/virtual + + + SDK/Libs/Source/Timer + 2 + virtual:/virtual + + + SDK/Libs/Source/TrackMap + 2 + virtual:/virtual + + + SDK/Libs/Source/UnaLogger + 2 + virtual:/virtual + + + SDK/ThirdParty/FitSDK/fit.c + 1 + SDK_LOC/ThirdParty/FitSDKRelease_21.202.00/c/fit.c + + + SDK/ThirdParty/FitSDK/fit_convert.c + 1 + SDK_LOC/ThirdParty/FitSDKRelease_21.202.00/c/fit_convert.c + + + SDK/ThirdParty/FitSDK/fit_crc.c + 1 + SDK_LOC/ThirdParty/FitSDKRelease_21.202.00/c/fit_crc.c + + + SDK/ThirdParty/FitSDK/fit_product.c + 1 + SDK_LOC/ThirdParty/FitSDKRelease_21.202.00/c/fit_product.c + + + SDK/ThirdParty/coreJSON/source + 2 + virtual:/virtual + + + SDK/Libs/Header/Filters/SimpleLPF.hpp + 1 + SDK_LOC/Libs/Header/SDK/Filters/SimpleLPF.hpp + + + SDK/Libs/Header/FitHelper/FitHelper.hpp + 1 + SDK_LOC/Libs/Header/SDK/FitHelper/FitHelper.hpp + + + SDK/Libs/Header/Interfaces/IKernel.hpp + 1 + SDK_LOC/Libs/Header/SDK/Interfaces/IKernel.hpp + + + SDK/Libs/Header/JSON/JsonStreamReader.hpp + 1 + SDK_LOC/Libs/Header/SDK/JSON/JsonStreamReader.hpp + + + SDK/Libs/Header/JSON/JsonStreamWriter.hpp + 1 + SDK_LOC/Libs/Header/SDK/JSON/JsonStreamWriter.hpp + + + SDK/Libs/Header/Kernel/Kernel.hpp + 1 + SDK_LOC/Libs/Header/SDK/Kernel/Kernel.hpp + + + SDK/Libs/Header/Kernel/KernelBuilder.hpp + 1 + SDK_LOC/Libs/Header/SDK/Kernel/KernelBuilder.hpp + + + SDK/Libs/Header/Kernel/KernelProviderService.hpp + 1 + SDK_LOC/Libs/Header/SDK/Kernel/KernelProviderService.hpp + + + SDK/Libs/Header/Messages/CommandMessages.hpp + 1 + SDK_LOC/Libs/Header/SDK/Messages/CommandMessages.hpp + + + SDK/Libs/Header/Messages/MessageBase.hpp + 1 + SDK_LOC/Libs/Header/SDK/Messages/MessageBase.hpp + + + SDK/Libs/Header/Messages/MessageGuard.hpp + 1 + SDK_LOC/Libs/Header/SDK/Messages/MessageGuard.hpp + + + SDK/Libs/Header/Messages/MessageTypes.hpp + 1 + SDK_LOC/Libs/Header/SDK/Messages/MessageTypes.hpp + + + SDK/Libs/Header/Messages/SensorLayerMessages.hpp + 1 + SDK_LOC/Libs/Header/SDK/Messages/SensorLayerMessages.hpp + + + SDK/Libs/Header/Metrics/DeltaCounter.hpp + 1 + SDK_LOC/Libs/Header/SDK/Metrics/DeltaCounter.hpp + + + SDK/Libs/Header/Metrics/MonotonicCounter.hpp + 1 + SDK_LOC/Libs/Header/SDK/Metrics/MonotonicCounter.hpp + + + SDK/Libs/Header/Metrics/MonotonicTime.hpp + 1 + SDK_LOC/Libs/Header/SDK/Metrics/MonotonicTime.hpp + + + SDK/Libs/Header/Metrics/ThrottledSample.hpp + 1 + SDK_LOC/Libs/Header/SDK/Metrics/ThrottledSample.hpp + + + SDK/Libs/Header/Metrics/VariableCounter.hpp + 1 + SDK_LOC/Libs/Header/SDK/Metrics/VariableCounter.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers + 2 + virtual:/virtual + + + SDK/Libs/Header/SensorLayer/SensorConnection.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/SensorConnection.hpp + + + SDK/Libs/Header/SensorLayer/SensorData.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/SensorData.hpp + + + SDK/Libs/Header/SensorLayer/SensorDataBatch.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/SensorDataBatch.hpp + + + SDK/Libs/Header/SensorLayer/SensorDataView.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/SensorDataView.hpp + + + SDK/Libs/Header/SensorLayer/SensorTypes.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/SensorTypes.hpp + + + SDK/Libs/Header/Timer/Timer.hpp + 1 + SDK_LOC/Libs/Header/SDK/Timer/Timer.hpp + + + SDK/Libs/Header/TrackMap/TrackMapBuilder.hpp + 1 + SDK_LOC/Libs/Header/SDK/TrackMap/TrackMapBuilder.hpp + + + SDK/Libs/Header/TrackMap/TrackMapScreen.hpp + 1 + SDK_LOC/Libs/Header/SDK/TrackMap/TrackMapScreen.hpp + + + SDK/Libs/Header/UnaLogger/Logger.h + 1 + SDK_LOC/Libs/Header/SDK/UnaLogger/Logger.h + + + SDK/Libs/Source/AppSystem/AtExitImpl.cpp + 1 + SDK_LOC/Libs/Source/AppSystem/AtExitImpl.cpp + + + SDK/Libs/Source/AppSystem/main.cpp + 1 + SDK_LOC/Libs/Source/AppSystem/EntryPoint/Service/main.cpp + + + SDK/Libs/Source/AppSystem/startup_user_app.s + 1 + SDK_LOC/Libs/Source/AppSystem/startup_user_app.s + + + SDK/Libs/Source/AppSystem/system.cpp + 1 + SDK_LOC/Libs/Source/AppSystem/system.cpp + + + SDK/Libs/Source/FitHelper/FitHelper.cpp + 1 + SDK_LOC/Libs/Source/FitHelper/FitHelper.cpp + + + SDK/Libs/Source/JSON/JsonStreamReader.cpp + 1 + SDK_LOC/Libs/Source/JSON/JsonStreamReader.cpp + + + SDK/Libs/Source/JSON/JsonStreamWriter.cpp + 1 + SDK_LOC/Libs/Source/JSON/JsonStreamWriter.cpp + + + SDK/Libs/Source/Kernel/KernelBuilder.cpp + 1 + SDK_LOC/Libs/Source/Kernel/KernelBuilder.cpp + + + SDK/Libs/Source/SensorLayer/SensorConnection.cpp + 1 + SDK_LOC/Libs/Source/SensorLayer/SensorConnection.cpp + + + SDK/Libs/Source/Timer/Timer.cpp + 1 + SDK_LOC/Libs/Source/Timer/Timer.cpp + + + SDK/Libs/Source/TrackMap/TrackMapBuilder.cpp + 1 + SDK_LOC/Libs/Source/TrackMap/TrackMapBuilder.cpp + + + SDK/Libs/Source/UnaLogger/Logger.cpp + 1 + SDK_LOC/Libs/Source/UnaLogger/Logger.cpp + + + SDK/ThirdParty/coreJSON/source/core_json.c + 1 + SDK_LOC/ThirdParty/coreJSON/source/core_json.c + + + SDK/ThirdParty/coreJSON/source/include + 2 + virtual:/virtual + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserAccelerometer.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserAccelerometer.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserAccelerometerRaw.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserAccelerometerRaw.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserActivity.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserActivity.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserActivityRecognition.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserActivityRecognition.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserAltimeter.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserAltimeter.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserBatteryCharging.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserBatteryCharging.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserBatteryLevel.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserBatteryLevel.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserBatteryMetrics.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserBatteryMetrics.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserFloorCounter.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserFloorCounter.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserGpsDistance.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserGpsDistance.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserGpsLocation.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserGpsLocation.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserGpsSpeed.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserGpsSpeed.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserHeartRate.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserHeartRate.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserMotionDetect.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserMotionDetect.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserPressure.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserPressure.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserStepCounter.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserStepCounter.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserStepDetector.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserStepDetector.hpp + + + SDK/Libs/Header/SensorLayer/DataParsers/SensorDataParserTemperature.hpp + 1 + SDK_LOC/Libs/Header/SDK/SensorLayer/DataParsers/SensorDataParserTemperature.hpp + + + SDK/ThirdParty/coreJSON/source/include/core_json.h + 1 + SDK_LOC/ThirdParty/coreJSON/source/include/core_json.h + + + + + SDK_LOC + $%7BPARENT-6-PROJECT_LOC%7D + + + diff --git a/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.settings/org.eclipse.cdt.core.prefs b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000..f4de6768 --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,30 @@ +eclipse.preferences.version=1 +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_LINKER/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_LINKER/operation=append +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_LINKER/value=${UNA_SDK}/Libs/Source/AppSystem +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_OUTPUT/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_OUTPUT/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_OUTPUT/value=../../../../Output +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_RESOURCES/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_RESOURCES/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_RESOURCES/value=../../../../Resources +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_SCRIPTS/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_SCRIPTS/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/PATH_SCRIPTS/value=${UNA_SDK}/Utilities/Scripts +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/UNA_SDK/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/UNA_SDK/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/UNA_SDK/value=../../../../../../../ +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__APP_ID__/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__APP_ID__/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__APP_ID__/value=A12E9F4C8B7D3A65 +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__APP_NAME__/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__APP_NAME__/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__APP_NAME__/value=Workout +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__BUILD_VERSION__/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__BUILD_VERSION__/operation=replace +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__BUILD_VERSION__/value=0.0.0-local_build +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__DEV_ID__/delimiter=; +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__DEV_ID__/operation=append +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/__DEV_ID__/value=UNA +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/append=true +environment/project/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.767823000/appendContributed=true diff --git a/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/Linker.ld b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/Linker.ld new file mode 100644 index 00000000..79bb3a59 --- /dev/null +++ b/Apps/Workout/Software/Apps/WorkoutService-CubeIDE/Linker.ld @@ -0,0 +1,4 @@ +STACK_SIZE = 10*1024; +RAM_LENGTH = 500K; + +INCLUDE "Main/Sections.ld" diff --git a/Apps/Workout/Software/Libs/Header/ActivitySummary.hpp b/Apps/Workout/Software/Libs/Header/ActivitySummary.hpp new file mode 100644 index 00000000..0192f0b7 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/ActivitySummary.hpp @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file ActivitySummary.hpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Represents a common summary track information. + ****************************************************************************** + * + ****************************************************************************** + */ + +#ifndef ACTIVITY_SUMMARY_HPP +#define ACTIVITY_SUMMARY_HPP + +#include +#include +#include + +/** + * @struct LapSummary + * @brief Summary data for a single lap. + */ +struct LapSummary { + time_t duration; ///< Lap duration in seconds + float hrAvg; ///< Lap average heart rate (bpm) + float hrMax; ///< Lap maximum heart rate (bpm) +}; + +/** + * @struct ActivitySummary + * @brief Represents a common summary track information. + */ +struct ActivitySummary { + time_t utc; ///< Last activity UTC time + time_t time; ///< Total track time in seconds + float hrMax; ///< Maximum Heart Rate in bpm + float hrAvg; ///< Average Heart Rate in bpm + /// Total energy (kcal): zone-weighted MET model including MET 1.0 when HR is out of zone. + float calories = 0.0f; + /// Basal (BMR) component at MET 1.0 every active second (matches FIT session metabolic_calories). + float restingCalories = 0.0f; + /// Calories above basal from the zone MET model: @c calories - @c restingCalories (clamped >= 0). + float activeCalories = 0.0f; + + /// Cumulative seconds spent in HR zones 1..5 (0-indexed). + /// Active seconds with HR below the zone-1 threshold are NOT included here; the + /// HR-zones summary screen lumps them into the zone-1 row for display only. + std::time_t zoneTimeSec[5] = {0, 0, 0, 0, 0}; + + std::vector laps; ///< Per-lap summary data +}; + +#endif // ACTIVITY_SUMMARY_HPP diff --git a/Apps/Workout/Software/Libs/Header/ActivitySummarySerializer.hpp b/Apps/Workout/Software/Libs/Header/ActivitySummarySerializer.hpp new file mode 100644 index 00000000..c41e0c94 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/ActivitySummarySerializer.hpp @@ -0,0 +1,81 @@ +/** + ****************************************************************************** + * @file ActivitySummarySerializer.hpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Serializes/Deserializes summary data to a file. + ****************************************************************************** + * + * The serialized format follows this structure: + * + * @code{.json} + * { + * "utc":1744163530, + * "time":125, + * "hr_max":84, + * "hr_avg":74, + * "calories":42.5, + * "resting_calories":12.0, + * "active_calories":30.5, + * "zone_times_sec":[12,34,56,78,9], + * "lap_count":2, + * "laps":[ + * {"dur":62,"hr_avg":120,"hr_max":135}, + * {"dur":63,"hr_avg":118,"hr_max":132} + * ] + * } + * @endcode + * + ****************************************************************************** + */ + +#ifndef ACTIVITY_SUMMARY_SERIALIZER_HPP +#define ACTIVITY_SUMMARY_SERIALIZER_HPP + +#include "SDK/Kernel/Kernel.hpp" + +#include "ActivitySummary.hpp" + + /** + * @class ActivitySummarySerializer + * @brief Serializes/Deserializes summary data to a file. + */ +class ActivitySummarySerializer { + +public: + + /** + * @brief Constructor. + * @param kernel: Reference to the kernel interface. + * @param pathToFile: Path to the summary file. + */ + ActivitySummarySerializer(const SDK::Kernel& kernel, const char* pathToFile); + + /** + * @brief Destructor. + */ + virtual ~ActivitySummarySerializer() = default; + + /** + * @brief Save summary. + * @param summary: Reference to the Summary structure. + * @return True if summary saved successfully. + */ + bool save(const ActivitySummary& summary); + + /** + * @brief Save summary. + * @param summary: Reference to load the Summary structure. + * @return True if summary read successfully. + */ + bool load(ActivitySummary& summary); + +private: + /// A constant reference to an Kernel object. + const SDK::Kernel& mKernel; + + /// Path to summary file + const char* mPath = nullptr; +}; + +#endif // ACTIVITY_SUMMARY_SERIALIZER_HPP diff --git a/Apps/Workout/Software/Libs/Header/ActivityWriter.hpp b/Apps/Workout/Software/Libs/Header/ActivityWriter.hpp new file mode 100644 index 00000000..cf85cdb4 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/ActivityWriter.hpp @@ -0,0 +1,151 @@ +/** + ****************************************************************************** + * @file ActivityWriter.hpp + * @date 31-08-2025 + * @author Denys Saienko + * @brief Serializes activity data to a FIT file. + ****************************************************************************** + * + ****************************************************************************** + */ + +#ifndef ACTIVITY_WRITER_HPP +#define ACTIVITY_WRITER_HPP + +#include +#include +#include + +#include "SDK/Kernel/Kernel.hpp" +#include "SDK/FitHelper/FitHelper.hpp" + +extern "C" { +#include "fit_product.h" +} + +/** + * @class ActivityWriter + * @brief Serializes activity data to a FIT file. + */ +class ActivityWriter { +public: + struct AppInfo { + std::time_t timestamp = 0; // UTC + uint32_t appVersion = 0; // Application version 4 bytes LE [patch, minor, major, 0] + std::string devID; // Developer ID (max len 16) + std::string appID; // Application ID (max len 16) + }; + + struct RecordData { + enum class Field : uint8_t { + HEART_RATE = 1u << 0, + BATTERY = 1u << 1, + }; + + void set(Field f) { mFlags |= mask(f); } + void clear(Field f) { mFlags &= static_cast(~mask(f)); } + void set(Field f, bool state) { state ? set(f) : clear(f); } + bool has(Field f) const { return (mFlags & mask(f)) != 0; } + void clearAll() { mFlags = 0; } + + std::time_t timestamp = 0; // UTC + float heartRate = 0.0f; // bpm + uint8_t batteryLevel = 0; // % + uint16_t batteryVoltage = 0; // mV + + private: + static constexpr uint8_t mask(Field f) + { + return static_cast(f); + } + + uint8_t mFlags = 0; + }; + + struct LapData { + std::time_t timestamp = 0; // UTC + std::time_t timeStart = 0; // UTC + std::time_t duration = 0; // seconds + std::time_t elapsed = 0; // seconds + float hrAvg = 0.0f; // bpm + float hrMax = 0.0f; // bpm + float calories = 0.0f; // kcal -- total active calories + float restingCalories = 0.0f; // kcal -- BMR over the lap (MET 1.0) + }; + + struct TrackData { + std::time_t timestamp = 0; // UTC + std::time_t timeStart = 0; // UTC + std::time_t duration = 0; // seconds + std::time_t elapsed = 0; // seconds + float hrAvg = 0.0f; // bpm + float hrMax = 0.0f; // bpm + float calories = 0.0f; // kcal -- total active calories + float metabolicCalories = 0.0f; // kcal -- BMR over the session (MET 1.0) + }; + + ActivityWriter(const SDK::Kernel& kernel, const char* pathToDir); + + void start(const AppInfo& info); + void pause(std::time_t timestamp); + void resume(std::time_t timestamp); + void addRecord(const RecordData& record); + void addLap(const LapData& lap); + void stop(const TrackData& track); + void discard(); + +private: + /// A constant reference to an Kernel object. + const SDK::Kernel& mKernel; + + /// Path to FIT file + const char* mPath = nullptr; + + std::unique_ptr mFile = nullptr; + uint16_t mLapCounter = 0; + FIT_UINT16 mDataCRC = 0; + + SDK::Component::FitHelper mFHFileID; + SDK::Component::FitHelper mFHDeveloper; + SDK::Component::FitHelper mFHLap; + SDK::Component::FitHelper mFHSession; + SDK::Component::FitHelper mFHEvent; + SDK::Component::FitHelper mFHActivity; + SDK::Component::FitHelper mFHRecord; + + SDK::Component::FitHelper mFHBatteryLevelField; + SDK::Component::FitHelper mFHBatteryVoltageField; + SDK::Component::FitHelper mFHLapRestingCaloriesField; + + enum class MsgNumber { + FILE = 1, + DEVELOP, + RECORD, + LAP, + SESSION, + ACTIVITY, + EVENT, + BATTERY_LEVEL, + BATTERY_VOLTAGE, + LAP_RESTING_CALORIES, + }; + + FIT_RECORD_MESG prepareRecordMsg(const RecordData& record); + + void AddMessageEvent(std::time_t t, FIT_EVENT_TYPE type); + + bool createAndOpenFile(std::time_t utc); + void saveFile(); + void deleteFile(); + + void saveSummary(const TrackData& track); + + static time_t tm2epoch(const struct tm* tm); + static time_t epochToLocal(time_t utc); + static FIT_DATE_TIME unixToFitTimestamp(std::time_t unixTimestamp); + + void WriteFileHeader(SDK::Interface::IFile* fp); + void WriteCRC(SDK::Interface::IFile* fp); +}; + +#endif // ACTIVITY_WRITER_HPP diff --git a/Apps/Workout/Software/Libs/Header/Commands.hpp b/Apps/Workout/Software/Libs/Header/Commands.hpp new file mode 100644 index 00000000..c05e3c7f --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/Commands.hpp @@ -0,0 +1,320 @@ + +#ifndef COMMANDS_HPP +#define COMMANDS_HPP + +#include + +#include "SDK/Messages/MessageBase.hpp" +#include "SDK/Messages/MessageTypes.hpp" +#include "SDK/Messages/CommandMessages.hpp" +#include "SDK/Messages/MessageGuard.hpp" +#include "SDK/Kernel/Kernel.hpp" + +// Application types +#include "Settings.hpp" +#include "Track.hpp" +#include "ActivitySummary.hpp" + +// Force 4-byte alignment for all message structures +#pragma pack(push, 4) + +namespace CustomMessage { + + // Kernel HR configuration — shared defaults used before first kernel update + static constexpr uint8_t kHrThresholdsCount = 6; + static constexpr uint8_t kHrThresholdsDefault[kHrThresholdsCount] = { 95, 114, 133, 152, 171, 190 }; + + // Application custom commands + // Service --> GUI + constexpr SDK::MessageType::Type SETTINGS_UPDATE = 0x00000001; + constexpr SDK::MessageType::Type LOCAL_TIME = 0x00000002; + constexpr SDK::MessageType::Type BATTERY = 0x00000003; + constexpr SDK::MessageType::Type TRACK_STATE_UPDATE = 0x00000005; + constexpr SDK::MessageType::Type TRACK_DATA_UPDATE = 0x00000006; + constexpr SDK::MessageType::Type LAP_END = 0x00000007; + constexpr SDK::MessageType::Type SUMMARY = 0x00000008; + + // GUI --> Service + constexpr SDK::MessageType::Type SETTINGS_SAVE = 0x0000000A; + constexpr SDK::MessageType::Type TRACK_START = 0x0000000B; + constexpr SDK::MessageType::Type TRACK_STOP = 0x0000000C; + constexpr SDK::MessageType::Type TRACK_PAUSE = 0x0000000D; + constexpr SDK::MessageType::Type TRACK_RESUME = 0x0000000E; + constexpr SDK::MessageType::Type MANUAL_LAP = 0x0000000F; + + // Service <-> GUI + struct SettingsUpd : public SDK::MessageBase { + // Application settings + Settings settings; + + // Kernel settings + bool unitsImperial; + uint8_t hrThresholds[kHrThresholdsCount]; + uint8_t hrThresholdsCount; + + SettingsUpd() + : SDK::MessageBase(SETTINGS_UPDATE) + , unitsImperial(false) + , hrThresholds {} + , hrThresholdsCount(0) + {} + }; + + // Service --> GUI + struct Time : public SDK::MessageBase { + std::tm localTime; + Time() + : SDK::MessageBase(LOCAL_TIME) + , localTime {} + {} + }; + + struct Battery : public SDK::MessageBase { + uint8_t level; + Battery() + : SDK::MessageBase(BATTERY) + , level(0) + {} + }; + + struct TrackStateUpd : public SDK::MessageBase { + Track::State state; + TrackStateUpd() + : SDK::MessageBase(TRACK_STATE_UPDATE) + , state{} + {} + }; + + struct TrackDataUpd : public SDK::MessageBase { + Track::Data data; + TrackDataUpd() + : SDK::MessageBase(TRACK_DATA_UPDATE) + , data{} + {} + }; + + struct LapEnded : public SDK::MessageBase { + uint32_t lapNum; + LapEnded() + : SDK::MessageBase(LAP_END) + , lapNum(0) + {} + }; + + struct Summary : public SDK::MessageBase { + const ActivitySummary* summary; ///< Non-owning pointer; receiver must copy before releaseMessage + Summary() + : SDK::MessageBase(SUMMARY) + , summary(nullptr) + {} + }; + + // GUI --> Service + struct SettingsSave : public SDK::MessageBase { + // Application settings + Settings settings; + + SettingsSave() + : SDK::MessageBase(SETTINGS_SAVE) + {} + }; + + struct TrackStart : public SDK::MessageBase { + TrackStart() : SDK::MessageBase(TRACK_START) {} + }; + + struct TrackStop : public SDK::MessageBase { + bool discard; // If true, tarck will be discarded, otherwise saved + TrackStop() + : SDK::MessageBase(TRACK_STOP) + , discard(false) + {} + }; + + struct TrackPause : public SDK::MessageBase { + TrackPause() : SDK::MessageBase(TRACK_PAUSE) {} + }; + + struct TrackResume : public SDK::MessageBase { + TrackResume() : SDK::MessageBase(TRACK_RESUME) {} + }; + + struct ManualLap : public SDK::MessageBase { + ManualLap() : SDK::MessageBase(MANUAL_LAP) {} + }; + + +// Helper wrapper +class Sender { +public: + Sender(const SDK::Kernel &kernel) : + mKernel(kernel) + { + } + virtual ~Sender() = default; + + // Service --> GUI + bool settingsUpd(Settings settings, bool units, + const uint8_t (&thresholds)[kHrThresholdsCount], uint8_t thresholdCount) + { + if (auto msg = SDK::make_msg(mKernel)) { + msg->settings = settings; + msg->unitsImperial = units; + memcpy(msg->hrThresholds, thresholds, sizeof(msg->hrThresholds)); + msg->hrThresholdsCount = thresholdCount; + return msg.send(); + } + + return false; + } + + bool time(std::tm localTime) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->localTime = localTime; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool battery(uint8_t level) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->level = level; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool trackState(Track::State state) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->state = state; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool trackData(const Track::Data &data) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->data = data; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool lapEnd(uint32_t lapNum) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->lapNum = lapNum; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool summary(const ActivitySummary* summaryPtr) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->summary = summaryPtr; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + // GUI --> Service + bool settingsSave(Settings settings) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->settings = settings; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool trackStart() + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool trackStop(bool discard) + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->discard = discard; + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool trackPause() + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool trackResume() + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } + + bool manualLap() + { + bool status = false; + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + status = mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } + return status; + } +private: + const SDK::Kernel &mKernel; +}; + + +} // namespace CustomMessage + +#pragma pack(pop) + +#endif // COMMANDS_HPP diff --git a/Apps/Workout/Software/Libs/Header/Service.hpp b/Apps/Workout/Software/Libs/Header/Service.hpp new file mode 100644 index 00000000..4baff40e --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/Service.hpp @@ -0,0 +1,152 @@ +#ifndef SERVICE_HPP +#define SERVICE_HPP + +#include "SDK/Kernel/Kernel.hpp" +#include "SDK/SensorLayer/SensorConnection.hpp" +#include "SDK/SensorLayer/SensorDataBatch.hpp" +#include "SDK/Metrics/MonotonicTime.hpp" +#include "SDK/Metrics/MonotonicCounter.hpp" +#include "SDK/Metrics/VariableCounter.hpp" +#include "SDK/Metrics/DeltaCounter.hpp" +#include "SDK/Metrics/ThrottledSample.hpp" +#include "SDK/Filters/SimpleLPF.hpp" + +#include "SettingsSerializer.hpp" +#include "ActivitySummarySerializer.hpp" +#include "ActivityWriter.hpp" +#include "Commands.hpp" +#include "WristTiltDetector.hpp" +#include + +class Service : public WristTiltDetector::IListener +{ +public: + Service(SDK::Kernel &kernel); + + virtual ~Service(); + + void run(); + +private: + // -- Constants ------------------------------------------------------------ + + static constexpr uint32_t skBacklightTimeout = 5000; + static constexpr uint32_t skSamplePeriod = 1000; + static constexpr uint32_t skSampleLatency = 1000; + + static constexpr uint32_t skBatteryLogPeriodMs = 5 * 60 * 1000; + static constexpr float skFusionSampleRateHz = 100.0f; + static constexpr float skDefaultWeightKg = 75.0f; ///< Fallback when the system profile weight is absent or zero. + + // -- Infrastructure ------------------------------------------------------- + + SDK::Kernel& mKernel; + bool mGuiStarted; + CustomMessage::Sender mGuiSender; + + // -- Settings & persistence ----------------------------------------------- + + Settings mSettings; + bool mIsImperial = false; + SettingsSerializer mSettingsSerializer; + ActivitySummary mSummary; + ActivitySummarySerializer mActivitySummarySerializer; + ActivityWriter mActivityWriter; + + // -- Sensors -------------------------------------------------------------- + + SDK::Sensor::Connection mSensorPressure; + SDK::Sensor::Connection mSensorHr; + SDK::Sensor::Connection mSensorBatteryLevel; + SDK::Sensor::Connection mSensorBatteryMetrics; + SDK::Sensor::Connection mSensorWristMotion; + SDK::Sensor::Connection mSensorFusion; + bool mIsSensorsConnected = false; + + // -- Metrics -------------------------------------------------------------- + + SDK::Metric::MonotonicTime mTimeTracker; + SDK::Metric::MonotonicCounter mTimeCounter; + SDK::Metric::MonotonicCounter mDistanceCounter; + SDK::Metric::VariableCounter mSpeedCounter; + SDK::Metric::VariableCounter mHrCounter; + SDK::Filter::SimpleLPF mAltitudeFilter; + SDK::Metric::DeltaCounter mAltitudeCounter; + + // Battery SoC and voltage are sampled independently; + // a FIT record is written only when both are due. + SDK::Metric::ThrottledSample mBatterySoc; ///< State of charge, percent + SDK::Metric::ThrottledSample mBatteryVoltage; ///< Voltage, volts + + float mSeaLevelPressure = 0.0f; // Pa + float mWeightKg = skDefaultWeightKg; ///< From system profile; falls back to skDefaultWeightKg. + std::array mHrThresholds = {}; + uint8_t mHrThresholdCount = 0; + + // -- Track state ---------------------------------------------------------- + + enum class LapDivSource { + OFF = 0, + TIME, + }; + + LapDivSource mLapDivSource = LapDivSource::OFF; + Track::State mTrackState = Track::State::INACTIVE; + bool mSessionNotEmpty = false; + bool mLapNotEmpty = false; + Track::Data mTrackData{}; + + // -- Wrist tilt ----------------------------------------------------------- + + WristTiltDetector mWristTiltDetector; + + // -- Lifecycle ------------------------------------------------------------ + + void connectSensors(); + void disconnect(); + void onStartGUI(); + void onStopGUI(); + + // -- Sensor data dispatch ------------------------------------------------- + + void handleSensorsData(uint16_t handle, SDK::Sensor::DataBatch& data); + + // -- Event handlers ------------------------------------------------------- + + void handleEvent(const CustomMessage::TrackStart& event); + void handleEvent(const CustomMessage::TrackStop& event); + void handleEvent(const CustomMessage::SettingsSave& event); + void handleEvent(const CustomMessage::TrackPause& event); + void handleEvent(const CustomMessage::TrackResume& event); + void handleEvent(const CustomMessage::ManualLap& event); + + // -- Track control -------------------------------------------------------- + + void sendInitialInfoToGui(); + void startTrack(std::time_t utc); + void processTrack(); + void updateHrDerivedMetrics(); + void saveLap(); + void stopTrack(bool discard); + void pauseTrack(bool pause); + void buildPartialSummary(); + ActivityWriter::RecordData prepareRecordData(); + LapDivSource getLapDivSource(); + uint8_t getHrZone(float hr) const; + float getZoneMet(uint8_t zone) const; + + // -- Notifications -------------------------------------------------------- + + void setCapabilities(); + void notifyLapEnd(); + void notifyNewActivity(); + void backlightOn(uint32_t timeoutMs = skBacklightTimeout); + void playBuzzerPattern(uint16_t beepMs, uint8_t count = 1, uint16_t silenceMs = 100); + void playVibroPattern(SDK::Message::RequestVibroPlay::Effect effect, uint8_t count = 1, uint16_t silenceMs = 100); + + // -- WristTilt callback --------------------------------------------------- + + virtual void onWristTilt(uint32_t timestampMs) override; +}; + +#endif // SERVICE_HPP diff --git a/Apps/Workout/Software/Libs/Header/Settings.hpp b/Apps/Workout/Software/Libs/Header/Settings.hpp new file mode 100644 index 00000000..9491376b --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/Settings.hpp @@ -0,0 +1,47 @@ +/** + ****************************************************************************** + * @file Settings.hpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Application settings structure and alert sub-types. + ****************************************************************************** + * + ****************************************************************************** + */ + +#ifndef SETTINGS_HPP +#define SETTINGS_HPP + +#include + +/** + * @brief Application settings persisted to storage. + */ +struct Settings { + /// Settings version. + static constexpr uint8_t kVersion = 1; + + struct Alerts { + struct Time { + enum Id : uint8_t { + ID_OFF = 0, ID_MIN_1, ID_MIN_5, ID_MIN_10, + ID_MIN_15, ID_MIN_20, ID_MIN_30, + ID_COUNT, ID_DEFAULT = ID_OFF + }; + static constexpr uint16_t kValues[ID_COUNT] = { 0, 1, 5, 10, 15, 20, 30 }; + + static constexpr uint32_t toSeconds(Id id) { + return kValues[id] * 60u; + } + }; + }; + + + // Fields + uint32_t version = kVersion; ///< Settings version. + + bool phoneNotifEn = true; ///< Flag to enable receiving phone notification when app is run. + Alerts::Time::Id alertTimeId = Alerts::Time::ID_OFF; ///< Time alert option. +}; + +#endif // SETTINGS_HPP diff --git a/Apps/Workout/Software/Libs/Header/SettingsSerializer.hpp b/Apps/Workout/Software/Libs/Header/SettingsSerializer.hpp new file mode 100644 index 00000000..1d56a7e5 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/SettingsSerializer.hpp @@ -0,0 +1,68 @@ +/** + ****************************************************************************** + * @file SettingsSerializer.hpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Serializes/Deserializes settings to a file. + ****************************************************************************** + * + * The serialized format follows this structure: + * + * @code{.json} + * { + * "version":1, + * "phone_notif_en":true, + * "alert_time_id":0 + * } + * @endcode + * + ****************************************************************************** + */ + +#ifndef SETTINGS_SERIALIZER_HPP +#define SETTINGS_SERIALIZER_HPP + +#include +#include + +#include "SDK/Kernel/Kernel.hpp" + +#include "Settings.hpp" + + +/** + * @brief Serializes/Deserializes settings to a file. + */ +class SettingsSerializer { + +public: + + /** + * @brief Constructor. + * @param kernel Reference to the kernel interface. + * @param pathToFile Path to the settings file. + */ + SettingsSerializer(const SDK::Kernel& kernel, const char *pathToFile); + + ~SettingsSerializer() = default; + + /** + * @brief Save settings to file. + * @param settings Reference to the Settings structure to save. + * @return True if settings saved successfully. + */ + bool save(const Settings &settings); + + /** + * @brief Load settings from file. + * @param settings Reference to the Settings structure to populate. + * @return True if settings loaded successfully. + */ + bool load(Settings &settings); + +private: + const SDK::Kernel& mKernel; ///< Reference to the kernel interface. + const char* mPath; ///< Path to the settings file. +}; + +#endif // SETTINGS_SERIALIZER_HPP diff --git a/Apps/Workout/Software/Libs/Header/Track.hpp b/Apps/Workout/Software/Libs/Header/Track.hpp new file mode 100644 index 00000000..8c58fa26 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/Track.hpp @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file Track.hpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Track namespace: state and real-time metrics. + ****************************************************************************** + * + ****************************************************************************** + */ + +#ifndef TRACK_HPP +#define TRACK_HPP + +#include +#include + +namespace Track +{ + +/** + * @brief Activity tracking state. + */ +enum class State { + INACTIVE = 0, + ACTIVE, + PAUSED +}; + +/** + * @brief Real-time metrics snapshot; updated every second by the Service. + */ +struct Data { + // Time, s + std::time_t totalTime = 0; + std::time_t lapTime = 0; + + uint32_t lapNum = 0; + + // Heart rate, bpm + float hr = 0.0f; + float hrTrustLevel = 0.0f; + float avgHR = 0.0f; + float maxHR = 0.0f; + float avgLapHR = 0.0f; + float maxLapHR = 0.0f; + uint8_t hrZone = 0; ///< 0 = none, 1..5 = active zone + float totalCalories = 0.0f; + float lapCalories = 0.0f; + /// Basal (BMR) calories accumulated at MET 1.0 every active second, regardless of HR. + /// Reported in the FIT file as session "metabolic_calories" / lap "resting_calories". + float restingCaloriesTotal = 0.0f; + float restingCaloriesLap = 0.0f; + std::time_t zoneTimeSec[5] = {0, 0, 0, 0, 0}; ///< cumulative time in zones 1..5 +}; + +} // namespace Track + +#endif // TRACK_HPP diff --git a/Apps/Workout/Software/Libs/Header/WristTiltDetector.hpp b/Apps/Workout/Software/Libs/Header/WristTiltDetector.hpp new file mode 100644 index 00000000..de24b725 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/WristTiltDetector.hpp @@ -0,0 +1,316 @@ +/******************************************************************************* + * @file WristTiltDetector.hpp + * @date 22-04-2025 + * @author Denys Saienko + * @brief Wrist-tilt (watch-look) gesture detector for walking and running. + * + * Algorithm overview: + * 1. MOTION CLASSIFICATION (5 s sliding window on AY delta) + * Computes avg_swing = mean(|ay[i] - ay[i-1]|) over the window. + * Maps avg_swing to one of three motion classes: + * STATIONARY, WALKING, RUNNING. + * Hysteresis: state only changes when a threshold is strictly + * crossed; the STATIONARY class has a dedicated lower bound so + * that noise near zero does not flip the state back and forth. + * + * 2. DYNAMIC GX THRESHOLD + * Each motion class has its own peak-GX detection threshold + * (raw int16 LSB from the sensor register). Higher thresholds + * for more vigorous activities prevent running arm-swing from + * flooding the gesture output. + * + * 3. TILT STATE MACHINE + * IDLE -> if |GX| exceeds the dynamic threshold -> ACTIVE + * ACTIVE -> held for holdDurationS seconds, listener notified + * once on entry -> COOLDOWN + * COOLDOWN -> held for cooldownDurationS seconds -> IDLE + * + * Raw LSB units (not converted to physical units) are used throughout + * for efficiency and to avoid floating-point on resource-limited MCUs. + * + * Default tuning values are taken directly from wrist_tilt11.py and + * validated on three BMI270 datasets (running, walking, stationary): + * motionWindowS = 5.0 s + * avgSwingStationary= 50 LSB + * avgSwingWalking = 60 LSB + * avgSwingRunning = 400 LSB + * gxThreshStationary= 3000 LSB + * gxThreshWalking = 5100 LSB + * gxThreshRunning = 5300 LSB + * holdDurationS = 3.0 s + * cooldownDurationS = 0.5 s + * + * Sample rate assumption: 100 Hz (10 ms / sample). + * Adjustable via Config::sampleRateHz. + ******************************************************************************/ + +#ifndef WRIST_TILT_DETECTOR_HPP +#define WRIST_TILT_DETECTOR_HPP + +#include +#include + + /******************************************************************************* + * @brief Single IMU sample carrying the two axes used by this detector. + * + * Values are raw 16-bit signed integers as delivered by the sensor + * FIFO — no scaling or unit conversion applied. + ******************************************************************************/ +struct TiltImuSample { + int16_t ayLsb; /**< Accelerometer Y axis, raw LSB (motion classification) */ + int16_t gxLsb; /**< Gyroscope X axis, raw LSB (gesture trigger) */ + uint32_t timestampMs; /**< Absolute timestamp of this sample, ms */ +}; + +/******************************************************************************* + * @brief Motion activity class reported by the internal classifier. + ******************************************************************************/ +enum class MotionClass : uint8_t { + STATIONARY = 0, + WALKING = 1, + RUNNING = 2, +}; + +/******************************************************************************* + * @brief Wrist-tilt gesture detector. + * + * Thread safety: NOT thread-safe. Call addBatch() from a single task. + * + * Typical usage (FIFO interrupt context, 50-sample batches at 100 Hz): + * + * WristTiltDetector detector; + * detector.setListener(&myListener); + * + * // in FIFO callback: + * TiltImuSample batch[50]; + * fillBatchFromFifo(batch, 50); + * detector.addBatch(batch, 50); + ******************************************************************************/ +class WristTiltDetector { +public: + /*-------------------------------------------------------------------------- + * Configuration + *------------------------------------------------------------------------*/ + struct Config { + /** Input sample rate, Hz. Used to size the motion window and timers. */ + float sampleRateHz = 100.0f; + + /** + * Motion classification window length, seconds. + * avg_swing is computed over the most recent (sampleRateHz * motionWindowS) + * samples. Longer windows give more stable classification but respond + * slower to activity changes. + */ + float motionWindowS = 5.0f; + + /** + * @defgroup MotionThresholds avg_swing thresholds (raw LSB) + * + * avg_swing = mean of |ay[i] - ay[i-1]| over the motion window. + * + * Classification logic: + * avg_swing > avgSwingRunning -> RUNNING + * avg_swing > avgSwingWalking -> WALKING + * avg_swing < avgSwingStationary -> STATIONARY + * (else: retain current class — hysteresis band between thresholds) + * @{ + */ + float avgSwingStationary = 50.0f; /**< Upper bound for STATIONARY */ + float avgSwingWalking = 60.0f; /**< Lower bound for WALKING */ + float avgSwingRunning = 400.0f; /**< Lower bound for RUNNING */ + /** @} */ + + /** + * @defgroup GxThresholds Peak |GX| thresholds per motion class (raw LSB) + * + * A single sample must exceed this threshold to trigger the state + * machine transition IDLE -> ACTIVE. + * @{ + */ + int32_t gxThreshStationary = 3000; /**< LSB — stationary wrist tilt */ + int32_t gxThreshWalking = 5100; /**< LSB — walking wrist tilt */ + int32_t gxThreshRunning = 5300; /**< LSB — running wrist tilt */ + /** @} */ + + /** + * Duration to hold the ACTIVE state after a gesture is detected, s. + * The listener is called once when entering ACTIVE. + */ + float holdDurationS = 3.0f; + + /** Minimum gap between two consecutive gesture events, s. */ + float cooldownDurationS = 0.5f; + }; + + /*-------------------------------------------------------------------------- + * IListener + *------------------------------------------------------------------------*/ + class IListener { + public: + virtual ~IListener() = default; + + /** + * @brief Called once when a wrist-tilt gesture is detected. + * @param timestampMs Timestamp of the triggering sample, ms. + */ + virtual void onWristTilt(uint32_t timestampMs) = 0; + + /** + * @brief Called every time the detected motion class changes. + * @param motionClass New motion class. + * @param timestampMs Timestamp of the sample that caused the change, ms. + */ + virtual void onMotionClassChange(MotionClass motionClass, + uint32_t timestampMs) + {} + }; + + /*-------------------------------------------------------------------------- + * Construction / lifecycle + *------------------------------------------------------------------------*/ + + /** + * @brief Construct with explicit configuration. + * @param cfg Tuning parameters. + */ + explicit WristTiltDetector(const Config& cfg) noexcept; + + /** @brief Construct with default configuration. */ + WristTiltDetector() noexcept : WristTiltDetector(Config{}) {} + + /** + * @brief Set or replace the event listener. + * @param listener Pointer to listener; nullptr disables all callbacks. + */ + void setListener(IListener* listener) noexcept; + + /** + * @brief Reset all internal state to initial values. + * Configuration and listener are preserved. + */ + void reset() noexcept; + + /** + * @brief Apply a new configuration and reset all internal state. + * + * Equivalent to constructing a fresh instance with the given config + * while keeping the current listener. Must be called before the + * first addBatch() call when the default constructor was used and + * non-default tuning is required. + * + * @param cfg New tuning parameters to apply. + */ + void setConfig(const Config& cfg) noexcept; + + /*-------------------------------------------------------------------------- + * Main processing + *------------------------------------------------------------------------*/ + + /** + * @brief Process one batch of IMU samples. + * + * Must be called for every incoming batch in chronological order. + * Samples within the batch must also be in chronological order. + * + * @param samples Pointer to array of TiltImuSample. + * @param count Number of valid samples in the array. + * @return true if at least one gesture event was fired in this batch. + * @return false otherwise. + */ + bool addBatch(const TiltImuSample* samples, size_t count) noexcept; + + /*-------------------------------------------------------------------------- + * Diagnostics + *------------------------------------------------------------------------*/ + + /** @brief Total gesture events fired since construction or last reset(). */ + uint32_t totalEvents() const noexcept { return mTotalEvents; } + + /** @brief Current motion classification. */ + MotionClass currentMotionClass() const noexcept { return mMotionClass; } + + /** @brief Current avg_swing value (last computed, raw LSB). */ + float lastAvgSwing() const noexcept { return mLastAvgSwing; } + +private: + /*-------------------------------------------------------------------------- + * Internal types + *------------------------------------------------------------------------*/ + enum class TiltState : uint8_t { IDLE, ACTIVE, COOLDOWN }; + + /*-------------------------------------------------------------------------- + * Internal helpers + *------------------------------------------------------------------------*/ + + /** + * @brief Push one AY sample into the sliding window and update mGxSum. + * @param ay AY value of the new sample. + * @param prevAy AY value of the previous sample (for delta computation). + */ + void pushMotionSample(int16_t ay, int16_t prevAy) noexcept; + + /** + * @brief Compute current avg_swing from the running sum. + * @retval Average absolute delta of AY over the motion window, LSB. + */ + float computeAvgSwing() const noexcept; + + /** + * @brief Update mMotionClass based on current avg_swing. + * @param avgSwing Result of computeAvgSwing(). + * @param tsMs Timestamp of the triggering sample for the callback. + */ + void updateMotionClass(float avgSwing, uint32_t tsMs) noexcept; + + /** + * @brief Return the GX detection threshold for the current motion class. + * @retval Threshold in raw LSB. + */ + int32_t dynamicGxThreshold() const noexcept; + + /** + * @brief Process one sample through the tilt state machine. + * @param sample Current IMU sample. + * @return true if a gesture event was fired. + */ + bool processSample(const TiltImuSample& sample) noexcept; + + /*-------------------------------------------------------------------------- + * Motion window ring buffer + * + * Stores the absolute delta |ay[i] - ay[i-1]| for each sample so the + * running sum can be maintained in O(1) per sample. + *------------------------------------------------------------------------*/ + static constexpr uint16_t MAX_MOTION_WIN = 1024u; /**< Max window samples */ + + float mDeltaBuf[MAX_MOTION_WIN] = {}; /**< Ring: |ay[i] - ay[i-1]| */ + uint16_t mMotionHead = 0u; /**< Write index in ring */ + uint16_t mMotionFilled = 0u; /**< Samples stored (<= capacity)*/ + uint16_t mMotionCapacity = 0u; /**< Window size in samples */ + float mDeltaSum = 0.0f; /**< Running sum of mDeltaBuf */ + + int16_t mPrevAy = 0; /**< Previous AY for delta calc */ + bool mHasPrevAy = false; + + /*-------------------------------------------------------------------------- + * Tilt state machine + *------------------------------------------------------------------------*/ + TiltState mTiltState = TiltState::IDLE; + uint32_t mStateDeadline = 0u; /**< Sample count when state timer expires */ + uint32_t mSampleCount = 0u; /**< Total samples processed */ + + uint32_t mHoldSamples = 0u; /**< holdDurationS * sampleRateHz */ + uint32_t mCooldownSamples = 0u; /**< cooldownDurationS * sampleRateHz */ + + /*-------------------------------------------------------------------------- + * Classification & diagnostics + *------------------------------------------------------------------------*/ + MotionClass mMotionClass = MotionClass::STATIONARY; + float mLastAvgSwing = 0.0f; + uint32_t mTotalEvents = 0u; + + Config mCfg; + IListener* mListener = nullptr; +}; + +#endif // WRIST_TILT_DETECTOR_HPP diff --git a/Apps/Workout/Software/Libs/Header/icon_30x30.h b/Apps/Workout/Software/Libs/Header/icon_30x30.h new file mode 100644 index 00000000..e3c62d02 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/icon_30x30.h @@ -0,0 +1,78 @@ +/* + * Auto-generated by png2abgr2222.py + * Do not edit by hand. + */ +#pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Source: icon_30x30.png | 30x30 | 900 bytes ABGR2222 */ +#define ICON_30X30_WIDTH 30 +#define ICON_30X30_HEIGHT 30 +#define ICON_30X30_SIZE 900 +static const uint8_t ICON_30X30_ABGR2222[900] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xA8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, 0xA8, 0x28, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, + 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xA8, 0xE8, 0xA8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x28, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xD4, 0x28, + 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xEA, 0xAA, 0x6A, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x28, 0x68, 0x68, 0x28, 0x00, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE9, 0xFF, 0xFF, 0xFF, 0xEA, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE9, 0xFF, 0xFF, 0xFF, 0xE9, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x28, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE9, 0xFF, + 0xFF, 0xFF, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE9, 0xFF, 0xFF, 0xFF, + 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0xE8, 0xA8, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xAA, 0xFF, 0xFF, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x2A, 0xAA, 0xE9, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xD4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x68, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, + 0xD4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, + 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xD4, 0xE8, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, + 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, + 0x68, 0x00, 0x00, 0x00 +}; + +#ifdef __cplusplus +} +#endif diff --git a/Apps/Workout/Software/Libs/Header/icon_60x60.h b/Apps/Workout/Software/Libs/Header/icon_60x60.h new file mode 100644 index 00000000..f5329ee5 --- /dev/null +++ b/Apps/Workout/Software/Libs/Header/icon_60x60.h @@ -0,0 +1,246 @@ +/* + * Auto-generated by png2abgr2222.py + * Do not edit by hand. + */ +#pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Source: icon_60x60.png | 60x60 | 3600 bytes ABGR2222 */ +#define ICON_60X60_WIDTH 60 +#define ICON_60X60_HEIGHT 60 +#define ICON_60X60_SIZE 3600 +static const uint8_t ICON_60X60_ABGR2222[3600] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xA8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xD4, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0xA8, 0xA8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xD4, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, + 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, 0xA8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xD4, 0xA8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0xA8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xD4, 0xA8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0xA8, + 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xEA, + 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0xA8, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, + 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xEA, 0xFF, 0xFF, 0xEA, 0xAA, 0x2A, + 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0xA8, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x28, 0x00, 0x00, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xAA, 0x2A, 0x00, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, + 0x28, 0x00, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xEA, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, + 0x28, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xD4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE9, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xD4, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0xA8, 0xA8, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xD4, 0x00, 0x6A, 0xEA, 0xFF, 0xFF, 0xFF, 0xE9, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, + 0x00, 0x6A, 0xEA, 0xFF, 0xEA, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, + 0xAA, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xA8, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xA8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xA8, 0xE8, 0xA8, + 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +#ifdef __cplusplus +} +#endif diff --git a/Apps/Workout/Software/Libs/Sources/ActivitySummarySerializer.cpp b/Apps/Workout/Software/Libs/Sources/ActivitySummarySerializer.cpp new file mode 100644 index 00000000..7b371549 --- /dev/null +++ b/Apps/Workout/Software/Libs/Sources/ActivitySummarySerializer.cpp @@ -0,0 +1,210 @@ +/** + ****************************************************************************** + * @file ActivitySummarySerializer.cpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Serializes/Deserializes summary data to a file. + ****************************************************************************** + * + ****************************************************************************** + */ + +#include "ActivitySummarySerializer.hpp" + +#include +#include +#include + +#include "SDK/JSON/JsonStreamWriter.hpp" +#include "SDK/JSON/JsonStreamReader.hpp" + +#define LOG_MODULE_PRX "ActivitySummarySerializer" +#define LOG_MODULE_LEVEL LOG_LEVEL_DEBUG +#include "SDK/UnaLogger/Logger.h" + +ActivitySummarySerializer::ActivitySummarySerializer(const SDK::Kernel& kernel, + const char* pathToFile) : + mKernel(kernel), mPath(pathToFile) +{ + assert(pathToFile != nullptr); +} + +bool ActivitySummarySerializer::save(const ActivitySummary& summary) +{ + const char* slash = strrchr(mPath, '/'); + if (slash) { + char buff[SDK::Interface::IFileSystem::skMaxPathLen]{ }; + snprintf(buff, sizeof(buff), "%.*s", static_cast(slash - mPath), mPath); + // Create dir + if (!mKernel.fs.mkdir(buff)) { + return false; + } + } + + std::unique_ptr file = mKernel.fs.file(mPath); + + if (!file) { + return false; + } + + if (!file->open(true, true)) { + file.reset(); + return false; + } + + SDK::JsonStreamWriter writer(file.get()); + + writer.startMap(); + + writer.add("utc", static_cast(summary.utc)); + writer.add("time", static_cast(summary.time)); + writer.add("hr_max", summary.hrMax); + writer.add("hr_avg", summary.hrAvg); + writer.add("calories", summary.calories); + writer.add("resting_calories", summary.restingCalories); + writer.add("active_calories", summary.activeCalories); + + writer.startArray("zone_times_sec"); + for (const std::time_t sec : summary.zoneTimeSec) { + writer.add(static_cast(sec)); + } + writer.endArray(); + + writer.add("lap_count", static_cast(summary.laps.size())); + writer.startArray("laps"); + for (const LapSummary& lap : summary.laps) { + writer.startMap(); + writer.add("dur", static_cast(lap.duration)); + writer.add("hr_avg", lap.hrAvg); + writer.add("hr_max", lap.hrMax); + writer.endMap(); + } + writer.endArray(); + + writer.endMap(); + + file->flush(); + file->close(); + + return true; +} + +bool ActivitySummarySerializer::load(ActivitySummary& summary) +{ + std::unique_ptr file = mKernel.fs.file(mPath); + + if (!file) { + return false; + } + + if (!file->exist()) { + file.reset(); + return false; + } + + if (!file->open(false, false)) { + file.reset(); + return false; + } + + size_t fileSize = file->size(); + if (fileSize == 0) { // Check for adequate size + file->close(); + file.reset(); + return false; + } + + char* buffer = new (std::nothrow)char[fileSize]; + if (buffer == nullptr) { + file->close(); + file.reset(); + return false; + } + + size_t read = 0; + bool status = (file->read(buffer, fileSize, read) || read != fileSize); + + file->close(); + file.reset(); + + if (!status) { + delete[] buffer; + return false; + } + + SDK::JsonStreamReader reader(buffer, fileSize); + + if (!reader.validate()) { + LOG_ERROR("JSON is invalid\n"); + delete[] buffer; + return false; + } + + // If any fields are missing, just ignore it. + +#if defined(SIMULATOR) +#if defined(_USE_32BIT_TIME_T) + uint32_t tmp; +#else + uint64_t tmp; +#endif + reader.get("time", tmp); + summary.time = static_cast(tmp); + reader.get("utc", tmp); + summary.utc = static_cast(tmp); +#else + reader.get("time", summary.time); + reader.get("utc", summary.utc); +#endif + reader.get("hr_max", summary.hrMax); + reader.get("hr_avg", summary.hrAvg); + summary.calories = 0.0f; + reader.get("calories", summary.calories); + + summary.restingCalories = 0.0f; + summary.activeCalories = 0.0f; + const bool hasRestingCal = reader.get("resting_calories", summary.restingCalories); + const bool hasActiveCal = reader.get("active_calories", summary.activeCalories); + // Older summaries only stored total "calories"; treat it as active for the split UI. + if (!hasRestingCal && !hasActiveCal && summary.calories > 0.0f) { + summary.activeCalories = summary.calories; + } + + // Zone times. Missing in pre-zones summaries -> leave zeros. + for (size_t i = 0; i < std::size(summary.zoneTimeSec); ++i) { + summary.zoneTimeSec[i] = 0; + char query[32]; + snprintf(query, sizeof(query), "zone_times_sec[%zu]", i); + uint32_t sec = 0; + if (reader.get(query, sec)) { + summary.zoneTimeSec[i] = static_cast(sec); + } + } + + // Laps + uint32_t lapCount = 0; + reader.get("lap_count", lapCount); + summary.laps.clear(); + summary.laps.reserve(lapCount); + for (uint32_t i = 0; i < lapCount; ++i) { + char query[32]; + LapSummary lap{}; + + uint32_t dur = 0; + snprintf(query, sizeof(query), "laps[%" PRIu32 "].dur", i); + reader.get(query, dur); + lap.duration = static_cast(dur); + + snprintf(query, sizeof(query), "laps[%" PRIu32 "].hr_avg", i); + reader.get(query, lap.hrAvg); + + snprintf(query, sizeof(query), "laps[%" PRIu32 "].hr_max", i); + reader.get(query, lap.hrMax); + + summary.laps.push_back(lap); + } + + delete[] buffer; + + return true; +} diff --git a/Apps/Workout/Software/Libs/Sources/ActivityWriter.cpp b/Apps/Workout/Software/Libs/Sources/ActivityWriter.cpp new file mode 100644 index 00000000..fed6ad8b --- /dev/null +++ b/Apps/Workout/Software/Libs/Sources/ActivityWriter.cpp @@ -0,0 +1,553 @@ +/** + ****************************************************************************** + * @file ActivityWriter.hpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Serializes activity data to a file. + ****************************************************************************** + * + ****************************************************************************** + */ + +#include "ActivityWriter.hpp" + +#include "SDK/Interfaces/IFileSystem.hpp" +#include "SDK/JSON/JsonStreamWriter.hpp" + +extern "C" { +#include "fit_product.h" +#include "fit_crc.h" +} + +#include +#include + +#define LOG_MODULE_PRX "ActivityWriter" +#define LOG_MODULE_LEVEL LOG_LEVEL_DEBUG +#include "SDK/UnaLogger/Logger.h" + +ActivityWriter::ActivityWriter(const SDK::Kernel& kernel, const char* pathToDir) + : mKernel(kernel), mPath(pathToDir) + , mFHFileID(static_cast(MsgNumber::FILE), fit_mesg_defs[FIT_MESG_FILE_ID]) + , mFHDeveloper(static_cast(MsgNumber::DEVELOP), fit_mesg_defs[FIT_MESG_DEVELOPER_DATA_ID]) + , mFHLap(static_cast(MsgNumber::LAP), fit_mesg_defs[FIT_MESG_LAP]) + , mFHSession(static_cast(MsgNumber::SESSION), fit_mesg_defs[FIT_MESG_SESSION]) + , mFHEvent(static_cast(MsgNumber::EVENT), fit_mesg_defs[FIT_MESG_EVENT]) + , mFHActivity(static_cast(MsgNumber::ACTIVITY), fit_mesg_defs[FIT_MESG_ACTIVITY]) + , mFHRecord(static_cast(MsgNumber::RECORD), fit_mesg_defs[FIT_MESG_RECORD]) + , mFHBatteryLevelField(static_cast(MsgNumber::BATTERY_LEVEL), 2, { &mFHRecord }) + , mFHBatteryVoltageField(static_cast(MsgNumber::BATTERY_VOLTAGE), 3, { &mFHRecord }) + , mFHLapRestingCaloriesField(static_cast(MsgNumber::LAP_RESTING_CALORIES), 4, { &mFHLap }) +{ + assert(pathToDir != nullptr); + + mFHFileID.init(); + + mFHDeveloper.init(); + + mFHLap.init({ FIT_LAP_FIELD_NUM_TIMESTAMP, + FIT_LAP_FIELD_NUM_START_TIME, + FIT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME, + FIT_LAP_FIELD_NUM_TOTAL_TIMER_TIME, + FIT_LAP_FIELD_NUM_MESSAGE_INDEX, + FIT_LAP_FIELD_NUM_AVG_HEART_RATE, + FIT_LAP_FIELD_NUM_MAX_HEART_RATE, + FIT_LAP_FIELD_NUM_TOTAL_CALORIES }); + + mFHSession.init({ FIT_SESSION_FIELD_NUM_TIMESTAMP, + FIT_SESSION_FIELD_NUM_START_TIME, + FIT_SESSION_FIELD_NUM_TOTAL_ELAPSED_TIME, + FIT_SESSION_FIELD_NUM_TOTAL_TIMER_TIME, + FIT_SESSION_FIELD_NUM_MESSAGE_INDEX, + FIT_SESSION_FIELD_NUM_NUM_LAPS, + FIT_SESSION_FIELD_NUM_SPORT, + FIT_SESSION_FIELD_NUM_SUB_SPORT, + FIT_SESSION_FIELD_NUM_AVG_HEART_RATE, + FIT_SESSION_FIELD_NUM_MAX_HEART_RATE, + FIT_SESSION_FIELD_NUM_TOTAL_CALORIES, + FIT_SESSION_FIELD_NUM_METABOLIC_CALORIES }); + + mFHEvent.init({ FIT_EVENT_FIELD_NUM_TIMESTAMP, + FIT_EVENT_FIELD_NUM_EVENT, + FIT_EVENT_FIELD_NUM_EVENT_TYPE }); + + mFHActivity.init({ FIT_ACTIVITY_FIELD_NUM_TIMESTAMP, + FIT_ACTIVITY_FIELD_NUM_TOTAL_TIMER_TIME, + FIT_ACTIVITY_FIELD_NUM_LOCAL_TIMESTAMP, + FIT_ACTIVITY_FIELD_NUM_NUM_SESSIONS }); + + mFHRecord.init({ FIT_RECORD_FIELD_NUM_TIMESTAMP, + FIT_RECORD_FIELD_NUM_HEART_RATE }); + + mFHBatteryLevelField.init({ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_NAME, + FIT_FIELD_DESCRIPTION_FIELD_NUM_UNITS, + FIT_FIELD_DESCRIPTION_FIELD_NUM_DEVELOPER_DATA_INDEX, + FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_DEFINITION_NUMBER, + FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_TYPE_ID }); + + mFHBatteryVoltageField.init({ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_NAME, + FIT_FIELD_DESCRIPTION_FIELD_NUM_UNITS, + FIT_FIELD_DESCRIPTION_FIELD_NUM_DEVELOPER_DATA_INDEX, + FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_DEFINITION_NUMBER, + FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_TYPE_ID }); + + mFHLapRestingCaloriesField.init({ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_NAME, + FIT_FIELD_DESCRIPTION_FIELD_NUM_UNITS, + FIT_FIELD_DESCRIPTION_FIELD_NUM_DEVELOPER_DATA_INDEX, + FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_DEFINITION_NUMBER, + FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_TYPE_ID }); +} + +void ActivityWriter::start(const AppInfo& info) +{ + // Reset counter + mLapCounter = 0; + mDataCRC = 0; + + createAndOpenFile(info.timestamp); + + if (!mFile) { + return; + } + + SDK::Interface::IFile* fp = mFile.get(); + + // Add empty header + WriteFileHeader(fp); + + // Write file id message. + { + mFHFileID.writeDef(fp); + + FIT_FILE_ID_MESG file_id_mesg{}; + strncpy(file_id_mesg.product_name, "UNA Watch", FIT_FILE_ID_MESG_PRODUCT_NAME_COUNT); + file_id_mesg.serial_number = 0; + file_id_mesg.time_created = unixToFitTimestamp(info.timestamp); + file_id_mesg.manufacturer = FIT_MANUFACTURER_DEVELOPMENT; + file_id_mesg.product = 0; + file_id_mesg.number = 0; + file_id_mesg.type = FIT_FILE_ACTIVITY; + + mFHFileID.writeMessage(&file_id_mesg, fp); + } + + // Developer Data ID Message + { + mFHDeveloper.writeDef(fp); + + FIT_DEVELOPER_DATA_ID_MESG developer{}; + strncpy(reinterpret_cast(developer.developer_id), info.devID.c_str(), FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID_COUNT); + strncpy(reinterpret_cast(developer.application_id), info.appID.c_str(), FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID_COUNT); + developer.application_version = info.appVersion; + developer.manufacturer_id = FIT_MANUFACTURER_DEVELOPMENT; + developer.developer_data_index = 0; + + mFHDeveloper.writeMessage(&developer, fp); + } + + // Additional fields + { + // Field 0: "battery level in percents" + mFHBatteryLevelField.writeDef(fp); + FIT_FIELD_DESCRIPTION_MESG battLevel{}; + strncpy(battLevel.field_name, "batteryLevel", FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT - 1); + strncpy(battLevel.units, "%", FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT - 1); + battLevel.developer_data_index = 0; + battLevel.field_definition_number = mFHBatteryLevelField.getFieldID(); + battLevel.fit_base_type_id = FIT_BASE_TYPE_UINT8; + mFHBatteryLevelField.writeMessage(&battLevel, fp); + + // Field 1: "battery voltage in mV" + mFHBatteryVoltageField.writeDef(fp); + FIT_FIELD_DESCRIPTION_MESG battVoltage{}; + strncpy(battVoltage.field_name, "battVoltage", FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT - 1); + strncpy(battVoltage.units, "mV", FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT - 1); + battVoltage.developer_data_index = 0; + battVoltage.field_definition_number = mFHBatteryVoltageField.getFieldID(); + battVoltage.fit_base_type_id = FIT_BASE_TYPE_UINT16; + mFHBatteryVoltageField.writeMessage(&battVoltage, fp); + + // Field 2: lap-level "resting calories" (BMR over the lap, kcal). + // Kept as a developer field because resting_calories is not part of the + // public FIT Profile (session metabolic_calories below is, and lives on + // the session message as a native field instead). + mFHLapRestingCaloriesField.writeDef(fp); + FIT_FIELD_DESCRIPTION_MESG lapRestingCalories{}; + strncpy(lapRestingCalories.field_name, "resting_calories", FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT - 1); + strncpy(lapRestingCalories.units, "kcal", FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT - 1); + lapRestingCalories.developer_data_index = 0; + lapRestingCalories.field_definition_number = mFHLapRestingCaloriesField.getFieldID(); + lapRestingCalories.fit_base_type_id = FIT_BASE_TYPE_UINT16; + mFHLapRestingCaloriesField.writeMessage(&lapRestingCalories, fp); + } + + mFHEvent.writeDef(fp); + mFHActivity.writeDef(fp); + + mFHRecord.writeDef(fp); + + mFHLap.writeDef(fp); + mFHSession.writeDef(fp); + + // Write Event message - START Event + AddMessageEvent(info.timestamp, FIT_EVENT_TYPE_START); +} + +void ActivityWriter::pause(std::time_t timestamp) +{ + if (!mFile) { + return; + } + + // Write Event message - STOP Event + AddMessageEvent(timestamp, FIT_EVENT_TYPE_STOP); +} + +void ActivityWriter::resume(std::time_t timestamp) +{ + if (!mFile) { + return; + } + + // Write Event message - START Event + AddMessageEvent(timestamp, FIT_EVENT_TYPE_START); +} + +FIT_RECORD_MESG ActivityWriter::prepareRecordMsg(const RecordData& record) +{ + FIT_RECORD_MESG msg; + + Fit_InitMesg(fit_mesg_defs[FIT_MESG_RECORD], &msg); + + msg.timestamp = unixToFitTimestamp(record.timestamp); + + if (record.has(RecordData::Field::HEART_RATE)) { + msg.heart_rate = static_cast(record.heartRate); + } + + return msg; +} + +void ActivityWriter::addRecord(const RecordData& record) +{ + if (!mFile) { + return; + } + + const FIT_RECORD_MESG msg = prepareRecordMsg(record); + + mFHRecord.writeMessage(&msg, mFile.get()); + + // The record definition always declares the battery developer fields, + // so every data message must carry them. When no fresh battery sample + // is available this tick, emit FIT invalid sentinels instead of skipping + // them -- otherwise the file goes short and downstream parsers lose sync. + const FIT_UINT8 soc = record.has(RecordData::Field::BATTERY) + ? record.batteryLevel + : FIT_UINT8_INVALID; + const FIT_UINT16 voltage = record.has(RecordData::Field::BATTERY) + ? record.batteryVoltage + : FIT_UINT16_INVALID; + + mFHRecord.writeFieldMessage(0, &soc, mFile.get()); + mFHRecord.writeFieldMessage(1, &voltage, mFile.get()); +} + +void ActivityWriter::addLap(const LapData& lap) +{ + if (!mFile) { + return; + } + SDK::Interface::IFile* fp = mFile.get(); + + FIT_LAP_MESG lap_mesg{}; + Fit_InitMesg(fit_mesg_defs[FIT_MESG_LAP], &lap_mesg); + + lap_mesg.message_index = 0; + + lap_mesg.timestamp = unixToFitTimestamp(lap.timestamp); // 1 * s + 0, Lap end time + lap_mesg.start_time = unixToFitTimestamp(lap.timeStart); + lap_mesg.total_elapsed_time = static_cast((lap.elapsed) * 1000); // 1000 * s + 0, Time (includes pauses) + lap_mesg.total_timer_time = static_cast((lap.duration) * 1000); // 1000 * s + 0, Timer Time (excludes pauses) + + lap_mesg.avg_heart_rate = static_cast(lap.hrAvg);// 1 * bpm + 0, average heart rate (excludes pause time) + lap_mesg.max_heart_rate = static_cast(lap.hrMax); // 1 * bpm + 0, + lap_mesg.total_calories = static_cast(lap.calories + 0.5f); // 1 * kcal + 0 + + mFHLap.writeMessage(&lap_mesg, fp); + + // Developer field: lap resting (BMR) calories, kcal. + const FIT_UINT16 restingCalories = static_cast(lap.restingCalories + 0.5f); + mFHLap.writeFieldMessage(0, &restingCalories, fp); + + mLapCounter++; +} + +void ActivityWriter::stop(const TrackData& track) +{ + if (!mFile) { + return; + } + + SDK::Interface::IFile* fp = mFile.get(); + + // Write Session message. + { + FIT_SESSION_MESG session_mesg{}; + Fit_InitMesg(fit_mesg_defs[FIT_MESG_SESSION], &session_mesg); + + session_mesg.message_index = 0; + session_mesg.sport = FIT_SPORT_GENERIC; + session_mesg.sub_sport = FIT_SUB_SPORT_GENERIC; // TODO: select correct type + session_mesg.timestamp = unixToFitTimestamp(track.timestamp); // 1 * s + 0, Session end time + session_mesg.start_time = unixToFitTimestamp(track.timeStart); + + session_mesg.total_elapsed_time = static_cast(track.elapsed * 1000); // 1000 * s + 0, Time (includes pauses) + session_mesg.total_timer_time = static_cast(track.duration * 1000); // 1000 * s + 0, Timer Time (excludes pauses) + + session_mesg.avg_heart_rate = static_cast(track.hrAvg); // 1 * bpm + 0, average heart rate (excludes pause time) + session_mesg.max_heart_rate = static_cast(track.hrMax); // 1 * bpm + 0, + session_mesg.total_calories = static_cast(track.calories + 0.5f); // 1 * kcal + 0 + session_mesg.metabolic_calories = static_cast(track.metabolicCalories + 0.5f); // 1 * kcal + 0, BMR over the session + + session_mesg.num_laps = mLapCounter; + + mFHSession.writeMessage(&session_mesg, fp); + } + + // Write Activity message. + { + FIT_ACTIVITY_MESG activity_mesg {}; + + activity_mesg.timestamp = unixToFitTimestamp(track.timestamp); + activity_mesg.local_timestamp = unixToFitTimestamp(epochToLocal(track.timestamp)); // timestamp epoch expressed in local time + activity_mesg.total_timer_time = static_cast(track.duration * 1000); // 1000 * s + 0, Exclude pauses + activity_mesg.num_sessions = 1; + + mFHActivity.writeMessage(&activity_mesg, fp); + } + + fp->seek(0); + + WriteFileHeader(fp); + + WriteCRC(fp); + + saveFile(); + + saveSummary(track); +} + +void ActivityWriter::discard() +{ + deleteFile(); +} + +void ActivityWriter::AddMessageEvent(std::time_t t, FIT_EVENT_TYPE type) +{ + FIT_EVENT_MESG event_mesg{}; + + event_mesg.timestamp = unixToFitTimestamp(t); + event_mesg.event = FIT_EVENT_TIMER; + event_mesg.event_type = type; + + mFHEvent.writeMessage(&event_mesg, mFile.get()); +} + +bool ActivityWriter::createAndOpenFile(std::time_t utc) +{ + char buff[256]{}; + std::tm localTime{}; +#if WIN32 + localtime_s(&localTime, &utc); +#else + localtime_r(&utc, &localTime); +#endif + + // Create directory + int len = snprintf(buff, sizeof(buff), "%s/%04u%02u/", mPath, localTime.tm_year + 1900, localTime.tm_mon + 1); + if (len <= 0 || !mKernel.fs.mkdir(buff)) { + LOG_ERROR("Failed to create dir [%s]\n", buff); + return false; + } + + // Create file + snprintf(&buff[len], sizeof(buff) - len, "activity_%04u%02u%02uT%02u%02u%02u.fit", + localTime.tm_year + 1900, localTime.tm_mon + 1, localTime.tm_mday, + localTime.tm_hour, localTime.tm_min, localTime.tm_sec); + + mFile = mKernel.fs.file(buff); + if (!mFile || !mFile->open(true, true)) { // write mode, override + LOG_ERROR("Failed to create file [%s]\n", buff); + mFile.reset(); + return false; + } + + return true; +} + +void ActivityWriter::saveFile() +{ + if (!mFile) { + return; + } + + mFile->flush(); + mFile->close(); +} + +void ActivityWriter::deleteFile() +{ + if (!mFile) { + return; + } + + if (mFile->isOpen()) { + mFile->close(); + } + + mFile->remove(); + mFile.reset(); +} + +void ActivityWriter::saveSummary(const TrackData& track) +{ + char buff[256]{}; + // Create name + size_t nameLen = strlen(mFile->getPath()); + snprintf(buff, sizeof(buff), "%.*s%s", nameLen - 3, mFile->getPath(), "json"); + + mFile->setPath(buff); + + if (!mFile->open(true, true)) { + mFile.reset(); + return; + } + + SDK::JsonStreamWriter writer(mFile.get()); + + writer.startMap(); + + writer.add("time_start", static_cast(track.timeStart)); + writer.add("duration", static_cast(track.duration)); + writer.add("hr_avg", track.hrAvg); + writer.add("activity_type", "workout"); + + writer.endMap(); + + mFile->flush(); + mFile->close(); +} + + +std::time_t ActivityWriter::tm2epoch(const struct tm* tm) +{ + int y = tm->tm_year + 1900; + int m = tm->tm_mon + 1; // 1..12 + int d = tm->tm_mday; // 1..31 + + if (m <= 2) { + y -= 1; + m += 12; + } + + // Julian day + int64_t era = (y >= 0 ? y : y - 399) / 400; + uint32_t yoe = (uint32_t)(y - era * 400); + uint32_t doy = (153 * (m - 3) + 2) / 5 + d - 1; + uint32_t doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; + int64_t days = era * 146097 + (int64_t)doe - 719468; // 1970-01-01 is 719468 + int64_t secs = days * 86400 + tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; + + return (time_t)secs; +} + +time_t ActivityWriter::epochToLocal(time_t utc) +{ + std::tm localTime{}; +#if WIN32 + localtime_s(&localTime, &utc); +#else + localtime_r(&utc, &localTime); +#endif + return tm2epoch(&localTime); +} + +FIT_DATE_TIME ActivityWriter::unixToFitTimestamp(std::time_t unixTimestamp) +{ + const std::time_t FIT_EPOCH_OFFSET = 631065600; + return static_cast(unixTimestamp - FIT_EPOCH_OFFSET); +} + +// FIT-C + +void ActivityWriter::WriteFileHeader(SDK::Interface::IFile* fp) +{ + FIT_FILE_HDR file_header{}; + + file_header.header_size = FIT_FILE_HDR_SIZE; + file_header.profile_version = FIT_PROFILE_VERSION; + file_header.protocol_version = FIT_PROTOCOL_VERSION_20; + memcpy((FIT_UINT8*)&file_header.data_type, ".FIT", 4); + + fp->flush(); + size_t fileSize = fp->size(); + + if (fileSize > FIT_FILE_HDR_SIZE) { + file_header.data_size = static_cast(fileSize - FIT_FILE_HDR_SIZE); + } + else { + file_header.data_size = 0; + } + + file_header.crc = FitCRC_Calc16(&file_header, FIT_STRUCT_OFFSET(crc, FIT_FILE_HDR)); + + fp->seek(0); + + size_t bw; + fp->write(reinterpret_cast(&file_header), FIT_FILE_HDR_SIZE, bw); + + fp->flush(); + + // Move pointer to the end of the file + if (fileSize > 0) { + fp->seek(fileSize); + } +} + +void ActivityWriter::WriteCRC(SDK::Interface::IFile* fp) +{ + fp->close(); + + fp->open(false); + + FIT_UINT8 buffer[512]; + size_t size = fp->size(); + size_t pos = 0; + uint16_t crc = 0; + + while (pos < size) { + size_t toRead = size - pos; + if (toRead > sizeof(buffer)) { + toRead = sizeof(buffer); + } + + size_t br; + fp->read(reinterpret_cast(buffer), toRead, br); + + crc = FitCRC_Update16(crc, buffer, static_cast(br)); + + pos += br; + } + + fp->close(); + + fp->open(true, false); + + fp->seek(fp->size()); + + size_t bw; + fp->write(reinterpret_cast(&crc), sizeof(FIT_UINT16), bw); + fp->flush(); +} + diff --git a/Apps/Workout/Software/Libs/Sources/Service.cpp b/Apps/Workout/Software/Libs/Sources/Service.cpp new file mode 100644 index 00000000..d9bc6b88 --- /dev/null +++ b/Apps/Workout/Software/Libs/Sources/Service.cpp @@ -0,0 +1,846 @@ + +#include "Service.hpp" + +#include +#include +#include +#include + +#include "Settings.hpp" +#include "ActivitySummary.hpp" +#include "Track.hpp" +#include "SDK/Tools/FirmwareVersion.hpp" +#include "SDK/Messages/SensorLayerMessages.hpp" +#include "SDK/Messages/MessageGuard.hpp" +#include "SDK/Utils/Utils.hpp" +#include "SDK/Timer/Timer.hpp" + +#include "SDK/SensorLayer/DataParsers/SensorDataParserPressure.hpp" +#include "SDK/SensorLayer/DataParsers/SensorDataParserHeartRate.hpp" +#include "SDK/SensorLayer/DataParsers/SensorDataParserBatteryLevel.hpp" +#include "SDK/SensorLayer/DataParsers/SensorDataParserBatteryMetrics.hpp" +#include "SDK/SensorLayer/DataParsers/SensorDataParserWristMotion.hpp" +#include "SDK/SensorLayer/DataParsers/SensorDataParserFusionRaw.hpp" + +#define LOG_MODULE_PRX "Service" +#define LOG_MODULE_LEVEL LOG_LEVEL_INFO +#include "SDK/UnaLogger/Logger.h" + +namespace { +constexpr std::time_t kOneSecond = 1; + +} // namespace + +Service::Service(SDK::Kernel &kernel) + : mKernel(kernel) + , mGuiStarted(false) + , mGuiSender(kernel) + , mSettings{} + , mSettingsSerializer(mKernel, "settings.json") + , mSummary{} + , mActivitySummarySerializer(mKernel, "Activity/summary.json") + , mActivityWriter(mKernel, "Activity") + , mSensorPressure(SDK::Sensor::Type::PRESSURE, skSamplePeriod, skSampleLatency) + , mSensorHr(SDK::Sensor::Type::HEART_RATE, skSamplePeriod, skSampleLatency) + , mSensorBatteryLevel(SDK::Sensor::Type::BATTERY_LEVEL) + , mSensorBatteryMetrics(SDK::Sensor::Type::BATTERY_METRICS, skSamplePeriod, skSampleLatency) + , mSensorWristMotion(SDK::Sensor::Type::WRIST_MOTION) + , mSensorFusion(SDK::Sensor::Type::FUSION_RAW, 1000.0f / skFusionSampleRateHz, 100) + , mTimeTracker(kernel.sys) + , mAltitudeFilter(0.8f) + , mAltitudeCounter() + , mBatterySoc(kernel.sys) + , mBatteryVoltage(kernel.sys) + , mWristTiltDetector() + +{ + mTimeCounter.init(); + mDistanceCounter.init(); + mSpeedCounter.init(0.5f, 300.0f); + mHrCounter.init(20.0f, 300.0f); + mAltitudeCounter.init(2.0f); + + WristTiltDetector::Config config{}; + config.sampleRateHz = skFusionSampleRateHz; + mWristTiltDetector.setConfig(config); + + mWristTiltDetector.setListener(this); + mHrThresholds.fill(0); +} + +Service::~Service() +{ + disconnect(); // Cleanup resources +} + +void Service::run() +{ + LOG_INFO("Started\n"); + + // Initialize time + mTimeTracker.init(); + + // Get settings + if (!mSettingsSerializer.load(mSettings)) { + LOG_WARNING("Failed to load settings\n"); + } + + // Get summary + if (!mActivitySummarySerializer.load(mSummary)) { + LOG_WARNING("Failed to load activity summary\n"); + } + + SDK::Timer guiInitTimeout(TIMER_SECONDS(5)); + guiInitTimeout.start(); + + std::time_t processedUtc = 0; + + while (true) { + SDK::MessageBase *msg; + if (mKernel.comm.getMessage(msg, 500)) { + // Command handling + switch (msg->getType()) { + + // Kernel messages + case SDK::MessageType::COMMAND_APP_STOP: + LOG_INFO("Force exit from the application\n"); + disconnect(); // Cleanup resources + if (mTrackState != Track::State::INACTIVE) { + stopTrack(false); + } + // We must release message because this is the last event. + mKernel.comm.releaseMessage(msg); + return; + + case SDK::MessageType::COMMAND_APP_NOTIF_GUI_RUN: + LOG_INFO("GUI is now running\n"); + onStartGUI(); + break; + + case SDK::MessageType::COMMAND_APP_NOTIF_GUI_STOP: + LOG_INFO("GUI has stopped\n"); + onStopGUI(); + break; + + // Custom messages + case CustomMessage::SETTINGS_SAVE: { + LOG_DEBUG("SETTINGS_SAVE\n"); + handleEvent(*static_cast(msg)); + } break; + + case CustomMessage::TRACK_START: { + LOG_DEBUG("TRACK_START\n"); + handleEvent(*static_cast(msg)); + } break; + + case CustomMessage::TRACK_STOP: { + LOG_DEBUG("TRACK_STOP\n"); + handleEvent(*static_cast(msg)); + } break; + + case CustomMessage::TRACK_PAUSE: { + LOG_DEBUG("TRACK_PAUSE\n"); + handleEvent(*static_cast(msg)); + } break; + + case CustomMessage::TRACK_RESUME: { + LOG_DEBUG("TRACK_RESUME\n"); + handleEvent(*static_cast(msg)); + } break; + + case CustomMessage::MANUAL_LAP: { + LOG_DEBUG("MANUAL_LAP\n"); + handleEvent(*static_cast(msg)); + } break; + + // Sensors messages + case SDK::MessageType::EVENT_SENSOR_LAYER_DATA: { + auto event = static_cast(msg); + SDK::Sensor::DataBatch batch(event->data, event->count, event->stride); + handleSensorsData(event->handle, batch); + } break; + + default: + break; + } + // Release message after processing + mKernel.comm.releaseMessage(msg); + } + + + // Periodic process + if (mGuiStarted) { + // Update time every second + std::time_t utc = mTimeTracker.getExpectedUTC(); + + if (processedUtc != utc) { + processedUtc = utc; + + // Send to GUI real "local time" to display + std::tm tmNow = mTimeTracker.getLocalTime(std::time(nullptr)); + mGuiSender.time(tmNow); + + mGuiSender.battery(static_cast(mBatterySoc.get())); + + if (mTrackState != Track::State::INACTIVE) { + mTimeCounter.add(utc); + processTrack(); + } + } + } else { + // Just wait some time to see if GUI starts + if (guiInitTimeout.expired()) { + LOG_INFO("No activities, exiting service\n"); + return; // Exit app + } + } + } +} + +void Service::connectSensors() +{ + if (!mIsSensorsConnected) { + LOG_DEBUG("Connect to sensors...\n"); + + mSensorBatteryLevel.connect(); + mSensorBatteryMetrics.connect(); + mSensorPressure.connect(); + mSensorHr.connect(); + mSensorFusion.connect(); + + mIsSensorsConnected = true; + } +} + +void Service::disconnect() +{ + if (mIsSensorsConnected) { + LOG_DEBUG("Disconnect from sensors...\n"); + + mSensorFusion.disconnect(); + mSensorHr.disconnect(); + mSensorPressure.disconnect(); + mSensorBatteryLevel.disconnect(); + mSensorBatteryMetrics.disconnect(); + + mIsSensorsConnected = false; + } +} + + +void Service::handleSensorsData(uint16_t handle, SDK::Sensor::DataBatch& data) +{ + if (mSensorPressure.matchesDriver(handle)) { + SDK::SensorDataParser::Pressure parser(data[0]); + if (parser.isDataValid()) { + if (!mAltitudeCounter.isValid()) { + mSeaLevelPressure = parser.getP0(); + } + float altitude = parser.getAltitude(parser.getPressure(), mSeaLevelPressure); + float filtered = mAltitudeFilter.execute(altitude); + mAltitudeCounter.add(filtered); + + LOG_DEBUG("Altitude %.2f (Filtered %.2f) (P0 %f, Pa %f)\n", altitude, filtered, mSeaLevelPressure, parser.getPressure()); + } + } else if (mSensorHr.matchesDriver(handle)) { + SDK::SensorDataParser::HeartRate parser(data[0]); + if (parser.isDataValid()) { + mHrCounter.add(parser.getBpm()); + mTrackData.hrTrustLevel = parser.getTrustLevel(); + LOG_DEBUG("HR %.1f, TrustLevel %.1f\n", parser.getBpm(), parser.getTrustLevel()); + } + } else if (mSensorBatteryLevel.matchesDriver(handle)) { + SDK::SensorDataParser::BatteryLevel parser(data[0]); + if (parser.isDataValid()) { + mBatterySoc.set(parser.getCharge()); + LOG_DEBUG("Battery %.1f %%\n", mBatterySoc.get()); + } + } else if (mSensorBatteryMetrics.matchesDriver(handle)) { + SDK::SensorDataParser::BatteryMetrics parser(data[0]); + if (parser.isDataValid()) { + mBatteryVoltage.set(parser.getVoltage()); + LOG_DEBUG("Battery voltage %.1f V\n", mBatteryVoltage.get()); + } + } else if (mSensorWristMotion.matchesDriver(handle)) { + SDK::SensorDataParser::WristMotion parser(data[0]); + if (parser.isDataValid()) { + LOG_DEBUG("Wrist Motion detected\n"); + backlightOn(); + } + } else if (mSensorFusion.matchesDriver(handle)) { + static constexpr uint16_t kBatchSize = 10u; + TiltImuSample batch[kBatchSize]; + uint16_t batchLen = 0; + + for (uint16_t i = 0; i < data.size(); i++) { + SDK::SensorDataParser::FusionRaw parser(data[i]); + if (parser.isDataValid()) { + SDK::SensorDataParser::FusionRaw::Data sample{}; + parser.getData(sample); + batch[batchLen].ayLsb = sample.accel.y; + batch[batchLen].gxLsb = sample.gyro.x; + batch[batchLen].timestampMs = parser.getTimestamp(); + //LOG_DEBUG("AY: %d, GX: %d\n", sample.accel.y, sample.gyro.x); + ++batchLen; + + if (batchLen == kBatchSize) { + mWristTiltDetector.addBatch(batch, kBatchSize); + batchLen = 0; + } + } + } + + if (batchLen > 0u) { + mWristTiltDetector.addBatch(batch, batchLen); + } + } +} + + +void Service::onStartGUI() +{ + mGuiStarted = true; + + setCapabilities(); + + mSensorWristMotion.connect(); + + sendInitialInfoToGui(); +} + +void Service::onStopGUI() +{ + mGuiStarted = false; + + mSensorWristMotion.disconnect(); +} + +void Service::handleEvent(const CustomMessage::TrackStart& /*event*/) +{ + // We can synchronize the time because we haven't started the track yet, + // before a new track starts. + mTimeTracker.init(); + + startTrack(mTimeTracker.getExpectedUTC()); +} + +void Service::handleEvent(const CustomMessage::TrackStop& event) +{ + stopTrack(event.discard); +} + +void Service::handleEvent(const CustomMessage::SettingsSave& event) +{ + bool updCaps = mSettings.phoneNotifEn != event.settings.phoneNotifEn; + mSettings = event.settings; + mSettingsSerializer.save(event.settings); + + if (updCaps) { + setCapabilities(); + } +} + +void Service::handleEvent(const CustomMessage::TrackPause& /*event*/) +{ + pauseTrack(true); +} + +void Service::handleEvent(const CustomMessage::TrackResume& /*event*/) +{ + pauseTrack(false); +} + +void Service::handleEvent(const CustomMessage::ManualLap& /*event*/) +{ + saveLap(); + mGuiSender.lapEnd(mTrackData.lapNum); + notifyLapEnd(); +} + +void Service::setCapabilities() +{ + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + msg->enPhoneNotification = mSettings.phoneNotifEn; + msg->enUsbChargingScreen = false; + msg->enMusicControl = true; + mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } +} + + +void Service::notifyLapEnd() +{ + backlightOn(); + playBuzzerPattern(150, 3); + playVibroPattern(SDK::Message::RequestVibroPlay::Effect::ALERT_750MS_100); +} + +void Service::notifyNewActivity() +{ + auto *msg = mKernel.comm.allocateMessage(); + if (msg) { + mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } +} + +void Service::backlightOn(uint32_t timeoutMs) +{ + auto bl = SDK::make_msg(mKernel); + if (bl) { + bl->brightness = 100; + bl->autoOffTimeoutMs = timeoutMs; + bl.send(); + } +} + +void Service::playBuzzerPattern(uint16_t beepMs, uint8_t count, uint16_t silenceMs) +{ + if (count == 0) { + return; + } + + // A series of N beeps needs 2*N-1 notes (beeps + silences between them). + // Cap to what fits in skMaxNotes: max count = (skMaxNotes + 1) / 2 = 5. + const uint8_t maxCount = (SDK::Message::RequestBuzzerPlay::skMaxNotes + 1u) / 2u; + if (count > maxCount) { + count = maxCount; + } + + auto* msg = mKernel.comm.allocateMessage(); + if (msg) { + uint8_t n = 0; + for (uint8_t i = 0; i < count; ++i) { + msg->notes[n].volume = 100; + msg->notes[n].time = beepMs; + ++n; + if (i < count - 1u) { + msg->notes[n].volume = 0; + msg->notes[n].time = silenceMs; + ++n; + } + } + msg->notesCount = n; + mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } +} + +void Service::playVibroPattern(SDK::Message::RequestVibroPlay::Effect effect, uint8_t count, uint16_t silenceMs) +{ + if (count == 0) { + return; + } + + // A series of N effects needs 2*N-1 notes (effects + silences between them). + // Cap to what fits in skMaxNotes: max count = (skMaxNotes + 1) / 2 = 4. + const uint8_t maxCount = (SDK::Message::RequestVibroPlay::skMaxNotes + 1u) / 2u; + if (count > maxCount) { + count = maxCount; + } + + auto* msg = mKernel.comm.allocateMessage(); + if (msg) { + uint8_t n = 0; + for (uint8_t i = 0; i < count; ++i) { + msg->notes[n].effect = static_cast(effect); + msg->notes[n].pause = 0; + ++n; + if (i < count - 1u) { + msg->notes[n].effect = static_cast(SDK::Message::RequestVibroPlay::Effect::NO_EFFECT); + msg->notes[n].pause = silenceMs; + ++n; + } + } + msg->notesCount = n; + mKernel.comm.sendMessage(msg); + mKernel.comm.releaseMessage(msg); + } +} + + +ActivityWriter::RecordData Service::prepareRecordData() +{ + ActivityWriter::RecordData fitRecord{}; + + fitRecord.timestamp = mTimeCounter.getCurrent(); + + bool hasHeartRate = (mHrCounter.getCurrent() > 20 && mTrackData.hrTrustLevel >= 1 && mTrackData.hrTrustLevel <= 3); + fitRecord.set(ActivityWriter::RecordData::Field::HEART_RATE, hasHeartRate); + fitRecord.heartRate = mHrCounter.getCurrent(); + + // Both samples must be checked every call; evaluate separately to avoid short-circuit. + const bool socReady = mBatterySoc.isDue(); + const bool voltReady = mBatteryVoltage.isDue(); + const bool batteryReady = socReady && voltReady; + if (batteryReady) { + mBatterySoc.consume(); + mBatteryVoltage.consume(); + } + fitRecord.set(ActivityWriter::RecordData::Field::BATTERY, batteryReady); + fitRecord.batteryLevel = static_cast(mBatterySoc.get()); + fitRecord.batteryVoltage = static_cast(mBatteryVoltage.get() * 1000); + + return fitRecord; +} + +void Service::sendInitialInfoToGui() +{ + // Settings + uint8_t hrThresholds[CustomMessage::kHrThresholdsCount]; + memcpy(hrThresholds, CustomMessage::kHrThresholdsDefault, sizeof(hrThresholds)); + + if (auto msg = SDK::make_msg(mKernel)) { + if (msg.send(100) && msg.ok()) { + mIsImperial = msg->imperialUnits; + + if (msg->weightKg > 0.0f) { + mWeightKg = msg->weightKg; + } + + if (msg->heartRateCount > CustomMessage::kHrThresholdsCount) { + msg->heartRateCount = CustomMessage::kHrThresholdsCount; + } + + if (msg->heartRateCount > 0) { + // Copy received elements + uint8_t i = 0; + for (; i < msg->heartRateCount; ++i) { + hrThresholds[i] = msg->heartRateTh[i]; + } + + // Complete the array elements to the full number + for (; i < CustomMessage::kHrThresholdsCount; ++i) { + if (i > 0) { + hrThresholds[i] = hrThresholds[i - 1] + 20; + } else { + hrThresholds[i] = CustomMessage::kHrThresholdsDefault[0]; + } + } + } + } + } + + mGuiSender.settingsUpd(mSettings, mIsImperial, hrThresholds, CustomMessage::kHrThresholdsCount); + memcpy(mHrThresholds.data(), hrThresholds, sizeof(hrThresholds)); + mHrThresholdCount = CustomMessage::kHrThresholdsCount; + mGuiSender.summary(&mSummary); + mGuiSender.battery(static_cast(mBatterySoc.get())); +} + +void Service::startTrack(std::time_t utc) +{ + // Reset data + mTrackData = {}; + + mTimeCounter.reset(); + mTimeCounter.add(utc); + + mDistanceCounter.reset(); + mSpeedCounter.reset(); + mHrCounter.reset(); + mAltitudeFilter.reset(); + mAltitudeCounter.reset(); + mBatterySoc.reset(skBatteryLogPeriodMs); + mBatteryVoltage.reset(skBatteryLogPeriodMs); + mSessionNotEmpty = false; + mLapNotEmpty = false; + + mSummary = ActivitySummary{}; + mSummary.laps.reserve(10); + + // Determine lap split source + mLapDivSource = getLapDivSource(); + + mWristTiltDetector.reset(); + + connectSensors(); + + ActivityWriter::AppInfo info{}; + info.timestamp = utc; + info.appVersion = SDK::ParseVersion(BUILD_VERSION).u32; + info.devID = DEV_ID; + info.appID = APP_ID; + mActivityWriter.start(info); + + mTrackState = Track::State::ACTIVE; + + mGuiSender.trackState(mTrackState); +} + +void Service::processTrack() +{ + LOG_DEBUG("Time: %u / %u\n", static_cast(mTimeCounter.getValueActive()), static_cast(mTimeCounter.getValueTotal())); + + // Time, s + mTrackData.totalTime = mTimeCounter.getValueActive(); + mTrackData.lapTime = mTimeCounter.getLapValueActive(); + + // HR + mTrackData.hr = mHrCounter.getCurrent(); + mTrackData.avgHR = mHrCounter.getAverage(); + mTrackData.maxHR = mHrCounter.getMaximum(); + mTrackData.avgLapHR = mHrCounter.getLapAverage(); + mTrackData.maxLapHR = mHrCounter.getLapMaximum(); + updateHrDerivedMetrics(); + + // Update GUI + mGuiSender.trackData(mTrackData); + + + if (mTrackState == Track::State::ACTIVE) { + // Save record to the FIT file + ActivityWriter::RecordData fitRecord = prepareRecordData(); + mActivityWriter.addRecord(fitRecord); + + mSessionNotEmpty = true; // Session has at least one record + mLapNotEmpty = true; // Lap has at least one record + + // Next lap + bool switchLap = false; + switch (mLapDivSource) { + case LapDivSource::TIME: + switchLap = static_cast(mTimeCounter.getLapValueActive()) >= Settings::Alerts::Time::toSeconds(mSettings.alertTimeId); + break; + + case LapDivSource::OFF: + default: + break; + } + + if (switchLap) { + saveLap(); + mGuiSender.lapEnd(mTrackData.lapNum); + notifyLapEnd(); + } + + } + +} + +void Service::updateHrDerivedMetrics() +{ + mTrackData.hrZone = getHrZone(mTrackData.hr); + if (mTrackState != Track::State::ACTIVE) { + return; + } + + // Basal metabolic rate accrues every active second regardless of HR. + // Surfaced as session "metabolic_calories" / lap "resting_calories" in the FIT file. + static constexpr float kRestingMet = 1.0f; + const float restingKcal = kRestingMet * mWeightKg * (1.0f / 3600.0f); + mTrackData.restingCaloriesTotal += restingKcal; + mTrackData.restingCaloriesLap += restingKcal; + + // Active calories: zone-MET when HR is in a zone; BMR fallback otherwise + // (HR below zone 1 or no valid HR sample yet). + const float met = (mTrackData.hrZone == 0) ? kRestingMet : getZoneMet(mTrackData.hrZone); + const float calories = met * mWeightKg * (1.0f / 3600.0f); + mTrackData.totalCalories += calories; + mTrackData.lapCalories += calories; + + if (mTrackData.hrZone >= 1) { + mTrackData.zoneTimeSec[mTrackData.hrZone - 1] += kOneSecond; + } +} + +void Service::saveLap() +{ + // Accumulate lap into summary + mSummary.laps.push_back({ + mTimeCounter.getLapValueActive(), + mHrCounter.getLapAverage(), + mHrCounter.getLapMaximum(), + }); + + // Save lap to the FIT file + ActivityWriter::LapData fitLap{}; + + fitLap.timestamp = mTimeCounter.getCurrent(); + fitLap.timeStart = mTimeCounter.getCurrent() - mTimeCounter.getLapValueTotal(); + fitLap.duration = mTimeCounter.getLapValueActive(); + fitLap.elapsed = mTimeCounter.getLapValueTotal(); + + fitLap.hrAvg = mHrCounter.getLapAverage(); + fitLap.hrMax = mHrCounter.getLapMaximum(); + fitLap.calories = mTrackData.lapCalories; + fitLap.restingCalories = mTrackData.restingCaloriesLap; + + mActivityWriter.addLap(fitLap); + mTrackData.lapNum++; + + LOG_INFO("Lap_%u saved. UTC: %u\n", mTrackData.lapNum, static_cast(mTimeCounter.getCurrent())); + LOG_INFO("Time: %u / %u s\n", static_cast(mTimeCounter.getLapValueActive()), static_cast(mTimeCounter.getLapValueTotal())); + LOG_INFO("Heart rate: %.0f / %.0f bpm\n", mHrCounter.getLapAverage(), mHrCounter.getLapMaximum()); + LOG_INFO("Lap calories: %.1f kcal\n", mTrackData.lapCalories); + + // Reset lap counters + mTimeCounter.resetLap(); + mDistanceCounter.resetLap(); + mSpeedCounter.resetLap(); + mHrCounter.resetLap(); + mAltitudeCounter.resetLap(); + + // Clear track data + mTrackData.lapTime = 0; + mTrackData.avgLapHR = 0.0f; + mTrackData.maxLapHR = 0.0f; + mTrackData.lapCalories = 0.0f; + mTrackData.restingCaloriesLap = 0.0f; + + mLapNotEmpty = false; +} + +void Service::buildPartialSummary() +{ + mSummary.utc = mTimeCounter.getCurrent(); + mSummary.time = mTimeCounter.getValueActive(); + mSummary.hrMax = mHrCounter.getMaximum(); + mSummary.hrAvg = mHrCounter.getAverage(); + mSummary.calories = mTrackData.totalCalories; + mSummary.restingCalories = mTrackData.restingCaloriesTotal; + mSummary.activeCalories = std::fmax(0.0f, + mTrackData.totalCalories - mTrackData.restingCaloriesTotal); + + for (size_t i = 0; i < std::size(mSummary.zoneTimeSec); ++i) { + mSummary.zoneTimeSec[i] = mTrackData.zoneTimeSec[i]; + } +} + +void Service::stopTrack(bool discard) +{ + if (mTrackState == Track::State::INACTIVE) { + return; + } + + if (!discard && mSessionNotEmpty) { + + if (mTrackState != Track::State::PAUSED) { + mActivityWriter.pause(mTimeCounter.getCurrent()); + } + + if (mLapNotEmpty) { + saveLap(); + } + + mBatterySoc.request(); + mBatteryVoltage.request(); + ActivityWriter::RecordData fitRecord = prepareRecordData(); + mActivityWriter.addRecord(fitRecord); + + buildPartialSummary(); + + // Save summary + if (!mActivitySummarySerializer.save(mSummary)) { + LOG_ERROR("Can't save activity summary\n"); + } + mGuiSender.summary(&mSummary); + + // Save FIT file + ActivityWriter::TrackData fitTrack{}; + + fitTrack.timestamp = mTimeCounter.getCurrent(); + fitTrack.timeStart = mTimeCounter.getCurrent() - mTimeCounter.getValueTotal(); + fitTrack.duration = mTimeCounter.getValueActive(); + fitTrack.elapsed = mTimeCounter.getValueTotal(); + + fitTrack.hrAvg = mHrCounter.getAverage(); + fitTrack.hrMax = mHrCounter.getMaximum(); + fitTrack.calories = mTrackData.totalCalories; + fitTrack.metabolicCalories = mTrackData.restingCaloriesTotal; + + mActivityWriter.stop(fitTrack); + + notifyNewActivity(); + } else { + mActivityWriter.discard(); + } + + mTrackState = Track::State::INACTIVE; + LOG_INFO("Track stopped. UTC: %u\n", static_cast(mTimeCounter.getCurrent())); + LOG_INFO("Time: %u / %u s\n", static_cast(mTimeCounter.getValueActive()), static_cast(mTimeCounter.getValueTotal())); + LOG_INFO("Heart rate: %.0f / %.0f bpm\n", mHrCounter.getAverage(), mHrCounter.getMaximum()); + LOG_INFO("Calories: %.1f kcal\n", mTrackData.totalCalories); + + mGuiSender.trackState(mTrackState); + + disconnect(); +} + +void Service::pauseTrack(bool pause) +{ + if (mTrackState == Track::State::INACTIVE) { + return; + } + + if (pause && mTrackState == Track::State::ACTIVE) { + mTimeCounter.pause(); + mDistanceCounter.pause(); + mSpeedCounter.pause(); + mHrCounter.pause(); + mAltitudeCounter.pause(); + + mActivityWriter.pause(mTimeCounter.getCurrent()); + + mTrackState = Track::State::PAUSED; + LOG_INFO("Track paused. UTC: %u\n", static_cast(mTimeCounter.getCurrent())); + mGuiSender.trackState(mTrackState); + + buildPartialSummary(); + mGuiSender.summary(&mSummary); + } else if (!pause && mTrackState == Track::State::PAUSED) { + mTimeCounter.resume(); + mDistanceCounter.resume(); + mSpeedCounter.resume(); + mHrCounter.resume(); + mAltitudeCounter.resume(); + + mActivityWriter.resume(mTimeCounter.getCurrent()); + + mTrackState = Track::State::ACTIVE; + LOG_INFO("Track resumed. UTC: %u\n", static_cast(mTimeCounter.getCurrent())); + mGuiSender.trackState(mTrackState); + } +} + +Service::LapDivSource Service::getLapDivSource() +{ + if (mSettings.alertTimeId != Settings::Alerts::Time::ID_OFF) { + return LapDivSource::TIME; + } + + return LapDivSource::OFF; +} + +uint8_t Service::getHrZone(float hr) const +{ + if (mHrThresholdCount == 0 || hr <= 0.0f) { + return 0; + } + + uint8_t zone = 0; + const uint8_t thresholdCount = (mHrThresholdCount > mHrThresholds.size()) ? mHrThresholds.size() : mHrThresholdCount; + for (uint8_t i = 0; i < thresholdCount; ++i) { + if (hr > mHrThresholds[i]) { + zone = i + 1; + } + } + return (zone > 5) ? 5 : zone; +} + +float Service::getZoneMet(uint8_t zone) const +{ + static constexpr float kMetByZone[5] = {2.5f, 4.5f, 7.0f, 10.0f, 12.5f}; + if (zone < 1 || zone > 5) { + return 0.0f; + } + return kMetByZone[zone - 1]; +} + +void Service::onWristTilt(uint32_t timestampMs) +{ + LOG_DEBUG("Wrist Tilt detected\n"); + backlightOn(); +} diff --git a/Apps/Workout/Software/Libs/Sources/SettingsSerializer.cpp b/Apps/Workout/Software/Libs/Sources/SettingsSerializer.cpp new file mode 100644 index 00000000..c597ba43 --- /dev/null +++ b/Apps/Workout/Software/Libs/Sources/SettingsSerializer.cpp @@ -0,0 +1,131 @@ +/** + ****************************************************************************** + * @file SettingsSerializer.cpp + * @date 08-04-2025 + * @author Denys Saienko + * @brief Serializes/Deserializes settings to a file. + ****************************************************************************** + * + ****************************************************************************** + */ +#include "SettingsSerializer.hpp" + +#include + +#include "SDK/JSON/JsonStreamWriter.hpp" +#include "SDK/JSON/JsonStreamReader.hpp" + +#define LOG_MODULE_PRX "SettingsSerializer" +#define LOG_MODULE_LEVEL LOG_LEVEL_DEBUG +#include "SDK/UnaLogger/Logger.h" + + +SettingsSerializer::SettingsSerializer(const SDK::Kernel& kernel, + const char *pathToFile) : + mKernel(kernel), mPath(pathToFile) +{ + assert(pathToFile != nullptr); +} + +bool SettingsSerializer::save(const Settings &settings) +{ + const char *slash = strrchr(mPath, '/'); + if (slash) { + char buff[SDK::Interface::IFileSystem::skMaxPathLen] { }; + snprintf(buff, sizeof(buff), "%.*s", static_cast(slash - mPath), mPath); + // Create dir + if (!mKernel.fs.mkdir(buff)) { + return false; + } + } + + std::unique_ptr file = mKernel.fs.file(mPath); + + if (!file) { + return false; + } + + if (!file->open(true, true)) { + file.reset(); + return false; + } + + SDK::JsonStreamWriter writer(file.get()); + + writer.startMap(); + + writer.add("version", settings.version); + writer.add("phone_notif_en", settings.phoneNotifEn); + writer.add("alert_time_id", static_cast(settings.alertTimeId)); + + writer.endMap(); + + file->flush(); + file->close(); + + return true; +} + +bool SettingsSerializer::load(Settings &settings) +{ + std::unique_ptr file = mKernel.fs.file(mPath); + + if (!file) { + return false; + } + + if (!file->exist()) { + file.reset(); + return false; + } + + if (!file->open(false, false)) { + file.reset(); + return false; + } + + size_t fileSize = file->size(); + if (fileSize == 0) { // Check for adequate size + file->close(); + file.reset(); + return false; + } + + char* buffer = new (std::nothrow)char[fileSize]; + if (buffer == nullptr) { + file->close(); + file.reset(); + return false; + } + + size_t read = 0; + bool status = file->read(buffer, fileSize, read) && (read == fileSize); + + file->close(); + file.reset(); + + if (!status) { + delete[] buffer; + return false; + } + + SDK::JsonStreamReader reader(buffer, fileSize); + + if (!reader.validate()) { + LOG_ERROR("JSON is invalid\n"); + delete[] buffer; + return false; + } + + reader.get("version", settings.version); + reader.get("phone_notif_en", settings.phoneNotifEn); + uint8_t timeId = static_cast(Settings::Alerts::Time::ID_OFF); + reader.get("alert_time_id", timeId); + settings.alertTimeId = timeId < Settings::Alerts::Time::ID_COUNT + ? static_cast(timeId) + : Settings::Alerts::Time::ID_OFF; + + delete[] buffer; + + return true; +} diff --git a/Apps/Workout/Software/Libs/Sources/WristTiltDetector.cpp b/Apps/Workout/Software/Libs/Sources/WristTiltDetector.cpp new file mode 100644 index 00000000..9dcf9ac4 --- /dev/null +++ b/Apps/Workout/Software/Libs/Sources/WristTiltDetector.cpp @@ -0,0 +1,219 @@ +/******************************************************************************* + * @file WristTiltDetector.cpp + * @date 22-04-2025 + * @author Denys Saienko + * @brief Wrist-tilt gesture detector implementation. + ******************************************************************************/ + +#include "WristTiltDetector.hpp" + +#include +#include + + /******************************************************************************* + * Construction / lifecycle + ******************************************************************************/ + +WristTiltDetector::WristTiltDetector(const Config& cfg) noexcept + : mCfg(cfg) +{ + const float sr = cfg.sampleRateHz; + + mMotionCapacity = static_cast(cfg.motionWindowS * sr + 0.5f); + if (mMotionCapacity > MAX_MOTION_WIN) { + mMotionCapacity = MAX_MOTION_WIN; + } + if (mMotionCapacity == 0u) { + mMotionCapacity = 1u; + } + + mHoldSamples = static_cast(cfg.holdDurationS * sr + 0.5f); + mCooldownSamples = static_cast(cfg.cooldownDurationS * sr + 0.5f); + + reset(); +} + +void WristTiltDetector::setListener(IListener* listener) noexcept +{ + mListener = listener; +} + +void WristTiltDetector::reset() noexcept +{ + mMotionHead = 0u; + mMotionFilled = 0u; + mDeltaSum = 0.0f; + mPrevAy = 0; + mHasPrevAy = false; + + mTiltState = TiltState::IDLE; + mStateDeadline = 0u; + mSampleCount = 0u; + + mMotionClass = MotionClass::STATIONARY; + mLastAvgSwing = 0.0f; + mTotalEvents = 0u; + + std::memset(mDeltaBuf, 0, sizeof(mDeltaBuf)); +} + +void WristTiltDetector::setConfig(const Config& cfg) noexcept +{ + mCfg = cfg; + + const float sr = cfg.sampleRateHz; + + mMotionCapacity = static_cast(cfg.motionWindowS * sr + 0.5f); + if (mMotionCapacity > MAX_MOTION_WIN) { + mMotionCapacity = MAX_MOTION_WIN; + } + if (mMotionCapacity == 0u) { + mMotionCapacity = 1u; + } + + mHoldSamples = static_cast(cfg.holdDurationS * sr + 0.5f); + mCooldownSamples = static_cast(cfg.cooldownDurationS * sr + 0.5f); + + reset(); +} + +/******************************************************************************* + * Main processing + ******************************************************************************/ + +bool WristTiltDetector::addBatch(const TiltImuSample* samples, + size_t count) noexcept +{ + if (samples == nullptr || count == 0u) { + return false; + } + + bool anyTriggered = false; + + for (size_t i = 0u; i < count; ++i) { + if (processSample(samples[i])) { + anyTriggered = true; + } + } + + return anyTriggered; +} + +/******************************************************************************* + * Private helpers + ******************************************************************************/ + +void WristTiltDetector::pushMotionSample(int16_t ay, int16_t prevAy) noexcept +{ + const float delta = static_cast( + (ay >= prevAy) ? (ay - prevAy) : (prevAy - ay)); + + /* Evict oldest sample from ring if full. */ + if (mMotionFilled >= mMotionCapacity) { + mDeltaSum -= mDeltaBuf[mMotionHead]; + } else { + ++mMotionFilled; + } + + mDeltaBuf[mMotionHead] = delta; + mDeltaSum += delta; + + mMotionHead = static_cast((mMotionHead + 1u) % mMotionCapacity); +} + +float WristTiltDetector::computeAvgSwing() const noexcept +{ + if (mMotionFilled < 2u) { + return 0.0f; + } + /* mMotionFilled - 1 because we store N deltas for N+1 samples. */ + return mDeltaSum / static_cast(mMotionFilled - 1u); +} + +void WristTiltDetector::updateMotionClass(float avgSwing, + uint32_t tsMs) noexcept +{ + MotionClass next = mMotionClass; + + if (avgSwing > mCfg.avgSwingRunning) { + next = MotionClass::RUNNING; + } else if (avgSwing > mCfg.avgSwingWalking) { + next = MotionClass::WALKING; + } else if (avgSwing < mCfg.avgSwingStationary) { + next = MotionClass::STATIONARY; + } + /* Else: stay in current class (hysteresis band). */ + + if (next != mMotionClass) { + mMotionClass = next; + if (mListener != nullptr) { + mListener->onMotionClassChange(mMotionClass, tsMs); + } + } +} + +int32_t WristTiltDetector::dynamicGxThreshold() const noexcept +{ + switch (mMotionClass) { + case MotionClass::RUNNING: return mCfg.gxThreshRunning; + case MotionClass::WALKING: return mCfg.gxThreshWalking; + case MotionClass::STATIONARY: return mCfg.gxThreshStationary; + default: return mCfg.gxThreshStationary; + } +} + +bool WristTiltDetector::processSample(const TiltImuSample& sample) noexcept +{ + const uint32_t now = mSampleCount; + ++mSampleCount; + + /* --- 1. Update motion window ------------------------------------------ */ + if (mHasPrevAy) { + pushMotionSample(sample.ayLsb, mPrevAy); + } else { + mHasPrevAy = true; + } + mPrevAy = sample.ayLsb; + + const float avgSwing = computeAvgSwing(); + mLastAvgSwing = avgSwing; + updateMotionClass(avgSwing, sample.timestampMs); + + /* --- 2. Tilt state machine -------------------------------------------- */ + const int32_t gxMag = (sample.gxLsb >= 0) + ? static_cast(sample.gxLsb) + : -static_cast(sample.gxLsb); + const int32_t gxThresh = dynamicGxThreshold(); + const bool gxAbove = (gxMag > gxThresh); + + bool fired = false; + + switch (mTiltState) { + case TiltState::IDLE: + if (gxAbove) { + mTiltState = TiltState::ACTIVE; + mStateDeadline = now + mHoldSamples; + ++mTotalEvents; + fired = true; + if (mListener != nullptr) { + mListener->onWristTilt(sample.timestampMs); + } + } + break; + + case TiltState::ACTIVE: + if (now >= mStateDeadline) { + mTiltState = TiltState::COOLDOWN; + mStateDeadline = now + mCooldownSamples; + } + break; + + case TiltState::COOLDOWN: + if (now >= mStateDeadline) { + mTiltState = TiltState::IDLE; + } + break; + } + + return fired; +} \ No newline at end of file diff --git a/Apps/Workout/Software/Libs/libs.cmake b/Apps/Workout/Software/Libs/libs.cmake new file mode 100644 index 00000000..25cf8e04 --- /dev/null +++ b/Apps/Workout/Software/Libs/libs.cmake @@ -0,0 +1,10 @@ +file(GLOB_RECURSE LIBS_SOURCES CONFIGURE_DEPENDS + ${CMAKE_CURRENT_LIST_DIR}/Sources/*.c + ${CMAKE_CURRENT_LIST_DIR}/Sources/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/Source/*.c + ${CMAKE_CURRENT_LIST_DIR}/Source/*.cpp +) + +set(LIBS_INCLUDE_DIRS + ${CMAKE_CURRENT_LIST_DIR}/Header +) \ No newline at end of file