summaryrefslogtreecommitdiff
path: root/src/engine/editor
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2025-05-14 18:30:32 -0600
committerGitHub <noreply@github.com>2025-05-14 18:30:32 -0600
commit32632cacdb316d7f2d3b6ecdb634f0ef9aebadf0 (patch)
treed374a84675fc0f49100c275aa34828bc9db538f8 /src/engine/editor
parent70f049cb6c326dede27e0ba7e88ac0d67b7651a4 (diff)
Impl new intro (#193)
* Update menus * Update CMakeLists.txt * Add Ship * Impl hm ship actors * Update HM course * Impl new intro * Finish intro scene * Rename * Start Editor Work * raycast works * Fix ScreenRayTrace in widescreen * Basic Actor Picking * wip * Editor use vtx collision * gizmo work * otr works for object picking * Impl objects for editor * actor init * Update * Add all axis move (freemove) * Docking Windows works here * Setup imgui layout for editor * Editor Snap to Ground works * Basic Scene Explorer Works * Editor get actor names * Impl editor object names * impl Editor Play and Pause buttons * Editor translate works while paused * Fix freecam lighting * Added adjustable track properties to editor * Editor matrix, icons, rotation, impl light * Setup Track Properties 1 * Editor tooling wip * Load modded o2rs * Don't enable hud if editor is enabled * Updates * SceneManager nearly working * Fix mario kart 64 intro logo sizing * Fix Rotator * Finish new matrix translation code * Cleanup headers * Cleanup * Cleanup 2 * Cleanup 3 * Prevent divize by zero crash * Add visible circle for translate in all axis * Editor scaling/rot works properly now * Scale All_Axis evenly * Fixes to includes to work on Linux. * Removed overfilled arguments in gfx_create_framebuffer() * Added missing function definitions to Game.h * Editor sun face the camera * Add rotation model to gizmo * Add new handles * Failed attempt at transforming collision * Impl water volume * Import fast64 paths * water surface * Scene Setup 1 * Custom Track O2R almost working needs testing * Custom Track Load path O2r * Render custom track. Wip collision * Add missing function * Debug Spawning Custom O2R Track * Import courses working now * Fix memory leak * Remove New Track Button * Engine.cpp more consistent with sf64 * Fix Editor Enable Button * Editor Accurate mouse click drag objects * Editor selects closest object and cleanup * Gizmo rot and scale collision working * Remove constexpr from IRotator * Impl properties for location/rot/scale * Better Properties display, swap rot handles * Fix content browser dock and editor now disabled by default * Remove GameInfoWindow, Multiplayer Button, and FPS Slider * Disable Editor when its disabled * Add new logo to hm intro * Fix pause menu item box cursor * Remove minimap from Course::from_json and to_json * Impl Import Minimap * Fix custom minimap rendering * minimap uses extension .png * Refactor minimap * Freecam only for player 1 * GrandPrix Balloons work in custom track * Track Id is now std::string and outside of Props * Moved editor assets to be included in ship.o2r * Fixed GenerateO2R to package the correct folder and save to the correct filename * Linux specific changes. * Added "#include <stdio.h>" that required them * Changed how the "ship.o2r" file is loaded to allow it to load the file from within appimages. * Changed the Linuxdeploy version to avoid errors later when the Github Actions creates appimages(same fix applied to other ports.) * Revert "Moved editor assets to be included in ship.o2r" This reverts commit 05704c01f761baa67a83e357d9765f5c6b5e3fdb. * Added back files(this time without LUS changes) * Changed workflow file to use correct filename for assets file. * Missed a few spots in the workflow file. * Added .desktop file and made corrections to the main workflow. * Added the rest of upstream CMakeLists.txt * disabled USE_NETWORKING * New InverseMatrix * Renamed both .o2r files to be more accurate to its contents. * Reverted CmakeList.txt --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com> Co-authored-by: sitton76 <58642183+sitton76@users.noreply.github.com>
Diffstat (limited to 'src/engine/editor')
-rw-r--r--src/engine/editor/Collision.cpp188
-rw-r--r--src/engine/editor/Collision.h23
-rw-r--r--src/engine/editor/Editor.cpp166
-rw-r--r--src/engine/editor/Editor.h47
-rw-r--r--src/engine/editor/EditorMath.cpp427
-rw-r--r--src/engine/editor/EditorMath.h58
-rw-r--r--src/engine/editor/GameObject.cpp30
-rw-r--r--src/engine/editor/GameObject.h44
-rw-r--r--src/engine/editor/Gizmo.cpp348
-rw-r--r--src/engine/editor/Gizmo.h85
-rw-r--r--src/engine/editor/Handles.cpp23
-rw-r--r--src/engine/editor/Handles.h19
-rw-r--r--src/engine/editor/Light.cpp84
-rw-r--r--src/engine/editor/Light.h2143
-rw-r--r--src/engine/editor/ObjectPicker.cpp207
-rw-r--r--src/engine/editor/ObjectPicker.h28
-rw-r--r--src/engine/editor/SceneManager.cpp156
-rw-r--r--src/engine/editor/SceneManager.h13
18 files changed, 4089 insertions, 0 deletions
diff --git a/src/engine/editor/Collision.cpp b/src/engine/editor/Collision.cpp
new file mode 100644
index 000000000..bf62d6273
--- /dev/null
+++ b/src/engine/editor/Collision.cpp
@@ -0,0 +1,188 @@
+#include "Collision.h"
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "Matrix.h"
+
+extern "C" {
+#include "main.h"
+#include "other_textures.h"
+}
+
+namespace Editor {
+ void GenerateCollisionMesh(GameObject* object, Gfx* model, float scale) {
+ int8_t opcode;
+ uintptr_t lo;
+ uintptr_t hi;
+
+ Gfx* ptr = model;
+ Vtx* vtx = NULL;
+ size_t i = 0;
+ bool run = true;
+ while (run) {
+ i++;
+ lo = ptr->words.w0;
+ hi = ptr->words.w1;
+
+ opcode = (EDITOR_GFX_GET_OPCODE(lo) >> 24);
+ switch(opcode) {
+ case G_DL:
+ GenerateCollisionMesh(object, (Gfx*)hi, scale);
+ break;
+ case G_DL_OTR_HASH:
+ ptr++;
+ GenerateCollisionMesh(object, (Gfx*)ResourceGetDataByCrc(((uint64_t)(ptr->words.w0 << 32)) + ptr->words.w1), scale);
+ break;
+ case G_DL_OTR_FILEPATH:
+ // printf("otr filepath: %s\n", (const char*)hi);
+ GenerateCollisionMesh(object, (Gfx*)ResourceGetDataByName((const char*)hi), scale);
+ break;
+ case G_VTX:
+ vtx = (Vtx*)ptr->words.w1;
+ break;
+ case G_VTX_OTR_HASH: {
+ ptr++;
+ vtx = (Vtx*)ResourceGetDataByCrc(((uint64_t)(ptr->words.w0 << 32)) + ptr->words.w1);
+ break;
+ }
+ case G_VTX_OTR_FILEPATH: {
+ const char* filePath = (const char*)hi;
+ ptr++;
+ size_t vtxDataOff = ptr->words.w1 & 0xFFFF;
+ vtx = ( (Vtx*)ResourceGetDataByName(filePath) ) + vtxDataOff;
+ break;
+ }
+ case G_TRI1: {
+ if (vtx == NULL) {
+ ptr++;
+ continue;
+ }
+ uint32_t v1 = ((hi & 0x00FF0000) >> 16) / 2;
+ uint32_t v2 = ((hi & 0x0000FF00) >> 8) / 2;
+ uint32_t v3 = (hi & 0x000000FF) / 2;
+
+ FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]);
+ FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]);
+ FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]);
+
+ object->Triangles.push_back({p1, p2, p3});
+ break;
+ }
+ case G_TRI1_OTR: {
+ if (vtx == NULL) {
+ ptr++;
+ continue;
+ }
+
+ // The shift values here are different than the above. No idea why. But it has to be this way.
+ uint32_t v1 = (lo & 0x0000FFFF);
+ uint32_t v2 = (hi >> 16);
+ uint32_t v3 = (hi & 0x0000FFFF);
+
+ FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]);
+ FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]);
+ FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]);
+
+ object->Triangles.push_back({p1, p2, p3});
+
+ break;
+ }
+ case G_TRI2: {
+ if (vtx == NULL) {
+ ptr++;
+ continue;
+ }
+ uint32_t v1 = ((lo & 0x00FF0000) >> 16) / 2;
+ uint32_t v2 = ((lo & 0x0000FF00) >> 8) / 2;
+ uint32_t v3 = (lo & 0x000000FF) / 2;
+
+ // This is actually triangle 2; vert 1,2,3.
+ uint32_t v4 = ((hi & 0x00FF0000) >> 16) / 2;
+ uint32_t v5 = ((hi & 0x0000FF00) >> 8) / 2;
+ uint32_t v6 = (hi & 0x000000FF) / 2;
+
+ FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]);
+ FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]);
+ FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]);
+
+ FVector p4 = FVector(vtx[v4].v.ob[0], vtx[v4].v.ob[1], vtx[v4].v.ob[2]);
+ FVector p5 = FVector(vtx[v5].v.ob[0], vtx[v5].v.ob[1], vtx[v5].v.ob[2]);
+ FVector p6 = FVector(vtx[v6].v.ob[0], vtx[v6].v.ob[1], vtx[v6].v.ob[2]);
+
+ object->Triangles.push_back({p1, p2, p3});
+ object->Triangles.push_back({p4, p5, p6});
+ break;
+ }
+ case G_QUAD: {
+ if (vtx == NULL) {
+ ptr++;
+ continue;
+ }
+ uint32_t v1 = ((hi & 0x00FF0000) >> 16) / 2;
+ uint32_t v2 = ((hi & 0x0000FF00) >> 8) / 2;
+ uint32_t v3 = (hi & 0x000000FF) / 2;
+ uint32_t v4 = ((hi & 0xFF000000) >> 24) / 2;
+
+ FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]);
+ FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]);
+ FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]);
+ FVector p4 = FVector(vtx[v4].v.ob[0], vtx[v4].v.ob[1], vtx[v4].v.ob[2]);
+
+ object->Triangles.push_back({p1, p2, p3});
+ object->Triangles.push_back({p1, p3, p4});
+ break;
+ }
+ case G_ENDDL:
+ run = false;
+ break;
+ }
+
+ ptr++;
+ }
+ }
+
+ std::unordered_map<GameObject*, std::vector<Vtx>> gDebugObjVtxCache;
+
+ // Render a collision model
+ void DebugCollision(GameObject* obj, FVector pos, IRotator rot, FVector scale, const std::vector<Triangle>& triangles) {
+ if (obj == NULL || triangles.empty()) {
+ return;
+ }
+
+ gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
+
+ auto& vtxBuffer = gDebugObjVtxCache[obj];
+ if (vtxBuffer.empty()) {
+ for (const auto& tri : triangles) {
+ vtxBuffer.push_back({(s16)tri.v0.x, (s16)tri.v0.y, (s16)tri.v0.z, 0, {0, 0}, {255, 255, 255, 255}});
+ vtxBuffer.push_back({(s16)tri.v1.x, (s16)tri.v1.y, (s16)tri.v1.z, 0, {0, 0}, {255, 255, 255, 255}});
+ vtxBuffer.push_back({(s16)tri.v2.x, (s16)tri.v2.y, (s16)tri.v2.z, 0, {0, 0}, {255, 255, 255, 255}});
+ }
+ }
+
+ // Setup matrix and render state
+ Mat4 mtx;
+ ApplyMatrixTransformations(mtx, pos, rot, scale);
+ Editor_AddMatrix(mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPSetGeometryMode(gDisplayListHead++, G_FOG);
+ gDPPipeSync(gDisplayListHead++);
+ gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gSPTexture(gDisplayListHead++, 0, 0, 0, G_TX_RENDERTILE, G_OFF);
+ gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
+ uint32_t hash = (uint32_t)((uintptr_t)obj ^ ((uintptr_t)obj >> 16));
+ u8 r = (hash >> 16) & 0xFF;
+ u8 g = (hash >> 8) & 0xFF;
+ u8 b = hash & 0xFF;
+
+ gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, 255);
+
+ // Render triangles in batches of 3
+ for (size_t i = 0; i + 2 < vtxBuffer.size(); i += 3) {
+ gSPVertex(gDisplayListHead++, (uintptr_t)&vtxBuffer[i], 3, 0);
+ gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
+ }
+
+ gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK | G_ZBUFFER);
+ }
+}
diff --git a/src/engine/editor/Collision.h b/src/engine/editor/Collision.h
new file mode 100644
index 000000000..ee8fef4af
--- /dev/null
+++ b/src/engine/editor/Collision.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "GameObject.h"
+
+#include "EditorMath.h"
+
+/**
+ * @file Editor Collision
+ *
+ * Most actors use cylinder collision.
+ * Proper vtx intersection tests are necessary for object picking
+ *
+ * Therefore, generate a full collision mesh for actors
+ */
+
+#define EDITOR_GFX_GET_OPCODE(var) ((uint32_t) ((var) & 0xFF000000))
+
+namespace Editor {
+ void GenerateCollisionMesh(GameObject* object, Gfx* model, float scale);
+ void DebugCollision(GameObject* obj, FVector pos, IRotator rot, FVector scale, const std::vector<Triangle>& triangles);
+} \ No newline at end of file
diff --git a/src/engine/editor/Editor.cpp b/src/engine/editor/Editor.cpp
new file mode 100644
index 000000000..446da7487
--- /dev/null
+++ b/src/engine/editor/Editor.cpp
@@ -0,0 +1,166 @@
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "../CoreMath.h"
+#include <libultra/types.h>
+#include "../World.h"
+
+#include "Editor.h"
+#include "Collision.h"
+#include "Light.h"
+
+#include "port/Engine.h"
+#include <controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h>
+#include <window/Window.h>
+
+#include "engine/actors/Ship.h"
+#include "port/Game.h"
+
+extern "C" {
+#include "common_structs.h"
+#include "main.h"
+#include "defines.h"
+#include "actors.h"
+#include "camera.h"
+}
+
+namespace Editor {
+ int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height,
+ uint8_t resize);
+
+ Editor::Editor() {
+ }
+
+ void Editor::Load() {
+ printf("Editor: Loading Editor...\n");
+ eObjectPicker.Load();
+ for (auto& object : eGameObjects) {
+ GenerateCollisionMesh(object, object->Model, 1.0f);
+ object->Load();
+ }
+ printf("Editor: Loading Complete!\n");
+ }
+
+ void Editor::Tick() {
+
+ if (CVarGetInteger("gEditorEnabled", 0) == true) {
+ bEditorEnabled = true;
+ } else {
+ bEditorEnabled = false;
+ return;
+ }
+
+ auto wnd = GameEngine::Instance->context->GetWindow();
+
+ static bool wasMouseDown = false;
+ static bool isDragging = false;
+ static Ship::Coords mouseStartPos;
+
+ Ship::Coords mousePos = wnd->GetMousePos();
+ bool isMouseDown = wnd->GetMouseState(Ship::LUS_MOUSE_BTN_LEFT);
+
+ eGameObjects.erase(
+ std::remove_if(eGameObjects.begin(), eGameObjects.end(),
+ [](const auto& object) { return (*object->DespawnFlag) == object->DespawnValue; }),
+ eGameObjects.end());
+
+ if (isMouseDown && !wasMouseDown) {
+ // Mouse just pressed (Pressed state)
+ mouseStartPos = mousePos;
+ isDragging = false;
+ }
+
+ if (isMouseDown) {
+ // Mouse is being held (Held state)
+ int dx = mousePos.x - mouseStartPos.x;
+ int dy = mousePos.y - mouseStartPos.y;
+ int dragThreshold = 5; // Adjust as needed
+
+ if ((dx * dx + dy * dy) > (dragThreshold * dragThreshold)) {
+ // Squared distance check to avoid unnecessary sqrt()
+ isDragging = true;
+ eObjectPicker.DragHandle(); // Call drag logic
+ }
+ }
+
+ if (!isMouseDown && wasMouseDown) {
+ // Mouse just released (Released state)
+ eObjectPicker.eGizmo.SelectedHandle = Gizmo::GizmoHandle::None;
+ eObjectPicker.eGizmo.ManipulationStart = true;
+ if (!isDragging) {
+ eObjectPicker.SelectObject(eGameObjects);
+ }
+
+ }
+
+ wasMouseDown = isMouseDown; // Update previous state
+
+ eObjectPicker.Tick();
+
+ for (auto& object : eGameObjects) {
+ object->Tick();
+ }
+ }
+
+ void Editor::Draw() {
+ if (!bEditorEnabled) {
+ return;
+ }
+ eObjectPicker.Draw();
+ for (auto& object : eGameObjects) {
+ object->Draw();
+ }
+ }
+
+ GameObject* Editor::AddObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, float collScale, GameObject::CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue) {
+ //printf("After AddObj: Pos(%f, %f, %f), Name: %s, Model: %s\n",
+ // pos->x, pos->y, pos->z, name, model);
+ if (model != nullptr) {
+ eGameObjects.push_back(new GameObject(name, pos, rot, scale, model, {}, collision, boundingBoxSize, despawnFlag, despawnValue));
+ GenerateCollisionMesh(eGameObjects.back(), model, collScale);
+ } else { // to bounding box or sphere collision
+ eGameObjects.push_back(new GameObject(name, pos, rot, scale, model, {}, GameObject::CollisionType::BOUNDING_BOX,
+ 10.0f, despawnFlag, despawnValue));
+ }
+ return eGameObjects.back();
+ }
+
+ void Editor::AddLight(const char* name, FVector* pos, s8* rot) {
+ eGameObjects.push_back(new LightObject(name, pos, rot));
+ }
+
+ void Editor::ClearObjects() {
+ for (auto& obj : eGameObjects) {
+ delete obj;
+ }
+ eGameObjects.clear();
+ }
+
+ void Editor::DeleteObject() {
+ GameObject* obj = eObjectPicker.eGizmo._selected;
+
+ if (obj) {
+ *obj->DespawnFlag = obj->DespawnValue;
+ obj = nullptr;
+ eObjectPicker._selected = nullptr;
+ }
+ }
+
+ void Editor::ClearMatrixPool() {
+ EditorMatrix.clear();
+ }
+
+ void Editor::SelectObjectFromSceneExplorer(GameObject* object) {
+ eObjectPicker._selected = object;
+ eObjectPicker.eGizmo.Enabled = true;
+ eObjectPicker.eGizmo.SetGizmoNoCursor(object);
+ }
+
+ void Editor::SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 minY, s16 maxY) {
+ eObjectPicker.eGizmo.dimensions.MinX = minX + -1000;
+ eObjectPicker.eGizmo.dimensions.MaxX = maxX + 1000;
+ eObjectPicker.eGizmo.dimensions.MinY = minY + -100;
+ eObjectPicker.eGizmo.dimensions.MaxY = maxY + 500;
+ eObjectPicker.eGizmo.dimensions.MinZ = minZ + -1000;
+ eObjectPicker.eGizmo.dimensions.MaxZ = maxZ + 1000;
+ }
+}
diff --git a/src/engine/editor/Editor.h b/src/engine/editor/Editor.h
new file mode 100644
index 000000000..759c59355
--- /dev/null
+++ b/src/engine/editor/Editor.h
@@ -0,0 +1,47 @@
+#ifndef __EDITOR_H__
+#define __EDITOR_H__
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "GameObject.h"
+
+#ifdef __cplusplus
+
+#include "ObjectPicker.h"
+namespace Editor {
+ class ObjectPicker;
+
+ class Editor {
+public:
+ Editor();
+
+ ObjectPicker eObjectPicker;
+ std::vector<GameObject*> eGameObjects;
+
+ void Tick();
+ void Draw();
+ void Load();
+ GameObject* AddObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, float collScale, GameObject::CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue);
+ void AddLight(const char* name, FVector* pos, s8* rot);
+ void ClearObjects();
+ void RemoveObject();
+ void SelectObjectFromSceneExplorer(GameObject* object);
+ void SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 minY, s16 maxY);
+ void ClearMatrixPool();
+ void DeleteObject();
+ bool bEditorEnabled = false;
+
+private:
+ bool _draw = false;
+ Vec3f _ray;
+
+ s32 Inverse(MtxF* src, MtxF* dest);
+ void Copy(MtxF* src, MtxF* dest);
+ void Clear(MtxF* mf);
+};
+}
+#endif
+
+void SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 minY, s16 maxY);
+
+#endif // __EDITOR_H__
diff --git a/src/engine/editor/EditorMath.cpp b/src/engine/editor/EditorMath.cpp
new file mode 100644
index 000000000..533c0c2b5
--- /dev/null
+++ b/src/engine/editor/EditorMath.cpp
@@ -0,0 +1,427 @@
+#include "EditorMath.h"
+
+#include <libultraship/libultraship.h>
+#include "port/Game.h"
+#include "port/Engine.h"
+#include <libultra/types.h>
+#include "GameObject.h"
+
+#include <vector>
+#include <limits>
+#include <cmath>
+
+extern "C" {
+#include "common_structs.h"
+#include "main.h"
+#include "defines.h"
+#include "actors.h"
+#include "math_util.h"
+#include "math_util_2.h"
+#include "camera.h"
+}
+
+std::vector<Mtx> EditorMatrix;
+
+bool IsInGameScreen() {
+ auto wnd = GameEngine::Instance->context->GetWindow();
+ Ship::Coords mouse = wnd->GetMousePos();
+
+ // Define viewport boundaries
+ int left = gfx_current_game_window_viewport.x;
+ int right = left + OTRGetGameRenderWidth();
+ int top = gfx_current_game_window_viewport.y;
+ int bottom = top + OTRGetGameRenderHeight();
+
+ // Check if the mouse is within the game render area
+ return (mouse.x >= left && mouse.x < right) && (mouse.y >= top && mouse.y < bottom);
+}
+
+FVector ScreenRayTrace() {
+ auto wnd = GameEngine::Instance->context->GetWindow();
+ Camera* camera = &cameras[0];
+
+ Ship::Coords mouse = wnd->GetMousePos();
+ mouse.x -= gfx_current_game_window_viewport.x;
+ mouse.y -= gfx_current_game_window_viewport.y;
+ // Get screen dimensions
+ uint32_t width = OTRGetGameViewportWidth();
+ uint32_t height = OTRGetGameViewportHeight();
+
+ // Convert mouse to NDS screen coordinates
+ float x = (2.0f * mouse.x) / width - 1.0f; // Normalized X: -1 to 1
+ float y = 1.0f - (2.0f * mouse.y) / height; // Normalized Y: -1 to 1
+ float z = 1.0f; // z is typically 1.0 for the near plane
+
+ FVector4 rayClip = {x, y, z, 1.0f};
+
+ Mat4 perspMtx;
+ u16 perspNorm;
+ guPerspectiveF(perspMtx, &perspNorm, gCameraZoom[0], OTRGetAspectRatio(), CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f);
+
+ Mat4 inversePerspMtx;
+ if (InverseMatrix((float*)&perspMtx, (float*)&inversePerspMtx) != 2) {
+ FVector4 rayEye = MultiplyMatrixVector(inversePerspMtx, (float*)&rayClip.x);
+
+ Mat4 lookAtMtx;
+ guLookAtF(lookAtMtx, camera->pos[0], camera->pos[1], camera->pos[2], camera->lookAt[0], camera->lookAt[1], camera->lookAt[2], camera->up[0], camera->up[1], camera->up[2]);
+ Mat4 inverseViewMtx;
+ if (InverseMatrix((float*)&lookAtMtx, (float*)&inverseViewMtx[0][0]) != 2) {
+ rayEye.w = 0;
+ FVector4 invRayWor = MultiplyMatrixVector(inverseViewMtx, (float*)&rayEye.x);
+
+ FVector direction;
+ direction = FVector(invRayWor.x, invRayWor.y, invRayWor.z);
+
+ return direction;
+ }
+ }
+ return FVector(0, 0, 0);
+}
+
+bool QueryCollisionRayActor(Vec3f rayOrigin, Vec3f rayDir, Vec3f actorMin, Vec3f actorMax, float* t) {
+ float tmin = -FLT_MAX, tmax = FLT_MAX;
+
+ for (int i = 0; i < 3; i++) {
+ if (fabs(rayDir[i]) > 1e-6f) { // Avoid division by zero
+ float t1 = (actorMin[i] - rayOrigin[i]) / rayDir[i];
+ float t2 = (actorMax[i] - rayOrigin[i]) / rayDir[i];
+
+ if (t1 > t2) { float temp = t1; t1 = t2; t2 = temp; }
+
+ tmin = fmax(tmin, t1);
+ tmax = fmin(tmax, t2);
+
+ if (tmax < tmin) return false; // No intersection
+ } else if (rayOrigin[i] < actorMin[i] || rayOrigin[i] > actorMax[i]) {
+ return false; // Ray is outside the slab
+ }
+ }
+
+ *t = tmin; // Distance to first intersection
+ return true;
+}
+
+FVector4 MultiplyMatrixVector(float matrix[4][4], float vector[4]) {
+ FVector4 result;
+ float* resultPtr = &result.x;
+ for (int i = 0; i < 4; i++) {
+ resultPtr[i] = 0;
+ for (int j = 0; j < 4; j++) {
+ resultPtr[i] += matrix[j][i] * vector[j]; // Swap [i][j] → [j][i] for column order
+ }
+ }
+ return result;
+}
+
+// https://stackoverflow.com/questions/1148309/inverting-a-4x4-matrix
+static bool InverseMatrix(const float m[16], float invOut[16]) {
+ float inv[16], det;
+ int i;
+
+ inv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] +
+ m[13] * m[6] * m[11] - m[13] * m[7] * m[10];
+
+ inv[4] = -m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] -
+ m[12] * m[6] * m[11] + m[12] * m[7] * m[10];
+
+ inv[8] = m[4] * m[9] * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] +
+ m[12] * m[5] * m[11] - m[12] * m[7] * m[9];
+
+ inv[12] = -m[4] * m[9] * m[14] + m[4] * m[10] * m[13] + m[8] * m[5] * m[14] - m[8] * m[6] * m[13] -
+ m[12] * m[5] * m[10] + m[12] * m[6] * m[9];
+
+ inv[1] = -m[1] * m[10] * m[15] + m[1] * m[11] * m[14] + m[9] * m[2] * m[15] - m[9] * m[3] * m[14] -
+ m[13] * m[2] * m[11] + m[13] * m[3] * m[10];
+
+ inv[5] = m[0] * m[10] * m[15] - m[0] * m[11] * m[14] - m[8] * m[2] * m[15] + m[8] * m[3] * m[14] +
+ m[12] * m[2] * m[11] - m[12] * m[3] * m[10];
+
+ inv[9] = -m[0] * m[9] * m[15] + m[0] * m[11] * m[13] + m[8] * m[1] * m[15] - m[8] * m[3] * m[13] -
+ m[12] * m[1] * m[11] + m[12] * m[3] * m[9];
+
+ inv[13] = m[0] * m[9] * m[14] - m[0] * m[10] * m[13] - m[8] * m[1] * m[14] + m[8] * m[2] * m[13] +
+ m[12] * m[1] * m[10] - m[12] * m[2] * m[9];
+
+ inv[2] = m[1] * m[6] * m[15] - m[1] * m[7] * m[14] - m[5] * m[2] * m[15] + m[5] * m[3] * m[14] +
+ m[13] * m[2] * m[7] - m[13] * m[3] * m[6];
+
+ inv[6] = -m[0] * m[6] * m[15] + m[0] * m[7] * m[14] + m[4] * m[2] * m[15] - m[4] * m[3] * m[14] -
+ m[12] * m[2] * m[7] + m[12] * m[3] * m[6];
+
+ inv[10] = m[0] * m[5] * m[15] - m[0] * m[7] * m[13] - m[4] * m[1] * m[15] + m[4] * m[3] * m[13] +
+ m[12] * m[1] * m[7] - m[12] * m[3] * m[5];
+
+ inv[14] = -m[0] * m[5] * m[14] + m[0] * m[6] * m[13] + m[4] * m[1] * m[14] - m[4] * m[2] * m[13] -
+ m[12] * m[1] * m[6] + m[12] * m[2] * m[5];
+
+ inv[3] = -m[1] * m[6] * m[11] + m[1] * m[7] * m[10] + m[5] * m[2] * m[11] - m[5] * m[3] * m[10] -
+ m[9] * m[2] * m[7] + m[9] * m[3] * m[6];
+
+ inv[7] = m[0] * m[6] * m[11] - m[0] * m[7] * m[10] - m[4] * m[2] * m[11] + m[4] * m[3] * m[10] +
+ m[8] * m[2] * m[7] - m[8] * m[3] * m[6];
+
+ inv[11] = -m[0] * m[5] * m[11] + m[0] * m[7] * m[9] + m[4] * m[1] * m[11] - m[4] * m[3] * m[9] -
+ m[8] * m[1] * m[7] + m[8] * m[3] * m[5];
+
+ inv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] -
+ m[8] * m[2] * m[5];
+
+ det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
+
+ if (det == 0) {
+ return false;
+ }
+
+ det = 1.0 / det;
+
+ for (i = 0; i < 16; i++) {
+ invOut[i] = inv[i] * det;
+ }
+
+ return true;
+}
+
+FVector TransformVecByMatrix(const FVector& vec, const float mtx[4][4]) {
+ FVector result;
+ result.x = vec.x * mtx[0][0] + vec.y * mtx[1][0] + vec.z * mtx[2][0] + mtx[3][0];
+ result.y = vec.x * mtx[0][1] + vec.y * mtx[1][1] + vec.z * mtx[2][1] + mtx[3][1];
+ result.z = vec.x * mtx[0][2] + vec.y * mtx[1][2] + vec.z * mtx[2][2] + mtx[3][2];
+ return result;
+}
+
+FVector TransformVecDirection(const FVector& dir, const float mtx[4][4]) {
+ FVector result;
+ result.x = dir.x * mtx[0][0] + dir.y * mtx[1][0] + dir.z * mtx[2][0];
+ result.y = dir.x * mtx[0][1] + dir.y * mtx[1][1] + dir.z * mtx[2][1];
+ result.z = dir.x * mtx[0][2] + dir.y * mtx[1][2] + dir.z * mtx[2][2];
+ return result;
+}
+
+Ray RayToLocalSpace(MtxF mtx, const Ray& ray) {
+ MtxF inverse;
+
+ if (InverseMatrix((float*)&mtx, (float*)&inverse) != 2) {
+ FVector localRayOrigin = TransformVecByMatrix(ray.Origin, (float(*)[4])&inverse);
+ FVector localRayDir = TransformVecDirection(ray.Direction, (float(*)[4])&inverse);
+ return Ray{localRayOrigin, localRayDir.Normalize()};
+ }
+ return Ray{}; // Fail. Return empty ray
+}
+
+bool IntersectRayTriangle(const Ray& ray, const Triangle& tri, float& t) {
+ constexpr float EPSILON = 1e-6f;
+
+ // Adjust the triangle vertices by the object's position
+ FVector v0 = tri.v0;
+ FVector v1 = tri.v1;
+ FVector v2 = tri.v2;
+
+ FVector edge1 = v1 - v0;
+ FVector edge2 = v2 - v0;
+ FVector h = ray.Direction.Cross(edge2);
+ float a = edge1.Dot(h);
+
+ if (std::abs(a) < EPSILON)
+ return false; // Ray is parallel to triangle
+
+ float f = 1.0f / a;
+ FVector s = ray.Origin - v0;
+ float u = f * s.Dot(h);
+
+ if (u < 0.0f || u > 1.0f)
+ return false;
+
+ FVector q = s.Cross(edge1);
+ float v = f * ray.Direction.Dot(q);
+
+ if (v < 0.0f || u + v > 1.0f)
+ return false;
+
+ t = f * edge2.Dot(q);
+ return t > EPSILON;
+}
+
+bool IntersectRayTriangleAndTransform(const Ray& ray, FVector pos, const Triangle& tri, float& t) {
+ constexpr float EPSILON = 1e-6f;
+
+ // Adjust the triangle vertices by the object's position
+ FVector v0 = tri.v0 + pos;
+ FVector v1 = tri.v1 + pos;
+ FVector v2 = tri.v2 + pos;
+
+ FVector edge1 = v1 - v0;
+ FVector edge2 = v2 - v0;
+ FVector h = ray.Direction.Cross(edge2);
+ float a = edge1.Dot(h);
+
+ if (std::abs(a) < EPSILON)
+ return false; // Ray is parallel to triangle
+
+ float f = 1.0f / a;
+ FVector s = ray.Origin - v0;
+ float u = f * s.Dot(h);
+
+ if (u < 0.0f || u > 1.0f)
+ return false;
+
+ FVector q = s.Cross(edge1);
+ float v = f * ray.Direction.Dot(q);
+
+ if (v < 0.0f || u + v > 1.0f)
+ return false;
+
+ t = f * edge2.Dot(q);
+ return t > EPSILON;
+}
+
+std::optional<FVector> QueryHandleIntersection(MtxF mtx, Ray ray, const Triangle& tri) {
+ float t;
+ Ray localRay = RayToLocalSpace(mtx, ray);
+ if (IntersectRayTriangle(localRay, tri, t)) {
+ FVector localClickPosition = localRay.Origin + localRay.Direction * t;
+ FVector worldClickPosition = TransformVecByMatrix(localClickPosition, (float(*)[4])&mtx);
+
+ return worldClickPosition; // Stop checking objects if we selected a Gizmo handle
+ }
+ return std::nullopt;
+}
+
+bool IntersectRaySphere(const Ray& ray, const FVector& sphereCenter, float radius, float& t) {
+ const float EPSILON = 1e-6f;
+
+ // Vector from ray origin to sphere center
+ FVector oc = ray.Origin - sphereCenter;
+
+ // Quadratic equation coefficients
+ float a = ray.Direction.Dot(ray.Direction);
+ float b = 2.0f * oc.Dot(ray.Direction);
+ float c = oc.Dot(oc) - (radius * radius);
+
+ // Compute discriminant
+ float discriminant = (b * b) - (4 * a * c);
+
+ // No intersection if discriminant is negative
+ if (discriminant < 0) {
+ return false;
+ }
+
+ // Compute nearest intersection point
+ float sqrtD = sqrtf(discriminant);
+ float t0 = (-b - sqrtD) / (2.0f * a);
+ float t1 = (-b + sqrtD) / (2.0f * a);
+
+ // Select the closest valid intersection
+ if (t0 > EPSILON) {
+ t = t0;
+ return true;
+ } else if (t1 > EPSILON) {
+ t = t1;
+ return true;
+ }
+
+ return false; // Sphere is behind the ray origin
+}
+
+// bool FindClosestObject(const Ray& ray, const std::vector<GameObject*>& objects, GameObject* outObject, float& outDistance) {
+// float closestDist = std::numeric_limits<float>::max();
+// bool found = false;
+
+// for (const auto& obj : objects) {
+// for (const auto& tri : obj.Triangles) {
+// float t;
+// if (IntersectRayTriangle(ray, tri, *obj.Pos, t) && t < closestDist) {
+// closestDist = t;
+// outObject = obj;
+// found = true;
+// }
+// }
+// }
+
+// if (found) {
+// outDistance = closestDist;
+// return true;
+// }
+
+// return false;
+// }
+
+// Transform a matrix to a matrix identity
+void Editor_MatrixIdentity(Mat4 mtx) {
+ register s32 i;
+ register s32 k;
+
+ for (i = 0; i < 4; i++) {
+ for (k = 0; k < 4; k++) {
+ mtx[i][k] = (i == k) ? 1.0f : 0.0f;
+ }
+ }
+}
+
+void Editor_AddMatrix(Mat4 mtx, int32_t flags) {
+ EditorMatrix.emplace_back();
+ guMtxF2L(mtx, &EditorMatrix.back());
+ gSPMatrix(gDisplayListHead++, &EditorMatrix.back(), flags);
+}
+
+float CalculateAngle(const FVector& start, const FVector& end) {
+ float dot = start.Dot(end);
+
+ float magStart = start.Magnitude();
+ float magEnd = end.Magnitude();
+
+ float cosAngle = dot / (magStart * magEnd);
+ cosAngle = std::min(1.0f, std::max(-1.0f, cosAngle));
+
+ return acos(cosAngle);
+}
+
+void SetDirectionFromRotator(IRotator rot, s8 direction[3]) {
+ float yaw = (rot.yaw) * (M_PI / 32768.0f); // Convert from n64 binary angles 0-0xFFFF 0-360 degrees to radians
+ float pitch = rot.pitch * (M_PI / 32768.0f);
+
+ // Compute unit direction vector
+ float x = cosf(yaw) * cosf(pitch);
+ float y = -sinf(pitch);
+ float z = -sinf(yaw) * cosf(pitch);
+
+ // Scale into -127 to 127 range (not 128 to avoid overflow)
+ direction[0] = static_cast<s8>(x * 127.0f);
+ direction[1] = static_cast<s8>(y * 127.0f);
+ direction[2] = static_cast<s8>(z * 127.0f);
+
+ //printf("Light dir %d %d %d (from rot 0x%X 0x%X 0x%X)\n", direction[0], direction[1], direction[2], rotator[0], rotator[1], rotator[2]);
+}
+
+void SetRotatorFromDirection(FVector direction, IRotator* rot) {
+ // Compute pitch (inverse of -sinf(pitch))
+ float pitch = -asinf(direction.y);
+
+ // Compute yaw (inverse of cosf(yaw) * cosf(pitch))
+ float yaw = atan2f(-direction.z, direction.x);
+
+ // Convert back to N64 angles (0-0xFFFF range)
+ rot->pitch = (s16)(pitch * (32768.0f / M_PI));
+ rot->yaw = (s16)(yaw * (32768.0f / M_PI));
+ rot->roll = 0; // Assume no roll, since it's undefined from direction alone
+}
+
+FVector GetPositionAheadOfCamera(f32 dist) {
+ FVector pos = FVector(cameras[0].pos[0], cameras[0].pos[1], cameras[0].pos[2]);
+
+ f32 pitch = (cameras[0].rot[2] / 65535.0f) * 360.0f;
+ f32 yaw = (cameras[0].rot[1] / 65535.0f) * 360.0f;
+
+ // Convert degrees to radians
+ pitch = pitch * M_PI / 180.0f;
+ yaw = yaw * M_PI / 180.0f;
+
+ // Compute forward vector
+ FVector forward(
+ -sinf(yaw), // X
+ -sinf(pitch), // Y
+ cosf(yaw) // Z (vertical component)
+ );
+
+ // Move 1000 units forward from the camera position
+ return pos + (forward * dist);
+}
diff --git a/src/engine/editor/EditorMath.h b/src/engine/editor/EditorMath.h
new file mode 100644
index 000000000..abc694976
--- /dev/null
+++ b/src/engine/editor/EditorMath.h
@@ -0,0 +1,58 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include <libultra/types.h>
+#include "../CoreMath.h"
+#include <vector>
+#include "GameObject.h"
+
+extern "C" {
+#include "common_structs.h"
+}
+
+extern std::vector<Mtx> EditorMatrix;
+
+struct Ray {
+ FVector Origin;
+ FVector Direction;
+};
+
+struct Triangle {
+ FVector v0, v1, v2;
+};
+
+/**
+ * Projects 2D cursor into the game world
+ *
+ * @return FVector ray direction
+ *
+ * ray.x = camera->pos[0] + direction.x * length;
+ * ray.y = camera->pos[1] + direction.y * length;
+ * ray.z = camera->pos[2] + direction.z * length;
+ */
+bool IsInGameScreen();
+FVector ScreenRayTrace();
+bool QueryCollisionRayActor(Vec3f rayOrigin, Vec3f rayDir, Vec3f actorMin, Vec3f actorMax, float* t);
+FVector4 MultiplyMatrixVector(float matrix[4][4], float vector[4]);
+static bool InverseMatrix(const float m[16], float invOut[16]);
+void Copy(MtxF* src, MtxF* dest);
+void Clear(MtxF* mf);
+
+FVector TransformVecByMatrix(const FVector& vec, const float mtx[4][4]);
+FVector TransformVecDirection(const FVector& dir, const float mtx[4][4]);
+Ray RayToLocalSpace(MtxF mtx, const Ray& ray);
+bool IntersectRayTriangle(const Ray& ray, const Triangle& tri, float& t); // Uses local space not global space.
+bool IntersectRayTriangleAndTransform(const Ray& ray, FVector pos, const Triangle& tri, float& t); // Uses global space because no access to mtx
+bool IntersectRaySphere(const Ray& ray, const FVector& sphereCenter, float radius, float& t);
+/**
+ * optional used here so we can check for successful query and return the click position
+ */
+std::optional<FVector> QueryHandleIntersection(MtxF mtx, Ray ray, const Triangle& tri);
+
+void Editor_MatrixIdentity(Mat4 mtx);
+void Editor_AddMatrix(Mat4 mtx, int32_t flags);
+float CalculateAngle(const FVector& start, const FVector& end);
+void SetDirectionFromRotator(IRotator rot, s8 direction[3]);
+void SetRotatorFromDirection(FVector direction, IRotator* rot);
+FVector GetPositionAheadOfCamera(f32 dist);
diff --git a/src/engine/editor/GameObject.cpp b/src/engine/editor/GameObject.cpp
new file mode 100644
index 000000000..6f52c8ac8
--- /dev/null
+++ b/src/engine/editor/GameObject.cpp
@@ -0,0 +1,30 @@
+#include <libultraship/libultraship.h>
+#include "GameObject.h"
+
+namespace Editor {
+
+ GameObject::GameObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, std::vector<Triangle> triangles, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue) {
+ Name = name;
+ Pos = pos;
+ Rot = rot;
+ Scale = scale;
+ Model = model;
+ Triangles = triangles;
+ Collision = collision;
+ BoundingBoxSize = boundingBoxSize;
+ DespawnFlag = despawnFlag;
+ DespawnValue = despawnValue;
+ }
+
+ GameObject::GameObject(FVector* pos, Vec3s* rot) {
+ //Pos = pos;
+ //Rot = rot;
+ }
+
+ GameObject::GameObject() {};
+
+ void GameObject::Draw(){};
+
+ void GameObject::Tick(){};
+
+} // namespace Editor
diff --git a/src/engine/editor/GameObject.h b/src/engine/editor/GameObject.h
new file mode 100644
index 000000000..ca08d8ba9
--- /dev/null
+++ b/src/engine/editor/GameObject.h
@@ -0,0 +1,44 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include <libultra/types.h>
+#include "../CoreMath.h"
+#include "EditorMath.h"
+#include <vector>
+
+extern "C" {
+#include "common_structs.h"
+}
+
+struct Triangle;
+
+namespace Editor {
+ class GameObject {
+public:
+ enum class CollisionType {
+ VTX_INTERSECT,
+ BOUNDING_BOX,
+ BOUNDING_SPHERE
+ };
+
+ GameObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, std::vector<Triangle> triangles, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue);
+ GameObject(FVector* pos, Vec3s* rot);
+ GameObject();
+ virtual void Tick();
+ virtual void Draw();
+ virtual void Load() {};
+
+ const char* Name;
+ FVector* Pos;
+ IRotator* Rot;
+ FVector* Scale;
+ Gfx* Model;
+ std::vector<Triangle> Triangles;
+ CollisionType Collision;
+ float BoundingBoxSize;
+ int32_t* DespawnFlag;
+ int32_t DespawnValue;
+
+ };
+}
diff --git a/src/engine/editor/Gizmo.cpp b/src/engine/editor/Gizmo.cpp
new file mode 100644
index 000000000..4987242f0
--- /dev/null
+++ b/src/engine/editor/Gizmo.cpp
@@ -0,0 +1,348 @@
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "../CoreMath.h"
+#include <libultra/types.h>
+#include "../World.h"
+
+#include "EditorMath.h"
+#include "Gizmo.h"
+#include "Collision.h"
+#include "port/Engine.h"
+#include <controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h>
+#include <window/Window.h>
+
+
+#include "engine/actors/Ship.h"
+#include "port/Game.h"
+#include "Handles.h"
+
+extern "C" {
+#include "common_structs.h"
+#include "main.h"
+#include "actors.h"
+#include "camera.h"
+#include "src/racing/collision.h"
+#include "math_util.h"
+}
+
+namespace Editor {
+
+void Gizmo::Load() {
+ /* Translate handle collision */
+ RedCollision.Pos = &Pos;
+ RedCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_red";
+
+ GreenCollision.Pos = &Pos;
+ GreenCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_green";
+
+ BlueCollision.Pos = &Pos;
+ BlueCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_blue";
+
+ /* Rotate handle collision */
+ RedRotateCollision.Pos = &Pos;
+ RedRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_red";
+
+ GreenRotateCollision.Pos = &Pos;
+ GreenRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_green";
+
+ BlueRotateCollision.Pos = &Pos;
+ BlueRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_blue";
+
+ /* Scale handle collision */
+ RedScaleCollision.Pos = &Pos;
+ RedScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_red";
+
+ GreenScaleCollision.Pos = &Pos;
+ GreenScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_green";
+
+ BlueScaleCollision.Pos = &Pos;
+ BlueScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_blue";
+
+ GenerateCollisionMesh(&RedCollision, (Gfx*)LOAD_ASSET_RAW(RedCollision.Model), 1.0f);
+ GenerateCollisionMesh(&GreenCollision, (Gfx*)LOAD_ASSET_RAW(GreenCollision.Model), 1.0f);
+ GenerateCollisionMesh(&BlueCollision, (Gfx*)LOAD_ASSET_RAW(BlueCollision.Model), 1.0f);
+
+ GenerateCollisionMesh(&RedRotateCollision, (Gfx*)LOAD_ASSET_RAW(RedRotateCollision.Model), 1.0f);
+ GenerateCollisionMesh(&GreenRotateCollision, (Gfx*)LOAD_ASSET_RAW(GreenRotateCollision.Model), 1.0f);
+ GenerateCollisionMesh(&BlueRotateCollision, (Gfx*)LOAD_ASSET_RAW(BlueRotateCollision.Model), 1.0f);
+
+ GenerateCollisionMesh(&RedScaleCollision, (Gfx*)LOAD_ASSET_RAW(RedScaleCollision.Model), 1.0f);
+ GenerateCollisionMesh(&GreenScaleCollision, (Gfx*)LOAD_ASSET_RAW(GreenScaleCollision.Model), 1.0f);
+ GenerateCollisionMesh(&BlueScaleCollision, (Gfx*)LOAD_ASSET_RAW(BlueScaleCollision.Model), 1.0f);
+}
+
+void Gizmo::Tick() {
+ if (Enabled) {
+ TranslationMode mode = static_cast<TranslationMode>(CVarGetInteger("eGizmoMode", 0));
+ switch(mode) {
+ case TranslationMode::Move:
+ Gizmo::Translate();
+ break;
+ case TranslationMode::Rotate:
+ Gizmo::Rotate();
+ break;
+ case TranslationMode::Scale:
+ Gizmo::Scale();
+ break;
+ }
+ }
+}
+
+// Makes the gizmo visible
+void Gizmo::SetGizmo(GameObject* object, Ray ray) {
+ _selected = object;
+ _ray = ray.Direction;
+ Pos = FVector(
+ object->Pos->x,
+ object->Pos->y,
+ object->Pos->z
+ );
+}
+
+void Gizmo::SetGizmoNoCursor(GameObject* object) {
+ _selected = object;
+ Pos = FVector(
+ object->Pos->x,
+ object->Pos->y,
+ object->Pos->z
+ );
+}
+
+void Gizmo::Translate() {
+ static float length = 180.0f; // Default value
+
+ // Prevent nullptr exceptions
+ if (_selected == NULL || _selected->Pos == NULL) {
+ return;
+ }
+
+ if (Enabled) {
+ length = sqrt(
+ pow(_selected->Pos->x - cameras[0].pos[0], 2) +
+ pow(_selected->Pos->y - cameras[0].pos[1], 2) +
+ pow(_selected->Pos->z - cameras[0].pos[2], 2)
+ );
+
+ switch(SelectedHandle) {
+ case GizmoHandle::All_Axis:
+ _selected->Pos->x = (cameras[0].pos[0] + _ray.x * PickDistance) + _cursorOffset.x;
+ _selected->Pos->y = (cameras[0].pos[1] + _ray.y * PickDistance) + _cursorOffset.y;
+ _selected->Pos->z = (cameras[0].pos[2] + _ray.z * PickDistance) + _cursorOffset.z;
+ if (CVarGetInteger("gEditorSnapToGround", 0) == true) {
+ _selected->Pos->y = SnapToSurface(_selected->Pos);
+ }
+ break;
+ case GizmoHandle::X_Axis:
+ _selected->Pos->x = (cameras[0].pos[0] + _ray.x * length) + _cursorOffset.x;
+ if (CVarGetInteger("gEditorSnapToGround", 0) == true) {
+ _selected->Pos->y = SnapToSurface(_selected->Pos);
+ }
+ break;
+ case GizmoHandle::Y_Axis:
+ _selected->Pos->y = (cameras[0].pos[1] + _ray.y * length) + _cursorOffset.y;
+ break;
+ case GizmoHandle::Z_Axis:
+ _selected->Pos->z = (cameras[0].pos[2] + _ray.z * length) + _cursorOffset.z;
+ if (CVarGetInteger("gEditorSnapToGround", 0) == true) {
+ _selected->Pos->y = SnapToSurface(_selected->Pos);
+ }
+ break;
+ }
+
+ if (CVarGetInteger("gEditorBoundary", 0) == true) {
+ _selected->Pos->x = MAX(_selected->Pos->x, dimensions.MinX);
+ _selected->Pos->x = MIN(_selected->Pos->x, dimensions.MaxX);
+
+ _selected->Pos->y = MAX(_selected->Pos->y, dimensions.MinY);
+ _selected->Pos->y = MIN(_selected->Pos->y, dimensions.MaxY);
+
+ _selected->Pos->z = MAX(_selected->Pos->z, dimensions.MinZ);
+ _selected->Pos->z = MIN(_selected->Pos->z, dimensions.MaxZ);
+ }
+
+ Pos = FVector(
+ _selected->Pos->x,
+ _selected->Pos->y,
+ _selected->Pos->z
+ );
+ }
+}
+
+f32 Gizmo::SnapToSurface(FVector* pos) {
+ float y;
+ y = spawn_actor_on_surface(pos->x, 2000.0f, pos->z);
+
+ if (y == 3000.0f || y == -3000.0f) {
+ y = pos->y;
+ }
+
+ return y;
+}
+
+void Gizmo::Rotate() {
+ FVector cam = FVector(cameras[0].pos[0], cameras[0].pos[1], cameras[0].pos[2]);
+
+ if (_selected == nullptr || _selected->Rot == nullptr) {
+ return;
+ }
+
+ // Store initial scale at the beginning of the drag
+ if (ManipulationStart) {
+ ManipulationStart = false;
+ InitialRotation = *_selected->Rot; // Store initial rotation
+ }
+
+ // Initial click position
+ FVector clickPos = *_selected->Pos - _cursorOffset;
+
+ // Calculate difference
+ FVector diff = (cam + _ray * PickDistance) - clickPos;
+
+ // Set rotation sensitivity
+ diff = diff * 100.0f;
+ switch (SelectedHandle) {
+ case GizmoHandle::X_Axis:
+ _selected->Rot->pitch = (uint16_t)InitialRotation.pitch + diff.x;
+ break;
+ case GizmoHandle::Y_Axis:
+ _selected->Rot->yaw = (uint16_t)InitialRotation.yaw + diff.y;
+ break;
+ case GizmoHandle::Z_Axis:
+ _selected->Rot->roll = (uint16_t)InitialRotation.roll + diff.z;
+ break;
+ }
+}
+
+void Gizmo::Scale() {
+ FVector cam = FVector(cameras[0].pos[0], cameras[0].pos[1], cameras[0].pos[2]);
+ if (_selected == nullptr || _selected->Scale == nullptr) {
+ return;
+ }
+
+ // Store initial scale at the beginning of the drag
+ if (ManipulationStart) {
+ ManipulationStart = false;
+ InitialScale = *_selected->Scale;
+ }
+
+ // Initial click position
+ FVector clickPos = *_selected->Pos - _cursorOffset;
+
+ // Calculate difference
+ FVector diff = (cam + _ray * PickDistance) - clickPos;
+
+ // Lower scaling sensitivity
+ diff = diff * 0.01f;
+
+ switch (SelectedHandle) {
+ case GizmoHandle::X_Axis:
+ _selected->Scale->x = InitialScale.x + -diff.x;
+ break;
+ case GizmoHandle::Y_Axis:
+ _selected->Scale->y = InitialScale.y + diff.y;
+ break;
+ case GizmoHandle::Z_Axis:
+ _selected->Scale->z = InitialScale.z + -diff.z;
+ break;
+ case GizmoHandle::All_Axis:
+ float uniformScale = (diff.x - diff.y - diff.z) / 3.0f;
+ uniformScale *= 1.8; // Increased sensitivity
+ _selected->Scale->x = uniformScale;
+ _selected->Scale->y = uniformScale;
+ _selected->Scale->z = uniformScale;
+ break;
+ }
+}
+
+void Gizmo::Draw() {
+ if (Enabled) {
+ DrawHandles();
+ //DebugCollision(&RedCollision, Pos, {0, 0, 0}, {0.05f, 0.05f, 0.05f}, RedCollision.Triangles);
+ //DebugCollision(&BlueCollision, Pos, {90, 0, 0}, {0.05f, 0.05f, 0.05f}, BlueCollision.Triangles);
+ //DebugCollision(&GreenCollision, Pos, {0, 90, 0}, {0.05f, 0.05f, 0.05f}, GreenCollision.Triangles);
+ //DebugCollision(&RedRotateCollision, Pos, {0, 0, 0}, {0.15f, 0.15f, 0.15f}, RedRotateCollision.Triangles);
+ //DebugCollision((uintptr_t)_selected, Pos, BlueRotateCollision.Triangles);
+ //DebugCollision((uintptr_t)_selected, Pos, GreenRotateCollision.Triangles);
+ }
+}
+
+void Gizmo::DrawHandles() {
+ Mat4 mainMtx;
+ Editor_MatrixIdentity((float(*)[4])&Mtx_RedX);
+ Editor_MatrixIdentity((float(*)[4])&Mtx_GreenY);
+ Editor_MatrixIdentity((float(*)[4])&Mtx_BlueZ);
+
+ const char* blueHandle;
+ const char* greenHandle;
+ const char* redHandle;
+ const char* center = nullptr;
+ IRotator blueRot;
+ IRotator greenRot;
+ IRotator redRot;
+ FVector scale = {0.05f, 0.05f, 0.05f};
+
+ switch(static_cast<TranslationMode>(CVarGetInteger("eGizmoMode", 0))) {
+ case TranslationMode::Move:
+ center = "__OTR__editor/gizmo/center_handle";
+ blueHandle = "__OTR__editor/gizmo/translate_handle_blue";
+ greenHandle = "__OTR__editor/gizmo/translate_handle_green";
+ redHandle = "__OTR__editor/gizmo/translate_handle_red";
+ _gizmoOffset = 8.0f;
+ greenRot = {0, 90, 0};
+ blueRot = {90, 0, 0};
+ scale = {0.3, 0.3, 0.3};
+ break;
+ case TranslationMode::Rotate:
+ center = nullptr; // No All_Axis drag button for Rotation
+ blueHandle = "__OTR__editor/gizmo/rot_handle_blue";
+ greenHandle = "__OTR__editor/gizmo/rot_handle_green";
+ redHandle = "__OTR__editor/gizmo/rot_handle_red";
+ _gizmoOffset = 0.0f;
+ scale = {0.15f, 0.15f, 0.15f};
+ break;
+ case TranslationMode::Scale:
+ center = "__OTR__editor/gizmo/center_handle";
+ blueHandle = "__OTR__editor/gizmo/scale_handle_blue";
+ greenHandle = "__OTR__editor/gizmo/scale_handle_green";
+ redHandle = "__OTR__editor/gizmo/scale_handle_red";
+ _gizmoOffset = 8.0f;
+ greenRot = {0, 90, 0};
+ blueRot = {90, 0, 0};
+ scale = {0.05f, 0.05f, 0.05f};
+ break;
+ }
+
+ ApplyMatrixTransformations(mainMtx, Pos, Rot, {1, 1, 1});
+ Editor_AddMatrix(mainMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ if (center) {
+ Mat4 CenterMtx;
+ Editor_MatrixIdentity(CenterMtx);
+
+ // Calculate camera-to-object distance
+ FVector cameraDir = FVector(Pos.x - cameras[0].pos[0], Pos.y - cameras[0].pos[1], Pos.z - cameras[0].pos[2]);
+ cameraDir = cameraDir.Normalize();
+
+ IRotator centerRot;
+ SetRotatorFromDirection(cameraDir, &centerRot);
+ centerRot.pitch += 0x4000; // Align mesh to face camera since it was not exported facing the correct direction
+ centerRot.yaw += 0x4000;
+
+ ApplyMatrixTransformations(CenterMtx, Pos, centerRot, FVector(0.06f, 0.06f, 0.06f));
+ Editor_AddMatrix(CenterMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)center);
+ }
+
+ ApplyMatrixTransformations((float(*)[4])&Mtx_RedX, FVector(Pos.x, Pos.y, Pos.z - _gizmoOffset), Rot, scale);
+ Editor_AddMatrix((float(*)[4])&Mtx_RedX, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)redHandle);
+
+ ApplyMatrixTransformations((float(*)[4])&Mtx_GreenY, FVector(Pos.x - _gizmoOffset, Pos.y, Pos.z), greenRot, scale);
+ Editor_AddMatrix((float(*)[4])&Mtx_GreenY, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)greenHandle);
+
+ ApplyMatrixTransformations((float(*)[4])&Mtx_BlueZ, FVector(Pos.x, Pos.y + _gizmoOffset, Pos.z), blueRot, scale);
+ Editor_AddMatrix((float(*)[4])&Mtx_BlueZ, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)blueHandle);
+}
+}
diff --git a/src/engine/editor/Gizmo.h b/src/engine/editor/Gizmo.h
new file mode 100644
index 000000000..47ef99549
--- /dev/null
+++ b/src/engine/editor/Gizmo.h
@@ -0,0 +1,85 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "Collision.h"
+#include "GameObject.h"
+
+namespace Editor {
+
+class Gizmo {
+public:
+
+ enum class GizmoHandle {
+ None,
+ All_Axis,
+ X_Axis,
+ Y_Axis,
+ Z_Axis
+ };
+
+ enum class TranslationMode {
+ Move,
+ Rotate,
+ Scale
+ };
+
+ void Tick();
+ void Draw();
+ void Load();
+
+ void SetGizmo(GameObject* object, Ray ray);
+ void SetGizmoNoCursor(GameObject* object); // Used for scene explorer selection
+ void Translate();
+ void Rotate();
+ void Scale();
+ void DrawHandles();
+ f32 SnapToSurface(FVector* pos);
+
+ struct TrackDimensions {
+ s16 MinX = -10000;
+ s16 MaxX = 10000;
+ s16 MinY = -3000;
+ s16 MaxY = 3000;
+ s16 MinZ = -10000;
+ s16 MaxZ = 10000;
+ };
+ TrackDimensions dimensions;
+
+ bool Enabled;
+ bool ManipulationStart = true;
+ FVector InitialScale = {1, 1, 1};
+ IRotator InitialRotation = {0, 0, 0};
+ GizmoHandle SelectedHandle;
+
+ GameObject RedCollision;
+ GameObject GreenCollision;
+ GameObject BlueCollision;
+
+ GameObject RedRotateCollision;
+ GameObject GreenRotateCollision;
+ GameObject BlueRotateCollision;
+
+ GameObject RedScaleCollision;
+ GameObject GreenScaleCollision;
+ GameObject BlueScaleCollision;
+
+ MtxF Mtx_RedX;
+ MtxF Mtx_GreenY;
+ MtxF Mtx_BlueZ;
+
+ FVector Pos; // Global scene view
+ IRotator Rot = {0, 0, 0};
+ float AllAxisRadius = 3.0f; // Free move selection radius
+ float PickDistance;
+ FVector _cursorOffset;
+ float _gizmoOffset = 8.0f;
+
+ float HandleSize = 2.0f;
+
+ FVector _ray;
+ GameObject* _selected = nullptr;
+ private:
+ bool _draw = false;
+};
+}
diff --git a/src/engine/editor/Handles.cpp b/src/engine/editor/Handles.cpp
new file mode 100644
index 000000000..9074a2b45
--- /dev/null
+++ b/src/engine/editor/Handles.cpp
@@ -0,0 +1,23 @@
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+
+#include "Handles.h"
+
+namespace Editor {
+ Handles::Handles() {
+ Pos = &pos;
+ Rot = &rot;
+ }
+
+ void Handles::Load() {
+
+ }
+
+ void Handles::Tick() {
+
+ }
+
+ void Handles::Draw() {
+
+ }
+} \ No newline at end of file
diff --git a/src/engine/editor/Handles.h b/src/engine/editor/Handles.h
new file mode 100644
index 000000000..1faa4b59e
--- /dev/null
+++ b/src/engine/editor/Handles.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "GameObject.h"
+
+namespace Editor {
+ class Handles : public GameObject {
+
+ Handles();
+
+ virtual void Tick() override;
+ virtual void Draw() override;
+ virtual void Load() override;
+
+ FVector pos;
+ IRotator rot;
+ };
+}
diff --git a/src/engine/editor/Light.cpp b/src/engine/editor/Light.cpp
new file mode 100644
index 000000000..594383bd3
--- /dev/null
+++ b/src/engine/editor/Light.cpp
@@ -0,0 +1,84 @@
+#include <iostream>
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "../CoreMath.h"
+#include <libultra/types.h>
+#include "../World.h"
+
+#include "Light.h"
+#include "port/Engine.h"
+#include <controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h>
+#include <window/Window.h>
+
+#include "engine/actors/Ship.h"
+#include "port/Game.h"
+#include "Gizmo.h"
+
+#include "EditorMath.h"
+
+extern "C" {
+#include "common_structs.h"
+#include "main.h"
+#include "defines.h"
+#include "actors.h"
+#include "camera.h"
+#include "math_util.h"
+#include "math_util_2.h"
+}
+
+namespace Editor {
+
+size_t LightObject::NumLights = 0;
+
+ LightObject::LightObject(const char* name, FVector* pos, s8* direction) : GameObject(nullptr, nullptr) {
+ Name = name;
+ Pos = &LightPos;
+ Rot = &LightRot;
+ Scale = &LightScale;
+
+ DespawnFlag = &_despawnFlag;
+ DespawnValue = -1;
+
+ Direction = direction;
+
+ Collision = CollisionType::BOUNDING_BOX;
+ BoundingBoxSize = 4.0f;
+
+ NumLights += 1;
+ }
+
+ void LightObject::Load() {
+ }
+
+ void LightObject::Tick() {
+ SetDirectionFromRotator(*Rot, Direction);
+ }
+ void LightObject::Draw() {
+ Mat4 mtx_sun;
+ Editor_MatrixIdentity(mtx_sun);
+ gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
+ gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
+
+
+ // Calculate camera-to-object distance
+ FVector cameraDir = FVector(LightPos.x - cameras[0].pos[0], LightPos.y - cameras[0].pos[1], LightPos.z - cameras[0].pos[2]);
+ cameraDir = cameraDir.Normalize();
+
+ IRotator centerRot;
+ SetRotatorFromDirection(cameraDir, &centerRot);
+
+ // Account for object not facing the correct direction when exported
+ centerRot.yaw += 0x4000;
+ ApplyMatrixTransformations(mtx_sun, LightPos, centerRot, LightScale);
+ Editor_AddMatrix(mtx_sun, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, sun_LightModel_mesh);
+
+ // Draw Arrow
+ Mat4 mtx_arrow;
+ IRotator rot = LightRot;
+ rot.yaw += 0x4000;
+ ApplyMatrixTransformations(mtx_arrow, LightPos, rot, LightScale);
+ Editor_AddMatrix(mtx_arrow, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)"__OTR__editor/light/sun_arrow");
+ }
+}
diff --git a/src/engine/editor/Light.h b/src/engine/editor/Light.h
new file mode 100644
index 000000000..972942663
--- /dev/null
+++ b/src/engine/editor/Light.h
@@ -0,0 +1,2143 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "Collision.h"
+#include "Gizmo.h"
+#include "GameObject.h"
+
+namespace Editor {
+
+class LightObject : public GameObject {
+public:
+ LightObject(const char* name, FVector* pos, s8* direction);
+
+ virtual void Draw() override;
+ virtual void Tick() override;
+ virtual void Load() override;
+
+ static size_t NumLights;
+ FVector LightPos = FVector(0, 100, 0);
+ IRotator LightRot = IRotator(0, 0, 0);
+ FVector LightScale = FVector(0.1, 0.1, 0.1);
+ s8* Direction;
+ s32 _despawnFlag = 0;
+
+u8 sun_sun_rgba32[16384] = {
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 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, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xed, 0x8e, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xe4, 0x85, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfb, 0x9d, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xdb, 0x7d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xac, 0x01, 0xff,
+ 0xe5, 0x87, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xae, 0x01, 0xff,
+ 0xd1, 0x72, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xba, 0x00, 0xff,
+ 0xff, 0xaa, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xc4, 0x01, 0xff, 0xfe, 0xba, 0x00, 0xff,
+ 0xc6, 0x67, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 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,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xc9, 0x00, 0xff,
+ 0xff, 0xc8, 0x01, 0xff, 0xda, 0x7c, 0x01, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xd9, 0x00, 0xff,
+ 0xff, 0xd1, 0x01, 0xff, 0xff, 0xc0, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xd8, 0x00, 0xff,
+ 0xff, 0xd8, 0x01, 0xff, 0xfe, 0xa2, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xe5, 0x00, 0xff,
+ 0xff, 0xde, 0x00, 0xff, 0xff, 0xb8, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xe8, 0x01, 0xff,
+ 0xff, 0xe9, 0x01, 0xff, 0xff, 0xcc, 0x01, 0xff,
+ 0xcd, 0x6f, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xf9, 0x00, 0xff, 0xff, 0xf3, 0x00, 0xff,
+ 0xff, 0xec, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf5, 0x00, 0xff,
+ 0xff, 0xf8, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff,
+ 0xf8, 0x99, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xfa, 0x01, 0xff, 0xff, 0xa5, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xca, 0x00, 0xff, 0xc1, 0x63, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xfd, 0x01, 0xff, 0xf6, 0x98, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xef, 0x91, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xf6, 0x01, 0xff, 0xef, 0x91, 0x00, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xf9, 0x01, 0xff, 0xeb, 0x8c, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xfe, 0xa0, 0x01, 0xff,
+ 0xef, 0x91, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfd, 0x9e, 0x00, 0xff,
+ 0xff, 0xa4, 0x00, 0xff, 0xcf, 0x70, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xc6, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xf3, 0x01, 0xff, 0xdc, 0x7e, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xc2, 0x01, 0xff,
+ 0xff, 0xb3, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xb3, 0x01, 0xff, 0xff, 0xb9, 0x01, 0xff,
+ 0xe2, 0x84, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xf7, 0x01, 0xff,
+ 0xe1, 0x82, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xec, 0x00, 0xff, 0xcd, 0x6e, 0x00, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xe4, 0x00, 0xff,
+ 0xff, 0xd7, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff,
+ 0xff, 0xb9, 0x00, 0xff, 0xcf, 0x70, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xc0, 0x00, 0xff, 0xff, 0xc7, 0x00, 0xff,
+ 0xff, 0xcf, 0x01, 0xff, 0xf8, 0x99, 0x01, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xbe, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xe5, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xf8, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff,
+ 0xff, 0xde, 0x00, 0xff, 0xff, 0xcf, 0x00, 0xff,
+ 0xe1, 0x82, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xd5, 0x00, 0xff,
+ 0xfe, 0xdc, 0x00, 0xff, 0xff, 0xe7, 0x01, 0xff,
+ 0xff, 0xb2, 0x00, 0xff, 0xd0, 0x72, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xf7, 0x00, 0xff, 0xea, 0x8b, 0x00, 0xff,
+ 0xfc, 0x9e, 0x00, 0xff, 0xff, 0xb0, 0x01, 0xff,
+ 0xff, 0xb1, 0x00, 0xff, 0xff, 0xa2, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xdc, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xf4, 0x00, 0xff,
+ 0xff, 0xe7, 0x01, 0xff, 0xf6, 0x98, 0x00, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xe1, 0x00, 0xff,
+ 0xff, 0xea, 0x00, 0xff, 0xff, 0xf3, 0x01, 0xff,
+ 0xfe, 0xfc, 0x00, 0xff, 0xfe, 0xcb, 0x00, 0xff,
+ 0xe2, 0x84, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xa2, 0x00, 0xff, 0xfe, 0xb5, 0x00, 0xff,
+ 0xff, 0xc9, 0x01, 0xff, 0xff, 0xda, 0x01, 0xff,
+ 0xff, 0xe1, 0x01, 0xff, 0xff, 0xe6, 0x01, 0xff,
+ 0xff, 0xe7, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff,
+ 0xff, 0xda, 0x01, 0xff, 0xfe, 0xcb, 0x00, 0xff,
+ 0xff, 0xbd, 0x00, 0xff, 0xff, 0xaa, 0x01, 0xff,
+ 0xf1, 0x93, 0x00, 0xff, 0xda, 0x7c, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xfd, 0x00, 0xff,
+ 0xff, 0xb0, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xff, 0xf5, 0x01, 0xff, 0xff, 0xfe, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xe3, 0x00, 0xff, 0xff, 0xa0, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff,
+ 0xff, 0xd4, 0x00, 0xff, 0xff, 0xdc, 0x01, 0xff,
+ 0xff, 0xe2, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff,
+ 0xff, 0xee, 0x00, 0xff, 0xfe, 0xf3, 0x00, 0xff,
+ 0xfe, 0xf7, 0x00, 0xff, 0xff, 0xfd, 0x00, 0xff,
+ 0xfe, 0xfc, 0x00, 0xff, 0xfe, 0xf9, 0x00, 0xff,
+ 0xff, 0xf5, 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff,
+ 0xff, 0xe9, 0x00, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0xff, 0xdc, 0x00, 0xff, 0xff, 0xd4, 0x00, 0xff,
+ 0xff, 0xb9, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xcb, 0x01, 0xff,
+ 0xce, 0x6f, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 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,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xca, 0x00, 0xff, 0xd5, 0x76, 0x01, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xfa, 0x9b, 0x01, 0xff,
+ 0xfe, 0xd2, 0x00, 0xff, 0xfe, 0xe2, 0x00, 0xff,
+ 0xff, 0xf0, 0x00, 0xff, 0xfe, 0xf5, 0x00, 0xff,
+ 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xfe, 0x01, 0xff,
+ 0xff, 0xf7, 0x00, 0xff, 0xfe, 0xf0, 0x00, 0xff,
+ 0xff, 0xe4, 0x01, 0xff, 0xff, 0xd4, 0x01, 0xff,
+ 0xff, 0xa7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xe2, 0x01, 0xff, 0xe0, 0x82, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xd4, 0x75, 0x00, 0xff,
+ 0xff, 0xbb, 0x00, 0xff, 0xfe, 0xd7, 0x00, 0xff,
+ 0xff, 0xe8, 0x01, 0xff, 0xff, 0xf7, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xf8, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff,
+ 0xff, 0xda, 0x00, 0xff, 0xff, 0xc1, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfb, 0x9d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xf6, 0x98, 0x01, 0xff, 0xff, 0xcb, 0x01, 0xff,
+ 0xff, 0xdc, 0x01, 0xff, 0xff, 0xed, 0x01, 0xff,
+ 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xf1, 0x01, 0xff, 0xff, 0xdf, 0x00, 0xff,
+ 0xff, 0xcc, 0x00, 0xff, 0xf6, 0x97, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xc6, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xca, 0x00, 0xff, 0xfe, 0xe3, 0x00, 0xff,
+ 0xfe, 0xf3, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xf5, 0x00, 0xff,
+ 0xff, 0xe3, 0x00, 0xff, 0xff, 0xca, 0x01, 0xff,
+ 0xd1, 0x73, 0x01, 0xff, 0xcf, 0x71, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xbc, 0x01, 0xff,
+ 0xff, 0xdb, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xf3, 0x01, 0xff, 0xff, 0xd9, 0x01, 0xff,
+ 0xff, 0xb6, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xfd, 0x9f, 0x00, 0xff, 0xff, 0xd3, 0x00, 0xff,
+ 0xff, 0xec, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff,
+ 0xff, 0xd1, 0x01, 0xff, 0xf1, 0x92, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xc9, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0xfe, 0xf8, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf5, 0x01, 0xff,
+ 0xff, 0xe0, 0x01, 0xff, 0xff, 0xc8, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xcf, 0x71, 0x00, 0xff, 0xc7, 0x68, 0x01, 0xff,
+ 0xbd, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff,
+ 0xff, 0xd8, 0x01, 0xff, 0xff, 0xef, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xed, 0x00, 0xff, 0xff, 0xd7, 0x01, 0xff,
+ 0xff, 0xa9, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xf6, 0x00, 0xff,
+ 0xff, 0xe7, 0x01, 0xff, 0xff, 0xd7, 0x01, 0xff,
+ 0xff, 0xc7, 0x01, 0xff, 0xff, 0xb8, 0x01, 0xff,
+ 0xff, 0xa7, 0x00, 0xff, 0xf6, 0x98, 0x00, 0xff,
+ 0xe7, 0x89, 0x01, 0xff, 0xd9, 0x7b, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0x99, 0x00, 0xff, 0xff, 0xa6, 0x00, 0xff,
+ 0xff, 0xac, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff,
+ 0xfa, 0x9b, 0x01, 0xff, 0xf0, 0x91, 0x00, 0xff,
+ 0xe4, 0x85, 0x00, 0xff, 0xd9, 0x7a, 0x01, 0xff,
+ 0xcb, 0x6c, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xca, 0x6b, 0x01, 0xff, 0xff, 0xc5, 0x00, 0xff,
+ 0xff, 0xe4, 0x01, 0xff, 0xfe, 0xfa, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xfb, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0xff, 0xc5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf8, 0x00, 0xff,
+ 0xff, 0xe7, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff,
+ 0xff, 0xc5, 0x00, 0xff, 0xff, 0xb4, 0x00, 0xff,
+ 0xf4, 0x95, 0x00, 0xff, 0xd0, 0x71, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xaf, 0x00, 0xff,
+ 0xff, 0xbc, 0x01, 0xff, 0xff, 0xca, 0x01, 0xff,
+ 0xff, 0xd9, 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff,
+ 0xff, 0xec, 0x00, 0xff, 0xff, 0xe8, 0x01, 0xff,
+ 0xff, 0xe2, 0x01, 0xff, 0xff, 0xdc, 0x00, 0xff,
+ 0xff, 0xd5, 0x00, 0xff, 0xff, 0xcd, 0x01, 0xff,
+ 0xdf, 0x80, 0x00, 0xff, 0xfe, 0xcb, 0x00, 0xff,
+ 0xff, 0xe9, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xe8, 0x01, 0xff,
+ 0xff, 0xcc, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xfa, 0x00, 0xff,
+ 0xff, 0xe0, 0x00, 0xff, 0xff, 0xb8, 0x00, 0xff,
+ 0xec, 0x8e, 0x01, 0xff, 0xc4, 0x65, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xc4, 0x00, 0xff, 0xff, 0xd1, 0x00, 0xff,
+ 0xff, 0xdf, 0x01, 0xff, 0xfe, 0xed, 0x00, 0xff,
+ 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xf4, 0x96, 0x01, 0xff, 0xff, 0xd1, 0x00, 0xff,
+ 0xff, 0xee, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xec, 0x01, 0xff,
+ 0xff, 0xd0, 0x00, 0xff, 0xec, 0x8d, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xe4, 0x01, 0xff, 0xfe, 0xb5, 0x00, 0xff,
+ 0xe2, 0x83, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xfe, 0xe4, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xa8, 0x00, 0xff, 0xff, 0xd6, 0x00, 0xff,
+ 0xff, 0xf3, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xef, 0x00, 0xff,
+ 0xff, 0xd5, 0x01, 0xff, 0xff, 0xa0, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xe3, 0x00, 0xff, 0xff, 0xaf, 0x00, 0xff,
+ 0xd8, 0x79, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xff, 0xf7, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xdb, 0x01, 0xff,
+ 0xff, 0xf6, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff,
+ 0xff, 0xd9, 0x00, 0xff, 0xfe, 0xb1, 0x00, 0xff,
+ 0xff, 0xe2, 0x00, 0xff, 0xff, 0xa6, 0x00, 0xff,
+ 0xc9, 0x6a, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xc3, 0x00, 0xff, 0xff, 0xe0, 0x01, 0xff,
+ 0xff, 0xf9, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf7, 0x00, 0xff,
+ 0xff, 0xde, 0x01, 0xff, 0xfe, 0xc2, 0x00, 0xff,
+ 0xd0, 0x72, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xe5, 0x87, 0x01, 0xff,
+ 0xff, 0xc9, 0x01, 0xff, 0xfe, 0xe2, 0x00, 0xff,
+ 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xfa, 0x00, 0xff,
+ 0xff, 0xe2, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff,
+ 0xe1, 0x83, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xfe, 0xff, 0x00, 0xff, 0xf4, 0x95, 0x01, 0xff,
+ 0xff, 0xcd, 0x01, 0xff, 0xff, 0xe5, 0x00, 0xff,
+ 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xfd, 0x01, 0xff,
+ 0xff, 0xe4, 0x00, 0xff, 0xff, 0xcc, 0x00, 0xff,
+ 0xf2, 0x93, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbb, 0x5d, 0x00, 0xff, 0xf1, 0x92, 0x01, 0xff,
+ 0xff, 0xca, 0x00, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xfb, 0x00, 0xff,
+ 0xff, 0xe3, 0x00, 0xff, 0xff, 0xcb, 0x00, 0xff,
+ 0xf2, 0x93, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xdd, 0x7f, 0x00, 0xff,
+ 0xff, 0xc4, 0x00, 0xff, 0xff, 0xdd, 0x00, 0xff,
+ 0xff, 0xf6, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xf7, 0x00, 0xff,
+ 0xff, 0xde, 0x01, 0xff, 0xfe, 0xc4, 0x00, 0xff,
+ 0xe1, 0x82, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xca, 0x6b, 0x01, 0xff,
+ 0xff, 0xbb, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff,
+ 0xff, 0xf1, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf2, 0x01, 0xff,
+ 0xff, 0xd9, 0x01, 0xff, 0xff, 0xbc, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 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,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0xbf, 0x60, 0x00, 0xff,
+ 0xfc, 0x9e, 0x00, 0xff, 0xff, 0xdb, 0x00, 0xff,
+ 0xfe, 0xa8, 0x00, 0xff, 0xfe, 0xcf, 0x00, 0xff,
+ 0xff, 0xea, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xed, 0x01, 0xff,
+ 0xff, 0xd1, 0x00, 0xff, 0xff, 0xac, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff,
+ 0xff, 0xf0, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0xcd, 0x6f, 0x00, 0xff,
+ 0xff, 0xa5, 0x01, 0xff, 0xff, 0xd9, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xf2, 0x94, 0x00, 0xff, 0xff, 0xc9, 0x01, 0xff,
+ 0xff, 0xe3, 0x00, 0xff, 0xff, 0xfb, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xfc, 0x01, 0xff, 0xff, 0xe6, 0x01, 0xff,
+ 0xff, 0xc9, 0x00, 0xff, 0xf9, 0x9b, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x01, 0xff,
+ 0xff, 0xea, 0x01, 0xff, 0xff, 0xdd, 0x01, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xd6, 0x77, 0x01, 0xff,
+ 0xff, 0xa9, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xdc, 0x7e, 0x00, 0xff, 0xfe, 0xc1, 0x00, 0xff,
+ 0xff, 0xdd, 0x01, 0xff, 0xfe, 0xf4, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xf6, 0x01, 0xff, 0xff, 0xdf, 0x01, 0xff,
+ 0xff, 0xc2, 0x00, 0xff, 0xe4, 0x86, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xf3, 0x00, 0xff,
+ 0xff, 0xe3, 0x00, 0xff, 0xff, 0xd5, 0x01, 0xff,
+ 0xff, 0xc7, 0x01, 0xff, 0xff, 0xb9, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5e, 0x01, 0xff, 0xde, 0x80, 0x00, 0xff,
+ 0xff, 0xaa, 0x01, 0xff, 0xff, 0xd3, 0x00, 0xff,
+ 0xff, 0xed, 0x01, 0xff, 0xff, 0xfd, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xba, 0x00, 0xff,
+ 0xfe, 0xd5, 0x00, 0xff, 0xff, 0xee, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xee, 0x00, 0xff, 0xff, 0xd7, 0x01, 0xff,
+ 0xff, 0xba, 0x01, 0xff, 0xcd, 0x6e, 0x01, 0xff,
+ 0xff, 0xba, 0x01, 0xff, 0xff, 0xc4, 0x01, 0xff,
+ 0xff, 0xcc, 0x00, 0xff, 0xff, 0xd3, 0x01, 0xff,
+ 0xff, 0xd9, 0x00, 0xff, 0xfe, 0xde, 0x00, 0xff,
+ 0xff, 0xdc, 0x00, 0xff, 0xfe, 0xcc, 0x00, 0xff,
+ 0xff, 0xbe, 0x01, 0xff, 0xff, 0xaf, 0x00, 0xff,
+ 0xff, 0xa3, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xc2, 0x64, 0x01, 0xff, 0xe6, 0x87, 0x00, 0xff,
+ 0xff, 0xa7, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff,
+ 0xff, 0xc8, 0x00, 0xff, 0xff, 0xd8, 0x00, 0xff,
+ 0xff, 0xea, 0x01, 0xff, 0xff, 0xf9, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xb1, 0x01, 0xff,
+ 0xff, 0xce, 0x00, 0xff, 0xff, 0xe6, 0x00, 0xff,
+ 0xff, 0xf9, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x00, 0xff,
+ 0xff, 0xe6, 0x01, 0xff, 0xff, 0xcf, 0x01, 0xff,
+ 0xff, 0xb1, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xc6, 0x67, 0x01, 0xff, 0xd2, 0x73, 0x00, 0xff,
+ 0xdf, 0x80, 0x00, 0xff, 0xe9, 0x8b, 0x00, 0xff,
+ 0xf3, 0x95, 0x00, 0xff, 0xfb, 0x9d, 0x00, 0xff,
+ 0xf6, 0x98, 0x00, 0xff, 0xea, 0x8b, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xc9, 0x6a, 0x00, 0xff, 0xd8, 0x79, 0x01, 0xff,
+ 0xe6, 0x88, 0x01, 0xff, 0xf5, 0x97, 0x00, 0xff,
+ 0xfe, 0xa6, 0x00, 0xff, 0xff, 0xb7, 0x01, 0xff,
+ 0xff, 0xc7, 0x01, 0xff, 0xff, 0xd6, 0x00, 0xff,
+ 0xff, 0xe6, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xf0, 0x91, 0x00, 0xff,
+ 0xff, 0xbf, 0x01, 0xff, 0xfe, 0xd4, 0x00, 0xff,
+ 0xff, 0xe9, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xf9, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff,
+ 0xff, 0xd6, 0x00, 0xff, 0xff, 0xc1, 0x01, 0xff,
+ 0xf1, 0x92, 0x00, 0xff, 0xbc, 0x5e, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xc0, 0x62, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xae, 0x01, 0xff, 0xfe, 0xc3, 0x00, 0xff,
+ 0xfe, 0xd9, 0x00, 0xff, 0xfe, 0xef, 0x00, 0xff,
+ 0xff, 0xfd, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xf8, 0x00, 0xff,
+ 0xfe, 0xee, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff,
+ 0xfe, 0xc7, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xd1, 0x73, 0x00, 0xff, 0xff, 0xb2, 0x00, 0xff,
+ 0xff, 0xc8, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff,
+ 0xfe, 0xf1, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xf9, 0x01, 0xff, 0xff, 0xee, 0x00, 0xff,
+ 0xff, 0xe2, 0x00, 0xff, 0xff, 0xce, 0x00, 0xff,
+ 0xff, 0xb5, 0x01, 0xff, 0xdf, 0x80, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xf3, 0x94, 0x01, 0xff,
+ 0xff, 0xb6, 0x00, 0xff, 0xff, 0xd1, 0x01, 0xff,
+ 0xfe, 0xe4, 0x00, 0xff, 0xff, 0xf0, 0x01, 0xff,
+ 0xff, 0xfa, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x00, 0xff,
+ 0xff, 0xed, 0x00, 0xff, 0xfe, 0xe3, 0x00, 0xff,
+ 0xff, 0xd2, 0x01, 0xff, 0xff, 0xba, 0x01, 0xff,
+ 0xf9, 0x9a, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0xff, 0xa4, 0x00, 0xff, 0xff, 0xbf, 0x01, 0xff,
+ 0xfe, 0xd0, 0x00, 0xff, 0xff, 0xdf, 0x01, 0xff,
+ 0xff, 0xec, 0x01, 0xff, 0xff, 0xf5, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xfe, 0x00, 0xff,
+ 0xfe, 0xf3, 0x00, 0xff, 0xff, 0xeb, 0x01, 0xff,
+ 0xff, 0xde, 0x00, 0xff, 0xff, 0xcf, 0x00, 0xff,
+ 0xff, 0xbf, 0x01, 0xff, 0xff, 0xa6, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xff, 0xa3, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xcd, 0x6f, 0x01, 0xff, 0xff, 0xa4, 0x00, 0xff,
+ 0xff, 0xb7, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff,
+ 0xff, 0xd7, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0xff, 0xf1, 0x01, 0xff, 0xff, 0xf7, 0x00, 0xff,
+ 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff,
+ 0xff, 0xf7, 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff,
+ 0xff, 0xe2, 0x00, 0xff, 0xff, 0xd3, 0x01, 0xff,
+ 0xff, 0xc4, 0x00, 0xff, 0xff, 0xb3, 0x00, 0xff,
+ 0xfe, 0xa2, 0x00, 0xff, 0xcd, 0x6e, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5c, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xd7, 0x78, 0x01, 0xff,
+ 0xfe, 0xe3, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xf3, 0x95, 0x01, 0xff, 0xff, 0xae, 0x00, 0xff,
+ 0xfe, 0xbf, 0x00, 0xff, 0xff, 0xcd, 0x01, 0xff,
+ 0xff, 0xdb, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0xff, 0xe9, 0x01, 0xff, 0xff, 0xee, 0x01, 0xff,
+ 0xff, 0xf1, 0x00, 0xff, 0xff, 0xf5, 0x00, 0xff,
+ 0xfe, 0xf8, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff,
+ 0xff, 0xfc, 0x01, 0xff, 0xff, 0xf9, 0x01, 0xff,
+ 0xff, 0xf5, 0x01, 0xff, 0xff, 0xf1, 0x00, 0xff,
+ 0xff, 0xec, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff,
+ 0xff, 0xe2, 0x00, 0xff, 0xff, 0xda, 0x00, 0xff,
+ 0xff, 0xcb, 0x01, 0xff, 0xff, 0xbc, 0x00, 0xff,
+ 0xff, 0xac, 0x01, 0xff, 0xed, 0x8e, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xf6, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xbe, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xd6, 0x77, 0x01, 0xff,
+ 0xff, 0xa4, 0x00, 0xff, 0xfe, 0xb4, 0x00, 0xff,
+ 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff,
+ 0xff, 0xcf, 0x01, 0xff, 0xff, 0xd5, 0x01, 0xff,
+ 0xff, 0xda, 0x01, 0xff, 0xff, 0xdf, 0x01, 0xff,
+ 0xff, 0xe3, 0x01, 0xff, 0xff, 0xe6, 0x00, 0xff,
+ 0xff, 0xe6, 0x01, 0xff, 0xff, 0xe1, 0x00, 0xff,
+ 0xff, 0xdd, 0x01, 0xff, 0xff, 0xd7, 0x01, 0xff,
+ 0xff, 0xd2, 0x01, 0xff, 0xff, 0xcd, 0x01, 0xff,
+ 0xff, 0xc7, 0x01, 0xff, 0xfe, 0xc1, 0x00, 0xff,
+ 0xfe, 0xb3, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff,
+ 0xc9, 0x6b, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xfe, 0x9f, 0x00, 0xff,
+ 0xff, 0xe2, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x01, 0xff,
+ 0xff, 0xec, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0xff, 0xa5, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xe3, 0x85, 0x00, 0xff,
+ 0xfe, 0xa1, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff,
+ 0xff, 0xb0, 0x00, 0xff, 0xff, 0xb7, 0x00, 0xff,
+ 0xff, 0xbd, 0x00, 0xff, 0xff, 0xc3, 0x01, 0xff,
+ 0xff, 0xc7, 0x00, 0xff, 0xff, 0xcb, 0x00, 0xff,
+ 0xff, 0xcb, 0x01, 0xff, 0xff, 0xc6, 0x01, 0xff,
+ 0xff, 0xc1, 0x01, 0xff, 0xff, 0xbb, 0x00, 0xff,
+ 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xb0, 0x01, 0xff,
+ 0xff, 0xaa, 0x01, 0xff, 0xff, 0xa2, 0x01, 0xff,
+ 0xe2, 0x84, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0xd3, 0x74, 0x00, 0xff, 0xff, 0xbd, 0x01, 0xff,
+ 0xff, 0xf3, 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff,
+ 0xff, 0xde, 0x00, 0xff, 0xff, 0xd5, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xe7, 0x89, 0x00, 0xff,
+ 0xff, 0xdb, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff,
+ 0xff, 0xf4, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xd1, 0x72, 0x00, 0xff, 0xe4, 0x86, 0x00, 0xff,
+ 0xf4, 0x96, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff,
+ 0xff, 0xac, 0x00, 0xff, 0xff, 0xb2, 0x01, 0xff,
+ 0xff, 0xb1, 0x00, 0xff, 0xfe, 0xab, 0x00, 0xff,
+ 0xff, 0xa4, 0x00, 0xff, 0xf0, 0x91, 0x00, 0xff,
+ 0xdd, 0x7e, 0x00, 0xff, 0xc9, 0x6a, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xff, 0xa4, 0x01, 0xff, 0xff, 0xdb, 0x00, 0xff,
+ 0xff, 0xd1, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff,
+ 0xff, 0xbf, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff,
+ 0xcf, 0x70, 0x01, 0xff, 0xff, 0xc2, 0x01, 0xff,
+ 0xff, 0xd0, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff,
+ 0xff, 0xe9, 0x00, 0xff, 0xff, 0xf3, 0x01, 0xff,
+ 0xff, 0xfc, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xab, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xc6, 0x67, 0x00, 0xff, 0xd6, 0x78, 0x01, 0xff,
+ 0xd5, 0x77, 0x01, 0xff, 0xc2, 0x64, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xc6, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xe7, 0x89, 0x01, 0xff,
+ 0xfe, 0xc1, 0x00, 0xff, 0xff, 0xb9, 0x00, 0xff,
+ 0xff, 0xb0, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff,
+ 0xff, 0xa9, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff,
+ 0xff, 0xc6, 0x01, 0xff, 0xff, 0xd2, 0x00, 0xff,
+ 0xff, 0xdf, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x00, 0xff, 0xff, 0xb3, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0xe5, 0x87, 0x01, 0xff,
+ 0xff, 0xf5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xcd, 0x6f, 0x00, 0xff, 0xff, 0xa9, 0x01, 0xff,
+ 0xff, 0xa1, 0x00, 0xff, 0xf9, 0x9a, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0x5c, 0x00, 0xff, 0xef, 0x91, 0x00, 0xff,
+ 0xfe, 0xa0, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff,
+ 0xff, 0xbd, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xbc, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff,
+ 0xff, 0xc6, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xf0, 0x91, 0x01, 0xff, 0xea, 0x8b, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0xda, 0x7b, 0x00, 0xff, 0xe9, 0x8b, 0x01, 0xff,
+ 0xf7, 0x98, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xc3, 0x01, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xed, 0x8e, 0x00, 0xff, 0xff, 0xef, 0x01, 0xff,
+ 0xff, 0xfe, 0x01, 0xff, 0xff, 0xfa, 0x00, 0xff,
+ 0xff, 0xf5, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5d, 0x00, 0xff, 0xda, 0x7c, 0x01, 0xff,
+ 0xd6, 0x77, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc6, 0x67, 0x00, 0xff,
+ 0xd4, 0x76, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff,
+ 0xff, 0xf2, 0x01, 0xff, 0xff, 0xf6, 0x00, 0xff,
+ 0xff, 0xfa, 0x01, 0xff, 0xff, 0xfc, 0x01, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc5, 0x01, 0xff,
+ 0xff, 0xee, 0x01, 0xff, 0xff, 0xea, 0x00, 0xff,
+ 0xff, 0xe7, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xc6, 0x67, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xc0, 0x61, 0x01, 0xff, 0xff, 0xcd, 0x00, 0xff,
+ 0xff, 0xe2, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff,
+ 0xff, 0xeb, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xbb, 0x5d, 0x00, 0xff, 0xf3, 0x94, 0x00, 0xff,
+ 0xff, 0xdd, 0x01, 0xff, 0xff, 0xda, 0x00, 0xff,
+ 0xff, 0xd8, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xcc, 0x6e, 0x01, 0xff, 0xff, 0xca, 0x00, 0xff,
+ 0xff, 0xd1, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff,
+ 0xff, 0xdb, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbc, 0x5d, 0x00, 0xff, 0xbf, 0x60, 0x00, 0xff,
+ 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff,
+ 0xfe, 0xc6, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 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, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xd6, 0x77, 0x00, 0xff, 0xff, 0xb9, 0x00, 0xff,
+ 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbb, 0x5c, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff,
+ 0xf4, 0x96, 0x00, 0xff, 0xff, 0xb6, 0x00, 0xff,
+ 0xff, 0xb6, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 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,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xdf, 0x81, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff,
+ 0xff, 0xb2, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xc9, 0x6b, 0x01, 0xff, 0xff, 0xa5, 0x01, 0xff,
+ 0xff, 0xa6, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0xe8, 0x89, 0x00, 0xff, 0xf9, 0x9b, 0x00, 0xff,
+ 0xff, 0xa4, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0x5c, 0x00, 0xff, 0xf1, 0x92, 0x00, 0xff,
+ 0xf3, 0x94, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xe2, 0x83, 0x00, 0xff, 0xec, 0x8e, 0x01, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xbc, 0x5d, 0x01, 0xff, 0xd1, 0x73, 0x00, 0xff,
+ 0xe2, 0x84, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 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,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xd6, 0x77, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff,
+ 0xd3, 0x74, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5c, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc3, 0x64, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+};
+
+Vtx sun_LightModel_mesh_vtx_cull[8] = {
+ {{ {-100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {-100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {-100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {-100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }},
+};
+
+Vtx sun_LightModel_mesh_vtx_0[4] = {
+ {{ {-100, -100, 0}, 0, {-16, 2032}, {0, 0, 127, 255} }},
+ {{ {100, -100, 0}, 0, {2032, 2032}, {0, 0, 127, 255} }},
+ {{ {100, 100, 0}, 0, {2032, -16}, {0, 0, 127, 255} }},
+ {{ {-100, 100, 0}, 0, {-16, -16}, {0, 0, 127, 255} }},
+};
+
+Gfx sun_LightModel_mesh_tri_0[3] = {
+ gsSPVertex(sun_LightModel_mesh_vtx_0 + 0, 4, 0),
+ gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
+ gsSPEndDisplayList(),
+};
+
+Gfx mat_sun_sun[13] = {
+ gsSPSetGeometryMode(G_FOG),
+ gsSPClearGeometryMode(G_CULL_BACK | G_CLIPPING),
+ gsDPPipeSync(),
+ gsDPSetCombineLERP(0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0),
+ gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2),
+ gsSPTexture(65535, 65535, 0, 0, 1),
+ gsDPSetPrimColor(0, 0, 255, 255, 255, 128),
+ gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_32b_LOAD_BLOCK, 1, sun_sun_rgba32),
+ gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0),
+ gsDPLoadBlock(7, 0, 0, 4095, 64),
+ gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b, 16, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 6, 0),
+ gsDPSetTileSize(0, 0, 0, 252, 252),
+ gsSPEndDisplayList(),
+};
+
+Gfx mat_revert_sun_sun[4] = {
+ gsSPClearGeometryMode(G_FOG),
+ gsSPSetGeometryMode(G_CULL_BACK | G_CLIPPING),
+ gsDPPipeSync(),
+ gsSPEndDisplayList(),
+};
+
+Gfx sun_LightModel_mesh[13] = {
+ gsSPClearGeometryMode(G_LIGHTING),
+ gsSPVertex(sun_LightModel_mesh_vtx_cull + 0, 8, 0),
+ gsSPSetGeometryMode(G_LIGHTING),
+ gsSPCullDisplayList(0, 7),
+ gsSPDisplayList(mat_sun_sun),
+ gsSPDisplayList(sun_LightModel_mesh_tri_0),
+ gsSPDisplayList(mat_revert_sun_sun),
+ gsDPPipeSync(),
+ gsSPSetGeometryMode(G_LIGHTING),
+ gsSPClearGeometryMode(G_TEXTURE_GEN),
+ gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT),
+ gsSPTexture(65535, 65535, 0, 0, 0),
+ gsSPEndDisplayList(),
+};
+
+
+};
+}
diff --git a/src/engine/editor/ObjectPicker.cpp b/src/engine/editor/ObjectPicker.cpp
new file mode 100644
index 000000000..9cfeed5f8
--- /dev/null
+++ b/src/engine/editor/ObjectPicker.cpp
@@ -0,0 +1,207 @@
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "../CoreMath.h"
+#include <libultra/types.h>
+#include "../World.h"
+
+#include "ObjectPicker.h"
+#include "port/Engine.h"
+#include <controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h>
+#include <window/Window.h>
+
+#include "engine/actors/Ship.h"
+#include "port/Game.h"
+#include "Gizmo.h"
+
+#include "EditorMath.h"
+
+extern "C" {
+#include "common_structs.h"
+#include "main.h"
+#include "defines.h"
+#include "actors.h"
+#include "camera.h"
+}
+
+namespace Editor {
+
+void ObjectPicker::Load() {
+ eGizmo.Load();
+}
+
+void ObjectPicker::Tick() {
+}
+
+void ObjectPicker::SelectObject(std::vector<GameObject*> objects) {
+ Ray ray;
+ ray.Origin = FVector(cameras[0].pos[0], cameras[0].pos[1], cameras[0].pos[2]);
+
+ // This allows selection of objects in the scene explorer.
+ // Otherwise this would still run when selecting buttons in editor windows.
+ if (IsInGameScreen()) {
+ ray.Direction = ScreenRayTrace();
+
+ ObjectPicker::FindObject(ray, objects);
+
+ if (_selected != nullptr) {
+ eGizmo.SetGizmo(_selected, ray);
+ eGizmo.Enabled = true;
+ } else {
+ //eGizmo.Disable();
+ eGizmo.Enabled = false;
+ eGizmo._selected = nullptr;
+ }
+ }
+}
+
+void ObjectPicker::DragHandle() {
+ Ray ray;
+ ray.Origin = FVector(cameras[0].pos[0], cameras[0].pos[1], cameras[0].pos[2]);
+ ray.Direction = ScreenRayTrace();
+
+ // Skip if a drag is already in progress
+ if (eGizmo.SelectedHandle != Gizmo::GizmoHandle::None) {
+ eGizmo._ray = ray.Direction;
+ eGizmo.Tick();
+ return;
+ }
+
+ // Is the gizmo being dragged?
+ if (!eGizmo.Enabled) { return; }
+ float closestDistance = FLT_MAX;
+ std::optional<FVector> closestClickPos;
+ Gizmo::GizmoHandle closestHandle = Gizmo::GizmoHandle::None;
+
+ // All axis grab. Not used in rotate mode rotate
+ if (static_cast<Gizmo::TranslationMode>(CVarGetInteger("eGizmoMode", 0)) != Gizmo::TranslationMode::Rotate) {
+ float t;
+ if (IntersectRaySphere(ray, eGizmo.Pos, eGizmo.AllAxisRadius, t)) {
+ if (t < closestDistance) {
+ closestDistance = t;
+ closestClickPos = ray.Origin + ray.Direction * t;
+ closestHandle = Gizmo::GizmoHandle::All_Axis;
+ }
+ }
+ }
+
+ // Arrow handles
+ auto tryHandle = [&](Gizmo::GizmoHandle handle, MtxF mtx, const std::vector<Triangle>& tris) {
+ for (const auto& tri : tris) {
+ if (auto clickPos = QueryHandleIntersection(mtx, ray, tri)) {
+ float dist = (*clickPos - ray.Origin).Magnitude();
+ if (dist < closestDistance) {
+ closestDistance = dist;
+ closestClickPos = *clickPos;
+ closestHandle = handle;
+ }
+ }
+ }
+ };
+
+ switch(static_cast<Gizmo::TranslationMode>(CVarGetInteger("eGizmoMode", 0))) {
+ case Gizmo::TranslationMode::Move:
+ tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedCollision.Triangles);
+ tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenCollision.Triangles);
+ tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueCollision.Triangles);
+ break;
+ case Gizmo::TranslationMode::Rotate:
+ tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_RedX, eGizmo.RedRotateCollision.Triangles);
+ tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenRotateCollision.Triangles);
+ tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueRotateCollision.Triangles);
+ break;
+ case Gizmo::TranslationMode::Scale:
+ tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedScaleCollision.Triangles);
+ tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenScaleCollision.Triangles);
+ tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueScaleCollision.Triangles);
+ break;
+
+ }
+
+ if (closestHandle != Gizmo::GizmoHandle::None && closestClickPos.has_value()) {
+ eGizmo.SelectedHandle = closestHandle;
+ eGizmo._ray = ray.Direction;
+ eGizmo._cursorOffset = eGizmo.Pos - *closestClickPos;
+ eGizmo.PickDistance = closestDistance;
+ }
+}
+
+void ObjectPicker::Draw() {
+ if (_selected != NULL) {
+ eGizmo.Draw();
+ }
+
+ if (Debug) {
+ Mat4 CursorMtx;
+ IRotator rot = IRotator(0,0,0);
+ FVector scale = FVector(0.1, 0.1, 0.1);
+ FVector ray = ScreenRayTrace();
+
+ float x = (cameras[0].pos[0] + ray.x * 800);
+ float y = (cameras[0].pos[1] + ray.y * 800);
+ float z = (cameras[0].pos[2] + ray.z * 800);
+
+ ApplyMatrixTransformations((float(*)[4])&CursorMtx, FVector(x, y, z), rot, scale);
+ Editor_AddMatrix((float(*)[4])&CursorMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)"__OTR__tracks/sphere");
+ }
+}
+
+void ObjectPicker::FindObject(Ray ray, std::vector<GameObject*> objects) {
+ bool found = false;
+ GameObject* closestObject = nullptr;
+ float closestDistance = FLT_MAX;
+
+ for (auto& object : objects) {
+ float boundingBox = object->BoundingBoxSize;
+ if (boundingBox == 0.0f) {
+ boundingBox = 2.0f;
+ }
+
+ switch(object->Collision) {
+ case GameObject::CollisionType::VTX_INTERSECT:
+ for (const auto& tri : object->Triangles) {
+ float t;
+ if (IntersectRayTriangleAndTransform(ray, *object->Pos, tri, t)) {
+ if (t < closestDistance) {
+ closestDistance = t;
+ closestObject = object;
+ printf("SELECTED OBJECT\n");
+ }
+ }
+ }
+ break;
+ case GameObject::CollisionType::BOUNDING_BOX: {
+ float max = 2.0f;
+ float min = -2.0f;
+ Vec3f boxMin = { object->Pos->x + boundingBox * min,
+ object->Pos->y + boundingBox * min,
+ object->Pos->z + boundingBox * min };
+
+ Vec3f boxMax = { object->Pos->x + boundingBox * max,
+ object->Pos->y + boundingBox * max,
+ object->Pos->z + boundingBox * max };
+ float t;
+ if (QueryCollisionRayActor(&ray.Origin.x, &ray.Direction.x, boxMin, boxMax, &t)) {
+ if (t < closestDistance) {
+ closestDistance = t;
+ closestObject = object;
+ printf("FOUND BOUNDING BOX OBJECT\n");
+ }
+ break;
+ }
+ break;
+ }
+ case GameObject::CollisionType::BOUNDING_SPHERE:
+ printf("Editor::ObjectPicker.cpp Bounding sphere collision type not yet supported\n");
+ break;
+ }
+ }
+ if (closestObject != nullptr) {
+ _selected = closestObject;
+ // printf("FOUND COLLISION %d\n", type);
+ } else {
+ // printf("NO COLLISION\n");
+ _selected = nullptr;
+ }
+}
+}
diff --git a/src/engine/editor/ObjectPicker.h b/src/engine/editor/ObjectPicker.h
new file mode 100644
index 000000000..e96bddcbc
--- /dev/null
+++ b/src/engine/editor/ObjectPicker.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <libultraship/libultraship.h>
+#include <libultra/gbi.h>
+#include "Collision.h"
+#include "Gizmo.h"
+#include "GameObject.h"
+
+namespace Editor {
+ class ObjectPicker {
+ public:
+ void SelectObject(std::vector<GameObject*> objects);
+ void DragHandle();
+ void Draw();
+ void FindObject(Ray ray, std::vector<GameObject*> objects);
+ void Load();
+ void Tick();
+ Gizmo eGizmo;
+ GameObject* _selected;
+ private:
+ bool _draw = false;
+ GameObject* _lastSelected;
+ s32 Inverse(MtxF* src, MtxF* dest);
+ void Copy(MtxF* src, MtxF* dest);
+ void Clear(MtxF* mf);
+ bool Debug = false;
+ };
+}
diff --git a/src/engine/editor/SceneManager.cpp b/src/engine/editor/SceneManager.cpp
new file mode 100644
index 000000000..a2de6656c
--- /dev/null
+++ b/src/engine/editor/SceneManager.cpp
@@ -0,0 +1,156 @@
+#include "SceneManager.h"
+#include "port/Game.h"
+#include "CoreMath.h"
+#include "World.h"
+#include "GameObject.h"
+
+#include <iostream>
+#include <fstream>
+#include <nlohmann/json.hpp>
+#include "port/Engine.h"
+#include <libultraship/src/resource/type/Json.h>
+#include "port/resource/type/Minimap.h"
+#include <libultraship/src/resource/File.h>
+#include "port/resource/type/ResourceType.h"
+
+namespace Editor {
+
+ std::shared_ptr<Ship::Archive> CurrentArchive;
+ std::string SceneFile = "";
+
+ void SaveLevel() {
+ auto props = gWorldInstance.CurrentCourse->Props;
+
+ if ((CurrentArchive) && (!SceneFile.empty())) {
+ nlohmann::json data;
+
+ data["Props"] = props.to_json();
+
+ nlohmann::json staticMesh;
+
+ for (const auto& mesh : gWorldInstance.StaticMeshActors) {
+ staticMesh.push_back(mesh->to_json());
+ }
+ data["StaticMeshActors"] = staticMesh;
+
+ // nlohmann::json actors;
+
+ // for (const auto& actor : gWorldInstance.Actors) {
+ // actors.push_back(actor->to_json());
+ // }
+ // data["Actors"] = actors;
+
+ // nlohmann::json objects;
+
+ // for (const auto& object : gWorldInstance.Objects) {
+ // objects.push_back(object->to_json());
+ // }
+ // data["Objects"] = objects;
+
+ try {
+ auto dat = data.dump();
+ std::vector<uint8_t> stringify;
+ stringify.assign(dat.begin(), dat.end());
+
+ bool wrote = GameEngine::Instance->context->GetResourceManager()->GetArchiveManager()->WriteFile(CurrentArchive, SceneFile, stringify);
+ if (wrote) {
+ printf("Successfully wrote scene file!\n Wrote: %s\n", SceneFile.c_str());
+ } else {
+ printf("Failed to write scene file!\n");
+ }
+ } catch (const nlohmann::json::exception& e) {
+ printf("SceneManager::SaveLevel():\n JSON error during dump: %s\n", e.what());
+ }
+ } else {
+ printf("Could not save scene file, SceneFile or CurrentArchive not set\n");
+ }
+ }
+
+ void LoadLevel(std::shared_ptr<Ship::Archive> archive, Course* course, std::string sceneFile) {
+ SceneFile = sceneFile;
+
+ if (archive) {
+ auto initData = std::make_shared<Ship::ResourceInitData>();
+ initData->Parent = archive;
+ initData->Format = RESOURCE_FORMAT_BINARY;
+ initData->ByteOrder = Ship::Endianness::Little;
+ initData->Type = static_cast<uint32_t>(Ship::ResourceType::Json);
+ initData->ResourceVersion = 0;
+
+ nlohmann::json data = std::static_pointer_cast<Ship::Json>(
+ GameEngine::Instance->context->GetResourceManager()->LoadResource(sceneFile, true, initData))->Data;
+
+ if (data.is_null() || data.empty()) {
+ return;
+ }
+
+ // Load the Props (deserialize it)
+ if (data.contains("Props")) {
+ auto& propsJson = data["Props"];
+ try {
+ course->Props.from_json(propsJson);
+ } catch(const std::exception& e) {
+ std::cerr << "SceneManager::LoadLevel() Error parsing track properties: " << e.what() << std::endl;
+ std::cerr << " Is your scene.json file out of date?" << std::endl;
+ }
+ } else {
+ std::cerr << "Props data not found in the JSON file!" << std::endl;
+ }
+
+ // Load the Actors (deserialize them)
+ if (data.contains("StaticMeshActors")) {
+ auto& actorsJson = data["StaticMeshActors"];
+ gWorldInstance.StaticMeshActors.clear(); // Clear existing actors, if any
+
+ for (const auto& actorJson : actorsJson) {
+ Load_AddStaticMeshActor(actorJson);
+ }
+ } else {
+ std::cerr << "Actors data not found in the JSON file!" << std::endl;
+ }
+ }
+ }
+
+ void Load_AddStaticMeshActor(const nlohmann::json& actorJson) {
+ gWorldInstance.StaticMeshActors.push_back(new StaticMeshActor("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr));
+ auto actor = gWorldInstance.StaticMeshActors.back();
+ actor->from_json(actorJson);
+
+ printf("After from_json: Pos(%f, %f, %f), Name: %s, Model: %s\n",
+ actor->Pos.x, actor->Pos.y, actor->Pos.z, actor->Name.c_str(), actor->Model.c_str());
+ gEditor.AddObject(actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) nullptr, 1.0f,
+ GameObject::CollisionType::BOUNDING_BOX, 20.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) 1);
+ }
+
+ void SetSceneFile(std::shared_ptr<Ship::Archive> archive, std::string sceneFile) {
+ CurrentArchive = archive;
+ SceneFile = sceneFile;
+ }
+
+ void LoadMinimap(std::shared_ptr<Ship::Archive> archive, Course* course, std::string filePath) {
+ printf("LOADING MINIMAP %s\n", filePath.c_str());
+ if (archive) {
+ auto initData = std::make_shared<Ship::ResourceInitData>();
+ initData->Parent = archive;
+ initData->Format = RESOURCE_FORMAT_BINARY;
+ initData->ByteOrder = Ship::Endianness::Little;
+ initData->Type = static_cast<uint32_t>(MK64::ResourceType::Minimap);
+ initData->ResourceVersion = 0;
+
+ std::shared_ptr<MK64::Minimap> ptr = std::static_pointer_cast<MK64::Minimap>(
+ GameEngine::Instance->context->GetResourceManager()->LoadResource(filePath, true, initData));
+
+ if (ptr) {
+ printf("LOADED MINIMAP!\n");
+ MK64::MinimapTexture texture = ptr->Texture;
+ course->Props.Minimap.Texture = (const char*)texture.Data;
+ course->Props.Minimap.Width = texture.Width;
+ course->Props.Minimap.Height = texture.Height;
+ } else { // Fallback
+ course->Props.Minimap.Texture = gTextureCourseOutlineMarioRaceway;
+ course->Props.Minimap.Width = ResourceGetTexWidthByName(course->Props.Minimap.Texture);
+ course->Props.Minimap.Height = ResourceGetTexHeightByName(course->Props.Minimap.Texture);
+ }
+ }
+ }
+}
diff --git a/src/engine/editor/SceneManager.h b/src/engine/editor/SceneManager.h
new file mode 100644
index 000000000..58699107e
--- /dev/null
+++ b/src/engine/editor/SceneManager.h
@@ -0,0 +1,13 @@
+#include <libultraship/libultraship.h>
+#include "engine/courses/Course.h"
+
+namespace Editor {
+ void SaveLevel();
+ void LoadLevel(std::shared_ptr<Ship::Archive> archive, Course* course, std::string sceneFile);
+ void Load_AddStaticMeshActor(const nlohmann::json& actorJson);
+ void SetSceneFile(std::shared_ptr<Ship::Archive> archive, std::string sceneFile);
+ void LoadMinimap(std::shared_ptr<Ship::Archive> archive, Course* course, std::string filePath);
+
+ extern std::shared_ptr<Ship::Archive> CurrentArchive; // This is used to retrieve and write the scene data file
+ extern std::string SceneFile;
+}