diff options
Diffstat (limited to 'SDL-3.2.8/src/render')
156 files changed, 70262 insertions, 0 deletions
diff --git a/SDL-3.2.8/src/render/SDL_d3dmath.c b/SDL-3.2.8/src/render/SDL_d3dmath.c new file mode 100644 index 0000000..6a1ab59 --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_d3dmath.c | |||
| @@ -0,0 +1,135 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #if defined(SDL_VIDEO_RENDER_D3D) || \ | ||
| 24 | defined(SDL_VIDEO_RENDER_D3D11) || \ | ||
| 25 | defined(SDL_VIDEO_RENDER_D3D12) || \ | ||
| 26 | defined(SDL_VIDEO_RENDER_VULKAN) | ||
| 27 | |||
| 28 | #include "SDL_d3dmath.h" | ||
| 29 | |||
| 30 | // Direct3D matrix math functions | ||
| 31 | |||
| 32 | Float4X4 MatrixIdentity(void) | ||
| 33 | { | ||
| 34 | Float4X4 m; | ||
| 35 | SDL_zero(m); | ||
| 36 | m.v._11 = 1.0f; | ||
| 37 | m.v._22 = 1.0f; | ||
| 38 | m.v._33 = 1.0f; | ||
| 39 | m.v._44 = 1.0f; | ||
| 40 | return m; | ||
| 41 | } | ||
| 42 | |||
| 43 | Float4X4 MatrixMultiply(Float4X4 M1, Float4X4 M2) | ||
| 44 | { | ||
| 45 | Float4X4 m; | ||
| 46 | m.v._11 = M1.v._11 * M2.v._11 + M1.v._12 * M2.v._21 + M1.v._13 * M2.v._31 + M1.v._14 * M2.v._41; | ||
| 47 | m.v._12 = M1.v._11 * M2.v._12 + M1.v._12 * M2.v._22 + M1.v._13 * M2.v._32 + M1.v._14 * M2.v._42; | ||
| 48 | m.v._13 = M1.v._11 * M2.v._13 + M1.v._12 * M2.v._23 + M1.v._13 * M2.v._33 + M1.v._14 * M2.v._43; | ||
| 49 | m.v._14 = M1.v._11 * M2.v._14 + M1.v._12 * M2.v._24 + M1.v._13 * M2.v._34 + M1.v._14 * M2.v._44; | ||
| 50 | m.v._21 = M1.v._21 * M2.v._11 + M1.v._22 * M2.v._21 + M1.v._23 * M2.v._31 + M1.v._24 * M2.v._41; | ||
| 51 | m.v._22 = M1.v._21 * M2.v._12 + M1.v._22 * M2.v._22 + M1.v._23 * M2.v._32 + M1.v._24 * M2.v._42; | ||
| 52 | m.v._23 = M1.v._21 * M2.v._13 + M1.v._22 * M2.v._23 + M1.v._23 * M2.v._33 + M1.v._24 * M2.v._43; | ||
| 53 | m.v._24 = M1.v._21 * M2.v._14 + M1.v._22 * M2.v._24 + M1.v._23 * M2.v._34 + M1.v._24 * M2.v._44; | ||
| 54 | m.v._31 = M1.v._31 * M2.v._11 + M1.v._32 * M2.v._21 + M1.v._33 * M2.v._31 + M1.v._34 * M2.v._41; | ||
| 55 | m.v._32 = M1.v._31 * M2.v._12 + M1.v._32 * M2.v._22 + M1.v._33 * M2.v._32 + M1.v._34 * M2.v._42; | ||
| 56 | m.v._33 = M1.v._31 * M2.v._13 + M1.v._32 * M2.v._23 + M1.v._33 * M2.v._33 + M1.v._34 * M2.v._43; | ||
| 57 | m.v._34 = M1.v._31 * M2.v._14 + M1.v._32 * M2.v._24 + M1.v._33 * M2.v._34 + M1.v._34 * M2.v._44; | ||
| 58 | m.v._41 = M1.v._41 * M2.v._11 + M1.v._42 * M2.v._21 + M1.v._43 * M2.v._31 + M1.v._44 * M2.v._41; | ||
| 59 | m.v._42 = M1.v._41 * M2.v._12 + M1.v._42 * M2.v._22 + M1.v._43 * M2.v._32 + M1.v._44 * M2.v._42; | ||
| 60 | m.v._43 = M1.v._41 * M2.v._13 + M1.v._42 * M2.v._23 + M1.v._43 * M2.v._33 + M1.v._44 * M2.v._43; | ||
| 61 | m.v._44 = M1.v._41 * M2.v._14 + M1.v._42 * M2.v._24 + M1.v._43 * M2.v._34 + M1.v._44 * M2.v._44; | ||
| 62 | return m; | ||
| 63 | } | ||
| 64 | |||
| 65 | Float4X4 MatrixScaling(float x, float y, float z) | ||
| 66 | { | ||
| 67 | Float4X4 m; | ||
| 68 | SDL_zero(m); | ||
| 69 | m.v._11 = x; | ||
| 70 | m.v._22 = y; | ||
| 71 | m.v._33 = z; | ||
| 72 | m.v._44 = 1.0f; | ||
| 73 | return m; | ||
| 74 | } | ||
| 75 | |||
| 76 | Float4X4 MatrixTranslation(float x, float y, float z) | ||
| 77 | { | ||
| 78 | Float4X4 m; | ||
| 79 | SDL_zero(m); | ||
| 80 | m.v._11 = 1.0f; | ||
| 81 | m.v._22 = 1.0f; | ||
| 82 | m.v._33 = 1.0f; | ||
| 83 | m.v._44 = 1.0f; | ||
| 84 | m.v._41 = x; | ||
| 85 | m.v._42 = y; | ||
| 86 | m.v._43 = z; | ||
| 87 | return m; | ||
| 88 | } | ||
| 89 | |||
| 90 | Float4X4 MatrixRotationX(float r) | ||
| 91 | { | ||
| 92 | float sinR = SDL_sinf(r); | ||
| 93 | float cosR = SDL_cosf(r); | ||
| 94 | Float4X4 m; | ||
| 95 | SDL_zero(m); | ||
| 96 | m.v._11 = 1.0f; | ||
| 97 | m.v._22 = cosR; | ||
| 98 | m.v._23 = sinR; | ||
| 99 | m.v._32 = -sinR; | ||
| 100 | m.v._33 = cosR; | ||
| 101 | m.v._44 = 1.0f; | ||
| 102 | return m; | ||
| 103 | } | ||
| 104 | |||
| 105 | Float4X4 MatrixRotationY(float r) | ||
| 106 | { | ||
| 107 | float sinR = SDL_sinf(r); | ||
| 108 | float cosR = SDL_cosf(r); | ||
| 109 | Float4X4 m; | ||
| 110 | SDL_zero(m); | ||
| 111 | m.v._11 = cosR; | ||
| 112 | m.v._13 = -sinR; | ||
| 113 | m.v._22 = 1.0f; | ||
| 114 | m.v._31 = sinR; | ||
| 115 | m.v._33 = cosR; | ||
| 116 | m.v._44 = 1.0f; | ||
| 117 | return m; | ||
| 118 | } | ||
| 119 | |||
| 120 | Float4X4 MatrixRotationZ(float r) | ||
| 121 | { | ||
| 122 | float sinR = SDL_sinf(r); | ||
| 123 | float cosR = SDL_cosf(r); | ||
| 124 | Float4X4 m; | ||
| 125 | SDL_zero(m); | ||
| 126 | m.v._11 = cosR; | ||
| 127 | m.v._12 = sinR; | ||
| 128 | m.v._21 = -sinR; | ||
| 129 | m.v._22 = cosR; | ||
| 130 | m.v._33 = 1.0f; | ||
| 131 | m.v._44 = 1.0f; | ||
| 132 | return m; | ||
| 133 | } | ||
| 134 | |||
| 135 | #endif // SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11 || SDL_VIDEO_RENDER_D3D12 || SDL_VIDEO_RENDER_VULKAN | ||
diff --git a/SDL-3.2.8/src/render/SDL_d3dmath.h b/SDL-3.2.8/src/render/SDL_d3dmath.h new file mode 100644 index 0000000..84cff9e --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_d3dmath.h | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #if defined(SDL_VIDEO_RENDER_D3D) || \ | ||
| 24 | defined(SDL_VIDEO_RENDER_D3D11) || \ | ||
| 25 | defined(SDL_VIDEO_RENDER_D3D12) || \ | ||
| 26 | defined(SDL_VIDEO_RENDER_GPU) || \ | ||
| 27 | defined(SDL_VIDEO_RENDER_VULKAN) | ||
| 28 | |||
| 29 | // Set up for C function definitions, even when using C++ | ||
| 30 | #ifdef __cplusplus | ||
| 31 | extern "C" { | ||
| 32 | #endif | ||
| 33 | |||
| 34 | // Direct3D matrix math functions | ||
| 35 | |||
| 36 | typedef struct | ||
| 37 | { | ||
| 38 | float x; | ||
| 39 | float y; | ||
| 40 | } Float2; | ||
| 41 | |||
| 42 | typedef struct | ||
| 43 | { | ||
| 44 | float x; | ||
| 45 | float y; | ||
| 46 | float z; | ||
| 47 | } Float3; | ||
| 48 | |||
| 49 | typedef struct | ||
| 50 | { | ||
| 51 | float x; | ||
| 52 | float y; | ||
| 53 | float z; | ||
| 54 | float w; | ||
| 55 | } Float4; | ||
| 56 | |||
| 57 | typedef struct | ||
| 58 | { | ||
| 59 | union | ||
| 60 | { | ||
| 61 | struct | ||
| 62 | { | ||
| 63 | float _11, _12, _13, _14; | ||
| 64 | float _21, _22, _23, _24; | ||
| 65 | float _31, _32, _33, _34; | ||
| 66 | float _41, _42, _43, _44; | ||
| 67 | } v; | ||
| 68 | float m[4][4]; | ||
| 69 | }; | ||
| 70 | } Float4X4; | ||
| 71 | |||
| 72 | extern Float4X4 MatrixIdentity(void); | ||
| 73 | extern Float4X4 MatrixMultiply(Float4X4 M1, Float4X4 M2); | ||
| 74 | extern Float4X4 MatrixScaling(float x, float y, float z); | ||
| 75 | extern Float4X4 MatrixTranslation(float x, float y, float z); | ||
| 76 | extern Float4X4 MatrixRotationX(float r); | ||
| 77 | extern Float4X4 MatrixRotationY(float r); | ||
| 78 | extern Float4X4 MatrixRotationZ(float r); | ||
| 79 | |||
| 80 | // Ends C function definitions when using C++ | ||
| 81 | #ifdef __cplusplus | ||
| 82 | } | ||
| 83 | #endif | ||
| 84 | |||
| 85 | #endif // SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11 || SDL_VIDEO_RENDER_D3D12 || SDL_VIDEO_RENDER_VULKAN | ||
diff --git a/SDL-3.2.8/src/render/SDL_render.c b/SDL-3.2.8/src/render/SDL_render.c new file mode 100644 index 0000000..82ecb88 --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_render.c | |||
| @@ -0,0 +1,5676 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | // The SDL 2D rendering system | ||
| 24 | |||
| 25 | #include "SDL_sysrender.h" | ||
| 26 | #include "SDL_render_debug_font.h" | ||
| 27 | #include "software/SDL_render_sw_c.h" | ||
| 28 | #include "../events/SDL_windowevents_c.h" | ||
| 29 | #include "../video/SDL_pixels_c.h" | ||
| 30 | #include "../video/SDL_video_c.h" | ||
| 31 | |||
| 32 | #ifdef SDL_PLATFORM_ANDROID | ||
| 33 | #include "../core/android/SDL_android.h" | ||
| 34 | #include "../video/android/SDL_androidevents.h" | ||
| 35 | #endif | ||
| 36 | |||
| 37 | /* as a courtesy to iOS apps, we don't try to draw when in the background, as | ||
| 38 | that will crash the app. However, these apps _should_ have used | ||
| 39 | SDL_AddEventWatch to catch SDL_EVENT_WILL_ENTER_BACKGROUND events and stopped | ||
| 40 | drawing themselves. Other platforms still draw, as the compositor can use it, | ||
| 41 | and more importantly: drawing to render targets isn't lost. But I still think | ||
| 42 | this should probably be removed at some point in the future. --ryan. */ | ||
| 43 | #if defined(SDL_PLATFORM_IOS) || defined(SDL_PLATFORM_TVOS) || defined(SDL_PLATFORM_ANDROID) | ||
| 44 | #define DONT_DRAW_WHILE_HIDDEN 1 | ||
| 45 | #else | ||
| 46 | #define DONT_DRAW_WHILE_HIDDEN 0 | ||
| 47 | #endif | ||
| 48 | |||
| 49 | #define SDL_PROP_WINDOW_RENDERER_POINTER "SDL.internal.window.renderer" | ||
| 50 | #define SDL_PROP_TEXTURE_PARENT_POINTER "SDL.internal.texture.parent" | ||
| 51 | |||
| 52 | #define CHECK_RENDERER_MAGIC_BUT_NOT_DESTROYED_FLAG(renderer, result) \ | ||
| 53 | if (!SDL_ObjectValid(renderer, SDL_OBJECT_TYPE_RENDERER)) { \ | ||
| 54 | SDL_InvalidParamError("renderer"); \ | ||
| 55 | return result; \ | ||
| 56 | } | ||
| 57 | |||
| 58 | #define CHECK_RENDERER_MAGIC(renderer, result) \ | ||
| 59 | CHECK_RENDERER_MAGIC_BUT_NOT_DESTROYED_FLAG(renderer, result); \ | ||
| 60 | if ((renderer)->destroyed) { \ | ||
| 61 | SDL_SetError("Renderer's window has been destroyed, can't use further"); \ | ||
| 62 | return result; \ | ||
| 63 | } | ||
| 64 | |||
| 65 | #define CHECK_TEXTURE_MAGIC(texture, result) \ | ||
| 66 | if (!SDL_ObjectValid(texture, SDL_OBJECT_TYPE_TEXTURE)) { \ | ||
| 67 | SDL_InvalidParamError("texture"); \ | ||
| 68 | return result; \ | ||
| 69 | } | ||
| 70 | |||
| 71 | // Predefined blend modes | ||
| 72 | #define SDL_COMPOSE_BLENDMODE(srcColorFactor, dstColorFactor, colorOperation, \ | ||
| 73 | srcAlphaFactor, dstAlphaFactor, alphaOperation) \ | ||
| 74 | (SDL_BlendMode)(((Uint32)(colorOperation) << 0) | \ | ||
| 75 | ((Uint32)(srcColorFactor) << 4) | \ | ||
| 76 | ((Uint32)(dstColorFactor) << 8) | \ | ||
| 77 | ((Uint32)(alphaOperation) << 16) | \ | ||
| 78 | ((Uint32)(srcAlphaFactor) << 20) | \ | ||
| 79 | ((Uint32)(dstAlphaFactor) << 24)) | ||
| 80 | |||
| 81 | #define SDL_BLENDMODE_NONE_FULL \ | ||
| 82 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ZERO, SDL_BLENDOPERATION_ADD, \ | ||
| 83 | SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ZERO, SDL_BLENDOPERATION_ADD) | ||
| 84 | |||
| 85 | #define SDL_BLENDMODE_BLEND_FULL \ | ||
| 86 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD, \ | ||
| 87 | SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD) | ||
| 88 | |||
| 89 | #define SDL_BLENDMODE_BLEND_PREMULTIPLIED_FULL \ | ||
| 90 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD, \ | ||
| 91 | SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD) | ||
| 92 | |||
| 93 | #define SDL_BLENDMODE_ADD_FULL \ | ||
| 94 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD, \ | ||
| 95 | SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD) | ||
| 96 | |||
| 97 | #define SDL_BLENDMODE_ADD_PREMULTIPLIED_FULL \ | ||
| 98 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD, \ | ||
| 99 | SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD) | ||
| 100 | |||
| 101 | #define SDL_BLENDMODE_MOD_FULL \ | ||
| 102 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_SRC_COLOR, SDL_BLENDOPERATION_ADD, \ | ||
| 103 | SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD) | ||
| 104 | |||
| 105 | #define SDL_BLENDMODE_MUL_FULL \ | ||
| 106 | SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_DST_COLOR, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD, \ | ||
| 107 | SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD) | ||
| 108 | |||
| 109 | #ifndef SDL_RENDER_DISABLED | ||
| 110 | static const SDL_RenderDriver *render_drivers[] = { | ||
| 111 | #ifdef SDL_VIDEO_RENDER_D3D11 | ||
| 112 | &D3D11_RenderDriver, | ||
| 113 | #endif | ||
| 114 | #ifdef SDL_VIDEO_RENDER_D3D12 | ||
| 115 | &D3D12_RenderDriver, | ||
| 116 | #endif | ||
| 117 | #ifdef SDL_VIDEO_RENDER_D3D | ||
| 118 | &D3D_RenderDriver, | ||
| 119 | #endif | ||
| 120 | #ifdef SDL_VIDEO_RENDER_METAL | ||
| 121 | &METAL_RenderDriver, | ||
| 122 | #endif | ||
| 123 | #ifdef SDL_VIDEO_RENDER_OGL | ||
| 124 | &GL_RenderDriver, | ||
| 125 | #endif | ||
| 126 | #ifdef SDL_VIDEO_RENDER_OGL_ES2 | ||
| 127 | &GLES2_RenderDriver, | ||
| 128 | #endif | ||
| 129 | #ifdef SDL_VIDEO_RENDER_PS2 | ||
| 130 | &PS2_RenderDriver, | ||
| 131 | #endif | ||
| 132 | #ifdef SDL_VIDEO_RENDER_PSP | ||
| 133 | &PSP_RenderDriver, | ||
| 134 | #endif | ||
| 135 | #ifdef SDL_VIDEO_RENDER_VITA_GXM | ||
| 136 | &VITA_GXM_RenderDriver, | ||
| 137 | #endif | ||
| 138 | #ifdef SDL_VIDEO_RENDER_VULKAN | ||
| 139 | &VULKAN_RenderDriver, | ||
| 140 | #endif | ||
| 141 | #ifdef SDL_VIDEO_RENDER_GPU | ||
| 142 | &GPU_RenderDriver, | ||
| 143 | #endif | ||
| 144 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 145 | &SW_RenderDriver, | ||
| 146 | #endif | ||
| 147 | NULL | ||
| 148 | }; | ||
| 149 | #endif // !SDL_RENDER_DISABLED | ||
| 150 | |||
| 151 | static SDL_Renderer *SDL_renderers; | ||
| 152 | |||
| 153 | static const int rect_index_order[] = { 0, 1, 2, 0, 2, 3 }; | ||
| 154 | |||
| 155 | void SDL_QuitRender(void) | ||
| 156 | { | ||
| 157 | while (SDL_renderers) { | ||
| 158 | SDL_DestroyRenderer(SDL_renderers); | ||
| 159 | } | ||
| 160 | } | ||
| 161 | |||
| 162 | bool SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormat format) | ||
| 163 | { | ||
| 164 | SDL_PixelFormat *texture_formats = (SDL_PixelFormat *)SDL_realloc((void *)renderer->texture_formats, (renderer->num_texture_formats + 2) * sizeof(SDL_PixelFormat)); | ||
| 165 | if (!texture_formats) { | ||
| 166 | return false; | ||
| 167 | } | ||
| 168 | texture_formats[renderer->num_texture_formats++] = format; | ||
| 169 | texture_formats[renderer->num_texture_formats] = SDL_PIXELFORMAT_UNKNOWN; | ||
| 170 | renderer->texture_formats = texture_formats; | ||
| 171 | SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER, texture_formats); | ||
| 172 | return true; | ||
| 173 | } | ||
| 174 | |||
| 175 | void SDL_SetupRendererColorspace(SDL_Renderer *renderer, SDL_PropertiesID props) | ||
| 176 | { | ||
| 177 | renderer->output_colorspace = (SDL_Colorspace)SDL_GetNumberProperty(props, SDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER, SDL_COLORSPACE_SRGB); | ||
| 178 | } | ||
| 179 | |||
| 180 | bool SDL_RenderingLinearSpace(SDL_Renderer *renderer) | ||
| 181 | { | ||
| 182 | SDL_Colorspace colorspace; | ||
| 183 | |||
| 184 | if (renderer->target) { | ||
| 185 | colorspace = renderer->target->colorspace; | ||
| 186 | } else { | ||
| 187 | colorspace = renderer->output_colorspace; | ||
| 188 | } | ||
| 189 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 190 | return true; | ||
| 191 | } | ||
| 192 | return false; | ||
| 193 | } | ||
| 194 | |||
| 195 | void SDL_ConvertToLinear(SDL_FColor *color) | ||
| 196 | { | ||
| 197 | color->r = SDL_sRGBtoLinear(color->r); | ||
| 198 | color->g = SDL_sRGBtoLinear(color->g); | ||
| 199 | color->b = SDL_sRGBtoLinear(color->b); | ||
| 200 | } | ||
| 201 | |||
| 202 | void SDL_ConvertFromLinear(SDL_FColor *color) | ||
| 203 | { | ||
| 204 | color->r = SDL_sRGBfromLinear(color->r); | ||
| 205 | color->g = SDL_sRGBfromLinear(color->g); | ||
| 206 | color->b = SDL_sRGBfromLinear(color->b); | ||
| 207 | } | ||
| 208 | |||
| 209 | static SDL_INLINE void DebugLogRenderCommands(const SDL_RenderCommand *cmd) | ||
| 210 | { | ||
| 211 | #if 0 | ||
| 212 | unsigned int i = 1; | ||
| 213 | SDL_Log("Render commands to flush:"); | ||
| 214 | while (cmd) { | ||
| 215 | switch (cmd->command) { | ||
| 216 | case SDL_RENDERCMD_NO_OP: | ||
| 217 | SDL_Log(" %u. no-op", i++); | ||
| 218 | break; | ||
| 219 | |||
| 220 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 221 | SDL_Log(" %u. set viewport (first=%u, rect={(%d, %d), %dx%d})", i++, | ||
| 222 | (unsigned int) cmd->data.viewport.first, | ||
| 223 | cmd->data.viewport.rect.x, cmd->data.viewport.rect.y, | ||
| 224 | cmd->data.viewport.rect.w, cmd->data.viewport.rect.h); | ||
| 225 | break; | ||
| 226 | |||
| 227 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 228 | SDL_Log(" %u. set cliprect (enabled=%s, rect={(%d, %d), %dx%d})", i++, | ||
| 229 | cmd->data.cliprect.enabled ? "true" : "false", | ||
| 230 | cmd->data.cliprect.rect.x, cmd->data.cliprect.rect.y, | ||
| 231 | cmd->data.cliprect.rect.w, cmd->data.cliprect.rect.h); | ||
| 232 | break; | ||
| 233 | |||
| 234 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 235 | SDL_Log(" %u. set draw color (first=%u, r=%d, g=%d, b=%d, a=%d, color_scale=%g)", i++, | ||
| 236 | (unsigned int) cmd->data.color.first, | ||
| 237 | (int) cmd->data.color.color.r, (int) cmd->data.color.color.g, | ||
| 238 | (int) cmd->data.color.color.b, (int) cmd->data.color.color.a, cmd->data.color.color_scale); | ||
| 239 | break; | ||
| 240 | |||
| 241 | case SDL_RENDERCMD_CLEAR: | ||
| 242 | SDL_Log(" %u. clear (first=%u, r=%d, g=%d, b=%d, a=%d, color_scale=%g)", i++, | ||
| 243 | (unsigned int) cmd->data.color.first, | ||
| 244 | (int) cmd->data.color.color.r, (int) cmd->data.color.color.g, | ||
| 245 | (int) cmd->data.color.color.b, (int) cmd->data.color.color.a, cmd->data.color.color_scale); | ||
| 246 | break; | ||
| 247 | |||
| 248 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 249 | SDL_Log(" %u. draw points (first=%u, count=%u, r=%d, g=%d, b=%d, a=%d, blend=%d, color_scale=%g)", i++, | ||
| 250 | (unsigned int) cmd->data.draw.first, | ||
| 251 | (unsigned int) cmd->data.draw.count, | ||
| 252 | (int) cmd->data.draw.color.r, (int) cmd->data.draw.color.g, | ||
| 253 | (int) cmd->data.draw.color.b, (int) cmd->data.draw.color.a, | ||
| 254 | (int) cmd->data.draw.blend, cmd->data.draw.color_scale); | ||
| 255 | break; | ||
| 256 | |||
| 257 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 258 | SDL_Log(" %u. draw lines (first=%u, count=%u, r=%d, g=%d, b=%d, a=%d, blend=%d, color_scale=%g)", i++, | ||
| 259 | (unsigned int) cmd->data.draw.first, | ||
| 260 | (unsigned int) cmd->data.draw.count, | ||
| 261 | (int) cmd->data.draw.color.r, (int) cmd->data.draw.color.g, | ||
| 262 | (int) cmd->data.draw.color.b, (int) cmd->data.draw.color.a, | ||
| 263 | (int) cmd->data.draw.blend, cmd->data.draw.color_scale); | ||
| 264 | break; | ||
| 265 | |||
| 266 | case SDL_RENDERCMD_FILL_RECTS: | ||
| 267 | SDL_Log(" %u. fill rects (first=%u, count=%u, r=%d, g=%d, b=%d, a=%d, blend=%d, color_scale=%g)", i++, | ||
| 268 | (unsigned int) cmd->data.draw.first, | ||
| 269 | (unsigned int) cmd->data.draw.count, | ||
| 270 | (int) cmd->data.draw.color.r, (int) cmd->data.draw.color.g, | ||
| 271 | (int) cmd->data.draw.color.b, (int) cmd->data.draw.color.a, | ||
| 272 | (int) cmd->data.draw.blend, cmd->data.draw.color_scale); | ||
| 273 | break; | ||
| 274 | |||
| 275 | case SDL_RENDERCMD_COPY: | ||
| 276 | SDL_Log(" %u. copy (first=%u, count=%u, r=%d, g=%d, b=%d, a=%d, blend=%d, color_scale=%g, tex=%p)", i++, | ||
| 277 | (unsigned int) cmd->data.draw.first, | ||
| 278 | (unsigned int) cmd->data.draw.count, | ||
| 279 | (int) cmd->data.draw.color.r, (int) cmd->data.draw.color.g, | ||
| 280 | (int) cmd->data.draw.color.b, (int) cmd->data.draw.color.a, | ||
| 281 | (int) cmd->data.draw.blend, cmd->data.draw.color_scale, cmd->data.draw.texture); | ||
| 282 | break; | ||
| 283 | |||
| 284 | |||
| 285 | case SDL_RENDERCMD_COPY_EX: | ||
| 286 | SDL_Log(" %u. copyex (first=%u, count=%u, r=%d, g=%d, b=%d, a=%d, blend=%d, color_scale=%g, tex=%p)", i++, | ||
| 287 | (unsigned int) cmd->data.draw.first, | ||
| 288 | (unsigned int) cmd->data.draw.count, | ||
| 289 | (int) cmd->data.draw.color.r, (int) cmd->data.draw.color.g, | ||
| 290 | (int) cmd->data.draw.color.b, (int) cmd->data.draw.color.a, | ||
| 291 | (int) cmd->data.draw.blend, cmd->data.draw.color_scale, cmd->data.draw.texture); | ||
| 292 | break; | ||
| 293 | |||
| 294 | case SDL_RENDERCMD_GEOMETRY: | ||
| 295 | SDL_Log(" %u. geometry (first=%u, count=%u, r=%d, g=%d, b=%d, a=%d, blend=%d, color_scale=%g, tex=%p)", i++, | ||
| 296 | (unsigned int) cmd->data.draw.first, | ||
| 297 | (unsigned int) cmd->data.draw.count, | ||
| 298 | (int) cmd->data.draw.color.r, (int) cmd->data.draw.color.g, | ||
| 299 | (int) cmd->data.draw.color.b, (int) cmd->data.draw.color.a, | ||
| 300 | (int) cmd->data.draw.blend, cmd->data.draw.color_scale, cmd->data.draw.texture); | ||
| 301 | break; | ||
| 302 | |||
| 303 | } | ||
| 304 | cmd = cmd->next; | ||
| 305 | } | ||
| 306 | #endif | ||
| 307 | } | ||
| 308 | |||
| 309 | static bool FlushRenderCommands(SDL_Renderer *renderer) | ||
| 310 | { | ||
| 311 | bool result; | ||
| 312 | |||
| 313 | SDL_assert((renderer->render_commands == NULL) == (renderer->render_commands_tail == NULL)); | ||
| 314 | |||
| 315 | if (!renderer->render_commands) { // nothing to do! | ||
| 316 | SDL_assert(renderer->vertex_data_used == 0); | ||
| 317 | return true; | ||
| 318 | } | ||
| 319 | |||
| 320 | DebugLogRenderCommands(renderer->render_commands); | ||
| 321 | |||
| 322 | result = renderer->RunCommandQueue(renderer, renderer->render_commands, renderer->vertex_data, renderer->vertex_data_used); | ||
| 323 | |||
| 324 | // Move the whole render command queue to the unused pool so we can reuse them next time. | ||
| 325 | if (renderer->render_commands_tail) { | ||
| 326 | renderer->render_commands_tail->next = renderer->render_commands_pool; | ||
| 327 | renderer->render_commands_pool = renderer->render_commands; | ||
| 328 | renderer->render_commands_tail = NULL; | ||
| 329 | renderer->render_commands = NULL; | ||
| 330 | } | ||
| 331 | renderer->vertex_data_used = 0; | ||
| 332 | renderer->render_command_generation++; | ||
| 333 | renderer->color_queued = false; | ||
| 334 | renderer->viewport_queued = false; | ||
| 335 | renderer->cliprect_queued = false; | ||
| 336 | return result; | ||
| 337 | } | ||
| 338 | |||
| 339 | static bool FlushRenderCommandsIfTextureNeeded(SDL_Texture *texture) | ||
| 340 | { | ||
| 341 | SDL_Renderer *renderer = texture->renderer; | ||
| 342 | if (texture->last_command_generation == renderer->render_command_generation) { | ||
| 343 | // the current command queue depends on this texture, flush the queue now before it changes | ||
| 344 | return FlushRenderCommands(renderer); | ||
| 345 | } | ||
| 346 | return true; | ||
| 347 | } | ||
| 348 | |||
| 349 | bool SDL_FlushRenderer(SDL_Renderer *renderer) | ||
| 350 | { | ||
| 351 | if (!FlushRenderCommands(renderer)) { | ||
| 352 | return false; | ||
| 353 | } | ||
| 354 | renderer->InvalidateCachedState(renderer); | ||
| 355 | return true; | ||
| 356 | } | ||
| 357 | |||
| 358 | void *SDL_AllocateRenderVertices(SDL_Renderer *renderer, size_t numbytes, size_t alignment, size_t *offset) | ||
| 359 | { | ||
| 360 | const size_t needed = renderer->vertex_data_used + numbytes + alignment; | ||
| 361 | const size_t current_offset = renderer->vertex_data_used; | ||
| 362 | |||
| 363 | const size_t aligner = (alignment && ((current_offset & (alignment - 1)) != 0)) ? (alignment - (current_offset & (alignment - 1))) : 0; | ||
| 364 | const size_t aligned = current_offset + aligner; | ||
| 365 | |||
| 366 | if (renderer->vertex_data_allocation < needed) { | ||
| 367 | const size_t current_allocation = renderer->vertex_data ? renderer->vertex_data_allocation : 1024; | ||
| 368 | size_t newsize = current_allocation * 2; | ||
| 369 | void *ptr; | ||
| 370 | while (newsize < needed) { | ||
| 371 | newsize *= 2; | ||
| 372 | } | ||
| 373 | |||
| 374 | ptr = SDL_realloc(renderer->vertex_data, newsize); | ||
| 375 | |||
| 376 | if (!ptr) { | ||
| 377 | return NULL; | ||
| 378 | } | ||
| 379 | renderer->vertex_data = ptr; | ||
| 380 | renderer->vertex_data_allocation = newsize; | ||
| 381 | } | ||
| 382 | |||
| 383 | if (offset) { | ||
| 384 | *offset = aligned; | ||
| 385 | } | ||
| 386 | |||
| 387 | renderer->vertex_data_used += aligner + numbytes; | ||
| 388 | |||
| 389 | return ((Uint8 *)renderer->vertex_data) + aligned; | ||
| 390 | } | ||
| 391 | |||
| 392 | static SDL_RenderCommand *AllocateRenderCommand(SDL_Renderer *renderer) | ||
| 393 | { | ||
| 394 | SDL_RenderCommand *result = NULL; | ||
| 395 | |||
| 396 | result = renderer->render_commands_pool; | ||
| 397 | if (result) { | ||
| 398 | renderer->render_commands_pool = result->next; | ||
| 399 | result->next = NULL; | ||
| 400 | } else { | ||
| 401 | result = (SDL_RenderCommand *)SDL_calloc(1, sizeof(*result)); | ||
| 402 | if (!result) { | ||
| 403 | return NULL; | ||
| 404 | } | ||
| 405 | } | ||
| 406 | |||
| 407 | SDL_assert((renderer->render_commands == NULL) == (renderer->render_commands_tail == NULL)); | ||
| 408 | if (renderer->render_commands_tail) { | ||
| 409 | renderer->render_commands_tail->next = result; | ||
| 410 | } else { | ||
| 411 | renderer->render_commands = result; | ||
| 412 | } | ||
| 413 | renderer->render_commands_tail = result; | ||
| 414 | |||
| 415 | return result; | ||
| 416 | } | ||
| 417 | |||
| 418 | static void UpdatePixelViewport(SDL_Renderer *renderer, SDL_RenderViewState *view) | ||
| 419 | { | ||
| 420 | view->pixel_viewport.x = (int)SDL_floorf((view->viewport.x * view->current_scale.x) + view->logical_offset.x); | ||
| 421 | view->pixel_viewport.y = (int)SDL_floorf((view->viewport.y * view->current_scale.y) + view->logical_offset.y); | ||
| 422 | if (view->viewport.w >= 0) { | ||
| 423 | view->pixel_viewport.w = (int)SDL_ceilf(view->viewport.w * view->current_scale.x); | ||
| 424 | } else { | ||
| 425 | view->pixel_viewport.w = view->pixel_w; | ||
| 426 | } | ||
| 427 | if (view->viewport.h >= 0) { | ||
| 428 | view->pixel_viewport.h = (int)SDL_ceilf(view->viewport.h * view->current_scale.y); | ||
| 429 | } else { | ||
| 430 | view->pixel_viewport.h = view->pixel_h; | ||
| 431 | } | ||
| 432 | } | ||
| 433 | |||
| 434 | static bool QueueCmdSetViewport(SDL_Renderer *renderer) | ||
| 435 | { | ||
| 436 | bool result = true; | ||
| 437 | |||
| 438 | SDL_Rect viewport = renderer->view->pixel_viewport; | ||
| 439 | |||
| 440 | if (!renderer->viewport_queued || | ||
| 441 | SDL_memcmp(&viewport, &renderer->last_queued_viewport, sizeof(viewport)) != 0) { | ||
| 442 | SDL_RenderCommand *cmd = AllocateRenderCommand(renderer); | ||
| 443 | if (cmd) { | ||
| 444 | cmd->command = SDL_RENDERCMD_SETVIEWPORT; | ||
| 445 | cmd->data.viewport.first = 0; // render backend will fill this in. | ||
| 446 | SDL_copyp(&cmd->data.viewport.rect, &viewport); | ||
| 447 | result = renderer->QueueSetViewport(renderer, cmd); | ||
| 448 | if (!result) { | ||
| 449 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 450 | } else { | ||
| 451 | SDL_copyp(&renderer->last_queued_viewport, &viewport); | ||
| 452 | renderer->viewport_queued = true; | ||
| 453 | } | ||
| 454 | } else { | ||
| 455 | result = false; | ||
| 456 | } | ||
| 457 | } | ||
| 458 | return result; | ||
| 459 | } | ||
| 460 | |||
| 461 | static void UpdatePixelClipRect(SDL_Renderer *renderer, SDL_RenderViewState *view) | ||
| 462 | { | ||
| 463 | const float scale_x = view->current_scale.x; | ||
| 464 | const float scale_y = view->current_scale.y; | ||
| 465 | view->pixel_clip_rect.x = (int)SDL_floorf(view->clip_rect.x * scale_x); | ||
| 466 | view->pixel_clip_rect.y = (int)SDL_floorf(view->clip_rect.y * scale_y); | ||
| 467 | view->pixel_clip_rect.w = (int)SDL_ceilf(view->clip_rect.w * scale_x); | ||
| 468 | view->pixel_clip_rect.h = (int)SDL_ceilf(view->clip_rect.h * scale_y); | ||
| 469 | } | ||
| 470 | |||
| 471 | static bool QueueCmdSetClipRect(SDL_Renderer *renderer) | ||
| 472 | { | ||
| 473 | bool result = true; | ||
| 474 | |||
| 475 | const SDL_RenderViewState *view = renderer->view; | ||
| 476 | SDL_Rect clip_rect = view->pixel_clip_rect; | ||
| 477 | if (!renderer->cliprect_queued || | ||
| 478 | view->clipping_enabled != renderer->last_queued_cliprect_enabled || | ||
| 479 | SDL_memcmp(&clip_rect, &renderer->last_queued_cliprect, sizeof(clip_rect)) != 0) { | ||
| 480 | SDL_RenderCommand *cmd = AllocateRenderCommand(renderer); | ||
| 481 | if (cmd) { | ||
| 482 | cmd->command = SDL_RENDERCMD_SETCLIPRECT; | ||
| 483 | cmd->data.cliprect.enabled = view->clipping_enabled; | ||
| 484 | SDL_copyp(&cmd->data.cliprect.rect, &clip_rect); | ||
| 485 | SDL_copyp(&renderer->last_queued_cliprect, &clip_rect); | ||
| 486 | renderer->last_queued_cliprect_enabled = view->clipping_enabled; | ||
| 487 | renderer->cliprect_queued = true; | ||
| 488 | } else { | ||
| 489 | result = false; | ||
| 490 | } | ||
| 491 | } | ||
| 492 | return result; | ||
| 493 | } | ||
| 494 | |||
| 495 | static bool QueueCmdSetDrawColor(SDL_Renderer *renderer, SDL_FColor *color) | ||
| 496 | { | ||
| 497 | bool result = true; | ||
| 498 | |||
| 499 | if (!renderer->color_queued || | ||
| 500 | color->r != renderer->last_queued_color.r || | ||
| 501 | color->g != renderer->last_queued_color.g || | ||
| 502 | color->b != renderer->last_queued_color.b || | ||
| 503 | color->a != renderer->last_queued_color.a) { | ||
| 504 | SDL_RenderCommand *cmd = AllocateRenderCommand(renderer); | ||
| 505 | result = false; | ||
| 506 | |||
| 507 | if (cmd) { | ||
| 508 | cmd->command = SDL_RENDERCMD_SETDRAWCOLOR; | ||
| 509 | cmd->data.color.first = 0; // render backend will fill this in. | ||
| 510 | cmd->data.color.color_scale = renderer->color_scale; | ||
| 511 | cmd->data.color.color = *color; | ||
| 512 | result = renderer->QueueSetDrawColor(renderer, cmd); | ||
| 513 | if (!result) { | ||
| 514 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 515 | } else { | ||
| 516 | renderer->last_queued_color = *color; | ||
| 517 | renderer->color_queued = true; | ||
| 518 | } | ||
| 519 | } | ||
| 520 | } | ||
| 521 | return result; | ||
| 522 | } | ||
| 523 | |||
| 524 | static bool QueueCmdClear(SDL_Renderer *renderer) | ||
| 525 | { | ||
| 526 | SDL_RenderCommand *cmd = AllocateRenderCommand(renderer); | ||
| 527 | if (!cmd) { | ||
| 528 | return false; | ||
| 529 | } | ||
| 530 | |||
| 531 | cmd->command = SDL_RENDERCMD_CLEAR; | ||
| 532 | cmd->data.color.first = 0; | ||
| 533 | cmd->data.color.color_scale = renderer->color_scale; | ||
| 534 | cmd->data.color.color = renderer->color; | ||
| 535 | return true; | ||
| 536 | } | ||
| 537 | |||
| 538 | static SDL_RenderCommand *PrepQueueCmdDraw(SDL_Renderer *renderer, const SDL_RenderCommandType cmdtype, SDL_Texture *texture) | ||
| 539 | { | ||
| 540 | SDL_RenderCommand *cmd = NULL; | ||
| 541 | bool result = true; | ||
| 542 | SDL_FColor *color; | ||
| 543 | SDL_BlendMode blendMode; | ||
| 544 | |||
| 545 | if (texture) { | ||
| 546 | color = &texture->color; | ||
| 547 | blendMode = texture->blendMode; | ||
| 548 | } else { | ||
| 549 | color = &renderer->color; | ||
| 550 | blendMode = renderer->blendMode; | ||
| 551 | } | ||
| 552 | |||
| 553 | if (cmdtype != SDL_RENDERCMD_GEOMETRY) { | ||
| 554 | result = QueueCmdSetDrawColor(renderer, color); | ||
| 555 | } | ||
| 556 | |||
| 557 | /* Set the viewport and clip rect directly before draws, so the backends | ||
| 558 | * don't have to worry about that state not being valid at draw time. */ | ||
| 559 | if (result && !renderer->viewport_queued) { | ||
| 560 | result = QueueCmdSetViewport(renderer); | ||
| 561 | } | ||
| 562 | if (result && !renderer->cliprect_queued) { | ||
| 563 | result = QueueCmdSetClipRect(renderer); | ||
| 564 | } | ||
| 565 | |||
| 566 | if (result) { | ||
| 567 | cmd = AllocateRenderCommand(renderer); | ||
| 568 | if (cmd) { | ||
| 569 | cmd->command = cmdtype; | ||
| 570 | cmd->data.draw.first = 0; // render backend will fill this in. | ||
| 571 | cmd->data.draw.count = 0; // render backend will fill this in. | ||
| 572 | cmd->data.draw.color_scale = renderer->color_scale; | ||
| 573 | cmd->data.draw.color = *color; | ||
| 574 | cmd->data.draw.blend = blendMode; | ||
| 575 | cmd->data.draw.texture = texture; | ||
| 576 | cmd->data.draw.texture_address_mode = SDL_TEXTURE_ADDRESS_CLAMP; | ||
| 577 | } | ||
| 578 | } | ||
| 579 | return cmd; | ||
| 580 | } | ||
| 581 | |||
| 582 | static bool QueueCmdDrawPoints(SDL_Renderer *renderer, const SDL_FPoint *points, const int count) | ||
| 583 | { | ||
| 584 | SDL_RenderCommand *cmd = PrepQueueCmdDraw(renderer, SDL_RENDERCMD_DRAW_POINTS, NULL); | ||
| 585 | bool result = false; | ||
| 586 | if (cmd) { | ||
| 587 | result = renderer->QueueDrawPoints(renderer, cmd, points, count); | ||
| 588 | if (!result) { | ||
| 589 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 590 | } | ||
| 591 | } | ||
| 592 | return result; | ||
| 593 | } | ||
| 594 | |||
| 595 | static bool QueueCmdDrawLines(SDL_Renderer *renderer, const SDL_FPoint *points, const int count) | ||
| 596 | { | ||
| 597 | SDL_RenderCommand *cmd = PrepQueueCmdDraw(renderer, SDL_RENDERCMD_DRAW_LINES, NULL); | ||
| 598 | bool result = false; | ||
| 599 | if (cmd) { | ||
| 600 | result = renderer->QueueDrawLines(renderer, cmd, points, count); | ||
| 601 | if (!result) { | ||
| 602 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 603 | } | ||
| 604 | } | ||
| 605 | return result; | ||
| 606 | } | ||
| 607 | |||
| 608 | static bool QueueCmdFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, const int count) | ||
| 609 | { | ||
| 610 | SDL_RenderCommand *cmd; | ||
| 611 | bool result = false; | ||
| 612 | const int use_rendergeometry = (!renderer->QueueFillRects); | ||
| 613 | |||
| 614 | cmd = PrepQueueCmdDraw(renderer, (use_rendergeometry ? SDL_RENDERCMD_GEOMETRY : SDL_RENDERCMD_FILL_RECTS), NULL); | ||
| 615 | |||
| 616 | if (cmd) { | ||
| 617 | if (use_rendergeometry) { | ||
| 618 | bool isstack1; | ||
| 619 | bool isstack2; | ||
| 620 | float *xy = SDL_small_alloc(float, 4 * 2 * count, &isstack1); | ||
| 621 | int *indices = SDL_small_alloc(int, 6 * count, &isstack2); | ||
| 622 | |||
| 623 | if (xy && indices) { | ||
| 624 | int i; | ||
| 625 | float *ptr_xy = xy; | ||
| 626 | int *ptr_indices = indices; | ||
| 627 | const int xy_stride = 2 * sizeof(float); | ||
| 628 | const int num_vertices = 4 * count; | ||
| 629 | const int num_indices = 6 * count; | ||
| 630 | const int size_indices = 4; | ||
| 631 | int cur_index = 0; | ||
| 632 | |||
| 633 | for (i = 0; i < count; ++i) { | ||
| 634 | float minx, miny, maxx, maxy; | ||
| 635 | |||
| 636 | minx = rects[i].x; | ||
| 637 | miny = rects[i].y; | ||
| 638 | maxx = rects[i].x + rects[i].w; | ||
| 639 | maxy = rects[i].y + rects[i].h; | ||
| 640 | |||
| 641 | *ptr_xy++ = minx; | ||
| 642 | *ptr_xy++ = miny; | ||
| 643 | *ptr_xy++ = maxx; | ||
| 644 | *ptr_xy++ = miny; | ||
| 645 | *ptr_xy++ = maxx; | ||
| 646 | *ptr_xy++ = maxy; | ||
| 647 | *ptr_xy++ = minx; | ||
| 648 | *ptr_xy++ = maxy; | ||
| 649 | |||
| 650 | *ptr_indices++ = cur_index + rect_index_order[0]; | ||
| 651 | *ptr_indices++ = cur_index + rect_index_order[1]; | ||
| 652 | *ptr_indices++ = cur_index + rect_index_order[2]; | ||
| 653 | *ptr_indices++ = cur_index + rect_index_order[3]; | ||
| 654 | *ptr_indices++ = cur_index + rect_index_order[4]; | ||
| 655 | *ptr_indices++ = cur_index + rect_index_order[5]; | ||
| 656 | cur_index += 4; | ||
| 657 | } | ||
| 658 | |||
| 659 | result = renderer->QueueGeometry(renderer, cmd, NULL, | ||
| 660 | xy, xy_stride, &renderer->color, 0 /* color_stride */, NULL, 0, | ||
| 661 | num_vertices, indices, num_indices, size_indices, | ||
| 662 | 1.0f, 1.0f); | ||
| 663 | |||
| 664 | if (!result) { | ||
| 665 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 666 | } | ||
| 667 | } | ||
| 668 | SDL_small_free(xy, isstack1); | ||
| 669 | SDL_small_free(indices, isstack2); | ||
| 670 | |||
| 671 | } else { | ||
| 672 | result = renderer->QueueFillRects(renderer, cmd, rects, count); | ||
| 673 | if (!result) { | ||
| 674 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 675 | } | ||
| 676 | } | ||
| 677 | } | ||
| 678 | return result; | ||
| 679 | } | ||
| 680 | |||
| 681 | static bool QueueCmdCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect) | ||
| 682 | { | ||
| 683 | SDL_RenderCommand *cmd = PrepQueueCmdDraw(renderer, SDL_RENDERCMD_COPY, texture); | ||
| 684 | bool result = false; | ||
| 685 | if (cmd) { | ||
| 686 | result = renderer->QueueCopy(renderer, cmd, texture, srcrect, dstrect); | ||
| 687 | if (!result) { | ||
| 688 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 689 | } | ||
| 690 | } | ||
| 691 | return result; | ||
| 692 | } | ||
| 693 | |||
| 694 | static bool QueueCmdCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 695 | const SDL_FRect *srcquad, const SDL_FRect *dstrect, | ||
| 696 | const double angle, const SDL_FPoint *center, const SDL_FlipMode flip, float scale_x, float scale_y) | ||
| 697 | { | ||
| 698 | SDL_RenderCommand *cmd = PrepQueueCmdDraw(renderer, SDL_RENDERCMD_COPY_EX, texture); | ||
| 699 | bool result = false; | ||
| 700 | if (cmd) { | ||
| 701 | result = renderer->QueueCopyEx(renderer, cmd, texture, srcquad, dstrect, angle, center, flip, scale_x, scale_y); | ||
| 702 | if (!result) { | ||
| 703 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 704 | } | ||
| 705 | } | ||
| 706 | return result; | ||
| 707 | } | ||
| 708 | |||
| 709 | static bool QueueCmdGeometry(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 710 | const float *xy, int xy_stride, | ||
| 711 | const SDL_FColor *color, int color_stride, | ||
| 712 | const float *uv, int uv_stride, | ||
| 713 | int num_vertices, | ||
| 714 | const void *indices, int num_indices, int size_indices, | ||
| 715 | float scale_x, float scale_y, SDL_TextureAddressMode texture_address_mode) | ||
| 716 | { | ||
| 717 | SDL_RenderCommand *cmd; | ||
| 718 | bool result = false; | ||
| 719 | cmd = PrepQueueCmdDraw(renderer, SDL_RENDERCMD_GEOMETRY, texture); | ||
| 720 | if (cmd) { | ||
| 721 | cmd->data.draw.texture_address_mode = texture_address_mode; | ||
| 722 | result = renderer->QueueGeometry(renderer, cmd, texture, | ||
| 723 | xy, xy_stride, | ||
| 724 | color, color_stride, uv, uv_stride, | ||
| 725 | num_vertices, indices, num_indices, size_indices, | ||
| 726 | scale_x, scale_y); | ||
| 727 | if (!result) { | ||
| 728 | cmd->command = SDL_RENDERCMD_NO_OP; | ||
| 729 | } | ||
| 730 | } | ||
| 731 | return result; | ||
| 732 | } | ||
| 733 | |||
| 734 | static void UpdateMainViewDimensions(SDL_Renderer *renderer) | ||
| 735 | { | ||
| 736 | int window_w = 0, window_h = 0; | ||
| 737 | |||
| 738 | if (renderer->window) { | ||
| 739 | SDL_GetWindowSize(renderer->window, &window_w, &window_h); | ||
| 740 | } | ||
| 741 | |||
| 742 | SDL_GetRenderOutputSize(renderer, &renderer->main_view.pixel_w, &renderer->main_view.pixel_h); | ||
| 743 | |||
| 744 | if (window_w > 0 && window_h > 0) { | ||
| 745 | renderer->dpi_scale.x = (float)renderer->main_view.pixel_w / window_w; | ||
| 746 | renderer->dpi_scale.y = (float)renderer->main_view.pixel_h / window_h; | ||
| 747 | } else { | ||
| 748 | renderer->dpi_scale.x = 1.0f; | ||
| 749 | renderer->dpi_scale.y = 1.0f; | ||
| 750 | } | ||
| 751 | UpdatePixelViewport(renderer, &renderer->main_view); | ||
| 752 | } | ||
| 753 | |||
| 754 | static void UpdateColorScale(SDL_Renderer *renderer) | ||
| 755 | { | ||
| 756 | float SDR_white_point; | ||
| 757 | if (renderer->target) { | ||
| 758 | SDR_white_point = renderer->target->SDR_white_point; | ||
| 759 | } else { | ||
| 760 | SDR_white_point = renderer->SDR_white_point; | ||
| 761 | } | ||
| 762 | renderer->color_scale = renderer->desired_color_scale * SDR_white_point; | ||
| 763 | } | ||
| 764 | |||
| 765 | static void UpdateHDRProperties(SDL_Renderer *renderer) | ||
| 766 | { | ||
| 767 | SDL_PropertiesID window_props; | ||
| 768 | SDL_PropertiesID renderer_props; | ||
| 769 | |||
| 770 | window_props = SDL_GetWindowProperties(renderer->window); | ||
| 771 | if (!window_props) { | ||
| 772 | return; | ||
| 773 | } | ||
| 774 | |||
| 775 | renderer_props = SDL_GetRendererProperties(renderer); | ||
| 776 | if (!renderer_props) { | ||
| 777 | return; | ||
| 778 | } | ||
| 779 | |||
| 780 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 781 | renderer->SDR_white_point = SDL_GetFloatProperty(window_props, SDL_PROP_WINDOW_SDR_WHITE_LEVEL_FLOAT, 1.0f); | ||
| 782 | renderer->HDR_headroom = SDL_GetFloatProperty(window_props, SDL_PROP_WINDOW_HDR_HEADROOM_FLOAT, 1.0f); | ||
| 783 | } else { | ||
| 784 | renderer->SDR_white_point = 1.0f; | ||
| 785 | renderer->HDR_headroom = 1.0f; | ||
| 786 | } | ||
| 787 | |||
| 788 | if (renderer->HDR_headroom > 1.0f) { | ||
| 789 | SDL_SetBooleanProperty(renderer_props, SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN, true); | ||
| 790 | } else { | ||
| 791 | SDL_SetBooleanProperty(renderer_props, SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN, false); | ||
| 792 | } | ||
| 793 | SDL_SetFloatProperty(renderer_props, SDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT, renderer->SDR_white_point); | ||
| 794 | SDL_SetFloatProperty(renderer_props, SDL_PROP_RENDERER_HDR_HEADROOM_FLOAT, renderer->HDR_headroom); | ||
| 795 | |||
| 796 | UpdateColorScale(renderer); | ||
| 797 | } | ||
| 798 | |||
| 799 | static void UpdateLogicalPresentation(SDL_Renderer *renderer); | ||
| 800 | |||
| 801 | |||
| 802 | int SDL_GetNumRenderDrivers(void) | ||
| 803 | { | ||
| 804 | #ifndef SDL_RENDER_DISABLED | ||
| 805 | return SDL_arraysize(render_drivers) - 1; | ||
| 806 | #else | ||
| 807 | return 0; | ||
| 808 | #endif | ||
| 809 | } | ||
| 810 | |||
| 811 | const char *SDL_GetRenderDriver(int index) | ||
| 812 | { | ||
| 813 | #ifndef SDL_RENDER_DISABLED | ||
| 814 | if (index < 0 || index >= SDL_GetNumRenderDrivers()) { | ||
| 815 | SDL_InvalidParamError("index"); | ||
| 816 | return NULL; | ||
| 817 | } | ||
| 818 | return render_drivers[index]->name; | ||
| 819 | #else | ||
| 820 | SDL_SetError("SDL not built with rendering support"); | ||
| 821 | return NULL; | ||
| 822 | #endif | ||
| 823 | } | ||
| 824 | |||
| 825 | static bool SDL_RendererEventWatch(void *userdata, SDL_Event *event) | ||
| 826 | { | ||
| 827 | SDL_Renderer *renderer = (SDL_Renderer *)userdata; | ||
| 828 | SDL_Window *window = renderer->window; | ||
| 829 | |||
| 830 | if (renderer->WindowEvent) { | ||
| 831 | renderer->WindowEvent(renderer, &event->window); | ||
| 832 | } | ||
| 833 | |||
| 834 | if (event->type == SDL_EVENT_WINDOW_RESIZED || | ||
| 835 | event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED || | ||
| 836 | event->type == SDL_EVENT_WINDOW_METAL_VIEW_RESIZED) { | ||
| 837 | SDL_RenderViewState *view = renderer->view; | ||
| 838 | renderer->view = &renderer->main_view; // only update the main_view (the window framebuffer) for window changes. | ||
| 839 | UpdateLogicalPresentation(renderer); | ||
| 840 | renderer->view = view; // put us back on whatever the current render target's actual view is. | ||
| 841 | } else if (event->type == SDL_EVENT_WINDOW_HIDDEN) { | ||
| 842 | renderer->hidden = true; | ||
| 843 | } else if (event->type == SDL_EVENT_WINDOW_SHOWN) { | ||
| 844 | if (!(SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)) { | ||
| 845 | renderer->hidden = false; | ||
| 846 | } | ||
| 847 | } else if (event->type == SDL_EVENT_WINDOW_MINIMIZED) { | ||
| 848 | renderer->hidden = true; | ||
| 849 | } else if (event->type == SDL_EVENT_WINDOW_RESTORED || | ||
| 850 | event->type == SDL_EVENT_WINDOW_MAXIMIZED) { | ||
| 851 | if (!(SDL_GetWindowFlags(window) & SDL_WINDOW_HIDDEN)) { | ||
| 852 | renderer->hidden = false; | ||
| 853 | } | ||
| 854 | } else if (event->type == SDL_EVENT_WINDOW_DISPLAY_CHANGED || | ||
| 855 | event->type == SDL_EVENT_WINDOW_HDR_STATE_CHANGED) { | ||
| 856 | UpdateHDRProperties(renderer); | ||
| 857 | } | ||
| 858 | return true; | ||
| 859 | } | ||
| 860 | |||
| 861 | bool SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer) | ||
| 862 | { | ||
| 863 | bool hidden = (window_flags & SDL_WINDOW_HIDDEN) != 0; | ||
| 864 | |||
| 865 | if (!window) { | ||
| 866 | return SDL_InvalidParamError("window"); | ||
| 867 | } | ||
| 868 | |||
| 869 | if (!renderer) { | ||
| 870 | return SDL_InvalidParamError("renderer"); | ||
| 871 | } | ||
| 872 | |||
| 873 | // Hide the window so if the renderer recreates it, we don't get a visual flash on screen | ||
| 874 | window_flags |= SDL_WINDOW_HIDDEN; | ||
| 875 | *window = SDL_CreateWindow(title, width, height, window_flags); | ||
| 876 | if (!*window) { | ||
| 877 | *renderer = NULL; | ||
| 878 | return false; | ||
| 879 | } | ||
| 880 | |||
| 881 | *renderer = SDL_CreateRenderer(*window, NULL); | ||
| 882 | if (!*renderer) { | ||
| 883 | SDL_DestroyWindow(*window); | ||
| 884 | *window = NULL; | ||
| 885 | return false; | ||
| 886 | } | ||
| 887 | |||
| 888 | if (!hidden) { | ||
| 889 | SDL_ShowWindow(*window); | ||
| 890 | } | ||
| 891 | |||
| 892 | return true; | ||
| 893 | } | ||
| 894 | |||
| 895 | #ifndef SDL_RENDER_DISABLED | ||
| 896 | static SDL_INLINE void VerifyDrawQueueFunctions(const SDL_Renderer *renderer) | ||
| 897 | { | ||
| 898 | /* all of these functions are required to be implemented, even as no-ops, so we don't | ||
| 899 | have to check that they aren't NULL over and over. */ | ||
| 900 | SDL_assert(renderer->QueueSetViewport != NULL); | ||
| 901 | SDL_assert(renderer->QueueSetDrawColor != NULL); | ||
| 902 | SDL_assert(renderer->QueueDrawPoints != NULL); | ||
| 903 | SDL_assert(renderer->QueueDrawLines != NULL || renderer->QueueGeometry != NULL); | ||
| 904 | SDL_assert(renderer->QueueFillRects != NULL || renderer->QueueGeometry != NULL); | ||
| 905 | SDL_assert(renderer->QueueCopy != NULL || renderer->QueueGeometry != NULL); | ||
| 906 | SDL_assert(renderer->RunCommandQueue != NULL); | ||
| 907 | } | ||
| 908 | |||
| 909 | static SDL_RenderLineMethod SDL_GetRenderLineMethod(void) | ||
| 910 | { | ||
| 911 | const char *hint = SDL_GetHint(SDL_HINT_RENDER_LINE_METHOD); | ||
| 912 | |||
| 913 | int method = 0; | ||
| 914 | if (hint) { | ||
| 915 | method = SDL_atoi(hint); | ||
| 916 | } | ||
| 917 | switch (method) { | ||
| 918 | case 1: | ||
| 919 | return SDL_RENDERLINEMETHOD_POINTS; | ||
| 920 | case 2: | ||
| 921 | return SDL_RENDERLINEMETHOD_LINES; | ||
| 922 | case 3: | ||
| 923 | return SDL_RENDERLINEMETHOD_GEOMETRY; | ||
| 924 | default: | ||
| 925 | return SDL_RENDERLINEMETHOD_POINTS; | ||
| 926 | } | ||
| 927 | } | ||
| 928 | |||
| 929 | static void SDL_CalculateSimulatedVSyncInterval(SDL_Renderer *renderer, SDL_Window *window) | ||
| 930 | { | ||
| 931 | SDL_DisplayID displayID = SDL_GetDisplayForWindow(window); | ||
| 932 | const SDL_DisplayMode *mode; | ||
| 933 | int refresh_num, refresh_den; | ||
| 934 | |||
| 935 | if (displayID == 0) { | ||
| 936 | displayID = SDL_GetPrimaryDisplay(); | ||
| 937 | } | ||
| 938 | mode = SDL_GetDesktopDisplayMode(displayID); | ||
| 939 | if (mode && mode->refresh_rate_numerator > 0 && mode->refresh_rate_denominator > 0) { | ||
| 940 | refresh_num = mode->refresh_rate_numerator; | ||
| 941 | refresh_den = mode->refresh_rate_denominator; | ||
| 942 | } else { | ||
| 943 | // Pick a good default refresh rate | ||
| 944 | refresh_num = 60; | ||
| 945 | refresh_den = 1; | ||
| 946 | } | ||
| 947 | // Flip numerator and denominator to change from framerate to interval | ||
| 948 | renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND * refresh_den) / refresh_num; | ||
| 949 | } | ||
| 950 | |||
| 951 | #endif // !SDL_RENDER_DISABLED | ||
| 952 | |||
| 953 | |||
| 954 | SDL_Renderer *SDL_CreateRendererWithProperties(SDL_PropertiesID props) | ||
| 955 | { | ||
| 956 | #ifndef SDL_RENDER_DISABLED | ||
| 957 | SDL_Window *window = (SDL_Window *)SDL_GetPointerProperty(props, SDL_PROP_RENDERER_CREATE_WINDOW_POINTER, NULL); | ||
| 958 | SDL_Surface *surface = (SDL_Surface *)SDL_GetPointerProperty(props, SDL_PROP_RENDERER_CREATE_SURFACE_POINTER, NULL); | ||
| 959 | const char *driver_name = SDL_GetStringProperty(props, SDL_PROP_RENDERER_CREATE_NAME_STRING, NULL); | ||
| 960 | const char *hint; | ||
| 961 | SDL_PropertiesID new_props; | ||
| 962 | |||
| 963 | #ifdef SDL_PLATFORM_ANDROID | ||
| 964 | if (!Android_WaitActiveAndLockActivity()) { | ||
| 965 | return NULL; | ||
| 966 | } | ||
| 967 | #endif | ||
| 968 | |||
| 969 | SDL_Renderer *renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); | ||
| 970 | if (!renderer) { | ||
| 971 | goto error; | ||
| 972 | } | ||
| 973 | |||
| 974 | SDL_SetObjectValid(renderer, SDL_OBJECT_TYPE_RENDERER, true); | ||
| 975 | |||
| 976 | if ((!window && !surface) || (window && surface)) { | ||
| 977 | SDL_InvalidParamError("window"); | ||
| 978 | goto error; | ||
| 979 | } | ||
| 980 | |||
| 981 | if (window && SDL_WindowHasSurface(window)) { | ||
| 982 | SDL_SetError("Surface already associated with window"); | ||
| 983 | goto error; | ||
| 984 | } | ||
| 985 | |||
| 986 | if (window && SDL_GetRenderer(window)) { | ||
| 987 | SDL_SetError("Renderer already associated with window"); | ||
| 988 | goto error; | ||
| 989 | } | ||
| 990 | |||
| 991 | hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC); | ||
| 992 | if (hint && *hint) { | ||
| 993 | SDL_SetNumberProperty(props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, SDL_GetHintBoolean(SDL_HINT_RENDER_VSYNC, true)); | ||
| 994 | } | ||
| 995 | |||
| 996 | if (surface) { | ||
| 997 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 998 | const bool rc = SW_CreateRendererForSurface(renderer, surface, props); | ||
| 999 | #else | ||
| 1000 | const bool rc = SDL_SetError("SDL not built with software renderer"); | ||
| 1001 | #endif | ||
| 1002 | if (!rc) { | ||
| 1003 | goto error; | ||
| 1004 | } | ||
| 1005 | } else { | ||
| 1006 | bool rc = false; | ||
| 1007 | if (!driver_name) { | ||
| 1008 | driver_name = SDL_GetHint(SDL_HINT_RENDER_DRIVER); | ||
| 1009 | } | ||
| 1010 | |||
| 1011 | if (driver_name && *driver_name != 0) { | ||
| 1012 | const char *driver_attempt = driver_name; | ||
| 1013 | while (driver_attempt && *driver_attempt != 0 && !rc) { | ||
| 1014 | const char *driver_attempt_end = SDL_strchr(driver_attempt, ','); | ||
| 1015 | const size_t driver_attempt_len = (driver_attempt_end) ? (driver_attempt_end - driver_attempt) : SDL_strlen(driver_attempt); | ||
| 1016 | |||
| 1017 | for (int i = 0; render_drivers[i]; i++) { | ||
| 1018 | const SDL_RenderDriver *driver = render_drivers[i]; | ||
| 1019 | if ((driver_attempt_len == SDL_strlen(driver->name)) && (SDL_strncasecmp(driver->name, driver_attempt, driver_attempt_len) == 0)) { | ||
| 1020 | rc = driver->CreateRenderer(renderer, window, props); | ||
| 1021 | if (rc) { | ||
| 1022 | break; | ||
| 1023 | } | ||
| 1024 | } | ||
| 1025 | } | ||
| 1026 | |||
| 1027 | driver_attempt = (driver_attempt_end) ? (driver_attempt_end + 1) : NULL; | ||
| 1028 | } | ||
| 1029 | } else { | ||
| 1030 | for (int i = 0; render_drivers[i]; i++) { | ||
| 1031 | const SDL_RenderDriver *driver = render_drivers[i]; | ||
| 1032 | rc = driver->CreateRenderer(renderer, window, props); | ||
| 1033 | if (rc) { | ||
| 1034 | break; | ||
| 1035 | } | ||
| 1036 | SDL_DestroyRendererWithoutFreeing(renderer); | ||
| 1037 | SDL_zerop(renderer); // make sure we don't leave function pointers from a previous CreateRenderer() in this struct. | ||
| 1038 | } | ||
| 1039 | } | ||
| 1040 | |||
| 1041 | if (!rc) { | ||
| 1042 | if (driver_name) { | ||
| 1043 | SDL_SetError("%s not available", driver_name); | ||
| 1044 | } else { | ||
| 1045 | SDL_SetError("Couldn't find matching render driver"); | ||
| 1046 | } | ||
| 1047 | goto error; | ||
| 1048 | } | ||
| 1049 | } | ||
| 1050 | |||
| 1051 | VerifyDrawQueueFunctions(renderer); | ||
| 1052 | |||
| 1053 | renderer->window = window; | ||
| 1054 | renderer->target_mutex = SDL_CreateMutex(); | ||
| 1055 | if (surface) { | ||
| 1056 | renderer->main_view.pixel_w = surface->w; | ||
| 1057 | renderer->main_view.pixel_h = surface->h; | ||
| 1058 | } | ||
| 1059 | renderer->main_view.viewport.w = -1; | ||
| 1060 | renderer->main_view.viewport.h = -1; | ||
| 1061 | renderer->main_view.scale.x = 1.0f; | ||
| 1062 | renderer->main_view.scale.y = 1.0f; | ||
| 1063 | renderer->main_view.logical_scale.x = 1.0f; | ||
| 1064 | renderer->main_view.logical_scale.y = 1.0f; | ||
| 1065 | renderer->main_view.current_scale.x = 1.0f; | ||
| 1066 | renderer->main_view.current_scale.y = 1.0f; | ||
| 1067 | renderer->view = &renderer->main_view; | ||
| 1068 | renderer->dpi_scale.x = 1.0f; | ||
| 1069 | renderer->dpi_scale.y = 1.0f; | ||
| 1070 | UpdatePixelViewport(renderer, &renderer->main_view); | ||
| 1071 | UpdatePixelClipRect(renderer, &renderer->main_view); | ||
| 1072 | UpdateMainViewDimensions(renderer); | ||
| 1073 | |||
| 1074 | // new textures start at zero, so we start at 1 so first render doesn't flush by accident. | ||
| 1075 | renderer->render_command_generation = 1; | ||
| 1076 | |||
| 1077 | if (renderer->software) { | ||
| 1078 | // Software renderer always uses line method, for speed | ||
| 1079 | renderer->line_method = SDL_RENDERLINEMETHOD_LINES; | ||
| 1080 | } else { | ||
| 1081 | renderer->line_method = SDL_GetRenderLineMethod(); | ||
| 1082 | } | ||
| 1083 | |||
| 1084 | renderer->SDR_white_point = 1.0f; | ||
| 1085 | renderer->HDR_headroom = 1.0f; | ||
| 1086 | renderer->desired_color_scale = 1.0f; | ||
| 1087 | renderer->color_scale = 1.0f; | ||
| 1088 | |||
| 1089 | if (window) { | ||
| 1090 | if (SDL_GetWindowFlags(window) & SDL_WINDOW_TRANSPARENT) { | ||
| 1091 | renderer->transparent_window = true; | ||
| 1092 | } | ||
| 1093 | |||
| 1094 | if (SDL_GetWindowFlags(window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED)) { | ||
| 1095 | renderer->hidden = true; | ||
| 1096 | } | ||
| 1097 | } | ||
| 1098 | |||
| 1099 | new_props = SDL_GetRendererProperties(renderer); | ||
| 1100 | SDL_SetStringProperty(new_props, SDL_PROP_RENDERER_NAME_STRING, renderer->name); | ||
| 1101 | if (window) { | ||
| 1102 | SDL_SetPointerProperty(new_props, SDL_PROP_RENDERER_WINDOW_POINTER, window); | ||
| 1103 | } | ||
| 1104 | if (surface) { | ||
| 1105 | SDL_SetPointerProperty(new_props, SDL_PROP_RENDERER_SURFACE_POINTER, surface); | ||
| 1106 | } | ||
| 1107 | SDL_SetNumberProperty(new_props, SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER, renderer->output_colorspace); | ||
| 1108 | UpdateHDRProperties(renderer); | ||
| 1109 | |||
| 1110 | if (window) { | ||
| 1111 | SDL_SetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_RENDERER_POINTER, renderer); | ||
| 1112 | SDL_AddWindowRenderer(window, renderer); | ||
| 1113 | } | ||
| 1114 | |||
| 1115 | SDL_SetRenderViewport(renderer, NULL); | ||
| 1116 | |||
| 1117 | if (window) { | ||
| 1118 | SDL_AddWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, SDL_RendererEventWatch, renderer); | ||
| 1119 | } | ||
| 1120 | |||
| 1121 | int vsync = (int)SDL_GetNumberProperty(props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, 0); | ||
| 1122 | if (!SDL_SetRenderVSync(renderer, vsync)) { | ||
| 1123 | if (vsync == 0) { | ||
| 1124 | // Some renderers require vsync enabled | ||
| 1125 | SDL_SetRenderVSync(renderer, 1); | ||
| 1126 | } | ||
| 1127 | } | ||
| 1128 | SDL_CalculateSimulatedVSyncInterval(renderer, window); | ||
| 1129 | |||
| 1130 | SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, | ||
| 1131 | "Created renderer: %s", renderer->name); | ||
| 1132 | |||
| 1133 | renderer->next = SDL_renderers; | ||
| 1134 | SDL_renderers = renderer; | ||
| 1135 | |||
| 1136 | #ifdef SDL_PLATFORM_ANDROID | ||
| 1137 | Android_UnlockActivityMutex(); | ||
| 1138 | #endif | ||
| 1139 | |||
| 1140 | SDL_ClearError(); | ||
| 1141 | |||
| 1142 | return renderer; | ||
| 1143 | |||
| 1144 | error: | ||
| 1145 | #ifdef SDL_PLATFORM_ANDROID | ||
| 1146 | Android_UnlockActivityMutex(); | ||
| 1147 | #endif | ||
| 1148 | |||
| 1149 | if (renderer) { | ||
| 1150 | SDL_DestroyRenderer(renderer); | ||
| 1151 | } | ||
| 1152 | return NULL; | ||
| 1153 | |||
| 1154 | #else | ||
| 1155 | SDL_SetError("SDL not built with rendering support"); | ||
| 1156 | return NULL; | ||
| 1157 | #endif | ||
| 1158 | } | ||
| 1159 | |||
| 1160 | SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, const char *name) | ||
| 1161 | { | ||
| 1162 | SDL_Renderer *renderer; | ||
| 1163 | SDL_PropertiesID props = SDL_CreateProperties(); | ||
| 1164 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_WINDOW_POINTER, window); | ||
| 1165 | SDL_SetStringProperty(props, SDL_PROP_RENDERER_CREATE_NAME_STRING, name); | ||
| 1166 | renderer = SDL_CreateRendererWithProperties(props); | ||
| 1167 | SDL_DestroyProperties(props); | ||
| 1168 | return renderer; | ||
| 1169 | } | ||
| 1170 | |||
| 1171 | SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface) | ||
| 1172 | { | ||
| 1173 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 1174 | SDL_Renderer *renderer; | ||
| 1175 | |||
| 1176 | if (!surface) { | ||
| 1177 | SDL_InvalidParamError("surface"); | ||
| 1178 | return NULL; | ||
| 1179 | } | ||
| 1180 | |||
| 1181 | SDL_PropertiesID props = SDL_CreateProperties(); | ||
| 1182 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_SURFACE_POINTER, surface); | ||
| 1183 | renderer = SDL_CreateRendererWithProperties(props); | ||
| 1184 | SDL_DestroyProperties(props); | ||
| 1185 | return renderer; | ||
| 1186 | #else | ||
| 1187 | SDL_SetError("SDL not built with rendering support"); | ||
| 1188 | return NULL; | ||
| 1189 | #endif // !SDL_RENDER_DISABLED | ||
| 1190 | } | ||
| 1191 | |||
| 1192 | SDL_Renderer *SDL_GetRenderer(SDL_Window *window) | ||
| 1193 | { | ||
| 1194 | return (SDL_Renderer *)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_RENDERER_POINTER, NULL); | ||
| 1195 | } | ||
| 1196 | |||
| 1197 | SDL_Window *SDL_GetRenderWindow(SDL_Renderer *renderer) | ||
| 1198 | { | ||
| 1199 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 1200 | return renderer->window; | ||
| 1201 | } | ||
| 1202 | |||
| 1203 | const char *SDL_GetRendererName(SDL_Renderer *renderer) | ||
| 1204 | { | ||
| 1205 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 1206 | |||
| 1207 | return SDL_GetPersistentString(renderer->name); | ||
| 1208 | } | ||
| 1209 | |||
| 1210 | SDL_PropertiesID SDL_GetRendererProperties(SDL_Renderer *renderer) | ||
| 1211 | { | ||
| 1212 | CHECK_RENDERER_MAGIC(renderer, 0); | ||
| 1213 | |||
| 1214 | if (renderer->props == 0) { | ||
| 1215 | renderer->props = SDL_CreateProperties(); | ||
| 1216 | } | ||
| 1217 | return renderer->props; | ||
| 1218 | } | ||
| 1219 | |||
| 1220 | bool SDL_GetRenderOutputSize(SDL_Renderer *renderer, int *w, int *h) | ||
| 1221 | { | ||
| 1222 | if (w) { | ||
| 1223 | *w = 0; | ||
| 1224 | } | ||
| 1225 | if (h) { | ||
| 1226 | *h = 0; | ||
| 1227 | } | ||
| 1228 | |||
| 1229 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 1230 | |||
| 1231 | if (renderer->GetOutputSize) { | ||
| 1232 | return renderer->GetOutputSize(renderer, w, h); | ||
| 1233 | } else if (renderer->window) { | ||
| 1234 | return SDL_GetWindowSizeInPixels(renderer->window, w, h); | ||
| 1235 | } else { | ||
| 1236 | SDL_assert(!"This should never happen"); | ||
| 1237 | return SDL_SetError("Renderer doesn't support querying output size"); | ||
| 1238 | } | ||
| 1239 | } | ||
| 1240 | |||
| 1241 | bool SDL_GetCurrentRenderOutputSize(SDL_Renderer *renderer, int *w, int *h) | ||
| 1242 | { | ||
| 1243 | if (w) { | ||
| 1244 | *w = 0; | ||
| 1245 | } | ||
| 1246 | if (h) { | ||
| 1247 | *h = 0; | ||
| 1248 | } | ||
| 1249 | |||
| 1250 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 1251 | |||
| 1252 | const SDL_RenderViewState *view = renderer->view; | ||
| 1253 | if (w) { | ||
| 1254 | *w = view->pixel_w; | ||
| 1255 | } | ||
| 1256 | if (h) { | ||
| 1257 | *h = view->pixel_h; | ||
| 1258 | } | ||
| 1259 | return true; | ||
| 1260 | } | ||
| 1261 | |||
| 1262 | static bool IsSupportedBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 1263 | { | ||
| 1264 | switch (blendMode) { | ||
| 1265 | // These are required to be supported by all renderers | ||
| 1266 | case SDL_BLENDMODE_NONE: | ||
| 1267 | case SDL_BLENDMODE_BLEND: | ||
| 1268 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 1269 | case SDL_BLENDMODE_ADD: | ||
| 1270 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 1271 | case SDL_BLENDMODE_MOD: | ||
| 1272 | case SDL_BLENDMODE_MUL: | ||
| 1273 | return true; | ||
| 1274 | |||
| 1275 | default: | ||
| 1276 | return renderer->SupportsBlendMode && renderer->SupportsBlendMode(renderer, blendMode); | ||
| 1277 | } | ||
| 1278 | } | ||
| 1279 | |||
| 1280 | static bool IsSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormat format) | ||
| 1281 | { | ||
| 1282 | int i; | ||
| 1283 | |||
| 1284 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1285 | if (renderer->texture_formats[i] == format) { | ||
| 1286 | return true; | ||
| 1287 | } | ||
| 1288 | } | ||
| 1289 | return false; | ||
| 1290 | } | ||
| 1291 | |||
| 1292 | static SDL_PixelFormat GetClosestSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormat format) | ||
| 1293 | { | ||
| 1294 | int i; | ||
| 1295 | |||
| 1296 | if (format == SDL_PIXELFORMAT_MJPG) { | ||
| 1297 | // We'll decode to SDL_PIXELFORMAT_NV12 or SDL_PIXELFORMAT_RGBA32 | ||
| 1298 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1299 | if (renderer->texture_formats[i] == SDL_PIXELFORMAT_NV12) { | ||
| 1300 | return renderer->texture_formats[i]; | ||
| 1301 | } | ||
| 1302 | } | ||
| 1303 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1304 | if (renderer->texture_formats[i] == SDL_PIXELFORMAT_RGBA32) { | ||
| 1305 | return renderer->texture_formats[i]; | ||
| 1306 | } | ||
| 1307 | } | ||
| 1308 | } else if (SDL_ISPIXELFORMAT_FOURCC(format)) { | ||
| 1309 | // Look for an exact match | ||
| 1310 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1311 | if (renderer->texture_formats[i] == format) { | ||
| 1312 | return renderer->texture_formats[i]; | ||
| 1313 | } | ||
| 1314 | } | ||
| 1315 | } else if (SDL_ISPIXELFORMAT_10BIT(format) || SDL_ISPIXELFORMAT_FLOAT(format)) { | ||
| 1316 | if (SDL_ISPIXELFORMAT_10BIT(format)) { | ||
| 1317 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1318 | if (SDL_ISPIXELFORMAT_10BIT(renderer->texture_formats[i])) { | ||
| 1319 | return renderer->texture_formats[i]; | ||
| 1320 | } | ||
| 1321 | } | ||
| 1322 | } | ||
| 1323 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1324 | if (SDL_ISPIXELFORMAT_FLOAT(renderer->texture_formats[i])) { | ||
| 1325 | return renderer->texture_formats[i]; | ||
| 1326 | } | ||
| 1327 | } | ||
| 1328 | } else { | ||
| 1329 | bool hasAlpha = SDL_ISPIXELFORMAT_ALPHA(format); | ||
| 1330 | |||
| 1331 | // We just want to match the first format that has the same channels | ||
| 1332 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1333 | if (!SDL_ISPIXELFORMAT_FOURCC(renderer->texture_formats[i]) && | ||
| 1334 | SDL_ISPIXELFORMAT_ALPHA(renderer->texture_formats[i]) == hasAlpha) { | ||
| 1335 | return renderer->texture_formats[i]; | ||
| 1336 | } | ||
| 1337 | } | ||
| 1338 | } | ||
| 1339 | return renderer->texture_formats[0]; | ||
| 1340 | } | ||
| 1341 | |||
| 1342 | SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props) | ||
| 1343 | { | ||
| 1344 | SDL_Texture *texture; | ||
| 1345 | SDL_PixelFormat format = (SDL_PixelFormat)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER, SDL_PIXELFORMAT_UNKNOWN); | ||
| 1346 | SDL_TextureAccess access = (SDL_TextureAccess)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, SDL_TEXTUREACCESS_STATIC); | ||
| 1347 | int w = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, 0); | ||
| 1348 | int h = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, 0); | ||
| 1349 | SDL_Colorspace default_colorspace; | ||
| 1350 | bool texture_is_fourcc_and_target; | ||
| 1351 | |||
| 1352 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 1353 | |||
| 1354 | if (!format) { | ||
| 1355 | format = renderer->texture_formats[0]; | ||
| 1356 | } | ||
| 1357 | if (SDL_BYTESPERPIXEL(format) == 0) { | ||
| 1358 | SDL_SetError("Invalid texture format"); | ||
| 1359 | return NULL; | ||
| 1360 | } | ||
| 1361 | if (SDL_ISPIXELFORMAT_INDEXED(format)) { | ||
| 1362 | if (!IsSupportedFormat(renderer, format)) { | ||
| 1363 | SDL_SetError("Palettized textures are not supported"); | ||
| 1364 | return NULL; | ||
| 1365 | } | ||
| 1366 | } | ||
| 1367 | if (w <= 0 || h <= 0) { | ||
| 1368 | SDL_SetError("Texture dimensions can't be 0"); | ||
| 1369 | return NULL; | ||
| 1370 | } | ||
| 1371 | int max_texture_size = (int)SDL_GetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 0); | ||
| 1372 | if (max_texture_size && (w > max_texture_size || h > max_texture_size)) { | ||
| 1373 | SDL_SetError("Texture dimensions are limited to %dx%d", max_texture_size, max_texture_size); | ||
| 1374 | return NULL; | ||
| 1375 | } | ||
| 1376 | |||
| 1377 | default_colorspace = SDL_GetDefaultColorspaceForFormat(format); | ||
| 1378 | |||
| 1379 | texture = (SDL_Texture *)SDL_calloc(1, sizeof(*texture)); | ||
| 1380 | if (!texture) { | ||
| 1381 | return NULL; | ||
| 1382 | } | ||
| 1383 | texture->refcount = 1; | ||
| 1384 | SDL_SetObjectValid(texture, SDL_OBJECT_TYPE_TEXTURE, true); | ||
| 1385 | texture->colorspace = (SDL_Colorspace)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, default_colorspace); | ||
| 1386 | texture->format = format; | ||
| 1387 | texture->access = access; | ||
| 1388 | texture->w = w; | ||
| 1389 | texture->h = h; | ||
| 1390 | texture->color.r = 1.0f; | ||
| 1391 | texture->color.g = 1.0f; | ||
| 1392 | texture->color.b = 1.0f; | ||
| 1393 | texture->color.a = 1.0f; | ||
| 1394 | texture->blendMode = SDL_ISPIXELFORMAT_ALPHA(format) ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE; | ||
| 1395 | texture->scaleMode = SDL_SCALEMODE_LINEAR; | ||
| 1396 | texture->view.pixel_w = w; | ||
| 1397 | texture->view.pixel_h = h; | ||
| 1398 | texture->view.viewport.w = -1; | ||
| 1399 | texture->view.viewport.h = -1; | ||
| 1400 | texture->view.scale.x = 1.0f; | ||
| 1401 | texture->view.scale.y = 1.0f; | ||
| 1402 | texture->view.logical_scale.x = 1.0f; | ||
| 1403 | texture->view.logical_scale.y = 1.0f; | ||
| 1404 | texture->view.current_scale.x = 1.0f; | ||
| 1405 | texture->view.current_scale.y = 1.0f; | ||
| 1406 | texture->renderer = renderer; | ||
| 1407 | texture->next = renderer->textures; | ||
| 1408 | if (renderer->textures) { | ||
| 1409 | renderer->textures->prev = texture; | ||
| 1410 | } | ||
| 1411 | renderer->textures = texture; | ||
| 1412 | |||
| 1413 | UpdatePixelViewport(renderer, &texture->view); | ||
| 1414 | UpdatePixelClipRect(renderer, &texture->view); | ||
| 1415 | |||
| 1416 | texture->SDR_white_point = SDL_GetFloatProperty(props, SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT, SDL_GetDefaultSDRWhitePoint(texture->colorspace)); | ||
| 1417 | texture->HDR_headroom = SDL_GetFloatProperty(props, SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT, SDL_GetDefaultHDRHeadroom(texture->colorspace)); | ||
| 1418 | |||
| 1419 | // FOURCC format cannot be used directly by renderer back-ends for target texture | ||
| 1420 | texture_is_fourcc_and_target = (access == SDL_TEXTUREACCESS_TARGET && SDL_ISPIXELFORMAT_FOURCC(format)); | ||
| 1421 | |||
| 1422 | if (!texture_is_fourcc_and_target && IsSupportedFormat(renderer, format)) { | ||
| 1423 | if (!renderer->CreateTexture(renderer, texture, props)) { | ||
| 1424 | SDL_DestroyTexture(texture); | ||
| 1425 | return NULL; | ||
| 1426 | } | ||
| 1427 | } else { | ||
| 1428 | SDL_PixelFormat closest_format; | ||
| 1429 | SDL_PropertiesID native_props = SDL_CreateProperties(); | ||
| 1430 | |||
| 1431 | if (!texture_is_fourcc_and_target) { | ||
| 1432 | closest_format = GetClosestSupportedFormat(renderer, format); | ||
| 1433 | } else { | ||
| 1434 | closest_format = renderer->texture_formats[0]; | ||
| 1435 | } | ||
| 1436 | |||
| 1437 | if (format == SDL_PIXELFORMAT_MJPG && closest_format == SDL_PIXELFORMAT_NV12) { | ||
| 1438 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, SDL_COLORSPACE_JPEG); | ||
| 1439 | } else { | ||
| 1440 | default_colorspace = SDL_GetDefaultColorspaceForFormat(closest_format); | ||
| 1441 | if (SDL_COLORSPACETYPE(texture->colorspace) == SDL_COLORSPACETYPE(default_colorspace)) { | ||
| 1442 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, texture->colorspace); | ||
| 1443 | } else { | ||
| 1444 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, default_colorspace); | ||
| 1445 | } | ||
| 1446 | } | ||
| 1447 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER, closest_format); | ||
| 1448 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, texture->access); | ||
| 1449 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, texture->w); | ||
| 1450 | SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, texture->h); | ||
| 1451 | |||
| 1452 | texture->native = SDL_CreateTextureWithProperties(renderer, native_props); | ||
| 1453 | SDL_DestroyProperties(native_props); | ||
| 1454 | if (!texture->native) { | ||
| 1455 | SDL_DestroyTexture(texture); | ||
| 1456 | return NULL; | ||
| 1457 | } | ||
| 1458 | |||
| 1459 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture->native), SDL_PROP_TEXTURE_PARENT_POINTER, texture); | ||
| 1460 | |||
| 1461 | // Swap textures to have texture before texture->native in the list | ||
| 1462 | texture->native->next = texture->next; | ||
| 1463 | if (texture->native->next) { | ||
| 1464 | texture->native->next->prev = texture->native; | ||
| 1465 | } | ||
| 1466 | texture->prev = texture->native->prev; | ||
| 1467 | if (texture->prev) { | ||
| 1468 | texture->prev->next = texture; | ||
| 1469 | } | ||
| 1470 | texture->native->prev = texture; | ||
| 1471 | texture->next = texture->native; | ||
| 1472 | renderer->textures = texture; | ||
| 1473 | |||
| 1474 | if (texture->format == SDL_PIXELFORMAT_MJPG) { | ||
| 1475 | // We have a custom decode + upload path for this | ||
| 1476 | } else if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) { | ||
| 1477 | #ifdef SDL_HAVE_YUV | ||
| 1478 | texture->yuv = SDL_SW_CreateYUVTexture(texture->format, texture->colorspace, w, h); | ||
| 1479 | #else | ||
| 1480 | SDL_SetError("SDL not built with YUV support"); | ||
| 1481 | #endif | ||
| 1482 | if (!texture->yuv) { | ||
| 1483 | SDL_DestroyTexture(texture); | ||
| 1484 | return NULL; | ||
| 1485 | } | ||
| 1486 | } else if (access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 1487 | // The pitch is 4 byte aligned | ||
| 1488 | texture->pitch = (((w * SDL_BYTESPERPIXEL(format)) + 3) & ~3); | ||
| 1489 | texture->pixels = SDL_calloc(1, (size_t)texture->pitch * h); | ||
| 1490 | if (!texture->pixels) { | ||
| 1491 | SDL_DestroyTexture(texture); | ||
| 1492 | return NULL; | ||
| 1493 | } | ||
| 1494 | } | ||
| 1495 | } | ||
| 1496 | |||
| 1497 | // Now set the properties for the new texture | ||
| 1498 | props = SDL_GetTextureProperties(texture); | ||
| 1499 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_COLORSPACE_NUMBER, texture->colorspace); | ||
| 1500 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_FORMAT_NUMBER, texture->format); | ||
| 1501 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_ACCESS_NUMBER, texture->access); | ||
| 1502 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_WIDTH_NUMBER, texture->w); | ||
| 1503 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_HEIGHT_NUMBER, texture->h); | ||
| 1504 | SDL_SetFloatProperty(props, SDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT, texture->SDR_white_point); | ||
| 1505 | if (texture->HDR_headroom > 0.0f) { | ||
| 1506 | SDL_SetFloatProperty(props, SDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT, texture->HDR_headroom); | ||
| 1507 | } | ||
| 1508 | return texture; | ||
| 1509 | } | ||
| 1510 | |||
| 1511 | SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormat format, SDL_TextureAccess access, int w, int h) | ||
| 1512 | { | ||
| 1513 | SDL_Texture *texture; | ||
| 1514 | SDL_PropertiesID props = SDL_CreateProperties(); | ||
| 1515 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER, format); | ||
| 1516 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, access); | ||
| 1517 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, w); | ||
| 1518 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, h); | ||
| 1519 | texture = SDL_CreateTextureWithProperties(renderer, props); | ||
| 1520 | SDL_DestroyProperties(props); | ||
| 1521 | return texture; | ||
| 1522 | } | ||
| 1523 | |||
| 1524 | static bool SDL_UpdateTextureFromSurface(SDL_Texture *texture, SDL_Rect *rect, SDL_Surface *surface) | ||
| 1525 | { | ||
| 1526 | SDL_TextureAccess access; | ||
| 1527 | bool direct_update; | ||
| 1528 | SDL_PixelFormat tex_format; | ||
| 1529 | SDL_PropertiesID surface_props; | ||
| 1530 | SDL_PropertiesID tex_props; | ||
| 1531 | SDL_Colorspace surface_colorspace = SDL_COLORSPACE_UNKNOWN; | ||
| 1532 | SDL_Colorspace texture_colorspace = SDL_COLORSPACE_UNKNOWN; | ||
| 1533 | |||
| 1534 | if (texture == NULL || surface == NULL) { | ||
| 1535 | return false; | ||
| 1536 | } | ||
| 1537 | |||
| 1538 | tex_props = SDL_GetTextureProperties(texture); | ||
| 1539 | if (!tex_props) { | ||
| 1540 | return false; | ||
| 1541 | } | ||
| 1542 | |||
| 1543 | surface_props = SDL_GetSurfaceProperties(surface); | ||
| 1544 | if (!surface_props) { | ||
| 1545 | return false; | ||
| 1546 | } | ||
| 1547 | |||
| 1548 | tex_format = (SDL_PixelFormat)SDL_GetNumberProperty(tex_props, SDL_PROP_TEXTURE_FORMAT_NUMBER, 0); | ||
| 1549 | access = (SDL_TextureAccess)SDL_GetNumberProperty(tex_props, SDL_PROP_TEXTURE_ACCESS_NUMBER, 0); | ||
| 1550 | |||
| 1551 | if (access != SDL_TEXTUREACCESS_STATIC && access != SDL_TEXTUREACCESS_STREAMING) { | ||
| 1552 | return false; | ||
| 1553 | } | ||
| 1554 | |||
| 1555 | surface_colorspace = SDL_GetSurfaceColorspace(surface); | ||
| 1556 | texture_colorspace = surface_colorspace; | ||
| 1557 | |||
| 1558 | if (surface_colorspace == SDL_COLORSPACE_SRGB_LINEAR || | ||
| 1559 | SDL_COLORSPACETRANSFER(surface_colorspace) == SDL_TRANSFER_CHARACTERISTICS_PQ) { | ||
| 1560 | if (SDL_ISPIXELFORMAT_FLOAT(tex_format)) { | ||
| 1561 | texture_colorspace = SDL_COLORSPACE_SRGB_LINEAR; | ||
| 1562 | } else if (SDL_ISPIXELFORMAT_10BIT(tex_format)) { | ||
| 1563 | texture_colorspace = SDL_COLORSPACE_HDR10; | ||
| 1564 | } else { | ||
| 1565 | texture_colorspace = SDL_COLORSPACE_SRGB; | ||
| 1566 | } | ||
| 1567 | } | ||
| 1568 | |||
| 1569 | if (tex_format == surface->format && texture_colorspace == surface_colorspace) { | ||
| 1570 | if (SDL_ISPIXELFORMAT_ALPHA(surface->format) && SDL_SurfaceHasColorKey(surface)) { | ||
| 1571 | /* Surface and Renderer formats are identical. | ||
| 1572 | * Intermediate conversion is needed to convert color key to alpha (SDL_ConvertColorkeyToAlpha()). */ | ||
| 1573 | direct_update = false; | ||
| 1574 | } else { | ||
| 1575 | // Update Texture directly | ||
| 1576 | direct_update = true; | ||
| 1577 | } | ||
| 1578 | } else { | ||
| 1579 | // Surface and Renderer formats are different, it needs an intermediate conversion. | ||
| 1580 | direct_update = false; | ||
| 1581 | } | ||
| 1582 | |||
| 1583 | if (direct_update) { | ||
| 1584 | if (SDL_MUSTLOCK(surface)) { | ||
| 1585 | SDL_LockSurface(surface); | ||
| 1586 | SDL_UpdateTexture(texture, rect, surface->pixels, surface->pitch); | ||
| 1587 | SDL_UnlockSurface(surface); | ||
| 1588 | } else { | ||
| 1589 | SDL_UpdateTexture(texture, rect, surface->pixels, surface->pitch); | ||
| 1590 | } | ||
| 1591 | } else { | ||
| 1592 | SDL_Surface *temp = NULL; | ||
| 1593 | |||
| 1594 | // Set up a destination surface for the texture update | ||
| 1595 | temp = SDL_ConvertSurfaceAndColorspace(surface, tex_format, NULL, texture_colorspace, surface_props); | ||
| 1596 | if (temp) { | ||
| 1597 | SDL_UpdateTexture(texture, NULL, temp->pixels, temp->pitch); | ||
| 1598 | SDL_DestroySurface(temp); | ||
| 1599 | } else { | ||
| 1600 | return false; | ||
| 1601 | } | ||
| 1602 | } | ||
| 1603 | |||
| 1604 | { | ||
| 1605 | Uint8 r, g, b, a; | ||
| 1606 | SDL_BlendMode blendMode; | ||
| 1607 | |||
| 1608 | SDL_GetSurfaceColorMod(surface, &r, &g, &b); | ||
| 1609 | SDL_SetTextureColorMod(texture, r, g, b); | ||
| 1610 | |||
| 1611 | SDL_GetSurfaceAlphaMod(surface, &a); | ||
| 1612 | SDL_SetTextureAlphaMod(texture, a); | ||
| 1613 | |||
| 1614 | if (SDL_SurfaceHasColorKey(surface)) { | ||
| 1615 | // We converted to a texture with alpha format | ||
| 1616 | SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); | ||
| 1617 | } else { | ||
| 1618 | SDL_GetSurfaceBlendMode(surface, &blendMode); | ||
| 1619 | SDL_SetTextureBlendMode(texture, blendMode); | ||
| 1620 | } | ||
| 1621 | } | ||
| 1622 | |||
| 1623 | return true; | ||
| 1624 | } | ||
| 1625 | |||
| 1626 | SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface) | ||
| 1627 | { | ||
| 1628 | bool needAlpha; | ||
| 1629 | int i; | ||
| 1630 | SDL_PixelFormat format = SDL_PIXELFORMAT_UNKNOWN; | ||
| 1631 | SDL_Palette *palette; | ||
| 1632 | SDL_Texture *texture; | ||
| 1633 | SDL_PropertiesID props; | ||
| 1634 | SDL_Colorspace surface_colorspace = SDL_COLORSPACE_UNKNOWN; | ||
| 1635 | SDL_Colorspace texture_colorspace = SDL_COLORSPACE_UNKNOWN; | ||
| 1636 | |||
| 1637 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 1638 | |||
| 1639 | if (!SDL_SurfaceValid(surface)) { | ||
| 1640 | SDL_InvalidParamError("SDL_CreateTextureFromSurface(): surface"); | ||
| 1641 | return NULL; | ||
| 1642 | } | ||
| 1643 | |||
| 1644 | // See what the best texture format is | ||
| 1645 | if (SDL_ISPIXELFORMAT_ALPHA(surface->format) || SDL_SurfaceHasColorKey(surface)) { | ||
| 1646 | needAlpha = true; | ||
| 1647 | } else { | ||
| 1648 | needAlpha = false; | ||
| 1649 | } | ||
| 1650 | |||
| 1651 | // If Palette contains alpha values, promotes to alpha format | ||
| 1652 | palette = SDL_GetSurfacePalette(surface); | ||
| 1653 | if (palette) { | ||
| 1654 | bool is_opaque, has_alpha_channel; | ||
| 1655 | SDL_DetectPalette(palette, &is_opaque, &has_alpha_channel); | ||
| 1656 | if (!is_opaque) { | ||
| 1657 | needAlpha = true; | ||
| 1658 | } | ||
| 1659 | } | ||
| 1660 | |||
| 1661 | surface_colorspace = SDL_GetSurfaceColorspace(surface); | ||
| 1662 | |||
| 1663 | // Try to have the best pixel format for the texture | ||
| 1664 | // No alpha, but a colorkey => promote to alpha | ||
| 1665 | if (!SDL_ISPIXELFORMAT_ALPHA(surface->format) && SDL_SurfaceHasColorKey(surface)) { | ||
| 1666 | if (surface->format == SDL_PIXELFORMAT_XRGB8888) { | ||
| 1667 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1668 | if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ARGB8888) { | ||
| 1669 | format = SDL_PIXELFORMAT_ARGB8888; | ||
| 1670 | break; | ||
| 1671 | } | ||
| 1672 | } | ||
| 1673 | } else if (surface->format == SDL_PIXELFORMAT_XBGR8888) { | ||
| 1674 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1675 | if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ABGR8888) { | ||
| 1676 | format = SDL_PIXELFORMAT_ABGR8888; | ||
| 1677 | break; | ||
| 1678 | } | ||
| 1679 | } | ||
| 1680 | } | ||
| 1681 | } else { | ||
| 1682 | // Exact match would be fine | ||
| 1683 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1684 | if (renderer->texture_formats[i] == surface->format) { | ||
| 1685 | format = surface->format; | ||
| 1686 | break; | ||
| 1687 | } | ||
| 1688 | } | ||
| 1689 | } | ||
| 1690 | |||
| 1691 | // Look for 10-bit pixel formats if needed | ||
| 1692 | if (format == SDL_PIXELFORMAT_UNKNOWN && SDL_ISPIXELFORMAT_10BIT(surface->format)) { | ||
| 1693 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1694 | if (SDL_ISPIXELFORMAT_10BIT(renderer->texture_formats[i])) { | ||
| 1695 | format = renderer->texture_formats[i]; | ||
| 1696 | break; | ||
| 1697 | } | ||
| 1698 | } | ||
| 1699 | } | ||
| 1700 | |||
| 1701 | // Look for floating point pixel formats if needed | ||
| 1702 | if (format == SDL_PIXELFORMAT_UNKNOWN && | ||
| 1703 | (SDL_ISPIXELFORMAT_10BIT(surface->format) || SDL_ISPIXELFORMAT_FLOAT(surface->format))) { | ||
| 1704 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1705 | if (SDL_ISPIXELFORMAT_FLOAT(renderer->texture_formats[i])) { | ||
| 1706 | format = renderer->texture_formats[i]; | ||
| 1707 | break; | ||
| 1708 | } | ||
| 1709 | } | ||
| 1710 | } | ||
| 1711 | |||
| 1712 | // Fallback, choose a valid pixel format | ||
| 1713 | if (format == SDL_PIXELFORMAT_UNKNOWN) { | ||
| 1714 | format = renderer->texture_formats[0]; | ||
| 1715 | for (i = 0; i < renderer->num_texture_formats; ++i) { | ||
| 1716 | if (!SDL_ISPIXELFORMAT_FOURCC(renderer->texture_formats[i]) && | ||
| 1717 | SDL_ISPIXELFORMAT_ALPHA(renderer->texture_formats[i]) == needAlpha) { | ||
| 1718 | format = renderer->texture_formats[i]; | ||
| 1719 | break; | ||
| 1720 | } | ||
| 1721 | } | ||
| 1722 | } | ||
| 1723 | |||
| 1724 | if (surface_colorspace == SDL_COLORSPACE_SRGB_LINEAR || | ||
| 1725 | SDL_COLORSPACETRANSFER(surface_colorspace) == SDL_TRANSFER_CHARACTERISTICS_PQ) { | ||
| 1726 | if (SDL_ISPIXELFORMAT_FLOAT(format)) { | ||
| 1727 | texture_colorspace = SDL_COLORSPACE_SRGB_LINEAR; | ||
| 1728 | } else if (SDL_ISPIXELFORMAT_10BIT(format)) { | ||
| 1729 | texture_colorspace = SDL_COLORSPACE_HDR10; | ||
| 1730 | } else { | ||
| 1731 | texture_colorspace = SDL_COLORSPACE_SRGB; | ||
| 1732 | } | ||
| 1733 | } | ||
| 1734 | |||
| 1735 | props = SDL_CreateProperties(); | ||
| 1736 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, texture_colorspace); | ||
| 1737 | if (surface_colorspace == texture_colorspace) { | ||
| 1738 | SDL_SetFloatProperty(props, SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT, | ||
| 1739 | SDL_GetSurfaceSDRWhitePoint(surface, surface_colorspace)); | ||
| 1740 | } | ||
| 1741 | SDL_SetFloatProperty(props, SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT, | ||
| 1742 | SDL_GetSurfaceHDRHeadroom(surface, surface_colorspace)); | ||
| 1743 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER, format); | ||
| 1744 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, SDL_TEXTUREACCESS_STATIC); | ||
| 1745 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, surface->w); | ||
| 1746 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, surface->h); | ||
| 1747 | texture = SDL_CreateTextureWithProperties(renderer, props); | ||
| 1748 | SDL_DestroyProperties(props); | ||
| 1749 | if (!texture) { | ||
| 1750 | return NULL; | ||
| 1751 | } | ||
| 1752 | |||
| 1753 | if (!SDL_UpdateTextureFromSurface(texture, NULL, surface)) { | ||
| 1754 | SDL_DestroyTexture(texture); | ||
| 1755 | return NULL; | ||
| 1756 | } | ||
| 1757 | |||
| 1758 | return texture; | ||
| 1759 | } | ||
| 1760 | |||
| 1761 | SDL_Renderer *SDL_GetRendererFromTexture(SDL_Texture *texture) | ||
| 1762 | { | ||
| 1763 | CHECK_TEXTURE_MAGIC(texture, NULL); | ||
| 1764 | |||
| 1765 | return texture->renderer; | ||
| 1766 | } | ||
| 1767 | |||
| 1768 | SDL_PropertiesID SDL_GetTextureProperties(SDL_Texture *texture) | ||
| 1769 | { | ||
| 1770 | CHECK_TEXTURE_MAGIC(texture, 0); | ||
| 1771 | |||
| 1772 | if (texture->props == 0) { | ||
| 1773 | texture->props = SDL_CreateProperties(); | ||
| 1774 | } | ||
| 1775 | return texture->props; | ||
| 1776 | } | ||
| 1777 | |||
| 1778 | bool SDL_GetTextureSize(SDL_Texture *texture, float *w, float *h) | ||
| 1779 | { | ||
| 1780 | if (w) { | ||
| 1781 | *w = 0; | ||
| 1782 | } | ||
| 1783 | if (h) { | ||
| 1784 | *h = 0; | ||
| 1785 | } | ||
| 1786 | |||
| 1787 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1788 | |||
| 1789 | if (w) { | ||
| 1790 | *w = (float)texture->w; | ||
| 1791 | } | ||
| 1792 | if (h) { | ||
| 1793 | *h = (float)texture->h; | ||
| 1794 | } | ||
| 1795 | return true; | ||
| 1796 | } | ||
| 1797 | |||
| 1798 | bool SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b) | ||
| 1799 | { | ||
| 1800 | const float fR = (float)r / 255.0f; | ||
| 1801 | const float fG = (float)g / 255.0f; | ||
| 1802 | const float fB = (float)b / 255.0f; | ||
| 1803 | |||
| 1804 | return SDL_SetTextureColorModFloat(texture, fR, fG, fB); | ||
| 1805 | } | ||
| 1806 | |||
| 1807 | bool SDL_SetTextureColorModFloat(SDL_Texture *texture, float r, float g, float b) | ||
| 1808 | { | ||
| 1809 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1810 | |||
| 1811 | texture->color.r = r; | ||
| 1812 | texture->color.g = g; | ||
| 1813 | texture->color.b = b; | ||
| 1814 | if (texture->native) { | ||
| 1815 | return SDL_SetTextureColorModFloat(texture->native, r, g, b); | ||
| 1816 | } | ||
| 1817 | return true; | ||
| 1818 | } | ||
| 1819 | |||
| 1820 | bool SDL_GetTextureColorMod(SDL_Texture *texture, Uint8 *r, Uint8 *g, Uint8 *b) | ||
| 1821 | { | ||
| 1822 | float fR = 1.0f, fG = 1.0f, fB = 1.0f; | ||
| 1823 | |||
| 1824 | if (!SDL_GetTextureColorModFloat(texture, &fR, &fG, &fB)) { | ||
| 1825 | if (r) { | ||
| 1826 | *r = 255; | ||
| 1827 | } | ||
| 1828 | if (g) { | ||
| 1829 | *g = 255; | ||
| 1830 | } | ||
| 1831 | if (b) { | ||
| 1832 | *b = 255; | ||
| 1833 | } | ||
| 1834 | return false; | ||
| 1835 | } | ||
| 1836 | |||
| 1837 | if (r) { | ||
| 1838 | *r = (Uint8)SDL_roundf(SDL_clamp(fR, 0.0f, 1.0f) * 255.0f); | ||
| 1839 | } | ||
| 1840 | if (g) { | ||
| 1841 | *g = (Uint8)SDL_roundf(SDL_clamp(fG, 0.0f, 1.0f) * 255.0f); | ||
| 1842 | } | ||
| 1843 | if (b) { | ||
| 1844 | *b = (Uint8)SDL_roundf(SDL_clamp(fB, 0.0f, 1.0f) * 255.0f); | ||
| 1845 | } | ||
| 1846 | return true; | ||
| 1847 | } | ||
| 1848 | |||
| 1849 | bool SDL_GetTextureColorModFloat(SDL_Texture *texture, float *r, float *g, float *b) | ||
| 1850 | { | ||
| 1851 | SDL_FColor color; | ||
| 1852 | |||
| 1853 | if (r) { | ||
| 1854 | *r = 1.0f; | ||
| 1855 | } | ||
| 1856 | if (g) { | ||
| 1857 | *g = 1.0f; | ||
| 1858 | } | ||
| 1859 | if (b) { | ||
| 1860 | *b = 1.0f; | ||
| 1861 | } | ||
| 1862 | |||
| 1863 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1864 | |||
| 1865 | color = texture->color; | ||
| 1866 | |||
| 1867 | if (r) { | ||
| 1868 | *r = color.r; | ||
| 1869 | } | ||
| 1870 | if (g) { | ||
| 1871 | *g = color.g; | ||
| 1872 | } | ||
| 1873 | if (b) { | ||
| 1874 | *b = color.b; | ||
| 1875 | } | ||
| 1876 | return true; | ||
| 1877 | } | ||
| 1878 | |||
| 1879 | bool SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha) | ||
| 1880 | { | ||
| 1881 | const float fA = (float)alpha / 255.0f; | ||
| 1882 | |||
| 1883 | return SDL_SetTextureAlphaModFloat(texture, fA); | ||
| 1884 | } | ||
| 1885 | |||
| 1886 | bool SDL_SetTextureAlphaModFloat(SDL_Texture *texture, float alpha) | ||
| 1887 | { | ||
| 1888 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1889 | |||
| 1890 | texture->color.a = alpha; | ||
| 1891 | if (texture->native) { | ||
| 1892 | return SDL_SetTextureAlphaModFloat(texture->native, alpha); | ||
| 1893 | } | ||
| 1894 | return true; | ||
| 1895 | } | ||
| 1896 | |||
| 1897 | bool SDL_GetTextureAlphaMod(SDL_Texture *texture, Uint8 *alpha) | ||
| 1898 | { | ||
| 1899 | float fA = 1.0f; | ||
| 1900 | |||
| 1901 | if (!SDL_GetTextureAlphaModFloat(texture, &fA)) { | ||
| 1902 | if (alpha) { | ||
| 1903 | *alpha = 255; | ||
| 1904 | } | ||
| 1905 | return false; | ||
| 1906 | } | ||
| 1907 | |||
| 1908 | if (alpha) { | ||
| 1909 | *alpha = (Uint8)SDL_roundf(SDL_clamp(fA, 0.0f, 1.0f) * 255.0f); | ||
| 1910 | } | ||
| 1911 | return true; | ||
| 1912 | } | ||
| 1913 | |||
| 1914 | bool SDL_GetTextureAlphaModFloat(SDL_Texture *texture, float *alpha) | ||
| 1915 | { | ||
| 1916 | if (alpha) { | ||
| 1917 | *alpha = 1.0f; | ||
| 1918 | } | ||
| 1919 | |||
| 1920 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1921 | |||
| 1922 | if (alpha) { | ||
| 1923 | *alpha = texture->color.a; | ||
| 1924 | } | ||
| 1925 | return true; | ||
| 1926 | } | ||
| 1927 | |||
| 1928 | bool SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode) | ||
| 1929 | { | ||
| 1930 | SDL_Renderer *renderer; | ||
| 1931 | |||
| 1932 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1933 | |||
| 1934 | if (blendMode == SDL_BLENDMODE_INVALID) { | ||
| 1935 | return SDL_InvalidParamError("blendMode"); | ||
| 1936 | } | ||
| 1937 | |||
| 1938 | renderer = texture->renderer; | ||
| 1939 | if (!IsSupportedBlendMode(renderer, blendMode)) { | ||
| 1940 | return SDL_Unsupported(); | ||
| 1941 | } | ||
| 1942 | texture->blendMode = blendMode; | ||
| 1943 | if (texture->native) { | ||
| 1944 | return SDL_SetTextureBlendMode(texture->native, blendMode); | ||
| 1945 | } | ||
| 1946 | return true; | ||
| 1947 | } | ||
| 1948 | |||
| 1949 | bool SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode) | ||
| 1950 | { | ||
| 1951 | if (blendMode) { | ||
| 1952 | *blendMode = SDL_BLENDMODE_INVALID; | ||
| 1953 | } | ||
| 1954 | |||
| 1955 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1956 | |||
| 1957 | if (blendMode) { | ||
| 1958 | *blendMode = texture->blendMode; | ||
| 1959 | } | ||
| 1960 | return true; | ||
| 1961 | } | ||
| 1962 | |||
| 1963 | bool SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 1964 | { | ||
| 1965 | SDL_Renderer *renderer; | ||
| 1966 | |||
| 1967 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1968 | |||
| 1969 | if (scaleMode != SDL_SCALEMODE_NEAREST && | ||
| 1970 | scaleMode != SDL_SCALEMODE_LINEAR) { | ||
| 1971 | return SDL_InvalidParamError("scaleMode"); | ||
| 1972 | } | ||
| 1973 | |||
| 1974 | renderer = texture->renderer; | ||
| 1975 | texture->scaleMode = scaleMode; | ||
| 1976 | if (texture->native) { | ||
| 1977 | return SDL_SetTextureScaleMode(texture->native, scaleMode); | ||
| 1978 | } else { | ||
| 1979 | renderer->SetTextureScaleMode(renderer, texture, scaleMode); | ||
| 1980 | } | ||
| 1981 | return true; | ||
| 1982 | } | ||
| 1983 | |||
| 1984 | bool SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode) | ||
| 1985 | { | ||
| 1986 | if (scaleMode) { | ||
| 1987 | *scaleMode = SDL_SCALEMODE_LINEAR; | ||
| 1988 | } | ||
| 1989 | |||
| 1990 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 1991 | |||
| 1992 | if (scaleMode) { | ||
| 1993 | *scaleMode = texture->scaleMode; | ||
| 1994 | } | ||
| 1995 | return true; | ||
| 1996 | } | ||
| 1997 | |||
| 1998 | #ifdef SDL_HAVE_YUV | ||
| 1999 | static bool SDL_UpdateTextureYUV(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2000 | const void *pixels, int pitch) | ||
| 2001 | { | ||
| 2002 | SDL_Texture *native = texture->native; | ||
| 2003 | SDL_Rect full_rect; | ||
| 2004 | |||
| 2005 | if (!SDL_SW_UpdateYUVTexture(texture->yuv, rect, pixels, pitch)) { | ||
| 2006 | return false; | ||
| 2007 | } | ||
| 2008 | |||
| 2009 | full_rect.x = 0; | ||
| 2010 | full_rect.y = 0; | ||
| 2011 | full_rect.w = texture->w; | ||
| 2012 | full_rect.h = texture->h; | ||
| 2013 | rect = &full_rect; | ||
| 2014 | |||
| 2015 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 2016 | // We can lock the texture and copy to it | ||
| 2017 | void *native_pixels = NULL; | ||
| 2018 | int native_pitch = 0; | ||
| 2019 | |||
| 2020 | if (!SDL_LockTexture(native, rect, &native_pixels, &native_pitch)) { | ||
| 2021 | return false; | ||
| 2022 | } | ||
| 2023 | SDL_SW_CopyYUVToRGB(texture->yuv, rect, native->format, | ||
| 2024 | rect->w, rect->h, native_pixels, native_pitch); | ||
| 2025 | SDL_UnlockTexture(native); | ||
| 2026 | } else { | ||
| 2027 | // Use a temporary buffer for updating | ||
| 2028 | const int temp_pitch = (((rect->w * SDL_BYTESPERPIXEL(native->format)) + 3) & ~3); | ||
| 2029 | const size_t alloclen = (size_t)rect->h * temp_pitch; | ||
| 2030 | if (alloclen > 0) { | ||
| 2031 | void *temp_pixels = SDL_malloc(alloclen); | ||
| 2032 | if (!temp_pixels) { | ||
| 2033 | return false; | ||
| 2034 | } | ||
| 2035 | SDL_SW_CopyYUVToRGB(texture->yuv, rect, native->format, | ||
| 2036 | rect->w, rect->h, temp_pixels, temp_pitch); | ||
| 2037 | SDL_UpdateTexture(native, rect, temp_pixels, temp_pitch); | ||
| 2038 | SDL_free(temp_pixels); | ||
| 2039 | } | ||
| 2040 | } | ||
| 2041 | return true; | ||
| 2042 | } | ||
| 2043 | #endif // SDL_HAVE_YUV | ||
| 2044 | |||
| 2045 | static bool SDL_UpdateTextureNative(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2046 | const void *pixels, int pitch) | ||
| 2047 | { | ||
| 2048 | SDL_Texture *native = texture->native; | ||
| 2049 | |||
| 2050 | if (!rect->w || !rect->h) { | ||
| 2051 | return true; // nothing to do. | ||
| 2052 | } | ||
| 2053 | |||
| 2054 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 2055 | // We can lock the texture and copy to it | ||
| 2056 | void *native_pixels = NULL; | ||
| 2057 | int native_pitch = 0; | ||
| 2058 | |||
| 2059 | if (!SDL_LockTexture(native, rect, &native_pixels, &native_pitch)) { | ||
| 2060 | return false; | ||
| 2061 | } | ||
| 2062 | SDL_ConvertPixelsAndColorspace(rect->w, rect->h, | ||
| 2063 | texture->format, texture->colorspace, 0, pixels, pitch, | ||
| 2064 | native->format, native->colorspace, 0, native_pixels, native_pitch); | ||
| 2065 | SDL_UnlockTexture(native); | ||
| 2066 | } else { | ||
| 2067 | // Use a temporary buffer for updating | ||
| 2068 | const int temp_pitch = (((rect->w * SDL_BYTESPERPIXEL(native->format)) + 3) & ~3); | ||
| 2069 | const size_t alloclen = (size_t)rect->h * temp_pitch; | ||
| 2070 | if (alloclen > 0) { | ||
| 2071 | void *temp_pixels = SDL_malloc(alloclen); | ||
| 2072 | if (!temp_pixels) { | ||
| 2073 | return false; | ||
| 2074 | } | ||
| 2075 | SDL_ConvertPixelsAndColorspace(rect->w, rect->h, | ||
| 2076 | texture->format, texture->colorspace, 0, pixels, pitch, | ||
| 2077 | native->format, native->colorspace, 0, temp_pixels, temp_pitch); | ||
| 2078 | SDL_UpdateTexture(native, rect, temp_pixels, temp_pitch); | ||
| 2079 | SDL_free(temp_pixels); | ||
| 2080 | } | ||
| 2081 | } | ||
| 2082 | return true; | ||
| 2083 | } | ||
| 2084 | |||
| 2085 | bool SDL_UpdateTexture(SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 2086 | { | ||
| 2087 | SDL_Rect real_rect; | ||
| 2088 | |||
| 2089 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 2090 | |||
| 2091 | if (!pixels) { | ||
| 2092 | return SDL_InvalidParamError("pixels"); | ||
| 2093 | } | ||
| 2094 | if (!pitch) { | ||
| 2095 | return SDL_InvalidParamError("pitch"); | ||
| 2096 | } | ||
| 2097 | |||
| 2098 | real_rect.x = 0; | ||
| 2099 | real_rect.y = 0; | ||
| 2100 | real_rect.w = texture->w; | ||
| 2101 | real_rect.h = texture->h; | ||
| 2102 | if (rect) { | ||
| 2103 | if (!SDL_GetRectIntersection(rect, &real_rect, &real_rect)) { | ||
| 2104 | return true; | ||
| 2105 | } | ||
| 2106 | } | ||
| 2107 | |||
| 2108 | if (real_rect.w == 0 || real_rect.h == 0) { | ||
| 2109 | return true; // nothing to do. | ||
| 2110 | #ifdef SDL_HAVE_YUV | ||
| 2111 | } else if (texture->yuv) { | ||
| 2112 | return SDL_UpdateTextureYUV(texture, &real_rect, pixels, pitch); | ||
| 2113 | #endif | ||
| 2114 | } else if (texture->native) { | ||
| 2115 | return SDL_UpdateTextureNative(texture, &real_rect, pixels, pitch); | ||
| 2116 | } else { | ||
| 2117 | SDL_Renderer *renderer = texture->renderer; | ||
| 2118 | if (!FlushRenderCommandsIfTextureNeeded(texture)) { | ||
| 2119 | return false; | ||
| 2120 | } | ||
| 2121 | return renderer->UpdateTexture(renderer, texture, &real_rect, pixels, pitch); | ||
| 2122 | } | ||
| 2123 | } | ||
| 2124 | |||
| 2125 | #ifdef SDL_HAVE_YUV | ||
| 2126 | static bool SDL_UpdateTextureYUVPlanar(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2127 | const Uint8 *Yplane, int Ypitch, | ||
| 2128 | const Uint8 *Uplane, int Upitch, | ||
| 2129 | const Uint8 *Vplane, int Vpitch) | ||
| 2130 | { | ||
| 2131 | SDL_Texture *native = texture->native; | ||
| 2132 | SDL_Rect full_rect; | ||
| 2133 | |||
| 2134 | if (!SDL_SW_UpdateYUVTexturePlanar(texture->yuv, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch)) { | ||
| 2135 | return false; | ||
| 2136 | } | ||
| 2137 | |||
| 2138 | full_rect.x = 0; | ||
| 2139 | full_rect.y = 0; | ||
| 2140 | full_rect.w = texture->w; | ||
| 2141 | full_rect.h = texture->h; | ||
| 2142 | rect = &full_rect; | ||
| 2143 | |||
| 2144 | if (!rect->w || !rect->h) { | ||
| 2145 | return true; // nothing to do. | ||
| 2146 | } | ||
| 2147 | |||
| 2148 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 2149 | // We can lock the texture and copy to it | ||
| 2150 | void *native_pixels = NULL; | ||
| 2151 | int native_pitch = 0; | ||
| 2152 | |||
| 2153 | if (!SDL_LockTexture(native, rect, &native_pixels, &native_pitch)) { | ||
| 2154 | return false; | ||
| 2155 | } | ||
| 2156 | SDL_SW_CopyYUVToRGB(texture->yuv, rect, native->format, | ||
| 2157 | rect->w, rect->h, native_pixels, native_pitch); | ||
| 2158 | SDL_UnlockTexture(native); | ||
| 2159 | } else { | ||
| 2160 | // Use a temporary buffer for updating | ||
| 2161 | const int temp_pitch = (((rect->w * SDL_BYTESPERPIXEL(native->format)) + 3) & ~3); | ||
| 2162 | const size_t alloclen = (size_t)rect->h * temp_pitch; | ||
| 2163 | if (alloclen > 0) { | ||
| 2164 | void *temp_pixels = SDL_malloc(alloclen); | ||
| 2165 | if (!temp_pixels) { | ||
| 2166 | return false; | ||
| 2167 | } | ||
| 2168 | SDL_SW_CopyYUVToRGB(texture->yuv, rect, native->format, | ||
| 2169 | rect->w, rect->h, temp_pixels, temp_pitch); | ||
| 2170 | SDL_UpdateTexture(native, rect, temp_pixels, temp_pitch); | ||
| 2171 | SDL_free(temp_pixels); | ||
| 2172 | } | ||
| 2173 | } | ||
| 2174 | return true; | ||
| 2175 | } | ||
| 2176 | |||
| 2177 | static bool SDL_UpdateTextureNVPlanar(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2178 | const Uint8 *Yplane, int Ypitch, | ||
| 2179 | const Uint8 *UVplane, int UVpitch) | ||
| 2180 | { | ||
| 2181 | SDL_Texture *native = texture->native; | ||
| 2182 | SDL_Rect full_rect; | ||
| 2183 | |||
| 2184 | if (!SDL_SW_UpdateNVTexturePlanar(texture->yuv, rect, Yplane, Ypitch, UVplane, UVpitch)) { | ||
| 2185 | return false; | ||
| 2186 | } | ||
| 2187 | |||
| 2188 | full_rect.x = 0; | ||
| 2189 | full_rect.y = 0; | ||
| 2190 | full_rect.w = texture->w; | ||
| 2191 | full_rect.h = texture->h; | ||
| 2192 | rect = &full_rect; | ||
| 2193 | |||
| 2194 | if (!rect->w || !rect->h) { | ||
| 2195 | return true; // nothing to do. | ||
| 2196 | } | ||
| 2197 | |||
| 2198 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 2199 | // We can lock the texture and copy to it | ||
| 2200 | void *native_pixels = NULL; | ||
| 2201 | int native_pitch = 0; | ||
| 2202 | |||
| 2203 | if (!SDL_LockTexture(native, rect, &native_pixels, &native_pitch)) { | ||
| 2204 | return false; | ||
| 2205 | } | ||
| 2206 | SDL_SW_CopyYUVToRGB(texture->yuv, rect, native->format, | ||
| 2207 | rect->w, rect->h, native_pixels, native_pitch); | ||
| 2208 | SDL_UnlockTexture(native); | ||
| 2209 | } else { | ||
| 2210 | // Use a temporary buffer for updating | ||
| 2211 | const int temp_pitch = (((rect->w * SDL_BYTESPERPIXEL(native->format)) + 3) & ~3); | ||
| 2212 | const size_t alloclen = (size_t)rect->h * temp_pitch; | ||
| 2213 | if (alloclen > 0) { | ||
| 2214 | void *temp_pixels = SDL_malloc(alloclen); | ||
| 2215 | if (!temp_pixels) { | ||
| 2216 | return false; | ||
| 2217 | } | ||
| 2218 | SDL_SW_CopyYUVToRGB(texture->yuv, rect, native->format, | ||
| 2219 | rect->w, rect->h, temp_pixels, temp_pitch); | ||
| 2220 | SDL_UpdateTexture(native, rect, temp_pixels, temp_pitch); | ||
| 2221 | SDL_free(temp_pixels); | ||
| 2222 | } | ||
| 2223 | } | ||
| 2224 | return true; | ||
| 2225 | } | ||
| 2226 | |||
| 2227 | #endif // SDL_HAVE_YUV | ||
| 2228 | |||
| 2229 | bool SDL_UpdateYUVTexture(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2230 | const Uint8 *Yplane, int Ypitch, | ||
| 2231 | const Uint8 *Uplane, int Upitch, | ||
| 2232 | const Uint8 *Vplane, int Vpitch) | ||
| 2233 | { | ||
| 2234 | #ifdef SDL_HAVE_YUV | ||
| 2235 | SDL_Renderer *renderer; | ||
| 2236 | SDL_Rect real_rect; | ||
| 2237 | |||
| 2238 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 2239 | |||
| 2240 | if (!Yplane) { | ||
| 2241 | return SDL_InvalidParamError("Yplane"); | ||
| 2242 | } | ||
| 2243 | if (!Ypitch) { | ||
| 2244 | return SDL_InvalidParamError("Ypitch"); | ||
| 2245 | } | ||
| 2246 | if (!Uplane) { | ||
| 2247 | return SDL_InvalidParamError("Uplane"); | ||
| 2248 | } | ||
| 2249 | if (!Upitch) { | ||
| 2250 | return SDL_InvalidParamError("Upitch"); | ||
| 2251 | } | ||
| 2252 | if (!Vplane) { | ||
| 2253 | return SDL_InvalidParamError("Vplane"); | ||
| 2254 | } | ||
| 2255 | if (!Vpitch) { | ||
| 2256 | return SDL_InvalidParamError("Vpitch"); | ||
| 2257 | } | ||
| 2258 | |||
| 2259 | if (texture->format != SDL_PIXELFORMAT_YV12 && | ||
| 2260 | texture->format != SDL_PIXELFORMAT_IYUV) { | ||
| 2261 | return SDL_SetError("Texture format must by YV12 or IYUV"); | ||
| 2262 | } | ||
| 2263 | |||
| 2264 | real_rect.x = 0; | ||
| 2265 | real_rect.y = 0; | ||
| 2266 | real_rect.w = texture->w; | ||
| 2267 | real_rect.h = texture->h; | ||
| 2268 | if (rect) { | ||
| 2269 | SDL_GetRectIntersection(rect, &real_rect, &real_rect); | ||
| 2270 | } | ||
| 2271 | |||
| 2272 | if (real_rect.w == 0 || real_rect.h == 0) { | ||
| 2273 | return true; // nothing to do. | ||
| 2274 | } | ||
| 2275 | |||
| 2276 | if (texture->yuv) { | ||
| 2277 | return SDL_UpdateTextureYUVPlanar(texture, &real_rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch); | ||
| 2278 | } else { | ||
| 2279 | SDL_assert(!texture->native); | ||
| 2280 | renderer = texture->renderer; | ||
| 2281 | SDL_assert(renderer->UpdateTextureYUV); | ||
| 2282 | if (renderer->UpdateTextureYUV) { | ||
| 2283 | if (!FlushRenderCommandsIfTextureNeeded(texture)) { | ||
| 2284 | return false; | ||
| 2285 | } | ||
| 2286 | return renderer->UpdateTextureYUV(renderer, texture, &real_rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch); | ||
| 2287 | } else { | ||
| 2288 | return SDL_Unsupported(); | ||
| 2289 | } | ||
| 2290 | } | ||
| 2291 | #else | ||
| 2292 | return false; | ||
| 2293 | #endif | ||
| 2294 | } | ||
| 2295 | |||
| 2296 | bool SDL_UpdateNVTexture(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2297 | const Uint8 *Yplane, int Ypitch, | ||
| 2298 | const Uint8 *UVplane, int UVpitch) | ||
| 2299 | { | ||
| 2300 | #ifdef SDL_HAVE_YUV | ||
| 2301 | SDL_Renderer *renderer; | ||
| 2302 | SDL_Rect real_rect; | ||
| 2303 | |||
| 2304 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 2305 | |||
| 2306 | if (!Yplane) { | ||
| 2307 | return SDL_InvalidParamError("Yplane"); | ||
| 2308 | } | ||
| 2309 | if (!Ypitch) { | ||
| 2310 | return SDL_InvalidParamError("Ypitch"); | ||
| 2311 | } | ||
| 2312 | if (!UVplane) { | ||
| 2313 | return SDL_InvalidParamError("UVplane"); | ||
| 2314 | } | ||
| 2315 | if (!UVpitch) { | ||
| 2316 | return SDL_InvalidParamError("UVpitch"); | ||
| 2317 | } | ||
| 2318 | |||
| 2319 | if (texture->format != SDL_PIXELFORMAT_NV12 && | ||
| 2320 | texture->format != SDL_PIXELFORMAT_NV21) { | ||
| 2321 | return SDL_SetError("Texture format must by NV12 or NV21"); | ||
| 2322 | } | ||
| 2323 | |||
| 2324 | real_rect.x = 0; | ||
| 2325 | real_rect.y = 0; | ||
| 2326 | real_rect.w = texture->w; | ||
| 2327 | real_rect.h = texture->h; | ||
| 2328 | if (rect) { | ||
| 2329 | SDL_GetRectIntersection(rect, &real_rect, &real_rect); | ||
| 2330 | } | ||
| 2331 | |||
| 2332 | if (real_rect.w == 0 || real_rect.h == 0) { | ||
| 2333 | return true; // nothing to do. | ||
| 2334 | } | ||
| 2335 | |||
| 2336 | if (texture->yuv) { | ||
| 2337 | return SDL_UpdateTextureNVPlanar(texture, &real_rect, Yplane, Ypitch, UVplane, UVpitch); | ||
| 2338 | } else { | ||
| 2339 | SDL_assert(!texture->native); | ||
| 2340 | renderer = texture->renderer; | ||
| 2341 | SDL_assert(renderer->UpdateTextureNV); | ||
| 2342 | if (renderer->UpdateTextureNV) { | ||
| 2343 | if (!FlushRenderCommandsIfTextureNeeded(texture)) { | ||
| 2344 | return false; | ||
| 2345 | } | ||
| 2346 | return renderer->UpdateTextureNV(renderer, texture, &real_rect, Yplane, Ypitch, UVplane, UVpitch); | ||
| 2347 | } else { | ||
| 2348 | return SDL_Unsupported(); | ||
| 2349 | } | ||
| 2350 | } | ||
| 2351 | #else | ||
| 2352 | return false; | ||
| 2353 | #endif | ||
| 2354 | } | ||
| 2355 | |||
| 2356 | #ifdef SDL_HAVE_YUV | ||
| 2357 | static bool SDL_LockTextureYUV(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2358 | void **pixels, int *pitch) | ||
| 2359 | { | ||
| 2360 | return SDL_SW_LockYUVTexture(texture->yuv, rect, pixels, pitch); | ||
| 2361 | } | ||
| 2362 | #endif // SDL_HAVE_YUV | ||
| 2363 | |||
| 2364 | static bool SDL_LockTextureNative(SDL_Texture *texture, const SDL_Rect *rect, | ||
| 2365 | void **pixels, int *pitch) | ||
| 2366 | { | ||
| 2367 | texture->locked_rect = *rect; | ||
| 2368 | *pixels = (void *)((Uint8 *)texture->pixels + | ||
| 2369 | rect->y * texture->pitch + | ||
| 2370 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 2371 | *pitch = texture->pitch; | ||
| 2372 | return true; | ||
| 2373 | } | ||
| 2374 | |||
| 2375 | bool SDL_LockTexture(SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 2376 | { | ||
| 2377 | SDL_Rect full_rect; | ||
| 2378 | |||
| 2379 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 2380 | |||
| 2381 | if (texture->access != SDL_TEXTUREACCESS_STREAMING) { | ||
| 2382 | return SDL_SetError("SDL_LockTexture(): texture must be streaming"); | ||
| 2383 | } | ||
| 2384 | |||
| 2385 | if (!rect) { | ||
| 2386 | full_rect.x = 0; | ||
| 2387 | full_rect.y = 0; | ||
| 2388 | full_rect.w = texture->w; | ||
| 2389 | full_rect.h = texture->h; | ||
| 2390 | rect = &full_rect; | ||
| 2391 | } | ||
| 2392 | |||
| 2393 | #ifdef SDL_HAVE_YUV | ||
| 2394 | if (texture->yuv) { | ||
| 2395 | if (!FlushRenderCommandsIfTextureNeeded(texture)) { | ||
| 2396 | return false; | ||
| 2397 | } | ||
| 2398 | return SDL_LockTextureYUV(texture, rect, pixels, pitch); | ||
| 2399 | } else | ||
| 2400 | #endif | ||
| 2401 | if (texture->native) { | ||
| 2402 | // Calls a real SDL_LockTexture/SDL_UnlockTexture on unlock, flushing then. | ||
| 2403 | return SDL_LockTextureNative(texture, rect, pixels, pitch); | ||
| 2404 | } else { | ||
| 2405 | SDL_Renderer *renderer = texture->renderer; | ||
| 2406 | if (!FlushRenderCommandsIfTextureNeeded(texture)) { | ||
| 2407 | return false; | ||
| 2408 | } | ||
| 2409 | return renderer->LockTexture(renderer, texture, rect, pixels, pitch); | ||
| 2410 | } | ||
| 2411 | } | ||
| 2412 | |||
| 2413 | bool SDL_LockTextureToSurface(SDL_Texture *texture, const SDL_Rect *rect, SDL_Surface **surface) | ||
| 2414 | { | ||
| 2415 | SDL_Rect real_rect; | ||
| 2416 | void *pixels = NULL; | ||
| 2417 | int pitch = 0; // fix static analysis | ||
| 2418 | |||
| 2419 | if (!texture || !surface) { | ||
| 2420 | return false; | ||
| 2421 | } | ||
| 2422 | |||
| 2423 | real_rect.x = 0; | ||
| 2424 | real_rect.y = 0; | ||
| 2425 | real_rect.w = texture->w; | ||
| 2426 | real_rect.h = texture->h; | ||
| 2427 | if (rect) { | ||
| 2428 | SDL_GetRectIntersection(rect, &real_rect, &real_rect); | ||
| 2429 | } | ||
| 2430 | |||
| 2431 | if (!SDL_LockTexture(texture, &real_rect, &pixels, &pitch)) { | ||
| 2432 | return false; | ||
| 2433 | } | ||
| 2434 | |||
| 2435 | texture->locked_surface = SDL_CreateSurfaceFrom(real_rect.w, real_rect.h, texture->format, pixels, pitch); | ||
| 2436 | if (!texture->locked_surface) { | ||
| 2437 | SDL_UnlockTexture(texture); | ||
| 2438 | return false; | ||
| 2439 | } | ||
| 2440 | |||
| 2441 | *surface = texture->locked_surface; | ||
| 2442 | return true; | ||
| 2443 | } | ||
| 2444 | |||
| 2445 | #ifdef SDL_HAVE_YUV | ||
| 2446 | static void SDL_UnlockTextureYUV(SDL_Texture *texture) | ||
| 2447 | { | ||
| 2448 | SDL_Texture *native = texture->native; | ||
| 2449 | void *native_pixels = NULL; | ||
| 2450 | int native_pitch = 0; | ||
| 2451 | SDL_Rect rect; | ||
| 2452 | |||
| 2453 | rect.x = 0; | ||
| 2454 | rect.y = 0; | ||
| 2455 | rect.w = texture->w; | ||
| 2456 | rect.h = texture->h; | ||
| 2457 | |||
| 2458 | if (!SDL_LockTexture(native, &rect, &native_pixels, &native_pitch)) { | ||
| 2459 | return; | ||
| 2460 | } | ||
| 2461 | SDL_SW_CopyYUVToRGB(texture->yuv, &rect, native->format, | ||
| 2462 | rect.w, rect.h, native_pixels, native_pitch); | ||
| 2463 | SDL_UnlockTexture(native); | ||
| 2464 | } | ||
| 2465 | #endif // SDL_HAVE_YUV | ||
| 2466 | |||
| 2467 | static void SDL_UnlockTextureNative(SDL_Texture *texture) | ||
| 2468 | { | ||
| 2469 | SDL_Texture *native = texture->native; | ||
| 2470 | void *native_pixels = NULL; | ||
| 2471 | int native_pitch = 0; | ||
| 2472 | const SDL_Rect *rect = &texture->locked_rect; | ||
| 2473 | const void *pixels = (void *)((Uint8 *)texture->pixels + | ||
| 2474 | rect->y * texture->pitch + | ||
| 2475 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 2476 | int pitch = texture->pitch; | ||
| 2477 | |||
| 2478 | if (!SDL_LockTexture(native, rect, &native_pixels, &native_pitch)) { | ||
| 2479 | return; | ||
| 2480 | } | ||
| 2481 | SDL_ConvertPixels(rect->w, rect->h, | ||
| 2482 | texture->format, pixels, pitch, | ||
| 2483 | native->format, native_pixels, native_pitch); | ||
| 2484 | SDL_UnlockTexture(native); | ||
| 2485 | } | ||
| 2486 | |||
| 2487 | void SDL_UnlockTexture(SDL_Texture *texture) | ||
| 2488 | { | ||
| 2489 | CHECK_TEXTURE_MAGIC(texture,); | ||
| 2490 | |||
| 2491 | if (texture->access != SDL_TEXTUREACCESS_STREAMING) { | ||
| 2492 | return; | ||
| 2493 | } | ||
| 2494 | #ifdef SDL_HAVE_YUV | ||
| 2495 | if (texture->yuv) { | ||
| 2496 | SDL_UnlockTextureYUV(texture); | ||
| 2497 | } else | ||
| 2498 | #endif | ||
| 2499 | if (texture->native) { | ||
| 2500 | SDL_UnlockTextureNative(texture); | ||
| 2501 | } else { | ||
| 2502 | SDL_Renderer *renderer = texture->renderer; | ||
| 2503 | renderer->UnlockTexture(renderer, texture); | ||
| 2504 | } | ||
| 2505 | |||
| 2506 | SDL_DestroySurface(texture->locked_surface); | ||
| 2507 | texture->locked_surface = NULL; | ||
| 2508 | } | ||
| 2509 | |||
| 2510 | bool SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 2511 | { | ||
| 2512 | // texture == NULL is valid and means reset the target to the window | ||
| 2513 | if (texture) { | ||
| 2514 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 2515 | if (renderer != texture->renderer) { | ||
| 2516 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 2517 | } | ||
| 2518 | if (texture->access != SDL_TEXTUREACCESS_TARGET) { | ||
| 2519 | return SDL_SetError("Texture not created with SDL_TEXTUREACCESS_TARGET"); | ||
| 2520 | } | ||
| 2521 | if (texture->native) { | ||
| 2522 | // Always render to the native texture | ||
| 2523 | texture = texture->native; | ||
| 2524 | } | ||
| 2525 | } | ||
| 2526 | |||
| 2527 | if (texture == renderer->target) { | ||
| 2528 | // Nothing to do! | ||
| 2529 | return true; | ||
| 2530 | } | ||
| 2531 | |||
| 2532 | FlushRenderCommands(renderer); // time to send everything to the GPU! | ||
| 2533 | |||
| 2534 | SDL_LockMutex(renderer->target_mutex); | ||
| 2535 | |||
| 2536 | renderer->target = texture; | ||
| 2537 | if (texture) { | ||
| 2538 | renderer->view = &texture->view; | ||
| 2539 | } else { | ||
| 2540 | renderer->view = &renderer->main_view; | ||
| 2541 | } | ||
| 2542 | UpdateColorScale(renderer); | ||
| 2543 | |||
| 2544 | if (!renderer->SetRenderTarget(renderer, texture)) { | ||
| 2545 | SDL_UnlockMutex(renderer->target_mutex); | ||
| 2546 | return false; | ||
| 2547 | } | ||
| 2548 | |||
| 2549 | SDL_UnlockMutex(renderer->target_mutex); | ||
| 2550 | |||
| 2551 | if (!QueueCmdSetViewport(renderer)) { | ||
| 2552 | return false; | ||
| 2553 | } | ||
| 2554 | if (!QueueCmdSetClipRect(renderer)) { | ||
| 2555 | return false; | ||
| 2556 | } | ||
| 2557 | |||
| 2558 | // All set! | ||
| 2559 | return true; | ||
| 2560 | } | ||
| 2561 | |||
| 2562 | SDL_Texture *SDL_GetRenderTarget(SDL_Renderer *renderer) | ||
| 2563 | { | ||
| 2564 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 2565 | if (!renderer->target) { | ||
| 2566 | return NULL; | ||
| 2567 | } | ||
| 2568 | return (SDL_Texture *) SDL_GetPointerProperty(SDL_GetTextureProperties(renderer->target), SDL_PROP_TEXTURE_PARENT_POINTER, renderer->target); | ||
| 2569 | } | ||
| 2570 | |||
| 2571 | static void UpdateLogicalPresentation(SDL_Renderer *renderer) | ||
| 2572 | { | ||
| 2573 | SDL_RenderViewState *view = renderer->view; | ||
| 2574 | const bool is_main_view = (view == &renderer->main_view); | ||
| 2575 | const float logical_w = view->logical_w; | ||
| 2576 | const float logical_h = view->logical_h; | ||
| 2577 | int iwidth, iheight; | ||
| 2578 | |||
| 2579 | if (renderer->target) { | ||
| 2580 | iwidth = (int)renderer->target->w; | ||
| 2581 | iheight = (int)renderer->target->h; | ||
| 2582 | } else { | ||
| 2583 | SDL_GetRenderOutputSize(renderer, &iwidth, &iheight); | ||
| 2584 | } | ||
| 2585 | |||
| 2586 | view->logical_src_rect.x = 0.0f; | ||
| 2587 | view->logical_src_rect.y = 0.0f; | ||
| 2588 | view->logical_src_rect.w = logical_w; | ||
| 2589 | view->logical_src_rect.h = logical_h; | ||
| 2590 | |||
| 2591 | if (view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_DISABLED) { | ||
| 2592 | view->logical_dst_rect.x = 0.0f; | ||
| 2593 | view->logical_dst_rect.y = 0.0f; | ||
| 2594 | view->logical_dst_rect.w = iwidth; | ||
| 2595 | view->logical_dst_rect.h = iheight; | ||
| 2596 | view->logical_offset.x = view->logical_offset.y = 0.0f; | ||
| 2597 | view->logical_scale.x = view->logical_scale.y = 1.0f; | ||
| 2598 | view->current_scale.x = view->scale.x; // skip the multiplications against 1.0f. | ||
| 2599 | view->current_scale.y = view->scale.y; | ||
| 2600 | } else { | ||
| 2601 | const float output_w = (float)iwidth; | ||
| 2602 | const float output_h = (float)iheight; | ||
| 2603 | const float want_aspect = logical_w / logical_h; | ||
| 2604 | const float real_aspect = output_w / output_h; | ||
| 2605 | |||
| 2606 | if ((logical_w <= 0.0f) || (logical_h <= 0.0f)) { | ||
| 2607 | view->logical_dst_rect.x = 0.0f; | ||
| 2608 | view->logical_dst_rect.y = 0.0f; | ||
| 2609 | view->logical_dst_rect.w = output_w; | ||
| 2610 | view->logical_dst_rect.h = output_h; | ||
| 2611 | } else if (view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_INTEGER_SCALE) { | ||
| 2612 | float scale; | ||
| 2613 | if (want_aspect > real_aspect) { | ||
| 2614 | scale = (float)((int)output_w / (int)logical_w); // This an integer division! | ||
| 2615 | } else { | ||
| 2616 | scale = (float)((int)output_h / (int)logical_h); // This an integer division! | ||
| 2617 | } | ||
| 2618 | |||
| 2619 | if (scale < 1.0f) { | ||
| 2620 | scale = 1.0f; | ||
| 2621 | } | ||
| 2622 | |||
| 2623 | view->logical_dst_rect.w = SDL_floorf(logical_w * scale); | ||
| 2624 | view->logical_dst_rect.x = (output_w - view->logical_dst_rect.w) / 2.0f; | ||
| 2625 | view->logical_dst_rect.h = SDL_floorf(logical_h * scale); | ||
| 2626 | view->logical_dst_rect.y = (output_h - view->logical_dst_rect.h) / 2.0f; | ||
| 2627 | |||
| 2628 | } else if (view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_STRETCH || SDL_fabsf(want_aspect - real_aspect) < 0.0001f) { | ||
| 2629 | view->logical_dst_rect.x = 0.0f; | ||
| 2630 | view->logical_dst_rect.y = 0.0f; | ||
| 2631 | view->logical_dst_rect.w = output_w; | ||
| 2632 | view->logical_dst_rect.h = output_h; | ||
| 2633 | |||
| 2634 | } else if (want_aspect > real_aspect) { | ||
| 2635 | if (view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_LETTERBOX) { | ||
| 2636 | // We want a wider aspect ratio than is available - letterbox it | ||
| 2637 | const float scale = output_w / logical_w; | ||
| 2638 | view->logical_dst_rect.x = 0.0f; | ||
| 2639 | view->logical_dst_rect.w = output_w; | ||
| 2640 | view->logical_dst_rect.h = SDL_floorf(logical_h * scale); | ||
| 2641 | view->logical_dst_rect.y = (output_h - view->logical_dst_rect.h) / 2.0f; | ||
| 2642 | } else { // view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_OVERSCAN | ||
| 2643 | /* We want a wider aspect ratio than is available - | ||
| 2644 | zoom so logical height matches the real height | ||
| 2645 | and the width will grow off the screen | ||
| 2646 | */ | ||
| 2647 | const float scale = output_h / logical_h; | ||
| 2648 | view->logical_dst_rect.y = 0.0f; | ||
| 2649 | view->logical_dst_rect.h = output_h; | ||
| 2650 | view->logical_dst_rect.w = SDL_floorf(logical_w * scale); | ||
| 2651 | view->logical_dst_rect.x = (output_w - view->logical_dst_rect.w) / 2.0f; | ||
| 2652 | } | ||
| 2653 | } else { | ||
| 2654 | if (view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_LETTERBOX) { | ||
| 2655 | // We want a narrower aspect ratio than is available - use side-bars | ||
| 2656 | const float scale = output_h / logical_h; | ||
| 2657 | view->logical_dst_rect.y = 0.0f; | ||
| 2658 | view->logical_dst_rect.h = output_h; | ||
| 2659 | view->logical_dst_rect.w = SDL_floorf(logical_w * scale); | ||
| 2660 | view->logical_dst_rect.x = (output_w - view->logical_dst_rect.w) / 2.0f; | ||
| 2661 | } else { // view->logical_presentation_mode == SDL_LOGICAL_PRESENTATION_OVERSCAN | ||
| 2662 | /* We want a narrower aspect ratio than is available - | ||
| 2663 | zoom so logical width matches the real width | ||
| 2664 | and the height will grow off the screen | ||
| 2665 | */ | ||
| 2666 | const float scale = output_w / logical_w; | ||
| 2667 | view->logical_dst_rect.x = 0.0f; | ||
| 2668 | view->logical_dst_rect.w = output_w; | ||
| 2669 | view->logical_dst_rect.h = SDL_floorf(logical_h * scale); | ||
| 2670 | view->logical_dst_rect.y = (output_h - view->logical_dst_rect.h) / 2.0f; | ||
| 2671 | } | ||
| 2672 | } | ||
| 2673 | |||
| 2674 | view->logical_scale.x = (logical_w > 0.0f) ? view->logical_dst_rect.w / logical_w : 0.0f; | ||
| 2675 | view->logical_scale.y = (logical_h > 0.0f) ? view->logical_dst_rect.h / logical_h : 0.0f; | ||
| 2676 | view->current_scale.x = view->scale.x * view->logical_scale.x; | ||
| 2677 | view->current_scale.y = view->scale.y * view->logical_scale.y; | ||
| 2678 | view->logical_offset.x = view->logical_dst_rect.x; | ||
| 2679 | view->logical_offset.y = view->logical_dst_rect.y; | ||
| 2680 | } | ||
| 2681 | |||
| 2682 | if (is_main_view) { | ||
| 2683 | // This makes sure the dpi_scale is right. It also sets pixel_w and pixel_h, but we're going to change them directly below here. | ||
| 2684 | UpdateMainViewDimensions(renderer); | ||
| 2685 | } | ||
| 2686 | |||
| 2687 | view->pixel_w = (int) view->logical_dst_rect.w; | ||
| 2688 | view->pixel_h = (int) view->logical_dst_rect.h; | ||
| 2689 | UpdatePixelViewport(renderer, view); | ||
| 2690 | UpdatePixelClipRect(renderer, view); | ||
| 2691 | } | ||
| 2692 | |||
| 2693 | bool SDL_SetRenderLogicalPresentation(SDL_Renderer *renderer, int w, int h, SDL_RendererLogicalPresentation mode) | ||
| 2694 | { | ||
| 2695 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2696 | |||
| 2697 | SDL_RenderViewState *view = renderer->view; | ||
| 2698 | view->logical_presentation_mode = mode; | ||
| 2699 | view->logical_w = w; | ||
| 2700 | view->logical_h = h; | ||
| 2701 | |||
| 2702 | UpdateLogicalPresentation(renderer); | ||
| 2703 | |||
| 2704 | return true; | ||
| 2705 | } | ||
| 2706 | |||
| 2707 | bool SDL_GetRenderLogicalPresentation(SDL_Renderer *renderer, int *w, int *h, SDL_RendererLogicalPresentation *mode) | ||
| 2708 | { | ||
| 2709 | #define SETVAL(ptr, val) if (ptr) { *ptr = val; } | ||
| 2710 | |||
| 2711 | SETVAL(w, 0); | ||
| 2712 | SETVAL(h, 0); | ||
| 2713 | SETVAL(mode, SDL_LOGICAL_PRESENTATION_DISABLED); | ||
| 2714 | |||
| 2715 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2716 | |||
| 2717 | const SDL_RenderViewState *view = renderer->view; | ||
| 2718 | SETVAL(w, view->logical_w); | ||
| 2719 | SETVAL(h, view->logical_h); | ||
| 2720 | SETVAL(mode, view->logical_presentation_mode); | ||
| 2721 | |||
| 2722 | #undef SETVAL | ||
| 2723 | |||
| 2724 | return true; | ||
| 2725 | } | ||
| 2726 | |||
| 2727 | bool SDL_GetRenderLogicalPresentationRect(SDL_Renderer *renderer, SDL_FRect *rect) | ||
| 2728 | { | ||
| 2729 | if (rect) { | ||
| 2730 | SDL_zerop(rect); | ||
| 2731 | } | ||
| 2732 | |||
| 2733 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2734 | |||
| 2735 | if (rect) { | ||
| 2736 | SDL_copyp(rect, &renderer->view->logical_dst_rect); | ||
| 2737 | } | ||
| 2738 | return true; | ||
| 2739 | } | ||
| 2740 | |||
| 2741 | static void SDL_RenderLogicalBorders(SDL_Renderer *renderer, const SDL_FRect *dst) | ||
| 2742 | { | ||
| 2743 | const SDL_RenderViewState *view = renderer->view; | ||
| 2744 | |||
| 2745 | if (dst->x > 0.0f || dst->y > 0.0f) { | ||
| 2746 | SDL_BlendMode saved_blend_mode = renderer->blendMode; | ||
| 2747 | SDL_FColor saved_color = renderer->color; | ||
| 2748 | |||
| 2749 | SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); | ||
| 2750 | SDL_SetRenderDrawColorFloat(renderer, 0.0f, 0.0f, 0.0f, 1.0f); | ||
| 2751 | |||
| 2752 | if (dst->x > 0.0f) { | ||
| 2753 | SDL_FRect rect; | ||
| 2754 | |||
| 2755 | rect.x = 0.0f; | ||
| 2756 | rect.y = 0.0f; | ||
| 2757 | rect.w = dst->x; | ||
| 2758 | rect.h = (float)view->pixel_h; | ||
| 2759 | SDL_RenderFillRect(renderer, &rect); | ||
| 2760 | |||
| 2761 | rect.x = dst->x + dst->w; | ||
| 2762 | rect.w = (float)view->pixel_w - rect.x; | ||
| 2763 | SDL_RenderFillRect(renderer, &rect); | ||
| 2764 | } | ||
| 2765 | |||
| 2766 | if (dst->y > 0.0f) { | ||
| 2767 | SDL_FRect rect; | ||
| 2768 | |||
| 2769 | rect.x = 0.0f; | ||
| 2770 | rect.y = 0.0f; | ||
| 2771 | rect.w = (float)view->pixel_w; | ||
| 2772 | rect.h = dst->y; | ||
| 2773 | SDL_RenderFillRect(renderer, &rect); | ||
| 2774 | |||
| 2775 | rect.y = dst->y + dst->h; | ||
| 2776 | rect.h = (float)view->pixel_h - rect.y; | ||
| 2777 | SDL_RenderFillRect(renderer, &rect); | ||
| 2778 | } | ||
| 2779 | |||
| 2780 | SDL_SetRenderDrawBlendMode(renderer, saved_blend_mode); | ||
| 2781 | SDL_SetRenderDrawColorFloat(renderer, saved_color.r, saved_color.g, saved_color.b, saved_color.a); | ||
| 2782 | } | ||
| 2783 | } | ||
| 2784 | |||
| 2785 | static void SDL_RenderLogicalPresentation(SDL_Renderer *renderer) | ||
| 2786 | { | ||
| 2787 | SDL_assert(renderer->view == &renderer->main_view); | ||
| 2788 | |||
| 2789 | SDL_RenderViewState *view = &renderer->main_view; | ||
| 2790 | const SDL_RendererLogicalPresentation mode = view->logical_presentation_mode; | ||
| 2791 | if (mode == SDL_LOGICAL_PRESENTATION_LETTERBOX) { | ||
| 2792 | // save off some state we're going to trample. | ||
| 2793 | const int logical_w = view->logical_w; | ||
| 2794 | const int logical_h = view->logical_h; | ||
| 2795 | const float scale_x = view->scale.x; | ||
| 2796 | const float scale_y = view->scale.y; | ||
| 2797 | const bool clipping_enabled = view->clipping_enabled; | ||
| 2798 | SDL_Rect orig_viewport, orig_cliprect; | ||
| 2799 | const SDL_FRect logical_dst_rect = view->logical_dst_rect; | ||
| 2800 | |||
| 2801 | SDL_copyp(&orig_viewport, &view->viewport); | ||
| 2802 | if (clipping_enabled) { | ||
| 2803 | SDL_copyp(&orig_cliprect, &view->clip_rect); | ||
| 2804 | } | ||
| 2805 | |||
| 2806 | // trample some state. | ||
| 2807 | SDL_SetRenderLogicalPresentation(renderer, logical_w, logical_h, SDL_LOGICAL_PRESENTATION_DISABLED); | ||
| 2808 | SDL_SetRenderViewport(renderer, NULL); | ||
| 2809 | if (clipping_enabled) { | ||
| 2810 | SDL_SetRenderClipRect(renderer, NULL); | ||
| 2811 | } | ||
| 2812 | SDL_SetRenderScale(renderer, 1.0f, 1.0f); | ||
| 2813 | |||
| 2814 | // draw the borders. | ||
| 2815 | SDL_RenderLogicalBorders(renderer, &logical_dst_rect); | ||
| 2816 | |||
| 2817 | // now set everything back. | ||
| 2818 | view->logical_presentation_mode = mode; | ||
| 2819 | SDL_SetRenderViewport(renderer, &orig_viewport); | ||
| 2820 | if (clipping_enabled) { | ||
| 2821 | SDL_SetRenderClipRect(renderer, &orig_cliprect); | ||
| 2822 | } | ||
| 2823 | SDL_SetRenderScale(renderer, scale_x, scale_y); | ||
| 2824 | |||
| 2825 | SDL_SetRenderLogicalPresentation(renderer, logical_w, logical_h, mode); | ||
| 2826 | } | ||
| 2827 | } | ||
| 2828 | |||
| 2829 | static bool SDL_RenderVectorFromWindow(SDL_Renderer *renderer, float window_dx, float window_dy, float *dx, float *dy) | ||
| 2830 | { | ||
| 2831 | // Convert from window coordinates to pixels within the window | ||
| 2832 | window_dx *= renderer->dpi_scale.x; | ||
| 2833 | window_dy *= renderer->dpi_scale.y; | ||
| 2834 | |||
| 2835 | // Convert from pixels within the window to pixels within the view | ||
| 2836 | const SDL_RenderViewState *view = &renderer->main_view; | ||
| 2837 | if (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED) { | ||
| 2838 | const SDL_FRect *src = &view->logical_src_rect; | ||
| 2839 | const SDL_FRect *dst = &view->logical_dst_rect; | ||
| 2840 | window_dx = (window_dx * src->w) / dst->w; | ||
| 2841 | window_dy = (window_dy * src->h) / dst->h; | ||
| 2842 | } | ||
| 2843 | |||
| 2844 | window_dx /= view->scale.x; | ||
| 2845 | window_dy /= view->scale.y; | ||
| 2846 | |||
| 2847 | *dx = window_dx; | ||
| 2848 | *dy = window_dy; | ||
| 2849 | return true; | ||
| 2850 | } | ||
| 2851 | |||
| 2852 | bool SDL_RenderCoordinatesFromWindow(SDL_Renderer *renderer, float window_x, float window_y, float *x, float *y) | ||
| 2853 | { | ||
| 2854 | float render_x, render_y; | ||
| 2855 | |||
| 2856 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2857 | |||
| 2858 | // Convert from window coordinates to pixels within the window | ||
| 2859 | render_x = window_x * renderer->dpi_scale.x; | ||
| 2860 | render_y = window_y * renderer->dpi_scale.y; | ||
| 2861 | |||
| 2862 | // Convert from pixels within the window to pixels within the view | ||
| 2863 | const SDL_RenderViewState *view = &renderer->main_view; | ||
| 2864 | if (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED) { | ||
| 2865 | const SDL_FRect *src = &view->logical_src_rect; | ||
| 2866 | const SDL_FRect *dst = &view->logical_dst_rect; | ||
| 2867 | render_x = ((render_x - dst->x) * src->w) / dst->w; | ||
| 2868 | render_y = ((render_y - dst->y) * src->h) / dst->h; | ||
| 2869 | } | ||
| 2870 | |||
| 2871 | render_x = (render_x / view->scale.x) - view->viewport.x; | ||
| 2872 | render_y = (render_y / view->scale.y) - view->viewport.y; | ||
| 2873 | |||
| 2874 | if (x) { | ||
| 2875 | *x = render_x; | ||
| 2876 | } | ||
| 2877 | if (y) { | ||
| 2878 | *y = render_y; | ||
| 2879 | } | ||
| 2880 | return true; | ||
| 2881 | } | ||
| 2882 | |||
| 2883 | bool SDL_RenderCoordinatesToWindow(SDL_Renderer *renderer, float x, float y, float *window_x, float *window_y) | ||
| 2884 | { | ||
| 2885 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2886 | |||
| 2887 | const SDL_RenderViewState *view = &renderer->main_view; | ||
| 2888 | x = (view->viewport.x + x) * view->scale.x; | ||
| 2889 | y = (view->viewport.y + y) * view->scale.y; | ||
| 2890 | |||
| 2891 | // Convert from render coordinates to pixels within the window | ||
| 2892 | if (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED) { | ||
| 2893 | const SDL_FRect *src = &view->logical_src_rect; | ||
| 2894 | const SDL_FRect *dst = &view->logical_dst_rect; | ||
| 2895 | x = dst->x + ((x * dst->w) / src->w); | ||
| 2896 | y = dst->y + ((y * dst->h) / src->h); | ||
| 2897 | } | ||
| 2898 | |||
| 2899 | // Convert from pixels within the window to window coordinates | ||
| 2900 | x /= renderer->dpi_scale.x; | ||
| 2901 | y /= renderer->dpi_scale.y; | ||
| 2902 | |||
| 2903 | if (window_x) { | ||
| 2904 | *window_x = x; | ||
| 2905 | } | ||
| 2906 | if (window_y) { | ||
| 2907 | *window_y = y; | ||
| 2908 | } | ||
| 2909 | return true; | ||
| 2910 | } | ||
| 2911 | |||
| 2912 | bool SDL_ConvertEventToRenderCoordinates(SDL_Renderer *renderer, SDL_Event *event) | ||
| 2913 | { | ||
| 2914 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2915 | |||
| 2916 | if (event->type == SDL_EVENT_MOUSE_MOTION) { | ||
| 2917 | SDL_Window *window = SDL_GetWindowFromID(event->motion.windowID); | ||
| 2918 | if (window == renderer->window) { | ||
| 2919 | SDL_RenderCoordinatesFromWindow(renderer, event->motion.x, event->motion.y, &event->motion.x, &event->motion.y); | ||
| 2920 | SDL_RenderVectorFromWindow(renderer, event->motion.xrel, event->motion.yrel, &event->motion.xrel, &event->motion.yrel); | ||
| 2921 | } | ||
| 2922 | } else if (event->type == SDL_EVENT_MOUSE_BUTTON_DOWN || | ||
| 2923 | event->type == SDL_EVENT_MOUSE_BUTTON_UP) { | ||
| 2924 | SDL_Window *window = SDL_GetWindowFromID(event->button.windowID); | ||
| 2925 | if (window == renderer->window) { | ||
| 2926 | SDL_RenderCoordinatesFromWindow(renderer, event->button.x, event->button.y, &event->button.x, &event->button.y); | ||
| 2927 | } | ||
| 2928 | } else if (event->type == SDL_EVENT_MOUSE_WHEEL) { | ||
| 2929 | SDL_Window *window = SDL_GetWindowFromID(event->wheel.windowID); | ||
| 2930 | if (window == renderer->window) { | ||
| 2931 | SDL_RenderCoordinatesFromWindow(renderer, event->wheel.mouse_x, | ||
| 2932 | event->wheel.mouse_y, | ||
| 2933 | &event->wheel.mouse_x, | ||
| 2934 | &event->wheel.mouse_y); | ||
| 2935 | } | ||
| 2936 | } else if (event->type == SDL_EVENT_FINGER_DOWN || | ||
| 2937 | event->type == SDL_EVENT_FINGER_UP || | ||
| 2938 | event->type == SDL_EVENT_FINGER_CANCELED || | ||
| 2939 | event->type == SDL_EVENT_FINGER_MOTION) { | ||
| 2940 | // FIXME: Are these events guaranteed to be window relative? | ||
| 2941 | if (renderer->window) { | ||
| 2942 | int w, h; | ||
| 2943 | if (!SDL_GetWindowSize(renderer->window, &w, &h)) { | ||
| 2944 | return false; | ||
| 2945 | } | ||
| 2946 | SDL_RenderCoordinatesFromWindow(renderer, event->tfinger.x * w, event->tfinger.y * h, &event->tfinger.x, &event->tfinger.y); | ||
| 2947 | SDL_RenderVectorFromWindow(renderer, event->tfinger.dx * w, event->tfinger.dy * h, &event->tfinger.dx, &event->tfinger.dy); | ||
| 2948 | } | ||
| 2949 | } else if (event->type == SDL_EVENT_PEN_MOTION) { | ||
| 2950 | SDL_Window *window = SDL_GetWindowFromID(event->pmotion.windowID); | ||
| 2951 | if (window == renderer->window) { | ||
| 2952 | SDL_RenderCoordinatesFromWindow(renderer, event->pmotion.x, event->pmotion.y, &event->pmotion.x, &event->pmotion.y); | ||
| 2953 | } | ||
| 2954 | } else if ((event->type == SDL_EVENT_PEN_DOWN) || (event->type == SDL_EVENT_PEN_UP)) { | ||
| 2955 | SDL_Window *window = SDL_GetWindowFromID(event->ptouch.windowID); | ||
| 2956 | if (window == renderer->window) { | ||
| 2957 | SDL_RenderCoordinatesFromWindow(renderer, event->ptouch.x, event->ptouch.y, &event->ptouch.x, &event->ptouch.y); | ||
| 2958 | } | ||
| 2959 | } else if ((event->type == SDL_EVENT_PEN_BUTTON_DOWN) || (event->type == SDL_EVENT_PEN_BUTTON_UP)) { | ||
| 2960 | SDL_Window *window = SDL_GetWindowFromID(event->pbutton.windowID); | ||
| 2961 | if (window == renderer->window) { | ||
| 2962 | SDL_RenderCoordinatesFromWindow(renderer, event->pbutton.x, event->pbutton.y, &event->pbutton.x, &event->pbutton.y); | ||
| 2963 | } | ||
| 2964 | } else if (event->type == SDL_EVENT_PEN_AXIS) { | ||
| 2965 | SDL_Window *window = SDL_GetWindowFromID(event->paxis.windowID); | ||
| 2966 | if (window == renderer->window) { | ||
| 2967 | SDL_RenderCoordinatesFromWindow(renderer, event->paxis.x, event->paxis.y, &event->paxis.x, &event->paxis.y); | ||
| 2968 | } | ||
| 2969 | } else if (event->type == SDL_EVENT_DROP_POSITION || | ||
| 2970 | event->type == SDL_EVENT_DROP_FILE || | ||
| 2971 | event->type == SDL_EVENT_DROP_TEXT || | ||
| 2972 | event->type == SDL_EVENT_DROP_COMPLETE) { | ||
| 2973 | SDL_Window *window = SDL_GetWindowFromID(event->drop.windowID); | ||
| 2974 | if (window == renderer->window) { | ||
| 2975 | SDL_RenderCoordinatesFromWindow(renderer, event->drop.x, event->drop.y, &event->drop.x, &event->drop.y); | ||
| 2976 | } | ||
| 2977 | } | ||
| 2978 | return true; | ||
| 2979 | } | ||
| 2980 | |||
| 2981 | bool SDL_SetRenderViewport(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 2982 | { | ||
| 2983 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 2984 | |||
| 2985 | SDL_RenderViewState *view = renderer->view; | ||
| 2986 | if (rect) { | ||
| 2987 | if ((rect->w < 0) || (rect->h < 0)) { | ||
| 2988 | return SDL_SetError("rect has a negative size"); | ||
| 2989 | } | ||
| 2990 | SDL_copyp(&view->viewport, rect); | ||
| 2991 | } else { | ||
| 2992 | view->viewport.x = view->viewport.y = 0; | ||
| 2993 | view->viewport.w = view->viewport.h = -1; | ||
| 2994 | } | ||
| 2995 | UpdatePixelViewport(renderer, view); | ||
| 2996 | |||
| 2997 | return QueueCmdSetViewport(renderer); | ||
| 2998 | } | ||
| 2999 | |||
| 3000 | bool SDL_GetRenderViewport(SDL_Renderer *renderer, SDL_Rect *rect) | ||
| 3001 | { | ||
| 3002 | if (rect) { | ||
| 3003 | SDL_zerop(rect); | ||
| 3004 | } | ||
| 3005 | |||
| 3006 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3007 | |||
| 3008 | if (rect) { | ||
| 3009 | const SDL_RenderViewState *view = renderer->view; | ||
| 3010 | rect->x = view->viewport.x; | ||
| 3011 | rect->y = view->viewport.y; | ||
| 3012 | if (view->viewport.w >= 0) { | ||
| 3013 | rect->w = view->viewport.w; | ||
| 3014 | } else { | ||
| 3015 | rect->w = (int)SDL_ceilf(view->pixel_w / view->current_scale.x); | ||
| 3016 | } | ||
| 3017 | if (view->viewport.h >= 0) { | ||
| 3018 | rect->h = view->viewport.h; | ||
| 3019 | } else { | ||
| 3020 | rect->h = (int)SDL_ceilf(view->pixel_h / view->current_scale.y); | ||
| 3021 | } | ||
| 3022 | } | ||
| 3023 | return true; | ||
| 3024 | } | ||
| 3025 | |||
| 3026 | bool SDL_RenderViewportSet(SDL_Renderer *renderer) | ||
| 3027 | { | ||
| 3028 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3029 | |||
| 3030 | const SDL_RenderViewState *view = renderer->view; | ||
| 3031 | return (view->viewport.w >= 0 && view->viewport.h >= 0); | ||
| 3032 | } | ||
| 3033 | |||
| 3034 | static void GetRenderViewportSize(SDL_Renderer *renderer, SDL_FRect *rect) | ||
| 3035 | { | ||
| 3036 | const SDL_RenderViewState *view = renderer->view; | ||
| 3037 | const float scale_x = view->current_scale.x; | ||
| 3038 | const float scale_y = view->current_scale.y; | ||
| 3039 | |||
| 3040 | rect->x = 0.0f; | ||
| 3041 | rect->y = 0.0f; | ||
| 3042 | |||
| 3043 | if (view->viewport.w >= 0) { | ||
| 3044 | rect->w = (float)view->viewport.w; | ||
| 3045 | } else { | ||
| 3046 | rect->w = view->pixel_w / scale_x; | ||
| 3047 | } | ||
| 3048 | |||
| 3049 | if (view->viewport.h >= 0) { | ||
| 3050 | rect->h = (float)view->viewport.h; | ||
| 3051 | } else { | ||
| 3052 | rect->h = view->pixel_h / scale_y; | ||
| 3053 | } | ||
| 3054 | } | ||
| 3055 | |||
| 3056 | bool SDL_GetRenderSafeArea(SDL_Renderer *renderer, SDL_Rect *rect) | ||
| 3057 | { | ||
| 3058 | if (rect) { | ||
| 3059 | SDL_zerop(rect); | ||
| 3060 | } | ||
| 3061 | |||
| 3062 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3063 | |||
| 3064 | if (renderer->target || !renderer->window) { | ||
| 3065 | // The entire viewport is safe for rendering | ||
| 3066 | return SDL_GetRenderViewport(renderer, rect); | ||
| 3067 | } | ||
| 3068 | |||
| 3069 | if (rect) { | ||
| 3070 | // Get the window safe rect | ||
| 3071 | SDL_Rect safe; | ||
| 3072 | if (!SDL_GetWindowSafeArea(renderer->window, &safe)) { | ||
| 3073 | return false; | ||
| 3074 | } | ||
| 3075 | |||
| 3076 | // Convert the coordinates into the render space | ||
| 3077 | float minx = (float)safe.x; | ||
| 3078 | float miny = (float)safe.y; | ||
| 3079 | float maxx = (float)safe.x + safe.w; | ||
| 3080 | float maxy = (float)safe.y + safe.h; | ||
| 3081 | if (!SDL_RenderCoordinatesFromWindow(renderer, minx, miny, &minx, &miny) || | ||
| 3082 | !SDL_RenderCoordinatesFromWindow(renderer, maxx, maxy, &maxx, &maxy)) { | ||
| 3083 | return false; | ||
| 3084 | } | ||
| 3085 | |||
| 3086 | rect->x = (int)SDL_ceilf(minx); | ||
| 3087 | rect->y = (int)SDL_ceilf(miny); | ||
| 3088 | rect->w = (int)SDL_ceilf(maxx - minx); | ||
| 3089 | rect->h = (int)SDL_ceilf(maxy - miny); | ||
| 3090 | |||
| 3091 | // Clip with the viewport | ||
| 3092 | SDL_Rect viewport; | ||
| 3093 | if (!SDL_GetRenderViewport(renderer, &viewport)) { | ||
| 3094 | return false; | ||
| 3095 | } | ||
| 3096 | if (!SDL_GetRectIntersection(rect, &viewport, rect)) { | ||
| 3097 | return SDL_SetError("No safe area within viewport"); | ||
| 3098 | } | ||
| 3099 | } | ||
| 3100 | return true; | ||
| 3101 | } | ||
| 3102 | |||
| 3103 | bool SDL_SetRenderClipRect(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 3104 | { | ||
| 3105 | CHECK_RENDERER_MAGIC(renderer, false) | ||
| 3106 | |||
| 3107 | SDL_RenderViewState *view = renderer->view; | ||
| 3108 | if (rect && rect->w >= 0 && rect->h >= 0) { | ||
| 3109 | view->clipping_enabled = true; | ||
| 3110 | SDL_copyp(&view->clip_rect, rect); | ||
| 3111 | } else { | ||
| 3112 | view->clipping_enabled = false; | ||
| 3113 | SDL_zero(view->clip_rect); | ||
| 3114 | } | ||
| 3115 | UpdatePixelClipRect(renderer, view); | ||
| 3116 | |||
| 3117 | return QueueCmdSetClipRect(renderer); | ||
| 3118 | } | ||
| 3119 | |||
| 3120 | bool SDL_GetRenderClipRect(SDL_Renderer *renderer, SDL_Rect *rect) | ||
| 3121 | { | ||
| 3122 | if (rect) { | ||
| 3123 | SDL_zerop(rect); | ||
| 3124 | } | ||
| 3125 | |||
| 3126 | CHECK_RENDERER_MAGIC(renderer, false) | ||
| 3127 | |||
| 3128 | if (rect) { | ||
| 3129 | SDL_copyp(rect, &renderer->view->clip_rect); | ||
| 3130 | } | ||
| 3131 | return true; | ||
| 3132 | } | ||
| 3133 | |||
| 3134 | bool SDL_RenderClipEnabled(SDL_Renderer *renderer) | ||
| 3135 | { | ||
| 3136 | CHECK_RENDERER_MAGIC(renderer, false) | ||
| 3137 | return renderer->view->clipping_enabled; | ||
| 3138 | } | ||
| 3139 | |||
| 3140 | bool SDL_SetRenderScale(SDL_Renderer *renderer, float scaleX, float scaleY) | ||
| 3141 | { | ||
| 3142 | bool result = true; | ||
| 3143 | |||
| 3144 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3145 | |||
| 3146 | SDL_RenderViewState *view = renderer->view; | ||
| 3147 | |||
| 3148 | if ((view->scale.x == scaleX) && (view->scale.y == scaleY)) { | ||
| 3149 | return true; | ||
| 3150 | } | ||
| 3151 | |||
| 3152 | view->scale.x = scaleX; | ||
| 3153 | view->scale.y = scaleY; | ||
| 3154 | view->current_scale.x = scaleX * view->logical_scale.x; | ||
| 3155 | view->current_scale.y = scaleY * view->logical_scale.y; | ||
| 3156 | UpdatePixelViewport(renderer, view); | ||
| 3157 | UpdatePixelClipRect(renderer, view); | ||
| 3158 | |||
| 3159 | // The scale affects the existing viewport and clip rectangle | ||
| 3160 | result &= QueueCmdSetViewport(renderer); | ||
| 3161 | result &= QueueCmdSetClipRect(renderer); | ||
| 3162 | return result; | ||
| 3163 | } | ||
| 3164 | |||
| 3165 | bool SDL_GetRenderScale(SDL_Renderer *renderer, float *scaleX, float *scaleY) | ||
| 3166 | { | ||
| 3167 | if (scaleX) { | ||
| 3168 | *scaleX = 1.0f; | ||
| 3169 | } | ||
| 3170 | if (scaleY) { | ||
| 3171 | *scaleY = 1.0f; | ||
| 3172 | } | ||
| 3173 | |||
| 3174 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3175 | |||
| 3176 | const SDL_RenderViewState *view = renderer->view; | ||
| 3177 | |||
| 3178 | if (scaleX) { | ||
| 3179 | *scaleX = view->scale.x; | ||
| 3180 | } | ||
| 3181 | if (scaleY) { | ||
| 3182 | *scaleY = view->scale.y; | ||
| 3183 | } | ||
| 3184 | return true; | ||
| 3185 | } | ||
| 3186 | |||
| 3187 | bool SDL_SetRenderDrawColor(SDL_Renderer *renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 3188 | { | ||
| 3189 | const float fR = (float)r / 255.0f; | ||
| 3190 | const float fG = (float)g / 255.0f; | ||
| 3191 | const float fB = (float)b / 255.0f; | ||
| 3192 | const float fA = (float)a / 255.0f; | ||
| 3193 | |||
| 3194 | return SDL_SetRenderDrawColorFloat(renderer, fR, fG, fB, fA); | ||
| 3195 | } | ||
| 3196 | |||
| 3197 | bool SDL_SetRenderDrawColorFloat(SDL_Renderer *renderer, float r, float g, float b, float a) | ||
| 3198 | { | ||
| 3199 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3200 | |||
| 3201 | renderer->color.r = r; | ||
| 3202 | renderer->color.g = g; | ||
| 3203 | renderer->color.b = b; | ||
| 3204 | renderer->color.a = a; | ||
| 3205 | return true; | ||
| 3206 | } | ||
| 3207 | |||
| 3208 | bool SDL_GetRenderDrawColor(SDL_Renderer *renderer, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a) | ||
| 3209 | { | ||
| 3210 | float fR, fG, fB, fA; | ||
| 3211 | |||
| 3212 | if (!SDL_GetRenderDrawColorFloat(renderer, &fR, &fG, &fB, &fA)) { | ||
| 3213 | if (r) { | ||
| 3214 | *r = 0; | ||
| 3215 | } | ||
| 3216 | if (g) { | ||
| 3217 | *g = 0; | ||
| 3218 | } | ||
| 3219 | if (b) { | ||
| 3220 | *b = 0; | ||
| 3221 | } | ||
| 3222 | if (a) { | ||
| 3223 | *a = 0; | ||
| 3224 | } | ||
| 3225 | return false; | ||
| 3226 | } | ||
| 3227 | |||
| 3228 | if (r) { | ||
| 3229 | *r = (Uint8)(fR * 255.0f); | ||
| 3230 | } | ||
| 3231 | if (g) { | ||
| 3232 | *g = (Uint8)(fG * 255.0f); | ||
| 3233 | } | ||
| 3234 | if (b) { | ||
| 3235 | *b = (Uint8)(fB * 255.0f); | ||
| 3236 | } | ||
| 3237 | if (a) { | ||
| 3238 | *a = (Uint8)(fA * 255.0f); | ||
| 3239 | } | ||
| 3240 | return true; | ||
| 3241 | } | ||
| 3242 | |||
| 3243 | bool SDL_GetRenderDrawColorFloat(SDL_Renderer *renderer, float *r, float *g, float *b, float *a) | ||
| 3244 | { | ||
| 3245 | SDL_FColor color; | ||
| 3246 | |||
| 3247 | if (r) { | ||
| 3248 | *r = 0.0f; | ||
| 3249 | } | ||
| 3250 | if (g) { | ||
| 3251 | *g = 0.0f; | ||
| 3252 | } | ||
| 3253 | if (b) { | ||
| 3254 | *b = 0.0f; | ||
| 3255 | } | ||
| 3256 | if (a) { | ||
| 3257 | *a = 0.0f; | ||
| 3258 | } | ||
| 3259 | |||
| 3260 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3261 | |||
| 3262 | color = renderer->color; | ||
| 3263 | |||
| 3264 | if (r) { | ||
| 3265 | *r = color.r; | ||
| 3266 | } | ||
| 3267 | if (g) { | ||
| 3268 | *g = color.g; | ||
| 3269 | } | ||
| 3270 | if (b) { | ||
| 3271 | *b = color.b; | ||
| 3272 | } | ||
| 3273 | if (a) { | ||
| 3274 | *a = color.a; | ||
| 3275 | } | ||
| 3276 | return true; | ||
| 3277 | } | ||
| 3278 | |||
| 3279 | bool SDL_SetRenderColorScale(SDL_Renderer *renderer, float scale) | ||
| 3280 | { | ||
| 3281 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3282 | |||
| 3283 | renderer->desired_color_scale = scale; | ||
| 3284 | UpdateColorScale(renderer); | ||
| 3285 | return true; | ||
| 3286 | } | ||
| 3287 | |||
| 3288 | bool SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale) | ||
| 3289 | { | ||
| 3290 | if (scale) { | ||
| 3291 | *scale = 1.0f; | ||
| 3292 | } | ||
| 3293 | |||
| 3294 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3295 | |||
| 3296 | if (scale) { | ||
| 3297 | *scale = renderer->desired_color_scale; | ||
| 3298 | } | ||
| 3299 | return true; | ||
| 3300 | } | ||
| 3301 | |||
| 3302 | bool SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 3303 | { | ||
| 3304 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3305 | |||
| 3306 | if (blendMode == SDL_BLENDMODE_INVALID) { | ||
| 3307 | return SDL_InvalidParamError("blendMode"); | ||
| 3308 | } | ||
| 3309 | |||
| 3310 | if (blendMode == SDL_BLENDMODE_INVALID) { | ||
| 3311 | return SDL_InvalidParamError("blendMode"); | ||
| 3312 | } | ||
| 3313 | |||
| 3314 | if (!IsSupportedBlendMode(renderer, blendMode)) { | ||
| 3315 | return SDL_Unsupported(); | ||
| 3316 | } | ||
| 3317 | |||
| 3318 | renderer->blendMode = blendMode; | ||
| 3319 | return true; | ||
| 3320 | } | ||
| 3321 | |||
| 3322 | bool SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode) | ||
| 3323 | { | ||
| 3324 | if (blendMode) { | ||
| 3325 | *blendMode = SDL_BLENDMODE_INVALID; | ||
| 3326 | } | ||
| 3327 | |||
| 3328 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3329 | |||
| 3330 | if (blendMode) { | ||
| 3331 | *blendMode = renderer->blendMode; | ||
| 3332 | } | ||
| 3333 | return true; | ||
| 3334 | } | ||
| 3335 | |||
| 3336 | bool SDL_RenderClear(SDL_Renderer *renderer) | ||
| 3337 | { | ||
| 3338 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3339 | |||
| 3340 | return QueueCmdClear(renderer); | ||
| 3341 | } | ||
| 3342 | |||
| 3343 | bool SDL_RenderPoint(SDL_Renderer *renderer, float x, float y) | ||
| 3344 | { | ||
| 3345 | SDL_FPoint fpoint; | ||
| 3346 | fpoint.x = x; | ||
| 3347 | fpoint.y = y; | ||
| 3348 | return SDL_RenderPoints(renderer, &fpoint, 1); | ||
| 3349 | } | ||
| 3350 | |||
| 3351 | static bool RenderPointsWithRects(SDL_Renderer *renderer, const SDL_FPoint *fpoints, const int count) | ||
| 3352 | { | ||
| 3353 | bool result; | ||
| 3354 | bool isstack; | ||
| 3355 | SDL_FRect *frects; | ||
| 3356 | int i; | ||
| 3357 | |||
| 3358 | if (count < 1) { | ||
| 3359 | return true; | ||
| 3360 | } | ||
| 3361 | |||
| 3362 | frects = SDL_small_alloc(SDL_FRect, count, &isstack); | ||
| 3363 | if (!frects) { | ||
| 3364 | return false; | ||
| 3365 | } | ||
| 3366 | |||
| 3367 | const SDL_RenderViewState *view = renderer->view; | ||
| 3368 | const float scale_x = view->current_scale.x; | ||
| 3369 | const float scale_y = view->current_scale.y; | ||
| 3370 | for (i = 0; i < count; ++i) { | ||
| 3371 | frects[i].x = fpoints[i].x * scale_x; | ||
| 3372 | frects[i].y = fpoints[i].y * scale_y; | ||
| 3373 | frects[i].w = scale_x; | ||
| 3374 | frects[i].h = scale_y; | ||
| 3375 | } | ||
| 3376 | |||
| 3377 | result = QueueCmdFillRects(renderer, frects, count); | ||
| 3378 | |||
| 3379 | SDL_small_free(frects, isstack); | ||
| 3380 | |||
| 3381 | return result; | ||
| 3382 | } | ||
| 3383 | |||
| 3384 | bool SDL_RenderPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int count) | ||
| 3385 | { | ||
| 3386 | bool result; | ||
| 3387 | |||
| 3388 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3389 | |||
| 3390 | if (!points) { | ||
| 3391 | return SDL_InvalidParamError("SDL_RenderPoints(): points"); | ||
| 3392 | } | ||
| 3393 | if (count < 1) { | ||
| 3394 | return true; | ||
| 3395 | } | ||
| 3396 | |||
| 3397 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 3398 | // Don't draw while we're hidden | ||
| 3399 | if (renderer->hidden) { | ||
| 3400 | return true; | ||
| 3401 | } | ||
| 3402 | #endif | ||
| 3403 | |||
| 3404 | const SDL_RenderViewState *view = renderer->view; | ||
| 3405 | if ((view->current_scale.x != 1.0f) || (view->current_scale.y != 1.0f)) { | ||
| 3406 | result = RenderPointsWithRects(renderer, points, count); | ||
| 3407 | } else { | ||
| 3408 | result = QueueCmdDrawPoints(renderer, points, count); | ||
| 3409 | } | ||
| 3410 | return result; | ||
| 3411 | } | ||
| 3412 | |||
| 3413 | bool SDL_RenderLine(SDL_Renderer *renderer, float x1, float y1, float x2, float y2) | ||
| 3414 | { | ||
| 3415 | SDL_FPoint points[2]; | ||
| 3416 | points[0].x = x1; | ||
| 3417 | points[0].y = y1; | ||
| 3418 | points[1].x = x2; | ||
| 3419 | points[1].y = y2; | ||
| 3420 | return SDL_RenderLines(renderer, points, 2); | ||
| 3421 | } | ||
| 3422 | |||
| 3423 | static bool RenderLineBresenham(SDL_Renderer *renderer, int x1, int y1, int x2, int y2, bool draw_last) | ||
| 3424 | { | ||
| 3425 | const SDL_RenderViewState *view = renderer->view; | ||
| 3426 | const int MAX_PIXELS = SDL_max(view->pixel_w, view->pixel_h) * 4; | ||
| 3427 | int i, deltax, deltay, numpixels; | ||
| 3428 | int d, dinc1, dinc2; | ||
| 3429 | int x, xinc1, xinc2; | ||
| 3430 | int y, yinc1, yinc2; | ||
| 3431 | bool result; | ||
| 3432 | bool isstack; | ||
| 3433 | SDL_FPoint *points; | ||
| 3434 | SDL_Rect viewport; | ||
| 3435 | |||
| 3436 | /* the backend might clip this further to the clipping rect, but we | ||
| 3437 | just want a basic safety against generating millions of points for | ||
| 3438 | massive lines. */ | ||
| 3439 | viewport = view->pixel_viewport; | ||
| 3440 | viewport.x = 0; | ||
| 3441 | viewport.y = 0; | ||
| 3442 | if (!SDL_GetRectAndLineIntersection(&viewport, &x1, &y1, &x2, &y2)) { | ||
| 3443 | return true; | ||
| 3444 | } | ||
| 3445 | |||
| 3446 | deltax = SDL_abs(x2 - x1); | ||
| 3447 | deltay = SDL_abs(y2 - y1); | ||
| 3448 | |||
| 3449 | if (deltax >= deltay) { | ||
| 3450 | numpixels = deltax + 1; | ||
| 3451 | d = (2 * deltay) - deltax; | ||
| 3452 | dinc1 = deltay * 2; | ||
| 3453 | dinc2 = (deltay - deltax) * 2; | ||
| 3454 | xinc1 = 1; | ||
| 3455 | xinc2 = 1; | ||
| 3456 | yinc1 = 0; | ||
| 3457 | yinc2 = 1; | ||
| 3458 | } else { | ||
| 3459 | numpixels = deltay + 1; | ||
| 3460 | d = (2 * deltax) - deltay; | ||
| 3461 | dinc1 = deltax * 2; | ||
| 3462 | dinc2 = (deltax - deltay) * 2; | ||
| 3463 | xinc1 = 0; | ||
| 3464 | xinc2 = 1; | ||
| 3465 | yinc1 = 1; | ||
| 3466 | yinc2 = 1; | ||
| 3467 | } | ||
| 3468 | |||
| 3469 | if (x1 > x2) { | ||
| 3470 | xinc1 = -xinc1; | ||
| 3471 | xinc2 = -xinc2; | ||
| 3472 | } | ||
| 3473 | if (y1 > y2) { | ||
| 3474 | yinc1 = -yinc1; | ||
| 3475 | yinc2 = -yinc2; | ||
| 3476 | } | ||
| 3477 | |||
| 3478 | x = x1; | ||
| 3479 | y = y1; | ||
| 3480 | |||
| 3481 | if (!draw_last) { | ||
| 3482 | --numpixels; | ||
| 3483 | } | ||
| 3484 | |||
| 3485 | if (numpixels > MAX_PIXELS) { | ||
| 3486 | return SDL_SetError("Line too long (tried to draw %d pixels, max %d)", numpixels, MAX_PIXELS); | ||
| 3487 | } | ||
| 3488 | |||
| 3489 | points = SDL_small_alloc(SDL_FPoint, numpixels, &isstack); | ||
| 3490 | if (!points) { | ||
| 3491 | return false; | ||
| 3492 | } | ||
| 3493 | for (i = 0; i < numpixels; ++i) { | ||
| 3494 | points[i].x = (float)x; | ||
| 3495 | points[i].y = (float)y; | ||
| 3496 | |||
| 3497 | if (d < 0) { | ||
| 3498 | d += dinc1; | ||
| 3499 | x += xinc1; | ||
| 3500 | y += yinc1; | ||
| 3501 | } else { | ||
| 3502 | d += dinc2; | ||
| 3503 | x += xinc2; | ||
| 3504 | y += yinc2; | ||
| 3505 | } | ||
| 3506 | } | ||
| 3507 | |||
| 3508 | if ((view->current_scale.x != 1.0f) || (view->current_scale.y != 1.0f)) { | ||
| 3509 | result = RenderPointsWithRects(renderer, points, numpixels); | ||
| 3510 | } else { | ||
| 3511 | result = QueueCmdDrawPoints(renderer, points, numpixels); | ||
| 3512 | } | ||
| 3513 | |||
| 3514 | SDL_small_free(points, isstack); | ||
| 3515 | |||
| 3516 | return result; | ||
| 3517 | } | ||
| 3518 | |||
| 3519 | static bool RenderLinesWithRectsF(SDL_Renderer *renderer, const SDL_FPoint *points, const int count) | ||
| 3520 | { | ||
| 3521 | const SDL_RenderViewState *view = renderer->view; | ||
| 3522 | const float scale_x = view->current_scale.x; | ||
| 3523 | const float scale_y = view->current_scale.y; | ||
| 3524 | SDL_FRect *frect; | ||
| 3525 | SDL_FRect *frects; | ||
| 3526 | int i, nrects = 0; | ||
| 3527 | bool result = true; | ||
| 3528 | bool isstack; | ||
| 3529 | bool drew_line = false; | ||
| 3530 | bool draw_last = false; | ||
| 3531 | |||
| 3532 | frects = SDL_small_alloc(SDL_FRect, count - 1, &isstack); | ||
| 3533 | if (!frects) { | ||
| 3534 | return false; | ||
| 3535 | } | ||
| 3536 | |||
| 3537 | for (i = 0; i < count - 1; ++i) { | ||
| 3538 | bool same_x = (points[i].x == points[i + 1].x); | ||
| 3539 | bool same_y = (points[i].y == points[i + 1].y); | ||
| 3540 | |||
| 3541 | if (i == (count - 2)) { | ||
| 3542 | if (!drew_line || points[i + 1].x != points[0].x || points[i + 1].y != points[0].y) { | ||
| 3543 | draw_last = true; | ||
| 3544 | } | ||
| 3545 | } else { | ||
| 3546 | if (same_x && same_y) { | ||
| 3547 | continue; | ||
| 3548 | } | ||
| 3549 | } | ||
| 3550 | if (same_x) { | ||
| 3551 | const float minY = SDL_min(points[i].y, points[i + 1].y); | ||
| 3552 | const float maxY = SDL_max(points[i].y, points[i + 1].y); | ||
| 3553 | |||
| 3554 | frect = &frects[nrects++]; | ||
| 3555 | frect->x = points[i].x * scale_x; | ||
| 3556 | frect->y = minY * scale_y; | ||
| 3557 | frect->w = scale_x; | ||
| 3558 | frect->h = (maxY - minY + draw_last) * scale_y; | ||
| 3559 | if (!draw_last && points[i + 1].y < points[i].y) { | ||
| 3560 | frect->y += scale_y; | ||
| 3561 | } | ||
| 3562 | } else if (same_y) { | ||
| 3563 | const float minX = SDL_min(points[i].x, points[i + 1].x); | ||
| 3564 | const float maxX = SDL_max(points[i].x, points[i + 1].x); | ||
| 3565 | |||
| 3566 | frect = &frects[nrects++]; | ||
| 3567 | frect->x = minX * scale_x; | ||
| 3568 | frect->y = points[i].y * scale_y; | ||
| 3569 | frect->w = (maxX - minX + draw_last) * scale_x; | ||
| 3570 | frect->h = scale_y; | ||
| 3571 | if (!draw_last && points[i + 1].x < points[i].x) { | ||
| 3572 | frect->x += scale_x; | ||
| 3573 | } | ||
| 3574 | } else { | ||
| 3575 | result &= RenderLineBresenham(renderer, (int)SDL_roundf(points[i].x), (int)SDL_roundf(points[i].y), | ||
| 3576 | (int)SDL_roundf(points[i + 1].x), (int)SDL_roundf(points[i + 1].y), draw_last); | ||
| 3577 | } | ||
| 3578 | drew_line = true; | ||
| 3579 | } | ||
| 3580 | |||
| 3581 | if (nrects) { | ||
| 3582 | result &= QueueCmdFillRects(renderer, frects, nrects); | ||
| 3583 | } | ||
| 3584 | |||
| 3585 | SDL_small_free(frects, isstack); | ||
| 3586 | |||
| 3587 | return result; | ||
| 3588 | } | ||
| 3589 | |||
| 3590 | bool SDL_RenderLines(SDL_Renderer *renderer, const SDL_FPoint *points, int count) | ||
| 3591 | { | ||
| 3592 | bool result = true; | ||
| 3593 | |||
| 3594 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3595 | |||
| 3596 | if (!points) { | ||
| 3597 | return SDL_InvalidParamError("SDL_RenderLines(): points"); | ||
| 3598 | } | ||
| 3599 | if (count < 2) { | ||
| 3600 | return true; | ||
| 3601 | } | ||
| 3602 | |||
| 3603 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 3604 | // Don't draw while we're hidden | ||
| 3605 | if (renderer->hidden) { | ||
| 3606 | return true; | ||
| 3607 | } | ||
| 3608 | #endif | ||
| 3609 | |||
| 3610 | SDL_RenderViewState *view = renderer->view; | ||
| 3611 | const bool islogical = ((view == &renderer->main_view) && (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED)); | ||
| 3612 | |||
| 3613 | if (islogical || (renderer->line_method == SDL_RENDERLINEMETHOD_GEOMETRY)) { | ||
| 3614 | const float scale_x = view->current_scale.x; | ||
| 3615 | const float scale_y = view->current_scale.y; | ||
| 3616 | bool isstack1; | ||
| 3617 | bool isstack2; | ||
| 3618 | float *xy = SDL_small_alloc(float, 4 * 2 * count, &isstack1); | ||
| 3619 | int *indices = SDL_small_alloc(int, (4) * 3 * (count - 1) + (2) * 3 * (count), &isstack2); | ||
| 3620 | |||
| 3621 | if (xy && indices) { | ||
| 3622 | int i; | ||
| 3623 | float *ptr_xy = xy; | ||
| 3624 | int *ptr_indices = indices; | ||
| 3625 | const int xy_stride = 2 * sizeof(float); | ||
| 3626 | int num_vertices = 4 * count; | ||
| 3627 | int num_indices = 0; | ||
| 3628 | const int size_indices = 4; | ||
| 3629 | int cur_index = -4; | ||
| 3630 | const int is_looping = (points[0].x == points[count - 1].x && points[0].y == points[count - 1].y); | ||
| 3631 | SDL_FPoint p; // previous point | ||
| 3632 | p.x = p.y = 0.0f; | ||
| 3633 | /* p q | ||
| 3634 | |||
| 3635 | 0----1------ 4----5 | ||
| 3636 | | \ |``\ | \ | | ||
| 3637 | | \ | ` `\| \ | | ||
| 3638 | 3----2-------7----6 | ||
| 3639 | */ | ||
| 3640 | for (i = 0; i < count; ++i) { | ||
| 3641 | SDL_FPoint q = points[i]; // current point | ||
| 3642 | |||
| 3643 | q.x *= scale_x; | ||
| 3644 | q.y *= scale_y; | ||
| 3645 | |||
| 3646 | *ptr_xy++ = q.x; | ||
| 3647 | *ptr_xy++ = q.y; | ||
| 3648 | *ptr_xy++ = q.x + scale_x; | ||
| 3649 | *ptr_xy++ = q.y; | ||
| 3650 | *ptr_xy++ = q.x + scale_x; | ||
| 3651 | *ptr_xy++ = q.y + scale_y; | ||
| 3652 | *ptr_xy++ = q.x; | ||
| 3653 | *ptr_xy++ = q.y + scale_y; | ||
| 3654 | |||
| 3655 | #define ADD_TRIANGLE(i1, i2, i3) \ | ||
| 3656 | *ptr_indices++ = cur_index + (i1); \ | ||
| 3657 | *ptr_indices++ = cur_index + (i2); \ | ||
| 3658 | *ptr_indices++ = cur_index + (i3); \ | ||
| 3659 | num_indices += 3; | ||
| 3660 | |||
| 3661 | // closed polyline, don´t draw twice the point | ||
| 3662 | if (i || is_looping == 0) { | ||
| 3663 | ADD_TRIANGLE(4, 5, 6) | ||
| 3664 | ADD_TRIANGLE(4, 6, 7) | ||
| 3665 | } | ||
| 3666 | |||
| 3667 | // first point only, no segment | ||
| 3668 | if (i == 0) { | ||
| 3669 | p = q; | ||
| 3670 | cur_index += 4; | ||
| 3671 | continue; | ||
| 3672 | } | ||
| 3673 | |||
| 3674 | // draw segment | ||
| 3675 | if (p.y == q.y) { | ||
| 3676 | if (p.x < q.x) { | ||
| 3677 | ADD_TRIANGLE(1, 4, 7) | ||
| 3678 | ADD_TRIANGLE(1, 7, 2) | ||
| 3679 | } else { | ||
| 3680 | ADD_TRIANGLE(5, 0, 3) | ||
| 3681 | ADD_TRIANGLE(5, 3, 6) | ||
| 3682 | } | ||
| 3683 | } else if (p.x == q.x) { | ||
| 3684 | if (p.y < q.y) { | ||
| 3685 | ADD_TRIANGLE(2, 5, 4) | ||
| 3686 | ADD_TRIANGLE(2, 4, 3) | ||
| 3687 | } else { | ||
| 3688 | ADD_TRIANGLE(6, 1, 0) | ||
| 3689 | ADD_TRIANGLE(6, 0, 7) | ||
| 3690 | } | ||
| 3691 | } else { | ||
| 3692 | if (p.y < q.y) { | ||
| 3693 | if (p.x < q.x) { | ||
| 3694 | ADD_TRIANGLE(1, 5, 4) | ||
| 3695 | ADD_TRIANGLE(1, 4, 2) | ||
| 3696 | ADD_TRIANGLE(2, 4, 7) | ||
| 3697 | ADD_TRIANGLE(2, 7, 3) | ||
| 3698 | } else { | ||
| 3699 | ADD_TRIANGLE(4, 0, 5) | ||
| 3700 | ADD_TRIANGLE(5, 0, 3) | ||
| 3701 | ADD_TRIANGLE(5, 3, 6) | ||
| 3702 | ADD_TRIANGLE(6, 3, 2) | ||
| 3703 | } | ||
| 3704 | } else { | ||
| 3705 | if (p.x < q.x) { | ||
| 3706 | ADD_TRIANGLE(0, 4, 7) | ||
| 3707 | ADD_TRIANGLE(0, 7, 1) | ||
| 3708 | ADD_TRIANGLE(1, 7, 6) | ||
| 3709 | ADD_TRIANGLE(1, 6, 2) | ||
| 3710 | } else { | ||
| 3711 | ADD_TRIANGLE(6, 5, 1) | ||
| 3712 | ADD_TRIANGLE(6, 1, 0) | ||
| 3713 | ADD_TRIANGLE(7, 6, 0) | ||
| 3714 | ADD_TRIANGLE(7, 0, 3) | ||
| 3715 | } | ||
| 3716 | } | ||
| 3717 | } | ||
| 3718 | |||
| 3719 | p = q; | ||
| 3720 | cur_index += 4; | ||
| 3721 | } | ||
| 3722 | |||
| 3723 | result = QueueCmdGeometry(renderer, NULL, | ||
| 3724 | xy, xy_stride, &renderer->color, 0 /* color_stride */, NULL, 0, | ||
| 3725 | num_vertices, indices, num_indices, size_indices, | ||
| 3726 | 1.0f, 1.0f, SDL_TEXTURE_ADDRESS_CLAMP); | ||
| 3727 | } | ||
| 3728 | |||
| 3729 | SDL_small_free(xy, isstack1); | ||
| 3730 | SDL_small_free(indices, isstack2); | ||
| 3731 | |||
| 3732 | } else if (renderer->line_method == SDL_RENDERLINEMETHOD_POINTS) { | ||
| 3733 | result = RenderLinesWithRectsF(renderer, points, count); | ||
| 3734 | } else if (view->scale.x != 1.0f || view->scale.y != 1.0f) { /* we checked for logical scale elsewhere. */ | ||
| 3735 | result = RenderLinesWithRectsF(renderer, points, count); | ||
| 3736 | } else { | ||
| 3737 | result = QueueCmdDrawLines(renderer, points, count); | ||
| 3738 | } | ||
| 3739 | |||
| 3740 | return result; | ||
| 3741 | } | ||
| 3742 | |||
| 3743 | bool SDL_RenderRect(SDL_Renderer *renderer, const SDL_FRect *rect) | ||
| 3744 | { | ||
| 3745 | SDL_FRect frect; | ||
| 3746 | SDL_FPoint points[5]; | ||
| 3747 | |||
| 3748 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3749 | |||
| 3750 | // If 'rect' == NULL, then outline the whole surface | ||
| 3751 | if (!rect) { | ||
| 3752 | GetRenderViewportSize(renderer, &frect); | ||
| 3753 | rect = &frect; | ||
| 3754 | } | ||
| 3755 | |||
| 3756 | points[0].x = rect->x; | ||
| 3757 | points[0].y = rect->y; | ||
| 3758 | points[1].x = rect->x + rect->w - 1; | ||
| 3759 | points[1].y = rect->y; | ||
| 3760 | points[2].x = rect->x + rect->w - 1; | ||
| 3761 | points[2].y = rect->y + rect->h - 1; | ||
| 3762 | points[3].x = rect->x; | ||
| 3763 | points[3].y = rect->y + rect->h - 1; | ||
| 3764 | points[4].x = rect->x; | ||
| 3765 | points[4].y = rect->y; | ||
| 3766 | return SDL_RenderLines(renderer, points, 5); | ||
| 3767 | } | ||
| 3768 | |||
| 3769 | bool SDL_RenderRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count) | ||
| 3770 | { | ||
| 3771 | int i; | ||
| 3772 | |||
| 3773 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3774 | |||
| 3775 | if (!rects) { | ||
| 3776 | return SDL_InvalidParamError("SDL_RenderRects(): rects"); | ||
| 3777 | } | ||
| 3778 | if (count < 1) { | ||
| 3779 | return true; | ||
| 3780 | } | ||
| 3781 | |||
| 3782 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 3783 | // Don't draw while we're hidden | ||
| 3784 | if (renderer->hidden) { | ||
| 3785 | return true; | ||
| 3786 | } | ||
| 3787 | #endif | ||
| 3788 | |||
| 3789 | for (i = 0; i < count; ++i) { | ||
| 3790 | if (!SDL_RenderRect(renderer, &rects[i])) { | ||
| 3791 | return false; | ||
| 3792 | } | ||
| 3793 | } | ||
| 3794 | return true; | ||
| 3795 | } | ||
| 3796 | |||
| 3797 | bool SDL_RenderFillRect(SDL_Renderer *renderer, const SDL_FRect *rect) | ||
| 3798 | { | ||
| 3799 | SDL_FRect frect; | ||
| 3800 | |||
| 3801 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3802 | |||
| 3803 | // If 'rect' == NULL, then fill the whole surface | ||
| 3804 | if (!rect) { | ||
| 3805 | GetRenderViewportSize(renderer, &frect); | ||
| 3806 | rect = &frect; | ||
| 3807 | } | ||
| 3808 | return SDL_RenderFillRects(renderer, rect, 1); | ||
| 3809 | } | ||
| 3810 | |||
| 3811 | bool SDL_RenderFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count) | ||
| 3812 | { | ||
| 3813 | SDL_FRect *frects; | ||
| 3814 | int i; | ||
| 3815 | bool result; | ||
| 3816 | bool isstack; | ||
| 3817 | |||
| 3818 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3819 | |||
| 3820 | if (!rects) { | ||
| 3821 | return SDL_InvalidParamError("SDL_RenderFillRects(): rects"); | ||
| 3822 | } | ||
| 3823 | if (count < 1) { | ||
| 3824 | return true; | ||
| 3825 | } | ||
| 3826 | |||
| 3827 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 3828 | // Don't draw while we're hidden | ||
| 3829 | if (renderer->hidden) { | ||
| 3830 | return true; | ||
| 3831 | } | ||
| 3832 | #endif | ||
| 3833 | |||
| 3834 | frects = SDL_small_alloc(SDL_FRect, count, &isstack); | ||
| 3835 | if (!frects) { | ||
| 3836 | return false; | ||
| 3837 | } | ||
| 3838 | |||
| 3839 | const SDL_RenderViewState *view = renderer->view; | ||
| 3840 | const float scale_x = view->current_scale.x; | ||
| 3841 | const float scale_y = view->current_scale.y; | ||
| 3842 | for (i = 0; i < count; ++i) { | ||
| 3843 | frects[i].x = rects[i].x * scale_x; | ||
| 3844 | frects[i].y = rects[i].y * scale_y; | ||
| 3845 | frects[i].w = rects[i].w * scale_x; | ||
| 3846 | frects[i].h = rects[i].h * scale_y; | ||
| 3847 | } | ||
| 3848 | |||
| 3849 | result = QueueCmdFillRects(renderer, frects, count); | ||
| 3850 | |||
| 3851 | SDL_small_free(frects, isstack); | ||
| 3852 | |||
| 3853 | return result; | ||
| 3854 | } | ||
| 3855 | |||
| 3856 | static bool SDL_RenderTextureInternal(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect) | ||
| 3857 | { | ||
| 3858 | const SDL_RenderViewState *view = renderer->view; | ||
| 3859 | const float scale_x = view->current_scale.x; | ||
| 3860 | const float scale_y = view->current_scale.y; | ||
| 3861 | const bool use_rendergeometry = (!renderer->QueueCopy); | ||
| 3862 | bool result; | ||
| 3863 | |||
| 3864 | if (use_rendergeometry) { | ||
| 3865 | float xy[8]; | ||
| 3866 | const int xy_stride = 2 * sizeof(float); | ||
| 3867 | float uv[8]; | ||
| 3868 | const int uv_stride = 2 * sizeof(float); | ||
| 3869 | const int num_vertices = 4; | ||
| 3870 | const int *indices = rect_index_order; | ||
| 3871 | const int num_indices = 6; | ||
| 3872 | const int size_indices = 4; | ||
| 3873 | float minu, minv, maxu, maxv; | ||
| 3874 | float minx, miny, maxx, maxy; | ||
| 3875 | |||
| 3876 | minu = srcrect->x / texture->w; | ||
| 3877 | minv = srcrect->y / texture->h; | ||
| 3878 | maxu = (srcrect->x + srcrect->w) / texture->w; | ||
| 3879 | maxv = (srcrect->y + srcrect->h) / texture->h; | ||
| 3880 | |||
| 3881 | minx = dstrect->x; | ||
| 3882 | miny = dstrect->y; | ||
| 3883 | maxx = dstrect->x + dstrect->w; | ||
| 3884 | maxy = dstrect->y + dstrect->h; | ||
| 3885 | |||
| 3886 | uv[0] = minu; | ||
| 3887 | uv[1] = minv; | ||
| 3888 | uv[2] = maxu; | ||
| 3889 | uv[3] = minv; | ||
| 3890 | uv[4] = maxu; | ||
| 3891 | uv[5] = maxv; | ||
| 3892 | uv[6] = minu; | ||
| 3893 | uv[7] = maxv; | ||
| 3894 | |||
| 3895 | xy[0] = minx; | ||
| 3896 | xy[1] = miny; | ||
| 3897 | xy[2] = maxx; | ||
| 3898 | xy[3] = miny; | ||
| 3899 | xy[4] = maxx; | ||
| 3900 | xy[5] = maxy; | ||
| 3901 | xy[6] = minx; | ||
| 3902 | xy[7] = maxy; | ||
| 3903 | |||
| 3904 | result = QueueCmdGeometry(renderer, texture, | ||
| 3905 | xy, xy_stride, &texture->color, 0 /* color_stride */, uv, uv_stride, | ||
| 3906 | num_vertices, indices, num_indices, size_indices, | ||
| 3907 | scale_x, scale_y, SDL_TEXTURE_ADDRESS_CLAMP); | ||
| 3908 | } else { | ||
| 3909 | const SDL_FRect rect = { dstrect->x * scale_x, dstrect->y * scale_y, dstrect->w * scale_x, dstrect->h * scale_y }; | ||
| 3910 | result = QueueCmdCopy(renderer, texture, srcrect, &rect); | ||
| 3911 | } | ||
| 3912 | return result; | ||
| 3913 | } | ||
| 3914 | |||
| 3915 | bool SDL_RenderTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect) | ||
| 3916 | { | ||
| 3917 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3918 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 3919 | |||
| 3920 | if (renderer != texture->renderer) { | ||
| 3921 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 3922 | } | ||
| 3923 | |||
| 3924 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 3925 | // Don't draw while we're hidden | ||
| 3926 | if (renderer->hidden) { | ||
| 3927 | return true; | ||
| 3928 | } | ||
| 3929 | #endif | ||
| 3930 | |||
| 3931 | SDL_FRect real_srcrect; | ||
| 3932 | real_srcrect.x = 0.0f; | ||
| 3933 | real_srcrect.y = 0.0f; | ||
| 3934 | real_srcrect.w = (float)texture->w; | ||
| 3935 | real_srcrect.h = (float)texture->h; | ||
| 3936 | if (srcrect) { | ||
| 3937 | if (!SDL_GetRectIntersectionFloat(srcrect, &real_srcrect, &real_srcrect) || | ||
| 3938 | real_srcrect.w == 0.0f || real_srcrect.h == 0.0f) { | ||
| 3939 | return true; | ||
| 3940 | } | ||
| 3941 | } | ||
| 3942 | |||
| 3943 | SDL_FRect full_dstrect; | ||
| 3944 | if (!dstrect) { | ||
| 3945 | GetRenderViewportSize(renderer, &full_dstrect); | ||
| 3946 | dstrect = &full_dstrect; | ||
| 3947 | } | ||
| 3948 | |||
| 3949 | if (texture->native) { | ||
| 3950 | texture = texture->native; | ||
| 3951 | } | ||
| 3952 | |||
| 3953 | texture->last_command_generation = renderer->render_command_generation; | ||
| 3954 | |||
| 3955 | return SDL_RenderTextureInternal(renderer, texture, &real_srcrect, dstrect); | ||
| 3956 | } | ||
| 3957 | |||
| 3958 | bool SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 3959 | const SDL_FRect *srcrect, const SDL_FPoint *origin, const SDL_FPoint *right, const SDL_FPoint *down) | ||
| 3960 | { | ||
| 3961 | SDL_FRect real_srcrect; | ||
| 3962 | SDL_FRect real_dstrect; | ||
| 3963 | bool result; | ||
| 3964 | |||
| 3965 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 3966 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 3967 | |||
| 3968 | if (renderer != texture->renderer) { | ||
| 3969 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 3970 | } | ||
| 3971 | if (!renderer->QueueCopyEx && !renderer->QueueGeometry) { | ||
| 3972 | return SDL_SetError("Renderer does not support RenderCopyEx"); | ||
| 3973 | } | ||
| 3974 | |||
| 3975 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 3976 | // Don't draw while we're hidden | ||
| 3977 | if (renderer->hidden) { | ||
| 3978 | return true; | ||
| 3979 | } | ||
| 3980 | #endif | ||
| 3981 | |||
| 3982 | real_srcrect.x = 0.0f; | ||
| 3983 | real_srcrect.y = 0.0f; | ||
| 3984 | real_srcrect.w = (float)texture->w; | ||
| 3985 | real_srcrect.h = (float)texture->h; | ||
| 3986 | if (srcrect) { | ||
| 3987 | if (!SDL_GetRectIntersectionFloat(srcrect, &real_srcrect, &real_srcrect)) { | ||
| 3988 | return true; | ||
| 3989 | } | ||
| 3990 | } | ||
| 3991 | |||
| 3992 | GetRenderViewportSize(renderer, &real_dstrect); | ||
| 3993 | |||
| 3994 | if (texture->native) { | ||
| 3995 | texture = texture->native; | ||
| 3996 | } | ||
| 3997 | |||
| 3998 | texture->last_command_generation = renderer->render_command_generation; | ||
| 3999 | |||
| 4000 | const SDL_RenderViewState *view = renderer->view; | ||
| 4001 | const float scale_x = view->current_scale.x; | ||
| 4002 | const float scale_y = view->current_scale.y; | ||
| 4003 | |||
| 4004 | { | ||
| 4005 | float xy[8]; | ||
| 4006 | const int xy_stride = 2 * sizeof(float); | ||
| 4007 | float uv[8]; | ||
| 4008 | const int uv_stride = 2 * sizeof(float); | ||
| 4009 | const int num_vertices = 4; | ||
| 4010 | const int *indices = rect_index_order; | ||
| 4011 | const int num_indices = 6; | ||
| 4012 | const int size_indices = 4; | ||
| 4013 | |||
| 4014 | float minu = real_srcrect.x / texture->w; | ||
| 4015 | float minv = real_srcrect.y / texture->h; | ||
| 4016 | float maxu = (real_srcrect.x + real_srcrect.w) / texture->w; | ||
| 4017 | float maxv = (real_srcrect.y + real_srcrect.h) / texture->h; | ||
| 4018 | |||
| 4019 | uv[0] = minu; | ||
| 4020 | uv[1] = minv; | ||
| 4021 | uv[2] = maxu; | ||
| 4022 | uv[3] = minv; | ||
| 4023 | uv[4] = maxu; | ||
| 4024 | uv[5] = maxv; | ||
| 4025 | uv[6] = minu; | ||
| 4026 | uv[7] = maxv; | ||
| 4027 | |||
| 4028 | // (minx, miny) | ||
| 4029 | if (origin) { | ||
| 4030 | xy[0] = origin->x; | ||
| 4031 | xy[1] = origin->y; | ||
| 4032 | } else { | ||
| 4033 | xy[0] = real_dstrect.x; | ||
| 4034 | xy[1] = real_dstrect.y; | ||
| 4035 | } | ||
| 4036 | |||
| 4037 | // (maxx, miny) | ||
| 4038 | if (right) { | ||
| 4039 | xy[2] = right->x; | ||
| 4040 | xy[3] = right->y; | ||
| 4041 | } else { | ||
| 4042 | xy[2] = real_dstrect.x + real_dstrect.w; | ||
| 4043 | xy[3] = real_dstrect.y; | ||
| 4044 | } | ||
| 4045 | |||
| 4046 | // (minx, maxy) | ||
| 4047 | if (down) { | ||
| 4048 | xy[6] = down->x; | ||
| 4049 | xy[7] = down->y; | ||
| 4050 | } else { | ||
| 4051 | xy[6] = real_dstrect.x; | ||
| 4052 | xy[7] = real_dstrect.y + real_dstrect.h; | ||
| 4053 | } | ||
| 4054 | |||
| 4055 | // (maxx, maxy) | ||
| 4056 | if (origin || right || down) { | ||
| 4057 | xy[4] = xy[2] + xy[6] - xy[0]; | ||
| 4058 | xy[5] = xy[3] + xy[7] - xy[1]; | ||
| 4059 | } else { | ||
| 4060 | xy[4] = real_dstrect.x + real_dstrect.w; | ||
| 4061 | xy[5] = real_dstrect.y + real_dstrect.h; | ||
| 4062 | } | ||
| 4063 | |||
| 4064 | result = QueueCmdGeometry( | ||
| 4065 | renderer, texture, | ||
| 4066 | xy, xy_stride, | ||
| 4067 | &texture->color, 0 /* color_stride */, | ||
| 4068 | uv, uv_stride, | ||
| 4069 | num_vertices, indices, num_indices, size_indices, | ||
| 4070 | scale_x, scale_y, SDL_TEXTURE_ADDRESS_CLAMP | ||
| 4071 | ); | ||
| 4072 | } | ||
| 4073 | return result; | ||
| 4074 | } | ||
| 4075 | |||
| 4076 | bool SDL_RenderTextureRotated(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 4077 | const SDL_FRect *srcrect, const SDL_FRect *dstrect, | ||
| 4078 | const double angle, const SDL_FPoint *center, const SDL_FlipMode flip) | ||
| 4079 | { | ||
| 4080 | SDL_FRect real_srcrect; | ||
| 4081 | SDL_FPoint real_center; | ||
| 4082 | bool result; | ||
| 4083 | |||
| 4084 | if (flip == SDL_FLIP_NONE && (int)(angle / 360) == angle / 360) { // fast path when we don't need rotation or flipping | ||
| 4085 | return SDL_RenderTexture(renderer, texture, srcrect, dstrect); | ||
| 4086 | } | ||
| 4087 | |||
| 4088 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 4089 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 4090 | |||
| 4091 | if (renderer != texture->renderer) { | ||
| 4092 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 4093 | } | ||
| 4094 | if (!renderer->QueueCopyEx && !renderer->QueueGeometry) { | ||
| 4095 | return SDL_SetError("Renderer does not support RenderCopyEx"); | ||
| 4096 | } | ||
| 4097 | |||
| 4098 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 4099 | // Don't draw while we're hidden | ||
| 4100 | if (renderer->hidden) { | ||
| 4101 | return true; | ||
| 4102 | } | ||
| 4103 | #endif | ||
| 4104 | |||
| 4105 | real_srcrect.x = 0.0f; | ||
| 4106 | real_srcrect.y = 0.0f; | ||
| 4107 | real_srcrect.w = (float)texture->w; | ||
| 4108 | real_srcrect.h = (float)texture->h; | ||
| 4109 | if (srcrect) { | ||
| 4110 | if (!SDL_GetRectIntersectionFloat(srcrect, &real_srcrect, &real_srcrect)) { | ||
| 4111 | return true; | ||
| 4112 | } | ||
| 4113 | } | ||
| 4114 | |||
| 4115 | // We don't intersect the dstrect with the viewport as RenderCopy does because of potential rotation clipping issues... TODO: should we? | ||
| 4116 | SDL_FRect full_dstrect; | ||
| 4117 | if (!dstrect) { | ||
| 4118 | GetRenderViewportSize(renderer, &full_dstrect); | ||
| 4119 | dstrect = &full_dstrect; | ||
| 4120 | } | ||
| 4121 | |||
| 4122 | if (texture->native) { | ||
| 4123 | texture = texture->native; | ||
| 4124 | } | ||
| 4125 | |||
| 4126 | if (center) { | ||
| 4127 | real_center = *center; | ||
| 4128 | } else { | ||
| 4129 | real_center.x = dstrect->w / 2.0f; | ||
| 4130 | real_center.y = dstrect->h / 2.0f; | ||
| 4131 | } | ||
| 4132 | |||
| 4133 | texture->last_command_generation = renderer->render_command_generation; | ||
| 4134 | |||
| 4135 | const SDL_RenderViewState *view = renderer->view; | ||
| 4136 | const float scale_x = view->current_scale.x; | ||
| 4137 | const float scale_y = view->current_scale.y; | ||
| 4138 | |||
| 4139 | const bool use_rendergeometry = (!renderer->QueueCopyEx); | ||
| 4140 | if (use_rendergeometry) { | ||
| 4141 | float xy[8]; | ||
| 4142 | const int xy_stride = 2 * sizeof(float); | ||
| 4143 | float uv[8]; | ||
| 4144 | const int uv_stride = 2 * sizeof(float); | ||
| 4145 | const int num_vertices = 4; | ||
| 4146 | const int *indices = rect_index_order; | ||
| 4147 | const int num_indices = 6; | ||
| 4148 | const int size_indices = 4; | ||
| 4149 | float minu, minv, maxu, maxv; | ||
| 4150 | float minx, miny, maxx, maxy; | ||
| 4151 | float centerx, centery; | ||
| 4152 | |||
| 4153 | float s_minx, s_miny, s_maxx, s_maxy; | ||
| 4154 | float c_minx, c_miny, c_maxx, c_maxy; | ||
| 4155 | |||
| 4156 | const float radian_angle = (float)((SDL_PI_D * angle) / 180.0); | ||
| 4157 | const float s = SDL_sinf(radian_angle); | ||
| 4158 | const float c = SDL_cosf(radian_angle); | ||
| 4159 | |||
| 4160 | minu = real_srcrect.x / texture->w; | ||
| 4161 | minv = real_srcrect.y / texture->h; | ||
| 4162 | maxu = (real_srcrect.x + real_srcrect.w) / texture->w; | ||
| 4163 | maxv = (real_srcrect.y + real_srcrect.h) / texture->h; | ||
| 4164 | |||
| 4165 | centerx = real_center.x + dstrect->x; | ||
| 4166 | centery = real_center.y + dstrect->y; | ||
| 4167 | |||
| 4168 | if (flip & SDL_FLIP_HORIZONTAL) { | ||
| 4169 | minx = dstrect->x + dstrect->w; | ||
| 4170 | maxx = dstrect->x; | ||
| 4171 | } else { | ||
| 4172 | minx = dstrect->x; | ||
| 4173 | maxx = dstrect->x + dstrect->w; | ||
| 4174 | } | ||
| 4175 | |||
| 4176 | if (flip & SDL_FLIP_VERTICAL) { | ||
| 4177 | miny = dstrect->y + dstrect->h; | ||
| 4178 | maxy = dstrect->y; | ||
| 4179 | } else { | ||
| 4180 | miny = dstrect->y; | ||
| 4181 | maxy = dstrect->y + dstrect->h; | ||
| 4182 | } | ||
| 4183 | |||
| 4184 | uv[0] = minu; | ||
| 4185 | uv[1] = minv; | ||
| 4186 | uv[2] = maxu; | ||
| 4187 | uv[3] = minv; | ||
| 4188 | uv[4] = maxu; | ||
| 4189 | uv[5] = maxv; | ||
| 4190 | uv[6] = minu; | ||
| 4191 | uv[7] = maxv; | ||
| 4192 | |||
| 4193 | /* apply rotation with 2x2 matrix ( c -s ) | ||
| 4194 | * ( s c ) */ | ||
| 4195 | s_minx = s * (minx - centerx); | ||
| 4196 | s_miny = s * (miny - centery); | ||
| 4197 | s_maxx = s * (maxx - centerx); | ||
| 4198 | s_maxy = s * (maxy - centery); | ||
| 4199 | c_minx = c * (minx - centerx); | ||
| 4200 | c_miny = c * (miny - centery); | ||
| 4201 | c_maxx = c * (maxx - centerx); | ||
| 4202 | c_maxy = c * (maxy - centery); | ||
| 4203 | |||
| 4204 | // (minx, miny) | ||
| 4205 | xy[0] = (c_minx - s_miny) + centerx; | ||
| 4206 | xy[1] = (s_minx + c_miny) + centery; | ||
| 4207 | // (maxx, miny) | ||
| 4208 | xy[2] = (c_maxx - s_miny) + centerx; | ||
| 4209 | xy[3] = (s_maxx + c_miny) + centery; | ||
| 4210 | // (maxx, maxy) | ||
| 4211 | xy[4] = (c_maxx - s_maxy) + centerx; | ||
| 4212 | xy[5] = (s_maxx + c_maxy) + centery; | ||
| 4213 | // (minx, maxy) | ||
| 4214 | xy[6] = (c_minx - s_maxy) + centerx; | ||
| 4215 | xy[7] = (s_minx + c_maxy) + centery; | ||
| 4216 | |||
| 4217 | result = QueueCmdGeometry(renderer, texture, | ||
| 4218 | xy, xy_stride, &texture->color, 0 /* color_stride */, uv, uv_stride, | ||
| 4219 | num_vertices, indices, num_indices, size_indices, | ||
| 4220 | scale_x, scale_y, SDL_TEXTURE_ADDRESS_CLAMP); | ||
| 4221 | } else { | ||
| 4222 | result = QueueCmdCopyEx(renderer, texture, &real_srcrect, dstrect, angle, &real_center, flip, scale_x, scale_y); | ||
| 4223 | } | ||
| 4224 | return result; | ||
| 4225 | } | ||
| 4226 | |||
| 4227 | static bool SDL_RenderTextureTiled_Wrap(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float scale, const SDL_FRect *dstrect) | ||
| 4228 | { | ||
| 4229 | float xy[8]; | ||
| 4230 | const int xy_stride = 2 * sizeof(float); | ||
| 4231 | float uv[8]; | ||
| 4232 | const int uv_stride = 2 * sizeof(float); | ||
| 4233 | const int num_vertices = 4; | ||
| 4234 | const int *indices = rect_index_order; | ||
| 4235 | const int num_indices = 6; | ||
| 4236 | const int size_indices = 4; | ||
| 4237 | float minu, minv, maxu, maxv; | ||
| 4238 | float minx, miny, maxx, maxy; | ||
| 4239 | |||
| 4240 | minu = 0.0f; | ||
| 4241 | minv = 0.0f; | ||
| 4242 | maxu = dstrect->w / (srcrect->w * scale); | ||
| 4243 | maxv = dstrect->h / (srcrect->h * scale); | ||
| 4244 | |||
| 4245 | minx = dstrect->x; | ||
| 4246 | miny = dstrect->y; | ||
| 4247 | maxx = dstrect->x + dstrect->w; | ||
| 4248 | maxy = dstrect->y + dstrect->h; | ||
| 4249 | |||
| 4250 | uv[0] = minu; | ||
| 4251 | uv[1] = minv; | ||
| 4252 | uv[2] = maxu; | ||
| 4253 | uv[3] = minv; | ||
| 4254 | uv[4] = maxu; | ||
| 4255 | uv[5] = maxv; | ||
| 4256 | uv[6] = minu; | ||
| 4257 | uv[7] = maxv; | ||
| 4258 | |||
| 4259 | xy[0] = minx; | ||
| 4260 | xy[1] = miny; | ||
| 4261 | xy[2] = maxx; | ||
| 4262 | xy[3] = miny; | ||
| 4263 | xy[4] = maxx; | ||
| 4264 | xy[5] = maxy; | ||
| 4265 | xy[6] = minx; | ||
| 4266 | xy[7] = maxy; | ||
| 4267 | |||
| 4268 | const SDL_RenderViewState *view = renderer->view; | ||
| 4269 | return QueueCmdGeometry(renderer, texture, | ||
| 4270 | xy, xy_stride, &texture->color, 0 /* color_stride */, uv, uv_stride, | ||
| 4271 | num_vertices, indices, num_indices, size_indices, | ||
| 4272 | view->current_scale.x, view->current_scale.y, SDL_TEXTURE_ADDRESS_WRAP); | ||
| 4273 | } | ||
| 4274 | |||
| 4275 | static bool SDL_RenderTextureTiled_Iterate(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float scale, const SDL_FRect *dstrect) | ||
| 4276 | { | ||
| 4277 | float tile_width = srcrect->w * scale; | ||
| 4278 | float tile_height = srcrect->h * scale; | ||
| 4279 | float float_rows, float_cols; | ||
| 4280 | float remaining_w = SDL_modff(dstrect->w / tile_width, &float_cols); | ||
| 4281 | float remaining_h = SDL_modff(dstrect->h / tile_height, &float_rows); | ||
| 4282 | float remaining_src_w = remaining_w * srcrect->w; | ||
| 4283 | float remaining_src_h = remaining_h * srcrect->h; | ||
| 4284 | float remaining_dst_w = remaining_w * tile_width; | ||
| 4285 | float remaining_dst_h = remaining_h * tile_height; | ||
| 4286 | int rows = (int)float_rows; | ||
| 4287 | int cols = (int)float_cols; | ||
| 4288 | SDL_FRect curr_src, curr_dst; | ||
| 4289 | |||
| 4290 | SDL_copyp(&curr_src, srcrect); | ||
| 4291 | curr_dst.y = dstrect->y; | ||
| 4292 | curr_dst.w = tile_width; | ||
| 4293 | curr_dst.h = tile_height; | ||
| 4294 | for (int y = 0; y < rows; ++y) { | ||
| 4295 | curr_dst.x = dstrect->x; | ||
| 4296 | for (int x = 0; x < cols; ++x) { | ||
| 4297 | if (!SDL_RenderTextureInternal(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4298 | return false; | ||
| 4299 | } | ||
| 4300 | curr_dst.x += curr_dst.w; | ||
| 4301 | } | ||
| 4302 | if (remaining_dst_w > 0.0f) { | ||
| 4303 | curr_src.w = remaining_src_w; | ||
| 4304 | curr_dst.w = remaining_dst_w; | ||
| 4305 | if (!SDL_RenderTextureInternal(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4306 | return false; | ||
| 4307 | } | ||
| 4308 | curr_src.w = srcrect->w; | ||
| 4309 | curr_dst.w = tile_width; | ||
| 4310 | } | ||
| 4311 | curr_dst.y += curr_dst.h; | ||
| 4312 | } | ||
| 4313 | if (remaining_dst_h > 0.0f) { | ||
| 4314 | curr_src.h = remaining_src_h; | ||
| 4315 | curr_dst.h = remaining_dst_h; | ||
| 4316 | curr_dst.x = dstrect->x; | ||
| 4317 | for (int x = 0; x < cols; ++x) { | ||
| 4318 | if (!SDL_RenderTextureInternal(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4319 | return false; | ||
| 4320 | } | ||
| 4321 | curr_dst.x += curr_dst.w; | ||
| 4322 | } | ||
| 4323 | if (remaining_dst_w > 0.0f) { | ||
| 4324 | curr_src.w = remaining_src_w; | ||
| 4325 | curr_dst.w = remaining_dst_w; | ||
| 4326 | if (!SDL_RenderTextureInternal(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4327 | return false; | ||
| 4328 | } | ||
| 4329 | } | ||
| 4330 | } | ||
| 4331 | return true; | ||
| 4332 | } | ||
| 4333 | |||
| 4334 | bool SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float scale, const SDL_FRect *dstrect) | ||
| 4335 | { | ||
| 4336 | SDL_FRect real_srcrect; | ||
| 4337 | |||
| 4338 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 4339 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 4340 | |||
| 4341 | if (renderer != texture->renderer) { | ||
| 4342 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 4343 | } | ||
| 4344 | |||
| 4345 | if (scale <= 0.0f) { | ||
| 4346 | return SDL_InvalidParamError("scale"); | ||
| 4347 | } | ||
| 4348 | |||
| 4349 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 4350 | // Don't draw while we're hidden | ||
| 4351 | if (renderer->hidden) { | ||
| 4352 | return true; | ||
| 4353 | } | ||
| 4354 | #endif | ||
| 4355 | |||
| 4356 | real_srcrect.x = 0.0f; | ||
| 4357 | real_srcrect.y = 0.0f; | ||
| 4358 | real_srcrect.w = (float)texture->w; | ||
| 4359 | real_srcrect.h = (float)texture->h; | ||
| 4360 | if (srcrect) { | ||
| 4361 | if (!SDL_GetRectIntersectionFloat(srcrect, &real_srcrect, &real_srcrect)) { | ||
| 4362 | return true; | ||
| 4363 | } | ||
| 4364 | } | ||
| 4365 | |||
| 4366 | SDL_FRect full_dstrect; | ||
| 4367 | if (!dstrect) { | ||
| 4368 | GetRenderViewportSize(renderer, &full_dstrect); | ||
| 4369 | dstrect = &full_dstrect; | ||
| 4370 | } | ||
| 4371 | |||
| 4372 | if (texture->native) { | ||
| 4373 | texture = texture->native; | ||
| 4374 | } | ||
| 4375 | |||
| 4376 | texture->last_command_generation = renderer->render_command_generation; | ||
| 4377 | |||
| 4378 | // See if we can use geometry with repeating texture coordinates | ||
| 4379 | if (!renderer->software && | ||
| 4380 | (!srcrect || | ||
| 4381 | (real_srcrect.x == 0.0f && real_srcrect.y == 0.0f && | ||
| 4382 | real_srcrect.w == (float)texture->w && real_srcrect.h == (float)texture->h))) { | ||
| 4383 | return SDL_RenderTextureTiled_Wrap(renderer, texture, &real_srcrect, scale, dstrect); | ||
| 4384 | } else { | ||
| 4385 | return SDL_RenderTextureTiled_Iterate(renderer, texture, &real_srcrect, scale, dstrect); | ||
| 4386 | } | ||
| 4387 | } | ||
| 4388 | |||
| 4389 | bool SDL_RenderTexture9Grid(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect) | ||
| 4390 | { | ||
| 4391 | SDL_FRect full_src, full_dst; | ||
| 4392 | SDL_FRect curr_src, curr_dst; | ||
| 4393 | float dst_left_width; | ||
| 4394 | float dst_right_width; | ||
| 4395 | float dst_top_height; | ||
| 4396 | float dst_bottom_height; | ||
| 4397 | |||
| 4398 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 4399 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 4400 | |||
| 4401 | if (renderer != texture->renderer) { | ||
| 4402 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 4403 | } | ||
| 4404 | |||
| 4405 | if (!srcrect) { | ||
| 4406 | full_src.x = 0; | ||
| 4407 | full_src.y = 0; | ||
| 4408 | full_src.w = (float)texture->w; | ||
| 4409 | full_src.h = (float)texture->h; | ||
| 4410 | srcrect = &full_src; | ||
| 4411 | } | ||
| 4412 | |||
| 4413 | if (!dstrect) { | ||
| 4414 | GetRenderViewportSize(renderer, &full_dst); | ||
| 4415 | dstrect = &full_dst; | ||
| 4416 | } | ||
| 4417 | |||
| 4418 | if (scale <= 0.0f || scale == 1.0f) { | ||
| 4419 | dst_left_width = SDL_ceilf(left_width); | ||
| 4420 | dst_right_width = SDL_ceilf(right_width); | ||
| 4421 | dst_top_height = SDL_ceilf(top_height); | ||
| 4422 | dst_bottom_height = SDL_ceilf(bottom_height); | ||
| 4423 | } else { | ||
| 4424 | dst_left_width = SDL_ceilf(left_width * scale); | ||
| 4425 | dst_right_width = SDL_ceilf(right_width * scale); | ||
| 4426 | dst_top_height = SDL_ceilf(top_height * scale); | ||
| 4427 | dst_bottom_height = SDL_ceilf(bottom_height * scale); | ||
| 4428 | } | ||
| 4429 | |||
| 4430 | // Center | ||
| 4431 | curr_src.x = srcrect->x + left_width; | ||
| 4432 | curr_src.y = srcrect->y + top_height; | ||
| 4433 | curr_src.w = srcrect->w - left_width - right_width; | ||
| 4434 | curr_src.h = srcrect->h - top_height - bottom_height; | ||
| 4435 | curr_dst.x = dstrect->x + dst_left_width; | ||
| 4436 | curr_dst.y = dstrect->y + dst_top_height; | ||
| 4437 | curr_dst.w = dstrect->w - dst_left_width - dst_right_width; | ||
| 4438 | curr_dst.h = dstrect->h - dst_top_height - dst_bottom_height; | ||
| 4439 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4440 | return false; | ||
| 4441 | } | ||
| 4442 | |||
| 4443 | // Upper-left corner | ||
| 4444 | curr_src.x = srcrect->x; | ||
| 4445 | curr_src.y = srcrect->y; | ||
| 4446 | curr_src.w = left_width; | ||
| 4447 | curr_src.h = top_height; | ||
| 4448 | curr_dst.x = dstrect->x; | ||
| 4449 | curr_dst.y = dstrect->y; | ||
| 4450 | curr_dst.w = dst_left_width; | ||
| 4451 | curr_dst.h = dst_top_height; | ||
| 4452 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4453 | return false; | ||
| 4454 | } | ||
| 4455 | |||
| 4456 | // Upper-right corner | ||
| 4457 | curr_src.x = srcrect->x + srcrect->w - right_width; | ||
| 4458 | curr_src.w = right_width; | ||
| 4459 | curr_dst.x = dstrect->x + dstrect->w - dst_right_width; | ||
| 4460 | curr_dst.w = dst_right_width; | ||
| 4461 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4462 | return false; | ||
| 4463 | } | ||
| 4464 | |||
| 4465 | // Lower-right corner | ||
| 4466 | curr_src.y = srcrect->y + srcrect->h - bottom_height; | ||
| 4467 | curr_src.h = bottom_height; | ||
| 4468 | curr_dst.y = dstrect->y + dstrect->h - dst_bottom_height; | ||
| 4469 | curr_dst.h = dst_bottom_height; | ||
| 4470 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4471 | return false; | ||
| 4472 | } | ||
| 4473 | |||
| 4474 | // Lower-left corner | ||
| 4475 | curr_src.x = srcrect->x; | ||
| 4476 | curr_src.w = left_width; | ||
| 4477 | curr_dst.x = dstrect->x; | ||
| 4478 | curr_dst.w = dst_left_width; | ||
| 4479 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4480 | return false; | ||
| 4481 | } | ||
| 4482 | |||
| 4483 | // Left | ||
| 4484 | curr_src.y = srcrect->y + top_height; | ||
| 4485 | curr_src.h = srcrect->h - top_height - bottom_height; | ||
| 4486 | curr_dst.y = dstrect->y + dst_top_height; | ||
| 4487 | curr_dst.h = dstrect->h - dst_top_height - dst_bottom_height; | ||
| 4488 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4489 | return false; | ||
| 4490 | } | ||
| 4491 | |||
| 4492 | // Right | ||
| 4493 | curr_src.x = srcrect->x + srcrect->w - right_width; | ||
| 4494 | curr_src.w = right_width; | ||
| 4495 | curr_dst.x = dstrect->x + dstrect->w - dst_right_width; | ||
| 4496 | curr_dst.w = dst_right_width; | ||
| 4497 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4498 | return false; | ||
| 4499 | } | ||
| 4500 | |||
| 4501 | // Top | ||
| 4502 | curr_src.x = srcrect->x + left_width; | ||
| 4503 | curr_src.y = srcrect->y; | ||
| 4504 | curr_src.w = srcrect->w - left_width - right_width; | ||
| 4505 | curr_src.h = top_height; | ||
| 4506 | curr_dst.x = dstrect->x + dst_left_width; | ||
| 4507 | curr_dst.y = dstrect->y; | ||
| 4508 | curr_dst.w = dstrect->w - dst_left_width - dst_right_width; | ||
| 4509 | curr_dst.h = dst_top_height; | ||
| 4510 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4511 | return false; | ||
| 4512 | } | ||
| 4513 | |||
| 4514 | // Bottom | ||
| 4515 | curr_src.y = srcrect->y + srcrect->h - bottom_height; | ||
| 4516 | curr_src.h = bottom_height; | ||
| 4517 | curr_dst.y = dstrect->y + dstrect->h - dst_bottom_height; | ||
| 4518 | curr_dst.h = dst_bottom_height; | ||
| 4519 | if (!SDL_RenderTexture(renderer, texture, &curr_src, &curr_dst)) { | ||
| 4520 | return false; | ||
| 4521 | } | ||
| 4522 | |||
| 4523 | return true; | ||
| 4524 | } | ||
| 4525 | |||
| 4526 | bool SDL_RenderGeometry(SDL_Renderer *renderer, | ||
| 4527 | SDL_Texture *texture, | ||
| 4528 | const SDL_Vertex *vertices, int num_vertices, | ||
| 4529 | const int *indices, int num_indices) | ||
| 4530 | { | ||
| 4531 | if (vertices) { | ||
| 4532 | const float *xy = &vertices->position.x; | ||
| 4533 | int xy_stride = sizeof(SDL_Vertex); | ||
| 4534 | const SDL_FColor *color = &vertices->color; | ||
| 4535 | int color_stride = sizeof(SDL_Vertex); | ||
| 4536 | const float *uv = &vertices->tex_coord.x; | ||
| 4537 | int uv_stride = sizeof(SDL_Vertex); | ||
| 4538 | int size_indices = 4; | ||
| 4539 | return SDL_RenderGeometryRaw(renderer, texture, xy, xy_stride, color, color_stride, uv, uv_stride, num_vertices, indices, num_indices, size_indices); | ||
| 4540 | } else { | ||
| 4541 | return SDL_InvalidParamError("vertices"); | ||
| 4542 | } | ||
| 4543 | } | ||
| 4544 | |||
| 4545 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 4546 | static int remap_one_indice( | ||
| 4547 | int prev, | ||
| 4548 | int k, | ||
| 4549 | SDL_Texture *texture, | ||
| 4550 | const float *xy, int xy_stride, | ||
| 4551 | const SDL_FColor *color, int color_stride, | ||
| 4552 | const float *uv, int uv_stride) | ||
| 4553 | { | ||
| 4554 | const float *xy0_, *xy1_, *uv0_, *uv1_; | ||
| 4555 | const SDL_FColor *col0_, *col1_; | ||
| 4556 | xy0_ = (const float *)((const char *)xy + prev * xy_stride); | ||
| 4557 | xy1_ = (const float *)((const char *)xy + k * xy_stride); | ||
| 4558 | if (xy0_[0] != xy1_[0]) { | ||
| 4559 | return k; | ||
| 4560 | } | ||
| 4561 | if (xy0_[1] != xy1_[1]) { | ||
| 4562 | return k; | ||
| 4563 | } | ||
| 4564 | if (texture) { | ||
| 4565 | uv0_ = (const float *)((const char *)uv + prev * uv_stride); | ||
| 4566 | uv1_ = (const float *)((const char *)uv + k * uv_stride); | ||
| 4567 | if (uv0_[0] != uv1_[0]) { | ||
| 4568 | return k; | ||
| 4569 | } | ||
| 4570 | if (uv0_[1] != uv1_[1]) { | ||
| 4571 | return k; | ||
| 4572 | } | ||
| 4573 | } | ||
| 4574 | col0_ = (const SDL_FColor *)((const char *)color + prev * color_stride); | ||
| 4575 | col1_ = (const SDL_FColor *)((const char *)color + k * color_stride); | ||
| 4576 | |||
| 4577 | if (SDL_memcmp(col0_, col1_, sizeof(*col0_)) != 0) { | ||
| 4578 | return k; | ||
| 4579 | } | ||
| 4580 | |||
| 4581 | return prev; | ||
| 4582 | } | ||
| 4583 | |||
| 4584 | static int remap_indices( | ||
| 4585 | int prev[3], | ||
| 4586 | int k, | ||
| 4587 | SDL_Texture *texture, | ||
| 4588 | const float *xy, int xy_stride, | ||
| 4589 | const SDL_FColor *color, int color_stride, | ||
| 4590 | const float *uv, int uv_stride) | ||
| 4591 | { | ||
| 4592 | int i; | ||
| 4593 | if (prev[0] == -1) { | ||
| 4594 | return k; | ||
| 4595 | } | ||
| 4596 | |||
| 4597 | for (i = 0; i < 3; i++) { | ||
| 4598 | int new_k = remap_one_indice(prev[i], k, texture, xy, xy_stride, color, color_stride, uv, uv_stride); | ||
| 4599 | if (new_k != k) { | ||
| 4600 | return new_k; | ||
| 4601 | } | ||
| 4602 | } | ||
| 4603 | return k; | ||
| 4604 | } | ||
| 4605 | |||
| 4606 | #define DEBUG_SW_RENDER_GEOMETRY 0 | ||
| 4607 | // For the software renderer, try to reinterpret triangles as SDL_Rect | ||
| 4608 | static bool SDLCALL SDL_SW_RenderGeometryRaw(SDL_Renderer *renderer, | ||
| 4609 | SDL_Texture *texture, | ||
| 4610 | const float *xy, int xy_stride, | ||
| 4611 | const SDL_FColor *color, int color_stride, | ||
| 4612 | const float *uv, int uv_stride, | ||
| 4613 | int num_vertices, | ||
| 4614 | const void *indices, int num_indices, int size_indices) | ||
| 4615 | { | ||
| 4616 | int i; | ||
| 4617 | bool result = true; | ||
| 4618 | int count = indices ? num_indices : num_vertices; | ||
| 4619 | int prev[3]; // Previous triangle vertex indices | ||
| 4620 | float texw = 0.0f, texh = 0.0f; | ||
| 4621 | SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; | ||
| 4622 | float r = 0, g = 0, b = 0, a = 0; | ||
| 4623 | const SDL_RenderViewState *view = renderer->view; | ||
| 4624 | const float scale_x = view->current_scale.x; | ||
| 4625 | const float scale_y = view->current_scale.y; | ||
| 4626 | |||
| 4627 | // Save | ||
| 4628 | SDL_GetRenderDrawBlendMode(renderer, &blendMode); | ||
| 4629 | SDL_GetRenderDrawColorFloat(renderer, &r, &g, &b, &a); | ||
| 4630 | |||
| 4631 | if (texture) { | ||
| 4632 | SDL_GetTextureSize(texture, &texw, &texh); | ||
| 4633 | } | ||
| 4634 | |||
| 4635 | prev[0] = -1; | ||
| 4636 | prev[1] = -1; | ||
| 4637 | prev[2] = -1; | ||
| 4638 | size_indices = indices ? size_indices : 0; | ||
| 4639 | |||
| 4640 | for (i = 0; i < count; i += 3) { | ||
| 4641 | int k0, k1, k2; // Current triangle indices | ||
| 4642 | int is_quad = 1; | ||
| 4643 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4644 | int is_uniform = 1; | ||
| 4645 | int is_rectangle = 1; | ||
| 4646 | #endif | ||
| 4647 | int A = -1; // Top left vertex | ||
| 4648 | int B = -1; // Bottom right vertex | ||
| 4649 | int C = -1; // Third vertex of current triangle | ||
| 4650 | int C2 = -1; // Last, vertex of previous triangle | ||
| 4651 | |||
| 4652 | if (size_indices == 4) { | ||
| 4653 | k0 = ((const Uint32 *)indices)[i]; | ||
| 4654 | k1 = ((const Uint32 *)indices)[i + 1]; | ||
| 4655 | k2 = ((const Uint32 *)indices)[i + 2]; | ||
| 4656 | } else if (size_indices == 2) { | ||
| 4657 | k0 = ((const Uint16 *)indices)[i]; | ||
| 4658 | k1 = ((const Uint16 *)indices)[i + 1]; | ||
| 4659 | k2 = ((const Uint16 *)indices)[i + 2]; | ||
| 4660 | } else if (size_indices == 1) { | ||
| 4661 | k0 = ((const Uint8 *)indices)[i]; | ||
| 4662 | k1 = ((const Uint8 *)indices)[i + 1]; | ||
| 4663 | k2 = ((const Uint8 *)indices)[i + 2]; | ||
| 4664 | } else { | ||
| 4665 | /* Vertices were not provided by indices. Maybe some are duplicated. | ||
| 4666 | * We try to indentificate the duplicates by comparing with the previous three vertices */ | ||
| 4667 | k0 = remap_indices(prev, i, texture, xy, xy_stride, color, color_stride, uv, uv_stride); | ||
| 4668 | k1 = remap_indices(prev, i + 1, texture, xy, xy_stride, color, color_stride, uv, uv_stride); | ||
| 4669 | k2 = remap_indices(prev, i + 2, texture, xy, xy_stride, color, color_stride, uv, uv_stride); | ||
| 4670 | } | ||
| 4671 | |||
| 4672 | if (prev[0] == -1) { | ||
| 4673 | prev[0] = k0; | ||
| 4674 | prev[1] = k1; | ||
| 4675 | prev[2] = k2; | ||
| 4676 | continue; | ||
| 4677 | } | ||
| 4678 | |||
| 4679 | /* Two triangles forming a quadialateral, | ||
| 4680 | * prev and current triangles must have exactly 2 common vertices */ | ||
| 4681 | { | ||
| 4682 | int cnt = 0, j = 3; | ||
| 4683 | while (j--) { | ||
| 4684 | int p = prev[j]; | ||
| 4685 | if (p == k0 || p == k1 || p == k2) { | ||
| 4686 | cnt++; | ||
| 4687 | } | ||
| 4688 | } | ||
| 4689 | is_quad = (cnt == 2); | ||
| 4690 | } | ||
| 4691 | |||
| 4692 | // Identify vertices | ||
| 4693 | if (is_quad) { | ||
| 4694 | const float *xy0_, *xy1_, *xy2_; | ||
| 4695 | float x0, x1, x2; | ||
| 4696 | float y0, y1, y2; | ||
| 4697 | xy0_ = (const float *)((const char *)xy + k0 * xy_stride); | ||
| 4698 | xy1_ = (const float *)((const char *)xy + k1 * xy_stride); | ||
| 4699 | xy2_ = (const float *)((const char *)xy + k2 * xy_stride); | ||
| 4700 | x0 = xy0_[0]; | ||
| 4701 | y0 = xy0_[1]; | ||
| 4702 | x1 = xy1_[0]; | ||
| 4703 | y1 = xy1_[1]; | ||
| 4704 | x2 = xy2_[0]; | ||
| 4705 | y2 = xy2_[1]; | ||
| 4706 | |||
| 4707 | // Find top-left | ||
| 4708 | if (x0 <= x1 && y0 <= y1) { | ||
| 4709 | if (x0 <= x2 && y0 <= y2) { | ||
| 4710 | A = k0; | ||
| 4711 | } else { | ||
| 4712 | A = k2; | ||
| 4713 | } | ||
| 4714 | } else { | ||
| 4715 | if (x1 <= x2 && y1 <= y2) { | ||
| 4716 | A = k1; | ||
| 4717 | } else { | ||
| 4718 | A = k2; | ||
| 4719 | } | ||
| 4720 | } | ||
| 4721 | |||
| 4722 | // Find bottom-right | ||
| 4723 | if (x0 >= x1 && y0 >= y1) { | ||
| 4724 | if (x0 >= x2 && y0 >= y2) { | ||
| 4725 | B = k0; | ||
| 4726 | } else { | ||
| 4727 | B = k2; | ||
| 4728 | } | ||
| 4729 | } else { | ||
| 4730 | if (x1 >= x2 && y1 >= y2) { | ||
| 4731 | B = k1; | ||
| 4732 | } else { | ||
| 4733 | B = k2; | ||
| 4734 | } | ||
| 4735 | } | ||
| 4736 | |||
| 4737 | // Find C | ||
| 4738 | if (k0 != A && k0 != B) { | ||
| 4739 | C = k0; | ||
| 4740 | } else if (k1 != A && k1 != B) { | ||
| 4741 | C = k1; | ||
| 4742 | } else { | ||
| 4743 | C = k2; | ||
| 4744 | } | ||
| 4745 | |||
| 4746 | // Find C2 | ||
| 4747 | if (prev[0] != A && prev[0] != B) { | ||
| 4748 | C2 = prev[0]; | ||
| 4749 | } else if (prev[1] != A && prev[1] != B) { | ||
| 4750 | C2 = prev[1]; | ||
| 4751 | } else { | ||
| 4752 | C2 = prev[2]; | ||
| 4753 | } | ||
| 4754 | |||
| 4755 | xy0_ = (const float *)((const char *)xy + A * xy_stride); | ||
| 4756 | xy1_ = (const float *)((const char *)xy + B * xy_stride); | ||
| 4757 | xy2_ = (const float *)((const char *)xy + C * xy_stride); | ||
| 4758 | x0 = xy0_[0]; | ||
| 4759 | y0 = xy0_[1]; | ||
| 4760 | x1 = xy1_[0]; | ||
| 4761 | y1 = xy1_[1]; | ||
| 4762 | x2 = xy2_[0]; | ||
| 4763 | y2 = xy2_[1]; | ||
| 4764 | |||
| 4765 | // Check if triangle A B C is rectangle | ||
| 4766 | if ((x0 == x2 && y1 == y2) || (y0 == y2 && x1 == x2)) { | ||
| 4767 | // ok | ||
| 4768 | } else { | ||
| 4769 | is_quad = 0; | ||
| 4770 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4771 | is_rectangle = 0; | ||
| 4772 | #endif | ||
| 4773 | } | ||
| 4774 | |||
| 4775 | xy2_ = (const float *)((const char *)xy + C2 * xy_stride); | ||
| 4776 | x2 = xy2_[0]; | ||
| 4777 | y2 = xy2_[1]; | ||
| 4778 | |||
| 4779 | // Check if triangle A B C2 is rectangle | ||
| 4780 | if ((x0 == x2 && y1 == y2) || (y0 == y2 && x1 == x2)) { | ||
| 4781 | // ok | ||
| 4782 | } else { | ||
| 4783 | is_quad = 0; | ||
| 4784 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4785 | is_rectangle = 0; | ||
| 4786 | #endif | ||
| 4787 | } | ||
| 4788 | } | ||
| 4789 | |||
| 4790 | // Check if uniformly colored | ||
| 4791 | if (is_quad) { | ||
| 4792 | const SDL_FColor *col0_ = (const SDL_FColor *)((const char *)color + A * color_stride); | ||
| 4793 | const SDL_FColor *col1_ = (const SDL_FColor *)((const char *)color + B * color_stride); | ||
| 4794 | const SDL_FColor *col2_ = (const SDL_FColor *)((const char *)color + C * color_stride); | ||
| 4795 | const SDL_FColor *col3_ = (const SDL_FColor *)((const char *)color + C2 * color_stride); | ||
| 4796 | if (SDL_memcmp(col0_, col1_, sizeof(*col0_)) == 0 && | ||
| 4797 | SDL_memcmp(col0_, col2_, sizeof(*col0_)) == 0 && | ||
| 4798 | SDL_memcmp(col0_, col3_, sizeof(*col0_)) == 0) { | ||
| 4799 | // ok | ||
| 4800 | } else { | ||
| 4801 | is_quad = 0; | ||
| 4802 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4803 | is_uniform = 0; | ||
| 4804 | #endif | ||
| 4805 | } | ||
| 4806 | } | ||
| 4807 | |||
| 4808 | // Start rendering rect | ||
| 4809 | if (is_quad) { | ||
| 4810 | SDL_FRect s; | ||
| 4811 | SDL_FRect d; | ||
| 4812 | const float *xy0_, *xy1_, *uv0_, *uv1_; | ||
| 4813 | const SDL_FColor *col0_ = (const SDL_FColor *)((const char *)color + k0 * color_stride); | ||
| 4814 | |||
| 4815 | xy0_ = (const float *)((const char *)xy + A * xy_stride); | ||
| 4816 | xy1_ = (const float *)((const char *)xy + B * xy_stride); | ||
| 4817 | |||
| 4818 | if (texture) { | ||
| 4819 | uv0_ = (const float *)((const char *)uv + A * uv_stride); | ||
| 4820 | uv1_ = (const float *)((const char *)uv + B * uv_stride); | ||
| 4821 | s.x = uv0_[0] * texw; | ||
| 4822 | s.y = uv0_[1] * texh; | ||
| 4823 | s.w = uv1_[0] * texw - s.x; | ||
| 4824 | s.h = uv1_[1] * texh - s.y; | ||
| 4825 | } else { | ||
| 4826 | s.x = s.y = s.w = s.h = 0; | ||
| 4827 | } | ||
| 4828 | |||
| 4829 | d.x = xy0_[0]; | ||
| 4830 | d.y = xy0_[1]; | ||
| 4831 | d.w = xy1_[0] - d.x; | ||
| 4832 | d.h = xy1_[1] - d.y; | ||
| 4833 | |||
| 4834 | // Rect + texture | ||
| 4835 | if (texture && s.w != 0 && s.h != 0) { | ||
| 4836 | SDL_SetTextureAlphaModFloat(texture, col0_->a); | ||
| 4837 | SDL_SetTextureColorModFloat(texture, col0_->r, col0_->g, col0_->b); | ||
| 4838 | if (s.w > 0 && s.h > 0) { | ||
| 4839 | SDL_RenderTexture(renderer, texture, &s, &d); | ||
| 4840 | } else { | ||
| 4841 | int flags = 0; | ||
| 4842 | if (s.w < 0) { | ||
| 4843 | flags |= SDL_FLIP_HORIZONTAL; | ||
| 4844 | s.w *= -1; | ||
| 4845 | s.x -= s.w; | ||
| 4846 | } | ||
| 4847 | if (s.h < 0) { | ||
| 4848 | flags |= SDL_FLIP_VERTICAL; | ||
| 4849 | s.h *= -1; | ||
| 4850 | s.y -= s.h; | ||
| 4851 | } | ||
| 4852 | SDL_RenderTextureRotated(renderer, texture, &s, &d, 0, NULL, (SDL_FlipMode)flags); | ||
| 4853 | } | ||
| 4854 | |||
| 4855 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4856 | SDL_Log("Rect-COPY: RGB %f %f %f - Alpha:%f - texture=%p: src=(%d,%d, %d x %d) dst (%f, %f, %f x %f)", col0_->r, col0_->g, col0_->b, col0_->a, | ||
| 4857 | (void *)texture, s.x, s.y, s.w, s.h, d.x, d.y, d.w, d.h); | ||
| 4858 | #endif | ||
| 4859 | } else if (d.w != 0.0f && d.h != 0.0f) { // Rect, no texture | ||
| 4860 | SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); | ||
| 4861 | SDL_SetRenderDrawColorFloat(renderer, col0_->r, col0_->g, col0_->b, col0_->a); | ||
| 4862 | SDL_RenderFillRect(renderer, &d); | ||
| 4863 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4864 | SDL_Log("Rect-FILL: RGB %f %f %f - Alpha:%f - texture=%p: dst (%f, %f, %f x %f)", col0_->r, col0_->g, col0_->b, col0_->a, | ||
| 4865 | (void *)texture, d.x, d.y, d.w, d.h); | ||
| 4866 | } else { | ||
| 4867 | SDL_Log("Rect-DISMISS: RGB %f %f %f - Alpha:%f - texture=%p: src=(%d,%d, %d x %d) dst (%f, %f, %f x %f)", col0_->r, col0_->g, col0_->b, col0_->a, | ||
| 4868 | (void *)texture, s.x, s.y, s.w, s.h, d.x, d.y, d.w, d.h); | ||
| 4869 | #endif | ||
| 4870 | } | ||
| 4871 | |||
| 4872 | prev[0] = -1; | ||
| 4873 | } else { | ||
| 4874 | // Render triangles | ||
| 4875 | if (prev[0] != -1) { | ||
| 4876 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4877 | SDL_Log("Triangle %d %d %d - is_uniform:%d is_rectangle:%d", prev[0], prev[1], prev[2], is_uniform, is_rectangle); | ||
| 4878 | #endif | ||
| 4879 | result = QueueCmdGeometry(renderer, texture, | ||
| 4880 | xy, xy_stride, color, color_stride, uv, uv_stride, | ||
| 4881 | num_vertices, prev, 3, 4, | ||
| 4882 | scale_x, scale_y, SDL_TEXTURE_ADDRESS_CLAMP); | ||
| 4883 | if (!result) { | ||
| 4884 | goto end; | ||
| 4885 | } | ||
| 4886 | } | ||
| 4887 | |||
| 4888 | prev[0] = k0; | ||
| 4889 | prev[1] = k1; | ||
| 4890 | prev[2] = k2; | ||
| 4891 | } | ||
| 4892 | } // End for (), next triangle | ||
| 4893 | |||
| 4894 | if (prev[0] != -1) { | ||
| 4895 | // flush the last triangle | ||
| 4896 | #if DEBUG_SW_RENDER_GEOMETRY | ||
| 4897 | SDL_Log("Last triangle %d %d %d", prev[0], prev[1], prev[2]); | ||
| 4898 | #endif | ||
| 4899 | result = QueueCmdGeometry(renderer, texture, | ||
| 4900 | xy, xy_stride, color, color_stride, uv, uv_stride, | ||
| 4901 | num_vertices, prev, 3, 4, | ||
| 4902 | scale_x, scale_y, SDL_TEXTURE_ADDRESS_CLAMP); | ||
| 4903 | if (!result) { | ||
| 4904 | goto end; | ||
| 4905 | } | ||
| 4906 | } | ||
| 4907 | |||
| 4908 | end: | ||
| 4909 | // Restore | ||
| 4910 | SDL_SetRenderDrawBlendMode(renderer, blendMode); | ||
| 4911 | SDL_SetRenderDrawColorFloat(renderer, r, g, b, a); | ||
| 4912 | |||
| 4913 | return result; | ||
| 4914 | } | ||
| 4915 | #endif // SDL_VIDEO_RENDER_SW | ||
| 4916 | |||
| 4917 | bool SDL_RenderGeometryRaw(SDL_Renderer *renderer, | ||
| 4918 | SDL_Texture *texture, | ||
| 4919 | const float *xy, int xy_stride, | ||
| 4920 | const SDL_FColor *color, int color_stride, | ||
| 4921 | const float *uv, int uv_stride, | ||
| 4922 | int num_vertices, | ||
| 4923 | const void *indices, int num_indices, int size_indices) | ||
| 4924 | { | ||
| 4925 | int i; | ||
| 4926 | int count = indices ? num_indices : num_vertices; | ||
| 4927 | SDL_TextureAddressMode texture_address_mode; | ||
| 4928 | |||
| 4929 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 4930 | |||
| 4931 | if (!renderer->QueueGeometry) { | ||
| 4932 | return SDL_Unsupported(); | ||
| 4933 | } | ||
| 4934 | |||
| 4935 | if (texture) { | ||
| 4936 | CHECK_TEXTURE_MAGIC(texture, false); | ||
| 4937 | |||
| 4938 | if (renderer != texture->renderer) { | ||
| 4939 | return SDL_SetError("Texture was not created with this renderer"); | ||
| 4940 | } | ||
| 4941 | } | ||
| 4942 | |||
| 4943 | if (!xy) { | ||
| 4944 | return SDL_InvalidParamError("xy"); | ||
| 4945 | } | ||
| 4946 | |||
| 4947 | if (!color) { | ||
| 4948 | return SDL_InvalidParamError("color"); | ||
| 4949 | } | ||
| 4950 | |||
| 4951 | if (texture && !uv) { | ||
| 4952 | return SDL_InvalidParamError("uv"); | ||
| 4953 | } | ||
| 4954 | |||
| 4955 | if (count % 3 != 0) { | ||
| 4956 | return SDL_InvalidParamError(indices ? "num_indices" : "num_vertices"); | ||
| 4957 | } | ||
| 4958 | |||
| 4959 | if (indices) { | ||
| 4960 | if (size_indices != 1 && size_indices != 2 && size_indices != 4) { | ||
| 4961 | return SDL_InvalidParamError("size_indices"); | ||
| 4962 | } | ||
| 4963 | } else { | ||
| 4964 | size_indices = 0; | ||
| 4965 | } | ||
| 4966 | |||
| 4967 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 4968 | // Don't draw while we're hidden | ||
| 4969 | if (renderer->hidden) { | ||
| 4970 | return true; | ||
| 4971 | } | ||
| 4972 | #endif | ||
| 4973 | |||
| 4974 | if (num_vertices < 3) { | ||
| 4975 | return true; | ||
| 4976 | } | ||
| 4977 | |||
| 4978 | if (texture && texture->native) { | ||
| 4979 | texture = texture->native; | ||
| 4980 | } | ||
| 4981 | |||
| 4982 | texture_address_mode = renderer->texture_address_mode; | ||
| 4983 | if (texture_address_mode == SDL_TEXTURE_ADDRESS_AUTO && texture) { | ||
| 4984 | texture_address_mode = SDL_TEXTURE_ADDRESS_CLAMP; | ||
| 4985 | for (i = 0; i < num_vertices; ++i) { | ||
| 4986 | const float *uv_ = (const float *)((const char *)uv + i * uv_stride); | ||
| 4987 | float u = uv_[0]; | ||
| 4988 | float v = uv_[1]; | ||
| 4989 | if (u < 0.0f || v < 0.0f || u > 1.0f || v > 1.0f) { | ||
| 4990 | texture_address_mode = SDL_TEXTURE_ADDRESS_WRAP; | ||
| 4991 | break; | ||
| 4992 | } | ||
| 4993 | } | ||
| 4994 | } | ||
| 4995 | |||
| 4996 | if (indices) { | ||
| 4997 | for (i = 0; i < num_indices; ++i) { | ||
| 4998 | int j; | ||
| 4999 | if (size_indices == 4) { | ||
| 5000 | j = ((const Uint32 *)indices)[i]; | ||
| 5001 | } else if (size_indices == 2) { | ||
| 5002 | j = ((const Uint16 *)indices)[i]; | ||
| 5003 | } else { | ||
| 5004 | j = ((const Uint8 *)indices)[i]; | ||
| 5005 | } | ||
| 5006 | if (j < 0 || j >= num_vertices) { | ||
| 5007 | return SDL_SetError("Values of 'indices' out of bounds"); | ||
| 5008 | } | ||
| 5009 | } | ||
| 5010 | } | ||
| 5011 | |||
| 5012 | if (texture) { | ||
| 5013 | texture->last_command_generation = renderer->render_command_generation; | ||
| 5014 | } | ||
| 5015 | |||
| 5016 | // For the software renderer, try to reinterpret triangles as SDL_Rect | ||
| 5017 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 5018 | if (renderer->software && texture_address_mode == SDL_TEXTURE_ADDRESS_CLAMP) { | ||
| 5019 | return SDL_SW_RenderGeometryRaw(renderer, texture, | ||
| 5020 | xy, xy_stride, color, color_stride, uv, uv_stride, num_vertices, | ||
| 5021 | indices, num_indices, size_indices); | ||
| 5022 | } | ||
| 5023 | #endif | ||
| 5024 | |||
| 5025 | const SDL_RenderViewState *view = renderer->view; | ||
| 5026 | return QueueCmdGeometry(renderer, texture, | ||
| 5027 | xy, xy_stride, color, color_stride, uv, uv_stride, | ||
| 5028 | num_vertices, indices, num_indices, size_indices, | ||
| 5029 | view->current_scale.x, view->current_scale.y, | ||
| 5030 | texture_address_mode); | ||
| 5031 | } | ||
| 5032 | |||
| 5033 | SDL_Surface *SDL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 5034 | { | ||
| 5035 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 5036 | |||
| 5037 | if (!renderer->RenderReadPixels) { | ||
| 5038 | SDL_Unsupported(); | ||
| 5039 | return NULL; | ||
| 5040 | } | ||
| 5041 | |||
| 5042 | FlushRenderCommands(renderer); // we need to render before we read the results. | ||
| 5043 | |||
| 5044 | SDL_Rect real_rect = renderer->view->pixel_viewport; | ||
| 5045 | |||
| 5046 | if (rect) { | ||
| 5047 | if (!SDL_GetRectIntersection(rect, &real_rect, &real_rect)) { | ||
| 5048 | SDL_SetError("Can't read outside the current viewport"); | ||
| 5049 | return NULL; | ||
| 5050 | } | ||
| 5051 | } | ||
| 5052 | |||
| 5053 | SDL_Surface *surface = renderer->RenderReadPixels(renderer, &real_rect); | ||
| 5054 | if (surface) { | ||
| 5055 | SDL_PropertiesID props = SDL_GetSurfaceProperties(surface); | ||
| 5056 | |||
| 5057 | if (renderer->target) { | ||
| 5058 | SDL_Texture *target = renderer->target; | ||
| 5059 | SDL_Texture *parent = SDL_GetPointerProperty(SDL_GetTextureProperties(target), SDL_PROP_TEXTURE_PARENT_POINTER, NULL); | ||
| 5060 | SDL_PixelFormat expected_format = (parent ? parent->format : target->format); | ||
| 5061 | |||
| 5062 | SDL_SetFloatProperty(props, SDL_PROP_SURFACE_SDR_WHITE_POINT_FLOAT, target->SDR_white_point); | ||
| 5063 | SDL_SetFloatProperty(props, SDL_PROP_SURFACE_HDR_HEADROOM_FLOAT, target->HDR_headroom); | ||
| 5064 | |||
| 5065 | // Set the expected surface format | ||
| 5066 | if ((surface->format == SDL_PIXELFORMAT_ARGB8888 && expected_format == SDL_PIXELFORMAT_XRGB8888) || | ||
| 5067 | (surface->format == SDL_PIXELFORMAT_RGBA8888 && expected_format == SDL_PIXELFORMAT_RGBX8888) || | ||
| 5068 | (surface->format == SDL_PIXELFORMAT_ABGR8888 && expected_format == SDL_PIXELFORMAT_XBGR8888) || | ||
| 5069 | (surface->format == SDL_PIXELFORMAT_BGRA8888 && expected_format == SDL_PIXELFORMAT_BGRX8888)) { | ||
| 5070 | surface->format = expected_format; | ||
| 5071 | surface->fmt = SDL_GetPixelFormatDetails(expected_format); | ||
| 5072 | } | ||
| 5073 | } else { | ||
| 5074 | SDL_SetFloatProperty(props, SDL_PROP_SURFACE_SDR_WHITE_POINT_FLOAT, renderer->SDR_white_point); | ||
| 5075 | SDL_SetFloatProperty(props, SDL_PROP_SURFACE_HDR_HEADROOM_FLOAT, renderer->HDR_headroom); | ||
| 5076 | } | ||
| 5077 | } | ||
| 5078 | return surface; | ||
| 5079 | } | ||
| 5080 | |||
| 5081 | static void SDL_RenderApplyWindowShape(SDL_Renderer *renderer) | ||
| 5082 | { | ||
| 5083 | SDL_Surface *shape = (SDL_Surface *)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window), SDL_PROP_WINDOW_SHAPE_POINTER, NULL); | ||
| 5084 | if (shape != renderer->shape_surface) { | ||
| 5085 | if (renderer->shape_texture) { | ||
| 5086 | SDL_DestroyTexture(renderer->shape_texture); | ||
| 5087 | renderer->shape_texture = NULL; | ||
| 5088 | } | ||
| 5089 | |||
| 5090 | if (shape) { | ||
| 5091 | // There's nothing we can do if this fails, so just keep on going | ||
| 5092 | renderer->shape_texture = SDL_CreateTextureFromSurface(renderer, shape); | ||
| 5093 | |||
| 5094 | SDL_SetTextureBlendMode(renderer->shape_texture, | ||
| 5095 | SDL_ComposeCustomBlendMode( | ||
| 5096 | SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDOPERATION_ADD, | ||
| 5097 | SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDOPERATION_ADD)); | ||
| 5098 | } | ||
| 5099 | renderer->shape_surface = shape; | ||
| 5100 | } | ||
| 5101 | |||
| 5102 | if (renderer->shape_texture) { | ||
| 5103 | SDL_RenderTexture(renderer, renderer->shape_texture, NULL, NULL); | ||
| 5104 | } | ||
| 5105 | } | ||
| 5106 | |||
| 5107 | static void SDL_SimulateRenderVSync(SDL_Renderer *renderer) | ||
| 5108 | { | ||
| 5109 | Uint64 now, elapsed; | ||
| 5110 | const Uint64 interval = renderer->simulate_vsync_interval_ns; | ||
| 5111 | |||
| 5112 | if (!interval) { | ||
| 5113 | // We can't do sub-ns delay, so just return here | ||
| 5114 | return; | ||
| 5115 | } | ||
| 5116 | |||
| 5117 | now = SDL_GetTicksNS(); | ||
| 5118 | elapsed = (now - renderer->last_present); | ||
| 5119 | if (elapsed < interval) { | ||
| 5120 | Uint64 duration = (interval - elapsed); | ||
| 5121 | SDL_DelayPrecise(duration); | ||
| 5122 | now = SDL_GetTicksNS(); | ||
| 5123 | } | ||
| 5124 | |||
| 5125 | elapsed = (now - renderer->last_present); | ||
| 5126 | if (!renderer->last_present || elapsed > SDL_MS_TO_NS(1000)) { | ||
| 5127 | // It's been too long, reset the presentation timeline | ||
| 5128 | renderer->last_present = now; | ||
| 5129 | } else { | ||
| 5130 | renderer->last_present += (elapsed / interval) * interval; | ||
| 5131 | } | ||
| 5132 | } | ||
| 5133 | |||
| 5134 | bool SDL_RenderPresent(SDL_Renderer *renderer) | ||
| 5135 | { | ||
| 5136 | bool presented = true; | ||
| 5137 | |||
| 5138 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 5139 | |||
| 5140 | SDL_Texture *target = renderer->target; | ||
| 5141 | if (target) { | ||
| 5142 | SDL_SetRenderTarget(renderer, NULL); | ||
| 5143 | } | ||
| 5144 | |||
| 5145 | SDL_RenderLogicalPresentation(renderer); | ||
| 5146 | |||
| 5147 | if (renderer->transparent_window) { | ||
| 5148 | SDL_RenderApplyWindowShape(renderer); | ||
| 5149 | } | ||
| 5150 | |||
| 5151 | FlushRenderCommands(renderer); // time to send everything to the GPU! | ||
| 5152 | |||
| 5153 | #if DONT_DRAW_WHILE_HIDDEN | ||
| 5154 | // Don't present while we're hidden | ||
| 5155 | if (renderer->hidden) { | ||
| 5156 | presented = false; | ||
| 5157 | } else | ||
| 5158 | #endif | ||
| 5159 | if (!renderer->RenderPresent(renderer)) { | ||
| 5160 | presented = false; | ||
| 5161 | } | ||
| 5162 | |||
| 5163 | if (target) { | ||
| 5164 | SDL_SetRenderTarget(renderer, target); | ||
| 5165 | } | ||
| 5166 | |||
| 5167 | if (renderer->simulate_vsync || | ||
| 5168 | (!presented && renderer->wanted_vsync)) { | ||
| 5169 | SDL_SimulateRenderVSync(renderer); | ||
| 5170 | } | ||
| 5171 | return true; | ||
| 5172 | } | ||
| 5173 | |||
| 5174 | static void SDL_DestroyTextureInternal(SDL_Texture *texture, bool is_destroying) | ||
| 5175 | { | ||
| 5176 | SDL_Renderer *renderer; | ||
| 5177 | |||
| 5178 | SDL_DestroyProperties(texture->props); | ||
| 5179 | |||
| 5180 | renderer = texture->renderer; | ||
| 5181 | if (is_destroying) { | ||
| 5182 | // Renderer get destroyed, avoid to queue more commands | ||
| 5183 | } else { | ||
| 5184 | if (texture == renderer->target) { | ||
| 5185 | SDL_SetRenderTarget(renderer, NULL); // implies command queue flush | ||
| 5186 | } else { | ||
| 5187 | FlushRenderCommandsIfTextureNeeded(texture); | ||
| 5188 | } | ||
| 5189 | } | ||
| 5190 | |||
| 5191 | SDL_SetObjectValid(texture, SDL_OBJECT_TYPE_TEXTURE, false); | ||
| 5192 | |||
| 5193 | if (texture->next) { | ||
| 5194 | texture->next->prev = texture->prev; | ||
| 5195 | } | ||
| 5196 | if (texture->prev) { | ||
| 5197 | texture->prev->next = texture->next; | ||
| 5198 | } else { | ||
| 5199 | renderer->textures = texture->next; | ||
| 5200 | } | ||
| 5201 | |||
| 5202 | if (texture->native) { | ||
| 5203 | SDL_DestroyTextureInternal(texture->native, is_destroying); | ||
| 5204 | } | ||
| 5205 | #ifdef SDL_HAVE_YUV | ||
| 5206 | if (texture->yuv) { | ||
| 5207 | SDL_SW_DestroyYUVTexture(texture->yuv); | ||
| 5208 | } | ||
| 5209 | #endif | ||
| 5210 | SDL_free(texture->pixels); | ||
| 5211 | |||
| 5212 | renderer->DestroyTexture(renderer, texture); | ||
| 5213 | |||
| 5214 | SDL_DestroySurface(texture->locked_surface); | ||
| 5215 | texture->locked_surface = NULL; | ||
| 5216 | |||
| 5217 | SDL_free(texture); | ||
| 5218 | } | ||
| 5219 | |||
| 5220 | void SDL_DestroyTexture(SDL_Texture *texture) | ||
| 5221 | { | ||
| 5222 | CHECK_TEXTURE_MAGIC(texture, ); | ||
| 5223 | |||
| 5224 | if (--texture->refcount > 0) { | ||
| 5225 | return; | ||
| 5226 | } | ||
| 5227 | |||
| 5228 | SDL_DestroyTextureInternal(texture, false /* is_destroying */); | ||
| 5229 | } | ||
| 5230 | |||
| 5231 | static void SDL_DiscardAllCommands(SDL_Renderer *renderer) | ||
| 5232 | { | ||
| 5233 | SDL_RenderCommand *cmd; | ||
| 5234 | |||
| 5235 | if (renderer->render_commands_tail) { | ||
| 5236 | renderer->render_commands_tail->next = renderer->render_commands_pool; | ||
| 5237 | cmd = renderer->render_commands; | ||
| 5238 | } else { | ||
| 5239 | cmd = renderer->render_commands_pool; | ||
| 5240 | } | ||
| 5241 | |||
| 5242 | renderer->render_commands_pool = NULL; | ||
| 5243 | renderer->render_commands_tail = NULL; | ||
| 5244 | renderer->render_commands = NULL; | ||
| 5245 | renderer->vertex_data_used = 0; | ||
| 5246 | |||
| 5247 | while (cmd) { | ||
| 5248 | SDL_RenderCommand *next = cmd->next; | ||
| 5249 | SDL_free(cmd); | ||
| 5250 | cmd = next; | ||
| 5251 | } | ||
| 5252 | } | ||
| 5253 | |||
| 5254 | void SDL_DestroyRendererWithoutFreeing(SDL_Renderer *renderer) | ||
| 5255 | { | ||
| 5256 | SDL_assert(renderer != NULL); | ||
| 5257 | SDL_assert(!renderer->destroyed); | ||
| 5258 | |||
| 5259 | renderer->destroyed = true; | ||
| 5260 | |||
| 5261 | SDL_RemoveWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, SDL_RendererEventWatch, renderer); | ||
| 5262 | |||
| 5263 | if (renderer->window) { | ||
| 5264 | SDL_PropertiesID props = SDL_GetWindowProperties(renderer->window); | ||
| 5265 | if (SDL_GetPointerProperty(props, SDL_PROP_WINDOW_RENDERER_POINTER, NULL) == renderer) { | ||
| 5266 | SDL_ClearProperty(props, SDL_PROP_WINDOW_RENDERER_POINTER); | ||
| 5267 | } | ||
| 5268 | SDL_RemoveWindowRenderer(renderer->window, renderer); | ||
| 5269 | } | ||
| 5270 | |||
| 5271 | if (renderer->software) { | ||
| 5272 | // Make sure all drawing to a surface is complete | ||
| 5273 | FlushRenderCommands(renderer); | ||
| 5274 | } | ||
| 5275 | SDL_DiscardAllCommands(renderer); | ||
| 5276 | |||
| 5277 | if (renderer->debug_char_texture_atlas) { | ||
| 5278 | SDL_DestroyTexture(renderer->debug_char_texture_atlas); | ||
| 5279 | renderer->debug_char_texture_atlas = NULL; | ||
| 5280 | } | ||
| 5281 | |||
| 5282 | // Free existing textures for this renderer | ||
| 5283 | while (renderer->textures) { | ||
| 5284 | SDL_Texture *tex = renderer->textures; | ||
| 5285 | SDL_DestroyTextureInternal(renderer->textures, true /* is_destroying */); | ||
| 5286 | SDL_assert(tex != renderer->textures); // satisfy static analysis. | ||
| 5287 | } | ||
| 5288 | |||
| 5289 | // Clean up renderer-specific resources | ||
| 5290 | if (renderer->DestroyRenderer) { | ||
| 5291 | renderer->DestroyRenderer(renderer); | ||
| 5292 | } | ||
| 5293 | |||
| 5294 | if (renderer->target_mutex) { | ||
| 5295 | SDL_DestroyMutex(renderer->target_mutex); | ||
| 5296 | renderer->target_mutex = NULL; | ||
| 5297 | } | ||
| 5298 | if (renderer->vertex_data) { | ||
| 5299 | SDL_free(renderer->vertex_data); | ||
| 5300 | renderer->vertex_data = NULL; | ||
| 5301 | } | ||
| 5302 | if (renderer->texture_formats) { | ||
| 5303 | SDL_free(renderer->texture_formats); | ||
| 5304 | renderer->texture_formats = NULL; | ||
| 5305 | } | ||
| 5306 | if (renderer->props) { | ||
| 5307 | SDL_DestroyProperties(renderer->props); | ||
| 5308 | renderer->props = 0; | ||
| 5309 | } | ||
| 5310 | } | ||
| 5311 | |||
| 5312 | void SDL_DestroyRenderer(SDL_Renderer *renderer) | ||
| 5313 | { | ||
| 5314 | CHECK_RENDERER_MAGIC_BUT_NOT_DESTROYED_FLAG(renderer,); | ||
| 5315 | |||
| 5316 | // if we've already destroyed the renderer through SDL_DestroyWindow, we just need | ||
| 5317 | // to free the renderer pointer. This lets apps destroy the window and renderer | ||
| 5318 | // in either order. | ||
| 5319 | if (!renderer->destroyed) { | ||
| 5320 | SDL_DestroyRendererWithoutFreeing(renderer); | ||
| 5321 | } | ||
| 5322 | |||
| 5323 | SDL_Renderer *curr = SDL_renderers; | ||
| 5324 | SDL_Renderer *prev = NULL; | ||
| 5325 | while (curr) { | ||
| 5326 | if (curr == renderer) { | ||
| 5327 | if (prev) { | ||
| 5328 | prev->next = renderer->next; | ||
| 5329 | } else { | ||
| 5330 | SDL_renderers = renderer->next; | ||
| 5331 | } | ||
| 5332 | break; | ||
| 5333 | } | ||
| 5334 | prev = curr; | ||
| 5335 | curr = curr->next; | ||
| 5336 | } | ||
| 5337 | |||
| 5338 | SDL_SetObjectValid(renderer, SDL_OBJECT_TYPE_RENDERER, false); // It's no longer magical... | ||
| 5339 | |||
| 5340 | SDL_free(renderer); | ||
| 5341 | } | ||
| 5342 | |||
| 5343 | void *SDL_GetRenderMetalLayer(SDL_Renderer *renderer) | ||
| 5344 | { | ||
| 5345 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 5346 | |||
| 5347 | if (renderer->GetMetalLayer) { | ||
| 5348 | FlushRenderCommands(renderer); // in case the app is going to mess with it. | ||
| 5349 | return renderer->GetMetalLayer(renderer); | ||
| 5350 | } | ||
| 5351 | return NULL; | ||
| 5352 | } | ||
| 5353 | |||
| 5354 | void *SDL_GetRenderMetalCommandEncoder(SDL_Renderer *renderer) | ||
| 5355 | { | ||
| 5356 | CHECK_RENDERER_MAGIC(renderer, NULL); | ||
| 5357 | |||
| 5358 | if (renderer->GetMetalCommandEncoder) { | ||
| 5359 | FlushRenderCommands(renderer); // in case the app is going to mess with it. | ||
| 5360 | return renderer->GetMetalCommandEncoder(renderer); | ||
| 5361 | } | ||
| 5362 | return NULL; | ||
| 5363 | } | ||
| 5364 | |||
| 5365 | bool SDL_AddVulkanRenderSemaphores(SDL_Renderer *renderer, Uint32 wait_stage_mask, Sint64 wait_semaphore, Sint64 signal_semaphore) | ||
| 5366 | { | ||
| 5367 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 5368 | |||
| 5369 | if (!renderer->AddVulkanRenderSemaphores) { | ||
| 5370 | return SDL_Unsupported(); | ||
| 5371 | } | ||
| 5372 | return renderer->AddVulkanRenderSemaphores(renderer, wait_stage_mask, wait_semaphore, signal_semaphore); | ||
| 5373 | } | ||
| 5374 | |||
| 5375 | static SDL_BlendMode SDL_GetShortBlendMode(SDL_BlendMode blendMode) | ||
| 5376 | { | ||
| 5377 | if (blendMode == SDL_BLENDMODE_NONE_FULL) { | ||
| 5378 | return SDL_BLENDMODE_NONE; | ||
| 5379 | } | ||
| 5380 | if (blendMode == SDL_BLENDMODE_BLEND_FULL) { | ||
| 5381 | return SDL_BLENDMODE_BLEND; | ||
| 5382 | } | ||
| 5383 | if (blendMode == SDL_BLENDMODE_BLEND_PREMULTIPLIED_FULL) { | ||
| 5384 | return SDL_BLENDMODE_BLEND_PREMULTIPLIED; | ||
| 5385 | } | ||
| 5386 | if (blendMode == SDL_BLENDMODE_ADD_FULL) { | ||
| 5387 | return SDL_BLENDMODE_ADD; | ||
| 5388 | } | ||
| 5389 | if (blendMode == SDL_BLENDMODE_ADD_PREMULTIPLIED_FULL) { | ||
| 5390 | return SDL_BLENDMODE_ADD_PREMULTIPLIED; | ||
| 5391 | } | ||
| 5392 | if (blendMode == SDL_BLENDMODE_MOD_FULL) { | ||
| 5393 | return SDL_BLENDMODE_MOD; | ||
| 5394 | } | ||
| 5395 | if (blendMode == SDL_BLENDMODE_MUL_FULL) { | ||
| 5396 | return SDL_BLENDMODE_MUL; | ||
| 5397 | } | ||
| 5398 | return blendMode; | ||
| 5399 | } | ||
| 5400 | |||
| 5401 | static SDL_BlendMode SDL_GetLongBlendMode(SDL_BlendMode blendMode) | ||
| 5402 | { | ||
| 5403 | if (blendMode == SDL_BLENDMODE_NONE) { | ||
| 5404 | return SDL_BLENDMODE_NONE_FULL; | ||
| 5405 | } | ||
| 5406 | if (blendMode == SDL_BLENDMODE_BLEND) { | ||
| 5407 | return SDL_BLENDMODE_BLEND_FULL; | ||
| 5408 | } | ||
| 5409 | if (blendMode == SDL_BLENDMODE_BLEND_PREMULTIPLIED) { | ||
| 5410 | return SDL_BLENDMODE_BLEND_PREMULTIPLIED_FULL; | ||
| 5411 | } | ||
| 5412 | if (blendMode == SDL_BLENDMODE_ADD) { | ||
| 5413 | return SDL_BLENDMODE_ADD_FULL; | ||
| 5414 | } | ||
| 5415 | if (blendMode == SDL_BLENDMODE_ADD_PREMULTIPLIED) { | ||
| 5416 | return SDL_BLENDMODE_ADD_PREMULTIPLIED_FULL; | ||
| 5417 | } | ||
| 5418 | if (blendMode == SDL_BLENDMODE_MOD) { | ||
| 5419 | return SDL_BLENDMODE_MOD_FULL; | ||
| 5420 | } | ||
| 5421 | if (blendMode == SDL_BLENDMODE_MUL) { | ||
| 5422 | return SDL_BLENDMODE_MUL_FULL; | ||
| 5423 | } | ||
| 5424 | return blendMode; | ||
| 5425 | } | ||
| 5426 | |||
| 5427 | SDL_BlendMode SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, SDL_BlendFactor dstColorFactor, | ||
| 5428 | SDL_BlendOperation colorOperation, | ||
| 5429 | SDL_BlendFactor srcAlphaFactor, SDL_BlendFactor dstAlphaFactor, | ||
| 5430 | SDL_BlendOperation alphaOperation) | ||
| 5431 | { | ||
| 5432 | SDL_BlendMode blendMode = SDL_COMPOSE_BLENDMODE(srcColorFactor, dstColorFactor, colorOperation, | ||
| 5433 | srcAlphaFactor, dstAlphaFactor, alphaOperation); | ||
| 5434 | return SDL_GetShortBlendMode(blendMode); | ||
| 5435 | } | ||
| 5436 | |||
| 5437 | SDL_BlendFactor SDL_GetBlendModeSrcColorFactor(SDL_BlendMode blendMode) | ||
| 5438 | { | ||
| 5439 | blendMode = SDL_GetLongBlendMode(blendMode); | ||
| 5440 | return (SDL_BlendFactor)(((Uint32)blendMode >> 4) & 0xF); | ||
| 5441 | } | ||
| 5442 | |||
| 5443 | SDL_BlendFactor SDL_GetBlendModeDstColorFactor(SDL_BlendMode blendMode) | ||
| 5444 | { | ||
| 5445 | blendMode = SDL_GetLongBlendMode(blendMode); | ||
| 5446 | return (SDL_BlendFactor)(((Uint32)blendMode >> 8) & 0xF); | ||
| 5447 | } | ||
| 5448 | |||
| 5449 | SDL_BlendOperation SDL_GetBlendModeColorOperation(SDL_BlendMode blendMode) | ||
| 5450 | { | ||
| 5451 | blendMode = SDL_GetLongBlendMode(blendMode); | ||
| 5452 | return (SDL_BlendOperation)(((Uint32)blendMode >> 0) & 0xF); | ||
| 5453 | } | ||
| 5454 | |||
| 5455 | SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor(SDL_BlendMode blendMode) | ||
| 5456 | { | ||
| 5457 | blendMode = SDL_GetLongBlendMode(blendMode); | ||
| 5458 | return (SDL_BlendFactor)(((Uint32)blendMode >> 20) & 0xF); | ||
| 5459 | } | ||
| 5460 | |||
| 5461 | SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor(SDL_BlendMode blendMode) | ||
| 5462 | { | ||
| 5463 | blendMode = SDL_GetLongBlendMode(blendMode); | ||
| 5464 | return (SDL_BlendFactor)(((Uint32)blendMode >> 24) & 0xF); | ||
| 5465 | } | ||
| 5466 | |||
| 5467 | SDL_BlendOperation SDL_GetBlendModeAlphaOperation(SDL_BlendMode blendMode) | ||
| 5468 | { | ||
| 5469 | blendMode = SDL_GetLongBlendMode(blendMode); | ||
| 5470 | return (SDL_BlendOperation)(((Uint32)blendMode >> 16) & 0xF); | ||
| 5471 | } | ||
| 5472 | |||
| 5473 | bool SDL_SetRenderVSync(SDL_Renderer *renderer, int vsync) | ||
| 5474 | { | ||
| 5475 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 5476 | |||
| 5477 | renderer->wanted_vsync = vsync ? true : false; | ||
| 5478 | |||
| 5479 | // for the software renderer, forward the call to the WindowTexture renderer | ||
| 5480 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 5481 | if (renderer->software) { | ||
| 5482 | if (!renderer->window) { | ||
| 5483 | if (!vsync) { | ||
| 5484 | return true; | ||
| 5485 | } else { | ||
| 5486 | return SDL_Unsupported(); | ||
| 5487 | } | ||
| 5488 | } | ||
| 5489 | if (SDL_SetWindowTextureVSync(NULL, renderer->window, vsync)) { | ||
| 5490 | renderer->simulate_vsync = false; | ||
| 5491 | return true; | ||
| 5492 | } | ||
| 5493 | } | ||
| 5494 | #endif | ||
| 5495 | |||
| 5496 | if (!renderer->SetVSync) { | ||
| 5497 | switch (vsync) { | ||
| 5498 | case 0: | ||
| 5499 | renderer->simulate_vsync = false; | ||
| 5500 | break; | ||
| 5501 | case 1: | ||
| 5502 | renderer->simulate_vsync = true; | ||
| 5503 | break; | ||
| 5504 | default: | ||
| 5505 | return SDL_Unsupported(); | ||
| 5506 | } | ||
| 5507 | } else if (!renderer->SetVSync(renderer, vsync)) { | ||
| 5508 | if (vsync == 1) { | ||
| 5509 | renderer->simulate_vsync = true; | ||
| 5510 | } else { | ||
| 5511 | return false; | ||
| 5512 | } | ||
| 5513 | } | ||
| 5514 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_VSYNC_NUMBER, vsync); | ||
| 5515 | return true; | ||
| 5516 | } | ||
| 5517 | |||
| 5518 | bool SDL_GetRenderVSync(SDL_Renderer *renderer, int *vsync) | ||
| 5519 | { | ||
| 5520 | if (vsync) { | ||
| 5521 | *vsync = 0; | ||
| 5522 | } | ||
| 5523 | |||
| 5524 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 5525 | |||
| 5526 | if (vsync) { | ||
| 5527 | *vsync = (int)SDL_GetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_VSYNC_NUMBER, 0); | ||
| 5528 | } | ||
| 5529 | return true; | ||
| 5530 | } | ||
| 5531 | |||
| 5532 | |||
| 5533 | #define SDL_DEBUG_FONT_GLYPHS_PER_ROW 14 | ||
| 5534 | |||
| 5535 | static bool CreateDebugTextAtlas(SDL_Renderer *renderer) | ||
| 5536 | { | ||
| 5537 | SDL_assert(renderer->debug_char_texture_atlas == NULL); // don't double-create it! | ||
| 5538 | |||
| 5539 | const int charWidth = SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE; | ||
| 5540 | const int charHeight = SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE; | ||
| 5541 | |||
| 5542 | // actually make each glyph two pixels taller/wider, to prevent scaling artifacts. | ||
| 5543 | const int rows = (SDL_DEBUG_FONT_NUM_GLYPHS / SDL_DEBUG_FONT_GLYPHS_PER_ROW) + 1; | ||
| 5544 | SDL_Surface *atlas = SDL_CreateSurface((charWidth + 2) * SDL_DEBUG_FONT_GLYPHS_PER_ROW, rows * (charHeight + 2), SDL_PIXELFORMAT_RGBA8888); | ||
| 5545 | if (!atlas) { | ||
| 5546 | return false; | ||
| 5547 | } | ||
| 5548 | |||
| 5549 | const int pitch = atlas->pitch; | ||
| 5550 | SDL_memset(atlas->pixels, '\0', atlas->h * atlas->pitch); | ||
| 5551 | |||
| 5552 | int column = 0; | ||
| 5553 | int row = 0; | ||
| 5554 | for (int glyph = 0; glyph < SDL_DEBUG_FONT_NUM_GLYPHS; glyph++) { | ||
| 5555 | // find top-left of this glyph in destination surface. The +2's account for glyph padding. | ||
| 5556 | Uint8 *linepos = (((Uint8 *)atlas->pixels) + ((row * (charHeight + 2) + 1) * pitch)) + ((column * (charWidth + 2) + 1) * sizeof (Uint32)); | ||
| 5557 | const Uint8 *charpos = SDL_RenderDebugTextFontData + (glyph * 8); | ||
| 5558 | |||
| 5559 | // Draw the glyph to the surface... | ||
| 5560 | for (int iy = 0; iy < charHeight; iy++) { | ||
| 5561 | Uint32 *curpos = (Uint32 *)linepos; | ||
| 5562 | for (int ix = 0; ix < charWidth; ix++) { | ||
| 5563 | if ((*charpos) & (1 << ix)) { | ||
| 5564 | *curpos = 0xffffffff; | ||
| 5565 | } else { | ||
| 5566 | *curpos = 0; | ||
| 5567 | } | ||
| 5568 | ++curpos; | ||
| 5569 | } | ||
| 5570 | linepos += pitch; | ||
| 5571 | ++charpos; | ||
| 5572 | } | ||
| 5573 | |||
| 5574 | // move to next position (and if too far, start the next row). | ||
| 5575 | column++; | ||
| 5576 | if (column >= SDL_DEBUG_FONT_GLYPHS_PER_ROW) { | ||
| 5577 | row++; | ||
| 5578 | column = 0; | ||
| 5579 | } | ||
| 5580 | } | ||
| 5581 | |||
| 5582 | SDL_assert((row < rows) || ((row == rows) && (column == 0))); // make sure we didn't overflow the surface. | ||
| 5583 | |||
| 5584 | // Convert temp surface into texture | ||
| 5585 | SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, atlas); | ||
| 5586 | if (texture) { | ||
| 5587 | SDL_SetTextureScaleMode(texture, SDL_SCALEMODE_NEAREST); | ||
| 5588 | renderer->debug_char_texture_atlas = texture; | ||
| 5589 | } | ||
| 5590 | SDL_DestroySurface(atlas); | ||
| 5591 | |||
| 5592 | return texture != NULL; | ||
| 5593 | } | ||
| 5594 | |||
| 5595 | static bool DrawDebugCharacter(SDL_Renderer *renderer, float x, float y, Uint32 c) | ||
| 5596 | { | ||
| 5597 | SDL_assert(renderer->debug_char_texture_atlas != NULL); // should have been created by now! | ||
| 5598 | |||
| 5599 | const int charWidth = SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE; | ||
| 5600 | const int charHeight = SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE; | ||
| 5601 | |||
| 5602 | // Character index in cache | ||
| 5603 | Uint32 ci = c; | ||
| 5604 | if ((ci <= 32) || ((ci >= 127) && (ci <= 160))) { | ||
| 5605 | return true; // these are just completely blank chars, don't bother doing anything. | ||
| 5606 | } else if (ci >= SDL_DEBUG_FONT_NUM_GLYPHS) { | ||
| 5607 | ci = SDL_DEBUG_FONT_NUM_GLYPHS - 1; // use our "not a valid/supported character" glyph. | ||
| 5608 | } else if (ci < 127) { | ||
| 5609 | ci -= 33; // adjust for the 33 blank glyphs at the start | ||
| 5610 | } else { | ||
| 5611 | ci -= 67; // adjust for the 33 blank glyphs at the start AND the 34 gap in the middle. | ||
| 5612 | } | ||
| 5613 | |||
| 5614 | const float src_x = (float) (((ci % SDL_DEBUG_FONT_GLYPHS_PER_ROW) * (charWidth + 2)) + 1); | ||
| 5615 | const float src_y = (float) (((ci / SDL_DEBUG_FONT_GLYPHS_PER_ROW) * (charHeight + 2)) + 1); | ||
| 5616 | |||
| 5617 | // Draw texture onto destination | ||
| 5618 | const SDL_FRect srect = { src_x, src_y, (float) charWidth, (float) charHeight }; | ||
| 5619 | const SDL_FRect drect = { x, y, (float) charWidth, (float) charHeight }; | ||
| 5620 | return SDL_RenderTexture(renderer, renderer->debug_char_texture_atlas, &srect, &drect); | ||
| 5621 | } | ||
| 5622 | |||
| 5623 | bool SDL_RenderDebugText(SDL_Renderer *renderer, float x, float y, const char *s) | ||
| 5624 | { | ||
| 5625 | CHECK_RENDERER_MAGIC(renderer, false); | ||
| 5626 | |||
| 5627 | // Allocate a texture atlas for this renderer if needed. | ||
| 5628 | if (!renderer->debug_char_texture_atlas) { | ||
| 5629 | if (!CreateDebugTextAtlas(renderer)) { | ||
| 5630 | return false; | ||
| 5631 | } | ||
| 5632 | } | ||
| 5633 | |||
| 5634 | bool result = true; | ||
| 5635 | |||
| 5636 | Uint8 r, g, b, a; | ||
| 5637 | result &= SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a); | ||
| 5638 | result &= SDL_SetTextureColorMod(renderer->debug_char_texture_atlas, r, g, b); | ||
| 5639 | result &= SDL_SetTextureAlphaMod(renderer->debug_char_texture_atlas, a); | ||
| 5640 | |||
| 5641 | float curx = x; | ||
| 5642 | Uint32 ch; | ||
| 5643 | |||
| 5644 | while (result && ((ch = SDL_StepUTF8(&s, NULL)) != 0)) { | ||
| 5645 | result &= DrawDebugCharacter(renderer, curx, y, ch); | ||
| 5646 | curx += SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE; | ||
| 5647 | } | ||
| 5648 | |||
| 5649 | return result; | ||
| 5650 | } | ||
| 5651 | |||
| 5652 | bool SDL_RenderDebugTextFormat(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||
| 5653 | { | ||
| 5654 | va_list ap; | ||
| 5655 | va_start(ap, fmt); | ||
| 5656 | |||
| 5657 | // fast path to avoid unnecessary allocation and copy. If you're going through the dynapi, there's a good chance | ||
| 5658 | // you _always_ hit this path, since it probably had to process varargs before calling into the jumptable. | ||
| 5659 | if (SDL_strcmp(fmt, "%s") == 0) { | ||
| 5660 | const char *str = va_arg(ap, const char *); | ||
| 5661 | va_end(ap); | ||
| 5662 | return SDL_RenderDebugText(renderer, x, y, str); | ||
| 5663 | } | ||
| 5664 | |||
| 5665 | char *str = NULL; | ||
| 5666 | const int rc = SDL_vasprintf(&str, fmt, ap); | ||
| 5667 | va_end(ap); | ||
| 5668 | |||
| 5669 | if (rc == -1) { | ||
| 5670 | return false; | ||
| 5671 | } | ||
| 5672 | |||
| 5673 | const bool retval = SDL_RenderDebugText(renderer, x, y, str); | ||
| 5674 | SDL_free(str); | ||
| 5675 | return retval; | ||
| 5676 | } | ||
diff --git a/SDL-3.2.8/src/render/SDL_render_debug_font.h b/SDL-3.2.8/src/render/SDL_render_debug_font.h new file mode 100644 index 0000000..ca296e8 --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_render_debug_font.h | |||
| @@ -0,0 +1,2331 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_render_debug_font_h_ | ||
| 23 | #define SDL_render_debug_font_h_ | ||
| 24 | |||
| 25 | /* ---- 8x8 font definition ---- */ | ||
| 26 | |||
| 27 | /* | ||
| 28 | ; Summary: font8_8.asm | ||
| 29 | ; 8x8 monochrome bitmap fonts for rendering | ||
| 30 | ; | ||
| 31 | ; Author: | ||
| 32 | ; Marcel Sondaar | ||
| 33 | ; International Business Machines (public domain VGA fonts) | ||
| 34 | ; | ||
| 35 | ; License: | ||
| 36 | ; Public Domain | ||
| 37 | ; | ||
| 38 | */ | ||
| 39 | |||
| 40 | #define SDL_DEBUG_FONT_NUM_GLYPHS 190 | ||
| 41 | |||
| 42 | static const Uint8 SDL_RenderDebugTextFontData[] = { | ||
| 43 | // there's a gap at the start. | ||
| 44 | |||
| 45 | /* | ||
| 46 | * 33 0x21 '!' | ||
| 47 | */ | ||
| 48 | 0x18, /* 00011000 */ | ||
| 49 | 0x3c, /* 00111100 */ | ||
| 50 | 0x3c, /* 00111100 */ | ||
| 51 | 0x18, /* 00011000 */ | ||
| 52 | 0x18, /* 00011000 */ | ||
| 53 | 0x00, /* 00000000 */ | ||
| 54 | 0x18, /* 00011000 */ | ||
| 55 | 0x00, /* 00000000 */ | ||
| 56 | |||
| 57 | /* | ||
| 58 | * 34 0x22 '"' | ||
| 59 | */ | ||
| 60 | 0x36, /* 01101100 */ | ||
| 61 | 0x36, /* 01101100 */ | ||
| 62 | 0x00, /* 00000000 */ | ||
| 63 | 0x00, /* 00000000 */ | ||
| 64 | 0x00, /* 00000000 */ | ||
| 65 | 0x00, /* 00000000 */ | ||
| 66 | 0x00, /* 00000000 */ | ||
| 67 | 0x00, /* 00000000 */ | ||
| 68 | |||
| 69 | /* | ||
| 70 | * 35 0x23 '#' | ||
| 71 | */ | ||
| 72 | 0x36, /* 01101100 */ | ||
| 73 | 0x36, /* 01101100 */ | ||
| 74 | 0x7f, /* 11111110 */ | ||
| 75 | 0x36, /* 01101100 */ | ||
| 76 | 0x7f, /* 11111110 */ | ||
| 77 | 0x36, /* 01101100 */ | ||
| 78 | 0x36, /* 01101100 */ | ||
| 79 | 0x00, /* 00000000 */ | ||
| 80 | |||
| 81 | /* | ||
| 82 | * 36 0x24 '$' | ||
| 83 | */ | ||
| 84 | 0x0c, /* 00110000 */ | ||
| 85 | 0x3e, /* 01111100 */ | ||
| 86 | 0x03, /* 11000000 */ | ||
| 87 | 0x1e, /* 01111000 */ | ||
| 88 | 0x30, /* 00001100 */ | ||
| 89 | 0x1f, /* 11111000 */ | ||
| 90 | 0x0c, /* 00110000 */ | ||
| 91 | 0x00, /* 00000000 */ | ||
| 92 | |||
| 93 | /* | ||
| 94 | * 37 0x25 '%' | ||
| 95 | */ | ||
| 96 | 0x00, /* 00000000 */ | ||
| 97 | 0x63, /* 11000110 */ | ||
| 98 | 0x33, /* 11001100 */ | ||
| 99 | 0x18, /* 00011000 */ | ||
| 100 | 0x0c, /* 00110000 */ | ||
| 101 | 0x66, /* 01100110 */ | ||
| 102 | 0x63, /* 11000110 */ | ||
| 103 | 0x00, /* 00000000 */ | ||
| 104 | |||
| 105 | /* | ||
| 106 | * 38 0x26 '&' | ||
| 107 | */ | ||
| 108 | 0x1c, /* 00111000 */ | ||
| 109 | 0x36, /* 01101100 */ | ||
| 110 | 0x1c, /* 00111000 */ | ||
| 111 | 0x6e, /* 01110110 */ | ||
| 112 | 0x3b, /* 11011100 */ | ||
| 113 | 0x33, /* 11001100 */ | ||
| 114 | 0x6e, /* 01110110 */ | ||
| 115 | 0x00, /* 00000000 */ | ||
| 116 | |||
| 117 | /* | ||
| 118 | * 39 0x27 ''' | ||
| 119 | */ | ||
| 120 | 0x06, /* 01100000 */ | ||
| 121 | 0x06, /* 01100000 */ | ||
| 122 | 0x03, /* 11000000 */ | ||
| 123 | 0x00, /* 00000000 */ | ||
| 124 | 0x00, /* 00000000 */ | ||
| 125 | 0x00, /* 00000000 */ | ||
| 126 | 0x00, /* 00000000 */ | ||
| 127 | 0x00, /* 00000000 */ | ||
| 128 | |||
| 129 | /* | ||
| 130 | * 40 0x28 '(' | ||
| 131 | */ | ||
| 132 | 0x18, /* 00011000 */ | ||
| 133 | 0x0c, /* 00110000 */ | ||
| 134 | 0x06, /* 01100000 */ | ||
| 135 | 0x06, /* 01100000 */ | ||
| 136 | 0x06, /* 01100000 */ | ||
| 137 | 0x0c, /* 00110000 */ | ||
| 138 | 0x18, /* 00011000 */ | ||
| 139 | 0x00, /* 00000000 */ | ||
| 140 | |||
| 141 | /* | ||
| 142 | * 41 0x29 ')' | ||
| 143 | */ | ||
| 144 | 0x06, /* 01100000 */ | ||
| 145 | 0x0c, /* 00110000 */ | ||
| 146 | 0x18, /* 00011000 */ | ||
| 147 | 0x18, /* 00011000 */ | ||
| 148 | 0x18, /* 00011000 */ | ||
| 149 | 0x0c, /* 00110000 */ | ||
| 150 | 0x06, /* 01100000 */ | ||
| 151 | 0x00, /* 00000000 */ | ||
| 152 | |||
| 153 | /* | ||
| 154 | * 42 0x2a '*' | ||
| 155 | */ | ||
| 156 | 0x00, /* 00000000 */ | ||
| 157 | 0x66, /* 01100110 */ | ||
| 158 | 0x3c, /* 00111100 */ | ||
| 159 | 0xff, /* 11111111 */ | ||
| 160 | 0x3c, /* 00111100 */ | ||
| 161 | 0x66, /* 01100110 */ | ||
| 162 | 0x00, /* 00000000 */ | ||
| 163 | 0x00, /* 00000000 */ | ||
| 164 | |||
| 165 | /* | ||
| 166 | * 43 0x2b '+' | ||
| 167 | */ | ||
| 168 | 0x00, /* 00000000 */ | ||
| 169 | 0x0c, /* 00110000 */ | ||
| 170 | 0x0c, /* 00110000 */ | ||
| 171 | 0x3f, /* 11111100 */ | ||
| 172 | 0x0c, /* 00110000 */ | ||
| 173 | 0x0c, /* 00110000 */ | ||
| 174 | 0x00, /* 00000000 */ | ||
| 175 | 0x00, /* 00000000 */ | ||
| 176 | |||
| 177 | /* | ||
| 178 | * 44 0x2c ',' | ||
| 179 | */ | ||
| 180 | 0x00, /* 00000000 */ | ||
| 181 | 0x00, /* 00000000 */ | ||
| 182 | 0x00, /* 00000000 */ | ||
| 183 | 0x00, /* 00000000 */ | ||
| 184 | 0x00, /* 00000000 */ | ||
| 185 | 0x0c, /* 00110000 */ | ||
| 186 | 0x0c, /* 00110000 */ | ||
| 187 | 0x06, /* 01100000 */ | ||
| 188 | |||
| 189 | /* | ||
| 190 | * 45 0x2d '-' | ||
| 191 | */ | ||
| 192 | 0x00, /* 00000000 */ | ||
| 193 | 0x00, /* 00000000 */ | ||
| 194 | 0x00, /* 00000000 */ | ||
| 195 | 0x3f, /* 11111100 */ | ||
| 196 | 0x00, /* 00000000 */ | ||
| 197 | 0x00, /* 00000000 */ | ||
| 198 | 0x00, /* 00000000 */ | ||
| 199 | 0x00, /* 00000000 */ | ||
| 200 | |||
| 201 | /* | ||
| 202 | * 46 0x2e '.' | ||
| 203 | */ | ||
| 204 | 0x00, /* 00000000 */ | ||
| 205 | 0x00, /* 00000000 */ | ||
| 206 | 0x00, /* 00000000 */ | ||
| 207 | 0x00, /* 00000000 */ | ||
| 208 | 0x00, /* 00000000 */ | ||
| 209 | 0x0c, /* 00110000 */ | ||
| 210 | 0x0c, /* 00110000 */ | ||
| 211 | 0x00, /* 00000000 */ | ||
| 212 | |||
| 213 | /* | ||
| 214 | * 47 0x2f '/' | ||
| 215 | */ | ||
| 216 | 0x60, /* 00000110 */ | ||
| 217 | 0x30, /* 00001100 */ | ||
| 218 | 0x18, /* 00011000 */ | ||
| 219 | 0x0c, /* 00110000 */ | ||
| 220 | 0x06, /* 01100000 */ | ||
| 221 | 0x03, /* 11000000 */ | ||
| 222 | 0x01, /* 10000000 */ | ||
| 223 | 0x00, /* 00000000 */ | ||
| 224 | |||
| 225 | /* | ||
| 226 | * 48 0x30 '0' | ||
| 227 | */ | ||
| 228 | 0x3e, /* 01111100 */ | ||
| 229 | 0x63, /* 11000110 */ | ||
| 230 | 0x73, /* 11001110 */ | ||
| 231 | 0x7b, /* 11011110 */ | ||
| 232 | 0x6f, /* 11110110 */ | ||
| 233 | 0x67, /* 11100110 */ | ||
| 234 | 0x3e, /* 01111100 */ | ||
| 235 | 0x00, /* 00000000 */ | ||
| 236 | |||
| 237 | /* | ||
| 238 | * 49 0x31 '1' | ||
| 239 | */ | ||
| 240 | 0x0c, /* 00110000 */ | ||
| 241 | 0x0e, /* 01110000 */ | ||
| 242 | 0x0c, /* 00110000 */ | ||
| 243 | 0x0c, /* 00110000 */ | ||
| 244 | 0x0c, /* 00110000 */ | ||
| 245 | 0x0c, /* 00110000 */ | ||
| 246 | 0x3f, /* 11111100 */ | ||
| 247 | 0x00, /* 00000000 */ | ||
| 248 | |||
| 249 | /* | ||
| 250 | * 50 0x32 '2' | ||
| 251 | */ | ||
| 252 | 0x1e, /* 01111000 */ | ||
| 253 | 0x33, /* 11001100 */ | ||
| 254 | 0x30, /* 00001100 */ | ||
| 255 | 0x1c, /* 00111000 */ | ||
| 256 | 0x06, /* 01100000 */ | ||
| 257 | 0x33, /* 11001100 */ | ||
| 258 | 0x3f, /* 11111100 */ | ||
| 259 | 0x00, /* 00000000 */ | ||
| 260 | |||
| 261 | /* | ||
| 262 | * 51 0x33 '3' | ||
| 263 | */ | ||
| 264 | 0x1e, /* 01111000 */ | ||
| 265 | 0x33, /* 11001100 */ | ||
| 266 | 0x30, /* 00001100 */ | ||
| 267 | 0x1c, /* 00111000 */ | ||
| 268 | 0x30, /* 00001100 */ | ||
| 269 | 0x33, /* 11001100 */ | ||
| 270 | 0x1e, /* 01111000 */ | ||
| 271 | 0x00, /* 00000000 */ | ||
| 272 | |||
| 273 | /* | ||
| 274 | * 52 0x34 '4' | ||
| 275 | */ | ||
| 276 | 0x38, /* 00011100 */ | ||
| 277 | 0x3c, /* 00111100 */ | ||
| 278 | 0x36, /* 01101100 */ | ||
| 279 | 0x33, /* 11001100 */ | ||
| 280 | 0x7f, /* 11111110 */ | ||
| 281 | 0x30, /* 00001100 */ | ||
| 282 | 0x78, /* 00011110 */ | ||
| 283 | 0x00, /* 00000000 */ | ||
| 284 | |||
| 285 | /* | ||
| 286 | * 53 0x35 '5' | ||
| 287 | */ | ||
| 288 | 0x3f, /* 11111100 */ | ||
| 289 | 0x03, /* 11000000 */ | ||
| 290 | 0x1f, /* 11111000 */ | ||
| 291 | 0x30, /* 00001100 */ | ||
| 292 | 0x30, /* 00001100 */ | ||
| 293 | 0x33, /* 11001100 */ | ||
| 294 | 0x1e, /* 01111000 */ | ||
| 295 | 0x00, /* 00000000 */ | ||
| 296 | |||
| 297 | /* | ||
| 298 | * 54 0x36 '6' | ||
| 299 | */ | ||
| 300 | 0x1c, /* 00111000 */ | ||
| 301 | 0x06, /* 01100000 */ | ||
| 302 | 0x03, /* 11000000 */ | ||
| 303 | 0x1f, /* 11111000 */ | ||
| 304 | 0x33, /* 11001100 */ | ||
| 305 | 0x33, /* 11001100 */ | ||
| 306 | 0x1e, /* 01111000 */ | ||
| 307 | 0x00, /* 00000000 */ | ||
| 308 | |||
| 309 | /* | ||
| 310 | * 55 0x37 '7' | ||
| 311 | */ | ||
| 312 | 0x3f, /* 11111100 */ | ||
| 313 | 0x33, /* 11001100 */ | ||
| 314 | 0x30, /* 00001100 */ | ||
| 315 | 0x18, /* 00011000 */ | ||
| 316 | 0x0c, /* 00110000 */ | ||
| 317 | 0x0c, /* 00110000 */ | ||
| 318 | 0x0c, /* 00110000 */ | ||
| 319 | 0x00, /* 00000000 */ | ||
| 320 | |||
| 321 | /* | ||
| 322 | * 56 0x38 '8' | ||
| 323 | */ | ||
| 324 | 0x1e, /* 01111000 */ | ||
| 325 | 0x33, /* 11001100 */ | ||
| 326 | 0x33, /* 11001100 */ | ||
| 327 | 0x1e, /* 01111000 */ | ||
| 328 | 0x33, /* 11001100 */ | ||
| 329 | 0x33, /* 11001100 */ | ||
| 330 | 0x1e, /* 01111000 */ | ||
| 331 | 0x00, /* 00000000 */ | ||
| 332 | |||
| 333 | /* | ||
| 334 | * 57 0x39 '9' | ||
| 335 | */ | ||
| 336 | 0x1e, /* 01111000 */ | ||
| 337 | 0x33, /* 11001100 */ | ||
| 338 | 0x33, /* 11001100 */ | ||
| 339 | 0x3e, /* 01111100 */ | ||
| 340 | 0x30, /* 00001100 */ | ||
| 341 | 0x18, /* 00011000 */ | ||
| 342 | 0x0e, /* 01110000 */ | ||
| 343 | 0x00, /* 00000000 */ | ||
| 344 | |||
| 345 | /* | ||
| 346 | * 58 0x3a ':' | ||
| 347 | */ | ||
| 348 | 0x00, /* 00000000 */ | ||
| 349 | 0x0c, /* 00110000 */ | ||
| 350 | 0x0c, /* 00110000 */ | ||
| 351 | 0x00, /* 00000000 */ | ||
| 352 | 0x00, /* 00000000 */ | ||
| 353 | 0x0c, /* 00110000 */ | ||
| 354 | 0x0c, /* 00110000 */ | ||
| 355 | 0x00, /* 00000000 */ | ||
| 356 | |||
| 357 | /* | ||
| 358 | * 59 0x3b ';' | ||
| 359 | */ | ||
| 360 | 0x00, /* 00000000 */ | ||
| 361 | 0x0c, /* 00110000 */ | ||
| 362 | 0x0c, /* 00110000 */ | ||
| 363 | 0x00, /* 00000000 */ | ||
| 364 | 0x00, /* 00000000 */ | ||
| 365 | 0x0c, /* 00110000 */ | ||
| 366 | 0x0c, /* 00110000 */ | ||
| 367 | 0x06, /* 01100000 */ | ||
| 368 | |||
| 369 | /* | ||
| 370 | * 60 0x3c '<' | ||
| 371 | */ | ||
| 372 | 0x18, /* 00011000 */ | ||
| 373 | 0x0c, /* 00110000 */ | ||
| 374 | 0x06, /* 01100000 */ | ||
| 375 | 0x03, /* 11000000 */ | ||
| 376 | 0x06, /* 01100000 */ | ||
| 377 | 0x0c, /* 00110000 */ | ||
| 378 | 0x18, /* 00011000 */ | ||
| 379 | 0x00, /* 00000000 */ | ||
| 380 | |||
| 381 | /* | ||
| 382 | * 61 0x3d '=' | ||
| 383 | */ | ||
| 384 | 0x00, /* 00000000 */ | ||
| 385 | 0x00, /* 00000000 */ | ||
| 386 | 0x3f, /* 11111100 */ | ||
| 387 | 0x00, /* 00000000 */ | ||
| 388 | 0x00, /* 00000000 */ | ||
| 389 | 0x3f, /* 11111100 */ | ||
| 390 | 0x00, /* 00000000 */ | ||
| 391 | 0x00, /* 00000000 */ | ||
| 392 | |||
| 393 | /* | ||
| 394 | * 62 0x3e '>' | ||
| 395 | */ | ||
| 396 | 0x06, /* 01100000 */ | ||
| 397 | 0x0c, /* 00110000 */ | ||
| 398 | 0x18, /* 00011000 */ | ||
| 399 | 0x30, /* 00001100 */ | ||
| 400 | 0x18, /* 00011000 */ | ||
| 401 | 0x0c, /* 00110000 */ | ||
| 402 | 0x06, /* 01100000 */ | ||
| 403 | 0x00, /* 00000000 */ | ||
| 404 | |||
| 405 | /* | ||
| 406 | * 63 0x3f '?' | ||
| 407 | */ | ||
| 408 | 0x1e, /* 01111000 */ | ||
| 409 | 0x33, /* 11001100 */ | ||
| 410 | 0x30, /* 00001100 */ | ||
| 411 | 0x18, /* 00011000 */ | ||
| 412 | 0x0c, /* 00110000 */ | ||
| 413 | 0x00, /* 00000000 */ | ||
| 414 | 0x0c, /* 00110000 */ | ||
| 415 | 0x00, /* 00000000 */ | ||
| 416 | |||
| 417 | /* | ||
| 418 | * 64 0x40 '@' | ||
| 419 | */ | ||
| 420 | 0x3e, /* 01111100 */ | ||
| 421 | 0x63, /* 11000110 */ | ||
| 422 | 0x7b, /* 11011110 */ | ||
| 423 | 0x7b, /* 11011110 */ | ||
| 424 | 0x7b, /* 11011110 */ | ||
| 425 | 0x03, /* 11000000 */ | ||
| 426 | 0x1e, /* 01111000 */ | ||
| 427 | 0x00, /* 00000000 */ | ||
| 428 | |||
| 429 | /* | ||
| 430 | * 65 0x41 'A' | ||
| 431 | */ | ||
| 432 | 0x0c, /* 00110000 */ | ||
| 433 | 0x1e, /* 01111000 */ | ||
| 434 | 0x33, /* 11001100 */ | ||
| 435 | 0x33, /* 11001100 */ | ||
| 436 | 0x3f, /* 11111100 */ | ||
| 437 | 0x33, /* 11001100 */ | ||
| 438 | 0x33, /* 11001100 */ | ||
| 439 | 0x00, /* 00000000 */ | ||
| 440 | |||
| 441 | /* | ||
| 442 | * 66 0x42 'B' | ||
| 443 | */ | ||
| 444 | 0x3f, /* 11111100 */ | ||
| 445 | 0x66, /* 01100110 */ | ||
| 446 | 0x66, /* 01100110 */ | ||
| 447 | 0x3e, /* 01111100 */ | ||
| 448 | 0x66, /* 01100110 */ | ||
| 449 | 0x66, /* 01100110 */ | ||
| 450 | 0x3f, /* 11111100 */ | ||
| 451 | 0x00, /* 00000000 */ | ||
| 452 | |||
| 453 | /* | ||
| 454 | * 67 0x43 'C' | ||
| 455 | */ | ||
| 456 | 0x3c, /* 00111100 */ | ||
| 457 | 0x66, /* 01100110 */ | ||
| 458 | 0x03, /* 11000000 */ | ||
| 459 | 0x03, /* 11000000 */ | ||
| 460 | 0x03, /* 11000000 */ | ||
| 461 | 0x66, /* 01100110 */ | ||
| 462 | 0x3c, /* 00111100 */ | ||
| 463 | 0x00, /* 00000000 */ | ||
| 464 | |||
| 465 | /* | ||
| 466 | * 68 0x44 'D' | ||
| 467 | */ | ||
| 468 | 0x1f, /* 11111000 */ | ||
| 469 | 0x36, /* 01101100 */ | ||
| 470 | 0x66, /* 01100110 */ | ||
| 471 | 0x66, /* 01100110 */ | ||
| 472 | 0x66, /* 01100110 */ | ||
| 473 | 0x36, /* 01101100 */ | ||
| 474 | 0x1f, /* 11111000 */ | ||
| 475 | 0x00, /* 00000000 */ | ||
| 476 | |||
| 477 | /* | ||
| 478 | * 69 0x45 'E' | ||
| 479 | */ | ||
| 480 | 0x7f, /* 11111110 */ | ||
| 481 | 0x46, /* 01100010 */ | ||
| 482 | 0x16, /* 01101000 */ | ||
| 483 | 0x1e, /* 01111000 */ | ||
| 484 | 0x16, /* 01101000 */ | ||
| 485 | 0x46, /* 01100010 */ | ||
| 486 | 0x7f, /* 11111110 */ | ||
| 487 | 0x00, /* 00000000 */ | ||
| 488 | |||
| 489 | /* | ||
| 490 | * 70 0x46 'F' | ||
| 491 | */ | ||
| 492 | 0x7f, /* 11111110 */ | ||
| 493 | 0x46, /* 01100010 */ | ||
| 494 | 0x16, /* 01101000 */ | ||
| 495 | 0x1e, /* 01111000 */ | ||
| 496 | 0x16, /* 01101000 */ | ||
| 497 | 0x06, /* 01100000 */ | ||
| 498 | 0x0f, /* 11110000 */ | ||
| 499 | 0x00, /* 00000000 */ | ||
| 500 | |||
| 501 | /* | ||
| 502 | * 71 0x47 'G' | ||
| 503 | */ | ||
| 504 | 0x3c, /* 00111100 */ | ||
| 505 | 0x66, /* 01100110 */ | ||
| 506 | 0x03, /* 11000000 */ | ||
| 507 | 0x03, /* 11000000 */ | ||
| 508 | 0x73, /* 11001110 */ | ||
| 509 | 0x66, /* 01100110 */ | ||
| 510 | 0x7c, /* 00111110 */ | ||
| 511 | 0x00, /* 00000000 */ | ||
| 512 | |||
| 513 | /* | ||
| 514 | * 72 0x48 'H' | ||
| 515 | */ | ||
| 516 | 0x33, /* 11001100 */ | ||
| 517 | 0x33, /* 11001100 */ | ||
| 518 | 0x33, /* 11001100 */ | ||
| 519 | 0x3f, /* 11111100 */ | ||
| 520 | 0x33, /* 11001100 */ | ||
| 521 | 0x33, /* 11001100 */ | ||
| 522 | 0x33, /* 11001100 */ | ||
| 523 | 0x00, /* 00000000 */ | ||
| 524 | |||
| 525 | /* | ||
| 526 | * 73 0x49 'I' | ||
| 527 | */ | ||
| 528 | 0x1e, /* 01111000 */ | ||
| 529 | 0x0c, /* 00110000 */ | ||
| 530 | 0x0c, /* 00110000 */ | ||
| 531 | 0x0c, /* 00110000 */ | ||
| 532 | 0x0c, /* 00110000 */ | ||
| 533 | 0x0c, /* 00110000 */ | ||
| 534 | 0x1e, /* 01111000 */ | ||
| 535 | 0x00, /* 00000000 */ | ||
| 536 | |||
| 537 | /* | ||
| 538 | * 74 0x4a 'J' | ||
| 539 | */ | ||
| 540 | 0x78, /* 00011110 */ | ||
| 541 | 0x30, /* 00001100 */ | ||
| 542 | 0x30, /* 00001100 */ | ||
| 543 | 0x30, /* 00001100 */ | ||
| 544 | 0x33, /* 11001100 */ | ||
| 545 | 0x33, /* 11001100 */ | ||
| 546 | 0x1e, /* 01111000 */ | ||
| 547 | 0x00, /* 00000000 */ | ||
| 548 | |||
| 549 | /* | ||
| 550 | * 75 0x4b 'K' | ||
| 551 | */ | ||
| 552 | 0x67, /* 11100110 */ | ||
| 553 | 0x66, /* 01100110 */ | ||
| 554 | 0x36, /* 01101100 */ | ||
| 555 | 0x1e, /* 01111000 */ | ||
| 556 | 0x36, /* 01101100 */ | ||
| 557 | 0x66, /* 01100110 */ | ||
| 558 | 0x67, /* 11100110 */ | ||
| 559 | 0x00, /* 00000000 */ | ||
| 560 | |||
| 561 | /* | ||
| 562 | * 76 0x4c 'L' | ||
| 563 | */ | ||
| 564 | 0x0f, /* 11110000 */ | ||
| 565 | 0x06, /* 01100000 */ | ||
| 566 | 0x06, /* 01100000 */ | ||
| 567 | 0x06, /* 01100000 */ | ||
| 568 | 0x46, /* 01100010 */ | ||
| 569 | 0x66, /* 01100110 */ | ||
| 570 | 0x7f, /* 11111110 */ | ||
| 571 | 0x00, /* 00000000 */ | ||
| 572 | |||
| 573 | /* | ||
| 574 | * 77 0x4d 'M' | ||
| 575 | */ | ||
| 576 | 0x63, /* 11000110 */ | ||
| 577 | 0x77, /* 11101110 */ | ||
| 578 | 0x7f, /* 11111110 */ | ||
| 579 | 0x7f, /* 11111110 */ | ||
| 580 | 0x6b, /* 11010110 */ | ||
| 581 | 0x63, /* 11000110 */ | ||
| 582 | 0x63, /* 11000110 */ | ||
| 583 | 0x00, /* 00000000 */ | ||
| 584 | |||
| 585 | /* | ||
| 586 | * 78 0x4e 'N' | ||
| 587 | */ | ||
| 588 | 0x63, /* 11000110 */ | ||
| 589 | 0x67, /* 11100110 */ | ||
| 590 | 0x6f, /* 11110110 */ | ||
| 591 | 0x7b, /* 11011110 */ | ||
| 592 | 0x73, /* 11001110 */ | ||
| 593 | 0x63, /* 11000110 */ | ||
| 594 | 0x63, /* 11000110 */ | ||
| 595 | 0x00, /* 00000000 */ | ||
| 596 | |||
| 597 | /* | ||
| 598 | * 79 0x4f 'O' | ||
| 599 | */ | ||
| 600 | 0x1c, /* 00111000 */ | ||
| 601 | 0x36, /* 01101100 */ | ||
| 602 | 0x63, /* 11000110 */ | ||
| 603 | 0x63, /* 11000110 */ | ||
| 604 | 0x63, /* 11000110 */ | ||
| 605 | 0x36, /* 01101100 */ | ||
| 606 | 0x1c, /* 00111000 */ | ||
| 607 | 0x00, /* 00000000 */ | ||
| 608 | |||
| 609 | /* | ||
| 610 | * 80 0x50 'P' | ||
| 611 | */ | ||
| 612 | 0x3f, /* 11111100 */ | ||
| 613 | 0x66, /* 01100110 */ | ||
| 614 | 0x66, /* 01100110 */ | ||
| 615 | 0x3e, /* 01111100 */ | ||
| 616 | 0x06, /* 01100000 */ | ||
| 617 | 0x06, /* 01100000 */ | ||
| 618 | 0x0f, /* 11110000 */ | ||
| 619 | 0x00, /* 00000000 */ | ||
| 620 | |||
| 621 | /* | ||
| 622 | * 81 0x51 'Q' | ||
| 623 | */ | ||
| 624 | 0x1e, /* 01111000 */ | ||
| 625 | 0x33, /* 11001100 */ | ||
| 626 | 0x33, /* 11001100 */ | ||
| 627 | 0x33, /* 11001100 */ | ||
| 628 | 0x3b, /* 11011100 */ | ||
| 629 | 0x1e, /* 01111000 */ | ||
| 630 | 0x38, /* 00011100 */ | ||
| 631 | 0x00, /* 00000000 */ | ||
| 632 | |||
| 633 | /* | ||
| 634 | * 82 0x52 'R' | ||
| 635 | */ | ||
| 636 | 0x3f, /* 11111100 */ | ||
| 637 | 0x66, /* 01100110 */ | ||
| 638 | 0x66, /* 01100110 */ | ||
| 639 | 0x3e, /* 01111100 */ | ||
| 640 | 0x36, /* 01101100 */ | ||
| 641 | 0x66, /* 01100110 */ | ||
| 642 | 0x67, /* 11100110 */ | ||
| 643 | 0x00, /* 00000000 */ | ||
| 644 | |||
| 645 | /* | ||
| 646 | * 83 0x53 'S' | ||
| 647 | */ | ||
| 648 | 0x1e, /* 01111000 */ | ||
| 649 | 0x33, /* 11001100 */ | ||
| 650 | 0x07, /* 11100000 */ | ||
| 651 | 0x0e, /* 01110000 */ | ||
| 652 | 0x38, /* 00011100 */ | ||
| 653 | 0x33, /* 11001100 */ | ||
| 654 | 0x1e, /* 01111000 */ | ||
| 655 | 0x00, /* 00000000 */ | ||
| 656 | |||
| 657 | /* | ||
| 658 | * 84 0x54 'T' | ||
| 659 | */ | ||
| 660 | 0x3f, /* 11111100 */ | ||
| 661 | 0x2d, /* 10110100 */ | ||
| 662 | 0x0c, /* 00110000 */ | ||
| 663 | 0x0c, /* 00110000 */ | ||
| 664 | 0x0c, /* 00110000 */ | ||
| 665 | 0x0c, /* 00110000 */ | ||
| 666 | 0x1e, /* 01111000 */ | ||
| 667 | 0x00, /* 00000000 */ | ||
| 668 | |||
| 669 | /* | ||
| 670 | * 85 0x55 'U' | ||
| 671 | */ | ||
| 672 | 0x33, /* 11001100 */ | ||
| 673 | 0x33, /* 11001100 */ | ||
| 674 | 0x33, /* 11001100 */ | ||
| 675 | 0x33, /* 11001100 */ | ||
| 676 | 0x33, /* 11001100 */ | ||
| 677 | 0x33, /* 11001100 */ | ||
| 678 | 0x3f, /* 11111100 */ | ||
| 679 | 0x00, /* 00000000 */ | ||
| 680 | |||
| 681 | /* | ||
| 682 | * 86 0x56 'V' | ||
| 683 | */ | ||
| 684 | 0x33, /* 11001100 */ | ||
| 685 | 0x33, /* 11001100 */ | ||
| 686 | 0x33, /* 11001100 */ | ||
| 687 | 0x33, /* 11001100 */ | ||
| 688 | 0x33, /* 11001100 */ | ||
| 689 | 0x1e, /* 01111000 */ | ||
| 690 | 0x0c, /* 00110000 */ | ||
| 691 | 0x00, /* 00000000 */ | ||
| 692 | |||
| 693 | /* | ||
| 694 | * 87 0x57 'W' | ||
| 695 | */ | ||
| 696 | 0x63, /* 11000110 */ | ||
| 697 | 0x63, /* 11000110 */ | ||
| 698 | 0x63, /* 11000110 */ | ||
| 699 | 0x6b, /* 11010110 */ | ||
| 700 | 0x7f, /* 11111110 */ | ||
| 701 | 0x77, /* 11101110 */ | ||
| 702 | 0x63, /* 11000110 */ | ||
| 703 | 0x00, /* 00000000 */ | ||
| 704 | |||
| 705 | /* | ||
| 706 | * 88 0x58 'X' | ||
| 707 | */ | ||
| 708 | 0x63, /* 11000110 */ | ||
| 709 | 0x63, /* 11000110 */ | ||
| 710 | 0x36, /* 01101100 */ | ||
| 711 | 0x1c, /* 00111000 */ | ||
| 712 | 0x1c, /* 00111000 */ | ||
| 713 | 0x36, /* 01101100 */ | ||
| 714 | 0x63, /* 11000110 */ | ||
| 715 | 0x00, /* 00000000 */ | ||
| 716 | |||
| 717 | /* | ||
| 718 | * 89 0x59 'Y' | ||
| 719 | */ | ||
| 720 | 0x33, /* 11001100 */ | ||
| 721 | 0x33, /* 11001100 */ | ||
| 722 | 0x33, /* 11001100 */ | ||
| 723 | 0x1e, /* 01111000 */ | ||
| 724 | 0x0c, /* 00110000 */ | ||
| 725 | 0x0c, /* 00110000 */ | ||
| 726 | 0x1e, /* 01111000 */ | ||
| 727 | 0x00, /* 00000000 */ | ||
| 728 | |||
| 729 | /* | ||
| 730 | * 90 0x5a 'Z' | ||
| 731 | */ | ||
| 732 | 0x7f, /* 11111110 */ | ||
| 733 | 0x63, /* 11000110 */ | ||
| 734 | 0x31, /* 10001100 */ | ||
| 735 | 0x18, /* 00011000 */ | ||
| 736 | 0x4c, /* 00110010 */ | ||
| 737 | 0x66, /* 01100110 */ | ||
| 738 | 0x7f, /* 11111110 */ | ||
| 739 | 0x00, /* 00000000 */ | ||
| 740 | |||
| 741 | /* | ||
| 742 | * 91 0x5b '[' | ||
| 743 | */ | ||
| 744 | 0x1e, /* 01111000 */ | ||
| 745 | 0x06, /* 01100000 */ | ||
| 746 | 0x06, /* 01100000 */ | ||
| 747 | 0x06, /* 01100000 */ | ||
| 748 | 0x06, /* 01100000 */ | ||
| 749 | 0x06, /* 01100000 */ | ||
| 750 | 0x1e, /* 01111000 */ | ||
| 751 | 0x00, /* 00000000 */ | ||
| 752 | |||
| 753 | /* | ||
| 754 | * 92 0x5c '\' | ||
| 755 | */ | ||
| 756 | 0x03, /* 11000000 */ | ||
| 757 | 0x06, /* 01100000 */ | ||
| 758 | 0x0c, /* 00110000 */ | ||
| 759 | 0x18, /* 00011000 */ | ||
| 760 | 0x30, /* 00001100 */ | ||
| 761 | 0x60, /* 00000110 */ | ||
| 762 | 0x40, /* 00000010 */ | ||
| 763 | 0x00, /* 00000000 */ | ||
| 764 | |||
| 765 | /* | ||
| 766 | * 93 0x5d ']' | ||
| 767 | */ | ||
| 768 | 0x1e, /* 01111000 */ | ||
| 769 | 0x18, /* 00011000 */ | ||
| 770 | 0x18, /* 00011000 */ | ||
| 771 | 0x18, /* 00011000 */ | ||
| 772 | 0x18, /* 00011000 */ | ||
| 773 | 0x18, /* 00011000 */ | ||
| 774 | 0x1e, /* 01111000 */ | ||
| 775 | 0x00, /* 00000000 */ | ||
| 776 | |||
| 777 | /* | ||
| 778 | * 94 0x5e '^' | ||
| 779 | */ | ||
| 780 | 0x08, /* 00010000 */ | ||
| 781 | 0x1c, /* 00111000 */ | ||
| 782 | 0x36, /* 01101100 */ | ||
| 783 | 0x63, /* 11000110 */ | ||
| 784 | 0x00, /* 00000000 */ | ||
| 785 | 0x00, /* 00000000 */ | ||
| 786 | 0x00, /* 00000000 */ | ||
| 787 | 0x00, /* 00000000 */ | ||
| 788 | |||
| 789 | /* | ||
| 790 | * 95 0x5f '_' | ||
| 791 | */ | ||
| 792 | 0x00, /* 00000000 */ | ||
| 793 | 0x00, /* 00000000 */ | ||
| 794 | 0x00, /* 00000000 */ | ||
| 795 | 0x00, /* 00000000 */ | ||
| 796 | 0x00, /* 00000000 */ | ||
| 797 | 0x00, /* 00000000 */ | ||
| 798 | 0x00, /* 00000000 */ | ||
| 799 | 0xff, /* 11111111 */ | ||
| 800 | |||
| 801 | /* | ||
| 802 | * 96 0x60 '`' | ||
| 803 | */ | ||
| 804 | 0x0c, /* 00110000 */ | ||
| 805 | 0x0c, /* 00110000 */ | ||
| 806 | 0x18, /* 00011000 */ | ||
| 807 | 0x00, /* 00000000 */ | ||
| 808 | 0x00, /* 00000000 */ | ||
| 809 | 0x00, /* 00000000 */ | ||
| 810 | 0x00, /* 00000000 */ | ||
| 811 | 0x00, /* 00000000 */ | ||
| 812 | |||
| 813 | /* | ||
| 814 | * 97 0x61 'a' | ||
| 815 | */ | ||
| 816 | 0x00, /* 00000000 */ | ||
| 817 | 0x00, /* 00000000 */ | ||
| 818 | 0x1e, /* 01111000 */ | ||
| 819 | 0x30, /* 00001100 */ | ||
| 820 | 0x3e, /* 01111100 */ | ||
| 821 | 0x33, /* 11001100 */ | ||
| 822 | 0x6e, /* 01110110 */ | ||
| 823 | 0x00, /* 00000000 */ | ||
| 824 | |||
| 825 | /* | ||
| 826 | * 98 0x62 'b' | ||
| 827 | */ | ||
| 828 | 0x07, /* 11100000 */ | ||
| 829 | 0x06, /* 01100000 */ | ||
| 830 | 0x06, /* 01100000 */ | ||
| 831 | 0x3e, /* 01111100 */ | ||
| 832 | 0x66, /* 01100110 */ | ||
| 833 | 0x66, /* 01100110 */ | ||
| 834 | 0x3b, /* 11011100 */ | ||
| 835 | 0x00, /* 00000000 */ | ||
| 836 | |||
| 837 | /* | ||
| 838 | * 99 0x63 'c' | ||
| 839 | */ | ||
| 840 | 0x00, /* 00000000 */ | ||
| 841 | 0x00, /* 00000000 */ | ||
| 842 | 0x1e, /* 01111000 */ | ||
| 843 | 0x33, /* 11001100 */ | ||
| 844 | 0x03, /* 11000000 */ | ||
| 845 | 0x33, /* 11001100 */ | ||
| 846 | 0x1e, /* 01111000 */ | ||
| 847 | 0x00, /* 00000000 */ | ||
| 848 | |||
| 849 | /* | ||
| 850 | * 100 0x64 'd' | ||
| 851 | */ | ||
| 852 | 0x38, /* 00011100 */ | ||
| 853 | 0x30, /* 00001100 */ | ||
| 854 | 0x30, /* 00001100 */ | ||
| 855 | 0x3e, /* 01111100 */ | ||
| 856 | 0x33, /* 11001100 */ | ||
| 857 | 0x33, /* 11001100 */ | ||
| 858 | 0x6e, /* 01110110 */ | ||
| 859 | 0x00, /* 00000000 */ | ||
| 860 | |||
| 861 | /* | ||
| 862 | * 101 0x65 'e' | ||
| 863 | */ | ||
| 864 | 0x00, /* 00000000 */ | ||
| 865 | 0x00, /* 00000000 */ | ||
| 866 | 0x1e, /* 01111000 */ | ||
| 867 | 0x33, /* 11001100 */ | ||
| 868 | 0x3f, /* 11111100 */ | ||
| 869 | 0x03, /* 11000000 */ | ||
| 870 | 0x1e, /* 01111000 */ | ||
| 871 | 0x00, /* 00000000 */ | ||
| 872 | |||
| 873 | /* | ||
| 874 | * 102 0x66 'f' | ||
| 875 | */ | ||
| 876 | 0x1c, /* 00111000 */ | ||
| 877 | 0x36, /* 01101100 */ | ||
| 878 | 0x06, /* 01100000 */ | ||
| 879 | 0x0f, /* 11110000 */ | ||
| 880 | 0x06, /* 01100000 */ | ||
| 881 | 0x06, /* 01100000 */ | ||
| 882 | 0x0f, /* 11110000 */ | ||
| 883 | 0x00, /* 00000000 */ | ||
| 884 | |||
| 885 | /* | ||
| 886 | * 103 0x67 'g' | ||
| 887 | */ | ||
| 888 | 0x00, /* 00000000 */ | ||
| 889 | 0x00, /* 00000000 */ | ||
| 890 | 0x6e, /* 01110110 */ | ||
| 891 | 0x33, /* 11001100 */ | ||
| 892 | 0x33, /* 11001100 */ | ||
| 893 | 0x3e, /* 01111100 */ | ||
| 894 | 0x30, /* 00001100 */ | ||
| 895 | 0x1f, /* 11111000 */ | ||
| 896 | |||
| 897 | /* | ||
| 898 | * 104 0x68 'h' | ||
| 899 | */ | ||
| 900 | 0x07, /* 11100000 */ | ||
| 901 | 0x06, /* 01100000 */ | ||
| 902 | 0x36, /* 01101100 */ | ||
| 903 | 0x6e, /* 01110110 */ | ||
| 904 | 0x66, /* 01100110 */ | ||
| 905 | 0x66, /* 01100110 */ | ||
| 906 | 0x67, /* 11100110 */ | ||
| 907 | 0x00, /* 00000000 */ | ||
| 908 | |||
| 909 | /* | ||
| 910 | * 105 0x69 'i' | ||
| 911 | */ | ||
| 912 | 0x0c, /* 00110000 */ | ||
| 913 | 0x00, /* 00000000 */ | ||
| 914 | 0x0e, /* 01110000 */ | ||
| 915 | 0x0c, /* 00110000 */ | ||
| 916 | 0x0c, /* 00110000 */ | ||
| 917 | 0x0c, /* 00110000 */ | ||
| 918 | 0x1e, /* 01111000 */ | ||
| 919 | 0x00, /* 00000000 */ | ||
| 920 | |||
| 921 | /* | ||
| 922 | * 106 0x6a 'j' | ||
| 923 | */ | ||
| 924 | 0x30, /* 00001100 */ | ||
| 925 | 0x00, /* 00000000 */ | ||
| 926 | 0x30, /* 00001100 */ | ||
| 927 | 0x30, /* 00001100 */ | ||
| 928 | 0x30, /* 00001100 */ | ||
| 929 | 0x33, /* 11001100 */ | ||
| 930 | 0x33, /* 11001100 */ | ||
| 931 | 0x1e, /* 01111000 */ | ||
| 932 | |||
| 933 | /* | ||
| 934 | * 107 0x6b 'k' | ||
| 935 | */ | ||
| 936 | 0x07, /* 11100000 */ | ||
| 937 | 0x06, /* 01100000 */ | ||
| 938 | 0x66, /* 01100110 */ | ||
| 939 | 0x36, /* 01101100 */ | ||
| 940 | 0x1e, /* 01111000 */ | ||
| 941 | 0x36, /* 01101100 */ | ||
| 942 | 0x67, /* 11100110 */ | ||
| 943 | 0x00, /* 00000000 */ | ||
| 944 | |||
| 945 | /* | ||
| 946 | * 108 0x6c 'l' | ||
| 947 | */ | ||
| 948 | 0x0e, /* 01110000 */ | ||
| 949 | 0x0c, /* 00110000 */ | ||
| 950 | 0x0c, /* 00110000 */ | ||
| 951 | 0x0c, /* 00110000 */ | ||
| 952 | 0x0c, /* 00110000 */ | ||
| 953 | 0x0c, /* 00110000 */ | ||
| 954 | 0x1e, /* 01111000 */ | ||
| 955 | 0x00, /* 00000000 */ | ||
| 956 | |||
| 957 | /* | ||
| 958 | * 109 0x6d 'm' | ||
| 959 | */ | ||
| 960 | 0x00, /* 00000000 */ | ||
| 961 | 0x00, /* 00000000 */ | ||
| 962 | 0x33, /* 11001100 */ | ||
| 963 | 0x7f, /* 11111110 */ | ||
| 964 | 0x7f, /* 11111110 */ | ||
| 965 | 0x6b, /* 11010110 */ | ||
| 966 | 0x63, /* 11000110 */ | ||
| 967 | 0x00, /* 00000000 */ | ||
| 968 | |||
| 969 | /* | ||
| 970 | * 110 0x6e 'n' | ||
| 971 | */ | ||
| 972 | 0x00, /* 00000000 */ | ||
| 973 | 0x00, /* 00000000 */ | ||
| 974 | 0x1f, /* 11111000 */ | ||
| 975 | 0x33, /* 11001100 */ | ||
| 976 | 0x33, /* 11001100 */ | ||
| 977 | 0x33, /* 11001100 */ | ||
| 978 | 0x33, /* 11001100 */ | ||
| 979 | 0x00, /* 00000000 */ | ||
| 980 | |||
| 981 | /* | ||
| 982 | * 111 0x6f 'o' | ||
| 983 | */ | ||
| 984 | 0x00, /* 00000000 */ | ||
| 985 | 0x00, /* 00000000 */ | ||
| 986 | 0x1e, /* 01111000 */ | ||
| 987 | 0x33, /* 11001100 */ | ||
| 988 | 0x33, /* 11001100 */ | ||
| 989 | 0x33, /* 11001100 */ | ||
| 990 | 0x1e, /* 01111000 */ | ||
| 991 | 0x00, /* 00000000 */ | ||
| 992 | |||
| 993 | /* | ||
| 994 | * 112 0x70 'p' | ||
| 995 | */ | ||
| 996 | 0x00, /* 00000000 */ | ||
| 997 | 0x00, /* 00000000 */ | ||
| 998 | 0x3b, /* 11011100 */ | ||
| 999 | 0x66, /* 01100110 */ | ||
| 1000 | 0x66, /* 01100110 */ | ||
| 1001 | 0x3e, /* 01111100 */ | ||
| 1002 | 0x06, /* 01100000 */ | ||
| 1003 | 0x0f, /* 11110000 */ | ||
| 1004 | |||
| 1005 | /* | ||
| 1006 | * 113 0x71 'q' | ||
| 1007 | */ | ||
| 1008 | 0x00, /* 00000000 */ | ||
| 1009 | 0x00, /* 00000000 */ | ||
| 1010 | 0x6e, /* 01110110 */ | ||
| 1011 | 0x33, /* 11001100 */ | ||
| 1012 | 0x33, /* 11001100 */ | ||
| 1013 | 0x3e, /* 01111100 */ | ||
| 1014 | 0x30, /* 00001100 */ | ||
| 1015 | 0x78, /* 00011110 */ | ||
| 1016 | |||
| 1017 | /* | ||
| 1018 | * 114 0x72 'r' | ||
| 1019 | */ | ||
| 1020 | 0x00, /* 00000000 */ | ||
| 1021 | 0x00, /* 00000000 */ | ||
| 1022 | 0x3b, /* 11011100 */ | ||
| 1023 | 0x6e, /* 01110110 */ | ||
| 1024 | 0x66, /* 01100110 */ | ||
| 1025 | 0x06, /* 01100000 */ | ||
| 1026 | 0x0f, /* 11110000 */ | ||
| 1027 | 0x00, /* 00000000 */ | ||
| 1028 | |||
| 1029 | /* | ||
| 1030 | * 115 0x73 's' | ||
| 1031 | */ | ||
| 1032 | 0x00, /* 00000000 */ | ||
| 1033 | 0x00, /* 00000000 */ | ||
| 1034 | 0x3e, /* 01111100 */ | ||
| 1035 | 0x03, /* 11000000 */ | ||
| 1036 | 0x1e, /* 01111000 */ | ||
| 1037 | 0x30, /* 00001100 */ | ||
| 1038 | 0x1f, /* 11111000 */ | ||
| 1039 | 0x00, /* 00000000 */ | ||
| 1040 | |||
| 1041 | /* | ||
| 1042 | * 116 0x74 't' | ||
| 1043 | */ | ||
| 1044 | 0x08, /* 00010000 */ | ||
| 1045 | 0x0c, /* 00110000 */ | ||
| 1046 | 0x3e, /* 01111100 */ | ||
| 1047 | 0x0c, /* 00110000 */ | ||
| 1048 | 0x0c, /* 00110000 */ | ||
| 1049 | 0x2c, /* 00110100 */ | ||
| 1050 | 0x18, /* 00011000 */ | ||
| 1051 | 0x00, /* 00000000 */ | ||
| 1052 | |||
| 1053 | /* | ||
| 1054 | * 117 0x75 'u' | ||
| 1055 | */ | ||
| 1056 | 0x00, /* 00000000 */ | ||
| 1057 | 0x00, /* 00000000 */ | ||
| 1058 | 0x33, /* 11001100 */ | ||
| 1059 | 0x33, /* 11001100 */ | ||
| 1060 | 0x33, /* 11001100 */ | ||
| 1061 | 0x33, /* 11001100 */ | ||
| 1062 | 0x6e, /* 01110110 */ | ||
| 1063 | 0x00, /* 00000000 */ | ||
| 1064 | |||
| 1065 | /* | ||
| 1066 | * 118 0x76 'v' | ||
| 1067 | */ | ||
| 1068 | 0x00, /* 00000000 */ | ||
| 1069 | 0x00, /* 00000000 */ | ||
| 1070 | 0x33, /* 11001100 */ | ||
| 1071 | 0x33, /* 11001100 */ | ||
| 1072 | 0x33, /* 11001100 */ | ||
| 1073 | 0x1e, /* 01111000 */ | ||
| 1074 | 0x0c, /* 00110000 */ | ||
| 1075 | 0x00, /* 00000000 */ | ||
| 1076 | |||
| 1077 | /* | ||
| 1078 | * 119 0x77 'w' | ||
| 1079 | */ | ||
| 1080 | 0x00, /* 00000000 */ | ||
| 1081 | 0x00, /* 00000000 */ | ||
| 1082 | 0x63, /* 11000110 */ | ||
| 1083 | 0x6b, /* 11010110 */ | ||
| 1084 | 0x7f, /* 11111110 */ | ||
| 1085 | 0x7f, /* 11111110 */ | ||
| 1086 | 0x36, /* 01101100 */ | ||
| 1087 | 0x00, /* 00000000 */ | ||
| 1088 | |||
| 1089 | /* | ||
| 1090 | * 120 0x78 'x' | ||
| 1091 | */ | ||
| 1092 | 0x00, /* 00000000 */ | ||
| 1093 | 0x00, /* 00000000 */ | ||
| 1094 | 0x63, /* 11000110 */ | ||
| 1095 | 0x36, /* 01101100 */ | ||
| 1096 | 0x1c, /* 00111000 */ | ||
| 1097 | 0x36, /* 01101100 */ | ||
| 1098 | 0x63, /* 11000110 */ | ||
| 1099 | 0x00, /* 00000000 */ | ||
| 1100 | |||
| 1101 | /* | ||
| 1102 | * 121 0x79 'y' | ||
| 1103 | */ | ||
| 1104 | 0x00, /* 00000000 */ | ||
| 1105 | 0x00, /* 00000000 */ | ||
| 1106 | 0x33, /* 11001100 */ | ||
| 1107 | 0x33, /* 11001100 */ | ||
| 1108 | 0x33, /* 11001100 */ | ||
| 1109 | 0x3e, /* 01111100 */ | ||
| 1110 | 0x30, /* 00001100 */ | ||
| 1111 | 0x1f, /* 11111000 */ | ||
| 1112 | |||
| 1113 | /* | ||
| 1114 | * 122 0x7a 'z' | ||
| 1115 | */ | ||
| 1116 | 0x00, /* 00000000 */ | ||
| 1117 | 0x00, /* 00000000 */ | ||
| 1118 | 0x3f, /* 11111100 */ | ||
| 1119 | 0x19, /* 10011000 */ | ||
| 1120 | 0x0c, /* 00110000 */ | ||
| 1121 | 0x26, /* 01100100 */ | ||
| 1122 | 0x3f, /* 11111100 */ | ||
| 1123 | 0x00, /* 00000000 */ | ||
| 1124 | |||
| 1125 | /* | ||
| 1126 | * 123 0x7b '{' | ||
| 1127 | */ | ||
| 1128 | 0x38, /* 00011100 */ | ||
| 1129 | 0x0c, /* 00110000 */ | ||
| 1130 | 0x0c, /* 00110000 */ | ||
| 1131 | 0x07, /* 11100000 */ | ||
| 1132 | 0x0c, /* 00110000 */ | ||
| 1133 | 0x0c, /* 00110000 */ | ||
| 1134 | 0x38, /* 00011100 */ | ||
| 1135 | 0x00, /* 00000000 */ | ||
| 1136 | |||
| 1137 | /* | ||
| 1138 | * 124 0x7c '|' | ||
| 1139 | */ | ||
| 1140 | 0x18, /* 00011000 */ | ||
| 1141 | 0x18, /* 00011000 */ | ||
| 1142 | 0x18, /* 00011000 */ | ||
| 1143 | 0x00, /* 00000000 */ | ||
| 1144 | 0x18, /* 00011000 */ | ||
| 1145 | 0x18, /* 00011000 */ | ||
| 1146 | 0x18, /* 00011000 */ | ||
| 1147 | 0x00, /* 00000000 */ | ||
| 1148 | |||
| 1149 | /* | ||
| 1150 | * 125 0x7d '}' | ||
| 1151 | */ | ||
| 1152 | 0x07, /* 11100000 */ | ||
| 1153 | 0x0c, /* 00110000 */ | ||
| 1154 | 0x0c, /* 00110000 */ | ||
| 1155 | 0x38, /* 00011100 */ | ||
| 1156 | 0x0c, /* 00110000 */ | ||
| 1157 | 0x0c, /* 00110000 */ | ||
| 1158 | 0x07, /* 11100000 */ | ||
| 1159 | 0x00, /* 00000000 */ | ||
| 1160 | |||
| 1161 | /* | ||
| 1162 | * 126 0x7e '~' | ||
| 1163 | */ | ||
| 1164 | 0x6e, /* 01110110 */ | ||
| 1165 | 0x3b, /* 11011100 */ | ||
| 1166 | 0x00, /* 00000000 */ | ||
| 1167 | 0x00, /* 00000000 */ | ||
| 1168 | 0x00, /* 00000000 */ | ||
| 1169 | 0x00, /* 00000000 */ | ||
| 1170 | 0x00, /* 00000000 */ | ||
| 1171 | 0x00, /* 00000000 */ | ||
| 1172 | |||
| 1173 | // there's a gap here. | ||
| 1174 | |||
| 1175 | /* | ||
| 1176 | * 161 0xa1 'á' | ||
| 1177 | */ | ||
| 1178 | 0x18, /* 00011000 */ | ||
| 1179 | 0x18, /* 00011000 */ | ||
| 1180 | 0x00, /* 00000000 */ | ||
| 1181 | 0x18, /* 00011000 */ | ||
| 1182 | 0x18, /* 00011000 */ | ||
| 1183 | 0x18, /* 00011000 */ | ||
| 1184 | 0x18, /* 00011000 */ | ||
| 1185 | 0x00, /* 00000000 */ | ||
| 1186 | |||
| 1187 | /* | ||
| 1188 | * 162 0xa2 'â' | ||
| 1189 | */ | ||
| 1190 | 0x18, /* 00011000 */ | ||
| 1191 | 0x18, /* 00011000 */ | ||
| 1192 | 0x7e, /* 01111110 */ | ||
| 1193 | 0x03, /* 11000000 */ | ||
| 1194 | 0x03, /* 11000000 */ | ||
| 1195 | 0x7e, /* 01111110 */ | ||
| 1196 | 0x18, /* 00011000 */ | ||
| 1197 | 0x18, /* 00011000 */ | ||
| 1198 | |||
| 1199 | /* | ||
| 1200 | * 163 0xa3 'ã' | ||
| 1201 | */ | ||
| 1202 | 0x1c, /* 00111000 */ | ||
| 1203 | 0x36, /* 01101100 */ | ||
| 1204 | 0x26, /* 01100100 */ | ||
| 1205 | 0x0f, /* 11110000 */ | ||
| 1206 | 0x06, /* 01100000 */ | ||
| 1207 | 0x67, /* 11100110 */ | ||
| 1208 | 0x3f, /* 11111100 */ | ||
| 1209 | 0x00, /* 00000000 */ | ||
| 1210 | |||
| 1211 | /* | ||
| 1212 | * 164 0xa4 'ä' | ||
| 1213 | */ | ||
| 1214 | 0x00, /* 00000000 */ | ||
| 1215 | 0x00, /* 00000000 */ | ||
| 1216 | 0x63, /* 11000110 */ | ||
| 1217 | 0x3e, /* 01111100 */ | ||
| 1218 | 0x36, /* 01101100 */ | ||
| 1219 | 0x3e, /* 01111100 */ | ||
| 1220 | 0x63, /* 11000110 */ | ||
| 1221 | 0x00, /* 00000000 */ | ||
| 1222 | |||
| 1223 | /* | ||
| 1224 | * 165 0xa5 'ÃÂ¥' | ||
| 1225 | */ | ||
| 1226 | 0x33, /* 11001100 */ | ||
| 1227 | 0x33, /* 11001100 */ | ||
| 1228 | 0x1e, /* 01111000 */ | ||
| 1229 | 0x3f, /* 11111100 */ | ||
| 1230 | 0x0c, /* 00110000 */ | ||
| 1231 | 0x3f, /* 11111100 */ | ||
| 1232 | 0x0c, /* 00110000 */ | ||
| 1233 | 0x0c, /* 00110000 */ | ||
| 1234 | |||
| 1235 | /* | ||
| 1236 | * 166 0xa6 'æ' | ||
| 1237 | */ | ||
| 1238 | 0x18, /* 00011000 */ | ||
| 1239 | 0x18, /* 00011000 */ | ||
| 1240 | 0x18, /* 00011000 */ | ||
| 1241 | 0x00, /* 00000000 */ | ||
| 1242 | 0x18, /* 00011000 */ | ||
| 1243 | 0x18, /* 00011000 */ | ||
| 1244 | 0x18, /* 00011000 */ | ||
| 1245 | 0x00, /* 00000000 */ | ||
| 1246 | |||
| 1247 | /* | ||
| 1248 | * 167 0xa7 'ç' | ||
| 1249 | */ | ||
| 1250 | 0x7c, /* 00111110 */ | ||
| 1251 | 0xc6, /* 01100011 */ | ||
| 1252 | 0x1c, /* 00111000 */ | ||
| 1253 | 0x36, /* 01101100 */ | ||
| 1254 | 0x36, /* 01101100 */ | ||
| 1255 | 0x1c, /* 00111000 */ | ||
| 1256 | 0x33, /* 11001100 */ | ||
| 1257 | 0x1e, /* 01111000 */ | ||
| 1258 | |||
| 1259 | /* | ||
| 1260 | * 168 0xa8 'è' | ||
| 1261 | */ | ||
| 1262 | 0x33, /* 11001100 */ | ||
| 1263 | 0x00, /* 00000000 */ | ||
| 1264 | 0x00, /* 00000000 */ | ||
| 1265 | 0x00, /* 00000000 */ | ||
| 1266 | 0x00, /* 00000000 */ | ||
| 1267 | 0x00, /* 00000000 */ | ||
| 1268 | 0x00, /* 00000000 */ | ||
| 1269 | 0x00, /* 00000000 */ | ||
| 1270 | |||
| 1271 | /* | ||
| 1272 | * 169 0xa9 'é' | ||
| 1273 | */ | ||
| 1274 | 0x3c, /* 00111100 */ | ||
| 1275 | 0x42, /* 01000010 */ | ||
| 1276 | 0x99, /* 10011001 */ | ||
| 1277 | 0x85, /* 10100001 */ | ||
| 1278 | 0x85, /* 10100001 */ | ||
| 1279 | 0x99, /* 10011001 */ | ||
| 1280 | 0x42, /* 01000010 */ | ||
| 1281 | 0x3c, /* 00111100 */ | ||
| 1282 | |||
| 1283 | /* | ||
| 1284 | * 170 0xaa 'ê' | ||
| 1285 | */ | ||
| 1286 | 0x3c, /* 00111100 */ | ||
| 1287 | 0x36, /* 01101100 */ | ||
| 1288 | 0x36, /* 01101100 */ | ||
| 1289 | 0x7c, /* 00111110 */ | ||
| 1290 | 0x00, /* 00000000 */ | ||
| 1291 | 0x00, /* 00000000 */ | ||
| 1292 | 0x00, /* 00000000 */ | ||
| 1293 | 0x00, /* 00000000 */ | ||
| 1294 | |||
| 1295 | /* | ||
| 1296 | * 171 0xab 'ë' | ||
| 1297 | */ | ||
| 1298 | 0x00, /* 00000000 */ | ||
| 1299 | 0xcc, /* 00110011 */ | ||
| 1300 | 0x66, /* 01100110 */ | ||
| 1301 | 0x33, /* 11001100 */ | ||
| 1302 | 0x66, /* 01100110 */ | ||
| 1303 | 0xcc, /* 00110011 */ | ||
| 1304 | 0x00, /* 00000000 */ | ||
| 1305 | 0x00, /* 00000000 */ | ||
| 1306 | |||
| 1307 | /* | ||
| 1308 | * 172 0xac 'ì' | ||
| 1309 | */ | ||
| 1310 | 0x00, /* 00000000 */ | ||
| 1311 | 0x00, /* 00000000 */ | ||
| 1312 | 0x00, /* 00000000 */ | ||
| 1313 | 0x3f, /* 11111100 */ | ||
| 1314 | 0x30, /* 00001100 */ | ||
| 1315 | 0x30, /* 00001100 */ | ||
| 1316 | 0x00, /* 00000000 */ | ||
| 1317 | 0x00, /* 00000000 */ | ||
| 1318 | |||
| 1319 | /* | ||
| 1320 | * 173 0xad 'ÃÂ' | ||
| 1321 | */ | ||
| 1322 | 0x00, /* 00000000 */ | ||
| 1323 | 0x00, /* 00000000 */ | ||
| 1324 | 0x00, /* 00000000 */ | ||
| 1325 | 0x00, /* 00000000 */ | ||
| 1326 | 0x00, /* 00000000 */ | ||
| 1327 | 0x00, /* 00000000 */ | ||
| 1328 | 0x00, /* 00000000 */ | ||
| 1329 | 0x00, /* 00000000 */ | ||
| 1330 | |||
| 1331 | /* | ||
| 1332 | * 174 0xae 'î' | ||
| 1333 | */ | ||
| 1334 | 0x3c, /* 00111100 */ | ||
| 1335 | 0x42, /* 01000010 */ | ||
| 1336 | 0x9d, /* 10111001 */ | ||
| 1337 | 0xa5, /* 10100101 */ | ||
| 1338 | 0x9d, /* 10111001 */ | ||
| 1339 | 0xa5, /* 10100101 */ | ||
| 1340 | 0x42, /* 01000010 */ | ||
| 1341 | 0x3c, /* 00111100 */ | ||
| 1342 | |||
| 1343 | /* | ||
| 1344 | * 175 0xaf 'ï' | ||
| 1345 | */ | ||
| 1346 | 0x7e, /* 01111110 */ | ||
| 1347 | 0x00, /* 00000000 */ | ||
| 1348 | 0x00, /* 00000000 */ | ||
| 1349 | 0x00, /* 00000000 */ | ||
| 1350 | 0x00, /* 00000000 */ | ||
| 1351 | 0x00, /* 00000000 */ | ||
| 1352 | 0x00, /* 00000000 */ | ||
| 1353 | 0x00, /* 00000000 */ | ||
| 1354 | |||
| 1355 | /* | ||
| 1356 | * 176 0xb0 'ð' | ||
| 1357 | */ | ||
| 1358 | 0x1c, /* 00111000 */ | ||
| 1359 | 0x36, /* 01101100 */ | ||
| 1360 | 0x36, /* 01101100 */ | ||
| 1361 | 0x1c, /* 00111000 */ | ||
| 1362 | 0x00, /* 00000000 */ | ||
| 1363 | 0x00, /* 00000000 */ | ||
| 1364 | 0x00, /* 00000000 */ | ||
| 1365 | 0x00, /* 00000000 */ | ||
| 1366 | |||
| 1367 | /* | ||
| 1368 | * 177 0xb1 'ñ' | ||
| 1369 | */ | ||
| 1370 | 0x18, /* 00011000 */ | ||
| 1371 | 0x18, /* 00011000 */ | ||
| 1372 | 0x7e, /* 01111110 */ | ||
| 1373 | 0x18, /* 00011000 */ | ||
| 1374 | 0x18, /* 00011000 */ | ||
| 1375 | 0x00, /* 00000000 */ | ||
| 1376 | 0x7e, /* 01111110 */ | ||
| 1377 | 0x00, /* 00000000 */ | ||
| 1378 | |||
| 1379 | /* | ||
| 1380 | * 178 0xb2 'ò' | ||
| 1381 | */ | ||
| 1382 | 0x1c, /* 00111000 */ | ||
| 1383 | 0x30, /* 00001100 */ | ||
| 1384 | 0x18, /* 00011000 */ | ||
| 1385 | 0x0c, /* 00110000 */ | ||
| 1386 | 0x3c, /* 00111100 */ | ||
| 1387 | 0x00, /* 00000000 */ | ||
| 1388 | 0x00, /* 00000000 */ | ||
| 1389 | 0x00, /* 00000000 */ | ||
| 1390 | |||
| 1391 | /* | ||
| 1392 | * 179 0xb3 'ó' | ||
| 1393 | */ | ||
| 1394 | 0x1c, /* 00111000 */ | ||
| 1395 | 0x30, /* 00001100 */ | ||
| 1396 | 0x18, /* 00011000 */ | ||
| 1397 | 0x30, /* 00001100 */ | ||
| 1398 | 0x1c, /* 00111000 */ | ||
| 1399 | 0x00, /* 00000000 */ | ||
| 1400 | 0x00, /* 00000000 */ | ||
| 1401 | 0x00, /* 00000000 */ | ||
| 1402 | |||
| 1403 | /* | ||
| 1404 | * 180 0xb4 'ô' | ||
| 1405 | */ | ||
| 1406 | 0x18, /* 00011000 */ | ||
| 1407 | 0x0c, /* 00110000 */ | ||
| 1408 | 0x00, /* 00000000 */ | ||
| 1409 | 0x00, /* 00000000 */ | ||
| 1410 | 0x00, /* 00000000 */ | ||
| 1411 | 0x00, /* 00000000 */ | ||
| 1412 | 0x00, /* 00000000 */ | ||
| 1413 | 0x00, /* 00000000 */ | ||
| 1414 | |||
| 1415 | /* | ||
| 1416 | * 181 0xb5 'õ' | ||
| 1417 | */ | ||
| 1418 | 0x00, /* 00000000 */ | ||
| 1419 | 0x00, /* 00000000 */ | ||
| 1420 | 0x66, /* 01100110 */ | ||
| 1421 | 0x66, /* 01100110 */ | ||
| 1422 | 0x66, /* 01100110 */ | ||
| 1423 | 0x3e, /* 01111100 */ | ||
| 1424 | 0x06, /* 01100000 */ | ||
| 1425 | 0x03, /* 11000000 */ | ||
| 1426 | |||
| 1427 | /* | ||
| 1428 | * 182 0xb6 'ö' | ||
| 1429 | */ | ||
| 1430 | 0xfe, /* 01111111 */ | ||
| 1431 | 0xdb, /* 11011011 */ | ||
| 1432 | 0xdb, /* 11011011 */ | ||
| 1433 | 0xde, /* 01111011 */ | ||
| 1434 | 0xd8, /* 00011011 */ | ||
| 1435 | 0xd8, /* 00011011 */ | ||
| 1436 | 0xd8, /* 00011011 */ | ||
| 1437 | 0x00, /* 00000000 */ | ||
| 1438 | |||
| 1439 | /* | ||
| 1440 | * 183 0xb7 '÷' | ||
| 1441 | */ | ||
| 1442 | 0x00, /* 00000000 */ | ||
| 1443 | 0x00, /* 00000000 */ | ||
| 1444 | 0x00, /* 00000000 */ | ||
| 1445 | 0x18, /* 00011000 */ | ||
| 1446 | 0x18, /* 00011000 */ | ||
| 1447 | 0x00, /* 00000000 */ | ||
| 1448 | 0x00, /* 00000000 */ | ||
| 1449 | 0x00, /* 00000000 */ | ||
| 1450 | |||
| 1451 | /* | ||
| 1452 | * 184 0xb8 'ø' | ||
| 1453 | */ | ||
| 1454 | 0x00, /* 00000000 */ | ||
| 1455 | 0x00, /* 00000000 */ | ||
| 1456 | 0x00, /* 00000000 */ | ||
| 1457 | 0x00, /* 00000000 */ | ||
| 1458 | 0x00, /* 00000000 */ | ||
| 1459 | 0x18, /* 00011000 */ | ||
| 1460 | 0x30, /* 00001100 */ | ||
| 1461 | 0x1e, /* 01111000 */ | ||
| 1462 | |||
| 1463 | /* | ||
| 1464 | * 185 0xb9 'ù' | ||
| 1465 | */ | ||
| 1466 | 0x08, /* 00010000 */ | ||
| 1467 | 0x0c, /* 00110000 */ | ||
| 1468 | 0x08, /* 00010000 */ | ||
| 1469 | 0x1c, /* 00111000 */ | ||
| 1470 | 0x00, /* 00000000 */ | ||
| 1471 | 0x00, /* 00000000 */ | ||
| 1472 | 0x00, /* 00000000 */ | ||
| 1473 | 0x00, /* 00000000 */ | ||
| 1474 | |||
| 1475 | /* | ||
| 1476 | * 186 0xba 'ú' | ||
| 1477 | */ | ||
| 1478 | 0x1c, /* 00111000 */ | ||
| 1479 | 0x36, /* 01101100 */ | ||
| 1480 | 0x36, /* 01101100 */ | ||
| 1481 | 0x1c, /* 00111000 */ | ||
| 1482 | 0x00, /* 00000000 */ | ||
| 1483 | 0x00, /* 00000000 */ | ||
| 1484 | 0x00, /* 00000000 */ | ||
| 1485 | 0x00, /* 00000000 */ | ||
| 1486 | |||
| 1487 | /* | ||
| 1488 | * 187 0xbb 'û' | ||
| 1489 | */ | ||
| 1490 | 0x00, /* 00000000 */ | ||
| 1491 | 0x33, /* 11001100 */ | ||
| 1492 | 0x66, /* 01100110 */ | ||
| 1493 | 0xcc, /* 00110011 */ | ||
| 1494 | 0x66, /* 01100110 */ | ||
| 1495 | 0x33, /* 11001100 */ | ||
| 1496 | 0x00, /* 00000000 */ | ||
| 1497 | 0x00, /* 00000000 */ | ||
| 1498 | |||
| 1499 | /* | ||
| 1500 | * 188 0xbc 'ü' | ||
| 1501 | */ | ||
| 1502 | 0xc3, /* 11000011 */ | ||
| 1503 | 0x63, /* 11000110 */ | ||
| 1504 | 0x33, /* 11001100 */ | ||
| 1505 | 0xbd, /* 10111101 */ | ||
| 1506 | 0xec, /* 00110111 */ | ||
| 1507 | 0xf6, /* 01101111 */ | ||
| 1508 | 0xf3, /* 11001111 */ | ||
| 1509 | 0x03, /* 11000000 */ | ||
| 1510 | |||
| 1511 | /* | ||
| 1512 | * 189 0xbd 'ý' | ||
| 1513 | */ | ||
| 1514 | 0xc3, /* 11000011 */ | ||
| 1515 | 0x63, /* 11000110 */ | ||
| 1516 | 0x33, /* 11001100 */ | ||
| 1517 | 0x7b, /* 11011110 */ | ||
| 1518 | 0xcc, /* 00110011 */ | ||
| 1519 | 0x66, /* 01100110 */ | ||
| 1520 | 0x33, /* 11001100 */ | ||
| 1521 | 0xf0, /* 00001111 */ | ||
| 1522 | |||
| 1523 | /* | ||
| 1524 | * 190 0xbe 'þ' | ||
| 1525 | */ | ||
| 1526 | 0x03, /* 11000000 */ | ||
| 1527 | 0xc4, /* 00100011 */ | ||
| 1528 | 0x63, /* 11000110 */ | ||
| 1529 | 0xb4, /* 00101101 */ | ||
| 1530 | 0xdb, /* 11011011 */ | ||
| 1531 | 0xac, /* 00110101 */ | ||
| 1532 | 0xe6, /* 01100111 */ | ||
| 1533 | 0x80, /* 00000001 */ | ||
| 1534 | |||
| 1535 | /* | ||
| 1536 | * 191 0xbf 'ÿ' | ||
| 1537 | */ | ||
| 1538 | 0x0c, /* 00110000 */ | ||
| 1539 | 0x00, /* 00000000 */ | ||
| 1540 | 0x0c, /* 00110000 */ | ||
| 1541 | 0x06, /* 01100000 */ | ||
| 1542 | 0x03, /* 11000000 */ | ||
| 1543 | 0x33, /* 11001100 */ | ||
| 1544 | 0x1e, /* 01111000 */ | ||
| 1545 | 0x00, /* 00000000 */ | ||
| 1546 | |||
| 1547 | /* | ||
| 1548 | * 192 0xc0 'ÃÂ' | ||
| 1549 | */ | ||
| 1550 | 0x07, /* 11100000 */ | ||
| 1551 | 0x00, /* 00000000 */ | ||
| 1552 | 0x1c, /* 00111000 */ | ||
| 1553 | 0x36, /* 01101100 */ | ||
| 1554 | 0x63, /* 11000110 */ | ||
| 1555 | 0x7f, /* 11111110 */ | ||
| 1556 | 0x63, /* 11000110 */ | ||
| 1557 | 0x00, /* 00000000 */ | ||
| 1558 | |||
| 1559 | /* | ||
| 1560 | * 193 0xc1 'ÃÂ' | ||
| 1561 | */ | ||
| 1562 | 0x70, /* 00001110 */ | ||
| 1563 | 0x00, /* 00000000 */ | ||
| 1564 | 0x1c, /* 00111000 */ | ||
| 1565 | 0x36, /* 01101100 */ | ||
| 1566 | 0x63, /* 11000110 */ | ||
| 1567 | 0x7f, /* 11111110 */ | ||
| 1568 | 0x63, /* 11000110 */ | ||
| 1569 | 0x00, /* 00000000 */ | ||
| 1570 | |||
| 1571 | /* | ||
| 1572 | * 194 0xc2 'ÃÂ' | ||
| 1573 | */ | ||
| 1574 | 0x1c, /* 00111000 */ | ||
| 1575 | 0x36, /* 01101100 */ | ||
| 1576 | 0x00, /* 00000000 */ | ||
| 1577 | 0x3e, /* 01111100 */ | ||
| 1578 | 0x63, /* 11000110 */ | ||
| 1579 | 0x7f, /* 11111110 */ | ||
| 1580 | 0x63, /* 11000110 */ | ||
| 1581 | 0x00, /* 00000000 */ | ||
| 1582 | |||
| 1583 | /* | ||
| 1584 | * 195 0xc3 'ÃÂ' | ||
| 1585 | */ | ||
| 1586 | 0x6e, /* 01110110 */ | ||
| 1587 | 0x3b, /* 11011100 */ | ||
| 1588 | 0x00, /* 00000000 */ | ||
| 1589 | 0x3e, /* 01111100 */ | ||
| 1590 | 0x63, /* 11000110 */ | ||
| 1591 | 0x7f, /* 11111110 */ | ||
| 1592 | 0x63, /* 11000110 */ | ||
| 1593 | 0x00, /* 00000000 */ | ||
| 1594 | |||
| 1595 | /* | ||
| 1596 | * 196 0xc4 'ÃÂ' | ||
| 1597 | */ | ||
| 1598 | 0x63, /* 11000110 */ | ||
| 1599 | 0x1c, /* 00111000 */ | ||
| 1600 | 0x36, /* 01101100 */ | ||
| 1601 | 0x63, /* 11000110 */ | ||
| 1602 | 0x7f, /* 11111110 */ | ||
| 1603 | 0x63, /* 11000110 */ | ||
| 1604 | 0x63, /* 11000110 */ | ||
| 1605 | 0x00, /* 00000000 */ | ||
| 1606 | |||
| 1607 | /* | ||
| 1608 | * 197 0xc5 'ÃÂ ' | ||
| 1609 | */ | ||
| 1610 | 0x0c, /* 00110000 */ | ||
| 1611 | 0x0c, /* 00110000 */ | ||
| 1612 | 0x00, /* 00000000 */ | ||
| 1613 | 0x1e, /* 01111000 */ | ||
| 1614 | 0x33, /* 11001100 */ | ||
| 1615 | 0x3f, /* 11111100 */ | ||
| 1616 | 0x33, /* 11001100 */ | ||
| 1617 | 0x00, /* 00000000 */ | ||
| 1618 | |||
| 1619 | /* | ||
| 1620 | * 198 0xc6 'ÃÂ' | ||
| 1621 | */ | ||
| 1622 | 0x7c, /* 00111110 */ | ||
| 1623 | 0x36, /* 01101100 */ | ||
| 1624 | 0x33, /* 11001100 */ | ||
| 1625 | 0x7f, /* 11111110 */ | ||
| 1626 | 0x33, /* 11001100 */ | ||
| 1627 | 0x33, /* 11001100 */ | ||
| 1628 | 0x73, /* 11001110 */ | ||
| 1629 | 0x00, /* 00000000 */ | ||
| 1630 | |||
| 1631 | /* | ||
| 1632 | * 199 0xc7 'ÃÂ' | ||
| 1633 | */ | ||
| 1634 | 0x1e, /* 01111000 */ | ||
| 1635 | 0x33, /* 11001100 */ | ||
| 1636 | 0x03, /* 11000000 */ | ||
| 1637 | 0x33, /* 11001100 */ | ||
| 1638 | 0x1e, /* 01111000 */ | ||
| 1639 | 0x18, /* 00011000 */ | ||
| 1640 | 0x30, /* 00001100 */ | ||
| 1641 | 0x1e, /* 01111000 */ | ||
| 1642 | |||
| 1643 | /* | ||
| 1644 | * 200 0xc8 'ÃÂ' | ||
| 1645 | */ | ||
| 1646 | 0x07, /* 11100000 */ | ||
| 1647 | 0x00, /* 00000000 */ | ||
| 1648 | 0x3f, /* 11111100 */ | ||
| 1649 | 0x06, /* 01100000 */ | ||
| 1650 | 0x1e, /* 01111000 */ | ||
| 1651 | 0x06, /* 01100000 */ | ||
| 1652 | 0x3f, /* 11111100 */ | ||
| 1653 | 0x00, /* 00000000 */ | ||
| 1654 | |||
| 1655 | /* | ||
| 1656 | * 201 0xc9 'ÃÂ' | ||
| 1657 | */ | ||
| 1658 | 0x38, /* 00011100 */ | ||
| 1659 | 0x00, /* 00000000 */ | ||
| 1660 | 0x3f, /* 11111100 */ | ||
| 1661 | 0x06, /* 01100000 */ | ||
| 1662 | 0x1e, /* 01111000 */ | ||
| 1663 | 0x06, /* 01100000 */ | ||
| 1664 | 0x3f, /* 11111100 */ | ||
| 1665 | 0x00, /* 00000000 */ | ||
| 1666 | |||
| 1667 | /* | ||
| 1668 | * 202 0xca 'ÃÂ' | ||
| 1669 | */ | ||
| 1670 | 0x0c, /* 00110000 */ | ||
| 1671 | 0x12, /* 01001000 */ | ||
| 1672 | 0x3f, /* 11111100 */ | ||
| 1673 | 0x06, /* 01100000 */ | ||
| 1674 | 0x1e, /* 01111000 */ | ||
| 1675 | 0x06, /* 01100000 */ | ||
| 1676 | 0x3f, /* 11111100 */ | ||
| 1677 | 0x00, /* 00000000 */ | ||
| 1678 | |||
| 1679 | /* | ||
| 1680 | * 203 0xcb 'ÃÂ' | ||
| 1681 | */ | ||
| 1682 | 0x36, /* 01101100 */ | ||
| 1683 | 0x00, /* 00000000 */ | ||
| 1684 | 0x3f, /* 11111100 */ | ||
| 1685 | 0x06, /* 01100000 */ | ||
| 1686 | 0x1e, /* 01111000 */ | ||
| 1687 | 0x06, /* 01100000 */ | ||
| 1688 | 0x3f, /* 11111100 */ | ||
| 1689 | 0x00, /* 00000000 */ | ||
| 1690 | |||
| 1691 | /* | ||
| 1692 | * 204 0xcc 'ÃÂ' | ||
| 1693 | */ | ||
| 1694 | 0x07, /* 11100000 */ | ||
| 1695 | 0x00, /* 00000000 */ | ||
| 1696 | 0x1e, /* 01111000 */ | ||
| 1697 | 0x0c, /* 00110000 */ | ||
| 1698 | 0x0c, /* 00110000 */ | ||
| 1699 | 0x0c, /* 00110000 */ | ||
| 1700 | 0x1e, /* 01111000 */ | ||
| 1701 | 0x00, /* 00000000 */ | ||
| 1702 | |||
| 1703 | /* | ||
| 1704 | * 205 0xcd 'ÃÂ' | ||
| 1705 | */ | ||
| 1706 | 0x38, /* 00011100 */ | ||
| 1707 | 0x00, /* 00000000 */ | ||
| 1708 | 0x1e, /* 01111000 */ | ||
| 1709 | 0x0c, /* 00110000 */ | ||
| 1710 | 0x0c, /* 00110000 */ | ||
| 1711 | 0x0c, /* 00110000 */ | ||
| 1712 | 0x1e, /* 01111000 */ | ||
| 1713 | 0x00, /* 00000000 */ | ||
| 1714 | |||
| 1715 | /* | ||
| 1716 | * 206 0xce 'ÃÂ' | ||
| 1717 | */ | ||
| 1718 | 0x0c, /* 00110000 */ | ||
| 1719 | 0x12, /* 01001000 */ | ||
| 1720 | 0x00, /* 00000000 */ | ||
| 1721 | 0x1e, /* 01111000 */ | ||
| 1722 | 0x0c, /* 00110000 */ | ||
| 1723 | 0x0c, /* 00110000 */ | ||
| 1724 | 0x1e, /* 01111000 */ | ||
| 1725 | 0x00, /* 00000000 */ | ||
| 1726 | |||
| 1727 | /* | ||
| 1728 | * 207 0xcf 'ÃÂ' | ||
| 1729 | */ | ||
| 1730 | 0x33, /* 11001100 */ | ||
| 1731 | 0x00, /* 00000000 */ | ||
| 1732 | 0x1e, /* 01111000 */ | ||
| 1733 | 0x0c, /* 00110000 */ | ||
| 1734 | 0x0c, /* 00110000 */ | ||
| 1735 | 0x0c, /* 00110000 */ | ||
| 1736 | 0x1e, /* 01111000 */ | ||
| 1737 | 0x00, /* 00000000 */ | ||
| 1738 | |||
| 1739 | /* | ||
| 1740 | * 208 0xd0 'ÃÂ' | ||
| 1741 | */ | ||
| 1742 | 0x3f, /* 11111100 */ | ||
| 1743 | 0x66, /* 01100110 */ | ||
| 1744 | 0x6f, /* 11110110 */ | ||
| 1745 | 0x6f, /* 11110110 */ | ||
| 1746 | 0x66, /* 01100110 */ | ||
| 1747 | 0x66, /* 01100110 */ | ||
| 1748 | 0x3f, /* 11111100 */ | ||
| 1749 | 0x00, /* 00000000 */ | ||
| 1750 | |||
| 1751 | /* | ||
| 1752 | * 209 0xd1 'ÃÂ' | ||
| 1753 | */ | ||
| 1754 | 0x3f, /* 11111100 */ | ||
| 1755 | 0x00, /* 00000000 */ | ||
| 1756 | 0x33, /* 11001100 */ | ||
| 1757 | 0x37, /* 11101100 */ | ||
| 1758 | 0x3f, /* 11111100 */ | ||
| 1759 | 0x3b, /* 11011100 */ | ||
| 1760 | 0x33, /* 11001100 */ | ||
| 1761 | 0x00, /* 00000000 */ | ||
| 1762 | |||
| 1763 | /* | ||
| 1764 | * 210 0xd2 'ÃÂ' | ||
| 1765 | */ | ||
| 1766 | 0x0e, /* 01110000 */ | ||
| 1767 | 0x00, /* 00000000 */ | ||
| 1768 | 0x18, /* 00011000 */ | ||
| 1769 | 0x3c, /* 00111100 */ | ||
| 1770 | 0x66, /* 01100110 */ | ||
| 1771 | 0x3c, /* 00111100 */ | ||
| 1772 | 0x18, /* 00011000 */ | ||
| 1773 | 0x00, /* 00000000 */ | ||
| 1774 | |||
| 1775 | /* | ||
| 1776 | * 211 0xd3 'ÃÂ' | ||
| 1777 | */ | ||
| 1778 | 0x70, /* 00001110 */ | ||
| 1779 | 0x00, /* 00000000 */ | ||
| 1780 | 0x18, /* 00011000 */ | ||
| 1781 | 0x3c, /* 00111100 */ | ||
| 1782 | 0x66, /* 01100110 */ | ||
| 1783 | 0x3c, /* 00111100 */ | ||
| 1784 | 0x18, /* 00011000 */ | ||
| 1785 | 0x00, /* 00000000 */ | ||
| 1786 | |||
| 1787 | /* | ||
| 1788 | * 212 0xd4 'ÃÂ' | ||
| 1789 | */ | ||
| 1790 | 0x3c, /* 00111100 */ | ||
| 1791 | 0x66, /* 01100110 */ | ||
| 1792 | 0x18, /* 00011000 */ | ||
| 1793 | 0x3c, /* 00111100 */ | ||
| 1794 | 0x66, /* 01100110 */ | ||
| 1795 | 0x3c, /* 00111100 */ | ||
| 1796 | 0x18, /* 00011000 */ | ||
| 1797 | 0x00, /* 00000000 */ | ||
| 1798 | |||
| 1799 | /* | ||
| 1800 | * 213 0xd5 'ÃÂ' | ||
| 1801 | */ | ||
| 1802 | 0x6e, /* 01110110 */ | ||
| 1803 | 0x3b, /* 11011100 */ | ||
| 1804 | 0x00, /* 00000000 */ | ||
| 1805 | 0x3e, /* 01111100 */ | ||
| 1806 | 0x63, /* 11000110 */ | ||
| 1807 | 0x63, /* 11000110 */ | ||
| 1808 | 0x3e, /* 01111100 */ | ||
| 1809 | 0x00, /* 00000000 */ | ||
| 1810 | |||
| 1811 | /* | ||
| 1812 | * 214 0xd6 'ÃÂ' | ||
| 1813 | */ | ||
| 1814 | 0xc3, /* 11000011 */ | ||
| 1815 | 0x18, /* 00011000 */ | ||
| 1816 | 0x3c, /* 00111100 */ | ||
| 1817 | 0x66, /* 01100110 */ | ||
| 1818 | 0x66, /* 01100110 */ | ||
| 1819 | 0x3c, /* 00111100 */ | ||
| 1820 | 0x18, /* 00011000 */ | ||
| 1821 | 0x00, /* 00000000 */ | ||
| 1822 | |||
| 1823 | /* | ||
| 1824 | * 215 0xd7 'ÃÂ' | ||
| 1825 | */ | ||
| 1826 | 0x00, /* 00000000 */ | ||
| 1827 | 0x36, /* 01101100 */ | ||
| 1828 | 0x1c, /* 00111000 */ | ||
| 1829 | 0x08, /* 00010000 */ | ||
| 1830 | 0x1c, /* 00111000 */ | ||
| 1831 | 0x36, /* 01101100 */ | ||
| 1832 | 0x00, /* 00000000 */ | ||
| 1833 | 0x00, /* 00000000 */ | ||
| 1834 | |||
| 1835 | /* | ||
| 1836 | * 216 0xd8 'ÃÂ' | ||
| 1837 | */ | ||
| 1838 | 0x5c, /* 00111010 */ | ||
| 1839 | 0x36, /* 01101100 */ | ||
| 1840 | 0x73, /* 11001110 */ | ||
| 1841 | 0x7b, /* 11011110 */ | ||
| 1842 | 0x6f, /* 11110110 */ | ||
| 1843 | 0x36, /* 01101100 */ | ||
| 1844 | 0x1d, /* 10111000 */ | ||
| 1845 | 0x00, /* 00000000 */ | ||
| 1846 | |||
| 1847 | /* | ||
| 1848 | * 217 0xd9 'ÃÂ' | ||
| 1849 | */ | ||
| 1850 | 0x0e, /* 01110000 */ | ||
| 1851 | 0x00, /* 00000000 */ | ||
| 1852 | 0x66, /* 01100110 */ | ||
| 1853 | 0x66, /* 01100110 */ | ||
| 1854 | 0x66, /* 01100110 */ | ||
| 1855 | 0x66, /* 01100110 */ | ||
| 1856 | 0x3c, /* 00111100 */ | ||
| 1857 | 0x00, /* 00000000 */ | ||
| 1858 | |||
| 1859 | /* | ||
| 1860 | * 218 0xda 'ÃÂ' | ||
| 1861 | */ | ||
| 1862 | 0x70, /* 00001110 */ | ||
| 1863 | 0x00, /* 00000000 */ | ||
| 1864 | 0x66, /* 01100110 */ | ||
| 1865 | 0x66, /* 01100110 */ | ||
| 1866 | 0x66, /* 01100110 */ | ||
| 1867 | 0x66, /* 01100110 */ | ||
| 1868 | 0x3c, /* 00111100 */ | ||
| 1869 | 0x00, /* 00000000 */ | ||
| 1870 | |||
| 1871 | /* | ||
| 1872 | * 219 0xdb 'ÃÂ' | ||
| 1873 | */ | ||
| 1874 | 0x3c, /* 00111100 */ | ||
| 1875 | 0x66, /* 01100110 */ | ||
| 1876 | 0x00, /* 00000000 */ | ||
| 1877 | 0x66, /* 01100110 */ | ||
| 1878 | 0x66, /* 01100110 */ | ||
| 1879 | 0x66, /* 01100110 */ | ||
| 1880 | 0x3c, /* 00111100 */ | ||
| 1881 | 0x00, /* 00000000 */ | ||
| 1882 | |||
| 1883 | /* | ||
| 1884 | * 220 0xdc 'ÃÂ' | ||
| 1885 | */ | ||
| 1886 | 0x33, /* 11001100 */ | ||
| 1887 | 0x00, /* 00000000 */ | ||
| 1888 | 0x33, /* 11001100 */ | ||
| 1889 | 0x33, /* 11001100 */ | ||
| 1890 | 0x33, /* 11001100 */ | ||
| 1891 | 0x33, /* 11001100 */ | ||
| 1892 | 0x1e, /* 01111000 */ | ||
| 1893 | 0x00, /* 00000000 */ | ||
| 1894 | |||
| 1895 | /* | ||
| 1896 | * 221 0xdd 'ÃÂ' | ||
| 1897 | */ | ||
| 1898 | 0x70, /* 00001110 */ | ||
| 1899 | 0x00, /* 00000000 */ | ||
| 1900 | 0x66, /* 01100110 */ | ||
| 1901 | 0x66, /* 01100110 */ | ||
| 1902 | 0x3c, /* 00111100 */ | ||
| 1903 | 0x18, /* 00011000 */ | ||
| 1904 | 0x18, /* 00011000 */ | ||
| 1905 | 0x00, /* 00000000 */ | ||
| 1906 | |||
| 1907 | /* | ||
| 1908 | * 222 0xde 'ÃÂ' | ||
| 1909 | */ | ||
| 1910 | 0x0f, /* 11110000 */ | ||
| 1911 | 0x06, /* 01100000 */ | ||
| 1912 | 0x3e, /* 01111100 */ | ||
| 1913 | 0x66, /* 01100110 */ | ||
| 1914 | 0x66, /* 01100110 */ | ||
| 1915 | 0x3e, /* 01111100 */ | ||
| 1916 | 0x06, /* 01100000 */ | ||
| 1917 | 0x0f, /* 11110000 */ | ||
| 1918 | |||
| 1919 | /* | ||
| 1920 | * 223 0xdf 'ÃÂ' | ||
| 1921 | */ | ||
| 1922 | 0x00, /* 00000000 */ | ||
| 1923 | 0x1e, /* 01111000 */ | ||
| 1924 | 0x33, /* 11001100 */ | ||
| 1925 | 0x1f, /* 11111000 */ | ||
| 1926 | 0x33, /* 11001100 */ | ||
| 1927 | 0x1f, /* 11111000 */ | ||
| 1928 | 0x03, /* 11000000 */ | ||
| 1929 | 0x03, /* 11000000 */ | ||
| 1930 | |||
| 1931 | /* | ||
| 1932 | * 224 0xe0 'ÃÂ ' | ||
| 1933 | */ | ||
| 1934 | 0x07, /* 11100000 */ | ||
| 1935 | 0x00, /* 00000000 */ | ||
| 1936 | 0x1e, /* 01111000 */ | ||
| 1937 | 0x30, /* 00001100 */ | ||
| 1938 | 0x3e, /* 01111100 */ | ||
| 1939 | 0x33, /* 11001100 */ | ||
| 1940 | 0x7e, /* 01111110 */ | ||
| 1941 | 0x00, /* 00000000 */ | ||
| 1942 | |||
| 1943 | /* | ||
| 1944 | * 225 0xe1 'á' | ||
| 1945 | */ | ||
| 1946 | 0x38, /* 00011100 */ | ||
| 1947 | 0x00, /* 00000000 */ | ||
| 1948 | 0x1e, /* 01111000 */ | ||
| 1949 | 0x30, /* 00001100 */ | ||
| 1950 | 0x3e, /* 01111100 */ | ||
| 1951 | 0x33, /* 11001100 */ | ||
| 1952 | 0x7e, /* 01111110 */ | ||
| 1953 | 0x00, /* 00000000 */ | ||
| 1954 | |||
| 1955 | /* | ||
| 1956 | * 226 0xe2 'â' | ||
| 1957 | */ | ||
| 1958 | 0x7e, /* 01111110 */ | ||
| 1959 | 0xc3, /* 11000011 */ | ||
| 1960 | 0x3c, /* 00111100 */ | ||
| 1961 | 0x60, /* 00000110 */ | ||
| 1962 | 0x7c, /* 00111110 */ | ||
| 1963 | 0x66, /* 01100110 */ | ||
| 1964 | 0xfc, /* 00111111 */ | ||
| 1965 | 0x00, /* 00000000 */ | ||
| 1966 | |||
| 1967 | /* | ||
| 1968 | * 227 0xe3 'ã' | ||
| 1969 | */ | ||
| 1970 | 0x6e, /* 01110110 */ | ||
| 1971 | 0x3b, /* 11011100 */ | ||
| 1972 | 0x1e, /* 01111000 */ | ||
| 1973 | 0x30, /* 00001100 */ | ||
| 1974 | 0x3e, /* 01111100 */ | ||
| 1975 | 0x33, /* 11001100 */ | ||
| 1976 | 0x7e, /* 01111110 */ | ||
| 1977 | 0x00, /* 00000000 */ | ||
| 1978 | |||
| 1979 | /* | ||
| 1980 | * 228 0xe4 'ä' | ||
| 1981 | */ | ||
| 1982 | 0x33, /* 11001100 */ | ||
| 1983 | 0x00, /* 00000000 */ | ||
| 1984 | 0x1e, /* 01111000 */ | ||
| 1985 | 0x30, /* 00001100 */ | ||
| 1986 | 0x3e, /* 01111100 */ | ||
| 1987 | 0x33, /* 11001100 */ | ||
| 1988 | 0x7e, /* 01111110 */ | ||
| 1989 | 0x00, /* 00000000 */ | ||
| 1990 | |||
| 1991 | /* | ||
| 1992 | * 229 0xe5 'ÃÂ¥' | ||
| 1993 | */ | ||
| 1994 | 0x0c, /* 00110000 */ | ||
| 1995 | 0x0c, /* 00110000 */ | ||
| 1996 | 0x1e, /* 01111000 */ | ||
| 1997 | 0x30, /* 00001100 */ | ||
| 1998 | 0x3e, /* 01111100 */ | ||
| 1999 | 0x33, /* 11001100 */ | ||
| 2000 | 0x7e, /* 01111110 */ | ||
| 2001 | 0x00, /* 00000000 */ | ||
| 2002 | |||
| 2003 | /* | ||
| 2004 | * 230 0xe6 'æ' | ||
| 2005 | */ | ||
| 2006 | 0x00, /* 00000000 */ | ||
| 2007 | 0x00, /* 00000000 */ | ||
| 2008 | 0xfe, /* 01111111 */ | ||
| 2009 | 0x30, /* 00001100 */ | ||
| 2010 | 0xfe, /* 01111111 */ | ||
| 2011 | 0x33, /* 11001100 */ | ||
| 2012 | 0xfe, /* 01111111 */ | ||
| 2013 | 0x00, /* 00000000 */ | ||
| 2014 | |||
| 2015 | /* | ||
| 2016 | * 231 0xe7 'ç' | ||
| 2017 | */ | ||
| 2018 | 0x00, /* 00000000 */ | ||
| 2019 | 0x00, /* 00000000 */ | ||
| 2020 | 0x1e, /* 01111000 */ | ||
| 2021 | 0x03, /* 11000000 */ | ||
| 2022 | 0x03, /* 11000000 */ | ||
| 2023 | 0x1e, /* 01111000 */ | ||
| 2024 | 0x30, /* 00001100 */ | ||
| 2025 | 0x1c, /* 00111000 */ | ||
| 2026 | |||
| 2027 | /* | ||
| 2028 | * 232 0xe8 'è' | ||
| 2029 | */ | ||
| 2030 | 0x07, /* 11100000 */ | ||
| 2031 | 0x00, /* 00000000 */ | ||
| 2032 | 0x1e, /* 01111000 */ | ||
| 2033 | 0x33, /* 11001100 */ | ||
| 2034 | 0x3f, /* 11111100 */ | ||
| 2035 | 0x03, /* 11000000 */ | ||
| 2036 | 0x1e, /* 01111000 */ | ||
| 2037 | 0x00, /* 00000000 */ | ||
| 2038 | |||
| 2039 | /* | ||
| 2040 | * 233 0xe9 'é' | ||
| 2041 | */ | ||
| 2042 | 0x38, /* 00011100 */ | ||
| 2043 | 0x00, /* 00000000 */ | ||
| 2044 | 0x1e, /* 01111000 */ | ||
| 2045 | 0x33, /* 11001100 */ | ||
| 2046 | 0x3f, /* 11111100 */ | ||
| 2047 | 0x03, /* 11000000 */ | ||
| 2048 | 0x1e, /* 01111000 */ | ||
| 2049 | 0x00, /* 00000000 */ | ||
| 2050 | |||
| 2051 | /* | ||
| 2052 | * 234 0xea 'ê' | ||
| 2053 | */ | ||
| 2054 | 0x7e, /* 01111110 */ | ||
| 2055 | 0xc3, /* 11000011 */ | ||
| 2056 | 0x3c, /* 00111100 */ | ||
| 2057 | 0x66, /* 01100110 */ | ||
| 2058 | 0x7e, /* 01111110 */ | ||
| 2059 | 0x06, /* 01100000 */ | ||
| 2060 | 0x3c, /* 00111100 */ | ||
| 2061 | 0x00, /* 00000000 */ | ||
| 2062 | |||
| 2063 | /* | ||
| 2064 | * 235 0xeb 'ë' | ||
| 2065 | */ | ||
| 2066 | 0x33, /* 11001100 */ | ||
| 2067 | 0x00, /* 00000000 */ | ||
| 2068 | 0x1e, /* 01111000 */ | ||
| 2069 | 0x33, /* 11001100 */ | ||
| 2070 | 0x3f, /* 11111100 */ | ||
| 2071 | 0x03, /* 11000000 */ | ||
| 2072 | 0x1e, /* 01111000 */ | ||
| 2073 | 0x00, /* 00000000 */ | ||
| 2074 | |||
| 2075 | /* | ||
| 2076 | * 236 0xec 'ì' | ||
| 2077 | */ | ||
| 2078 | 0x07, /* 11100000 */ | ||
| 2079 | 0x00, /* 00000000 */ | ||
| 2080 | 0x0e, /* 01110000 */ | ||
| 2081 | 0x0c, /* 00110000 */ | ||
| 2082 | 0x0c, /* 00110000 */ | ||
| 2083 | 0x0c, /* 00110000 */ | ||
| 2084 | 0x1e, /* 01111000 */ | ||
| 2085 | 0x00, /* 00000000 */ | ||
| 2086 | |||
| 2087 | /* | ||
| 2088 | * 237 0xed 'ÃÂ' | ||
| 2089 | */ | ||
| 2090 | 0x1c, /* 00111000 */ | ||
| 2091 | 0x00, /* 00000000 */ | ||
| 2092 | 0x0e, /* 01110000 */ | ||
| 2093 | 0x0c, /* 00110000 */ | ||
| 2094 | 0x0c, /* 00110000 */ | ||
| 2095 | 0x0c, /* 00110000 */ | ||
| 2096 | 0x1e, /* 01111000 */ | ||
| 2097 | 0x00, /* 00000000 */ | ||
| 2098 | |||
| 2099 | /* | ||
| 2100 | * 238 0xee 'î' | ||
| 2101 | */ | ||
| 2102 | 0x3e, /* 01111100 */ | ||
| 2103 | 0x63, /* 11000110 */ | ||
| 2104 | 0x1c, /* 00111000 */ | ||
| 2105 | 0x18, /* 00011000 */ | ||
| 2106 | 0x18, /* 00011000 */ | ||
| 2107 | 0x18, /* 00011000 */ | ||
| 2108 | 0x3c, /* 00111100 */ | ||
| 2109 | 0x00, /* 00000000 */ | ||
| 2110 | |||
| 2111 | /* | ||
| 2112 | * 239 0xef 'ï' | ||
| 2113 | */ | ||
| 2114 | 0x33, /* 11001100 */ | ||
| 2115 | 0x00, /* 00000000 */ | ||
| 2116 | 0x0e, /* 01110000 */ | ||
| 2117 | 0x0c, /* 00110000 */ | ||
| 2118 | 0x0c, /* 00110000 */ | ||
| 2119 | 0x0c, /* 00110000 */ | ||
| 2120 | 0x1e, /* 01111000 */ | ||
| 2121 | 0x00, /* 00000000 */ | ||
| 2122 | |||
| 2123 | /* | ||
| 2124 | * 240 0xf0 'ð' | ||
| 2125 | */ | ||
| 2126 | 0x1b, /* 11011000 */ | ||
| 2127 | 0x0e, /* 01110000 */ | ||
| 2128 | 0x1b, /* 11011000 */ | ||
| 2129 | 0x30, /* 00001100 */ | ||
| 2130 | 0x3e, /* 01111100 */ | ||
| 2131 | 0x33, /* 11001100 */ | ||
| 2132 | 0x1e, /* 01111000 */ | ||
| 2133 | 0x00, /* 00000000 */ | ||
| 2134 | |||
| 2135 | /* | ||
| 2136 | * 241 0xf1 'ñ' | ||
| 2137 | */ | ||
| 2138 | 0x00, /* 00000000 */ | ||
| 2139 | 0x1f, /* 11111000 */ | ||
| 2140 | 0x00, /* 00000000 */ | ||
| 2141 | 0x1f, /* 11111000 */ | ||
| 2142 | 0x33, /* 11001100 */ | ||
| 2143 | 0x33, /* 11001100 */ | ||
| 2144 | 0x33, /* 11001100 */ | ||
| 2145 | 0x00, /* 00000000 */ | ||
| 2146 | |||
| 2147 | /* | ||
| 2148 | * 242 0xf2 'ò' | ||
| 2149 | */ | ||
| 2150 | 0x00, /* 00000000 */ | ||
| 2151 | 0x07, /* 11100000 */ | ||
| 2152 | 0x00, /* 00000000 */ | ||
| 2153 | 0x1e, /* 01111000 */ | ||
| 2154 | 0x33, /* 11001100 */ | ||
| 2155 | 0x33, /* 11001100 */ | ||
| 2156 | 0x1e, /* 01111000 */ | ||
| 2157 | 0x00, /* 00000000 */ | ||
| 2158 | |||
| 2159 | /* | ||
| 2160 | * 243 0xf3 'ó' | ||
| 2161 | */ | ||
| 2162 | 0x00, /* 00000000 */ | ||
| 2163 | 0x38, /* 00011100 */ | ||
| 2164 | 0x00, /* 00000000 */ | ||
| 2165 | 0x1e, /* 01111000 */ | ||
| 2166 | 0x33, /* 11001100 */ | ||
| 2167 | 0x33, /* 11001100 */ | ||
| 2168 | 0x1e, /* 01111000 */ | ||
| 2169 | 0x00, /* 00000000 */ | ||
| 2170 | |||
| 2171 | /* | ||
| 2172 | * 244 0xf4 'ô' | ||
| 2173 | */ | ||
| 2174 | 0x1e, /* 01111000 */ | ||
| 2175 | 0x33, /* 11001100 */ | ||
| 2176 | 0x00, /* 00000000 */ | ||
| 2177 | 0x1e, /* 01111000 */ | ||
| 2178 | 0x33, /* 11001100 */ | ||
| 2179 | 0x33, /* 11001100 */ | ||
| 2180 | 0x1e, /* 01111000 */ | ||
| 2181 | 0x00, /* 00000000 */ | ||
| 2182 | |||
| 2183 | /* | ||
| 2184 | * 245 0xf5 'õ' | ||
| 2185 | */ | ||
| 2186 | 0x6e, /* 01110110 */ | ||
| 2187 | 0x3b, /* 11011100 */ | ||
| 2188 | 0x00, /* 00000000 */ | ||
| 2189 | 0x1e, /* 01111000 */ | ||
| 2190 | 0x33, /* 11001100 */ | ||
| 2191 | 0x33, /* 11001100 */ | ||
| 2192 | 0x1e, /* 01111000 */ | ||
| 2193 | 0x00, /* 00000000 */ | ||
| 2194 | |||
| 2195 | /* | ||
| 2196 | * 246 0xf6 'ö' | ||
| 2197 | */ | ||
| 2198 | 0x00, /* 00000000 */ | ||
| 2199 | 0x33, /* 11001100 */ | ||
| 2200 | 0x00, /* 00000000 */ | ||
| 2201 | 0x1e, /* 01111000 */ | ||
| 2202 | 0x33, /* 11001100 */ | ||
| 2203 | 0x33, /* 11001100 */ | ||
| 2204 | 0x1e, /* 01111000 */ | ||
| 2205 | 0x00, /* 00000000 */ | ||
| 2206 | |||
| 2207 | /* | ||
| 2208 | * 247 0xf7 '÷' | ||
| 2209 | */ | ||
| 2210 | 0x18, /* 00011000 */ | ||
| 2211 | 0x18, /* 00011000 */ | ||
| 2212 | 0x00, /* 00000000 */ | ||
| 2213 | 0x7e, /* 01111110 */ | ||
| 2214 | 0x00, /* 00000000 */ | ||
| 2215 | 0x18, /* 00011000 */ | ||
| 2216 | 0x18, /* 00011000 */ | ||
| 2217 | 0x00, /* 00000000 */ | ||
| 2218 | |||
| 2219 | /* | ||
| 2220 | * 248 0xf8 'ø' | ||
| 2221 | */ | ||
| 2222 | 0x00, /* 00000000 */ | ||
| 2223 | 0x60, /* 00000110 */ | ||
| 2224 | 0x3c, /* 00111100 */ | ||
| 2225 | 0x76, /* 01101110 */ | ||
| 2226 | 0x7e, /* 01111110 */ | ||
| 2227 | 0x6e, /* 01110110 */ | ||
| 2228 | 0x3c, /* 00111100 */ | ||
| 2229 | 0x06, /* 01100000 */ | ||
| 2230 | |||
| 2231 | /* | ||
| 2232 | * 249 0xf9 'ù' | ||
| 2233 | */ | ||
| 2234 | 0x00, /* 00000000 */ | ||
| 2235 | 0x07, /* 11100000 */ | ||
| 2236 | 0x00, /* 00000000 */ | ||
| 2237 | 0x33, /* 11001100 */ | ||
| 2238 | 0x33, /* 11001100 */ | ||
| 2239 | 0x33, /* 11001100 */ | ||
| 2240 | 0x7e, /* 01111110 */ | ||
| 2241 | 0x00, /* 00000000 */ | ||
| 2242 | |||
| 2243 | /* | ||
| 2244 | * 250 0xfa 'ú' | ||
| 2245 | */ | ||
| 2246 | 0x00, /* 00000000 */ | ||
| 2247 | 0x38, /* 00011100 */ | ||
| 2248 | 0x00, /* 00000000 */ | ||
| 2249 | 0x33, /* 11001100 */ | ||
| 2250 | 0x33, /* 11001100 */ | ||
| 2251 | 0x33, /* 11001100 */ | ||
| 2252 | 0x7e, /* 01111110 */ | ||
| 2253 | 0x00, /* 00000000 */ | ||
| 2254 | |||
| 2255 | /* | ||
| 2256 | * 251 0xfb 'û' | ||
| 2257 | */ | ||
| 2258 | 0x1e, /* 01111000 */ | ||
| 2259 | 0x33, /* 11001100 */ | ||
| 2260 | 0x00, /* 00000000 */ | ||
| 2261 | 0x33, /* 11001100 */ | ||
| 2262 | 0x33, /* 11001100 */ | ||
| 2263 | 0x33, /* 11001100 */ | ||
| 2264 | 0x7e, /* 01111110 */ | ||
| 2265 | 0x00, /* 00000000 */ | ||
| 2266 | |||
| 2267 | /* | ||
| 2268 | * 252 0xfc 'ü' | ||
| 2269 | */ | ||
| 2270 | 0x00, /* 00000000 */ | ||
| 2271 | 0x33, /* 11001100 */ | ||
| 2272 | 0x00, /* 00000000 */ | ||
| 2273 | 0x33, /* 11001100 */ | ||
| 2274 | 0x33, /* 11001100 */ | ||
| 2275 | 0x33, /* 11001100 */ | ||
| 2276 | 0x7e, /* 01111110 */ | ||
| 2277 | 0x00, /* 00000000 */ | ||
| 2278 | |||
| 2279 | /* | ||
| 2280 | * 253 0xfd 'ý' | ||
| 2281 | */ | ||
| 2282 | 0x00, /* 00000000 */ | ||
| 2283 | 0x38, /* 00011100 */ | ||
| 2284 | 0x00, /* 00000000 */ | ||
| 2285 | 0x33, /* 11001100 */ | ||
| 2286 | 0x33, /* 11001100 */ | ||
| 2287 | 0x3e, /* 01111100 */ | ||
| 2288 | 0x30, /* 00001100 */ | ||
| 2289 | 0x1f, /* 11111000 */ | ||
| 2290 | |||
| 2291 | /* | ||
| 2292 | * 254 0xfe 'þ' | ||
| 2293 | */ | ||
| 2294 | 0x00, /* 00000000 */ | ||
| 2295 | 0x00, /* 00000000 */ | ||
| 2296 | 0x06, /* 01100000 */ | ||
| 2297 | 0x3e, /* 01111100 */ | ||
| 2298 | 0x66, /* 01100110 */ | ||
| 2299 | 0x3e, /* 01111100 */ | ||
| 2300 | 0x06, /* 01100000 */ | ||
| 2301 | 0x00, /* 00000000 */ | ||
| 2302 | |||
| 2303 | /* | ||
| 2304 | * 255 0xff 'ÿ' | ||
| 2305 | */ | ||
| 2306 | 0x00, /* 00000000 */ | ||
| 2307 | 0x33, /* 11001100 */ | ||
| 2308 | 0x00, /* 00000000 */ | ||
| 2309 | 0x33, /* 11001100 */ | ||
| 2310 | 0x33, /* 11001100 */ | ||
| 2311 | 0x3e, /* 01111100 */ | ||
| 2312 | 0x30, /* 00001100 */ | ||
| 2313 | 0x1f, /* 11111000 */ | ||
| 2314 | |||
| 2315 | /* | ||
| 2316 | * 256 0x100 - missing character | ||
| 2317 | */ | ||
| 2318 | 0x55, /* 01010101 */ | ||
| 2319 | 0xAA, /* 10101010 */ | ||
| 2320 | 0x55, /* 01010101 */ | ||
| 2321 | 0xAA, /* 10101010 */ | ||
| 2322 | 0x55, /* 01010101 */ | ||
| 2323 | 0xAA, /* 10101010 */ | ||
| 2324 | 0x55, /* 01010101 */ | ||
| 2325 | 0xAA, /* 10101010 */ | ||
| 2326 | }; | ||
| 2327 | |||
| 2328 | SDL_COMPILE_TIME_ASSERT(SDL_RenderDebugTextFontDataSize, SDL_arraysize(SDL_RenderDebugTextFontData) == SDL_DEBUG_FONT_NUM_GLYPHS * 8); | ||
| 2329 | |||
| 2330 | #endif | ||
| 2331 | |||
diff --git a/SDL-3.2.8/src/render/SDL_render_unsupported.c b/SDL-3.2.8/src/render/SDL_render_unsupported.c new file mode 100644 index 0000000..5369fb4 --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_render_unsupported.c | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
diff --git a/SDL-3.2.8/src/render/SDL_sysrender.h b/SDL-3.2.8/src/render/SDL_sysrender.h new file mode 100644 index 0000000..9d39dfd --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_sysrender.h | |||
| @@ -0,0 +1,372 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifndef SDL_sysrender_h_ | ||
| 24 | #define SDL_sysrender_h_ | ||
| 25 | |||
| 26 | #include "../video/SDL_surface_c.h" | ||
| 27 | |||
| 28 | #include "SDL_yuv_sw_c.h" | ||
| 29 | |||
| 30 | // Set up for C function definitions, even when using C++ | ||
| 31 | #ifdef __cplusplus | ||
| 32 | extern "C" { | ||
| 33 | #endif | ||
| 34 | |||
| 35 | typedef enum SDL_TextureAddressMode | ||
| 36 | { | ||
| 37 | SDL_TEXTURE_ADDRESS_AUTO, | ||
| 38 | SDL_TEXTURE_ADDRESS_CLAMP, | ||
| 39 | SDL_TEXTURE_ADDRESS_WRAP, | ||
| 40 | } SDL_TextureAddressMode; | ||
| 41 | |||
| 42 | /** | ||
| 43 | * A rectangle, with the origin at the upper left (double precision). | ||
| 44 | */ | ||
| 45 | typedef struct SDL_DRect | ||
| 46 | { | ||
| 47 | double x; | ||
| 48 | double y; | ||
| 49 | double w; | ||
| 50 | double h; | ||
| 51 | } SDL_DRect; | ||
| 52 | |||
| 53 | // The SDL 2D rendering system | ||
| 54 | |||
| 55 | typedef struct SDL_RenderDriver SDL_RenderDriver; | ||
| 56 | |||
| 57 | // Rendering view state | ||
| 58 | typedef struct SDL_RenderViewState | ||
| 59 | { | ||
| 60 | int pixel_w; | ||
| 61 | int pixel_h; | ||
| 62 | SDL_Rect viewport; | ||
| 63 | SDL_Rect pixel_viewport; | ||
| 64 | SDL_Rect clip_rect; | ||
| 65 | SDL_Rect pixel_clip_rect; | ||
| 66 | bool clipping_enabled; | ||
| 67 | SDL_FPoint scale; | ||
| 68 | |||
| 69 | // Support for logical output coordinates | ||
| 70 | SDL_RendererLogicalPresentation logical_presentation_mode; | ||
| 71 | int logical_w, logical_h; | ||
| 72 | SDL_FRect logical_src_rect; | ||
| 73 | SDL_FRect logical_dst_rect; | ||
| 74 | SDL_FPoint logical_scale; | ||
| 75 | SDL_FPoint logical_offset; | ||
| 76 | |||
| 77 | SDL_FPoint current_scale; // this is just `scale * logical_scale`, precalculated, since we use it a lot. | ||
| 78 | } SDL_RenderViewState; | ||
| 79 | |||
| 80 | // Define the SDL texture structure | ||
| 81 | struct SDL_Texture | ||
| 82 | { | ||
| 83 | // Public API definition | ||
| 84 | SDL_PixelFormat format; /**< The format of the texture, read-only */ | ||
| 85 | int w; /**< The width of the texture, read-only. */ | ||
| 86 | int h; /**< The height of the texture, read-only. */ | ||
| 87 | |||
| 88 | int refcount; /**< Application reference count, used when freeing texture */ | ||
| 89 | |||
| 90 | // Private API definition | ||
| 91 | SDL_Colorspace colorspace; // The colorspace of the texture | ||
| 92 | float SDR_white_point; // The SDR white point for this content | ||
| 93 | float HDR_headroom; // The HDR headroom needed by this content | ||
| 94 | SDL_TextureAccess access; // The texture access mode | ||
| 95 | SDL_BlendMode blendMode; // The texture blend mode | ||
| 96 | SDL_ScaleMode scaleMode; // The texture scale mode | ||
| 97 | SDL_FColor color; // Texture modulation values | ||
| 98 | SDL_RenderViewState view; // Target texture view state | ||
| 99 | |||
| 100 | SDL_Renderer *renderer; | ||
| 101 | |||
| 102 | // Support for formats not supported directly by the renderer | ||
| 103 | SDL_Texture *native; | ||
| 104 | SDL_SW_YUVTexture *yuv; | ||
| 105 | void *pixels; | ||
| 106 | int pitch; | ||
| 107 | SDL_Rect locked_rect; | ||
| 108 | SDL_Surface *locked_surface; // Locked region exposed as a SDL surface | ||
| 109 | |||
| 110 | Uint32 last_command_generation; // last command queue generation this texture was in. | ||
| 111 | |||
| 112 | SDL_PropertiesID props; | ||
| 113 | |||
| 114 | void *internal; // Driver specific texture representation | ||
| 115 | |||
| 116 | SDL_Texture *prev; | ||
| 117 | SDL_Texture *next; | ||
| 118 | }; | ||
| 119 | |||
| 120 | typedef enum | ||
| 121 | { | ||
| 122 | SDL_RENDERCMD_NO_OP, | ||
| 123 | SDL_RENDERCMD_SETVIEWPORT, | ||
| 124 | SDL_RENDERCMD_SETCLIPRECT, | ||
| 125 | SDL_RENDERCMD_SETDRAWCOLOR, | ||
| 126 | SDL_RENDERCMD_CLEAR, | ||
| 127 | SDL_RENDERCMD_DRAW_POINTS, | ||
| 128 | SDL_RENDERCMD_DRAW_LINES, | ||
| 129 | SDL_RENDERCMD_FILL_RECTS, | ||
| 130 | SDL_RENDERCMD_COPY, | ||
| 131 | SDL_RENDERCMD_COPY_EX, | ||
| 132 | SDL_RENDERCMD_GEOMETRY | ||
| 133 | } SDL_RenderCommandType; | ||
| 134 | |||
| 135 | typedef struct SDL_RenderCommand | ||
| 136 | { | ||
| 137 | SDL_RenderCommandType command; | ||
| 138 | union | ||
| 139 | { | ||
| 140 | struct | ||
| 141 | { | ||
| 142 | size_t first; | ||
| 143 | SDL_Rect rect; | ||
| 144 | } viewport; | ||
| 145 | struct | ||
| 146 | { | ||
| 147 | bool enabled; | ||
| 148 | SDL_Rect rect; | ||
| 149 | } cliprect; | ||
| 150 | struct | ||
| 151 | { | ||
| 152 | size_t first; | ||
| 153 | size_t count; | ||
| 154 | float color_scale; | ||
| 155 | SDL_FColor color; | ||
| 156 | SDL_BlendMode blend; | ||
| 157 | SDL_Texture *texture; | ||
| 158 | SDL_TextureAddressMode texture_address_mode; | ||
| 159 | } draw; | ||
| 160 | struct | ||
| 161 | { | ||
| 162 | size_t first; | ||
| 163 | float color_scale; | ||
| 164 | SDL_FColor color; | ||
| 165 | } color; | ||
| 166 | } data; | ||
| 167 | struct SDL_RenderCommand *next; | ||
| 168 | } SDL_RenderCommand; | ||
| 169 | |||
| 170 | typedef struct SDL_VertexSolid | ||
| 171 | { | ||
| 172 | SDL_FPoint position; | ||
| 173 | SDL_FColor color; | ||
| 174 | } SDL_VertexSolid; | ||
| 175 | |||
| 176 | typedef enum | ||
| 177 | { | ||
| 178 | SDL_RENDERLINEMETHOD_POINTS, | ||
| 179 | SDL_RENDERLINEMETHOD_LINES, | ||
| 180 | SDL_RENDERLINEMETHOD_GEOMETRY, | ||
| 181 | } SDL_RenderLineMethod; | ||
| 182 | |||
| 183 | // Define the SDL renderer structure | ||
| 184 | struct SDL_Renderer | ||
| 185 | { | ||
| 186 | void (*WindowEvent)(SDL_Renderer *renderer, const SDL_WindowEvent *event); | ||
| 187 | bool (*GetOutputSize)(SDL_Renderer *renderer, int *w, int *h); | ||
| 188 | bool (*SupportsBlendMode)(SDL_Renderer *renderer, SDL_BlendMode blendMode); | ||
| 189 | bool (*CreateTexture)(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props); | ||
| 190 | bool (*QueueSetViewport)(SDL_Renderer *renderer, SDL_RenderCommand *cmd); | ||
| 191 | bool (*QueueSetDrawColor)(SDL_Renderer *renderer, SDL_RenderCommand *cmd); | ||
| 192 | bool (*QueueDrawPoints)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, | ||
| 193 | int count); | ||
| 194 | bool (*QueueDrawLines)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, | ||
| 195 | int count); | ||
| 196 | bool (*QueueFillRects)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FRect *rects, | ||
| 197 | int count); | ||
| 198 | bool (*QueueCopy)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 199 | const SDL_FRect *srcrect, const SDL_FRect *dstrect); | ||
| 200 | bool (*QueueCopyEx)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 201 | const SDL_FRect *srcquad, const SDL_FRect *dstrect, | ||
| 202 | const double angle, const SDL_FPoint *center, const SDL_FlipMode flip, float scale_x, float scale_y); | ||
| 203 | bool (*QueueGeometry)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 204 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 205 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 206 | float scale_x, float scale_y); | ||
| 207 | |||
| 208 | void (*InvalidateCachedState)(SDL_Renderer *renderer); | ||
| 209 | bool (*RunCommandQueue)(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize); | ||
| 210 | bool (*UpdateTexture)(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 211 | const SDL_Rect *rect, const void *pixels, | ||
| 212 | int pitch); | ||
| 213 | #ifdef SDL_HAVE_YUV | ||
| 214 | bool (*UpdateTextureYUV)(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 215 | const SDL_Rect *rect, | ||
| 216 | const Uint8 *Yplane, int Ypitch, | ||
| 217 | const Uint8 *Uplane, int Upitch, | ||
| 218 | const Uint8 *Vplane, int Vpitch); | ||
| 219 | bool (*UpdateTextureNV)(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 220 | const SDL_Rect *rect, | ||
| 221 | const Uint8 *Yplane, int Ypitch, | ||
| 222 | const Uint8 *UVplane, int UVpitch); | ||
| 223 | #endif | ||
| 224 | bool (*LockTexture)(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 225 | const SDL_Rect *rect, void **pixels, int *pitch); | ||
| 226 | void (*UnlockTexture)(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 227 | void (*SetTextureScaleMode)(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode); | ||
| 228 | bool (*SetRenderTarget)(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 229 | SDL_Surface *(*RenderReadPixels)(SDL_Renderer *renderer, const SDL_Rect *rect); | ||
| 230 | bool (*RenderPresent)(SDL_Renderer *renderer); | ||
| 231 | void (*DestroyTexture)(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 232 | |||
| 233 | void (*DestroyRenderer)(SDL_Renderer *renderer); | ||
| 234 | |||
| 235 | bool (*SetVSync)(SDL_Renderer *renderer, int vsync); | ||
| 236 | |||
| 237 | void *(*GetMetalLayer)(SDL_Renderer *renderer); | ||
| 238 | void *(*GetMetalCommandEncoder)(SDL_Renderer *renderer); | ||
| 239 | |||
| 240 | bool (*AddVulkanRenderSemaphores)(SDL_Renderer *renderer, Uint32 wait_stage_mask, Sint64 wait_semaphore, Sint64 signal_semaphore); | ||
| 241 | |||
| 242 | // The current renderer info | ||
| 243 | const char *name; | ||
| 244 | SDL_PixelFormat *texture_formats; | ||
| 245 | int num_texture_formats; | ||
| 246 | bool software; | ||
| 247 | |||
| 248 | // The window associated with the renderer | ||
| 249 | SDL_Window *window; | ||
| 250 | bool hidden; | ||
| 251 | |||
| 252 | // Whether we should simulate vsync | ||
| 253 | bool wanted_vsync; | ||
| 254 | bool simulate_vsync; | ||
| 255 | Uint64 simulate_vsync_interval_ns; | ||
| 256 | Uint64 last_present; | ||
| 257 | |||
| 258 | SDL_RenderViewState *view; | ||
| 259 | SDL_RenderViewState main_view; | ||
| 260 | |||
| 261 | // The window pixel to point coordinate scale | ||
| 262 | SDL_FPoint dpi_scale; | ||
| 263 | |||
| 264 | // The method of drawing lines | ||
| 265 | SDL_RenderLineMethod line_method; | ||
| 266 | |||
| 267 | // The list of textures | ||
| 268 | SDL_Texture *textures; | ||
| 269 | SDL_Texture *target; | ||
| 270 | SDL_Mutex *target_mutex; | ||
| 271 | |||
| 272 | SDL_Colorspace output_colorspace; | ||
| 273 | float SDR_white_point; | ||
| 274 | float HDR_headroom; | ||
| 275 | |||
| 276 | float desired_color_scale; | ||
| 277 | float color_scale; | ||
| 278 | SDL_FColor color; /**< Color for drawing operations values */ | ||
| 279 | SDL_BlendMode blendMode; /**< The drawing blend mode */ | ||
| 280 | SDL_TextureAddressMode texture_address_mode; | ||
| 281 | |||
| 282 | SDL_RenderCommand *render_commands; | ||
| 283 | SDL_RenderCommand *render_commands_tail; | ||
| 284 | SDL_RenderCommand *render_commands_pool; | ||
| 285 | Uint32 render_command_generation; | ||
| 286 | SDL_FColor last_queued_color; | ||
| 287 | float last_queued_color_scale; | ||
| 288 | SDL_Rect last_queued_viewport; | ||
| 289 | SDL_Rect last_queued_cliprect; | ||
| 290 | bool last_queued_cliprect_enabled; | ||
| 291 | bool color_queued; | ||
| 292 | bool viewport_queued; | ||
| 293 | bool cliprect_queued; | ||
| 294 | |||
| 295 | void *vertex_data; | ||
| 296 | size_t vertex_data_used; | ||
| 297 | size_t vertex_data_allocation; | ||
| 298 | |||
| 299 | // Shaped window support | ||
| 300 | bool transparent_window; | ||
| 301 | SDL_Surface *shape_surface; | ||
| 302 | SDL_Texture *shape_texture; | ||
| 303 | |||
| 304 | SDL_PropertiesID props; | ||
| 305 | |||
| 306 | SDL_Texture *debug_char_texture_atlas; | ||
| 307 | |||
| 308 | bool destroyed; // already destroyed by SDL_DestroyWindow; just free this struct in SDL_DestroyRenderer. | ||
| 309 | |||
| 310 | void *internal; | ||
| 311 | |||
| 312 | SDL_Renderer *next; | ||
| 313 | }; | ||
| 314 | |||
| 315 | // Define the SDL render driver structure | ||
| 316 | struct SDL_RenderDriver | ||
| 317 | { | ||
| 318 | bool (*CreateRenderer)(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID props); | ||
| 319 | |||
| 320 | const char *name; | ||
| 321 | }; | ||
| 322 | |||
| 323 | // Not all of these are available in a given build. Use #ifdefs, etc. | ||
| 324 | extern SDL_RenderDriver D3D_RenderDriver; | ||
| 325 | extern SDL_RenderDriver D3D11_RenderDriver; | ||
| 326 | extern SDL_RenderDriver D3D12_RenderDriver; | ||
| 327 | extern SDL_RenderDriver GL_RenderDriver; | ||
| 328 | extern SDL_RenderDriver GLES2_RenderDriver; | ||
| 329 | extern SDL_RenderDriver METAL_RenderDriver; | ||
| 330 | extern SDL_RenderDriver VULKAN_RenderDriver; | ||
| 331 | extern SDL_RenderDriver PS2_RenderDriver; | ||
| 332 | extern SDL_RenderDriver PSP_RenderDriver; | ||
| 333 | extern SDL_RenderDriver SW_RenderDriver; | ||
| 334 | extern SDL_RenderDriver VITA_GXM_RenderDriver; | ||
| 335 | extern SDL_RenderDriver GPU_RenderDriver; | ||
| 336 | |||
| 337 | // Clean up any renderers at shutdown | ||
| 338 | extern void SDL_QuitRender(void); | ||
| 339 | |||
| 340 | // Add a supported texture format to a renderer | ||
| 341 | extern bool SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormat format); | ||
| 342 | |||
| 343 | // Setup colorspace conversion | ||
| 344 | extern void SDL_SetupRendererColorspace(SDL_Renderer *renderer, SDL_PropertiesID props); | ||
| 345 | |||
| 346 | // Colorspace conversion functions | ||
| 347 | extern bool SDL_RenderingLinearSpace(SDL_Renderer *renderer); | ||
| 348 | extern void SDL_ConvertToLinear(SDL_FColor *color); | ||
| 349 | extern void SDL_ConvertFromLinear(SDL_FColor *color); | ||
| 350 | |||
| 351 | // Blend mode functions | ||
| 352 | extern SDL_BlendFactor SDL_GetBlendModeSrcColorFactor(SDL_BlendMode blendMode); | ||
| 353 | extern SDL_BlendFactor SDL_GetBlendModeDstColorFactor(SDL_BlendMode blendMode); | ||
| 354 | extern SDL_BlendOperation SDL_GetBlendModeColorOperation(SDL_BlendMode blendMode); | ||
| 355 | extern SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor(SDL_BlendMode blendMode); | ||
| 356 | extern SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor(SDL_BlendMode blendMode); | ||
| 357 | extern SDL_BlendOperation SDL_GetBlendModeAlphaOperation(SDL_BlendMode blendMode); | ||
| 358 | |||
| 359 | /* drivers call this during their Queue*() methods to make space in a array that are used | ||
| 360 | for a vertex buffer during RunCommandQueue(). Pointers returned here are only valid until | ||
| 361 | the next call, because it might be in an array that gets realloc()'d. */ | ||
| 362 | extern void *SDL_AllocateRenderVertices(SDL_Renderer *renderer, size_t numbytes, size_t alignment, size_t *offset); | ||
| 363 | |||
| 364 | // Let the video subsystem destroy a renderer without making its pointer invalid. | ||
| 365 | extern void SDL_DestroyRendererWithoutFreeing(SDL_Renderer *renderer); | ||
| 366 | |||
| 367 | // Ends C function definitions when using C++ | ||
| 368 | #ifdef __cplusplus | ||
| 369 | } | ||
| 370 | #endif | ||
| 371 | |||
| 372 | #endif // SDL_sysrender_h_ | ||
diff --git a/SDL-3.2.8/src/render/SDL_yuv_sw.c b/SDL-3.2.8/src/render/SDL_yuv_sw.c new file mode 100644 index 0000000..abe9e16 --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_yuv_sw.c | |||
| @@ -0,0 +1,404 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | // This is the software implementation of the YUV texture support | ||
| 24 | |||
| 25 | #ifdef SDL_HAVE_YUV | ||
| 26 | |||
| 27 | #include "SDL_yuv_sw_c.h" | ||
| 28 | #include "../video/SDL_surface_c.h" | ||
| 29 | #include "../video/SDL_yuv_c.h" | ||
| 30 | |||
| 31 | SDL_SW_YUVTexture *SDL_SW_CreateYUVTexture(SDL_PixelFormat format, SDL_Colorspace colorspace, int w, int h) | ||
| 32 | { | ||
| 33 | SDL_SW_YUVTexture *swdata; | ||
| 34 | |||
| 35 | switch (format) { | ||
| 36 | case SDL_PIXELFORMAT_YV12: | ||
| 37 | case SDL_PIXELFORMAT_IYUV: | ||
| 38 | case SDL_PIXELFORMAT_YUY2: | ||
| 39 | case SDL_PIXELFORMAT_UYVY: | ||
| 40 | case SDL_PIXELFORMAT_YVYU: | ||
| 41 | case SDL_PIXELFORMAT_NV12: | ||
| 42 | case SDL_PIXELFORMAT_NV21: | ||
| 43 | break; | ||
| 44 | default: | ||
| 45 | SDL_SetError("Unsupported YUV format"); | ||
| 46 | return NULL; | ||
| 47 | } | ||
| 48 | |||
| 49 | swdata = (SDL_SW_YUVTexture *)SDL_calloc(1, sizeof(*swdata)); | ||
| 50 | if (!swdata) { | ||
| 51 | return NULL; | ||
| 52 | } | ||
| 53 | |||
| 54 | swdata->format = format; | ||
| 55 | swdata->colorspace = colorspace; | ||
| 56 | swdata->target_format = SDL_PIXELFORMAT_UNKNOWN; | ||
| 57 | swdata->w = w; | ||
| 58 | swdata->h = h; | ||
| 59 | { | ||
| 60 | size_t dst_size; | ||
| 61 | if (!SDL_CalculateYUVSize(format, w, h, &dst_size, NULL)) { | ||
| 62 | SDL_SW_DestroyYUVTexture(swdata); | ||
| 63 | return NULL; | ||
| 64 | } | ||
| 65 | swdata->pixels = (Uint8 *)SDL_aligned_alloc(SDL_GetSIMDAlignment(), dst_size); | ||
| 66 | if (!swdata->pixels) { | ||
| 67 | SDL_SW_DestroyYUVTexture(swdata); | ||
| 68 | return NULL; | ||
| 69 | } | ||
| 70 | } | ||
| 71 | |||
| 72 | // Find the pitch and offset values for the texture | ||
| 73 | switch (format) { | ||
| 74 | case SDL_PIXELFORMAT_YV12: | ||
| 75 | case SDL_PIXELFORMAT_IYUV: | ||
| 76 | swdata->pitches[0] = w; | ||
| 77 | swdata->pitches[1] = (swdata->pitches[0] + 1) / 2; | ||
| 78 | swdata->pitches[2] = (swdata->pitches[0] + 1) / 2; | ||
| 79 | swdata->planes[0] = swdata->pixels; | ||
| 80 | swdata->planes[1] = swdata->planes[0] + swdata->pitches[0] * h; | ||
| 81 | swdata->planes[2] = swdata->planes[1] + swdata->pitches[1] * ((h + 1) / 2); | ||
| 82 | break; | ||
| 83 | case SDL_PIXELFORMAT_YUY2: | ||
| 84 | case SDL_PIXELFORMAT_UYVY: | ||
| 85 | case SDL_PIXELFORMAT_YVYU: | ||
| 86 | swdata->pitches[0] = ((w + 1) / 2) * 4; | ||
| 87 | swdata->planes[0] = swdata->pixels; | ||
| 88 | break; | ||
| 89 | |||
| 90 | case SDL_PIXELFORMAT_NV12: | ||
| 91 | case SDL_PIXELFORMAT_NV21: | ||
| 92 | swdata->pitches[0] = w; | ||
| 93 | swdata->pitches[1] = 2 * ((swdata->pitches[0] + 1) / 2); | ||
| 94 | swdata->planes[0] = swdata->pixels; | ||
| 95 | swdata->planes[1] = swdata->planes[0] + swdata->pitches[0] * h; | ||
| 96 | break; | ||
| 97 | |||
| 98 | default: | ||
| 99 | SDL_assert(!"We should never get here (caught above)"); | ||
| 100 | break; | ||
| 101 | } | ||
| 102 | |||
| 103 | // We're all done.. | ||
| 104 | return swdata; | ||
| 105 | } | ||
| 106 | |||
| 107 | bool SDL_SW_QueryYUVTexturePixels(SDL_SW_YUVTexture *swdata, void **pixels, | ||
| 108 | int *pitch) | ||
| 109 | { | ||
| 110 | *pixels = swdata->planes[0]; | ||
| 111 | *pitch = swdata->pitches[0]; | ||
| 112 | return true; | ||
| 113 | } | ||
| 114 | |||
| 115 | bool SDL_SW_UpdateYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, | ||
| 116 | const void *pixels, int pitch) | ||
| 117 | { | ||
| 118 | switch (swdata->format) { | ||
| 119 | case SDL_PIXELFORMAT_YV12: | ||
| 120 | case SDL_PIXELFORMAT_IYUV: | ||
| 121 | if (rect->x == 0 && rect->y == 0 && | ||
| 122 | rect->w == swdata->w && rect->h == swdata->h) { | ||
| 123 | SDL_memcpy(swdata->pixels, pixels, | ||
| 124 | (size_t)(swdata->h * swdata->w) + 2 * ((swdata->h + 1) / 2) * ((swdata->w + 1) / 2)); | ||
| 125 | } else { | ||
| 126 | Uint8 *src, *dst; | ||
| 127 | int row; | ||
| 128 | size_t length; | ||
| 129 | |||
| 130 | // Copy the Y plane | ||
| 131 | src = (Uint8 *)pixels; | ||
| 132 | dst = swdata->pixels + rect->y * swdata->w + rect->x; | ||
| 133 | length = rect->w; | ||
| 134 | for (row = 0; row < rect->h; ++row) { | ||
| 135 | SDL_memcpy(dst, src, length); | ||
| 136 | src += pitch; | ||
| 137 | dst += swdata->w; | ||
| 138 | } | ||
| 139 | |||
| 140 | // Copy the next plane | ||
| 141 | src = (Uint8 *)pixels + rect->h * pitch; | ||
| 142 | dst = swdata->pixels + swdata->h * swdata->w; | ||
| 143 | dst += rect->y / 2 * ((swdata->w + 1) / 2) + rect->x / 2; | ||
| 144 | length = (rect->w + 1) / 2; | ||
| 145 | for (row = 0; row < (rect->h + 1) / 2; ++row) { | ||
| 146 | SDL_memcpy(dst, src, length); | ||
| 147 | src += (pitch + 1) / 2; | ||
| 148 | dst += (swdata->w + 1) / 2; | ||
| 149 | } | ||
| 150 | |||
| 151 | // Copy the next plane | ||
| 152 | src = (Uint8 *)pixels + rect->h * pitch + ((rect->h + 1) / 2) * ((pitch + 1) / 2); | ||
| 153 | dst = swdata->pixels + swdata->h * swdata->w + | ||
| 154 | ((swdata->h + 1) / 2) * ((swdata->w + 1) / 2); | ||
| 155 | dst += rect->y / 2 * ((swdata->w + 1) / 2) + rect->x / 2; | ||
| 156 | length = (rect->w + 1) / 2; | ||
| 157 | for (row = 0; row < (rect->h + 1) / 2; ++row) { | ||
| 158 | SDL_memcpy(dst, src, length); | ||
| 159 | src += (pitch + 1) / 2; | ||
| 160 | dst += (swdata->w + 1) / 2; | ||
| 161 | } | ||
| 162 | } | ||
| 163 | break; | ||
| 164 | case SDL_PIXELFORMAT_YUY2: | ||
| 165 | case SDL_PIXELFORMAT_UYVY: | ||
| 166 | case SDL_PIXELFORMAT_YVYU: | ||
| 167 | { | ||
| 168 | Uint8 *src, *dst; | ||
| 169 | int row; | ||
| 170 | size_t length; | ||
| 171 | |||
| 172 | src = (Uint8 *)pixels; | ||
| 173 | dst = | ||
| 174 | swdata->planes[0] + rect->y * swdata->pitches[0] + | ||
| 175 | rect->x * 2; | ||
| 176 | length = 4 * (((size_t)rect->w + 1) / 2); | ||
| 177 | for (row = 0; row < rect->h; ++row) { | ||
| 178 | SDL_memcpy(dst, src, length); | ||
| 179 | src += pitch; | ||
| 180 | dst += swdata->pitches[0]; | ||
| 181 | } | ||
| 182 | } break; | ||
| 183 | case SDL_PIXELFORMAT_NV12: | ||
| 184 | case SDL_PIXELFORMAT_NV21: | ||
| 185 | { | ||
| 186 | if (rect->x == 0 && rect->y == 0 && rect->w == swdata->w && rect->h == swdata->h) { | ||
| 187 | SDL_memcpy(swdata->pixels, pixels, | ||
| 188 | (size_t)(swdata->h * swdata->w) + 2 * ((swdata->h + 1) / 2) * ((swdata->w + 1) / 2)); | ||
| 189 | } else { | ||
| 190 | |||
| 191 | Uint8 *src, *dst; | ||
| 192 | int row; | ||
| 193 | size_t length; | ||
| 194 | |||
| 195 | // Copy the Y plane | ||
| 196 | src = (Uint8 *)pixels; | ||
| 197 | dst = swdata->pixels + rect->y * swdata->w + rect->x; | ||
| 198 | length = rect->w; | ||
| 199 | for (row = 0; row < rect->h; ++row) { | ||
| 200 | SDL_memcpy(dst, src, length); | ||
| 201 | src += pitch; | ||
| 202 | dst += swdata->w; | ||
| 203 | } | ||
| 204 | |||
| 205 | // Copy the next plane | ||
| 206 | src = (Uint8 *)pixels + rect->h * pitch; | ||
| 207 | dst = swdata->pixels + swdata->h * swdata->w; | ||
| 208 | dst += 2 * ((rect->y + 1) / 2) * ((swdata->w + 1) / 2) + 2 * (rect->x / 2); | ||
| 209 | length = 2 * (((size_t)rect->w + 1) / 2); | ||
| 210 | for (row = 0; row < (rect->h + 1) / 2; ++row) { | ||
| 211 | SDL_memcpy(dst, src, length); | ||
| 212 | src += 2 * ((pitch + 1) / 2); | ||
| 213 | dst += 2 * ((swdata->w + 1) / 2); | ||
| 214 | } | ||
| 215 | } | ||
| 216 | } break; | ||
| 217 | default: | ||
| 218 | return SDL_SetError("Unsupported YUV format"); | ||
| 219 | } | ||
| 220 | return true; | ||
| 221 | } | ||
| 222 | |||
| 223 | bool SDL_SW_UpdateYUVTexturePlanar(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, | ||
| 224 | const Uint8 *Yplane, int Ypitch, | ||
| 225 | const Uint8 *Uplane, int Upitch, | ||
| 226 | const Uint8 *Vplane, int Vpitch) | ||
| 227 | { | ||
| 228 | const Uint8 *src; | ||
| 229 | Uint8 *dst; | ||
| 230 | int row; | ||
| 231 | size_t length; | ||
| 232 | |||
| 233 | // Copy the Y plane | ||
| 234 | src = Yplane; | ||
| 235 | dst = swdata->pixels + rect->y * swdata->w + rect->x; | ||
| 236 | length = rect->w; | ||
| 237 | for (row = 0; row < rect->h; ++row) { | ||
| 238 | SDL_memcpy(dst, src, length); | ||
| 239 | src += Ypitch; | ||
| 240 | dst += swdata->w; | ||
| 241 | } | ||
| 242 | |||
| 243 | // Copy the U plane | ||
| 244 | src = Uplane; | ||
| 245 | if (swdata->format == SDL_PIXELFORMAT_IYUV) { | ||
| 246 | dst = swdata->pixels + swdata->h * swdata->w; | ||
| 247 | } else { | ||
| 248 | dst = swdata->pixels + swdata->h * swdata->w + | ||
| 249 | ((swdata->h + 1) / 2) * ((swdata->w + 1) / 2); | ||
| 250 | } | ||
| 251 | dst += rect->y / 2 * ((swdata->w + 1) / 2) + rect->x / 2; | ||
| 252 | length = (rect->w + 1) / 2; | ||
| 253 | for (row = 0; row < (rect->h + 1) / 2; ++row) { | ||
| 254 | SDL_memcpy(dst, src, length); | ||
| 255 | src += Upitch; | ||
| 256 | dst += (swdata->w + 1) / 2; | ||
| 257 | } | ||
| 258 | |||
| 259 | // Copy the V plane | ||
| 260 | src = Vplane; | ||
| 261 | if (swdata->format == SDL_PIXELFORMAT_YV12) { | ||
| 262 | dst = swdata->pixels + swdata->h * swdata->w; | ||
| 263 | } else { | ||
| 264 | dst = swdata->pixels + swdata->h * swdata->w + | ||
| 265 | ((swdata->h + 1) / 2) * ((swdata->w + 1) / 2); | ||
| 266 | } | ||
| 267 | dst += rect->y / 2 * ((swdata->w + 1) / 2) + rect->x / 2; | ||
| 268 | length = (rect->w + 1) / 2; | ||
| 269 | for (row = 0; row < (rect->h + 1) / 2; ++row) { | ||
| 270 | SDL_memcpy(dst, src, length); | ||
| 271 | src += Vpitch; | ||
| 272 | dst += (swdata->w + 1) / 2; | ||
| 273 | } | ||
| 274 | return true; | ||
| 275 | } | ||
| 276 | |||
| 277 | bool SDL_SW_UpdateNVTexturePlanar(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, | ||
| 278 | const Uint8 *Yplane, int Ypitch, | ||
| 279 | const Uint8 *UVplane, int UVpitch) | ||
| 280 | { | ||
| 281 | const Uint8 *src; | ||
| 282 | Uint8 *dst; | ||
| 283 | int row; | ||
| 284 | size_t length; | ||
| 285 | |||
| 286 | // Copy the Y plane | ||
| 287 | src = Yplane; | ||
| 288 | dst = swdata->pixels + rect->y * swdata->w + rect->x; | ||
| 289 | length = rect->w; | ||
| 290 | for (row = 0; row < rect->h; ++row) { | ||
| 291 | SDL_memcpy(dst, src, length); | ||
| 292 | src += Ypitch; | ||
| 293 | dst += swdata->w; | ||
| 294 | } | ||
| 295 | |||
| 296 | // Copy the UV or VU plane | ||
| 297 | src = UVplane; | ||
| 298 | dst = swdata->pixels + swdata->h * swdata->w; | ||
| 299 | dst += rect->y * ((swdata->w + 1) / 2) + rect->x; | ||
| 300 | length = (rect->w + 1) / 2; | ||
| 301 | length *= 2; | ||
| 302 | for (row = 0; row < (rect->h + 1) / 2; ++row) { | ||
| 303 | SDL_memcpy(dst, src, length); | ||
| 304 | src += UVpitch; | ||
| 305 | dst += 2 * ((swdata->w + 1) / 2); | ||
| 306 | } | ||
| 307 | |||
| 308 | return true; | ||
| 309 | } | ||
| 310 | |||
| 311 | bool SDL_SW_LockYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, | ||
| 312 | void **pixels, int *pitch) | ||
| 313 | { | ||
| 314 | switch (swdata->format) { | ||
| 315 | case SDL_PIXELFORMAT_YV12: | ||
| 316 | case SDL_PIXELFORMAT_IYUV: | ||
| 317 | case SDL_PIXELFORMAT_NV12: | ||
| 318 | case SDL_PIXELFORMAT_NV21: | ||
| 319 | if (rect && (rect->x != 0 || rect->y != 0 || rect->w != swdata->w || rect->h != swdata->h)) { | ||
| 320 | return SDL_SetError("YV12, IYUV, NV12, NV21 textures only support full surface locks"); | ||
| 321 | } | ||
| 322 | break; | ||
| 323 | default: | ||
| 324 | return SDL_SetError("Unsupported YUV format"); | ||
| 325 | } | ||
| 326 | |||
| 327 | if (rect) { | ||
| 328 | *pixels = swdata->planes[0] + rect->y * swdata->pitches[0] + rect->x * 2; | ||
| 329 | } else { | ||
| 330 | *pixels = swdata->planes[0]; | ||
| 331 | } | ||
| 332 | *pitch = swdata->pitches[0]; | ||
| 333 | return true; | ||
| 334 | } | ||
| 335 | |||
| 336 | void SDL_SW_UnlockYUVTexture(SDL_SW_YUVTexture *swdata) | ||
| 337 | { | ||
| 338 | } | ||
| 339 | |||
| 340 | bool SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect, SDL_PixelFormat target_format, int w, int h, void *pixels, int pitch) | ||
| 341 | { | ||
| 342 | int stretch; | ||
| 343 | |||
| 344 | // Make sure we're set up to display in the desired format | ||
| 345 | if (target_format != swdata->target_format && swdata->display) { | ||
| 346 | SDL_DestroySurface(swdata->display); | ||
| 347 | swdata->display = NULL; | ||
| 348 | } | ||
| 349 | |||
| 350 | stretch = 0; | ||
| 351 | if (srcrect->x || srcrect->y || srcrect->w < swdata->w || srcrect->h < swdata->h) { | ||
| 352 | /* The source rectangle has been clipped. | ||
| 353 | Using a scratch surface is easier than adding clipped | ||
| 354 | source support to all the blitters, plus that would | ||
| 355 | slow them down in the general unclipped case. | ||
| 356 | */ | ||
| 357 | stretch = 1; | ||
| 358 | } else if ((srcrect->w != w) || (srcrect->h != h)) { | ||
| 359 | stretch = 1; | ||
| 360 | } | ||
| 361 | if (stretch) { | ||
| 362 | if (swdata->display) { | ||
| 363 | swdata->display->w = w; | ||
| 364 | swdata->display->h = h; | ||
| 365 | swdata->display->pixels = pixels; | ||
| 366 | swdata->display->pitch = pitch; | ||
| 367 | } else { | ||
| 368 | swdata->display = SDL_CreateSurfaceFrom(w, h, target_format, pixels, pitch); | ||
| 369 | if (!swdata->display) { | ||
| 370 | return false; | ||
| 371 | } | ||
| 372 | swdata->target_format = target_format; | ||
| 373 | } | ||
| 374 | if (!swdata->stretch) { | ||
| 375 | swdata->stretch = SDL_CreateSurface(swdata->w, swdata->h, target_format); | ||
| 376 | if (!swdata->stretch) { | ||
| 377 | return false; | ||
| 378 | } | ||
| 379 | } | ||
| 380 | pixels = swdata->stretch->pixels; | ||
| 381 | pitch = swdata->stretch->pitch; | ||
| 382 | } | ||
| 383 | if (!SDL_ConvertPixelsAndColorspace(swdata->w, swdata->h, swdata->format, swdata->colorspace, 0, swdata->planes[0], swdata->pitches[0], target_format, SDL_COLORSPACE_SRGB, 0, pixels, pitch)) { | ||
| 384 | return false; | ||
| 385 | } | ||
| 386 | if (stretch) { | ||
| 387 | SDL_Rect rect = *srcrect; | ||
| 388 | return SDL_StretchSurface(swdata->stretch, &rect, swdata->display, NULL, SDL_SCALEMODE_NEAREST); | ||
| 389 | } else { | ||
| 390 | return true; | ||
| 391 | } | ||
| 392 | } | ||
| 393 | |||
| 394 | void SDL_SW_DestroyYUVTexture(SDL_SW_YUVTexture *swdata) | ||
| 395 | { | ||
| 396 | if (swdata) { | ||
| 397 | SDL_aligned_free(swdata->pixels); | ||
| 398 | SDL_DestroySurface(swdata->stretch); | ||
| 399 | SDL_DestroySurface(swdata->display); | ||
| 400 | SDL_free(swdata); | ||
| 401 | } | ||
| 402 | } | ||
| 403 | |||
| 404 | #endif // SDL_HAVE_YUV | ||
diff --git a/SDL-3.2.8/src/render/SDL_yuv_sw_c.h b/SDL-3.2.8/src/render/SDL_yuv_sw_c.h new file mode 100644 index 0000000..807c44c --- /dev/null +++ b/SDL-3.2.8/src/render/SDL_yuv_sw_c.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_yuv_sw_c_h_ | ||
| 23 | #define SDL_yuv_sw_c_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | // This is the software implementation of the YUV texture support | ||
| 28 | |||
| 29 | struct SDL_SW_YUVTexture | ||
| 30 | { | ||
| 31 | SDL_PixelFormat format; | ||
| 32 | SDL_Colorspace colorspace; | ||
| 33 | SDL_PixelFormat target_format; | ||
| 34 | int w, h; | ||
| 35 | Uint8 *pixels; | ||
| 36 | |||
| 37 | // These are just so we don't have to allocate them separately | ||
| 38 | int pitches[3]; | ||
| 39 | Uint8 *planes[3]; | ||
| 40 | |||
| 41 | // This is a temporary surface in case we have to stretch copy | ||
| 42 | SDL_Surface *stretch; | ||
| 43 | SDL_Surface *display; | ||
| 44 | }; | ||
| 45 | |||
| 46 | typedef struct SDL_SW_YUVTexture SDL_SW_YUVTexture; | ||
| 47 | |||
| 48 | extern SDL_SW_YUVTexture *SDL_SW_CreateYUVTexture(SDL_PixelFormat format, SDL_Colorspace colorspace, int w, int h); | ||
| 49 | extern bool SDL_SW_QueryYUVTexturePixels(SDL_SW_YUVTexture *swdata, void **pixels, int *pitch); | ||
| 50 | extern bool SDL_SW_UpdateYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, const void *pixels, int pitch); | ||
| 51 | extern bool SDL_SW_UpdateYUVTexturePlanar(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, | ||
| 52 | const Uint8 *Yplane, int Ypitch, | ||
| 53 | const Uint8 *Uplane, int Upitch, | ||
| 54 | const Uint8 *Vplane, int Vpitch); | ||
| 55 | extern bool SDL_SW_UpdateNVTexturePlanar(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, | ||
| 56 | const Uint8 *Yplane, int Ypitch, | ||
| 57 | const Uint8 *UVplane, int UVpitch); | ||
| 58 | extern bool SDL_SW_LockYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, void **pixels, int *pitch); | ||
| 59 | extern void SDL_SW_UnlockYUVTexture(SDL_SW_YUVTexture *swdata); | ||
| 60 | extern bool SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect, SDL_PixelFormat target_format, int w, int h, void *pixels, int pitch); | ||
| 61 | extern void SDL_SW_DestroyYUVTexture(SDL_SW_YUVTexture *swdata); | ||
| 62 | |||
| 63 | #endif // SDL_yuv_sw_c_h_ | ||
diff --git a/SDL-3.2.8/src/render/direct3d/D3D9_PixelShader_YUV.h b/SDL-3.2.8/src/render/direct3d/D3D9_PixelShader_YUV.h new file mode 100644 index 0000000..e6d9130 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d/D3D9_PixelShader_YUV.h | |||
| @@ -0,0 +1,164 @@ | |||
| 1 | #if 0 | ||
| 2 | // | ||
| 3 | // Generated by Microsoft (R) HLSL Shader Compiler 10.1 | ||
| 4 | // | ||
| 5 | // Parameters: | ||
| 6 | // | ||
| 7 | // float4 Bcoeff; | ||
| 8 | // float4 Gcoeff; | ||
| 9 | // float4 Rcoeff; | ||
| 10 | // float4 Yoffset; | ||
| 11 | // Texture2D theSampler+theTextureU; | ||
| 12 | // Texture2D theSampler+theTextureV; | ||
| 13 | // Texture2D theSampler+theTextureY; | ||
| 14 | // | ||
| 15 | // | ||
| 16 | // Registers: | ||
| 17 | // | ||
| 18 | // Name Reg Size | ||
| 19 | // ---------------------- ----- ---- | ||
| 20 | // Yoffset c0 1 | ||
| 21 | // Rcoeff c1 1 | ||
| 22 | // Gcoeff c2 1 | ||
| 23 | // Bcoeff c3 1 | ||
| 24 | // theSampler+theTextureY s0 1 | ||
| 25 | // theSampler+theTextureU s1 1 | ||
| 26 | // theSampler+theTextureV s2 1 | ||
| 27 | // | ||
| 28 | |||
| 29 | ps_2_0 | ||
| 30 | def c4, 1, 0, 0, 0 | ||
| 31 | dcl t0.xy | ||
| 32 | dcl v0 | ||
| 33 | dcl_2d s0 | ||
| 34 | dcl_2d s1 | ||
| 35 | dcl_2d s2 | ||
| 36 | texld r0, t0, s0 | ||
| 37 | texld r1, t0, s1 | ||
| 38 | texld r2, t0, s2 | ||
| 39 | mov r0.y, r1.x | ||
| 40 | mov r0.z, r2.x | ||
| 41 | add r0.xyz, r0, c0 | ||
| 42 | dp3 r1.x, r0, c1 | ||
| 43 | dp3 r1.y, r0, c2 | ||
| 44 | dp3 r1.z, r0, c3 | ||
| 45 | mov r1.w, c4.x | ||
| 46 | mul r0, r1, v0 | ||
| 47 | mov oC0, r0 | ||
| 48 | |||
| 49 | // approximately 12 instruction slots used (3 texture, 9 arithmetic) | ||
| 50 | #endif | ||
| 51 | |||
| 52 | const BYTE g_ps20_main[] = | ||
| 53 | { | ||
| 54 | 0, 2, 255, 255, 254, 255, | ||
| 55 | 97, 0, 67, 84, 65, 66, | ||
| 56 | 28, 0, 0, 0, 87, 1, | ||
| 57 | 0, 0, 0, 2, 255, 255, | ||
| 58 | 7, 0, 0, 0, 28, 0, | ||
| 59 | 0, 0, 0, 1, 0, 0, | ||
| 60 | 80, 1, 0, 0, 168, 0, | ||
| 61 | 0, 0, 2, 0, 3, 0, | ||
| 62 | 1, 0, 0, 0, 176, 0, | ||
| 63 | 0, 0, 0, 0, 0, 0, | ||
| 64 | 192, 0, 0, 0, 2, 0, | ||
| 65 | 2, 0, 1, 0, 0, 0, | ||
| 66 | 176, 0, 0, 0, 0, 0, | ||
| 67 | 0, 0, 199, 0, 0, 0, | ||
| 68 | 2, 0, 1, 0, 1, 0, | ||
| 69 | 0, 0, 176, 0, 0, 0, | ||
| 70 | 0, 0, 0, 0, 206, 0, | ||
| 71 | 0, 0, 2, 0, 0, 0, | ||
| 72 | 1, 0, 0, 0, 176, 0, | ||
| 73 | 0, 0, 0, 0, 0, 0, | ||
| 74 | 214, 0, 0, 0, 3, 0, | ||
| 75 | 1, 0, 1, 0, 0, 0, | ||
| 76 | 240, 0, 0, 0, 0, 0, | ||
| 77 | 0, 0, 0, 1, 0, 0, | ||
| 78 | 3, 0, 2, 0, 1, 0, | ||
| 79 | 0, 0, 24, 1, 0, 0, | ||
| 80 | 0, 0, 0, 0, 40, 1, | ||
| 81 | 0, 0, 3, 0, 0, 0, | ||
| 82 | 1, 0, 0, 0, 64, 1, | ||
| 83 | 0, 0, 0, 0, 0, 0, | ||
| 84 | 66, 99, 111, 101, 102, 102, | ||
| 85 | 0, 171, 1, 0, 3, 0, | ||
| 86 | 1, 0, 4, 0, 1, 0, | ||
| 87 | 0, 0, 0, 0, 0, 0, | ||
| 88 | 71, 99, 111, 101, 102, 102, | ||
| 89 | 0, 82, 99, 111, 101, 102, | ||
| 90 | 102, 0, 89, 111, 102, 102, | ||
| 91 | 115, 101, 116, 0, 116, 104, | ||
| 92 | 101, 83, 97, 109, 112, 108, | ||
| 93 | 101, 114, 43, 116, 104, 101, | ||
| 94 | 84, 101, 120, 116, 117, 114, | ||
| 95 | 101, 85, 0, 171, 171, 171, | ||
| 96 | 4, 0, 7, 0, 1, 0, | ||
| 97 | 4, 0, 1, 0, 0, 0, | ||
| 98 | 0, 0, 0, 0, 116, 104, | ||
| 99 | 101, 83, 97, 109, 112, 108, | ||
| 100 | 101, 114, 43, 116, 104, 101, | ||
| 101 | 84, 101, 120, 116, 117, 114, | ||
| 102 | 101, 86, 0, 171, 4, 0, | ||
| 103 | 7, 0, 1, 0, 4, 0, | ||
| 104 | 1, 0, 0, 0, 0, 0, | ||
| 105 | 0, 0, 116, 104, 101, 83, | ||
| 106 | 97, 109, 112, 108, 101, 114, | ||
| 107 | 43, 116, 104, 101, 84, 101, | ||
| 108 | 120, 116, 117, 114, 101, 89, | ||
| 109 | 0, 171, 4, 0, 7, 0, | ||
| 110 | 1, 0, 4, 0, 1, 0, | ||
| 111 | 0, 0, 0, 0, 0, 0, | ||
| 112 | 112, 115, 95, 50, 95, 48, | ||
| 113 | 0, 77, 105, 99, 114, 111, | ||
| 114 | 115, 111, 102, 116, 32, 40, | ||
| 115 | 82, 41, 32, 72, 76, 83, | ||
| 116 | 76, 32, 83, 104, 97, 100, | ||
| 117 | 101, 114, 32, 67, 111, 109, | ||
| 118 | 112, 105, 108, 101, 114, 32, | ||
| 119 | 49, 48, 46, 49, 0, 171, | ||
| 120 | 81, 0, 0, 5, 4, 0, | ||
| 121 | 15, 160, 0, 0, 128, 63, | ||
| 122 | 0, 0, 0, 0, 0, 0, | ||
| 123 | 0, 0, 0, 0, 0, 0, | ||
| 124 | 31, 0, 0, 2, 0, 0, | ||
| 125 | 0, 128, 0, 0, 3, 176, | ||
| 126 | 31, 0, 0, 2, 0, 0, | ||
| 127 | 0, 128, 0, 0, 15, 144, | ||
| 128 | 31, 0, 0, 2, 0, 0, | ||
| 129 | 0, 144, 0, 8, 15, 160, | ||
| 130 | 31, 0, 0, 2, 0, 0, | ||
| 131 | 0, 144, 1, 8, 15, 160, | ||
| 132 | 31, 0, 0, 2, 0, 0, | ||
| 133 | 0, 144, 2, 8, 15, 160, | ||
| 134 | 66, 0, 0, 3, 0, 0, | ||
| 135 | 15, 128, 0, 0, 228, 176, | ||
| 136 | 0, 8, 228, 160, 66, 0, | ||
| 137 | 0, 3, 1, 0, 15, 128, | ||
| 138 | 0, 0, 228, 176, 1, 8, | ||
| 139 | 228, 160, 66, 0, 0, 3, | ||
| 140 | 2, 0, 15, 128, 0, 0, | ||
| 141 | 228, 176, 2, 8, 228, 160, | ||
| 142 | 1, 0, 0, 2, 0, 0, | ||
| 143 | 2, 128, 1, 0, 0, 128, | ||
| 144 | 1, 0, 0, 2, 0, 0, | ||
| 145 | 4, 128, 2, 0, 0, 128, | ||
| 146 | 2, 0, 0, 3, 0, 0, | ||
| 147 | 7, 128, 0, 0, 228, 128, | ||
| 148 | 0, 0, 228, 160, 8, 0, | ||
| 149 | 0, 3, 1, 0, 1, 128, | ||
| 150 | 0, 0, 228, 128, 1, 0, | ||
| 151 | 228, 160, 8, 0, 0, 3, | ||
| 152 | 1, 0, 2, 128, 0, 0, | ||
| 153 | 228, 128, 2, 0, 228, 160, | ||
| 154 | 8, 0, 0, 3, 1, 0, | ||
| 155 | 4, 128, 0, 0, 228, 128, | ||
| 156 | 3, 0, 228, 160, 1, 0, | ||
| 157 | 0, 2, 1, 0, 8, 128, | ||
| 158 | 4, 0, 0, 160, 5, 0, | ||
| 159 | 0, 3, 0, 0, 15, 128, | ||
| 160 | 1, 0, 228, 128, 0, 0, | ||
| 161 | 228, 144, 1, 0, 0, 2, | ||
| 162 | 0, 8, 15, 128, 0, 0, | ||
| 163 | 228, 128, 255, 255, 0, 0 | ||
| 164 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d/D3D9_PixelShader_YUV.hlsl b/SDL-3.2.8/src/render/direct3d/D3D9_PixelShader_YUV.hlsl new file mode 100644 index 0000000..8804848 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d/D3D9_PixelShader_YUV.hlsl | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | |||
| 2 | Texture2D theTextureY : register(t0); | ||
| 3 | Texture2D theTextureU : register(t1); | ||
| 4 | Texture2D theTextureV : register(t2); | ||
| 5 | |||
| 6 | SamplerState theSampler = sampler_state | ||
| 7 | { | ||
| 8 | addressU = Clamp; | ||
| 9 | addressV = Clamp; | ||
| 10 | mipfilter = NONE; | ||
| 11 | minfilter = LINEAR; | ||
| 12 | magfilter = LINEAR; | ||
| 13 | }; | ||
| 14 | |||
| 15 | struct PixelShaderInput | ||
| 16 | { | ||
| 17 | float4 pos : SV_POSITION; | ||
| 18 | float2 tex : TEXCOORD0; | ||
| 19 | float4 color : COLOR0; | ||
| 20 | }; | ||
| 21 | |||
| 22 | cbuffer Constants : register(b0) | ||
| 23 | { | ||
| 24 | float4 Yoffset; | ||
| 25 | float4 Rcoeff; | ||
| 26 | float4 Gcoeff; | ||
| 27 | float4 Bcoeff; | ||
| 28 | }; | ||
| 29 | |||
| 30 | |||
| 31 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 32 | { | ||
| 33 | float4 Output; | ||
| 34 | |||
| 35 | float3 yuv; | ||
| 36 | yuv.x = theTextureY.Sample(theSampler, input.tex).r; | ||
| 37 | yuv.y = theTextureU.Sample(theSampler, input.tex).r; | ||
| 38 | yuv.z = theTextureV.Sample(theSampler, input.tex).r; | ||
| 39 | |||
| 40 | yuv += Yoffset.xyz; | ||
| 41 | Output.r = dot(yuv, Rcoeff.xyz); | ||
| 42 | Output.g = dot(yuv, Gcoeff.xyz); | ||
| 43 | Output.b = dot(yuv, Bcoeff.xyz); | ||
| 44 | Output.a = 1.0f; | ||
| 45 | |||
| 46 | return Output * input.color; | ||
| 47 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d/SDL_render_d3d.c b/SDL-3.2.8/src/render/direct3d/SDL_render_d3d.c new file mode 100644 index 0000000..ccb5b3c --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d/SDL_render_d3d.c | |||
| @@ -0,0 +1,1778 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_D3D | ||
| 24 | |||
| 25 | #include "../../core/windows/SDL_windows.h" | ||
| 26 | |||
| 27 | #include "../SDL_sysrender.h" | ||
| 28 | #include "../SDL_d3dmath.h" | ||
| 29 | #include "../../video/windows/SDL_windowsvideo.h" | ||
| 30 | #include "../../video/SDL_pixels_c.h" | ||
| 31 | |||
| 32 | #define D3D_DEBUG_INFO | ||
| 33 | #include <d3d9.h> | ||
| 34 | |||
| 35 | #include "SDL_shaders_d3d.h" | ||
| 36 | |||
| 37 | typedef struct | ||
| 38 | { | ||
| 39 | SDL_Rect viewport; | ||
| 40 | bool viewport_dirty; | ||
| 41 | SDL_Texture *texture; | ||
| 42 | SDL_BlendMode blend; | ||
| 43 | bool cliprect_enabled; | ||
| 44 | bool cliprect_enabled_dirty; | ||
| 45 | SDL_Rect cliprect; | ||
| 46 | bool cliprect_dirty; | ||
| 47 | D3D9_Shader shader; | ||
| 48 | const float *shader_params; | ||
| 49 | } D3D_DrawStateCache; | ||
| 50 | |||
| 51 | // Direct3D renderer implementation | ||
| 52 | |||
| 53 | typedef struct | ||
| 54 | { | ||
| 55 | void *d3dDLL; | ||
| 56 | IDirect3D9 *d3d; | ||
| 57 | IDirect3DDevice9 *device; | ||
| 58 | UINT adapter; | ||
| 59 | D3DPRESENT_PARAMETERS pparams; | ||
| 60 | bool updateSize; | ||
| 61 | bool beginScene; | ||
| 62 | bool enableSeparateAlphaBlend; | ||
| 63 | D3DTEXTUREFILTERTYPE scaleMode[3]; | ||
| 64 | SDL_TextureAddressMode addressMode[3]; | ||
| 65 | IDirect3DSurface9 *defaultRenderTarget; | ||
| 66 | IDirect3DSurface9 *currentRenderTarget; | ||
| 67 | void *d3dxDLL; | ||
| 68 | #ifdef SDL_HAVE_YUV | ||
| 69 | LPDIRECT3DPIXELSHADER9 shaders[NUM_SHADERS]; | ||
| 70 | #endif | ||
| 71 | LPDIRECT3DVERTEXBUFFER9 vertexBuffers[8]; | ||
| 72 | size_t vertexBufferSize[8]; | ||
| 73 | int currentVertexBuffer; | ||
| 74 | bool reportedVboProblem; | ||
| 75 | D3D_DrawStateCache drawstate; | ||
| 76 | } D3D_RenderData; | ||
| 77 | |||
| 78 | typedef struct | ||
| 79 | { | ||
| 80 | bool dirty; | ||
| 81 | int w, h; | ||
| 82 | DWORD usage; | ||
| 83 | Uint32 format; | ||
| 84 | D3DFORMAT d3dfmt; | ||
| 85 | IDirect3DTexture9 *texture; | ||
| 86 | IDirect3DTexture9 *staging; | ||
| 87 | } D3D_TextureRep; | ||
| 88 | |||
| 89 | typedef struct | ||
| 90 | { | ||
| 91 | D3D_TextureRep texture; | ||
| 92 | D3DTEXTUREFILTERTYPE scaleMode; | ||
| 93 | D3D9_Shader shader; | ||
| 94 | const float *shader_params; | ||
| 95 | |||
| 96 | #ifdef SDL_HAVE_YUV | ||
| 97 | // YV12 texture support | ||
| 98 | bool yuv; | ||
| 99 | D3D_TextureRep utexture; | ||
| 100 | D3D_TextureRep vtexture; | ||
| 101 | Uint8 *pixels; | ||
| 102 | int pitch; | ||
| 103 | SDL_Rect locked_rect; | ||
| 104 | #endif | ||
| 105 | } D3D_TextureData; | ||
| 106 | |||
| 107 | typedef struct | ||
| 108 | { | ||
| 109 | float x, y, z; | ||
| 110 | DWORD color; | ||
| 111 | float u, v; | ||
| 112 | } Vertex; | ||
| 113 | |||
| 114 | static bool D3D_SetError(const char *prefix, HRESULT result) | ||
| 115 | { | ||
| 116 | const char *error; | ||
| 117 | |||
| 118 | switch (result) { | ||
| 119 | case D3DERR_WRONGTEXTUREFORMAT: | ||
| 120 | error = "WRONGTEXTUREFORMAT"; | ||
| 121 | break; | ||
| 122 | case D3DERR_UNSUPPORTEDCOLOROPERATION: | ||
| 123 | error = "UNSUPPORTEDCOLOROPERATION"; | ||
| 124 | break; | ||
| 125 | case D3DERR_UNSUPPORTEDCOLORARG: | ||
| 126 | error = "UNSUPPORTEDCOLORARG"; | ||
| 127 | break; | ||
| 128 | case D3DERR_UNSUPPORTEDALPHAOPERATION: | ||
| 129 | error = "UNSUPPORTEDALPHAOPERATION"; | ||
| 130 | break; | ||
| 131 | case D3DERR_UNSUPPORTEDALPHAARG: | ||
| 132 | error = "UNSUPPORTEDALPHAARG"; | ||
| 133 | break; | ||
| 134 | case D3DERR_TOOMANYOPERATIONS: | ||
| 135 | error = "TOOMANYOPERATIONS"; | ||
| 136 | break; | ||
| 137 | case D3DERR_CONFLICTINGTEXTUREFILTER: | ||
| 138 | error = "CONFLICTINGTEXTUREFILTER"; | ||
| 139 | break; | ||
| 140 | case D3DERR_UNSUPPORTEDFACTORVALUE: | ||
| 141 | error = "UNSUPPORTEDFACTORVALUE"; | ||
| 142 | break; | ||
| 143 | case D3DERR_CONFLICTINGRENDERSTATE: | ||
| 144 | error = "CONFLICTINGRENDERSTATE"; | ||
| 145 | break; | ||
| 146 | case D3DERR_UNSUPPORTEDTEXTUREFILTER: | ||
| 147 | error = "UNSUPPORTEDTEXTUREFILTER"; | ||
| 148 | break; | ||
| 149 | case D3DERR_CONFLICTINGTEXTUREPALETTE: | ||
| 150 | error = "CONFLICTINGTEXTUREPALETTE"; | ||
| 151 | break; | ||
| 152 | case D3DERR_DRIVERINTERNALERROR: | ||
| 153 | error = "DRIVERINTERNALERROR"; | ||
| 154 | break; | ||
| 155 | case D3DERR_NOTFOUND: | ||
| 156 | error = "NOTFOUND"; | ||
| 157 | break; | ||
| 158 | case D3DERR_MOREDATA: | ||
| 159 | error = "MOREDATA"; | ||
| 160 | break; | ||
| 161 | case D3DERR_DEVICELOST: | ||
| 162 | error = "DEVICELOST"; | ||
| 163 | break; | ||
| 164 | case D3DERR_DEVICENOTRESET: | ||
| 165 | error = "DEVICENOTRESET"; | ||
| 166 | break; | ||
| 167 | case D3DERR_NOTAVAILABLE: | ||
| 168 | error = "NOTAVAILABLE"; | ||
| 169 | break; | ||
| 170 | case D3DERR_OUTOFVIDEOMEMORY: | ||
| 171 | error = "OUTOFVIDEOMEMORY"; | ||
| 172 | break; | ||
| 173 | case D3DERR_INVALIDDEVICE: | ||
| 174 | error = "INVALIDDEVICE"; | ||
| 175 | break; | ||
| 176 | case D3DERR_INVALIDCALL: | ||
| 177 | error = "INVALIDCALL"; | ||
| 178 | break; | ||
| 179 | case D3DERR_DRIVERINVALIDCALL: | ||
| 180 | error = "DRIVERINVALIDCALL"; | ||
| 181 | break; | ||
| 182 | case D3DERR_WASSTILLDRAWING: | ||
| 183 | error = "WASSTILLDRAWING"; | ||
| 184 | break; | ||
| 185 | default: | ||
| 186 | error = "UNKNOWN"; | ||
| 187 | break; | ||
| 188 | } | ||
| 189 | return SDL_SetError("%s: %s", prefix, error); | ||
| 190 | } | ||
| 191 | |||
| 192 | static D3DFORMAT PixelFormatToD3DFMT(Uint32 format) | ||
| 193 | { | ||
| 194 | switch (format) { | ||
| 195 | case SDL_PIXELFORMAT_RGB565: | ||
| 196 | return D3DFMT_R5G6B5; | ||
| 197 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 198 | return D3DFMT_X8R8G8B8; | ||
| 199 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 200 | return D3DFMT_A8R8G8B8; | ||
| 201 | case SDL_PIXELFORMAT_YV12: | ||
| 202 | case SDL_PIXELFORMAT_IYUV: | ||
| 203 | case SDL_PIXELFORMAT_NV12: | ||
| 204 | case SDL_PIXELFORMAT_NV21: | ||
| 205 | return D3DFMT_L8; | ||
| 206 | default: | ||
| 207 | return D3DFMT_UNKNOWN; | ||
| 208 | } | ||
| 209 | } | ||
| 210 | |||
| 211 | static SDL_PixelFormat D3DFMTToPixelFormat(D3DFORMAT format) | ||
| 212 | { | ||
| 213 | switch (format) { | ||
| 214 | case D3DFMT_R5G6B5: | ||
| 215 | return SDL_PIXELFORMAT_RGB565; | ||
| 216 | case D3DFMT_X8R8G8B8: | ||
| 217 | return SDL_PIXELFORMAT_XRGB8888; | ||
| 218 | case D3DFMT_A8R8G8B8: | ||
| 219 | return SDL_PIXELFORMAT_ARGB8888; | ||
| 220 | default: | ||
| 221 | return SDL_PIXELFORMAT_UNKNOWN; | ||
| 222 | } | ||
| 223 | } | ||
| 224 | |||
| 225 | static void D3D_InitRenderState(D3D_RenderData *data) | ||
| 226 | { | ||
| 227 | D3DMATRIX matrix; | ||
| 228 | |||
| 229 | IDirect3DDevice9 *device = data->device; | ||
| 230 | IDirect3DDevice9_SetPixelShader(device, NULL); | ||
| 231 | IDirect3DDevice9_SetTexture(device, 0, NULL); | ||
| 232 | IDirect3DDevice9_SetTexture(device, 1, NULL); | ||
| 233 | IDirect3DDevice9_SetTexture(device, 2, NULL); | ||
| 234 | IDirect3DDevice9_SetFVF(device, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); | ||
| 235 | IDirect3DDevice9_SetVertexShader(device, NULL); | ||
| 236 | IDirect3DDevice9_SetRenderState(device, D3DRS_ZENABLE, D3DZB_FALSE); | ||
| 237 | IDirect3DDevice9_SetRenderState(device, D3DRS_CULLMODE, D3DCULL_NONE); | ||
| 238 | IDirect3DDevice9_SetRenderState(device, D3DRS_LIGHTING, FALSE); | ||
| 239 | |||
| 240 | // Enable color modulation by diffuse color | ||
| 241 | IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_COLOROP, | ||
| 242 | D3DTOP_MODULATE); | ||
| 243 | IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_COLORARG1, | ||
| 244 | D3DTA_TEXTURE); | ||
| 245 | IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_COLORARG2, | ||
| 246 | D3DTA_DIFFUSE); | ||
| 247 | |||
| 248 | // Enable alpha modulation by diffuse alpha | ||
| 249 | IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_ALPHAOP, | ||
| 250 | D3DTOP_MODULATE); | ||
| 251 | IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_ALPHAARG1, | ||
| 252 | D3DTA_TEXTURE); | ||
| 253 | IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_ALPHAARG2, | ||
| 254 | D3DTA_DIFFUSE); | ||
| 255 | |||
| 256 | // Enable separate alpha blend function, if possible | ||
| 257 | if (data->enableSeparateAlphaBlend) { | ||
| 258 | IDirect3DDevice9_SetRenderState(device, D3DRS_SEPARATEALPHABLENDENABLE, TRUE); | ||
| 259 | } | ||
| 260 | |||
| 261 | // Disable second texture stage, since we're done | ||
| 262 | IDirect3DDevice9_SetTextureStageState(device, 1, D3DTSS_COLOROP, | ||
| 263 | D3DTOP_DISABLE); | ||
| 264 | IDirect3DDevice9_SetTextureStageState(device, 1, D3DTSS_ALPHAOP, | ||
| 265 | D3DTOP_DISABLE); | ||
| 266 | |||
| 267 | // Set an identity world and view matrix | ||
| 268 | SDL_zero(matrix); | ||
| 269 | matrix.m[0][0] = 1.0f; | ||
| 270 | matrix.m[1][1] = 1.0f; | ||
| 271 | matrix.m[2][2] = 1.0f; | ||
| 272 | matrix.m[3][3] = 1.0f; | ||
| 273 | IDirect3DDevice9_SetTransform(device, D3DTS_WORLD, &matrix); | ||
| 274 | IDirect3DDevice9_SetTransform(device, D3DTS_VIEW, &matrix); | ||
| 275 | |||
| 276 | // Reset our current scale mode | ||
| 277 | SDL_memset(data->scaleMode, 0xFF, sizeof(data->scaleMode)); | ||
| 278 | |||
| 279 | // Reset our current address mode | ||
| 280 | SDL_zeroa(data->addressMode); | ||
| 281 | |||
| 282 | // Start the render with beginScene | ||
| 283 | data->beginScene = true; | ||
| 284 | } | ||
| 285 | |||
| 286 | static bool D3D_Reset(SDL_Renderer *renderer); | ||
| 287 | |||
| 288 | static bool D3D_ActivateRenderer(SDL_Renderer *renderer) | ||
| 289 | { | ||
| 290 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 291 | HRESULT result; | ||
| 292 | |||
| 293 | if (data->updateSize) { | ||
| 294 | SDL_Window *window = renderer->window; | ||
| 295 | int w, h; | ||
| 296 | const SDL_DisplayMode *fullscreen_mode = NULL; | ||
| 297 | |||
| 298 | SDL_GetWindowSizeInPixels(window, &w, &h); | ||
| 299 | data->pparams.BackBufferWidth = w; | ||
| 300 | data->pparams.BackBufferHeight = h; | ||
| 301 | if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) { | ||
| 302 | fullscreen_mode = SDL_GetWindowFullscreenMode(window); | ||
| 303 | } | ||
| 304 | if (fullscreen_mode) { | ||
| 305 | data->pparams.Windowed = FALSE; | ||
| 306 | data->pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode->format); | ||
| 307 | data->pparams.FullScreen_RefreshRateInHz = (UINT)SDL_ceilf(fullscreen_mode->refresh_rate); | ||
| 308 | } else { | ||
| 309 | data->pparams.Windowed = TRUE; | ||
| 310 | data->pparams.BackBufferFormat = D3DFMT_UNKNOWN; | ||
| 311 | data->pparams.FullScreen_RefreshRateInHz = 0; | ||
| 312 | } | ||
| 313 | if (!D3D_Reset(renderer)) { | ||
| 314 | return false; | ||
| 315 | } | ||
| 316 | |||
| 317 | data->updateSize = false; | ||
| 318 | } | ||
| 319 | if (data->beginScene) { | ||
| 320 | result = IDirect3DDevice9_BeginScene(data->device); | ||
| 321 | if (result == D3DERR_DEVICELOST) { | ||
| 322 | if (!D3D_Reset(renderer)) { | ||
| 323 | return false; | ||
| 324 | } | ||
| 325 | result = IDirect3DDevice9_BeginScene(data->device); | ||
| 326 | } | ||
| 327 | if (FAILED(result)) { | ||
| 328 | return D3D_SetError("BeginScene()", result); | ||
| 329 | } | ||
| 330 | data->beginScene = false; | ||
| 331 | } | ||
| 332 | return true; | ||
| 333 | } | ||
| 334 | |||
| 335 | static void D3D_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 336 | { | ||
| 337 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 338 | |||
| 339 | if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) { | ||
| 340 | data->updateSize = true; | ||
| 341 | } | ||
| 342 | } | ||
| 343 | |||
| 344 | static D3DBLEND GetBlendFunc(SDL_BlendFactor factor) | ||
| 345 | { | ||
| 346 | switch (factor) { | ||
| 347 | case SDL_BLENDFACTOR_ZERO: | ||
| 348 | return D3DBLEND_ZERO; | ||
| 349 | case SDL_BLENDFACTOR_ONE: | ||
| 350 | return D3DBLEND_ONE; | ||
| 351 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 352 | return D3DBLEND_SRCCOLOR; | ||
| 353 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 354 | return D3DBLEND_INVSRCCOLOR; | ||
| 355 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 356 | return D3DBLEND_SRCALPHA; | ||
| 357 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 358 | return D3DBLEND_INVSRCALPHA; | ||
| 359 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 360 | return D3DBLEND_DESTCOLOR; | ||
| 361 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 362 | return D3DBLEND_INVDESTCOLOR; | ||
| 363 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 364 | return D3DBLEND_DESTALPHA; | ||
| 365 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 366 | return D3DBLEND_INVDESTALPHA; | ||
| 367 | default: | ||
| 368 | break; | ||
| 369 | } | ||
| 370 | return (D3DBLEND)0; | ||
| 371 | } | ||
| 372 | |||
| 373 | static D3DBLENDOP GetBlendEquation(SDL_BlendOperation operation) | ||
| 374 | { | ||
| 375 | switch (operation) { | ||
| 376 | case SDL_BLENDOPERATION_ADD: | ||
| 377 | return D3DBLENDOP_ADD; | ||
| 378 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 379 | return D3DBLENDOP_SUBTRACT; | ||
| 380 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 381 | return D3DBLENDOP_REVSUBTRACT; | ||
| 382 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 383 | return D3DBLENDOP_MIN; | ||
| 384 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 385 | return D3DBLENDOP_MAX; | ||
| 386 | default: | ||
| 387 | break; | ||
| 388 | } | ||
| 389 | return (D3DBLENDOP)0; | ||
| 390 | } | ||
| 391 | |||
| 392 | static bool D3D_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 393 | { | ||
| 394 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 395 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 396 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 397 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 398 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 399 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 400 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 401 | |||
| 402 | if (!GetBlendFunc(srcColorFactor) || !GetBlendFunc(srcAlphaFactor) || | ||
| 403 | !GetBlendEquation(colorOperation) || | ||
| 404 | !GetBlendFunc(dstColorFactor) || !GetBlendFunc(dstAlphaFactor) || | ||
| 405 | !GetBlendEquation(alphaOperation)) { | ||
| 406 | return false; | ||
| 407 | } | ||
| 408 | |||
| 409 | if (!data->enableSeparateAlphaBlend) { | ||
| 410 | if ((srcColorFactor != srcAlphaFactor) || (dstColorFactor != dstAlphaFactor) || (colorOperation != alphaOperation)) { | ||
| 411 | return false; | ||
| 412 | } | ||
| 413 | } | ||
| 414 | return true; | ||
| 415 | } | ||
| 416 | |||
| 417 | static bool D3D_CreateTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, DWORD usage, Uint32 format, D3DFORMAT d3dfmt, int w, int h) | ||
| 418 | { | ||
| 419 | HRESULT result; | ||
| 420 | |||
| 421 | texture->dirty = false; | ||
| 422 | texture->w = w; | ||
| 423 | texture->h = h; | ||
| 424 | texture->usage = usage; | ||
| 425 | texture->format = format; | ||
| 426 | texture->d3dfmt = d3dfmt; | ||
| 427 | |||
| 428 | result = IDirect3DDevice9_CreateTexture(device, w, h, 1, usage, | ||
| 429 | PixelFormatToD3DFMT(format), | ||
| 430 | D3DPOOL_DEFAULT, &texture->texture, NULL); | ||
| 431 | if (FAILED(result)) { | ||
| 432 | return D3D_SetError("CreateTexture(D3DPOOL_DEFAULT)", result); | ||
| 433 | } | ||
| 434 | return true; | ||
| 435 | } | ||
| 436 | |||
| 437 | static bool D3D_CreateStagingTexture(IDirect3DDevice9 *device, D3D_TextureRep *texture) | ||
| 438 | { | ||
| 439 | HRESULT result; | ||
| 440 | |||
| 441 | if (!texture->staging) { | ||
| 442 | result = IDirect3DDevice9_CreateTexture(device, texture->w, texture->h, 1, 0, | ||
| 443 | texture->d3dfmt, D3DPOOL_SYSTEMMEM, &texture->staging, NULL); | ||
| 444 | if (FAILED(result)) { | ||
| 445 | return D3D_SetError("CreateTexture(D3DPOOL_SYSTEMMEM)", result); | ||
| 446 | } | ||
| 447 | } | ||
| 448 | return true; | ||
| 449 | } | ||
| 450 | |||
| 451 | static bool D3D_RecreateTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture) | ||
| 452 | { | ||
| 453 | if (texture->texture) { | ||
| 454 | IDirect3DTexture9_Release(texture->texture); | ||
| 455 | texture->texture = NULL; | ||
| 456 | } | ||
| 457 | if (texture->staging) { | ||
| 458 | IDirect3DTexture9_AddDirtyRect(texture->staging, NULL); | ||
| 459 | texture->dirty = true; | ||
| 460 | } | ||
| 461 | return true; | ||
| 462 | } | ||
| 463 | |||
| 464 | static bool D3D_UpdateTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, int x, int y, int w, int h, const void *pixels, int pitch) | ||
| 465 | { | ||
| 466 | RECT d3drect; | ||
| 467 | D3DLOCKED_RECT locked; | ||
| 468 | const Uint8 *src; | ||
| 469 | Uint8 *dst; | ||
| 470 | int row, length; | ||
| 471 | HRESULT result; | ||
| 472 | |||
| 473 | if (!D3D_CreateStagingTexture(device, texture)) { | ||
| 474 | return false; | ||
| 475 | } | ||
| 476 | |||
| 477 | d3drect.left = x; | ||
| 478 | d3drect.right = (LONG)x + w; | ||
| 479 | d3drect.top = y; | ||
| 480 | d3drect.bottom = (LONG)y + h; | ||
| 481 | |||
| 482 | result = IDirect3DTexture9_LockRect(texture->staging, 0, &locked, &d3drect, 0); | ||
| 483 | if (FAILED(result)) { | ||
| 484 | return D3D_SetError("LockRect()", result); | ||
| 485 | } | ||
| 486 | |||
| 487 | src = (const Uint8 *)pixels; | ||
| 488 | dst = (Uint8 *)locked.pBits; | ||
| 489 | length = w * SDL_BYTESPERPIXEL(texture->format); | ||
| 490 | if (length == pitch && length == locked.Pitch) { | ||
| 491 | SDL_memcpy(dst, src, (size_t)length * h); | ||
| 492 | } else { | ||
| 493 | if (length > pitch) { | ||
| 494 | length = pitch; | ||
| 495 | } | ||
| 496 | if (length > locked.Pitch) { | ||
| 497 | length = locked.Pitch; | ||
| 498 | } | ||
| 499 | for (row = 0; row < h; ++row) { | ||
| 500 | SDL_memcpy(dst, src, length); | ||
| 501 | src += pitch; | ||
| 502 | dst += locked.Pitch; | ||
| 503 | } | ||
| 504 | } | ||
| 505 | result = IDirect3DTexture9_UnlockRect(texture->staging, 0); | ||
| 506 | if (FAILED(result)) { | ||
| 507 | return D3D_SetError("UnlockRect()", result); | ||
| 508 | } | ||
| 509 | texture->dirty = true; | ||
| 510 | |||
| 511 | return true; | ||
| 512 | } | ||
| 513 | |||
| 514 | static void D3D_DestroyTextureRep(D3D_TextureRep *texture) | ||
| 515 | { | ||
| 516 | if (texture->texture) { | ||
| 517 | IDirect3DTexture9_Release(texture->texture); | ||
| 518 | texture->texture = NULL; | ||
| 519 | } | ||
| 520 | if (texture->staging) { | ||
| 521 | IDirect3DTexture9_Release(texture->staging); | ||
| 522 | texture->staging = NULL; | ||
| 523 | } | ||
| 524 | } | ||
| 525 | |||
| 526 | static bool D3D_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 527 | { | ||
| 528 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 529 | D3D_TextureData *texturedata; | ||
| 530 | DWORD usage; | ||
| 531 | |||
| 532 | texturedata = (D3D_TextureData *)SDL_calloc(1, sizeof(*texturedata)); | ||
| 533 | if (!texturedata) { | ||
| 534 | return false; | ||
| 535 | } | ||
| 536 | texturedata->scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? D3DTEXF_POINT : D3DTEXF_LINEAR; | ||
| 537 | |||
| 538 | texture->internal = texturedata; | ||
| 539 | |||
| 540 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 541 | usage = D3DUSAGE_RENDERTARGET; | ||
| 542 | } else { | ||
| 543 | usage = 0; | ||
| 544 | } | ||
| 545 | |||
| 546 | if (!D3D_CreateTextureRep(data->device, &texturedata->texture, usage, texture->format, PixelFormatToD3DFMT(texture->format), texture->w, texture->h)) { | ||
| 547 | return false; | ||
| 548 | } | ||
| 549 | #ifdef SDL_HAVE_YUV | ||
| 550 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 551 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 552 | texturedata->yuv = true; | ||
| 553 | |||
| 554 | if (!D3D_CreateTextureRep(data->device, &texturedata->utexture, usage, texture->format, PixelFormatToD3DFMT(texture->format), (texture->w + 1) / 2, (texture->h + 1) / 2)) { | ||
| 555 | return false; | ||
| 556 | } | ||
| 557 | |||
| 558 | if (!D3D_CreateTextureRep(data->device, &texturedata->vtexture, usage, texture->format, PixelFormatToD3DFMT(texture->format), (texture->w + 1) / 2, (texture->h + 1) / 2)) { | ||
| 559 | return false; | ||
| 560 | } | ||
| 561 | |||
| 562 | texturedata->shader = SHADER_YUV; | ||
| 563 | texturedata->shader_params = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8); | ||
| 564 | if (texturedata->shader_params == NULL) { | ||
| 565 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 566 | } | ||
| 567 | } | ||
| 568 | #endif | ||
| 569 | return true; | ||
| 570 | } | ||
| 571 | |||
| 572 | static bool D3D_RecreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 573 | { | ||
| 574 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 575 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 576 | |||
| 577 | if (!texturedata) { | ||
| 578 | return true; | ||
| 579 | } | ||
| 580 | |||
| 581 | if (!D3D_RecreateTextureRep(data->device, &texturedata->texture)) { | ||
| 582 | return false; | ||
| 583 | } | ||
| 584 | #ifdef SDL_HAVE_YUV | ||
| 585 | if (texturedata->yuv) { | ||
| 586 | if (!D3D_RecreateTextureRep(data->device, &texturedata->utexture)) { | ||
| 587 | return false; | ||
| 588 | } | ||
| 589 | |||
| 590 | if (!D3D_RecreateTextureRep(data->device, &texturedata->vtexture)) { | ||
| 591 | return false; | ||
| 592 | } | ||
| 593 | } | ||
| 594 | #endif | ||
| 595 | return true; | ||
| 596 | } | ||
| 597 | |||
| 598 | static bool D3D_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 599 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 600 | { | ||
| 601 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 602 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 603 | |||
| 604 | if (!texturedata) { | ||
| 605 | return SDL_SetError("Texture is not currently available"); | ||
| 606 | } | ||
| 607 | |||
| 608 | if (!D3D_UpdateTextureRep(data->device, &texturedata->texture, rect->x, rect->y, rect->w, rect->h, pixels, pitch)) { | ||
| 609 | return false; | ||
| 610 | } | ||
| 611 | #ifdef SDL_HAVE_YUV | ||
| 612 | if (texturedata->yuv) { | ||
| 613 | // Skip to the correct offset into the next texture | ||
| 614 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 615 | |||
| 616 | if (!D3D_UpdateTextureRep(data->device, texture->format == SDL_PIXELFORMAT_YV12 ? &texturedata->vtexture : &texturedata->utexture, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, pixels, (pitch + 1) / 2)) { | ||
| 617 | return false; | ||
| 618 | } | ||
| 619 | |||
| 620 | // Skip to the correct offset into the next texture | ||
| 621 | pixels = (const void *)((const Uint8 *)pixels + ((rect->h + 1) / 2) * ((pitch + 1) / 2)); | ||
| 622 | if (!D3D_UpdateTextureRep(data->device, texture->format == SDL_PIXELFORMAT_YV12 ? &texturedata->utexture : &texturedata->vtexture, rect->x / 2, (rect->y + 1) / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, pixels, (pitch + 1) / 2)) { | ||
| 623 | return false; | ||
| 624 | } | ||
| 625 | } | ||
| 626 | #endif | ||
| 627 | return true; | ||
| 628 | } | ||
| 629 | |||
| 630 | #ifdef SDL_HAVE_YUV | ||
| 631 | static bool D3D_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 632 | const SDL_Rect *rect, | ||
| 633 | const Uint8 *Yplane, int Ypitch, | ||
| 634 | const Uint8 *Uplane, int Upitch, | ||
| 635 | const Uint8 *Vplane, int Vpitch) | ||
| 636 | { | ||
| 637 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 638 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 639 | |||
| 640 | if (!texturedata) { | ||
| 641 | return SDL_SetError("Texture is not currently available"); | ||
| 642 | } | ||
| 643 | |||
| 644 | if (!D3D_UpdateTextureRep(data->device, &texturedata->texture, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch)) { | ||
| 645 | return false; | ||
| 646 | } | ||
| 647 | if (!D3D_UpdateTextureRep(data->device, &texturedata->utexture, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, Uplane, Upitch)) { | ||
| 648 | return false; | ||
| 649 | } | ||
| 650 | if (!D3D_UpdateTextureRep(data->device, &texturedata->vtexture, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, Vplane, Vpitch)) { | ||
| 651 | return false; | ||
| 652 | } | ||
| 653 | return true; | ||
| 654 | } | ||
| 655 | #endif | ||
| 656 | |||
| 657 | static bool D3D_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 658 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 659 | { | ||
| 660 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 661 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 662 | IDirect3DDevice9 *device = data->device; | ||
| 663 | |||
| 664 | if (!texturedata) { | ||
| 665 | return SDL_SetError("Texture is not currently available"); | ||
| 666 | } | ||
| 667 | #ifdef SDL_HAVE_YUV | ||
| 668 | texturedata->locked_rect = *rect; | ||
| 669 | |||
| 670 | if (texturedata->yuv) { | ||
| 671 | // It's more efficient to upload directly... | ||
| 672 | if (!texturedata->pixels) { | ||
| 673 | texturedata->pitch = texture->w; | ||
| 674 | texturedata->pixels = (Uint8 *)SDL_malloc((texture->h * texturedata->pitch * 3) / 2); | ||
| 675 | if (!texturedata->pixels) { | ||
| 676 | return false; | ||
| 677 | } | ||
| 678 | } | ||
| 679 | *pixels = | ||
| 680 | (void *)(texturedata->pixels + rect->y * texturedata->pitch + | ||
| 681 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 682 | *pitch = texturedata->pitch; | ||
| 683 | } else | ||
| 684 | #endif | ||
| 685 | { | ||
| 686 | RECT d3drect; | ||
| 687 | D3DLOCKED_RECT locked; | ||
| 688 | HRESULT result; | ||
| 689 | |||
| 690 | if (!D3D_CreateStagingTexture(device, &texturedata->texture)) { | ||
| 691 | return false; | ||
| 692 | } | ||
| 693 | |||
| 694 | d3drect.left = rect->x; | ||
| 695 | d3drect.right = (LONG)rect->x + rect->w; | ||
| 696 | d3drect.top = rect->y; | ||
| 697 | d3drect.bottom = (LONG)rect->y + rect->h; | ||
| 698 | |||
| 699 | result = IDirect3DTexture9_LockRect(texturedata->texture.staging, 0, &locked, &d3drect, 0); | ||
| 700 | if (FAILED(result)) { | ||
| 701 | return D3D_SetError("LockRect()", result); | ||
| 702 | } | ||
| 703 | *pixels = locked.pBits; | ||
| 704 | *pitch = locked.Pitch; | ||
| 705 | } | ||
| 706 | return true; | ||
| 707 | } | ||
| 708 | |||
| 709 | static void D3D_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 710 | { | ||
| 711 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 712 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 713 | |||
| 714 | if (!texturedata) { | ||
| 715 | return; | ||
| 716 | } | ||
| 717 | #ifdef SDL_HAVE_YUV | ||
| 718 | if (texturedata->yuv) { | ||
| 719 | const SDL_Rect *rect = &texturedata->locked_rect; | ||
| 720 | void *pixels = | ||
| 721 | (void *)(texturedata->pixels + rect->y * texturedata->pitch + | ||
| 722 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 723 | D3D_UpdateTexture(renderer, texture, rect, pixels, texturedata->pitch); | ||
| 724 | } else | ||
| 725 | #endif | ||
| 726 | { | ||
| 727 | IDirect3DTexture9_UnlockRect(texturedata->texture.staging, 0); | ||
| 728 | texturedata->texture.dirty = true; | ||
| 729 | if (data->drawstate.texture == texture) { | ||
| 730 | data->drawstate.texture = NULL; | ||
| 731 | data->drawstate.shader = SHADER_NONE; | ||
| 732 | data->drawstate.shader_params = NULL; | ||
| 733 | IDirect3DDevice9_SetPixelShader(data->device, NULL); | ||
| 734 | IDirect3DDevice9_SetTexture(data->device, 0, NULL); | ||
| 735 | } | ||
| 736 | } | ||
| 737 | } | ||
| 738 | |||
| 739 | static void D3D_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 740 | { | ||
| 741 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 742 | |||
| 743 | if (!texturedata) { | ||
| 744 | return; | ||
| 745 | } | ||
| 746 | |||
| 747 | texturedata->scaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? D3DTEXF_POINT : D3DTEXF_LINEAR; | ||
| 748 | } | ||
| 749 | |||
| 750 | static bool D3D_SetRenderTargetInternal(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 751 | { | ||
| 752 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 753 | D3D_TextureData *texturedata; | ||
| 754 | D3D_TextureRep *texturerep; | ||
| 755 | HRESULT result; | ||
| 756 | IDirect3DDevice9 *device = data->device; | ||
| 757 | |||
| 758 | // Release the previous render target if it wasn't the default one | ||
| 759 | if (data->currentRenderTarget) { | ||
| 760 | IDirect3DSurface9_Release(data->currentRenderTarget); | ||
| 761 | data->currentRenderTarget = NULL; | ||
| 762 | } | ||
| 763 | |||
| 764 | if (!texture) { | ||
| 765 | IDirect3DDevice9_SetRenderTarget(data->device, 0, data->defaultRenderTarget); | ||
| 766 | return true; | ||
| 767 | } | ||
| 768 | |||
| 769 | texturedata = (D3D_TextureData *)texture->internal; | ||
| 770 | if (!texturedata) { | ||
| 771 | return SDL_SetError("Texture is not currently available"); | ||
| 772 | } | ||
| 773 | |||
| 774 | // Make sure the render target is updated if it was locked and written to | ||
| 775 | texturerep = &texturedata->texture; | ||
| 776 | if (texturerep->dirty && texturerep->staging) { | ||
| 777 | if (!texturerep->texture) { | ||
| 778 | result = IDirect3DDevice9_CreateTexture(device, texturerep->w, texturerep->h, 1, texturerep->usage, | ||
| 779 | PixelFormatToD3DFMT(texturerep->format), D3DPOOL_DEFAULT, &texturerep->texture, NULL); | ||
| 780 | if (FAILED(result)) { | ||
| 781 | return D3D_SetError("CreateTexture(D3DPOOL_DEFAULT)", result); | ||
| 782 | } | ||
| 783 | } | ||
| 784 | |||
| 785 | result = IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9 *)texturerep->staging, (IDirect3DBaseTexture9 *)texturerep->texture); | ||
| 786 | if (FAILED(result)) { | ||
| 787 | return D3D_SetError("UpdateTexture()", result); | ||
| 788 | } | ||
| 789 | texturerep->dirty = false; | ||
| 790 | } | ||
| 791 | |||
| 792 | result = IDirect3DTexture9_GetSurfaceLevel(texturedata->texture.texture, 0, &data->currentRenderTarget); | ||
| 793 | if (FAILED(result)) { | ||
| 794 | return D3D_SetError("GetSurfaceLevel()", result); | ||
| 795 | } | ||
| 796 | result = IDirect3DDevice9_SetRenderTarget(data->device, 0, data->currentRenderTarget); | ||
| 797 | if (FAILED(result)) { | ||
| 798 | return D3D_SetError("SetRenderTarget()", result); | ||
| 799 | } | ||
| 800 | |||
| 801 | return true; | ||
| 802 | } | ||
| 803 | |||
| 804 | static bool D3D_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 805 | { | ||
| 806 | if (!D3D_ActivateRenderer(renderer)) { | ||
| 807 | return false; | ||
| 808 | } | ||
| 809 | |||
| 810 | return D3D_SetRenderTargetInternal(renderer, texture); | ||
| 811 | } | ||
| 812 | |||
| 813 | static bool D3D_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 814 | { | ||
| 815 | return true; // nothing to do in this backend. | ||
| 816 | } | ||
| 817 | |||
| 818 | static bool D3D_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 819 | { | ||
| 820 | const DWORD color = D3DCOLOR_COLORVALUE(cmd->data.draw.color.r * cmd->data.draw.color_scale, | ||
| 821 | cmd->data.draw.color.g * cmd->data.draw.color_scale, | ||
| 822 | cmd->data.draw.color.b * cmd->data.draw.color_scale, | ||
| 823 | cmd->data.draw.color.a); | ||
| 824 | const size_t vertslen = count * sizeof(Vertex); | ||
| 825 | Vertex *verts = (Vertex *)SDL_AllocateRenderVertices(renderer, vertslen, 0, &cmd->data.draw.first); | ||
| 826 | int i; | ||
| 827 | |||
| 828 | if (!verts) { | ||
| 829 | return false; | ||
| 830 | } | ||
| 831 | |||
| 832 | SDL_memset(verts, '\0', vertslen); | ||
| 833 | cmd->data.draw.count = count; | ||
| 834 | |||
| 835 | for (i = 0; i < count; i++, verts++, points++) { | ||
| 836 | verts->x = points->x; | ||
| 837 | verts->y = points->y; | ||
| 838 | verts->color = color; | ||
| 839 | } | ||
| 840 | |||
| 841 | return true; | ||
| 842 | } | ||
| 843 | |||
| 844 | static bool D3D_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 845 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 846 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 847 | float scale_x, float scale_y) | ||
| 848 | { | ||
| 849 | int i; | ||
| 850 | int count = indices ? num_indices : num_vertices; | ||
| 851 | Vertex *verts = (Vertex *)SDL_AllocateRenderVertices(renderer, count * sizeof(Vertex), 0, &cmd->data.draw.first); | ||
| 852 | const float color_scale = cmd->data.draw.color_scale; | ||
| 853 | |||
| 854 | if (!verts) { | ||
| 855 | return false; | ||
| 856 | } | ||
| 857 | |||
| 858 | cmd->data.draw.count = count; | ||
| 859 | size_indices = indices ? size_indices : 0; | ||
| 860 | |||
| 861 | for (i = 0; i < count; i++) { | ||
| 862 | int j; | ||
| 863 | float *xy_; | ||
| 864 | SDL_FColor *col_; | ||
| 865 | if (size_indices == 4) { | ||
| 866 | j = ((const Uint32 *)indices)[i]; | ||
| 867 | } else if (size_indices == 2) { | ||
| 868 | j = ((const Uint16 *)indices)[i]; | ||
| 869 | } else if (size_indices == 1) { | ||
| 870 | j = ((const Uint8 *)indices)[i]; | ||
| 871 | } else { | ||
| 872 | j = i; | ||
| 873 | } | ||
| 874 | |||
| 875 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 876 | col_ = (SDL_FColor *)((char *)color + j * color_stride); | ||
| 877 | |||
| 878 | verts->x = xy_[0] * scale_x - 0.5f; | ||
| 879 | verts->y = xy_[1] * scale_y - 0.5f; | ||
| 880 | verts->z = 0.0f; | ||
| 881 | verts->color = D3DCOLOR_COLORVALUE(col_->r * color_scale, col_->g * color_scale, col_->b * color_scale, col_->a); | ||
| 882 | |||
| 883 | if (texture) { | ||
| 884 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 885 | verts->u = uv_[0]; | ||
| 886 | verts->v = uv_[1]; | ||
| 887 | } else { | ||
| 888 | verts->u = 0.0f; | ||
| 889 | verts->v = 0.0f; | ||
| 890 | } | ||
| 891 | |||
| 892 | verts += 1; | ||
| 893 | } | ||
| 894 | return true; | ||
| 895 | } | ||
| 896 | |||
| 897 | static bool UpdateDirtyTexture(IDirect3DDevice9 *device, D3D_TextureRep *texture) | ||
| 898 | { | ||
| 899 | if (texture->dirty && texture->staging) { | ||
| 900 | HRESULT result; | ||
| 901 | if (!texture->texture) { | ||
| 902 | result = IDirect3DDevice9_CreateTexture(device, texture->w, texture->h, 1, texture->usage, | ||
| 903 | PixelFormatToD3DFMT(texture->format), D3DPOOL_DEFAULT, &texture->texture, NULL); | ||
| 904 | if (FAILED(result)) { | ||
| 905 | return D3D_SetError("CreateTexture(D3DPOOL_DEFAULT)", result); | ||
| 906 | } | ||
| 907 | } | ||
| 908 | |||
| 909 | result = IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9 *)texture->staging, (IDirect3DBaseTexture9 *)texture->texture); | ||
| 910 | if (FAILED(result)) { | ||
| 911 | return D3D_SetError("UpdateTexture()", result); | ||
| 912 | } | ||
| 913 | texture->dirty = false; | ||
| 914 | } | ||
| 915 | return true; | ||
| 916 | } | ||
| 917 | |||
| 918 | static bool BindTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, DWORD sampler) | ||
| 919 | { | ||
| 920 | HRESULT result; | ||
| 921 | UpdateDirtyTexture(device, texture); | ||
| 922 | result = IDirect3DDevice9_SetTexture(device, sampler, (IDirect3DBaseTexture9 *)texture->texture); | ||
| 923 | if (FAILED(result)) { | ||
| 924 | return D3D_SetError("SetTexture()", result); | ||
| 925 | } | ||
| 926 | return true; | ||
| 927 | } | ||
| 928 | |||
| 929 | static void UpdateTextureScaleMode(D3D_RenderData *data, D3D_TextureData *texturedata, unsigned index) | ||
| 930 | { | ||
| 931 | if (texturedata->scaleMode != data->scaleMode[index]) { | ||
| 932 | IDirect3DDevice9_SetSamplerState(data->device, index, D3DSAMP_MINFILTER, texturedata->scaleMode); | ||
| 933 | IDirect3DDevice9_SetSamplerState(data->device, index, D3DSAMP_MAGFILTER, texturedata->scaleMode); | ||
| 934 | data->scaleMode[index] = texturedata->scaleMode; | ||
| 935 | } | ||
| 936 | } | ||
| 937 | |||
| 938 | static void UpdateTextureAddressMode(D3D_RenderData *data, SDL_TextureAddressMode addressMode, unsigned index) | ||
| 939 | { | ||
| 940 | if (addressMode != data->addressMode[index]) { | ||
| 941 | switch (addressMode) { | ||
| 942 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 943 | IDirect3DDevice9_SetSamplerState(data->device, index, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); | ||
| 944 | IDirect3DDevice9_SetSamplerState(data->device, index, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP); | ||
| 945 | break; | ||
| 946 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 947 | IDirect3DDevice9_SetSamplerState(data->device, index, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP); | ||
| 948 | IDirect3DDevice9_SetSamplerState(data->device, index, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP); | ||
| 949 | break; | ||
| 950 | default: | ||
| 951 | break; | ||
| 952 | } | ||
| 953 | data->addressMode[index] = addressMode; | ||
| 954 | } | ||
| 955 | } | ||
| 956 | |||
| 957 | static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, SDL_TextureAddressMode addressMode, D3D9_Shader *shader, const float **shader_params) | ||
| 958 | { | ||
| 959 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 960 | |||
| 961 | if (!texturedata) { | ||
| 962 | return SDL_SetError("Texture is not currently available"); | ||
| 963 | } | ||
| 964 | |||
| 965 | UpdateTextureScaleMode(data, texturedata, 0); | ||
| 966 | UpdateTextureAddressMode(data, addressMode, 0); | ||
| 967 | |||
| 968 | *shader = texturedata->shader; | ||
| 969 | *shader_params = texturedata->shader_params; | ||
| 970 | |||
| 971 | if (!BindTextureRep(data->device, &texturedata->texture, 0)) { | ||
| 972 | return false; | ||
| 973 | } | ||
| 974 | #ifdef SDL_HAVE_YUV | ||
| 975 | if (texturedata->yuv) { | ||
| 976 | UpdateTextureScaleMode(data, texturedata, 1); | ||
| 977 | UpdateTextureScaleMode(data, texturedata, 2); | ||
| 978 | UpdateTextureAddressMode(data, addressMode, 1); | ||
| 979 | UpdateTextureAddressMode(data, addressMode, 2); | ||
| 980 | |||
| 981 | if (!BindTextureRep(data->device, &texturedata->utexture, 1)) { | ||
| 982 | return false; | ||
| 983 | } | ||
| 984 | if (!BindTextureRep(data->device, &texturedata->vtexture, 2)) { | ||
| 985 | return false; | ||
| 986 | } | ||
| 987 | } | ||
| 988 | #endif | ||
| 989 | return true; | ||
| 990 | } | ||
| 991 | |||
| 992 | static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd) | ||
| 993 | { | ||
| 994 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 995 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 996 | |||
| 997 | if (texture != data->drawstate.texture) { | ||
| 998 | #ifdef SDL_HAVE_YUV | ||
| 999 | D3D_TextureData *oldtexturedata = data->drawstate.texture ? (D3D_TextureData *)data->drawstate.texture->internal : NULL; | ||
| 1000 | D3D_TextureData *newtexturedata = texture ? (D3D_TextureData *)texture->internal : NULL; | ||
| 1001 | #endif | ||
| 1002 | D3D9_Shader shader = SHADER_NONE; | ||
| 1003 | const float *shader_params = NULL; | ||
| 1004 | |||
| 1005 | // disable any enabled textures we aren't going to use, let SetupTextureState() do the rest. | ||
| 1006 | if (!texture) { | ||
| 1007 | IDirect3DDevice9_SetTexture(data->device, 0, NULL); | ||
| 1008 | } | ||
| 1009 | #ifdef SDL_HAVE_YUV | ||
| 1010 | if ((!newtexturedata || !newtexturedata->yuv) && (oldtexturedata && oldtexturedata->yuv)) { | ||
| 1011 | IDirect3DDevice9_SetTexture(data->device, 1, NULL); | ||
| 1012 | IDirect3DDevice9_SetTexture(data->device, 2, NULL); | ||
| 1013 | } | ||
| 1014 | #endif | ||
| 1015 | if (texture && !SetupTextureState(data, texture, cmd->data.draw.texture_address_mode, &shader, &shader_params)) { | ||
| 1016 | return false; | ||
| 1017 | } | ||
| 1018 | |||
| 1019 | #ifdef SDL_HAVE_YUV | ||
| 1020 | if (shader != data->drawstate.shader) { | ||
| 1021 | const HRESULT result = IDirect3DDevice9_SetPixelShader(data->device, data->shaders[shader]); | ||
| 1022 | if (FAILED(result)) { | ||
| 1023 | return D3D_SetError("IDirect3DDevice9_SetPixelShader()", result); | ||
| 1024 | } | ||
| 1025 | data->drawstate.shader = shader; | ||
| 1026 | } | ||
| 1027 | |||
| 1028 | if (shader_params != data->drawstate.shader_params) { | ||
| 1029 | if (shader_params) { | ||
| 1030 | const UINT shader_params_length = 4; // The YUV shader takes 4 float4 parameters | ||
| 1031 | const HRESULT result = IDirect3DDevice9_SetPixelShaderConstantF(data->device, 0, shader_params, shader_params_length); | ||
| 1032 | if (FAILED(result)) { | ||
| 1033 | return D3D_SetError("IDirect3DDevice9_SetPixelShaderConstantF()", result); | ||
| 1034 | } | ||
| 1035 | } | ||
| 1036 | data->drawstate.shader_params = shader_params; | ||
| 1037 | } | ||
| 1038 | #endif // SDL_HAVE_YUV | ||
| 1039 | |||
| 1040 | data->drawstate.texture = texture; | ||
| 1041 | } else if (texture) { | ||
| 1042 | D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal; | ||
| 1043 | UpdateDirtyTexture(data->device, &texturedata->texture); | ||
| 1044 | #ifdef SDL_HAVE_YUV | ||
| 1045 | if (texturedata->yuv) { | ||
| 1046 | UpdateDirtyTexture(data->device, &texturedata->utexture); | ||
| 1047 | UpdateDirtyTexture(data->device, &texturedata->vtexture); | ||
| 1048 | } | ||
| 1049 | #endif | ||
| 1050 | } | ||
| 1051 | |||
| 1052 | if (blend != data->drawstate.blend) { | ||
| 1053 | if (blend == SDL_BLENDMODE_NONE) { | ||
| 1054 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE, FALSE); | ||
| 1055 | } else { | ||
| 1056 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE, TRUE); | ||
| 1057 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_SRCBLEND, | ||
| 1058 | GetBlendFunc(SDL_GetBlendModeSrcColorFactor(blend))); | ||
| 1059 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND, | ||
| 1060 | GetBlendFunc(SDL_GetBlendModeDstColorFactor(blend))); | ||
| 1061 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_BLENDOP, | ||
| 1062 | GetBlendEquation(SDL_GetBlendModeColorOperation(blend))); | ||
| 1063 | if (data->enableSeparateAlphaBlend) { | ||
| 1064 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_SRCBLENDALPHA, | ||
| 1065 | GetBlendFunc(SDL_GetBlendModeSrcAlphaFactor(blend))); | ||
| 1066 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLENDALPHA, | ||
| 1067 | GetBlendFunc(SDL_GetBlendModeDstAlphaFactor(blend))); | ||
| 1068 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_BLENDOPALPHA, | ||
| 1069 | GetBlendEquation(SDL_GetBlendModeAlphaOperation(blend))); | ||
| 1070 | } | ||
| 1071 | } | ||
| 1072 | |||
| 1073 | data->drawstate.blend = blend; | ||
| 1074 | } | ||
| 1075 | |||
| 1076 | if (data->drawstate.viewport_dirty) { | ||
| 1077 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1078 | D3DVIEWPORT9 d3dviewport; | ||
| 1079 | d3dviewport.X = viewport->x; | ||
| 1080 | d3dviewport.Y = viewport->y; | ||
| 1081 | d3dviewport.Width = viewport->w; | ||
| 1082 | d3dviewport.Height = viewport->h; | ||
| 1083 | d3dviewport.MinZ = 0.0f; | ||
| 1084 | d3dviewport.MaxZ = 1.0f; | ||
| 1085 | IDirect3DDevice9_SetViewport(data->device, &d3dviewport); | ||
| 1086 | |||
| 1087 | // Set an orthographic projection matrix | ||
| 1088 | if (viewport->w && viewport->h) { | ||
| 1089 | D3DMATRIX d3dmatrix; | ||
| 1090 | SDL_zero(d3dmatrix); | ||
| 1091 | d3dmatrix.m[0][0] = 2.0f / viewport->w; | ||
| 1092 | d3dmatrix.m[1][1] = -2.0f / viewport->h; | ||
| 1093 | d3dmatrix.m[2][2] = 1.0f; | ||
| 1094 | d3dmatrix.m[3][0] = -1.0f; | ||
| 1095 | d3dmatrix.m[3][1] = 1.0f; | ||
| 1096 | d3dmatrix.m[3][3] = 1.0f; | ||
| 1097 | IDirect3DDevice9_SetTransform(data->device, D3DTS_PROJECTION, &d3dmatrix); | ||
| 1098 | } | ||
| 1099 | |||
| 1100 | data->drawstate.viewport_dirty = false; | ||
| 1101 | } | ||
| 1102 | |||
| 1103 | if (data->drawstate.cliprect_enabled_dirty) { | ||
| 1104 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_SCISSORTESTENABLE, data->drawstate.cliprect_enabled ? TRUE : FALSE); | ||
| 1105 | data->drawstate.cliprect_enabled_dirty = false; | ||
| 1106 | } | ||
| 1107 | |||
| 1108 | if (data->drawstate.cliprect_dirty) { | ||
| 1109 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1110 | const SDL_Rect *rect = &data->drawstate.cliprect; | ||
| 1111 | RECT d3drect; | ||
| 1112 | d3drect.left = (LONG)viewport->x + rect->x; | ||
| 1113 | d3drect.top = (LONG)viewport->y + rect->y; | ||
| 1114 | d3drect.right = (LONG)viewport->x + rect->x + rect->w; | ||
| 1115 | d3drect.bottom = (LONG)viewport->y + rect->y + rect->h; | ||
| 1116 | IDirect3DDevice9_SetScissorRect(data->device, &d3drect); | ||
| 1117 | data->drawstate.cliprect_dirty = false; | ||
| 1118 | } | ||
| 1119 | |||
| 1120 | return true; | ||
| 1121 | } | ||
| 1122 | |||
| 1123 | static void D3D_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 1124 | { | ||
| 1125 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1126 | data->drawstate.viewport_dirty = true; | ||
| 1127 | data->drawstate.cliprect_enabled_dirty = true; | ||
| 1128 | data->drawstate.cliprect_dirty = true; | ||
| 1129 | data->drawstate.blend = SDL_BLENDMODE_INVALID; | ||
| 1130 | data->drawstate.texture = NULL; | ||
| 1131 | data->drawstate.shader = SHADER_NONE; | ||
| 1132 | data->drawstate.shader_params = NULL; | ||
| 1133 | } | ||
| 1134 | |||
| 1135 | static bool D3D_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 1136 | { | ||
| 1137 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1138 | const int vboidx = data->currentVertexBuffer; | ||
| 1139 | IDirect3DVertexBuffer9 *vbo = NULL; | ||
| 1140 | const bool istarget = renderer->target != NULL; | ||
| 1141 | |||
| 1142 | if (!D3D_ActivateRenderer(renderer)) { | ||
| 1143 | return false; | ||
| 1144 | } | ||
| 1145 | |||
| 1146 | if (vertsize > 0) { | ||
| 1147 | // upload the new VBO data for this set of commands. | ||
| 1148 | vbo = data->vertexBuffers[vboidx]; | ||
| 1149 | if (data->vertexBufferSize[vboidx] < vertsize) { | ||
| 1150 | const DWORD usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY; | ||
| 1151 | const DWORD fvf = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1; | ||
| 1152 | if (vbo) { | ||
| 1153 | IDirect3DVertexBuffer9_Release(vbo); | ||
| 1154 | } | ||
| 1155 | |||
| 1156 | if (FAILED(IDirect3DDevice9_CreateVertexBuffer(data->device, (UINT)vertsize, usage, fvf, D3DPOOL_DEFAULT, &vbo, NULL))) { | ||
| 1157 | vbo = NULL; | ||
| 1158 | } | ||
| 1159 | data->vertexBuffers[vboidx] = vbo; | ||
| 1160 | data->vertexBufferSize[vboidx] = vbo ? vertsize : 0; | ||
| 1161 | } | ||
| 1162 | |||
| 1163 | if (vbo) { | ||
| 1164 | void *ptr; | ||
| 1165 | if (FAILED(IDirect3DVertexBuffer9_Lock(vbo, 0, (UINT)vertsize, &ptr, D3DLOCK_DISCARD))) { | ||
| 1166 | vbo = NULL; // oh well, we'll do immediate mode drawing. :( | ||
| 1167 | } else { | ||
| 1168 | SDL_memcpy(ptr, vertices, vertsize); | ||
| 1169 | if (FAILED(IDirect3DVertexBuffer9_Unlock(vbo))) { | ||
| 1170 | vbo = NULL; // oh well, we'll do immediate mode drawing. :( | ||
| 1171 | } | ||
| 1172 | } | ||
| 1173 | } | ||
| 1174 | |||
| 1175 | // cycle through a few VBOs so D3D has some time with the data before we replace it. | ||
| 1176 | if (vbo) { | ||
| 1177 | data->currentVertexBuffer++; | ||
| 1178 | if (data->currentVertexBuffer >= SDL_arraysize(data->vertexBuffers)) { | ||
| 1179 | data->currentVertexBuffer = 0; | ||
| 1180 | } | ||
| 1181 | } else if (!data->reportedVboProblem) { | ||
| 1182 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "SDL failed to get a vertex buffer for this Direct3D 9 rendering batch!"); | ||
| 1183 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Dropping back to a slower method."); | ||
| 1184 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "This might be a brief hiccup, but if performance is bad, this is probably why."); | ||
| 1185 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "This error will not be logged again for this renderer."); | ||
| 1186 | data->reportedVboProblem = true; | ||
| 1187 | } | ||
| 1188 | } | ||
| 1189 | |||
| 1190 | IDirect3DDevice9_SetStreamSource(data->device, 0, vbo, 0, sizeof(Vertex)); | ||
| 1191 | |||
| 1192 | while (cmd) { | ||
| 1193 | switch (cmd->command) { | ||
| 1194 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 1195 | { | ||
| 1196 | /* currently this is sent with each vertex, but if we move to | ||
| 1197 | shaders, we can put this in a uniform here and reduce vertex | ||
| 1198 | buffer bandwidth */ | ||
| 1199 | break; | ||
| 1200 | } | ||
| 1201 | |||
| 1202 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 1203 | { | ||
| 1204 | SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1205 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 1206 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 1207 | data->drawstate.viewport_dirty = true; | ||
| 1208 | data->drawstate.cliprect_dirty = true; | ||
| 1209 | } | ||
| 1210 | break; | ||
| 1211 | } | ||
| 1212 | |||
| 1213 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 1214 | { | ||
| 1215 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 1216 | if (data->drawstate.cliprect_enabled != cmd->data.cliprect.enabled) { | ||
| 1217 | data->drawstate.cliprect_enabled = cmd->data.cliprect.enabled; | ||
| 1218 | data->drawstate.cliprect_enabled_dirty = true; | ||
| 1219 | } | ||
| 1220 | |||
| 1221 | if (SDL_memcmp(&data->drawstate.cliprect, rect, sizeof(*rect)) != 0) { | ||
| 1222 | SDL_copyp(&data->drawstate.cliprect, rect); | ||
| 1223 | data->drawstate.cliprect_dirty = true; | ||
| 1224 | } | ||
| 1225 | break; | ||
| 1226 | } | ||
| 1227 | |||
| 1228 | case SDL_RENDERCMD_CLEAR: | ||
| 1229 | { | ||
| 1230 | const DWORD color = D3DCOLOR_COLORVALUE(cmd->data.color.color.r * cmd->data.color.color_scale, | ||
| 1231 | cmd->data.color.color.g * cmd->data.color.color_scale, | ||
| 1232 | cmd->data.color.color.b * cmd->data.color.color_scale, | ||
| 1233 | cmd->data.color.color.a); | ||
| 1234 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1235 | const int backw = istarget ? renderer->target->w : data->pparams.BackBufferWidth; | ||
| 1236 | const int backh = istarget ? renderer->target->h : data->pparams.BackBufferHeight; | ||
| 1237 | const bool viewport_equal = ((viewport->x == 0) && (viewport->y == 0) && (viewport->w == backw) && (viewport->h == backh)); | ||
| 1238 | |||
| 1239 | if (data->drawstate.cliprect_enabled || data->drawstate.cliprect_enabled_dirty) { | ||
| 1240 | IDirect3DDevice9_SetRenderState(data->device, D3DRS_SCISSORTESTENABLE, FALSE); | ||
| 1241 | data->drawstate.cliprect_enabled_dirty = data->drawstate.cliprect_enabled; | ||
| 1242 | } | ||
| 1243 | |||
| 1244 | // Don't reset the viewport if we don't have to! | ||
| 1245 | if (!data->drawstate.viewport_dirty && viewport_equal) { | ||
| 1246 | IDirect3DDevice9_Clear(data->device, 0, NULL, D3DCLEAR_TARGET, color, 0.0f, 0); | ||
| 1247 | } else { | ||
| 1248 | // Clear is defined to clear the entire render target | ||
| 1249 | D3DVIEWPORT9 wholeviewport = { 0, 0, 0, 0, 0.0f, 1.0f }; | ||
| 1250 | wholeviewport.Width = backw; | ||
| 1251 | wholeviewport.Height = backh; | ||
| 1252 | IDirect3DDevice9_SetViewport(data->device, &wholeviewport); | ||
| 1253 | data->drawstate.viewport_dirty = true; // we still need to (re)set orthographic projection, so always mark it dirty. | ||
| 1254 | IDirect3DDevice9_Clear(data->device, 0, NULL, D3DCLEAR_TARGET, color, 0.0f, 0); | ||
| 1255 | } | ||
| 1256 | |||
| 1257 | break; | ||
| 1258 | } | ||
| 1259 | |||
| 1260 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 1261 | { | ||
| 1262 | const size_t count = cmd->data.draw.count; | ||
| 1263 | const size_t first = cmd->data.draw.first; | ||
| 1264 | SetDrawState(data, cmd); | ||
| 1265 | if (vbo) { | ||
| 1266 | IDirect3DDevice9_DrawPrimitive(data->device, D3DPT_POINTLIST, (UINT)(first / sizeof(Vertex)), (UINT)count); | ||
| 1267 | } else { | ||
| 1268 | const Vertex *verts = (Vertex *)(((Uint8 *)vertices) + first); | ||
| 1269 | IDirect3DDevice9_DrawPrimitiveUP(data->device, D3DPT_POINTLIST, (UINT)count, verts, sizeof(Vertex)); | ||
| 1270 | } | ||
| 1271 | break; | ||
| 1272 | } | ||
| 1273 | |||
| 1274 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 1275 | { | ||
| 1276 | const size_t count = cmd->data.draw.count; | ||
| 1277 | const size_t first = cmd->data.draw.first; | ||
| 1278 | const Vertex *verts = (Vertex *)(((Uint8 *)vertices) + first); | ||
| 1279 | |||
| 1280 | /* DirectX 9 has the same line rasterization semantics as GDI, | ||
| 1281 | so we need to close the endpoint of the line with a second draw call. | ||
| 1282 | NOLINTNEXTLINE(clang-analyzer-core.NullDereference): FIXME: Can verts truly not be NULL ? */ | ||
| 1283 | const bool close_endpoint = ((count == 2) || (verts[0].x != verts[count - 1].x) || (verts[0].y != verts[count - 1].y)); | ||
| 1284 | |||
| 1285 | SetDrawState(data, cmd); | ||
| 1286 | |||
| 1287 | if (vbo) { | ||
| 1288 | IDirect3DDevice9_DrawPrimitive(data->device, D3DPT_LINESTRIP, (UINT)(first / sizeof(Vertex)), (UINT)(count - 1)); | ||
| 1289 | if (close_endpoint) { | ||
| 1290 | IDirect3DDevice9_DrawPrimitive(data->device, D3DPT_POINTLIST, (UINT)((first / sizeof(Vertex)) + (count - 1)), 1); | ||
| 1291 | } | ||
| 1292 | } else { | ||
| 1293 | IDirect3DDevice9_DrawPrimitiveUP(data->device, D3DPT_LINESTRIP, (UINT)(count - 1), verts, sizeof(Vertex)); | ||
| 1294 | if (close_endpoint) { | ||
| 1295 | IDirect3DDevice9_DrawPrimitiveUP(data->device, D3DPT_POINTLIST, 1, &verts[count - 1], sizeof(Vertex)); | ||
| 1296 | } | ||
| 1297 | } | ||
| 1298 | break; | ||
| 1299 | } | ||
| 1300 | |||
| 1301 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 1302 | break; | ||
| 1303 | |||
| 1304 | case SDL_RENDERCMD_COPY: // unused | ||
| 1305 | break; | ||
| 1306 | |||
| 1307 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 1308 | break; | ||
| 1309 | |||
| 1310 | case SDL_RENDERCMD_GEOMETRY: | ||
| 1311 | { | ||
| 1312 | const size_t count = cmd->data.draw.count; | ||
| 1313 | const size_t first = cmd->data.draw.first; | ||
| 1314 | SetDrawState(data, cmd); | ||
| 1315 | if (vbo) { | ||
| 1316 | IDirect3DDevice9_DrawPrimitive(data->device, D3DPT_TRIANGLELIST, (UINT)(first / sizeof(Vertex)), (UINT)count / 3); | ||
| 1317 | } else { | ||
| 1318 | const Vertex *verts = (Vertex *)(((Uint8 *)vertices) + first); | ||
| 1319 | IDirect3DDevice9_DrawPrimitiveUP(data->device, D3DPT_TRIANGLELIST, (UINT)count / 3, verts, sizeof(Vertex)); | ||
| 1320 | } | ||
| 1321 | break; | ||
| 1322 | } | ||
| 1323 | |||
| 1324 | case SDL_RENDERCMD_NO_OP: | ||
| 1325 | break; | ||
| 1326 | } | ||
| 1327 | |||
| 1328 | cmd = cmd->next; | ||
| 1329 | } | ||
| 1330 | |||
| 1331 | return true; | ||
| 1332 | } | ||
| 1333 | |||
| 1334 | static SDL_Surface *D3D_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 1335 | { | ||
| 1336 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1337 | D3DSURFACE_DESC desc; | ||
| 1338 | LPDIRECT3DSURFACE9 backBuffer; | ||
| 1339 | LPDIRECT3DSURFACE9 surface; | ||
| 1340 | RECT d3drect; | ||
| 1341 | D3DLOCKED_RECT locked; | ||
| 1342 | HRESULT result; | ||
| 1343 | SDL_Surface *output; | ||
| 1344 | |||
| 1345 | if (data->currentRenderTarget) { | ||
| 1346 | backBuffer = data->currentRenderTarget; | ||
| 1347 | } else { | ||
| 1348 | backBuffer = data->defaultRenderTarget; | ||
| 1349 | } | ||
| 1350 | |||
| 1351 | result = IDirect3DSurface9_GetDesc(backBuffer, &desc); | ||
| 1352 | if (FAILED(result)) { | ||
| 1353 | D3D_SetError("GetDesc()", result); | ||
| 1354 | return NULL; | ||
| 1355 | } | ||
| 1356 | |||
| 1357 | result = IDirect3DDevice9_CreateOffscreenPlainSurface(data->device, desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &surface, NULL); | ||
| 1358 | if (FAILED(result)) { | ||
| 1359 | D3D_SetError("CreateOffscreenPlainSurface()", result); | ||
| 1360 | return NULL; | ||
| 1361 | } | ||
| 1362 | |||
| 1363 | result = IDirect3DDevice9_GetRenderTargetData(data->device, backBuffer, surface); | ||
| 1364 | if (FAILED(result)) { | ||
| 1365 | IDirect3DSurface9_Release(surface); | ||
| 1366 | D3D_SetError("GetRenderTargetData()", result); | ||
| 1367 | return NULL; | ||
| 1368 | } | ||
| 1369 | |||
| 1370 | d3drect.left = rect->x; | ||
| 1371 | d3drect.right = (LONG)rect->x + rect->w; | ||
| 1372 | d3drect.top = rect->y; | ||
| 1373 | d3drect.bottom = (LONG)rect->y + rect->h; | ||
| 1374 | |||
| 1375 | result = IDirect3DSurface9_LockRect(surface, &locked, &d3drect, D3DLOCK_READONLY); | ||
| 1376 | if (FAILED(result)) { | ||
| 1377 | IDirect3DSurface9_Release(surface); | ||
| 1378 | D3D_SetError("LockRect()", result); | ||
| 1379 | return NULL; | ||
| 1380 | } | ||
| 1381 | |||
| 1382 | output = SDL_DuplicatePixels(rect->w, rect->h, D3DFMTToPixelFormat(desc.Format), SDL_COLORSPACE_SRGB, locked.pBits, locked.Pitch); | ||
| 1383 | |||
| 1384 | IDirect3DSurface9_UnlockRect(surface); | ||
| 1385 | |||
| 1386 | IDirect3DSurface9_Release(surface); | ||
| 1387 | |||
| 1388 | return output; | ||
| 1389 | } | ||
| 1390 | |||
| 1391 | static bool D3D_RenderPresent(SDL_Renderer *renderer) | ||
| 1392 | { | ||
| 1393 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1394 | HRESULT result; | ||
| 1395 | |||
| 1396 | if (!data->beginScene) { | ||
| 1397 | IDirect3DDevice9_EndScene(data->device); | ||
| 1398 | data->beginScene = true; | ||
| 1399 | } | ||
| 1400 | |||
| 1401 | result = IDirect3DDevice9_TestCooperativeLevel(data->device); | ||
| 1402 | if (result == D3DERR_DEVICELOST) { | ||
| 1403 | // We'll reset later | ||
| 1404 | return false; | ||
| 1405 | } | ||
| 1406 | if (result == D3DERR_DEVICENOTRESET) { | ||
| 1407 | D3D_Reset(renderer); | ||
| 1408 | } | ||
| 1409 | result = IDirect3DDevice9_Present(data->device, NULL, NULL, NULL, NULL); | ||
| 1410 | if (FAILED(result)) { | ||
| 1411 | return D3D_SetError("Present()", result); | ||
| 1412 | } | ||
| 1413 | return true; | ||
| 1414 | } | ||
| 1415 | |||
| 1416 | static void D3D_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1417 | { | ||
| 1418 | D3D_RenderData *renderdata = (D3D_RenderData *)renderer->internal; | ||
| 1419 | D3D_TextureData *data = (D3D_TextureData *)texture->internal; | ||
| 1420 | |||
| 1421 | if (renderdata->drawstate.texture == texture) { | ||
| 1422 | renderdata->drawstate.texture = NULL; | ||
| 1423 | renderdata->drawstate.shader = SHADER_NONE; | ||
| 1424 | renderdata->drawstate.shader_params = NULL; | ||
| 1425 | IDirect3DDevice9_SetPixelShader(renderdata->device, NULL); | ||
| 1426 | IDirect3DDevice9_SetTexture(renderdata->device, 0, NULL); | ||
| 1427 | #ifdef SDL_HAVE_YUV | ||
| 1428 | if (data->yuv) { | ||
| 1429 | IDirect3DDevice9_SetTexture(renderdata->device, 1, NULL); | ||
| 1430 | IDirect3DDevice9_SetTexture(renderdata->device, 2, NULL); | ||
| 1431 | } | ||
| 1432 | #endif | ||
| 1433 | } | ||
| 1434 | |||
| 1435 | if (!data) { | ||
| 1436 | return; | ||
| 1437 | } | ||
| 1438 | |||
| 1439 | D3D_DestroyTextureRep(&data->texture); | ||
| 1440 | #ifdef SDL_HAVE_YUV | ||
| 1441 | D3D_DestroyTextureRep(&data->utexture); | ||
| 1442 | D3D_DestroyTextureRep(&data->vtexture); | ||
| 1443 | SDL_free(data->pixels); | ||
| 1444 | #endif | ||
| 1445 | SDL_free(data); | ||
| 1446 | texture->internal = NULL; | ||
| 1447 | } | ||
| 1448 | |||
| 1449 | static void D3D_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1450 | { | ||
| 1451 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1452 | |||
| 1453 | if (data) { | ||
| 1454 | int i; | ||
| 1455 | |||
| 1456 | // Release the render target | ||
| 1457 | if (data->defaultRenderTarget) { | ||
| 1458 | IDirect3DSurface9_Release(data->defaultRenderTarget); | ||
| 1459 | data->defaultRenderTarget = NULL; | ||
| 1460 | } | ||
| 1461 | if (data->currentRenderTarget) { | ||
| 1462 | IDirect3DSurface9_Release(data->currentRenderTarget); | ||
| 1463 | data->currentRenderTarget = NULL; | ||
| 1464 | } | ||
| 1465 | #ifdef SDL_HAVE_YUV | ||
| 1466 | for (i = 0; i < SDL_arraysize(data->shaders); ++i) { | ||
| 1467 | if (data->shaders[i]) { | ||
| 1468 | IDirect3DPixelShader9_Release(data->shaders[i]); | ||
| 1469 | data->shaders[i] = NULL; | ||
| 1470 | } | ||
| 1471 | } | ||
| 1472 | #endif | ||
| 1473 | // Release all vertex buffers | ||
| 1474 | for (i = 0; i < SDL_arraysize(data->vertexBuffers); ++i) { | ||
| 1475 | if (data->vertexBuffers[i]) { | ||
| 1476 | IDirect3DVertexBuffer9_Release(data->vertexBuffers[i]); | ||
| 1477 | } | ||
| 1478 | data->vertexBuffers[i] = NULL; | ||
| 1479 | } | ||
| 1480 | if (data->device) { | ||
| 1481 | IDirect3DDevice9_Release(data->device); | ||
| 1482 | data->device = NULL; | ||
| 1483 | } | ||
| 1484 | if (data->d3d) { | ||
| 1485 | IDirect3D9_Release(data->d3d); | ||
| 1486 | SDL_UnloadObject(data->d3dDLL); | ||
| 1487 | } | ||
| 1488 | SDL_free(data); | ||
| 1489 | } | ||
| 1490 | } | ||
| 1491 | |||
| 1492 | static bool D3D_Reset(SDL_Renderer *renderer) | ||
| 1493 | { | ||
| 1494 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1495 | const Float4X4 d3dmatrix = MatrixIdentity(); | ||
| 1496 | HRESULT result; | ||
| 1497 | SDL_Texture *texture; | ||
| 1498 | int i; | ||
| 1499 | |||
| 1500 | // Cancel any scene that we've started | ||
| 1501 | if (!data->beginScene) { | ||
| 1502 | IDirect3DDevice9_EndScene(data->device); | ||
| 1503 | data->beginScene = true; | ||
| 1504 | } | ||
| 1505 | |||
| 1506 | // Release the default render target before reset | ||
| 1507 | if (data->defaultRenderTarget) { | ||
| 1508 | IDirect3DSurface9_Release(data->defaultRenderTarget); | ||
| 1509 | data->defaultRenderTarget = NULL; | ||
| 1510 | } | ||
| 1511 | if (data->currentRenderTarget) { | ||
| 1512 | IDirect3DSurface9_Release(data->currentRenderTarget); | ||
| 1513 | data->currentRenderTarget = NULL; | ||
| 1514 | } | ||
| 1515 | |||
| 1516 | // Release application render targets | ||
| 1517 | for (texture = renderer->textures; texture; texture = texture->next) { | ||
| 1518 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 1519 | D3D_DestroyTexture(renderer, texture); | ||
| 1520 | } else { | ||
| 1521 | D3D_RecreateTexture(renderer, texture); | ||
| 1522 | } | ||
| 1523 | } | ||
| 1524 | |||
| 1525 | // Release all vertex buffers | ||
| 1526 | for (i = 0; i < SDL_arraysize(data->vertexBuffers); ++i) { | ||
| 1527 | if (data->vertexBuffers[i]) { | ||
| 1528 | IDirect3DVertexBuffer9_Release(data->vertexBuffers[i]); | ||
| 1529 | } | ||
| 1530 | data->vertexBuffers[i] = NULL; | ||
| 1531 | data->vertexBufferSize[i] = 0; | ||
| 1532 | } | ||
| 1533 | |||
| 1534 | result = IDirect3DDevice9_Reset(data->device, &data->pparams); | ||
| 1535 | if (FAILED(result)) { | ||
| 1536 | if (result == D3DERR_DEVICELOST) { | ||
| 1537 | // Don't worry about it, we'll reset later... | ||
| 1538 | return true; | ||
| 1539 | } else { | ||
| 1540 | return D3D_SetError("Reset()", result); | ||
| 1541 | } | ||
| 1542 | } | ||
| 1543 | |||
| 1544 | // Allocate application render targets | ||
| 1545 | for (texture = renderer->textures; texture; texture = texture->next) { | ||
| 1546 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 1547 | D3D_CreateTexture(renderer, texture, 0); | ||
| 1548 | } | ||
| 1549 | } | ||
| 1550 | |||
| 1551 | IDirect3DDevice9_GetRenderTarget(data->device, 0, &data->defaultRenderTarget); | ||
| 1552 | D3D_InitRenderState(data); | ||
| 1553 | D3D_SetRenderTargetInternal(renderer, renderer->target); | ||
| 1554 | |||
| 1555 | D3D_InvalidateCachedState(renderer); | ||
| 1556 | |||
| 1557 | IDirect3DDevice9_SetTransform(data->device, D3DTS_VIEW, (D3DMATRIX *)&d3dmatrix); | ||
| 1558 | |||
| 1559 | // Let the application know that render targets were reset | ||
| 1560 | { | ||
| 1561 | SDL_Event event; | ||
| 1562 | SDL_zero(event); | ||
| 1563 | event.type = SDL_EVENT_RENDER_TARGETS_RESET; | ||
| 1564 | event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer)); | ||
| 1565 | SDL_PushEvent(&event); | ||
| 1566 | } | ||
| 1567 | |||
| 1568 | return true; | ||
| 1569 | } | ||
| 1570 | |||
| 1571 | static bool D3D_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 1572 | { | ||
| 1573 | D3D_RenderData *data = (D3D_RenderData *)renderer->internal; | ||
| 1574 | |||
| 1575 | DWORD PresentationInterval; | ||
| 1576 | switch (vsync) { | ||
| 1577 | case 0: | ||
| 1578 | PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; | ||
| 1579 | break; | ||
| 1580 | case 1: | ||
| 1581 | PresentationInterval = D3DPRESENT_INTERVAL_ONE; | ||
| 1582 | break; | ||
| 1583 | case 2: | ||
| 1584 | PresentationInterval = D3DPRESENT_INTERVAL_TWO; | ||
| 1585 | break; | ||
| 1586 | case 3: | ||
| 1587 | PresentationInterval = D3DPRESENT_INTERVAL_THREE; | ||
| 1588 | break; | ||
| 1589 | case 4: | ||
| 1590 | PresentationInterval = D3DPRESENT_INTERVAL_FOUR; | ||
| 1591 | break; | ||
| 1592 | default: | ||
| 1593 | return SDL_Unsupported(); | ||
| 1594 | } | ||
| 1595 | |||
| 1596 | D3DCAPS9 caps; | ||
| 1597 | HRESULT result = IDirect3D9_GetDeviceCaps(data->d3d, data->adapter, D3DDEVTYPE_HAL, &caps); | ||
| 1598 | if (FAILED(result)) { | ||
| 1599 | return D3D_SetError("GetDeviceCaps()", result); | ||
| 1600 | } | ||
| 1601 | if (!(caps.PresentationIntervals & PresentationInterval)) { | ||
| 1602 | return SDL_Unsupported(); | ||
| 1603 | } | ||
| 1604 | data->pparams.PresentationInterval = PresentationInterval; | ||
| 1605 | |||
| 1606 | if (!D3D_Reset(renderer)) { | ||
| 1607 | // D3D_Reset will call SDL_SetError() | ||
| 1608 | return false; | ||
| 1609 | } | ||
| 1610 | return true; | ||
| 1611 | } | ||
| 1612 | |||
| 1613 | static bool D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 1614 | { | ||
| 1615 | D3D_RenderData *data; | ||
| 1616 | HRESULT result; | ||
| 1617 | HWND hwnd; | ||
| 1618 | D3DPRESENT_PARAMETERS pparams; | ||
| 1619 | IDirect3DSwapChain9 *chain; | ||
| 1620 | D3DCAPS9 caps; | ||
| 1621 | DWORD device_flags; | ||
| 1622 | int w, h; | ||
| 1623 | SDL_DisplayID displayID; | ||
| 1624 | const SDL_DisplayMode *fullscreen_mode = NULL; | ||
| 1625 | |||
| 1626 | hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); | ||
| 1627 | if (!hwnd) { | ||
| 1628 | return SDL_SetError("Couldn't get window handle"); | ||
| 1629 | } | ||
| 1630 | |||
| 1631 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 1632 | |||
| 1633 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 1634 | return SDL_SetError("Unsupported output colorspace"); | ||
| 1635 | } | ||
| 1636 | |||
| 1637 | data = (D3D_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 1638 | if (!data) { | ||
| 1639 | return false; | ||
| 1640 | } | ||
| 1641 | |||
| 1642 | if (!D3D_LoadDLL(&data->d3dDLL, &data->d3d)) { | ||
| 1643 | SDL_free(data); | ||
| 1644 | return SDL_SetError("Unable to create Direct3D interface"); | ||
| 1645 | } | ||
| 1646 | |||
| 1647 | renderer->WindowEvent = D3D_WindowEvent; | ||
| 1648 | renderer->SupportsBlendMode = D3D_SupportsBlendMode; | ||
| 1649 | renderer->CreateTexture = D3D_CreateTexture; | ||
| 1650 | renderer->UpdateTexture = D3D_UpdateTexture; | ||
| 1651 | #ifdef SDL_HAVE_YUV | ||
| 1652 | renderer->UpdateTextureYUV = D3D_UpdateTextureYUV; | ||
| 1653 | #endif | ||
| 1654 | renderer->LockTexture = D3D_LockTexture; | ||
| 1655 | renderer->UnlockTexture = D3D_UnlockTexture; | ||
| 1656 | renderer->SetTextureScaleMode = D3D_SetTextureScaleMode; | ||
| 1657 | renderer->SetRenderTarget = D3D_SetRenderTarget; | ||
| 1658 | renderer->QueueSetViewport = D3D_QueueNoOp; | ||
| 1659 | renderer->QueueSetDrawColor = D3D_QueueNoOp; | ||
| 1660 | renderer->QueueDrawPoints = D3D_QueueDrawPoints; | ||
| 1661 | renderer->QueueDrawLines = D3D_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 1662 | renderer->QueueGeometry = D3D_QueueGeometry; | ||
| 1663 | renderer->InvalidateCachedState = D3D_InvalidateCachedState; | ||
| 1664 | renderer->RunCommandQueue = D3D_RunCommandQueue; | ||
| 1665 | renderer->RenderReadPixels = D3D_RenderReadPixels; | ||
| 1666 | renderer->RenderPresent = D3D_RenderPresent; | ||
| 1667 | renderer->DestroyTexture = D3D_DestroyTexture; | ||
| 1668 | renderer->DestroyRenderer = D3D_DestroyRenderer; | ||
| 1669 | renderer->SetVSync = D3D_SetVSync; | ||
| 1670 | renderer->internal = data; | ||
| 1671 | D3D_InvalidateCachedState(renderer); | ||
| 1672 | |||
| 1673 | renderer->name = D3D_RenderDriver.name; | ||
| 1674 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 1675 | |||
| 1676 | SDL_GetWindowSizeInPixels(window, &w, &h); | ||
| 1677 | if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) { | ||
| 1678 | fullscreen_mode = SDL_GetWindowFullscreenMode(window); | ||
| 1679 | } | ||
| 1680 | |||
| 1681 | SDL_zero(pparams); | ||
| 1682 | pparams.hDeviceWindow = hwnd; | ||
| 1683 | pparams.BackBufferWidth = w; | ||
| 1684 | pparams.BackBufferHeight = h; | ||
| 1685 | pparams.BackBufferCount = 1; | ||
| 1686 | pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; | ||
| 1687 | |||
| 1688 | if (fullscreen_mode) { | ||
| 1689 | pparams.Windowed = FALSE; | ||
| 1690 | pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode->format); | ||
| 1691 | pparams.FullScreen_RefreshRateInHz = (UINT)SDL_ceilf(fullscreen_mode->refresh_rate); | ||
| 1692 | } else { | ||
| 1693 | pparams.Windowed = TRUE; | ||
| 1694 | pparams.BackBufferFormat = D3DFMT_UNKNOWN; | ||
| 1695 | pparams.FullScreen_RefreshRateInHz = 0; | ||
| 1696 | } | ||
| 1697 | pparams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; | ||
| 1698 | |||
| 1699 | // Get the adapter for the display that the window is on | ||
| 1700 | displayID = SDL_GetDisplayForWindow(window); | ||
| 1701 | data->adapter = SDL_GetDirect3D9AdapterIndex(displayID); | ||
| 1702 | |||
| 1703 | result = IDirect3D9_GetDeviceCaps(data->d3d, data->adapter, D3DDEVTYPE_HAL, &caps); | ||
| 1704 | if (FAILED(result)) { | ||
| 1705 | return D3D_SetError("GetDeviceCaps()", result); | ||
| 1706 | } | ||
| 1707 | |||
| 1708 | device_flags = D3DCREATE_FPU_PRESERVE; | ||
| 1709 | if (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) { | ||
| 1710 | device_flags |= D3DCREATE_HARDWARE_VERTEXPROCESSING; | ||
| 1711 | } else { | ||
| 1712 | device_flags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING; | ||
| 1713 | } | ||
| 1714 | |||
| 1715 | if (SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D_THREADSAFE, false)) { | ||
| 1716 | device_flags |= D3DCREATE_MULTITHREADED; | ||
| 1717 | } | ||
| 1718 | |||
| 1719 | result = IDirect3D9_CreateDevice(data->d3d, data->adapter, | ||
| 1720 | D3DDEVTYPE_HAL, | ||
| 1721 | pparams.hDeviceWindow, | ||
| 1722 | device_flags, | ||
| 1723 | &pparams, &data->device); | ||
| 1724 | if (FAILED(result)) { | ||
| 1725 | return D3D_SetError("CreateDevice()", result); | ||
| 1726 | } | ||
| 1727 | |||
| 1728 | // Get presentation parameters to fill info | ||
| 1729 | result = IDirect3DDevice9_GetSwapChain(data->device, 0, &chain); | ||
| 1730 | if (FAILED(result)) { | ||
| 1731 | return D3D_SetError("GetSwapChain()", result); | ||
| 1732 | } | ||
| 1733 | result = IDirect3DSwapChain9_GetPresentParameters(chain, &pparams); | ||
| 1734 | if (FAILED(result)) { | ||
| 1735 | IDirect3DSwapChain9_Release(chain); | ||
| 1736 | return D3D_SetError("GetPresentParameters()", result); | ||
| 1737 | } | ||
| 1738 | IDirect3DSwapChain9_Release(chain); | ||
| 1739 | data->pparams = pparams; | ||
| 1740 | |||
| 1741 | IDirect3DDevice9_GetDeviceCaps(data->device, &caps); | ||
| 1742 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, SDL_min(caps.MaxTextureWidth, caps.MaxTextureHeight)); | ||
| 1743 | |||
| 1744 | if (caps.PrimitiveMiscCaps & D3DPMISCCAPS_SEPARATEALPHABLEND) { | ||
| 1745 | data->enableSeparateAlphaBlend = true; | ||
| 1746 | } | ||
| 1747 | |||
| 1748 | // Store the default render target | ||
| 1749 | IDirect3DDevice9_GetRenderTarget(data->device, 0, &data->defaultRenderTarget); | ||
| 1750 | data->currentRenderTarget = NULL; | ||
| 1751 | |||
| 1752 | // Set up parameters for rendering | ||
| 1753 | D3D_InitRenderState(data); | ||
| 1754 | #ifdef SDL_HAVE_YUV | ||
| 1755 | if (caps.MaxSimultaneousTextures >= 3) { | ||
| 1756 | int i; | ||
| 1757 | for (i = SHADER_NONE + 1; i < SDL_arraysize(data->shaders); ++i) { | ||
| 1758 | result = D3D9_CreatePixelShader(data->device, (D3D9_Shader)i, &data->shaders[i]); | ||
| 1759 | if (FAILED(result)) { | ||
| 1760 | D3D_SetError("CreatePixelShader()", result); | ||
| 1761 | } | ||
| 1762 | } | ||
| 1763 | if (data->shaders[SHADER_YUV]) { | ||
| 1764 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 1765 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 1766 | } | ||
| 1767 | } | ||
| 1768 | #endif | ||
| 1769 | |||
| 1770 | SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D9_DEVICE_POINTER, data->device); | ||
| 1771 | |||
| 1772 | return true; | ||
| 1773 | } | ||
| 1774 | |||
| 1775 | SDL_RenderDriver D3D_RenderDriver = { | ||
| 1776 | D3D_CreateRenderer, "direct3d" | ||
| 1777 | }; | ||
| 1778 | #endif // SDL_VIDEO_RENDER_D3D | ||
diff --git a/SDL-3.2.8/src/render/direct3d/SDL_shaders_d3d.c b/SDL-3.2.8/src/render/direct3d/SDL_shaders_d3d.c new file mode 100644 index 0000000..9b1b4b5 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d/SDL_shaders_d3d.c | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_D3D | ||
| 24 | |||
| 25 | #include "../../core/windows/SDL_windows.h" | ||
| 26 | |||
| 27 | #include <d3d9.h> | ||
| 28 | |||
| 29 | #include "SDL_shaders_d3d.h" | ||
| 30 | |||
| 31 | // The shaders here were compiled with compile_shaders.bat | ||
| 32 | |||
| 33 | #define g_ps20_main D3D9_PixelShader_YUV | ||
| 34 | #include "D3D9_PixelShader_YUV.h" | ||
| 35 | #undef g_ps20_main | ||
| 36 | |||
| 37 | static const BYTE *D3D9_shaders[] = { | ||
| 38 | NULL, | ||
| 39 | D3D9_PixelShader_YUV | ||
| 40 | }; | ||
| 41 | SDL_COMPILE_TIME_ASSERT(D3D9_shaders, SDL_arraysize(D3D9_shaders) == NUM_SHADERS); | ||
| 42 | |||
| 43 | HRESULT D3D9_CreatePixelShader(IDirect3DDevice9 *d3dDevice, D3D9_Shader shader, IDirect3DPixelShader9 **pixelShader) | ||
| 44 | { | ||
| 45 | return IDirect3DDevice9_CreatePixelShader(d3dDevice, (const DWORD *)D3D9_shaders[shader], pixelShader); | ||
| 46 | } | ||
| 47 | |||
| 48 | #endif // SDL_VIDEO_RENDER_D3D | ||
diff --git a/SDL-3.2.8/src/render/direct3d/SDL_shaders_d3d.h b/SDL-3.2.8/src/render/direct3d/SDL_shaders_d3d.h new file mode 100644 index 0000000..90ef7a9 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d/SDL_shaders_d3d.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | // D3D9 shader implementation | ||
| 24 | |||
| 25 | typedef enum | ||
| 26 | { | ||
| 27 | SHADER_NONE, | ||
| 28 | SHADER_YUV, | ||
| 29 | NUM_SHADERS | ||
| 30 | } D3D9_Shader; | ||
| 31 | |||
| 32 | extern HRESULT D3D9_CreatePixelShader(IDirect3DDevice9 *d3dDevice, D3D9_Shader shader, IDirect3DPixelShader9 **pixelShader); | ||
diff --git a/SDL-3.2.8/src/render/direct3d/compile_shaders.bat b/SDL-3.2.8/src/render/direct3d/compile_shaders.bat new file mode 100644 index 0000000..81d513e --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d/compile_shaders.bat | |||
| @@ -0,0 +1 @@ | |||
| fxc /T ps_2_0 /Fh D3D9_PixelShader_YUV.h D3D9_PixelShader_YUV.hlsl | |||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Advanced.h b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Advanced.h new file mode 100644 index 0000000..a1297c9 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Advanced.h | |||
| @@ -0,0 +1,1060 @@ | |||
| 1 | #if 0 | ||
| 2 | // | ||
| 3 | // Generated by Microsoft (R) HLSL Shader Compiler 10.1 | ||
| 4 | // | ||
| 5 | // | ||
| 6 | // Buffer Definitions: | ||
| 7 | // | ||
| 8 | // cbuffer Constants | ||
| 9 | // { | ||
| 10 | // | ||
| 11 | // float scRGB_output; // Offset: 0 Size: 4 | ||
| 12 | // float texture_type; // Offset: 4 Size: 4 | ||
| 13 | // float input_type; // Offset: 8 Size: 4 | ||
| 14 | // float color_scale; // Offset: 12 Size: 4 | ||
| 15 | // float tonemap_method; // Offset: 16 Size: 4 | ||
| 16 | // float tonemap_factor1; // Offset: 20 Size: 4 | ||
| 17 | // float tonemap_factor2; // Offset: 24 Size: 4 | ||
| 18 | // float sdr_white_point; // Offset: 28 Size: 4 | ||
| 19 | // float4 Yoffset; // Offset: 32 Size: 16 | ||
| 20 | // float4 Rcoeff; // Offset: 48 Size: 16 | ||
| 21 | // float4 Gcoeff; // Offset: 64 Size: 16 | ||
| 22 | // float4 Bcoeff; // Offset: 80 Size: 16 | ||
| 23 | // | ||
| 24 | // } | ||
| 25 | // | ||
| 26 | // | ||
| 27 | // Resource Bindings: | ||
| 28 | // | ||
| 29 | // Name Type Format Dim HLSL Bind Count | ||
| 30 | // ------------------------------ ---------- ------- ----------- -------------- ------ | ||
| 31 | // sampler0 sampler NA NA s0 1 | ||
| 32 | // texture0 texture float4 2d t0 1 | ||
| 33 | // texture1 texture float4 2d t1 1 | ||
| 34 | // texture2 texture float4 2d t2 1 | ||
| 35 | // Constants cbuffer NA NA cb0 1 | ||
| 36 | // | ||
| 37 | // | ||
| 38 | // | ||
| 39 | // Input signature: | ||
| 40 | // | ||
| 41 | // Name Index Mask Register SysValue Format Used | ||
| 42 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 43 | // SV_POSITION 0 xyzw 0 POS float | ||
| 44 | // TEXCOORD 0 xy 1 NONE float xy | ||
| 45 | // COLOR 0 xyzw 2 NONE float xyzw | ||
| 46 | // | ||
| 47 | // | ||
| 48 | // Output signature: | ||
| 49 | // | ||
| 50 | // Name Index Mask Register SysValue Format Used | ||
| 51 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 52 | // SV_TARGET 0 xyzw 0 TARGET float xyzw | ||
| 53 | // | ||
| 54 | ps_5_0 | ||
| 55 | dcl_globalFlags refactoringAllowed | ||
| 56 | dcl_constantbuffer CB0[6], immediateIndexed | ||
| 57 | dcl_sampler s0, mode_default | ||
| 58 | dcl_resource_texture2d (float,float,float,float) t0 | ||
| 59 | dcl_resource_texture2d (float,float,float,float) t1 | ||
| 60 | dcl_resource_texture2d (float,float,float,float) t2 | ||
| 61 | dcl_input_ps linear v1.xy | ||
| 62 | dcl_input_ps linear v2.xyzw | ||
| 63 | dcl_output o0.xyzw | ||
| 64 | dcl_temps 7 | ||
| 65 | eq r0.xyzw, cb0[0].yzzz, l(0.000000, 3.000000, 2.000000, 1.000000) | ||
| 66 | if_nz r0.x | ||
| 67 | mov r1.xyzw, l(1.000000,1.000000,1.000000,1.000000) | ||
| 68 | else | ||
| 69 | eq r0.x, cb0[0].y, l(1.000000) | ||
| 70 | if_nz r0.x | ||
| 71 | sample_indexable(texture2d)(float,float,float,float) r1.xyzw, v1.xyxx, t0.xyzw, s0 | ||
| 72 | else | ||
| 73 | eq r0.x, cb0[0].y, l(2.000000) | ||
| 74 | if_nz r0.x | ||
| 75 | sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0 | ||
| 76 | sample_indexable(texture2d)(float,float,float,float) r2.yz, v1.xyxx, t1.zxyw, s0 | ||
| 77 | add r2.xyz, r2.xyzx, cb0[2].xyzx | ||
| 78 | dp3 r1.x, r2.xyzx, cb0[3].xyzx | ||
| 79 | dp3 r1.y, r2.xyzx, cb0[4].xyzx | ||
| 80 | dp3 r1.z, r2.xyzx, cb0[5].xyzx | ||
| 81 | else | ||
| 82 | eq r0.x, cb0[0].y, l(3.000000) | ||
| 83 | if_nz r0.x | ||
| 84 | sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0 | ||
| 85 | sample_indexable(texture2d)(float,float,float,float) r2.yz, v1.xyxx, t1.zyxw, s0 | ||
| 86 | add r2.xyz, r2.xyzx, cb0[2].xyzx | ||
| 87 | dp3 r1.x, r2.xyzx, cb0[3].xyzx | ||
| 88 | dp3 r1.y, r2.xyzx, cb0[4].xyzx | ||
| 89 | dp3 r1.z, r2.xyzx, cb0[5].xyzx | ||
| 90 | else | ||
| 91 | eq r0.x, cb0[0].y, l(4.000000) | ||
| 92 | if_nz r0.x | ||
| 93 | sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0 | ||
| 94 | sample_indexable(texture2d)(float,float,float,float) r2.y, v1.xyxx, t1.yxzw, s0 | ||
| 95 | sample_indexable(texture2d)(float,float,float,float) r2.z, v1.xyxx, t2.yzxw, s0 | ||
| 96 | add r2.xyz, r2.xyzx, cb0[2].xyzx | ||
| 97 | dp3 r1.x, r2.xyzx, cb0[3].xyzx | ||
| 98 | dp3 r1.y, r2.xyzx, cb0[4].xyzx | ||
| 99 | dp3 r1.z, r2.xyzx, cb0[5].xyzx | ||
| 100 | else | ||
| 101 | mov r1.xyz, l(1.000000,0,0,0) | ||
| 102 | endif | ||
| 103 | endif | ||
| 104 | endif | ||
| 105 | mov r1.w, l(1.000000) | ||
| 106 | endif | ||
| 107 | endif | ||
| 108 | log r2.xyz, |r1.xyzx| | ||
| 109 | mul r2.xyz, r2.xyzx, l(0.012683, 0.012683, 0.012683, 0.000000) | ||
| 110 | exp r2.xyz, r2.xyzx | ||
| 111 | add r3.xyz, r2.xyzx, l(-0.835938, -0.835938, -0.835938, 0.000000) | ||
| 112 | max r3.xyz, r3.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) | ||
| 113 | mad r2.xyz, -r2.xyzx, l(18.687500, 18.687500, 18.687500, 0.000000), l(18.851562, 18.851562, 18.851562, 0.000000) | ||
| 114 | div r2.xyz, r3.xyzx, r2.xyzx | ||
| 115 | log r2.xyz, |r2.xyzx| | ||
| 116 | mul r2.xyz, r2.xyzx, l(6.277395, 6.277395, 6.277395, 0.000000) | ||
| 117 | exp r2.xyz, r2.xyzx | ||
| 118 | mul r2.xyz, r2.xyzx, l(10000.000000, 10000.000000, 10000.000000, 0.000000) | ||
| 119 | div r2.xyz, r2.xyzx, cb0[1].wwww | ||
| 120 | movc r2.xyz, r0.yyyy, r2.xyzx, r1.xyzx | ||
| 121 | ne r0.x, cb0[1].x, l(0.000000) | ||
| 122 | mul r3.xyz, r2.xyzx, cb0[1].yyyy | ||
| 123 | eq r4.xy, cb0[1].xxxx, l(1.000000, 2.000000, 0.000000, 0.000000) | ||
| 124 | dp3 r5.x, l(0.627404, 0.329283, 0.043313, 0.000000), r2.xyzx | ||
| 125 | dp3 r5.y, l(0.069097, 0.919541, 0.011362, 0.000000), r2.xyzx | ||
| 126 | dp3 r5.z, l(0.016391, 0.088013, 0.895595, 0.000000), r2.xyzx | ||
| 127 | movc r5.xyz, r0.zzzz, r5.xyzx, r2.xyzx | ||
| 128 | max r2.w, r5.z, r5.y | ||
| 129 | max r2.w, r2.w, r5.x | ||
| 130 | lt r3.w, l(0.000000), r2.w | ||
| 131 | mad r4.zw, cb0[1].yyyz, r2.wwww, l(0.000000, 0.000000, 1.000000, 1.000000) | ||
| 132 | div r2.w, r4.z, r4.w | ||
| 133 | mul r6.xyz, r2.wwww, r5.xyzx | ||
| 134 | movc r5.xyz, r3.wwww, r6.xyzx, r5.xyzx | ||
| 135 | dp3 r6.x, l(1.660496, -0.587656, -0.072840, 0.000000), r5.xyzx | ||
| 136 | dp3 r6.y, l(-0.124547, 1.132895, -0.008348, 0.000000), r5.xyzx | ||
| 137 | dp3 r6.z, l(-0.018154, -0.100597, 1.118751, 0.000000), r5.xyzx | ||
| 138 | movc r5.xyz, r0.zzzz, r6.xyzx, r5.xyzx | ||
| 139 | movc r4.yzw, r4.yyyy, r5.xxyz, r2.xxyz | ||
| 140 | movc r3.xyz, r4.xxxx, r3.xyzx, r4.yzwy | ||
| 141 | movc r2.xyz, r0.xxxx, r3.xyzx, r2.xyzx | ||
| 142 | if_nz r0.w | ||
| 143 | ne r0.x, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[0].x | ||
| 144 | if_nz r0.x | ||
| 145 | ge r3.xyz, l(0.040450, 0.040450, 0.040450, 0.000000), r2.xyzx | ||
| 146 | mul r4.xyz, r2.xyzx, l(0.077399, 0.077399, 0.077399, 0.000000) | ||
| 147 | add r5.xyz, r2.xyzx, l(0.055000, 0.055000, 0.055000, 0.000000) | ||
| 148 | mul r5.xyz, |r5.xyzx|, l(0.947867, 0.947867, 0.947867, 0.000000) | ||
| 149 | log r5.xyz, r5.xyzx | ||
| 150 | mul r5.xyz, r5.xyzx, l(2.400000, 2.400000, 2.400000, 0.000000) | ||
| 151 | exp r5.xyz, r5.xyzx | ||
| 152 | movc r2.xyz, r3.xyzx, r4.xyzx, r5.xyzx | ||
| 153 | endif | ||
| 154 | mul r1.xyz, r2.xyzx, cb0[0].wwww | ||
| 155 | else | ||
| 156 | if_nz r0.z | ||
| 157 | mul r1.xyz, r2.xyzx, cb0[0].wwww | ||
| 158 | ne r0.x, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[0].x | ||
| 159 | if_z r0.x | ||
| 160 | ge r0.xzw, l(0.003131, 0.000000, 0.003131, 0.003131), r1.xxyz | ||
| 161 | mul r3.xyz, r1.xyzx, l(12.920000, 12.920000, 12.920000, 0.000000) | ||
| 162 | log r4.xyz, |r1.xyzx| | ||
| 163 | mul r4.xyz, r4.xyzx, l(0.416667, 0.416667, 0.416667, 0.000000) | ||
| 164 | exp r4.xyz, r4.xyzx | ||
| 165 | mad r4.xyz, r4.xyzx, l(1.055000, 1.055000, 1.055000, 0.000000), l(-0.055000, -0.055000, -0.055000, 0.000000) | ||
| 166 | movc_sat r1.xyz, r0.xzwx, r3.xyzx, r4.xyzx | ||
| 167 | endif | ||
| 168 | else | ||
| 169 | if_nz r0.y | ||
| 170 | dp3 r0.x, l(1.660496, -0.587656, -0.072840, 0.000000), r2.xyzx | ||
| 171 | dp3 r0.y, l(-0.124547, 1.132895, -0.008348, 0.000000), r2.xyzx | ||
| 172 | dp3 r0.z, l(-0.018154, -0.100597, 1.118751, 0.000000), r2.xyzx | ||
| 173 | mul r1.xyz, r0.xyzx, cb0[0].wwww | ||
| 174 | ne r0.x, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[0].x | ||
| 175 | if_z r0.x | ||
| 176 | ge r0.xyz, l(0.003131, 0.003131, 0.003131, 0.000000), r1.xyzx | ||
| 177 | mul r3.xyz, r1.xyzx, l(12.920000, 12.920000, 12.920000, 0.000000) | ||
| 178 | log r4.xyz, |r1.xyzx| | ||
| 179 | mul r4.xyz, r4.xyzx, l(0.416667, 0.416667, 0.416667, 0.000000) | ||
| 180 | exp r4.xyz, r4.xyzx | ||
| 181 | mad r4.xyz, r4.xyzx, l(1.055000, 1.055000, 1.055000, 0.000000), l(-0.055000, -0.055000, -0.055000, 0.000000) | ||
| 182 | movc_sat r1.xyz, r0.xyzx, r3.xyzx, r4.xyzx | ||
| 183 | endif | ||
| 184 | else | ||
| 185 | mul r1.xyz, r2.xyzx, cb0[0].wwww | ||
| 186 | endif | ||
| 187 | endif | ||
| 188 | endif | ||
| 189 | mul o0.xyzw, r1.xyzw, v2.xyzw | ||
| 190 | ret | ||
| 191 | // Approximately 126 instruction slots used | ||
| 192 | #endif | ||
| 193 | |||
| 194 | const BYTE g_main[] = | ||
| 195 | { | ||
| 196 | 68, 88, 66, 67, 154, 200, | ||
| 197 | 28, 25, 30, 140, 0, 183, | ||
| 198 | 251, 32, 6, 185, 210, 29, | ||
| 199 | 251, 110, 1, 0, 0, 0, | ||
| 200 | 64, 20, 0, 0, 5, 0, | ||
| 201 | 0, 0, 52, 0, 0, 0, | ||
| 202 | 80, 4, 0, 0, 196, 4, | ||
| 203 | 0, 0, 248, 4, 0, 0, | ||
| 204 | 164, 19, 0, 0, 82, 68, | ||
| 205 | 69, 70, 20, 4, 0, 0, | ||
| 206 | 1, 0, 0, 0, 12, 1, | ||
| 207 | 0, 0, 5, 0, 0, 0, | ||
| 208 | 60, 0, 0, 0, 0, 5, | ||
| 209 | 255, 255, 0, 1, 0, 0, | ||
| 210 | 233, 3, 0, 0, 82, 68, | ||
| 211 | 49, 49, 60, 0, 0, 0, | ||
| 212 | 24, 0, 0, 0, 32, 0, | ||
| 213 | 0, 0, 40, 0, 0, 0, | ||
| 214 | 36, 0, 0, 0, 12, 0, | ||
| 215 | 0, 0, 0, 0, 0, 0, | ||
| 216 | 220, 0, 0, 0, 3, 0, | ||
| 217 | 0, 0, 0, 0, 0, 0, | ||
| 218 | 0, 0, 0, 0, 0, 0, | ||
| 219 | 0, 0, 0, 0, 0, 0, | ||
| 220 | 1, 0, 0, 0, 1, 0, | ||
| 221 | 0, 0, 229, 0, 0, 0, | ||
| 222 | 2, 0, 0, 0, 5, 0, | ||
| 223 | 0, 0, 4, 0, 0, 0, | ||
| 224 | 255, 255, 255, 255, 0, 0, | ||
| 225 | 0, 0, 1, 0, 0, 0, | ||
| 226 | 13, 0, 0, 0, 238, 0, | ||
| 227 | 0, 0, 2, 0, 0, 0, | ||
| 228 | 5, 0, 0, 0, 4, 0, | ||
| 229 | 0, 0, 255, 255, 255, 255, | ||
| 230 | 1, 0, 0, 0, 1, 0, | ||
| 231 | 0, 0, 13, 0, 0, 0, | ||
| 232 | 247, 0, 0, 0, 2, 0, | ||
| 233 | 0, 0, 5, 0, 0, 0, | ||
| 234 | 4, 0, 0, 0, 255, 255, | ||
| 235 | 255, 255, 2, 0, 0, 0, | ||
| 236 | 1, 0, 0, 0, 13, 0, | ||
| 237 | 0, 0, 0, 1, 0, 0, | ||
| 238 | 0, 0, 0, 0, 0, 0, | ||
| 239 | 0, 0, 0, 0, 0, 0, | ||
| 240 | 0, 0, 0, 0, 0, 0, | ||
| 241 | 0, 0, 1, 0, 0, 0, | ||
| 242 | 1, 0, 0, 0, 115, 97, | ||
| 243 | 109, 112, 108, 101, 114, 48, | ||
| 244 | 0, 116, 101, 120, 116, 117, | ||
| 245 | 114, 101, 48, 0, 116, 101, | ||
| 246 | 120, 116, 117, 114, 101, 49, | ||
| 247 | 0, 116, 101, 120, 116, 117, | ||
| 248 | 114, 101, 50, 0, 67, 111, | ||
| 249 | 110, 115, 116, 97, 110, 116, | ||
| 250 | 115, 0, 171, 171, 0, 1, | ||
| 251 | 0, 0, 12, 0, 0, 0, | ||
| 252 | 36, 1, 0, 0, 96, 0, | ||
| 253 | 0, 0, 0, 0, 0, 0, | ||
| 254 | 0, 0, 0, 0, 4, 3, | ||
| 255 | 0, 0, 0, 0, 0, 0, | ||
| 256 | 4, 0, 0, 0, 2, 0, | ||
| 257 | 0, 0, 24, 3, 0, 0, | ||
| 258 | 0, 0, 0, 0, 255, 255, | ||
| 259 | 255, 255, 0, 0, 0, 0, | ||
| 260 | 255, 255, 255, 255, 0, 0, | ||
| 261 | 0, 0, 60, 3, 0, 0, | ||
| 262 | 4, 0, 0, 0, 4, 0, | ||
| 263 | 0, 0, 2, 0, 0, 0, | ||
| 264 | 24, 3, 0, 0, 0, 0, | ||
| 265 | 0, 0, 255, 255, 255, 255, | ||
| 266 | 0, 0, 0, 0, 255, 255, | ||
| 267 | 255, 255, 0, 0, 0, 0, | ||
| 268 | 73, 3, 0, 0, 8, 0, | ||
| 269 | 0, 0, 4, 0, 0, 0, | ||
| 270 | 2, 0, 0, 0, 24, 3, | ||
| 271 | 0, 0, 0, 0, 0, 0, | ||
| 272 | 255, 255, 255, 255, 0, 0, | ||
| 273 | 0, 0, 255, 255, 255, 255, | ||
| 274 | 0, 0, 0, 0, 84, 3, | ||
| 275 | 0, 0, 12, 0, 0, 0, | ||
| 276 | 4, 0, 0, 0, 2, 0, | ||
| 277 | 0, 0, 24, 3, 0, 0, | ||
| 278 | 0, 0, 0, 0, 255, 255, | ||
| 279 | 255, 255, 0, 0, 0, 0, | ||
| 280 | 255, 255, 255, 255, 0, 0, | ||
| 281 | 0, 0, 96, 3, 0, 0, | ||
| 282 | 16, 0, 0, 0, 4, 0, | ||
| 283 | 0, 0, 2, 0, 0, 0, | ||
| 284 | 24, 3, 0, 0, 0, 0, | ||
| 285 | 0, 0, 255, 255, 255, 255, | ||
| 286 | 0, 0, 0, 0, 255, 255, | ||
| 287 | 255, 255, 0, 0, 0, 0, | ||
| 288 | 111, 3, 0, 0, 20, 0, | ||
| 289 | 0, 0, 4, 0, 0, 0, | ||
| 290 | 2, 0, 0, 0, 24, 3, | ||
| 291 | 0, 0, 0, 0, 0, 0, | ||
| 292 | 255, 255, 255, 255, 0, 0, | ||
| 293 | 0, 0, 255, 255, 255, 255, | ||
| 294 | 0, 0, 0, 0, 127, 3, | ||
| 295 | 0, 0, 24, 0, 0, 0, | ||
| 296 | 4, 0, 0, 0, 2, 0, | ||
| 297 | 0, 0, 24, 3, 0, 0, | ||
| 298 | 0, 0, 0, 0, 255, 255, | ||
| 299 | 255, 255, 0, 0, 0, 0, | ||
| 300 | 255, 255, 255, 255, 0, 0, | ||
| 301 | 0, 0, 143, 3, 0, 0, | ||
| 302 | 28, 0, 0, 0, 4, 0, | ||
| 303 | 0, 0, 2, 0, 0, 0, | ||
| 304 | 24, 3, 0, 0, 0, 0, | ||
| 305 | 0, 0, 255, 255, 255, 255, | ||
| 306 | 0, 0, 0, 0, 255, 255, | ||
| 307 | 255, 255, 0, 0, 0, 0, | ||
| 308 | 159, 3, 0, 0, 32, 0, | ||
| 309 | 0, 0, 16, 0, 0, 0, | ||
| 310 | 2, 0, 0, 0, 176, 3, | ||
| 311 | 0, 0, 0, 0, 0, 0, | ||
| 312 | 255, 255, 255, 255, 0, 0, | ||
| 313 | 0, 0, 255, 255, 255, 255, | ||
| 314 | 0, 0, 0, 0, 212, 3, | ||
| 315 | 0, 0, 48, 0, 0, 0, | ||
| 316 | 16, 0, 0, 0, 2, 0, | ||
| 317 | 0, 0, 176, 3, 0, 0, | ||
| 318 | 0, 0, 0, 0, 255, 255, | ||
| 319 | 255, 255, 0, 0, 0, 0, | ||
| 320 | 255, 255, 255, 255, 0, 0, | ||
| 321 | 0, 0, 219, 3, 0, 0, | ||
| 322 | 64, 0, 0, 0, 16, 0, | ||
| 323 | 0, 0, 2, 0, 0, 0, | ||
| 324 | 176, 3, 0, 0, 0, 0, | ||
| 325 | 0, 0, 255, 255, 255, 255, | ||
| 326 | 0, 0, 0, 0, 255, 255, | ||
| 327 | 255, 255, 0, 0, 0, 0, | ||
| 328 | 226, 3, 0, 0, 80, 0, | ||
| 329 | 0, 0, 16, 0, 0, 0, | ||
| 330 | 2, 0, 0, 0, 176, 3, | ||
| 331 | 0, 0, 0, 0, 0, 0, | ||
| 332 | 255, 255, 255, 255, 0, 0, | ||
| 333 | 0, 0, 255, 255, 255, 255, | ||
| 334 | 0, 0, 0, 0, 115, 99, | ||
| 335 | 82, 71, 66, 95, 111, 117, | ||
| 336 | 116, 112, 117, 116, 0, 102, | ||
| 337 | 108, 111, 97, 116, 0, 171, | ||
| 338 | 0, 0, 3, 0, 1, 0, | ||
| 339 | 1, 0, 0, 0, 0, 0, | ||
| 340 | 0, 0, 0, 0, 0, 0, | ||
| 341 | 0, 0, 0, 0, 0, 0, | ||
| 342 | 0, 0, 0, 0, 0, 0, | ||
| 343 | 0, 0, 17, 3, 0, 0, | ||
| 344 | 116, 101, 120, 116, 117, 114, | ||
| 345 | 101, 95, 116, 121, 112, 101, | ||
| 346 | 0, 105, 110, 112, 117, 116, | ||
| 347 | 95, 116, 121, 112, 101, 0, | ||
| 348 | 99, 111, 108, 111, 114, 95, | ||
| 349 | 115, 99, 97, 108, 101, 0, | ||
| 350 | 116, 111, 110, 101, 109, 97, | ||
| 351 | 112, 95, 109, 101, 116, 104, | ||
| 352 | 111, 100, 0, 116, 111, 110, | ||
| 353 | 101, 109, 97, 112, 95, 102, | ||
| 354 | 97, 99, 116, 111, 114, 49, | ||
| 355 | 0, 116, 111, 110, 101, 109, | ||
| 356 | 97, 112, 95, 102, 97, 99, | ||
| 357 | 116, 111, 114, 50, 0, 115, | ||
| 358 | 100, 114, 95, 119, 104, 105, | ||
| 359 | 116, 101, 95, 112, 111, 105, | ||
| 360 | 110, 116, 0, 89, 111, 102, | ||
| 361 | 102, 115, 101, 116, 0, 102, | ||
| 362 | 108, 111, 97, 116, 52, 0, | ||
| 363 | 171, 171, 1, 0, 3, 0, | ||
| 364 | 1, 0, 4, 0, 0, 0, | ||
| 365 | 0, 0, 0, 0, 0, 0, | ||
| 366 | 0, 0, 0, 0, 0, 0, | ||
| 367 | 0, 0, 0, 0, 0, 0, | ||
| 368 | 0, 0, 0, 0, 167, 3, | ||
| 369 | 0, 0, 82, 99, 111, 101, | ||
| 370 | 102, 102, 0, 71, 99, 111, | ||
| 371 | 101, 102, 102, 0, 66, 99, | ||
| 372 | 111, 101, 102, 102, 0, 77, | ||
| 373 | 105, 99, 114, 111, 115, 111, | ||
| 374 | 102, 116, 32, 40, 82, 41, | ||
| 375 | 32, 72, 76, 83, 76, 32, | ||
| 376 | 83, 104, 97, 100, 101, 114, | ||
| 377 | 32, 67, 111, 109, 112, 105, | ||
| 378 | 108, 101, 114, 32, 49, 48, | ||
| 379 | 46, 49, 0, 171, 171, 171, | ||
| 380 | 73, 83, 71, 78, 108, 0, | ||
| 381 | 0, 0, 3, 0, 0, 0, | ||
| 382 | 8, 0, 0, 0, 80, 0, | ||
| 383 | 0, 0, 0, 0, 0, 0, | ||
| 384 | 1, 0, 0, 0, 3, 0, | ||
| 385 | 0, 0, 0, 0, 0, 0, | ||
| 386 | 15, 0, 0, 0, 92, 0, | ||
| 387 | 0, 0, 0, 0, 0, 0, | ||
| 388 | 0, 0, 0, 0, 3, 0, | ||
| 389 | 0, 0, 1, 0, 0, 0, | ||
| 390 | 3, 3, 0, 0, 101, 0, | ||
| 391 | 0, 0, 0, 0, 0, 0, | ||
| 392 | 0, 0, 0, 0, 3, 0, | ||
| 393 | 0, 0, 2, 0, 0, 0, | ||
| 394 | 15, 15, 0, 0, 83, 86, | ||
| 395 | 95, 80, 79, 83, 73, 84, | ||
| 396 | 73, 79, 78, 0, 84, 69, | ||
| 397 | 88, 67, 79, 79, 82, 68, | ||
| 398 | 0, 67, 79, 76, 79, 82, | ||
| 399 | 0, 171, 79, 83, 71, 78, | ||
| 400 | 44, 0, 0, 0, 1, 0, | ||
| 401 | 0, 0, 8, 0, 0, 0, | ||
| 402 | 32, 0, 0, 0, 0, 0, | ||
| 403 | 0, 0, 0, 0, 0, 0, | ||
| 404 | 3, 0, 0, 0, 0, 0, | ||
| 405 | 0, 0, 15, 0, 0, 0, | ||
| 406 | 83, 86, 95, 84, 65, 82, | ||
| 407 | 71, 69, 84, 0, 171, 171, | ||
| 408 | 83, 72, 69, 88, 164, 14, | ||
| 409 | 0, 0, 80, 0, 0, 0, | ||
| 410 | 169, 3, 0, 0, 106, 8, | ||
| 411 | 0, 1, 89, 0, 0, 4, | ||
| 412 | 70, 142, 32, 0, 0, 0, | ||
| 413 | 0, 0, 6, 0, 0, 0, | ||
| 414 | 90, 0, 0, 3, 0, 96, | ||
| 415 | 16, 0, 0, 0, 0, 0, | ||
| 416 | 88, 24, 0, 4, 0, 112, | ||
| 417 | 16, 0, 0, 0, 0, 0, | ||
| 418 | 85, 85, 0, 0, 88, 24, | ||
| 419 | 0, 4, 0, 112, 16, 0, | ||
| 420 | 1, 0, 0, 0, 85, 85, | ||
| 421 | 0, 0, 88, 24, 0, 4, | ||
| 422 | 0, 112, 16, 0, 2, 0, | ||
| 423 | 0, 0, 85, 85, 0, 0, | ||
| 424 | 98, 16, 0, 3, 50, 16, | ||
| 425 | 16, 0, 1, 0, 0, 0, | ||
| 426 | 98, 16, 0, 3, 242, 16, | ||
| 427 | 16, 0, 2, 0, 0, 0, | ||
| 428 | 101, 0, 0, 3, 242, 32, | ||
| 429 | 16, 0, 0, 0, 0, 0, | ||
| 430 | 104, 0, 0, 2, 7, 0, | ||
| 431 | 0, 0, 24, 0, 0, 11, | ||
| 432 | 242, 0, 16, 0, 0, 0, | ||
| 433 | 0, 0, 150, 138, 32, 0, | ||
| 434 | 0, 0, 0, 0, 0, 0, | ||
| 435 | 0, 0, 2, 64, 0, 0, | ||
| 436 | 0, 0, 0, 0, 0, 0, | ||
| 437 | 64, 64, 0, 0, 0, 64, | ||
| 438 | 0, 0, 128, 63, 31, 0, | ||
| 439 | 4, 3, 10, 0, 16, 0, | ||
| 440 | 0, 0, 0, 0, 54, 0, | ||
| 441 | 0, 8, 242, 0, 16, 0, | ||
| 442 | 1, 0, 0, 0, 2, 64, | ||
| 443 | 0, 0, 0, 0, 128, 63, | ||
| 444 | 0, 0, 128, 63, 0, 0, | ||
| 445 | 128, 63, 0, 0, 128, 63, | ||
| 446 | 18, 0, 0, 1, 24, 0, | ||
| 447 | 0, 8, 18, 0, 16, 0, | ||
| 448 | 0, 0, 0, 0, 26, 128, | ||
| 449 | 32, 0, 0, 0, 0, 0, | ||
| 450 | 0, 0, 0, 0, 1, 64, | ||
| 451 | 0, 0, 0, 0, 128, 63, | ||
| 452 | 31, 0, 4, 3, 10, 0, | ||
| 453 | 16, 0, 0, 0, 0, 0, | ||
| 454 | 69, 0, 0, 139, 194, 0, | ||
| 455 | 0, 128, 67, 85, 21, 0, | ||
| 456 | 242, 0, 16, 0, 1, 0, | ||
| 457 | 0, 0, 70, 16, 16, 0, | ||
| 458 | 1, 0, 0, 0, 70, 126, | ||
| 459 | 16, 0, 0, 0, 0, 0, | ||
| 460 | 0, 96, 16, 0, 0, 0, | ||
| 461 | 0, 0, 18, 0, 0, 1, | ||
| 462 | 24, 0, 0, 8, 18, 0, | ||
| 463 | 16, 0, 0, 0, 0, 0, | ||
| 464 | 26, 128, 32, 0, 0, 0, | ||
| 465 | 0, 0, 0, 0, 0, 0, | ||
| 466 | 1, 64, 0, 0, 0, 0, | ||
| 467 | 0, 64, 31, 0, 4, 3, | ||
| 468 | 10, 0, 16, 0, 0, 0, | ||
| 469 | 0, 0, 69, 0, 0, 139, | ||
| 470 | 194, 0, 0, 128, 67, 85, | ||
| 471 | 21, 0, 18, 0, 16, 0, | ||
| 472 | 2, 0, 0, 0, 70, 16, | ||
| 473 | 16, 0, 1, 0, 0, 0, | ||
| 474 | 70, 126, 16, 0, 0, 0, | ||
| 475 | 0, 0, 0, 96, 16, 0, | ||
| 476 | 0, 0, 0, 0, 69, 0, | ||
| 477 | 0, 139, 194, 0, 0, 128, | ||
| 478 | 67, 85, 21, 0, 98, 0, | ||
| 479 | 16, 0, 2, 0, 0, 0, | ||
| 480 | 70, 16, 16, 0, 1, 0, | ||
| 481 | 0, 0, 38, 125, 16, 0, | ||
| 482 | 1, 0, 0, 0, 0, 96, | ||
| 483 | 16, 0, 0, 0, 0, 0, | ||
| 484 | 0, 0, 0, 8, 114, 0, | ||
| 485 | 16, 0, 2, 0, 0, 0, | ||
| 486 | 70, 2, 16, 0, 2, 0, | ||
| 487 | 0, 0, 70, 130, 32, 0, | ||
| 488 | 0, 0, 0, 0, 2, 0, | ||
| 489 | 0, 0, 16, 0, 0, 8, | ||
| 490 | 18, 0, 16, 0, 1, 0, | ||
| 491 | 0, 0, 70, 2, 16, 0, | ||
| 492 | 2, 0, 0, 0, 70, 130, | ||
| 493 | 32, 0, 0, 0, 0, 0, | ||
| 494 | 3, 0, 0, 0, 16, 0, | ||
| 495 | 0, 8, 34, 0, 16, 0, | ||
| 496 | 1, 0, 0, 0, 70, 2, | ||
| 497 | 16, 0, 2, 0, 0, 0, | ||
| 498 | 70, 130, 32, 0, 0, 0, | ||
| 499 | 0, 0, 4, 0, 0, 0, | ||
| 500 | 16, 0, 0, 8, 66, 0, | ||
| 501 | 16, 0, 1, 0, 0, 0, | ||
| 502 | 70, 2, 16, 0, 2, 0, | ||
| 503 | 0, 0, 70, 130, 32, 0, | ||
| 504 | 0, 0, 0, 0, 5, 0, | ||
| 505 | 0, 0, 18, 0, 0, 1, | ||
| 506 | 24, 0, 0, 8, 18, 0, | ||
| 507 | 16, 0, 0, 0, 0, 0, | ||
| 508 | 26, 128, 32, 0, 0, 0, | ||
| 509 | 0, 0, 0, 0, 0, 0, | ||
| 510 | 1, 64, 0, 0, 0, 0, | ||
| 511 | 64, 64, 31, 0, 4, 3, | ||
| 512 | 10, 0, 16, 0, 0, 0, | ||
| 513 | 0, 0, 69, 0, 0, 139, | ||
| 514 | 194, 0, 0, 128, 67, 85, | ||
| 515 | 21, 0, 18, 0, 16, 0, | ||
| 516 | 2, 0, 0, 0, 70, 16, | ||
| 517 | 16, 0, 1, 0, 0, 0, | ||
| 518 | 70, 126, 16, 0, 0, 0, | ||
| 519 | 0, 0, 0, 96, 16, 0, | ||
| 520 | 0, 0, 0, 0, 69, 0, | ||
| 521 | 0, 139, 194, 0, 0, 128, | ||
| 522 | 67, 85, 21, 0, 98, 0, | ||
| 523 | 16, 0, 2, 0, 0, 0, | ||
| 524 | 70, 16, 16, 0, 1, 0, | ||
| 525 | 0, 0, 102, 124, 16, 0, | ||
| 526 | 1, 0, 0, 0, 0, 96, | ||
| 527 | 16, 0, 0, 0, 0, 0, | ||
| 528 | 0, 0, 0, 8, 114, 0, | ||
| 529 | 16, 0, 2, 0, 0, 0, | ||
| 530 | 70, 2, 16, 0, 2, 0, | ||
| 531 | 0, 0, 70, 130, 32, 0, | ||
| 532 | 0, 0, 0, 0, 2, 0, | ||
| 533 | 0, 0, 16, 0, 0, 8, | ||
| 534 | 18, 0, 16, 0, 1, 0, | ||
| 535 | 0, 0, 70, 2, 16, 0, | ||
| 536 | 2, 0, 0, 0, 70, 130, | ||
| 537 | 32, 0, 0, 0, 0, 0, | ||
| 538 | 3, 0, 0, 0, 16, 0, | ||
| 539 | 0, 8, 34, 0, 16, 0, | ||
| 540 | 1, 0, 0, 0, 70, 2, | ||
| 541 | 16, 0, 2, 0, 0, 0, | ||
| 542 | 70, 130, 32, 0, 0, 0, | ||
| 543 | 0, 0, 4, 0, 0, 0, | ||
| 544 | 16, 0, 0, 8, 66, 0, | ||
| 545 | 16, 0, 1, 0, 0, 0, | ||
| 546 | 70, 2, 16, 0, 2, 0, | ||
| 547 | 0, 0, 70, 130, 32, 0, | ||
| 548 | 0, 0, 0, 0, 5, 0, | ||
| 549 | 0, 0, 18, 0, 0, 1, | ||
| 550 | 24, 0, 0, 8, 18, 0, | ||
| 551 | 16, 0, 0, 0, 0, 0, | ||
| 552 | 26, 128, 32, 0, 0, 0, | ||
| 553 | 0, 0, 0, 0, 0, 0, | ||
| 554 | 1, 64, 0, 0, 0, 0, | ||
| 555 | 128, 64, 31, 0, 4, 3, | ||
| 556 | 10, 0, 16, 0, 0, 0, | ||
| 557 | 0, 0, 69, 0, 0, 139, | ||
| 558 | 194, 0, 0, 128, 67, 85, | ||
| 559 | 21, 0, 18, 0, 16, 0, | ||
| 560 | 2, 0, 0, 0, 70, 16, | ||
| 561 | 16, 0, 1, 0, 0, 0, | ||
| 562 | 70, 126, 16, 0, 0, 0, | ||
| 563 | 0, 0, 0, 96, 16, 0, | ||
| 564 | 0, 0, 0, 0, 69, 0, | ||
| 565 | 0, 139, 194, 0, 0, 128, | ||
| 566 | 67, 85, 21, 0, 34, 0, | ||
| 567 | 16, 0, 2, 0, 0, 0, | ||
| 568 | 70, 16, 16, 0, 1, 0, | ||
| 569 | 0, 0, 22, 126, 16, 0, | ||
| 570 | 1, 0, 0, 0, 0, 96, | ||
| 571 | 16, 0, 0, 0, 0, 0, | ||
| 572 | 69, 0, 0, 139, 194, 0, | ||
| 573 | 0, 128, 67, 85, 21, 0, | ||
| 574 | 66, 0, 16, 0, 2, 0, | ||
| 575 | 0, 0, 70, 16, 16, 0, | ||
| 576 | 1, 0, 0, 0, 150, 124, | ||
| 577 | 16, 0, 2, 0, 0, 0, | ||
| 578 | 0, 96, 16, 0, 0, 0, | ||
| 579 | 0, 0, 0, 0, 0, 8, | ||
| 580 | 114, 0, 16, 0, 2, 0, | ||
| 581 | 0, 0, 70, 2, 16, 0, | ||
| 582 | 2, 0, 0, 0, 70, 130, | ||
| 583 | 32, 0, 0, 0, 0, 0, | ||
| 584 | 2, 0, 0, 0, 16, 0, | ||
| 585 | 0, 8, 18, 0, 16, 0, | ||
| 586 | 1, 0, 0, 0, 70, 2, | ||
| 587 | 16, 0, 2, 0, 0, 0, | ||
| 588 | 70, 130, 32, 0, 0, 0, | ||
| 589 | 0, 0, 3, 0, 0, 0, | ||
| 590 | 16, 0, 0, 8, 34, 0, | ||
| 591 | 16, 0, 1, 0, 0, 0, | ||
| 592 | 70, 2, 16, 0, 2, 0, | ||
| 593 | 0, 0, 70, 130, 32, 0, | ||
| 594 | 0, 0, 0, 0, 4, 0, | ||
| 595 | 0, 0, 16, 0, 0, 8, | ||
| 596 | 66, 0, 16, 0, 1, 0, | ||
| 597 | 0, 0, 70, 2, 16, 0, | ||
| 598 | 2, 0, 0, 0, 70, 130, | ||
| 599 | 32, 0, 0, 0, 0, 0, | ||
| 600 | 5, 0, 0, 0, 18, 0, | ||
| 601 | 0, 1, 54, 0, 0, 8, | ||
| 602 | 114, 0, 16, 0, 1, 0, | ||
| 603 | 0, 0, 2, 64, 0, 0, | ||
| 604 | 0, 0, 128, 63, 0, 0, | ||
| 605 | 0, 0, 0, 0, 0, 0, | ||
| 606 | 0, 0, 0, 0, 21, 0, | ||
| 607 | 0, 1, 21, 0, 0, 1, | ||
| 608 | 21, 0, 0, 1, 54, 0, | ||
| 609 | 0, 5, 130, 0, 16, 0, | ||
| 610 | 1, 0, 0, 0, 1, 64, | ||
| 611 | 0, 0, 0, 0, 128, 63, | ||
| 612 | 21, 0, 0, 1, 21, 0, | ||
| 613 | 0, 1, 47, 0, 0, 6, | ||
| 614 | 114, 0, 16, 0, 2, 0, | ||
| 615 | 0, 0, 70, 2, 16, 128, | ||
| 616 | 129, 0, 0, 0, 1, 0, | ||
| 617 | 0, 0, 56, 0, 0, 10, | ||
| 618 | 114, 0, 16, 0, 2, 0, | ||
| 619 | 0, 0, 70, 2, 16, 0, | ||
| 620 | 2, 0, 0, 0, 2, 64, | ||
| 621 | 0, 0, 172, 205, 79, 60, | ||
| 622 | 172, 205, 79, 60, 172, 205, | ||
| 623 | 79, 60, 0, 0, 0, 0, | ||
| 624 | 25, 0, 0, 5, 114, 0, | ||
| 625 | 16, 0, 2, 0, 0, 0, | ||
| 626 | 70, 2, 16, 0, 2, 0, | ||
| 627 | 0, 0, 0, 0, 0, 10, | ||
| 628 | 114, 0, 16, 0, 3, 0, | ||
| 629 | 0, 0, 70, 2, 16, 0, | ||
| 630 | 2, 0, 0, 0, 2, 64, | ||
| 631 | 0, 0, 0, 0, 86, 191, | ||
| 632 | 0, 0, 86, 191, 0, 0, | ||
| 633 | 86, 191, 0, 0, 0, 0, | ||
| 634 | 52, 0, 0, 10, 114, 0, | ||
| 635 | 16, 0, 3, 0, 0, 0, | ||
| 636 | 70, 2, 16, 0, 3, 0, | ||
| 637 | 0, 0, 2, 64, 0, 0, | ||
| 638 | 0, 0, 0, 0, 0, 0, | ||
| 639 | 0, 0, 0, 0, 0, 0, | ||
| 640 | 0, 0, 0, 0, 50, 0, | ||
| 641 | 0, 16, 114, 0, 16, 0, | ||
| 642 | 2, 0, 0, 0, 70, 2, | ||
| 643 | 16, 128, 65, 0, 0, 0, | ||
| 644 | 2, 0, 0, 0, 2, 64, | ||
| 645 | 0, 0, 0, 128, 149, 65, | ||
| 646 | 0, 128, 149, 65, 0, 128, | ||
| 647 | 149, 65, 0, 0, 0, 0, | ||
| 648 | 2, 64, 0, 0, 0, 208, | ||
| 649 | 150, 65, 0, 208, 150, 65, | ||
| 650 | 0, 208, 150, 65, 0, 0, | ||
| 651 | 0, 0, 14, 0, 0, 7, | ||
| 652 | 114, 0, 16, 0, 2, 0, | ||
| 653 | 0, 0, 70, 2, 16, 0, | ||
| 654 | 3, 0, 0, 0, 70, 2, | ||
| 655 | 16, 0, 2, 0, 0, 0, | ||
| 656 | 47, 0, 0, 6, 114, 0, | ||
| 657 | 16, 0, 2, 0, 0, 0, | ||
| 658 | 70, 2, 16, 128, 129, 0, | ||
| 659 | 0, 0, 2, 0, 0, 0, | ||
| 660 | 56, 0, 0, 10, 114, 0, | ||
| 661 | 16, 0, 2, 0, 0, 0, | ||
| 662 | 70, 2, 16, 0, 2, 0, | ||
| 663 | 0, 0, 2, 64, 0, 0, | ||
| 664 | 107, 224, 200, 64, 107, 224, | ||
| 665 | 200, 64, 107, 224, 200, 64, | ||
| 666 | 0, 0, 0, 0, 25, 0, | ||
| 667 | 0, 5, 114, 0, 16, 0, | ||
| 668 | 2, 0, 0, 0, 70, 2, | ||
| 669 | 16, 0, 2, 0, 0, 0, | ||
| 670 | 56, 0, 0, 10, 114, 0, | ||
| 671 | 16, 0, 2, 0, 0, 0, | ||
| 672 | 70, 2, 16, 0, 2, 0, | ||
| 673 | 0, 0, 2, 64, 0, 0, | ||
| 674 | 0, 64, 28, 70, 0, 64, | ||
| 675 | 28, 70, 0, 64, 28, 70, | ||
| 676 | 0, 0, 0, 0, 14, 0, | ||
| 677 | 0, 8, 114, 0, 16, 0, | ||
| 678 | 2, 0, 0, 0, 70, 2, | ||
| 679 | 16, 0, 2, 0, 0, 0, | ||
| 680 | 246, 143, 32, 0, 0, 0, | ||
| 681 | 0, 0, 1, 0, 0, 0, | ||
| 682 | 55, 0, 0, 9, 114, 0, | ||
| 683 | 16, 0, 2, 0, 0, 0, | ||
| 684 | 86, 5, 16, 0, 0, 0, | ||
| 685 | 0, 0, 70, 2, 16, 0, | ||
| 686 | 2, 0, 0, 0, 70, 2, | ||
| 687 | 16, 0, 1, 0, 0, 0, | ||
| 688 | 57, 0, 0, 8, 18, 0, | ||
| 689 | 16, 0, 0, 0, 0, 0, | ||
| 690 | 10, 128, 32, 0, 0, 0, | ||
| 691 | 0, 0, 1, 0, 0, 0, | ||
| 692 | 1, 64, 0, 0, 0, 0, | ||
| 693 | 0, 0, 56, 0, 0, 8, | ||
| 694 | 114, 0, 16, 0, 3, 0, | ||
| 695 | 0, 0, 70, 2, 16, 0, | ||
| 696 | 2, 0, 0, 0, 86, 133, | ||
| 697 | 32, 0, 0, 0, 0, 0, | ||
| 698 | 1, 0, 0, 0, 24, 0, | ||
| 699 | 0, 11, 50, 0, 16, 0, | ||
| 700 | 4, 0, 0, 0, 6, 128, | ||
| 701 | 32, 0, 0, 0, 0, 0, | ||
| 702 | 1, 0, 0, 0, 2, 64, | ||
| 703 | 0, 0, 0, 0, 128, 63, | ||
| 704 | 0, 0, 0, 64, 0, 0, | ||
| 705 | 0, 0, 0, 0, 0, 0, | ||
| 706 | 16, 0, 0, 10, 18, 0, | ||
| 707 | 16, 0, 5, 0, 0, 0, | ||
| 708 | 2, 64, 0, 0, 140, 157, | ||
| 709 | 32, 63, 200, 151, 168, 62, | ||
| 710 | 249, 104, 49, 61, 0, 0, | ||
| 711 | 0, 0, 70, 2, 16, 0, | ||
| 712 | 2, 0, 0, 0, 16, 0, | ||
| 713 | 0, 10, 34, 0, 16, 0, | ||
| 714 | 5, 0, 0, 0, 2, 64, | ||
| 715 | 0, 0, 186, 130, 141, 61, | ||
| 716 | 10, 103, 107, 63, 175, 39, | ||
| 717 | 58, 60, 0, 0, 0, 0, | ||
| 718 | 70, 2, 16, 0, 2, 0, | ||
| 719 | 0, 0, 16, 0, 0, 10, | ||
| 720 | 66, 0, 16, 0, 5, 0, | ||
| 721 | 0, 0, 2, 64, 0, 0, | ||
| 722 | 107, 70, 134, 60, 41, 64, | ||
| 723 | 180, 61, 183, 69, 101, 63, | ||
| 724 | 0, 0, 0, 0, 70, 2, | ||
| 725 | 16, 0, 2, 0, 0, 0, | ||
| 726 | 55, 0, 0, 9, 114, 0, | ||
| 727 | 16, 0, 5, 0, 0, 0, | ||
| 728 | 166, 10, 16, 0, 0, 0, | ||
| 729 | 0, 0, 70, 2, 16, 0, | ||
| 730 | 5, 0, 0, 0, 70, 2, | ||
| 731 | 16, 0, 2, 0, 0, 0, | ||
| 732 | 52, 0, 0, 7, 130, 0, | ||
| 733 | 16, 0, 2, 0, 0, 0, | ||
| 734 | 42, 0, 16, 0, 5, 0, | ||
| 735 | 0, 0, 26, 0, 16, 0, | ||
| 736 | 5, 0, 0, 0, 52, 0, | ||
| 737 | 0, 7, 130, 0, 16, 0, | ||
| 738 | 2, 0, 0, 0, 58, 0, | ||
| 739 | 16, 0, 2, 0, 0, 0, | ||
| 740 | 10, 0, 16, 0, 5, 0, | ||
| 741 | 0, 0, 49, 0, 0, 7, | ||
| 742 | 130, 0, 16, 0, 3, 0, | ||
| 743 | 0, 0, 1, 64, 0, 0, | ||
| 744 | 0, 0, 0, 0, 58, 0, | ||
| 745 | 16, 0, 2, 0, 0, 0, | ||
| 746 | 50, 0, 0, 13, 194, 0, | ||
| 747 | 16, 0, 4, 0, 0, 0, | ||
| 748 | 86, 137, 32, 0, 0, 0, | ||
| 749 | 0, 0, 1, 0, 0, 0, | ||
| 750 | 246, 15, 16, 0, 2, 0, | ||
| 751 | 0, 0, 2, 64, 0, 0, | ||
| 752 | 0, 0, 0, 0, 0, 0, | ||
| 753 | 0, 0, 0, 0, 128, 63, | ||
| 754 | 0, 0, 128, 63, 14, 0, | ||
| 755 | 0, 7, 130, 0, 16, 0, | ||
| 756 | 2, 0, 0, 0, 42, 0, | ||
| 757 | 16, 0, 4, 0, 0, 0, | ||
| 758 | 58, 0, 16, 0, 4, 0, | ||
| 759 | 0, 0, 56, 0, 0, 7, | ||
| 760 | 114, 0, 16, 0, 6, 0, | ||
| 761 | 0, 0, 246, 15, 16, 0, | ||
| 762 | 2, 0, 0, 0, 70, 2, | ||
| 763 | 16, 0, 5, 0, 0, 0, | ||
| 764 | 55, 0, 0, 9, 114, 0, | ||
| 765 | 16, 0, 5, 0, 0, 0, | ||
| 766 | 246, 15, 16, 0, 3, 0, | ||
| 767 | 0, 0, 70, 2, 16, 0, | ||
| 768 | 6, 0, 0, 0, 70, 2, | ||
| 769 | 16, 0, 5, 0, 0, 0, | ||
| 770 | 16, 0, 0, 10, 18, 0, | ||
| 771 | 16, 0, 6, 0, 0, 0, | ||
| 772 | 2, 64, 0, 0, 34, 139, | ||
| 773 | 212, 63, 160, 112, 22, 191, | ||
| 774 | 35, 45, 149, 189, 0, 0, | ||
| 775 | 0, 0, 70, 2, 16, 0, | ||
| 776 | 5, 0, 0, 0, 16, 0, | ||
| 777 | 0, 10, 34, 0, 16, 0, | ||
| 778 | 6, 0, 0, 0, 2, 64, | ||
| 779 | 0, 0, 127, 18, 255, 189, | ||
| 780 | 180, 2, 145, 63, 13, 198, | ||
| 781 | 8, 188, 0, 0, 0, 0, | ||
| 782 | 70, 2, 16, 0, 5, 0, | ||
| 783 | 0, 0, 16, 0, 0, 10, | ||
| 784 | 66, 0, 16, 0, 6, 0, | ||
| 785 | 0, 0, 2, 64, 0, 0, | ||
| 786 | 179, 183, 148, 188, 205, 5, | ||
| 787 | 206, 189, 60, 51, 143, 63, | ||
| 788 | 0, 0, 0, 0, 70, 2, | ||
| 789 | 16, 0, 5, 0, 0, 0, | ||
| 790 | 55, 0, 0, 9, 114, 0, | ||
| 791 | 16, 0, 5, 0, 0, 0, | ||
| 792 | 166, 10, 16, 0, 0, 0, | ||
| 793 | 0, 0, 70, 2, 16, 0, | ||
| 794 | 6, 0, 0, 0, 70, 2, | ||
| 795 | 16, 0, 5, 0, 0, 0, | ||
| 796 | 55, 0, 0, 9, 226, 0, | ||
| 797 | 16, 0, 4, 0, 0, 0, | ||
| 798 | 86, 5, 16, 0, 4, 0, | ||
| 799 | 0, 0, 6, 9, 16, 0, | ||
| 800 | 5, 0, 0, 0, 6, 9, | ||
| 801 | 16, 0, 2, 0, 0, 0, | ||
| 802 | 55, 0, 0, 9, 114, 0, | ||
| 803 | 16, 0, 3, 0, 0, 0, | ||
| 804 | 6, 0, 16, 0, 4, 0, | ||
| 805 | 0, 0, 70, 2, 16, 0, | ||
| 806 | 3, 0, 0, 0, 150, 7, | ||
| 807 | 16, 0, 4, 0, 0, 0, | ||
| 808 | 55, 0, 0, 9, 114, 0, | ||
| 809 | 16, 0, 2, 0, 0, 0, | ||
| 810 | 6, 0, 16, 0, 0, 0, | ||
| 811 | 0, 0, 70, 2, 16, 0, | ||
| 812 | 3, 0, 0, 0, 70, 2, | ||
| 813 | 16, 0, 2, 0, 0, 0, | ||
| 814 | 31, 0, 4, 3, 58, 0, | ||
| 815 | 16, 0, 0, 0, 0, 0, | ||
| 816 | 57, 0, 0, 11, 18, 0, | ||
| 817 | 16, 0, 0, 0, 0, 0, | ||
| 818 | 2, 64, 0, 0, 0, 0, | ||
| 819 | 0, 0, 0, 0, 0, 0, | ||
| 820 | 0, 0, 0, 0, 0, 0, | ||
| 821 | 0, 0, 10, 128, 32, 0, | ||
| 822 | 0, 0, 0, 0, 0, 0, | ||
| 823 | 0, 0, 31, 0, 4, 3, | ||
| 824 | 10, 0, 16, 0, 0, 0, | ||
| 825 | 0, 0, 29, 0, 0, 10, | ||
| 826 | 114, 0, 16, 0, 3, 0, | ||
| 827 | 0, 0, 2, 64, 0, 0, | ||
| 828 | 230, 174, 37, 61, 230, 174, | ||
| 829 | 37, 61, 230, 174, 37, 61, | ||
| 830 | 0, 0, 0, 0, 70, 2, | ||
| 831 | 16, 0, 2, 0, 0, 0, | ||
| 832 | 56, 0, 0, 10, 114, 0, | ||
| 833 | 16, 0, 4, 0, 0, 0, | ||
| 834 | 70, 2, 16, 0, 2, 0, | ||
| 835 | 0, 0, 2, 64, 0, 0, | ||
| 836 | 145, 131, 158, 61, 145, 131, | ||
| 837 | 158, 61, 145, 131, 158, 61, | ||
| 838 | 0, 0, 0, 0, 0, 0, | ||
| 839 | 0, 10, 114, 0, 16, 0, | ||
| 840 | 5, 0, 0, 0, 70, 2, | ||
| 841 | 16, 0, 2, 0, 0, 0, | ||
| 842 | 2, 64, 0, 0, 174, 71, | ||
| 843 | 97, 61, 174, 71, 97, 61, | ||
| 844 | 174, 71, 97, 61, 0, 0, | ||
| 845 | 0, 0, 56, 0, 0, 11, | ||
| 846 | 114, 0, 16, 0, 5, 0, | ||
| 847 | 0, 0, 70, 2, 16, 128, | ||
| 848 | 129, 0, 0, 0, 5, 0, | ||
| 849 | 0, 0, 2, 64, 0, 0, | ||
| 850 | 111, 167, 114, 63, 111, 167, | ||
| 851 | 114, 63, 111, 167, 114, 63, | ||
| 852 | 0, 0, 0, 0, 47, 0, | ||
| 853 | 0, 5, 114, 0, 16, 0, | ||
| 854 | 5, 0, 0, 0, 70, 2, | ||
| 855 | 16, 0, 5, 0, 0, 0, | ||
| 856 | 56, 0, 0, 10, 114, 0, | ||
| 857 | 16, 0, 5, 0, 0, 0, | ||
| 858 | 70, 2, 16, 0, 5, 0, | ||
| 859 | 0, 0, 2, 64, 0, 0, | ||
| 860 | 154, 153, 25, 64, 154, 153, | ||
| 861 | 25, 64, 154, 153, 25, 64, | ||
| 862 | 0, 0, 0, 0, 25, 0, | ||
| 863 | 0, 5, 114, 0, 16, 0, | ||
| 864 | 5, 0, 0, 0, 70, 2, | ||
| 865 | 16, 0, 5, 0, 0, 0, | ||
| 866 | 55, 0, 0, 9, 114, 0, | ||
| 867 | 16, 0, 2, 0, 0, 0, | ||
| 868 | 70, 2, 16, 0, 3, 0, | ||
| 869 | 0, 0, 70, 2, 16, 0, | ||
| 870 | 4, 0, 0, 0, 70, 2, | ||
| 871 | 16, 0, 5, 0, 0, 0, | ||
| 872 | 21, 0, 0, 1, 56, 0, | ||
| 873 | 0, 8, 114, 0, 16, 0, | ||
| 874 | 1, 0, 0, 0, 70, 2, | ||
| 875 | 16, 0, 2, 0, 0, 0, | ||
| 876 | 246, 143, 32, 0, 0, 0, | ||
| 877 | 0, 0, 0, 0, 0, 0, | ||
| 878 | 18, 0, 0, 1, 31, 0, | ||
| 879 | 4, 3, 42, 0, 16, 0, | ||
| 880 | 0, 0, 0, 0, 56, 0, | ||
| 881 | 0, 8, 114, 0, 16, 0, | ||
| 882 | 1, 0, 0, 0, 70, 2, | ||
| 883 | 16, 0, 2, 0, 0, 0, | ||
| 884 | 246, 143, 32, 0, 0, 0, | ||
| 885 | 0, 0, 0, 0, 0, 0, | ||
| 886 | 57, 0, 0, 11, 18, 0, | ||
| 887 | 16, 0, 0, 0, 0, 0, | ||
| 888 | 2, 64, 0, 0, 0, 0, | ||
| 889 | 0, 0, 0, 0, 0, 0, | ||
| 890 | 0, 0, 0, 0, 0, 0, | ||
| 891 | 0, 0, 10, 128, 32, 0, | ||
| 892 | 0, 0, 0, 0, 0, 0, | ||
| 893 | 0, 0, 31, 0, 0, 3, | ||
| 894 | 10, 0, 16, 0, 0, 0, | ||
| 895 | 0, 0, 29, 0, 0, 10, | ||
| 896 | 210, 0, 16, 0, 0, 0, | ||
| 897 | 0, 0, 2, 64, 0, 0, | ||
| 898 | 28, 46, 77, 59, 0, 0, | ||
| 899 | 0, 0, 28, 46, 77, 59, | ||
| 900 | 28, 46, 77, 59, 6, 9, | ||
| 901 | 16, 0, 1, 0, 0, 0, | ||
| 902 | 56, 0, 0, 10, 114, 0, | ||
| 903 | 16, 0, 3, 0, 0, 0, | ||
| 904 | 70, 2, 16, 0, 1, 0, | ||
| 905 | 0, 0, 2, 64, 0, 0, | ||
| 906 | 82, 184, 78, 65, 82, 184, | ||
| 907 | 78, 65, 82, 184, 78, 65, | ||
| 908 | 0, 0, 0, 0, 47, 0, | ||
| 909 | 0, 6, 114, 0, 16, 0, | ||
| 910 | 4, 0, 0, 0, 70, 2, | ||
| 911 | 16, 128, 129, 0, 0, 0, | ||
| 912 | 1, 0, 0, 0, 56, 0, | ||
| 913 | 0, 10, 114, 0, 16, 0, | ||
| 914 | 4, 0, 0, 0, 70, 2, | ||
| 915 | 16, 0, 4, 0, 0, 0, | ||
| 916 | 2, 64, 0, 0, 85, 85, | ||
| 917 | 213, 62, 85, 85, 213, 62, | ||
| 918 | 85, 85, 213, 62, 0, 0, | ||
| 919 | 0, 0, 25, 0, 0, 5, | ||
| 920 | 114, 0, 16, 0, 4, 0, | ||
| 921 | 0, 0, 70, 2, 16, 0, | ||
| 922 | 4, 0, 0, 0, 50, 0, | ||
| 923 | 0, 15, 114, 0, 16, 0, | ||
| 924 | 4, 0, 0, 0, 70, 2, | ||
| 925 | 16, 0, 4, 0, 0, 0, | ||
| 926 | 2, 64, 0, 0, 61, 10, | ||
| 927 | 135, 63, 61, 10, 135, 63, | ||
| 928 | 61, 10, 135, 63, 0, 0, | ||
| 929 | 0, 0, 2, 64, 0, 0, | ||
| 930 | 174, 71, 97, 189, 174, 71, | ||
| 931 | 97, 189, 174, 71, 97, 189, | ||
| 932 | 0, 0, 0, 0, 55, 32, | ||
| 933 | 0, 9, 114, 0, 16, 0, | ||
| 934 | 1, 0, 0, 0, 134, 3, | ||
| 935 | 16, 0, 0, 0, 0, 0, | ||
| 936 | 70, 2, 16, 0, 3, 0, | ||
| 937 | 0, 0, 70, 2, 16, 0, | ||
| 938 | 4, 0, 0, 0, 21, 0, | ||
| 939 | 0, 1, 18, 0, 0, 1, | ||
| 940 | 31, 0, 4, 3, 26, 0, | ||
| 941 | 16, 0, 0, 0, 0, 0, | ||
| 942 | 16, 0, 0, 10, 18, 0, | ||
| 943 | 16, 0, 0, 0, 0, 0, | ||
| 944 | 2, 64, 0, 0, 34, 139, | ||
| 945 | 212, 63, 160, 112, 22, 191, | ||
| 946 | 35, 45, 149, 189, 0, 0, | ||
| 947 | 0, 0, 70, 2, 16, 0, | ||
| 948 | 2, 0, 0, 0, 16, 0, | ||
| 949 | 0, 10, 34, 0, 16, 0, | ||
| 950 | 0, 0, 0, 0, 2, 64, | ||
| 951 | 0, 0, 127, 18, 255, 189, | ||
| 952 | 180, 2, 145, 63, 13, 198, | ||
| 953 | 8, 188, 0, 0, 0, 0, | ||
| 954 | 70, 2, 16, 0, 2, 0, | ||
| 955 | 0, 0, 16, 0, 0, 10, | ||
| 956 | 66, 0, 16, 0, 0, 0, | ||
| 957 | 0, 0, 2, 64, 0, 0, | ||
| 958 | 179, 183, 148, 188, 205, 5, | ||
| 959 | 206, 189, 60, 51, 143, 63, | ||
| 960 | 0, 0, 0, 0, 70, 2, | ||
| 961 | 16, 0, 2, 0, 0, 0, | ||
| 962 | 56, 0, 0, 8, 114, 0, | ||
| 963 | 16, 0, 1, 0, 0, 0, | ||
| 964 | 70, 2, 16, 0, 0, 0, | ||
| 965 | 0, 0, 246, 143, 32, 0, | ||
| 966 | 0, 0, 0, 0, 0, 0, | ||
| 967 | 0, 0, 57, 0, 0, 11, | ||
| 968 | 18, 0, 16, 0, 0, 0, | ||
| 969 | 0, 0, 2, 64, 0, 0, | ||
| 970 | 0, 0, 0, 0, 0, 0, | ||
| 971 | 0, 0, 0, 0, 0, 0, | ||
| 972 | 0, 0, 0, 0, 10, 128, | ||
| 973 | 32, 0, 0, 0, 0, 0, | ||
| 974 | 0, 0, 0, 0, 31, 0, | ||
| 975 | 0, 3, 10, 0, 16, 0, | ||
| 976 | 0, 0, 0, 0, 29, 0, | ||
| 977 | 0, 10, 114, 0, 16, 0, | ||
| 978 | 0, 0, 0, 0, 2, 64, | ||
| 979 | 0, 0, 28, 46, 77, 59, | ||
| 980 | 28, 46, 77, 59, 28, 46, | ||
| 981 | 77, 59, 0, 0, 0, 0, | ||
| 982 | 70, 2, 16, 0, 1, 0, | ||
| 983 | 0, 0, 56, 0, 0, 10, | ||
| 984 | 114, 0, 16, 0, 3, 0, | ||
| 985 | 0, 0, 70, 2, 16, 0, | ||
| 986 | 1, 0, 0, 0, 2, 64, | ||
| 987 | 0, 0, 82, 184, 78, 65, | ||
| 988 | 82, 184, 78, 65, 82, 184, | ||
| 989 | 78, 65, 0, 0, 0, 0, | ||
| 990 | 47, 0, 0, 6, 114, 0, | ||
| 991 | 16, 0, 4, 0, 0, 0, | ||
| 992 | 70, 2, 16, 128, 129, 0, | ||
| 993 | 0, 0, 1, 0, 0, 0, | ||
| 994 | 56, 0, 0, 10, 114, 0, | ||
| 995 | 16, 0, 4, 0, 0, 0, | ||
| 996 | 70, 2, 16, 0, 4, 0, | ||
| 997 | 0, 0, 2, 64, 0, 0, | ||
| 998 | 85, 85, 213, 62, 85, 85, | ||
| 999 | 213, 62, 85, 85, 213, 62, | ||
| 1000 | 0, 0, 0, 0, 25, 0, | ||
| 1001 | 0, 5, 114, 0, 16, 0, | ||
| 1002 | 4, 0, 0, 0, 70, 2, | ||
| 1003 | 16, 0, 4, 0, 0, 0, | ||
| 1004 | 50, 0, 0, 15, 114, 0, | ||
| 1005 | 16, 0, 4, 0, 0, 0, | ||
| 1006 | 70, 2, 16, 0, 4, 0, | ||
| 1007 | 0, 0, 2, 64, 0, 0, | ||
| 1008 | 61, 10, 135, 63, 61, 10, | ||
| 1009 | 135, 63, 61, 10, 135, 63, | ||
| 1010 | 0, 0, 0, 0, 2, 64, | ||
| 1011 | 0, 0, 174, 71, 97, 189, | ||
| 1012 | 174, 71, 97, 189, 174, 71, | ||
| 1013 | 97, 189, 0, 0, 0, 0, | ||
| 1014 | 55, 32, 0, 9, 114, 0, | ||
| 1015 | 16, 0, 1, 0, 0, 0, | ||
| 1016 | 70, 2, 16, 0, 0, 0, | ||
| 1017 | 0, 0, 70, 2, 16, 0, | ||
| 1018 | 3, 0, 0, 0, 70, 2, | ||
| 1019 | 16, 0, 4, 0, 0, 0, | ||
| 1020 | 21, 0, 0, 1, 18, 0, | ||
| 1021 | 0, 1, 56, 0, 0, 8, | ||
| 1022 | 114, 0, 16, 0, 1, 0, | ||
| 1023 | 0, 0, 70, 2, 16, 0, | ||
| 1024 | 2, 0, 0, 0, 246, 143, | ||
| 1025 | 32, 0, 0, 0, 0, 0, | ||
| 1026 | 0, 0, 0, 0, 21, 0, | ||
| 1027 | 0, 1, 21, 0, 0, 1, | ||
| 1028 | 21, 0, 0, 1, 56, 0, | ||
| 1029 | 0, 7, 242, 32, 16, 0, | ||
| 1030 | 0, 0, 0, 0, 70, 14, | ||
| 1031 | 16, 0, 1, 0, 0, 0, | ||
| 1032 | 70, 30, 16, 0, 2, 0, | ||
| 1033 | 0, 0, 62, 0, 0, 1, | ||
| 1034 | 83, 84, 65, 84, 148, 0, | ||
| 1035 | 0, 0, 126, 0, 0, 0, | ||
| 1036 | 7, 0, 0, 0, 0, 0, | ||
| 1037 | 0, 0, 3, 0, 0, 0, | ||
| 1038 | 71, 0, 0, 0, 0, 0, | ||
| 1039 | 0, 0, 0, 0, 0, 0, | ||
| 1040 | 9, 0, 0, 0, 11, 0, | ||
| 1041 | 0, 0, 0, 0, 0, 0, | ||
| 1042 | 0, 0, 0, 0, 0, 0, | ||
| 1043 | 0, 0, 0, 0, 0, 0, | ||
| 1044 | 0, 0, 0, 0, 8, 0, | ||
| 1045 | 0, 0, 0, 0, 0, 0, | ||
| 1046 | 0, 0, 0, 0, 0, 0, | ||
| 1047 | 0, 0, 0, 0, 0, 0, | ||
| 1048 | 3, 0, 0, 0, 10, 0, | ||
| 1049 | 0, 0, 3, 0, 0, 0, | ||
| 1050 | 0, 0, 0, 0, 0, 0, | ||
| 1051 | 0, 0, 0, 0, 0, 0, | ||
| 1052 | 0, 0, 0, 0, 0, 0, | ||
| 1053 | 0, 0, 0, 0, 0, 0, | ||
| 1054 | 0, 0, 0, 0, 0, 0, | ||
| 1055 | 0, 0, 0, 0, 0, 0, | ||
| 1056 | 0, 0, 0, 0, 0, 0, | ||
| 1057 | 0, 0, 0, 0, 0, 0, | ||
| 1058 | 0, 0, 0, 0, 0, 0, | ||
| 1059 | 0, 0, 0, 0, 0, 0 | ||
| 1060 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Advanced.hlsl b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Advanced.hlsl new file mode 100644 index 0000000..aad7b77 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Advanced.hlsl | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | |||
| 2 | #include "D3D11_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 5 | { | ||
| 6 | return AdvancedPixelShader(input); | ||
| 7 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Colors.h b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Colors.h new file mode 100644 index 0000000..6658e4d --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Colors.h | |||
| @@ -0,0 +1,284 @@ | |||
| 1 | #if 0 | ||
| 2 | // | ||
| 3 | // Generated by Microsoft (R) HLSL Shader Compiler 10.1 | ||
| 4 | // | ||
| 5 | // | ||
| 6 | // Buffer Definitions: | ||
| 7 | // | ||
| 8 | // cbuffer Constants | ||
| 9 | // { | ||
| 10 | // | ||
| 11 | // float scRGB_output; // Offset: 0 Size: 4 [unused] | ||
| 12 | // float texture_type; // Offset: 4 Size: 4 [unused] | ||
| 13 | // float input_type; // Offset: 8 Size: 4 [unused] | ||
| 14 | // float color_scale; // Offset: 12 Size: 4 | ||
| 15 | // float tonemap_method; // Offset: 16 Size: 4 [unused] | ||
| 16 | // float tonemap_factor1; // Offset: 20 Size: 4 [unused] | ||
| 17 | // float tonemap_factor2; // Offset: 24 Size: 4 [unused] | ||
| 18 | // float sdr_white_point; // Offset: 28 Size: 4 [unused] | ||
| 19 | // float4 Yoffset; // Offset: 32 Size: 16 [unused] | ||
| 20 | // float4 Rcoeff; // Offset: 48 Size: 16 [unused] | ||
| 21 | // float4 Gcoeff; // Offset: 64 Size: 16 [unused] | ||
| 22 | // float4 Bcoeff; // Offset: 80 Size: 16 [unused] | ||
| 23 | // | ||
| 24 | // } | ||
| 25 | // | ||
| 26 | // | ||
| 27 | // Resource Bindings: | ||
| 28 | // | ||
| 29 | // Name Type Format Dim HLSL Bind Count | ||
| 30 | // ------------------------------ ---------- ------- ----------- -------------- ------ | ||
| 31 | // Constants cbuffer NA NA cb0 1 | ||
| 32 | // | ||
| 33 | // | ||
| 34 | // | ||
| 35 | // Input signature: | ||
| 36 | // | ||
| 37 | // Name Index Mask Register SysValue Format Used | ||
| 38 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 39 | // SV_POSITION 0 xyzw 0 POS float | ||
| 40 | // TEXCOORD 0 xy 1 NONE float | ||
| 41 | // COLOR 0 xyzw 2 NONE float xyzw | ||
| 42 | // | ||
| 43 | // | ||
| 44 | // Output signature: | ||
| 45 | // | ||
| 46 | // Name Index Mask Register SysValue Format Used | ||
| 47 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 48 | // SV_TARGET 0 xyzw 0 TARGET float xyzw | ||
| 49 | // | ||
| 50 | // | ||
| 51 | // Constant buffer to DX9 shader constant mappings: | ||
| 52 | // | ||
| 53 | // Target Reg Buffer Start Reg # of Regs Data Conversion | ||
| 54 | // ---------- ------- --------- --------- ---------------------- | ||
| 55 | // c0 cb0 0 1 ( FLT, FLT, FLT, FLT) | ||
| 56 | // | ||
| 57 | // | ||
| 58 | // Level9 shader bytecode: | ||
| 59 | // | ||
| 60 | ps_2_0 | ||
| 61 | dcl t1 | ||
| 62 | mul r0.xyz, t1, c0.w | ||
| 63 | mov r0.w, t1.w | ||
| 64 | mov oC0, r0 | ||
| 65 | |||
| 66 | // approximately 3 instruction slots used | ||
| 67 | ps_4_0 | ||
| 68 | dcl_constantbuffer CB0[1], immediateIndexed | ||
| 69 | dcl_input_ps linear v2.xyzw | ||
| 70 | dcl_output o0.xyzw | ||
| 71 | dcl_temps 1 | ||
| 72 | mov r0.x, cb0[0].w | ||
| 73 | mov r0.w, l(1.000000) | ||
| 74 | mul o0.xyzw, r0.xxxw, v2.xyzw | ||
| 75 | ret | ||
| 76 | // Approximately 4 instruction slots used | ||
| 77 | #endif | ||
| 78 | |||
| 79 | const BYTE g_main[] = | ||
| 80 | { | ||
| 81 | 68, 88, 66, 67, 78, 223, | ||
| 82 | 23, 23, 93, 184, 255, 26, | ||
| 83 | 153, 0, 220, 179, 25, 194, | ||
| 84 | 30, 249, 1, 0, 0, 0, | ||
| 85 | 192, 4, 0, 0, 6, 0, | ||
| 86 | 0, 0, 56, 0, 0, 0, | ||
| 87 | 172, 0, 0, 0, 56, 1, | ||
| 88 | 0, 0, 180, 1, 0, 0, | ||
| 89 | 24, 4, 0, 0, 140, 4, | ||
| 90 | 0, 0, 65, 111, 110, 57, | ||
| 91 | 108, 0, 0, 0, 108, 0, | ||
| 92 | 0, 0, 0, 2, 255, 255, | ||
| 93 | 60, 0, 0, 0, 48, 0, | ||
| 94 | 0, 0, 1, 0, 36, 0, | ||
| 95 | 0, 0, 48, 0, 0, 0, | ||
| 96 | 48, 0, 0, 0, 36, 0, | ||
| 97 | 0, 0, 48, 0, 0, 0, | ||
| 98 | 0, 0, 1, 0, 0, 0, | ||
| 99 | 0, 0, 0, 0, 0, 2, | ||
| 100 | 255, 255, 31, 0, 0, 2, | ||
| 101 | 0, 0, 0, 128, 1, 0, | ||
| 102 | 15, 176, 5, 0, 0, 3, | ||
| 103 | 0, 0, 7, 128, 1, 0, | ||
| 104 | 228, 176, 0, 0, 255, 160, | ||
| 105 | 1, 0, 0, 2, 0, 0, | ||
| 106 | 8, 128, 1, 0, 255, 176, | ||
| 107 | 1, 0, 0, 2, 0, 8, | ||
| 108 | 15, 128, 0, 0, 228, 128, | ||
| 109 | 255, 255, 0, 0, 83, 72, | ||
| 110 | 68, 82, 132, 0, 0, 0, | ||
| 111 | 64, 0, 0, 0, 33, 0, | ||
| 112 | 0, 0, 89, 0, 0, 4, | ||
| 113 | 70, 142, 32, 0, 0, 0, | ||
| 114 | 0, 0, 1, 0, 0, 0, | ||
| 115 | 98, 16, 0, 3, 242, 16, | ||
| 116 | 16, 0, 2, 0, 0, 0, | ||
| 117 | 101, 0, 0, 3, 242, 32, | ||
| 118 | 16, 0, 0, 0, 0, 0, | ||
| 119 | 104, 0, 0, 2, 1, 0, | ||
| 120 | 0, 0, 54, 0, 0, 6, | ||
| 121 | 18, 0, 16, 0, 0, 0, | ||
| 122 | 0, 0, 58, 128, 32, 0, | ||
| 123 | 0, 0, 0, 0, 0, 0, | ||
| 124 | 0, 0, 54, 0, 0, 5, | ||
| 125 | 130, 0, 16, 0, 0, 0, | ||
| 126 | 0, 0, 1, 64, 0, 0, | ||
| 127 | 0, 0, 128, 63, 56, 0, | ||
| 128 | 0, 7, 242, 32, 16, 0, | ||
| 129 | 0, 0, 0, 0, 6, 12, | ||
| 130 | 16, 0, 0, 0, 0, 0, | ||
| 131 | 70, 30, 16, 0, 2, 0, | ||
| 132 | 0, 0, 62, 0, 0, 1, | ||
| 133 | 83, 84, 65, 84, 116, 0, | ||
| 134 | 0, 0, 4, 0, 0, 0, | ||
| 135 | 1, 0, 0, 0, 0, 0, | ||
| 136 | 0, 0, 2, 0, 0, 0, | ||
| 137 | 1, 0, 0, 0, 0, 0, | ||
| 138 | 0, 0, 0, 0, 0, 0, | ||
| 139 | 1, 0, 0, 0, 0, 0, | ||
| 140 | 0, 0, 0, 0, 0, 0, | ||
| 141 | 0, 0, 0, 0, 0, 0, | ||
| 142 | 0, 0, 0, 0, 0, 0, | ||
| 143 | 0, 0, 0, 0, 0, 0, | ||
| 144 | 0, 0, 0, 0, 0, 0, | ||
| 145 | 0, 0, 0, 0, 0, 0, | ||
| 146 | 0, 0, 0, 0, 0, 0, | ||
| 147 | 2, 0, 0, 0, 0, 0, | ||
| 148 | 0, 0, 0, 0, 0, 0, | ||
| 149 | 0, 0, 0, 0, 0, 0, | ||
| 150 | 0, 0, 0, 0, 0, 0, | ||
| 151 | 0, 0, 0, 0, 0, 0, | ||
| 152 | 0, 0, 0, 0, 0, 0, | ||
| 153 | 0, 0, 0, 0, 82, 68, | ||
| 154 | 69, 70, 92, 2, 0, 0, | ||
| 155 | 1, 0, 0, 0, 72, 0, | ||
| 156 | 0, 0, 1, 0, 0, 0, | ||
| 157 | 28, 0, 0, 0, 0, 4, | ||
| 158 | 255, 255, 0, 1, 0, 0, | ||
| 159 | 49, 2, 0, 0, 60, 0, | ||
| 160 | 0, 0, 0, 0, 0, 0, | ||
| 161 | 0, 0, 0, 0, 0, 0, | ||
| 162 | 0, 0, 0, 0, 0, 0, | ||
| 163 | 0, 0, 0, 0, 1, 0, | ||
| 164 | 0, 0, 1, 0, 0, 0, | ||
| 165 | 67, 111, 110, 115, 116, 97, | ||
| 166 | 110, 116, 115, 0, 171, 171, | ||
| 167 | 60, 0, 0, 0, 12, 0, | ||
| 168 | 0, 0, 96, 0, 0, 0, | ||
| 169 | 96, 0, 0, 0, 0, 0, | ||
| 170 | 0, 0, 0, 0, 0, 0, | ||
| 171 | 128, 1, 0, 0, 0, 0, | ||
| 172 | 0, 0, 4, 0, 0, 0, | ||
| 173 | 0, 0, 0, 0, 144, 1, | ||
| 174 | 0, 0, 0, 0, 0, 0, | ||
| 175 | 160, 1, 0, 0, 4, 0, | ||
| 176 | 0, 0, 4, 0, 0, 0, | ||
| 177 | 0, 0, 0, 0, 144, 1, | ||
| 178 | 0, 0, 0, 0, 0, 0, | ||
| 179 | 173, 1, 0, 0, 8, 0, | ||
| 180 | 0, 0, 4, 0, 0, 0, | ||
| 181 | 0, 0, 0, 0, 144, 1, | ||
| 182 | 0, 0, 0, 0, 0, 0, | ||
| 183 | 184, 1, 0, 0, 12, 0, | ||
| 184 | 0, 0, 4, 0, 0, 0, | ||
| 185 | 2, 0, 0, 0, 144, 1, | ||
| 186 | 0, 0, 0, 0, 0, 0, | ||
| 187 | 196, 1, 0, 0, 16, 0, | ||
| 188 | 0, 0, 4, 0, 0, 0, | ||
| 189 | 0, 0, 0, 0, 144, 1, | ||
| 190 | 0, 0, 0, 0, 0, 0, | ||
| 191 | 211, 1, 0, 0, 20, 0, | ||
| 192 | 0, 0, 4, 0, 0, 0, | ||
| 193 | 0, 0, 0, 0, 144, 1, | ||
| 194 | 0, 0, 0, 0, 0, 0, | ||
| 195 | 227, 1, 0, 0, 24, 0, | ||
| 196 | 0, 0, 4, 0, 0, 0, | ||
| 197 | 0, 0, 0, 0, 144, 1, | ||
| 198 | 0, 0, 0, 0, 0, 0, | ||
| 199 | 243, 1, 0, 0, 28, 0, | ||
| 200 | 0, 0, 4, 0, 0, 0, | ||
| 201 | 0, 0, 0, 0, 144, 1, | ||
| 202 | 0, 0, 0, 0, 0, 0, | ||
| 203 | 3, 2, 0, 0, 32, 0, | ||
| 204 | 0, 0, 16, 0, 0, 0, | ||
| 205 | 0, 0, 0, 0, 12, 2, | ||
| 206 | 0, 0, 0, 0, 0, 0, | ||
| 207 | 28, 2, 0, 0, 48, 0, | ||
| 208 | 0, 0, 16, 0, 0, 0, | ||
| 209 | 0, 0, 0, 0, 12, 2, | ||
| 210 | 0, 0, 0, 0, 0, 0, | ||
| 211 | 35, 2, 0, 0, 64, 0, | ||
| 212 | 0, 0, 16, 0, 0, 0, | ||
| 213 | 0, 0, 0, 0, 12, 2, | ||
| 214 | 0, 0, 0, 0, 0, 0, | ||
| 215 | 42, 2, 0, 0, 80, 0, | ||
| 216 | 0, 0, 16, 0, 0, 0, | ||
| 217 | 0, 0, 0, 0, 12, 2, | ||
| 218 | 0, 0, 0, 0, 0, 0, | ||
| 219 | 115, 99, 82, 71, 66, 95, | ||
| 220 | 111, 117, 116, 112, 117, 116, | ||
| 221 | 0, 171, 171, 171, 0, 0, | ||
| 222 | 3, 0, 1, 0, 1, 0, | ||
| 223 | 0, 0, 0, 0, 0, 0, | ||
| 224 | 0, 0, 116, 101, 120, 116, | ||
| 225 | 117, 114, 101, 95, 116, 121, | ||
| 226 | 112, 101, 0, 105, 110, 112, | ||
| 227 | 117, 116, 95, 116, 121, 112, | ||
| 228 | 101, 0, 99, 111, 108, 111, | ||
| 229 | 114, 95, 115, 99, 97, 108, | ||
| 230 | 101, 0, 116, 111, 110, 101, | ||
| 231 | 109, 97, 112, 95, 109, 101, | ||
| 232 | 116, 104, 111, 100, 0, 116, | ||
| 233 | 111, 110, 101, 109, 97, 112, | ||
| 234 | 95, 102, 97, 99, 116, 111, | ||
| 235 | 114, 49, 0, 116, 111, 110, | ||
| 236 | 101, 109, 97, 112, 95, 102, | ||
| 237 | 97, 99, 116, 111, 114, 50, | ||
| 238 | 0, 115, 100, 114, 95, 119, | ||
| 239 | 104, 105, 116, 101, 95, 112, | ||
| 240 | 111, 105, 110, 116, 0, 89, | ||
| 241 | 111, 102, 102, 115, 101, 116, | ||
| 242 | 0, 171, 1, 0, 3, 0, | ||
| 243 | 1, 0, 4, 0, 0, 0, | ||
| 244 | 0, 0, 0, 0, 0, 0, | ||
| 245 | 82, 99, 111, 101, 102, 102, | ||
| 246 | 0, 71, 99, 111, 101, 102, | ||
| 247 | 102, 0, 66, 99, 111, 101, | ||
| 248 | 102, 102, 0, 77, 105, 99, | ||
| 249 | 114, 111, 115, 111, 102, 116, | ||
| 250 | 32, 40, 82, 41, 32, 72, | ||
| 251 | 76, 83, 76, 32, 83, 104, | ||
| 252 | 97, 100, 101, 114, 32, 67, | ||
| 253 | 111, 109, 112, 105, 108, 101, | ||
| 254 | 114, 32, 49, 48, 46, 49, | ||
| 255 | 0, 171, 171, 171, 73, 83, | ||
| 256 | 71, 78, 108, 0, 0, 0, | ||
| 257 | 3, 0, 0, 0, 8, 0, | ||
| 258 | 0, 0, 80, 0, 0, 0, | ||
| 259 | 0, 0, 0, 0, 1, 0, | ||
| 260 | 0, 0, 3, 0, 0, 0, | ||
| 261 | 0, 0, 0, 0, 15, 0, | ||
| 262 | 0, 0, 92, 0, 0, 0, | ||
| 263 | 0, 0, 0, 0, 0, 0, | ||
| 264 | 0, 0, 3, 0, 0, 0, | ||
| 265 | 1, 0, 0, 0, 3, 0, | ||
| 266 | 0, 0, 101, 0, 0, 0, | ||
| 267 | 0, 0, 0, 0, 0, 0, | ||
| 268 | 0, 0, 3, 0, 0, 0, | ||
| 269 | 2, 0, 0, 0, 15, 15, | ||
| 270 | 0, 0, 83, 86, 95, 80, | ||
| 271 | 79, 83, 73, 84, 73, 79, | ||
| 272 | 78, 0, 84, 69, 88, 67, | ||
| 273 | 79, 79, 82, 68, 0, 67, | ||
| 274 | 79, 76, 79, 82, 0, 171, | ||
| 275 | 79, 83, 71, 78, 44, 0, | ||
| 276 | 0, 0, 1, 0, 0, 0, | ||
| 277 | 8, 0, 0, 0, 32, 0, | ||
| 278 | 0, 0, 0, 0, 0, 0, | ||
| 279 | 0, 0, 0, 0, 3, 0, | ||
| 280 | 0, 0, 0, 0, 0, 0, | ||
| 281 | 15, 0, 0, 0, 83, 86, | ||
| 282 | 95, 84, 65, 82, 71, 69, | ||
| 283 | 84, 0, 171, 171 | ||
| 284 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Colors.hlsl b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Colors.hlsl new file mode 100644 index 0000000..5757491 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Colors.hlsl | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | |||
| 2 | #include "D3D11_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 5 | { | ||
| 6 | return GetOutputColor(1.0) * input.color; | ||
| 7 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Common.hlsli b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Common.hlsli new file mode 100644 index 0000000..b940c0c --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Common.hlsli | |||
| @@ -0,0 +1,235 @@ | |||
| 1 | |||
| 2 | Texture2D texture0 : register(t0); | ||
| 3 | Texture2D texture1 : register(t1); | ||
| 4 | Texture2D texture2 : register(t2); | ||
| 5 | SamplerState sampler0 : register(s0); | ||
| 6 | |||
| 7 | struct PixelShaderInput | ||
| 8 | { | ||
| 9 | float4 pos : SV_POSITION; | ||
| 10 | float2 tex : TEXCOORD0; | ||
| 11 | float4 color : COLOR0; | ||
| 12 | }; | ||
| 13 | |||
| 14 | // These should mirror the definitions in SDL_render_d3d11.c | ||
| 15 | static const float TONEMAP_NONE = 0; | ||
| 16 | static const float TONEMAP_LINEAR = 1; | ||
| 17 | static const float TONEMAP_CHROME = 2; | ||
| 18 | |||
| 19 | static const float TEXTURETYPE_NONE = 0; | ||
| 20 | static const float TEXTURETYPE_RGB = 1; | ||
| 21 | static const float TEXTURETYPE_NV12 = 2; | ||
| 22 | static const float TEXTURETYPE_NV21 = 3; | ||
| 23 | static const float TEXTURETYPE_YUV = 4; | ||
| 24 | |||
| 25 | static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 26 | static const float INPUTTYPE_SRGB = 1; | ||
| 27 | static const float INPUTTYPE_SCRGB = 2; | ||
| 28 | static const float INPUTTYPE_HDR10 = 3; | ||
| 29 | |||
| 30 | cbuffer Constants : register(b0) | ||
| 31 | { | ||
| 32 | float scRGB_output; | ||
| 33 | float texture_type; | ||
| 34 | float input_type; | ||
| 35 | float color_scale; | ||
| 36 | |||
| 37 | float tonemap_method; | ||
| 38 | float tonemap_factor1; | ||
| 39 | float tonemap_factor2; | ||
| 40 | float sdr_white_point; | ||
| 41 | |||
| 42 | float4 Yoffset; | ||
| 43 | float4 Rcoeff; | ||
| 44 | float4 Gcoeff; | ||
| 45 | float4 Bcoeff; | ||
| 46 | }; | ||
| 47 | |||
| 48 | static const float3x3 mat709to2020 = { | ||
| 49 | { 0.627404, 0.329283, 0.043313 }, | ||
| 50 | { 0.069097, 0.919541, 0.011362 }, | ||
| 51 | { 0.016391, 0.088013, 0.895595 } | ||
| 52 | }; | ||
| 53 | |||
| 54 | static const float3x3 mat2020to709 = { | ||
| 55 | { 1.660496, -0.587656, -0.072840 }, | ||
| 56 | { -0.124547, 1.132895, -0.008348 }, | ||
| 57 | { -0.018154, -0.100597, 1.118751 } | ||
| 58 | }; | ||
| 59 | |||
| 60 | float sRGBtoLinear(float v) | ||
| 61 | { | ||
| 62 | if (v <= 0.04045) { | ||
| 63 | v = (v / 12.92); | ||
| 64 | } else { | ||
| 65 | v = pow(abs(v + 0.055) / 1.055, 2.4); | ||
| 66 | } | ||
| 67 | return v; | ||
| 68 | } | ||
| 69 | |||
| 70 | float sRGBfromLinear(float v) | ||
| 71 | { | ||
| 72 | if (v <= 0.0031308) { | ||
| 73 | v = (v * 12.92); | ||
| 74 | } else { | ||
| 75 | v = (pow(abs(v), 1.0 / 2.4) * 1.055 - 0.055); | ||
| 76 | } | ||
| 77 | return v; | ||
| 78 | } | ||
| 79 | |||
| 80 | float3 PQtoLinear(float3 v) | ||
| 81 | { | ||
| 82 | const float c1 = 0.8359375; | ||
| 83 | const float c2 = 18.8515625; | ||
| 84 | const float c3 = 18.6875; | ||
| 85 | const float oo_m1 = 1.0 / 0.1593017578125; | ||
| 86 | const float oo_m2 = 1.0 / 78.84375; | ||
| 87 | |||
| 88 | float3 num = max(pow(abs(v), oo_m2) - c1, 0.0); | ||
| 89 | float3 den = c2 - c3 * pow(abs(v), oo_m2); | ||
| 90 | return (10000.0 * pow(abs(num / den), oo_m1) / sdr_white_point); | ||
| 91 | } | ||
| 92 | |||
| 93 | float3 ApplyTonemap(float3 v) | ||
| 94 | { | ||
| 95 | if (tonemap_method == TONEMAP_LINEAR) { | ||
| 96 | v *= tonemap_factor1; | ||
| 97 | } else if (tonemap_method == TONEMAP_CHROME) { | ||
| 98 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 99 | // Convert to BT.2020 colorspace for tone mapping | ||
| 100 | v = mul(mat709to2020, v); | ||
| 101 | } | ||
| 102 | |||
| 103 | float vmax = max(v.r, max(v.g, v.b)); | ||
| 104 | if (vmax > 0.0) { | ||
| 105 | float scale = (1.0 + tonemap_factor1 * vmax) / (1.0 + tonemap_factor2 * vmax); | ||
| 106 | v *= scale; | ||
| 107 | } | ||
| 108 | |||
| 109 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 110 | // Convert to BT.709 colorspace after tone mapping | ||
| 111 | v = mul(mat2020to709, v); | ||
| 112 | } | ||
| 113 | } | ||
| 114 | return v; | ||
| 115 | } | ||
| 116 | |||
| 117 | float4 GetInputColor(PixelShaderInput input) | ||
| 118 | { | ||
| 119 | float4 rgba; | ||
| 120 | |||
| 121 | if (texture_type == TEXTURETYPE_NONE) { | ||
| 122 | rgba = 1.0; | ||
| 123 | } else if (texture_type == TEXTURETYPE_RGB) { | ||
| 124 | rgba = texture0.Sample(sampler0, input.tex); | ||
| 125 | } else if (texture_type == TEXTURETYPE_NV12) { | ||
| 126 | float3 yuv; | ||
| 127 | yuv.x = texture0.Sample(sampler0, input.tex).r; | ||
| 128 | yuv.yz = texture1.Sample(sampler0, input.tex).rg; | ||
| 129 | |||
| 130 | yuv += Yoffset.xyz; | ||
| 131 | rgba.r = dot(yuv, Rcoeff.xyz); | ||
| 132 | rgba.g = dot(yuv, Gcoeff.xyz); | ||
| 133 | rgba.b = dot(yuv, Bcoeff.xyz); | ||
| 134 | rgba.a = 1.0; | ||
| 135 | } else if (texture_type == TEXTURETYPE_NV21) { | ||
| 136 | float3 yuv; | ||
| 137 | yuv.x = texture0.Sample(sampler0, input.tex).r; | ||
| 138 | yuv.yz = texture1.Sample(sampler0, input.tex).gr; | ||
| 139 | |||
| 140 | yuv += Yoffset.xyz; | ||
| 141 | rgba.r = dot(yuv, Rcoeff.xyz); | ||
| 142 | rgba.g = dot(yuv, Gcoeff.xyz); | ||
| 143 | rgba.b = dot(yuv, Bcoeff.xyz); | ||
| 144 | rgba.a = 1.0; | ||
| 145 | } else if (texture_type == TEXTURETYPE_YUV) { | ||
| 146 | float3 yuv; | ||
| 147 | yuv.x = texture0.Sample(sampler0, input.tex).r; | ||
| 148 | yuv.y = texture1.Sample(sampler0, input.tex).r; | ||
| 149 | yuv.z = texture2.Sample(sampler0, input.tex).r; | ||
| 150 | |||
| 151 | yuv += Yoffset.xyz; | ||
| 152 | rgba.r = dot(yuv, Rcoeff.xyz); | ||
| 153 | rgba.g = dot(yuv, Gcoeff.xyz); | ||
| 154 | rgba.b = dot(yuv, Bcoeff.xyz); | ||
| 155 | rgba.a = 1.0; | ||
| 156 | } else { | ||
| 157 | // Error! | ||
| 158 | rgba.r = 1.0; | ||
| 159 | rgba.g = 0.0; | ||
| 160 | rgba.b = 0.0; | ||
| 161 | rgba.a = 1.0; | ||
| 162 | } | ||
| 163 | return rgba; | ||
| 164 | } | ||
| 165 | |||
| 166 | float4 GetOutputColor(float4 rgba) | ||
| 167 | { | ||
| 168 | float4 output; | ||
| 169 | |||
| 170 | output.rgb = rgba.rgb * color_scale; | ||
| 171 | output.a = rgba.a; | ||
| 172 | |||
| 173 | return output; | ||
| 174 | } | ||
| 175 | |||
| 176 | float3 GetOutputColorFromSRGB(float3 rgb) | ||
| 177 | { | ||
| 178 | float3 output; | ||
| 179 | |||
| 180 | if (scRGB_output) { | ||
| 181 | rgb.r = sRGBtoLinear(rgb.r); | ||
| 182 | rgb.g = sRGBtoLinear(rgb.g); | ||
| 183 | rgb.b = sRGBtoLinear(rgb.b); | ||
| 184 | } | ||
| 185 | |||
| 186 | output.rgb = rgb * color_scale; | ||
| 187 | |||
| 188 | return output; | ||
| 189 | } | ||
| 190 | |||
| 191 | float3 GetOutputColorFromLinear(float3 rgb) | ||
| 192 | { | ||
| 193 | float3 output; | ||
| 194 | |||
| 195 | output.rgb = rgb * color_scale; | ||
| 196 | |||
| 197 | if (!scRGB_output) { | ||
| 198 | output.r = sRGBfromLinear(output.r); | ||
| 199 | output.g = sRGBfromLinear(output.g); | ||
| 200 | output.b = sRGBfromLinear(output.b); | ||
| 201 | output.rgb = saturate(output.rgb); | ||
| 202 | } | ||
| 203 | |||
| 204 | return output; | ||
| 205 | } | ||
| 206 | |||
| 207 | float4 AdvancedPixelShader(PixelShaderInput input) | ||
| 208 | { | ||
| 209 | float4 rgba = GetInputColor(input); | ||
| 210 | float4 output; | ||
| 211 | |||
| 212 | if (input_type == INPUTTYPE_HDR10) { | ||
| 213 | rgba.rgb = PQtoLinear(rgba.rgb); | ||
| 214 | } | ||
| 215 | |||
| 216 | if (tonemap_method != TONEMAP_NONE) { | ||
| 217 | rgba.rgb = ApplyTonemap(rgba.rgb); | ||
| 218 | } | ||
| 219 | |||
| 220 | if (input_type == INPUTTYPE_SRGB) { | ||
| 221 | output.rgb = GetOutputColorFromSRGB(rgba.rgb); | ||
| 222 | output.a = rgba.a; | ||
| 223 | } else if (input_type == INPUTTYPE_SCRGB) { | ||
| 224 | output.rgb = GetOutputColorFromLinear(rgba.rgb); | ||
| 225 | output.a = rgba.a; | ||
| 226 | } else if (input_type == INPUTTYPE_HDR10) { | ||
| 227 | rgba.rgb = mul(mat2020to709, rgba.rgb); | ||
| 228 | output.rgb = GetOutputColorFromLinear(rgba.rgb); | ||
| 229 | output.a = rgba.a; | ||
| 230 | } else { | ||
| 231 | output = GetOutputColor(rgba); | ||
| 232 | } | ||
| 233 | |||
| 234 | return output * input.color; | ||
| 235 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Textures.h b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Textures.h new file mode 100644 index 0000000..996cac6 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Textures.h | |||
| @@ -0,0 +1,332 @@ | |||
| 1 | #if 0 | ||
| 2 | // | ||
| 3 | // Generated by Microsoft (R) HLSL Shader Compiler 10.1 | ||
| 4 | // | ||
| 5 | // | ||
| 6 | // Buffer Definitions: | ||
| 7 | // | ||
| 8 | // cbuffer Constants | ||
| 9 | // { | ||
| 10 | // | ||
| 11 | // float scRGB_output; // Offset: 0 Size: 4 [unused] | ||
| 12 | // float texture_type; // Offset: 4 Size: 4 [unused] | ||
| 13 | // float input_type; // Offset: 8 Size: 4 [unused] | ||
| 14 | // float color_scale; // Offset: 12 Size: 4 | ||
| 15 | // float tonemap_method; // Offset: 16 Size: 4 [unused] | ||
| 16 | // float tonemap_factor1; // Offset: 20 Size: 4 [unused] | ||
| 17 | // float tonemap_factor2; // Offset: 24 Size: 4 [unused] | ||
| 18 | // float sdr_white_point; // Offset: 28 Size: 4 [unused] | ||
| 19 | // float4 Yoffset; // Offset: 32 Size: 16 [unused] | ||
| 20 | // float4 Rcoeff; // Offset: 48 Size: 16 [unused] | ||
| 21 | // float4 Gcoeff; // Offset: 64 Size: 16 [unused] | ||
| 22 | // float4 Bcoeff; // Offset: 80 Size: 16 [unused] | ||
| 23 | // | ||
| 24 | // } | ||
| 25 | // | ||
| 26 | // | ||
| 27 | // Resource Bindings: | ||
| 28 | // | ||
| 29 | // Name Type Format Dim HLSL Bind Count | ||
| 30 | // ------------------------------ ---------- ------- ----------- -------------- ------ | ||
| 31 | // theSampler sampler NA NA s0 1 | ||
| 32 | // theTexture texture float4 2d t0 1 | ||
| 33 | // Constants cbuffer NA NA cb0 1 | ||
| 34 | // | ||
| 35 | // | ||
| 36 | // | ||
| 37 | // Input signature: | ||
| 38 | // | ||
| 39 | // Name Index Mask Register SysValue Format Used | ||
| 40 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 41 | // SV_POSITION 0 xyzw 0 POS float | ||
| 42 | // TEXCOORD 0 xy 1 NONE float xy | ||
| 43 | // COLOR 0 xyzw 2 NONE float xyzw | ||
| 44 | // | ||
| 45 | // | ||
| 46 | // Output signature: | ||
| 47 | // | ||
| 48 | // Name Index Mask Register SysValue Format Used | ||
| 49 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 50 | // SV_TARGET 0 xyzw 0 TARGET float xyzw | ||
| 51 | // | ||
| 52 | // | ||
| 53 | // Constant buffer to DX9 shader constant mappings: | ||
| 54 | // | ||
| 55 | // Target Reg Buffer Start Reg # of Regs Data Conversion | ||
| 56 | // ---------- ------- --------- --------- ---------------------- | ||
| 57 | // c0 cb0 0 1 ( FLT, FLT, FLT, FLT) | ||
| 58 | // | ||
| 59 | // | ||
| 60 | // Sampler/Resource to DX9 shader sampler mappings: | ||
| 61 | // | ||
| 62 | // Target Sampler Source Sampler Source Resource | ||
| 63 | // -------------- --------------- ---------------- | ||
| 64 | // s0 s0 t0 | ||
| 65 | // | ||
| 66 | // | ||
| 67 | // Level9 shader bytecode: | ||
| 68 | // | ||
| 69 | ps_2_0 | ||
| 70 | dcl t0.xy | ||
| 71 | dcl t1 | ||
| 72 | dcl_2d s0 | ||
| 73 | texld r0, t0, s0 | ||
| 74 | mul r0.xyz, r0, c0.w | ||
| 75 | mul r0, r0, t1 | ||
| 76 | mov oC0, r0 | ||
| 77 | |||
| 78 | // approximately 4 instruction slots used (1 texture, 3 arithmetic) | ||
| 79 | ps_4_0 | ||
| 80 | dcl_constantbuffer CB0[1], immediateIndexed | ||
| 81 | dcl_sampler s0, mode_default | ||
| 82 | dcl_resource_texture2d (float,float,float,float) t0 | ||
| 83 | dcl_input_ps linear v1.xy | ||
| 84 | dcl_input_ps linear v2.xyzw | ||
| 85 | dcl_output o0.xyzw | ||
| 86 | dcl_temps 1 | ||
| 87 | sample r0.xyzw, v1.xyxx, t0.xyzw, s0 | ||
| 88 | mul r0.xyz, r0.xyzx, cb0[0].wwww | ||
| 89 | mul o0.xyzw, r0.xyzw, v2.xyzw | ||
| 90 | ret | ||
| 91 | // Approximately 4 instruction slots used | ||
| 92 | #endif | ||
| 93 | |||
| 94 | const BYTE g_main[] = | ||
| 95 | { | ||
| 96 | 68, 88, 66, 67, 8, 152, | ||
| 97 | 224, 210, 182, 254, 37, 89, | ||
| 98 | 68, 213, 13, 174, 95, 42, | ||
| 99 | 2, 11, 1, 0, 0, 0, | ||
| 100 | 132, 5, 0, 0, 6, 0, | ||
| 101 | 0, 0, 56, 0, 0, 0, | ||
| 102 | 220, 0, 0, 0, 168, 1, | ||
| 103 | 0, 0, 36, 2, 0, 0, | ||
| 104 | 220, 4, 0, 0, 80, 5, | ||
| 105 | 0, 0, 65, 111, 110, 57, | ||
| 106 | 156, 0, 0, 0, 156, 0, | ||
| 107 | 0, 0, 0, 2, 255, 255, | ||
| 108 | 104, 0, 0, 0, 52, 0, | ||
| 109 | 0, 0, 1, 0, 40, 0, | ||
| 110 | 0, 0, 52, 0, 0, 0, | ||
| 111 | 52, 0, 1, 0, 36, 0, | ||
| 112 | 0, 0, 52, 0, 0, 0, | ||
| 113 | 0, 0, 0, 0, 0, 0, | ||
| 114 | 1, 0, 0, 0, 0, 0, | ||
| 115 | 0, 0, 0, 2, 255, 255, | ||
| 116 | 31, 0, 0, 2, 0, 0, | ||
| 117 | 0, 128, 0, 0, 3, 176, | ||
| 118 | 31, 0, 0, 2, 0, 0, | ||
| 119 | 0, 128, 1, 0, 15, 176, | ||
| 120 | 31, 0, 0, 2, 0, 0, | ||
| 121 | 0, 144, 0, 8, 15, 160, | ||
| 122 | 66, 0, 0, 3, 0, 0, | ||
| 123 | 15, 128, 0, 0, 228, 176, | ||
| 124 | 0, 8, 228, 160, 5, 0, | ||
| 125 | 0, 3, 0, 0, 7, 128, | ||
| 126 | 0, 0, 228, 128, 0, 0, | ||
| 127 | 255, 160, 5, 0, 0, 3, | ||
| 128 | 0, 0, 15, 128, 0, 0, | ||
| 129 | 228, 128, 1, 0, 228, 176, | ||
| 130 | 1, 0, 0, 2, 0, 8, | ||
| 131 | 15, 128, 0, 0, 228, 128, | ||
| 132 | 255, 255, 0, 0, 83, 72, | ||
| 133 | 68, 82, 196, 0, 0, 0, | ||
| 134 | 64, 0, 0, 0, 49, 0, | ||
| 135 | 0, 0, 89, 0, 0, 4, | ||
| 136 | 70, 142, 32, 0, 0, 0, | ||
| 137 | 0, 0, 1, 0, 0, 0, | ||
| 138 | 90, 0, 0, 3, 0, 96, | ||
| 139 | 16, 0, 0, 0, 0, 0, | ||
| 140 | 88, 24, 0, 4, 0, 112, | ||
| 141 | 16, 0, 0, 0, 0, 0, | ||
| 142 | 85, 85, 0, 0, 98, 16, | ||
| 143 | 0, 3, 50, 16, 16, 0, | ||
| 144 | 1, 0, 0, 0, 98, 16, | ||
| 145 | 0, 3, 242, 16, 16, 0, | ||
| 146 | 2, 0, 0, 0, 101, 0, | ||
| 147 | 0, 3, 242, 32, 16, 0, | ||
| 148 | 0, 0, 0, 0, 104, 0, | ||
| 149 | 0, 2, 1, 0, 0, 0, | ||
| 150 | 69, 0, 0, 9, 242, 0, | ||
| 151 | 16, 0, 0, 0, 0, 0, | ||
| 152 | 70, 16, 16, 0, 1, 0, | ||
| 153 | 0, 0, 70, 126, 16, 0, | ||
| 154 | 0, 0, 0, 0, 0, 96, | ||
| 155 | 16, 0, 0, 0, 0, 0, | ||
| 156 | 56, 0, 0, 8, 114, 0, | ||
| 157 | 16, 0, 0, 0, 0, 0, | ||
| 158 | 70, 2, 16, 0, 0, 0, | ||
| 159 | 0, 0, 246, 143, 32, 0, | ||
| 160 | 0, 0, 0, 0, 0, 0, | ||
| 161 | 0, 0, 56, 0, 0, 7, | ||
| 162 | 242, 32, 16, 0, 0, 0, | ||
| 163 | 0, 0, 70, 14, 16, 0, | ||
| 164 | 0, 0, 0, 0, 70, 30, | ||
| 165 | 16, 0, 2, 0, 0, 0, | ||
| 166 | 62, 0, 0, 1, 83, 84, | ||
| 167 | 65, 84, 116, 0, 0, 0, | ||
| 168 | 4, 0, 0, 0, 1, 0, | ||
| 169 | 0, 0, 0, 0, 0, 0, | ||
| 170 | 3, 0, 0, 0, 2, 0, | ||
| 171 | 0, 0, 0, 0, 0, 0, | ||
| 172 | 0, 0, 0, 0, 1, 0, | ||
| 173 | 0, 0, 0, 0, 0, 0, | ||
| 174 | 0, 0, 0, 0, 0, 0, | ||
| 175 | 0, 0, 0, 0, 0, 0, | ||
| 176 | 0, 0, 0, 0, 0, 0, | ||
| 177 | 0, 0, 1, 0, 0, 0, | ||
| 178 | 0, 0, 0, 0, 0, 0, | ||
| 179 | 0, 0, 0, 0, 0, 0, | ||
| 180 | 0, 0, 0, 0, 0, 0, | ||
| 181 | 0, 0, 0, 0, 0, 0, | ||
| 182 | 0, 0, 0, 0, 0, 0, | ||
| 183 | 0, 0, 0, 0, 0, 0, | ||
| 184 | 0, 0, 0, 0, 0, 0, | ||
| 185 | 0, 0, 0, 0, 0, 0, | ||
| 186 | 0, 0, 0, 0, 0, 0, | ||
| 187 | 0, 0, 82, 68, 69, 70, | ||
| 188 | 176, 2, 0, 0, 1, 0, | ||
| 189 | 0, 0, 156, 0, 0, 0, | ||
| 190 | 3, 0, 0, 0, 28, 0, | ||
| 191 | 0, 0, 0, 4, 255, 255, | ||
| 192 | 0, 1, 0, 0, 133, 2, | ||
| 193 | 0, 0, 124, 0, 0, 0, | ||
| 194 | 3, 0, 0, 0, 0, 0, | ||
| 195 | 0, 0, 0, 0, 0, 0, | ||
| 196 | 0, 0, 0, 0, 0, 0, | ||
| 197 | 0, 0, 1, 0, 0, 0, | ||
| 198 | 1, 0, 0, 0, 135, 0, | ||
| 199 | 0, 0, 2, 0, 0, 0, | ||
| 200 | 5, 0, 0, 0, 4, 0, | ||
| 201 | 0, 0, 255, 255, 255, 255, | ||
| 202 | 0, 0, 0, 0, 1, 0, | ||
| 203 | 0, 0, 13, 0, 0, 0, | ||
| 204 | 146, 0, 0, 0, 0, 0, | ||
| 205 | 0, 0, 0, 0, 0, 0, | ||
| 206 | 0, 0, 0, 0, 0, 0, | ||
| 207 | 0, 0, 0, 0, 0, 0, | ||
| 208 | 1, 0, 0, 0, 1, 0, | ||
| 209 | 0, 0, 116, 104, 101, 83, | ||
| 210 | 97, 109, 112, 108, 101, 114, | ||
| 211 | 0, 116, 104, 101, 84, 101, | ||
| 212 | 120, 116, 117, 114, 101, 0, | ||
| 213 | 67, 111, 110, 115, 116, 97, | ||
| 214 | 110, 116, 115, 0, 146, 0, | ||
| 215 | 0, 0, 12, 0, 0, 0, | ||
| 216 | 180, 0, 0, 0, 96, 0, | ||
| 217 | 0, 0, 0, 0, 0, 0, | ||
| 218 | 0, 0, 0, 0, 212, 1, | ||
| 219 | 0, 0, 0, 0, 0, 0, | ||
| 220 | 4, 0, 0, 0, 0, 0, | ||
| 221 | 0, 0, 228, 1, 0, 0, | ||
| 222 | 0, 0, 0, 0, 244, 1, | ||
| 223 | 0, 0, 4, 0, 0, 0, | ||
| 224 | 4, 0, 0, 0, 0, 0, | ||
| 225 | 0, 0, 228, 1, 0, 0, | ||
| 226 | 0, 0, 0, 0, 1, 2, | ||
| 227 | 0, 0, 8, 0, 0, 0, | ||
| 228 | 4, 0, 0, 0, 0, 0, | ||
| 229 | 0, 0, 228, 1, 0, 0, | ||
| 230 | 0, 0, 0, 0, 12, 2, | ||
| 231 | 0, 0, 12, 0, 0, 0, | ||
| 232 | 4, 0, 0, 0, 2, 0, | ||
| 233 | 0, 0, 228, 1, 0, 0, | ||
| 234 | 0, 0, 0, 0, 24, 2, | ||
| 235 | 0, 0, 16, 0, 0, 0, | ||
| 236 | 4, 0, 0, 0, 0, 0, | ||
| 237 | 0, 0, 228, 1, 0, 0, | ||
| 238 | 0, 0, 0, 0, 39, 2, | ||
| 239 | 0, 0, 20, 0, 0, 0, | ||
| 240 | 4, 0, 0, 0, 0, 0, | ||
| 241 | 0, 0, 228, 1, 0, 0, | ||
| 242 | 0, 0, 0, 0, 55, 2, | ||
| 243 | 0, 0, 24, 0, 0, 0, | ||
| 244 | 4, 0, 0, 0, 0, 0, | ||
| 245 | 0, 0, 228, 1, 0, 0, | ||
| 246 | 0, 0, 0, 0, 71, 2, | ||
| 247 | 0, 0, 28, 0, 0, 0, | ||
| 248 | 4, 0, 0, 0, 0, 0, | ||
| 249 | 0, 0, 228, 1, 0, 0, | ||
| 250 | 0, 0, 0, 0, 87, 2, | ||
| 251 | 0, 0, 32, 0, 0, 0, | ||
| 252 | 16, 0, 0, 0, 0, 0, | ||
| 253 | 0, 0, 96, 2, 0, 0, | ||
| 254 | 0, 0, 0, 0, 112, 2, | ||
| 255 | 0, 0, 48, 0, 0, 0, | ||
| 256 | 16, 0, 0, 0, 0, 0, | ||
| 257 | 0, 0, 96, 2, 0, 0, | ||
| 258 | 0, 0, 0, 0, 119, 2, | ||
| 259 | 0, 0, 64, 0, 0, 0, | ||
| 260 | 16, 0, 0, 0, 0, 0, | ||
| 261 | 0, 0, 96, 2, 0, 0, | ||
| 262 | 0, 0, 0, 0, 126, 2, | ||
| 263 | 0, 0, 80, 0, 0, 0, | ||
| 264 | 16, 0, 0, 0, 0, 0, | ||
| 265 | 0, 0, 96, 2, 0, 0, | ||
| 266 | 0, 0, 0, 0, 115, 99, | ||
| 267 | 82, 71, 66, 95, 111, 117, | ||
| 268 | 116, 112, 117, 116, 0, 171, | ||
| 269 | 171, 171, 0, 0, 3, 0, | ||
| 270 | 1, 0, 1, 0, 0, 0, | ||
| 271 | 0, 0, 0, 0, 0, 0, | ||
| 272 | 116, 101, 120, 116, 117, 114, | ||
| 273 | 101, 95, 116, 121, 112, 101, | ||
| 274 | 0, 105, 110, 112, 117, 116, | ||
| 275 | 95, 116, 121, 112, 101, 0, | ||
| 276 | 99, 111, 108, 111, 114, 95, | ||
| 277 | 115, 99, 97, 108, 101, 0, | ||
| 278 | 116, 111, 110, 101, 109, 97, | ||
| 279 | 112, 95, 109, 101, 116, 104, | ||
| 280 | 111, 100, 0, 116, 111, 110, | ||
| 281 | 101, 109, 97, 112, 95, 102, | ||
| 282 | 97, 99, 116, 111, 114, 49, | ||
| 283 | 0, 116, 111, 110, 101, 109, | ||
| 284 | 97, 112, 95, 102, 97, 99, | ||
| 285 | 116, 111, 114, 50, 0, 115, | ||
| 286 | 100, 114, 95, 119, 104, 105, | ||
| 287 | 116, 101, 95, 112, 111, 105, | ||
| 288 | 110, 116, 0, 89, 111, 102, | ||
| 289 | 102, 115, 101, 116, 0, 171, | ||
| 290 | 1, 0, 3, 0, 1, 0, | ||
| 291 | 4, 0, 0, 0, 0, 0, | ||
| 292 | 0, 0, 0, 0, 82, 99, | ||
| 293 | 111, 101, 102, 102, 0, 71, | ||
| 294 | 99, 111, 101, 102, 102, 0, | ||
| 295 | 66, 99, 111, 101, 102, 102, | ||
| 296 | 0, 77, 105, 99, 114, 111, | ||
| 297 | 115, 111, 102, 116, 32, 40, | ||
| 298 | 82, 41, 32, 72, 76, 83, | ||
| 299 | 76, 32, 83, 104, 97, 100, | ||
| 300 | 101, 114, 32, 67, 111, 109, | ||
| 301 | 112, 105, 108, 101, 114, 32, | ||
| 302 | 49, 48, 46, 49, 0, 171, | ||
| 303 | 171, 171, 73, 83, 71, 78, | ||
| 304 | 108, 0, 0, 0, 3, 0, | ||
| 305 | 0, 0, 8, 0, 0, 0, | ||
| 306 | 80, 0, 0, 0, 0, 0, | ||
| 307 | 0, 0, 1, 0, 0, 0, | ||
| 308 | 3, 0, 0, 0, 0, 0, | ||
| 309 | 0, 0, 15, 0, 0, 0, | ||
| 310 | 92, 0, 0, 0, 0, 0, | ||
| 311 | 0, 0, 0, 0, 0, 0, | ||
| 312 | 3, 0, 0, 0, 1, 0, | ||
| 313 | 0, 0, 3, 3, 0, 0, | ||
| 314 | 101, 0, 0, 0, 0, 0, | ||
| 315 | 0, 0, 0, 0, 0, 0, | ||
| 316 | 3, 0, 0, 0, 2, 0, | ||
| 317 | 0, 0, 15, 15, 0, 0, | ||
| 318 | 83, 86, 95, 80, 79, 83, | ||
| 319 | 73, 84, 73, 79, 78, 0, | ||
| 320 | 84, 69, 88, 67, 79, 79, | ||
| 321 | 82, 68, 0, 67, 79, 76, | ||
| 322 | 79, 82, 0, 171, 79, 83, | ||
| 323 | 71, 78, 44, 0, 0, 0, | ||
| 324 | 1, 0, 0, 0, 8, 0, | ||
| 325 | 0, 0, 32, 0, 0, 0, | ||
| 326 | 0, 0, 0, 0, 0, 0, | ||
| 327 | 0, 0, 3, 0, 0, 0, | ||
| 328 | 0, 0, 0, 0, 15, 0, | ||
| 329 | 0, 0, 83, 86, 95, 84, | ||
| 330 | 65, 82, 71, 69, 84, 0, | ||
| 331 | 171, 171 | ||
| 332 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Textures.hlsl b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Textures.hlsl new file mode 100644 index 0000000..f2ecf18 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_PixelShader_Textures.hlsl | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | Texture2D theTexture : register(t0); | ||
| 2 | SamplerState theSampler : register(s0); | ||
| 3 | |||
| 4 | #include "D3D11_PixelShader_Common.hlsli" | ||
| 5 | |||
| 6 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 7 | { | ||
| 8 | return GetOutputColor(theTexture.Sample(theSampler, input.tex)) * input.color; | ||
| 9 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_VertexShader.h b/SDL-3.2.8/src/render/direct3d11/D3D11_VertexShader.h new file mode 100644 index 0000000..97beaa3 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_VertexShader.h | |||
| @@ -0,0 +1,339 @@ | |||
| 1 | #if 0 | ||
| 2 | // | ||
| 3 | // Generated by Microsoft (R) HLSL Shader Compiler 10.1 | ||
| 4 | // | ||
| 5 | // | ||
| 6 | // Buffer Definitions: | ||
| 7 | // | ||
| 8 | // cbuffer VertexShaderConstants | ||
| 9 | // { | ||
| 10 | // | ||
| 11 | // row_major float4x4 model; // Offset: 0 Size: 64 | ||
| 12 | // row_major float4x4 projectionAndView;// Offset: 64 Size: 64 | ||
| 13 | // | ||
| 14 | // } | ||
| 15 | // | ||
| 16 | // | ||
| 17 | // Resource Bindings: | ||
| 18 | // | ||
| 19 | // Name Type Format Dim HLSL Bind Count | ||
| 20 | // ------------------------------ ---------- ------- ----------- -------------- ------ | ||
| 21 | // VertexShaderConstants cbuffer NA NA cb0 1 | ||
| 22 | // | ||
| 23 | // | ||
| 24 | // | ||
| 25 | // Input signature: | ||
| 26 | // | ||
| 27 | // Name Index Mask Register SysValue Format Used | ||
| 28 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 29 | // POSITION 0 xyz 0 NONE float xyz | ||
| 30 | // TEXCOORD 0 xy 1 NONE float xy | ||
| 31 | // COLOR 0 xyzw 2 NONE float xyzw | ||
| 32 | // | ||
| 33 | // | ||
| 34 | // Output signature: | ||
| 35 | // | ||
| 36 | // Name Index Mask Register SysValue Format Used | ||
| 37 | // -------------------- ----- ------ -------- -------- ------- ------ | ||
| 38 | // SV_POSITION 0 xyzw 0 POS float xyzw | ||
| 39 | // TEXCOORD 0 xy 1 NONE float xy | ||
| 40 | // COLOR 0 xyzw 2 NONE float xyzw | ||
| 41 | // | ||
| 42 | // | ||
| 43 | // Constant buffer to DX9 shader constant mappings: | ||
| 44 | // | ||
| 45 | // Target Reg Buffer Start Reg # of Regs Data Conversion | ||
| 46 | // ---------- ------- --------- --------- ---------------------- | ||
| 47 | // c1 cb0 0 8 ( FLT, FLT, FLT, FLT) | ||
| 48 | // | ||
| 49 | // | ||
| 50 | // Runtime generated constant mappings: | ||
| 51 | // | ||
| 52 | // Target Reg Constant Description | ||
| 53 | // ---------- -------------------------------------------------- | ||
| 54 | // c0 Vertex Shader position offset | ||
| 55 | // | ||
| 56 | // | ||
| 57 | // Level9 shader bytecode: | ||
| 58 | // | ||
| 59 | vs_2_0 | ||
| 60 | dcl_texcoord v0 | ||
| 61 | dcl_texcoord1 v1 | ||
| 62 | dcl_texcoord2 v2 | ||
| 63 | mul r0, v0.y, c2 | ||
| 64 | mad r0, v0.x, c1, r0 | ||
| 65 | mad r0, v0.z, c3, r0 | ||
| 66 | add r0, r0, c4 | ||
| 67 | mul r1, r0.y, c6 | ||
| 68 | mad r1, r0.x, c5, r1 | ||
| 69 | mad r1, r0.z, c7, r1 | ||
| 70 | mad r0, r0.w, c8, r1 | ||
| 71 | mad oPos.xy, r0.w, c0, r0 | ||
| 72 | mov oPos.zw, r0 | ||
| 73 | mov oT0.xy, v1 | ||
| 74 | mov oT1, v2 | ||
| 75 | |||
| 76 | // approximately 12 instruction slots used | ||
| 77 | vs_4_0 | ||
| 78 | dcl_constantbuffer CB0[8], immediateIndexed | ||
| 79 | dcl_input v0.xyz | ||
| 80 | dcl_input v1.xy | ||
| 81 | dcl_input v2.xyzw | ||
| 82 | dcl_output_siv o0.xyzw, position | ||
| 83 | dcl_output o1.xy | ||
| 84 | dcl_output o2.xyzw | ||
| 85 | dcl_temps 2 | ||
| 86 | mul r0.xyzw, v0.yyyy, cb0[1].xyzw | ||
| 87 | mad r0.xyzw, v0.xxxx, cb0[0].xyzw, r0.xyzw | ||
| 88 | mad r0.xyzw, v0.zzzz, cb0[2].xyzw, r0.xyzw | ||
| 89 | add r0.xyzw, r0.xyzw, cb0[3].xyzw | ||
| 90 | mul r1.xyzw, r0.yyyy, cb0[5].xyzw | ||
| 91 | mad r1.xyzw, r0.xxxx, cb0[4].xyzw, r1.xyzw | ||
| 92 | mad r1.xyzw, r0.zzzz, cb0[6].xyzw, r1.xyzw | ||
| 93 | mad o0.xyzw, r0.wwww, cb0[7].xyzw, r1.xyzw | ||
| 94 | mov o1.xy, v1.xyxx | ||
| 95 | mov o2.xyzw, v2.xyzw | ||
| 96 | ret | ||
| 97 | // Approximately 11 instruction slots used | ||
| 98 | #endif | ||
| 99 | |||
| 100 | const BYTE g_main[] = | ||
| 101 | { | ||
| 102 | 68, 88, 66, 67, 152, 172, | ||
| 103 | 81, 45, 198, 200, 12, 38, | ||
| 104 | 143, 4, 178, 228, 158, 175, | ||
| 105 | 169, 64, 1, 0, 0, 0, | ||
| 106 | 140, 5, 0, 0, 6, 0, | ||
| 107 | 0, 0, 56, 0, 0, 0, | ||
| 108 | 108, 1, 0, 0, 52, 3, | ||
| 109 | 0, 0, 176, 3, 0, 0, | ||
| 110 | 168, 4, 0, 0, 24, 5, | ||
| 111 | 0, 0, 65, 111, 110, 57, | ||
| 112 | 44, 1, 0, 0, 44, 1, | ||
| 113 | 0, 0, 0, 2, 254, 255, | ||
| 114 | 248, 0, 0, 0, 52, 0, | ||
| 115 | 0, 0, 1, 0, 36, 0, | ||
| 116 | 0, 0, 48, 0, 0, 0, | ||
| 117 | 48, 0, 0, 0, 36, 0, | ||
| 118 | 1, 0, 48, 0, 0, 0, | ||
| 119 | 0, 0, 8, 0, 1, 0, | ||
| 120 | 0, 0, 0, 0, 0, 0, | ||
| 121 | 0, 0, 0, 2, 254, 255, | ||
| 122 | 31, 0, 0, 2, 5, 0, | ||
| 123 | 0, 128, 0, 0, 15, 144, | ||
| 124 | 31, 0, 0, 2, 5, 0, | ||
| 125 | 1, 128, 1, 0, 15, 144, | ||
| 126 | 31, 0, 0, 2, 5, 0, | ||
| 127 | 2, 128, 2, 0, 15, 144, | ||
| 128 | 5, 0, 0, 3, 0, 0, | ||
| 129 | 15, 128, 0, 0, 85, 144, | ||
| 130 | 2, 0, 228, 160, 4, 0, | ||
| 131 | 0, 4, 0, 0, 15, 128, | ||
| 132 | 0, 0, 0, 144, 1, 0, | ||
| 133 | 228, 160, 0, 0, 228, 128, | ||
| 134 | 4, 0, 0, 4, 0, 0, | ||
| 135 | 15, 128, 0, 0, 170, 144, | ||
| 136 | 3, 0, 228, 160, 0, 0, | ||
| 137 | 228, 128, 2, 0, 0, 3, | ||
| 138 | 0, 0, 15, 128, 0, 0, | ||
| 139 | 228, 128, 4, 0, 228, 160, | ||
| 140 | 5, 0, 0, 3, 1, 0, | ||
| 141 | 15, 128, 0, 0, 85, 128, | ||
| 142 | 6, 0, 228, 160, 4, 0, | ||
| 143 | 0, 4, 1, 0, 15, 128, | ||
| 144 | 0, 0, 0, 128, 5, 0, | ||
| 145 | 228, 160, 1, 0, 228, 128, | ||
| 146 | 4, 0, 0, 4, 1, 0, | ||
| 147 | 15, 128, 0, 0, 170, 128, | ||
| 148 | 7, 0, 228, 160, 1, 0, | ||
| 149 | 228, 128, 4, 0, 0, 4, | ||
| 150 | 0, 0, 15, 128, 0, 0, | ||
| 151 | 255, 128, 8, 0, 228, 160, | ||
| 152 | 1, 0, 228, 128, 4, 0, | ||
| 153 | 0, 4, 0, 0, 3, 192, | ||
| 154 | 0, 0, 255, 128, 0, 0, | ||
| 155 | 228, 160, 0, 0, 228, 128, | ||
| 156 | 1, 0, 0, 2, 0, 0, | ||
| 157 | 12, 192, 0, 0, 228, 128, | ||
| 158 | 1, 0, 0, 2, 0, 0, | ||
| 159 | 3, 224, 1, 0, 228, 144, | ||
| 160 | 1, 0, 0, 2, 1, 0, | ||
| 161 | 15, 224, 2, 0, 228, 144, | ||
| 162 | 255, 255, 0, 0, 83, 72, | ||
| 163 | 68, 82, 192, 1, 0, 0, | ||
| 164 | 64, 0, 1, 0, 112, 0, | ||
| 165 | 0, 0, 89, 0, 0, 4, | ||
| 166 | 70, 142, 32, 0, 0, 0, | ||
| 167 | 0, 0, 8, 0, 0, 0, | ||
| 168 | 95, 0, 0, 3, 114, 16, | ||
| 169 | 16, 0, 0, 0, 0, 0, | ||
| 170 | 95, 0, 0, 3, 50, 16, | ||
| 171 | 16, 0, 1, 0, 0, 0, | ||
| 172 | 95, 0, 0, 3, 242, 16, | ||
| 173 | 16, 0, 2, 0, 0, 0, | ||
| 174 | 103, 0, 0, 4, 242, 32, | ||
| 175 | 16, 0, 0, 0, 0, 0, | ||
| 176 | 1, 0, 0, 0, 101, 0, | ||
| 177 | 0, 3, 50, 32, 16, 0, | ||
| 178 | 1, 0, 0, 0, 101, 0, | ||
| 179 | 0, 3, 242, 32, 16, 0, | ||
| 180 | 2, 0, 0, 0, 104, 0, | ||
| 181 | 0, 2, 2, 0, 0, 0, | ||
| 182 | 56, 0, 0, 8, 242, 0, | ||
| 183 | 16, 0, 0, 0, 0, 0, | ||
| 184 | 86, 21, 16, 0, 0, 0, | ||
| 185 | 0, 0, 70, 142, 32, 0, | ||
| 186 | 0, 0, 0, 0, 1, 0, | ||
| 187 | 0, 0, 50, 0, 0, 10, | ||
| 188 | 242, 0, 16, 0, 0, 0, | ||
| 189 | 0, 0, 6, 16, 16, 0, | ||
| 190 | 0, 0, 0, 0, 70, 142, | ||
| 191 | 32, 0, 0, 0, 0, 0, | ||
| 192 | 0, 0, 0, 0, 70, 14, | ||
| 193 | 16, 0, 0, 0, 0, 0, | ||
| 194 | 50, 0, 0, 10, 242, 0, | ||
| 195 | 16, 0, 0, 0, 0, 0, | ||
| 196 | 166, 26, 16, 0, 0, 0, | ||
| 197 | 0, 0, 70, 142, 32, 0, | ||
| 198 | 0, 0, 0, 0, 2, 0, | ||
| 199 | 0, 0, 70, 14, 16, 0, | ||
| 200 | 0, 0, 0, 0, 0, 0, | ||
| 201 | 0, 8, 242, 0, 16, 0, | ||
| 202 | 0, 0, 0, 0, 70, 14, | ||
| 203 | 16, 0, 0, 0, 0, 0, | ||
| 204 | 70, 142, 32, 0, 0, 0, | ||
| 205 | 0, 0, 3, 0, 0, 0, | ||
| 206 | 56, 0, 0, 8, 242, 0, | ||
| 207 | 16, 0, 1, 0, 0, 0, | ||
| 208 | 86, 5, 16, 0, 0, 0, | ||
| 209 | 0, 0, 70, 142, 32, 0, | ||
| 210 | 0, 0, 0, 0, 5, 0, | ||
| 211 | 0, 0, 50, 0, 0, 10, | ||
| 212 | 242, 0, 16, 0, 1, 0, | ||
| 213 | 0, 0, 6, 0, 16, 0, | ||
| 214 | 0, 0, 0, 0, 70, 142, | ||
| 215 | 32, 0, 0, 0, 0, 0, | ||
| 216 | 4, 0, 0, 0, 70, 14, | ||
| 217 | 16, 0, 1, 0, 0, 0, | ||
| 218 | 50, 0, 0, 10, 242, 0, | ||
| 219 | 16, 0, 1, 0, 0, 0, | ||
| 220 | 166, 10, 16, 0, 0, 0, | ||
| 221 | 0, 0, 70, 142, 32, 0, | ||
| 222 | 0, 0, 0, 0, 6, 0, | ||
| 223 | 0, 0, 70, 14, 16, 0, | ||
| 224 | 1, 0, 0, 0, 50, 0, | ||
| 225 | 0, 10, 242, 32, 16, 0, | ||
| 226 | 0, 0, 0, 0, 246, 15, | ||
| 227 | 16, 0, 0, 0, 0, 0, | ||
| 228 | 70, 142, 32, 0, 0, 0, | ||
| 229 | 0, 0, 7, 0, 0, 0, | ||
| 230 | 70, 14, 16, 0, 1, 0, | ||
| 231 | 0, 0, 54, 0, 0, 5, | ||
| 232 | 50, 32, 16, 0, 1, 0, | ||
| 233 | 0, 0, 70, 16, 16, 0, | ||
| 234 | 1, 0, 0, 0, 54, 0, | ||
| 235 | 0, 5, 242, 32, 16, 0, | ||
| 236 | 2, 0, 0, 0, 70, 30, | ||
| 237 | 16, 0, 2, 0, 0, 0, | ||
| 238 | 62, 0, 0, 1, 83, 84, | ||
| 239 | 65, 84, 116, 0, 0, 0, | ||
| 240 | 11, 0, 0, 0, 2, 0, | ||
| 241 | 0, 0, 0, 0, 0, 0, | ||
| 242 | 6, 0, 0, 0, 8, 0, | ||
| 243 | 0, 0, 0, 0, 0, 0, | ||
| 244 | 0, 0, 0, 0, 1, 0, | ||
| 245 | 0, 0, 0, 0, 0, 0, | ||
| 246 | 0, 0, 0, 0, 0, 0, | ||
| 247 | 0, 0, 0, 0, 0, 0, | ||
| 248 | 0, 0, 0, 0, 0, 0, | ||
| 249 | 0, 0, 0, 0, 0, 0, | ||
| 250 | 0, 0, 0, 0, 0, 0, | ||
| 251 | 0, 0, 0, 0, 0, 0, | ||
| 252 | 0, 0, 0, 0, 2, 0, | ||
| 253 | 0, 0, 0, 0, 0, 0, | ||
| 254 | 0, 0, 0, 0, 0, 0, | ||
| 255 | 0, 0, 0, 0, 0, 0, | ||
| 256 | 0, 0, 0, 0, 0, 0, | ||
| 257 | 0, 0, 0, 0, 0, 0, | ||
| 258 | 0, 0, 0, 0, 0, 0, | ||
| 259 | 0, 0, 82, 68, 69, 70, | ||
| 260 | 240, 0, 0, 0, 1, 0, | ||
| 261 | 0, 0, 84, 0, 0, 0, | ||
| 262 | 1, 0, 0, 0, 28, 0, | ||
| 263 | 0, 0, 0, 4, 254, 255, | ||
| 264 | 0, 1, 0, 0, 198, 0, | ||
| 265 | 0, 0, 60, 0, 0, 0, | ||
| 266 | 0, 0, 0, 0, 0, 0, | ||
| 267 | 0, 0, 0, 0, 0, 0, | ||
| 268 | 0, 0, 0, 0, 0, 0, | ||
| 269 | 0, 0, 1, 0, 0, 0, | ||
| 270 | 1, 0, 0, 0, 86, 101, | ||
| 271 | 114, 116, 101, 120, 83, 104, | ||
| 272 | 97, 100, 101, 114, 67, 111, | ||
| 273 | 110, 115, 116, 97, 110, 116, | ||
| 274 | 115, 0, 171, 171, 60, 0, | ||
| 275 | 0, 0, 2, 0, 0, 0, | ||
| 276 | 108, 0, 0, 0, 128, 0, | ||
| 277 | 0, 0, 0, 0, 0, 0, | ||
| 278 | 0, 0, 0, 0, 156, 0, | ||
| 279 | 0, 0, 0, 0, 0, 0, | ||
| 280 | 64, 0, 0, 0, 2, 0, | ||
| 281 | 0, 0, 164, 0, 0, 0, | ||
| 282 | 0, 0, 0, 0, 180, 0, | ||
| 283 | 0, 0, 64, 0, 0, 0, | ||
| 284 | 64, 0, 0, 0, 2, 0, | ||
| 285 | 0, 0, 164, 0, 0, 0, | ||
| 286 | 0, 0, 0, 0, 109, 111, | ||
| 287 | 100, 101, 108, 0, 171, 171, | ||
| 288 | 2, 0, 3, 0, 4, 0, | ||
| 289 | 4, 0, 0, 0, 0, 0, | ||
| 290 | 0, 0, 0, 0, 112, 114, | ||
| 291 | 111, 106, 101, 99, 116, 105, | ||
| 292 | 111, 110, 65, 110, 100, 86, | ||
| 293 | 105, 101, 119, 0, 77, 105, | ||
| 294 | 99, 114, 111, 115, 111, 102, | ||
| 295 | 116, 32, 40, 82, 41, 32, | ||
| 296 | 72, 76, 83, 76, 32, 83, | ||
| 297 | 104, 97, 100, 101, 114, 32, | ||
| 298 | 67, 111, 109, 112, 105, 108, | ||
| 299 | 101, 114, 32, 49, 48, 46, | ||
| 300 | 49, 0, 171, 171, 73, 83, | ||
| 301 | 71, 78, 104, 0, 0, 0, | ||
| 302 | 3, 0, 0, 0, 8, 0, | ||
| 303 | 0, 0, 80, 0, 0, 0, | ||
| 304 | 0, 0, 0, 0, 0, 0, | ||
| 305 | 0, 0, 3, 0, 0, 0, | ||
| 306 | 0, 0, 0, 0, 7, 7, | ||
| 307 | 0, 0, 89, 0, 0, 0, | ||
| 308 | 0, 0, 0, 0, 0, 0, | ||
| 309 | 0, 0, 3, 0, 0, 0, | ||
| 310 | 1, 0, 0, 0, 3, 3, | ||
| 311 | 0, 0, 98, 0, 0, 0, | ||
| 312 | 0, 0, 0, 0, 0, 0, | ||
| 313 | 0, 0, 3, 0, 0, 0, | ||
| 314 | 2, 0, 0, 0, 15, 15, | ||
| 315 | 0, 0, 80, 79, 83, 73, | ||
| 316 | 84, 73, 79, 78, 0, 84, | ||
| 317 | 69, 88, 67, 79, 79, 82, | ||
| 318 | 68, 0, 67, 79, 76, 79, | ||
| 319 | 82, 0, 79, 83, 71, 78, | ||
| 320 | 108, 0, 0, 0, 3, 0, | ||
| 321 | 0, 0, 8, 0, 0, 0, | ||
| 322 | 80, 0, 0, 0, 0, 0, | ||
| 323 | 0, 0, 1, 0, 0, 0, | ||
| 324 | 3, 0, 0, 0, 0, 0, | ||
| 325 | 0, 0, 15, 0, 0, 0, | ||
| 326 | 92, 0, 0, 0, 0, 0, | ||
| 327 | 0, 0, 0, 0, 0, 0, | ||
| 328 | 3, 0, 0, 0, 1, 0, | ||
| 329 | 0, 0, 3, 12, 0, 0, | ||
| 330 | 101, 0, 0, 0, 0, 0, | ||
| 331 | 0, 0, 0, 0, 0, 0, | ||
| 332 | 3, 0, 0, 0, 2, 0, | ||
| 333 | 0, 0, 15, 0, 0, 0, | ||
| 334 | 83, 86, 95, 80, 79, 83, | ||
| 335 | 73, 84, 73, 79, 78, 0, | ||
| 336 | 84, 69, 88, 67, 79, 79, | ||
| 337 | 82, 68, 0, 67, 79, 76, | ||
| 338 | 79, 82, 0, 171 | ||
| 339 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/D3D11_VertexShader.hlsl b/SDL-3.2.8/src/render/direct3d11/D3D11_VertexShader.hlsl new file mode 100644 index 0000000..63e5172 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/D3D11_VertexShader.hlsl | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | #pragma pack_matrix( row_major ) | ||
| 2 | |||
| 3 | cbuffer VertexShaderConstants : register(b0) | ||
| 4 | { | ||
| 5 | matrix model; | ||
| 6 | matrix projectionAndView; | ||
| 7 | }; | ||
| 8 | |||
| 9 | struct VertexShaderInput | ||
| 10 | { | ||
| 11 | float3 pos : POSITION; | ||
| 12 | float2 tex : TEXCOORD0; | ||
| 13 | float4 color : COLOR0; | ||
| 14 | }; | ||
| 15 | |||
| 16 | struct VertexShaderOutput | ||
| 17 | { | ||
| 18 | float4 pos : SV_POSITION; | ||
| 19 | float2 tex : TEXCOORD0; | ||
| 20 | float4 color : COLOR0; | ||
| 21 | }; | ||
| 22 | |||
| 23 | VertexShaderOutput main(VertexShaderInput input) | ||
| 24 | { | ||
| 25 | VertexShaderOutput output; | ||
| 26 | float4 pos = float4(input.pos, 1.0f); | ||
| 27 | |||
| 28 | // Transform the vertex position into projected space. | ||
| 29 | pos = mul(pos, model); | ||
| 30 | pos = mul(pos, projectionAndView); | ||
| 31 | output.pos = pos; | ||
| 32 | |||
| 33 | // Pass through texture coordinates and color values without transformation | ||
| 34 | output.tex = input.tex; | ||
| 35 | output.color = input.color; | ||
| 36 | |||
| 37 | return output; | ||
| 38 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/SDL_render_d3d11.c b/SDL-3.2.8/src/render/direct3d11/SDL_render_d3d11.c new file mode 100644 index 0000000..dc1a722 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/SDL_render_d3d11.c | |||
| @@ -0,0 +1,2767 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_D3D11 | ||
| 24 | |||
| 25 | #define COBJMACROS | ||
| 26 | #include "../../core/windows/SDL_windows.h" | ||
| 27 | #include "../../video/windows/SDL_windowswindow.h" | ||
| 28 | #include "../SDL_sysrender.h" | ||
| 29 | #include "../SDL_d3dmath.h" | ||
| 30 | #include "../../video/SDL_pixels_c.h" | ||
| 31 | |||
| 32 | #include <d3d11_1.h> | ||
| 33 | #include <dxgi1_4.h> | ||
| 34 | #include <dxgidebug.h> | ||
| 35 | |||
| 36 | #include "SDL_shaders_d3d11.h" | ||
| 37 | |||
| 38 | #if defined(_MSC_VER) && !defined(__clang__) | ||
| 39 | #define SDL_COMPOSE_ERROR(str) __FUNCTION__ ", " str | ||
| 40 | #else | ||
| 41 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 42 | #endif | ||
| 43 | |||
| 44 | #define SAFE_RELEASE(X) \ | ||
| 45 | if ((X)) { \ | ||
| 46 | IUnknown_Release(SDL_static_cast(IUnknown *, X)); \ | ||
| 47 | X = NULL; \ | ||
| 48 | } | ||
| 49 | |||
| 50 | /* !!! FIXME: vertex buffer bandwidth could be lower; only use UV coords when | ||
| 51 | !!! FIXME: textures are needed. */ | ||
| 52 | |||
| 53 | // Sampler types | ||
| 54 | typedef enum | ||
| 55 | { | ||
| 56 | D3D11_SAMPLER_NEAREST_CLAMP, | ||
| 57 | D3D11_SAMPLER_NEAREST_WRAP, | ||
| 58 | D3D11_SAMPLER_LINEAR_CLAMP, | ||
| 59 | D3D11_SAMPLER_LINEAR_WRAP, | ||
| 60 | D3D11_SAMPLER_COUNT | ||
| 61 | } D3D11_Sampler; | ||
| 62 | |||
| 63 | // Vertex shader, common values | ||
| 64 | typedef struct | ||
| 65 | { | ||
| 66 | Float4X4 model; | ||
| 67 | Float4X4 projectionAndView; | ||
| 68 | } D3D11_VertexShaderConstants; | ||
| 69 | |||
| 70 | // These should mirror the definitions in D3D11_PixelShader_Common.hlsli | ||
| 71 | //static const float TONEMAP_NONE = 0; | ||
| 72 | //static const float TONEMAP_LINEAR = 1; | ||
| 73 | static const float TONEMAP_CHROME = 2; | ||
| 74 | |||
| 75 | //static const float TEXTURETYPE_NONE = 0; | ||
| 76 | static const float TEXTURETYPE_RGB = 1; | ||
| 77 | static const float TEXTURETYPE_NV12 = 2; | ||
| 78 | static const float TEXTURETYPE_NV21 = 3; | ||
| 79 | static const float TEXTURETYPE_YUV = 4; | ||
| 80 | |||
| 81 | static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 82 | static const float INPUTTYPE_SRGB = 1; | ||
| 83 | static const float INPUTTYPE_SCRGB = 2; | ||
| 84 | static const float INPUTTYPE_HDR10 = 3; | ||
| 85 | |||
| 86 | typedef struct | ||
| 87 | { | ||
| 88 | float scRGB_output; | ||
| 89 | float texture_type; | ||
| 90 | float input_type; | ||
| 91 | float color_scale; | ||
| 92 | |||
| 93 | float tonemap_method; | ||
| 94 | float tonemap_factor1; | ||
| 95 | float tonemap_factor2; | ||
| 96 | float sdr_white_point; | ||
| 97 | |||
| 98 | float YCbCr_matrix[16]; | ||
| 99 | } D3D11_PixelShaderConstants; | ||
| 100 | |||
| 101 | typedef struct | ||
| 102 | { | ||
| 103 | ID3D11Buffer *constants; | ||
| 104 | D3D11_PixelShaderConstants shader_constants; | ||
| 105 | } D3D11_PixelShaderState; | ||
| 106 | |||
| 107 | // Per-vertex data | ||
| 108 | typedef struct | ||
| 109 | { | ||
| 110 | Float2 pos; | ||
| 111 | Float2 tex; | ||
| 112 | SDL_FColor color; | ||
| 113 | } D3D11_VertexPositionColor; | ||
| 114 | |||
| 115 | // Per-texture data | ||
| 116 | typedef struct | ||
| 117 | { | ||
| 118 | int w, h; | ||
| 119 | ID3D11Texture2D *mainTexture; | ||
| 120 | ID3D11ShaderResourceView *mainTextureResourceView; | ||
| 121 | ID3D11RenderTargetView *mainTextureRenderTargetView; | ||
| 122 | ID3D11Texture2D *stagingTexture; | ||
| 123 | int lockedTexturePositionX; | ||
| 124 | int lockedTexturePositionY; | ||
| 125 | D3D11_FILTER scaleMode; | ||
| 126 | D3D11_Shader shader; | ||
| 127 | const float *YCbCr_matrix; | ||
| 128 | #ifdef SDL_HAVE_YUV | ||
| 129 | // YV12 texture support | ||
| 130 | bool yuv; | ||
| 131 | ID3D11Texture2D *mainTextureU; | ||
| 132 | ID3D11ShaderResourceView *mainTextureResourceViewU; | ||
| 133 | ID3D11Texture2D *mainTextureV; | ||
| 134 | ID3D11ShaderResourceView *mainTextureResourceViewV; | ||
| 135 | |||
| 136 | // NV12 texture support | ||
| 137 | bool nv12; | ||
| 138 | ID3D11ShaderResourceView *mainTextureResourceViewNV; | ||
| 139 | |||
| 140 | Uint8 *pixels; | ||
| 141 | int pitch; | ||
| 142 | SDL_Rect locked_rect; | ||
| 143 | #endif | ||
| 144 | } D3D11_TextureData; | ||
| 145 | |||
| 146 | // Blend mode data | ||
| 147 | typedef struct | ||
| 148 | { | ||
| 149 | SDL_BlendMode blendMode; | ||
| 150 | ID3D11BlendState *blendState; | ||
| 151 | } D3D11_BlendMode; | ||
| 152 | |||
| 153 | // Private renderer data | ||
| 154 | typedef struct | ||
| 155 | { | ||
| 156 | SDL_SharedObject *hDXGIMod; | ||
| 157 | SDL_SharedObject *hD3D11Mod; | ||
| 158 | IDXGIFactory2 *dxgiFactory; | ||
| 159 | IDXGIAdapter *dxgiAdapter; | ||
| 160 | IDXGIDebug *dxgiDebug; | ||
| 161 | ID3D11Device1 *d3dDevice; | ||
| 162 | ID3D11DeviceContext1 *d3dContext; | ||
| 163 | IDXGISwapChain1 *swapChain; | ||
| 164 | DXGI_SWAP_EFFECT swapEffect; | ||
| 165 | UINT syncInterval; | ||
| 166 | UINT presentFlags; | ||
| 167 | ID3D11RenderTargetView *mainRenderTargetView; | ||
| 168 | ID3D11RenderTargetView *currentOffscreenRenderTargetView; | ||
| 169 | ID3D11InputLayout *inputLayout; | ||
| 170 | ID3D11Buffer *vertexBuffers[8]; | ||
| 171 | size_t vertexBufferSizes[8]; | ||
| 172 | ID3D11VertexShader *vertexShader; | ||
| 173 | ID3D11PixelShader *pixelShaders[NUM_SHADERS]; | ||
| 174 | int blendModesCount; | ||
| 175 | D3D11_BlendMode *blendModes; | ||
| 176 | ID3D11SamplerState *samplers[D3D11_SAMPLER_COUNT]; | ||
| 177 | D3D_FEATURE_LEVEL featureLevel; | ||
| 178 | bool pixelSizeChanged; | ||
| 179 | |||
| 180 | // Rasterizers | ||
| 181 | ID3D11RasterizerState *mainRasterizer; | ||
| 182 | ID3D11RasterizerState *clippedRasterizer; | ||
| 183 | |||
| 184 | // Vertex buffer constants | ||
| 185 | D3D11_VertexShaderConstants vertexShaderConstantsData; | ||
| 186 | ID3D11Buffer *vertexShaderConstants; | ||
| 187 | |||
| 188 | // Cached renderer properties | ||
| 189 | DXGI_MODE_ROTATION rotation; | ||
| 190 | ID3D11RenderTargetView *currentRenderTargetView; | ||
| 191 | ID3D11RasterizerState *currentRasterizerState; | ||
| 192 | ID3D11BlendState *currentBlendState; | ||
| 193 | D3D11_Shader currentShader; | ||
| 194 | D3D11_PixelShaderState currentShaderState[NUM_SHADERS]; | ||
| 195 | ID3D11ShaderResourceView *currentShaderResource; | ||
| 196 | ID3D11SamplerState *currentSampler; | ||
| 197 | bool cliprectDirty; | ||
| 198 | bool currentCliprectEnabled; | ||
| 199 | SDL_Rect currentCliprect; | ||
| 200 | SDL_Rect currentViewport; | ||
| 201 | int currentViewportRotation; | ||
| 202 | bool viewportDirty; | ||
| 203 | Float4X4 identity; | ||
| 204 | int currentVertexBuffer; | ||
| 205 | } D3D11_RenderData; | ||
| 206 | |||
| 207 | // Define D3D GUIDs here so we don't have to include uuid.lib. | ||
| 208 | |||
| 209 | #ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA | ||
| 210 | #pragma GCC diagnostic push | ||
| 211 | #pragma GCC diagnostic ignored "-Wunused-const-variable" | ||
| 212 | #endif | ||
| 213 | |||
| 214 | static const GUID SDL_IID_IDXGIFactory2 = { 0x50c83a1c, 0xe072, 0x4c48, { 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0 } }; | ||
| 215 | static const GUID SDL_IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } }; | ||
| 216 | static const GUID SDL_IID_ID3D11Texture2D = { 0x6f15aaf2, 0xd208, 0x4e89, { 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c } }; | ||
| 217 | static const GUID SDL_IID_ID3D11Device1 = { 0xa04bfb29, 0x08ef, 0x43d6, { 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86 } }; | ||
| 218 | static const GUID SDL_IID_ID3D11DeviceContext1 = { 0xbb2c6faa, 0xb5fb, 0x4082, { 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1 } }; | ||
| 219 | static const GUID SDL_IID_IDXGISwapChain2 = { 0x94d99bdb, 0xf1f8, 0x4ab0, { 0xb2, 0x36, 0x7d, 0xa0, 0x17, 0x0e, 0xda, 0xb1 } }; | ||
| 220 | static const GUID SDL_IID_IDXGIDebug1 = { 0xc5a05f0c, 0x16f2, 0x4adf, { 0x9f, 0x4d, 0xa8, 0xc4, 0xd5, 0x8a, 0xc5, 0x50 } }; | ||
| 221 | static const GUID SDL_IID_IDXGIInfoQueue = { 0xD67441C7, 0x672A, 0x476f, { 0x9E, 0x82, 0xCD, 0x55, 0xB4, 0x49, 0x49, 0xCE } }; | ||
| 222 | static const GUID SDL_DXGI_DEBUG_ALL = { 0xe48ae283, 0xda80, 0x490b, { 0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x8 } }; | ||
| 223 | |||
| 224 | #ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA | ||
| 225 | #pragma GCC diagnostic pop | ||
| 226 | #endif | ||
| 227 | |||
| 228 | SDL_PixelFormat D3D11_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat) | ||
| 229 | { | ||
| 230 | switch (dxgiFormat) { | ||
| 231 | case DXGI_FORMAT_B8G8R8A8_UNORM: | ||
| 232 | case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: | ||
| 233 | return SDL_PIXELFORMAT_ARGB8888; | ||
| 234 | case DXGI_FORMAT_R8G8B8A8_UNORM: | ||
| 235 | case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: | ||
| 236 | return SDL_PIXELFORMAT_ABGR8888; | ||
| 237 | case DXGI_FORMAT_B8G8R8X8_UNORM: | ||
| 238 | case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: | ||
| 239 | return SDL_PIXELFORMAT_XRGB8888; | ||
| 240 | case DXGI_FORMAT_R10G10B10A2_UNORM: | ||
| 241 | return SDL_PIXELFORMAT_ABGR2101010; | ||
| 242 | case DXGI_FORMAT_R16G16B16A16_FLOAT: | ||
| 243 | return SDL_PIXELFORMAT_RGBA64_FLOAT; | ||
| 244 | default: | ||
| 245 | return SDL_PIXELFORMAT_UNKNOWN; | ||
| 246 | } | ||
| 247 | } | ||
| 248 | |||
| 249 | static DXGI_FORMAT SDLPixelFormatToDXGITextureFormat(Uint32 format, Uint32 output_colorspace) | ||
| 250 | { | ||
| 251 | switch (format) { | ||
| 252 | case SDL_PIXELFORMAT_RGBA64_FLOAT: | ||
| 253 | return DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 254 | case SDL_PIXELFORMAT_ABGR2101010: | ||
| 255 | return DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 256 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 257 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 258 | return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; | ||
| 259 | } | ||
| 260 | return DXGI_FORMAT_B8G8R8A8_UNORM; | ||
| 261 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 262 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 263 | return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; | ||
| 264 | } | ||
| 265 | return DXGI_FORMAT_R8G8B8A8_UNORM; | ||
| 266 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 267 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 268 | return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; | ||
| 269 | } | ||
| 270 | return DXGI_FORMAT_B8G8R8X8_UNORM; | ||
| 271 | case SDL_PIXELFORMAT_YV12: | ||
| 272 | case SDL_PIXELFORMAT_IYUV: | ||
| 273 | return DXGI_FORMAT_R8_UNORM; | ||
| 274 | case SDL_PIXELFORMAT_NV12: | ||
| 275 | case SDL_PIXELFORMAT_NV21: | ||
| 276 | return DXGI_FORMAT_NV12; | ||
| 277 | case SDL_PIXELFORMAT_P010: | ||
| 278 | return DXGI_FORMAT_P010; | ||
| 279 | default: | ||
| 280 | return DXGI_FORMAT_UNKNOWN; | ||
| 281 | } | ||
| 282 | } | ||
| 283 | |||
| 284 | static DXGI_FORMAT SDLPixelFormatToDXGIMainResourceViewFormat(Uint32 format, Uint32 colorspace) | ||
| 285 | { | ||
| 286 | switch (format) { | ||
| 287 | case SDL_PIXELFORMAT_RGBA64_FLOAT: | ||
| 288 | return DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 289 | case SDL_PIXELFORMAT_ABGR2101010: | ||
| 290 | return DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 291 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 292 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 293 | return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; | ||
| 294 | } | ||
| 295 | return DXGI_FORMAT_B8G8R8A8_UNORM; | ||
| 296 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 297 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 298 | return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; | ||
| 299 | } | ||
| 300 | return DXGI_FORMAT_R8G8B8A8_UNORM; | ||
| 301 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 302 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 303 | return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; | ||
| 304 | } | ||
| 305 | return DXGI_FORMAT_B8G8R8X8_UNORM; | ||
| 306 | case SDL_PIXELFORMAT_YV12: | ||
| 307 | case SDL_PIXELFORMAT_IYUV: | ||
| 308 | case SDL_PIXELFORMAT_NV12: // For the Y texture | ||
| 309 | case SDL_PIXELFORMAT_NV21: // For the Y texture | ||
| 310 | return DXGI_FORMAT_R8_UNORM; | ||
| 311 | case SDL_PIXELFORMAT_P010: // For the Y texture | ||
| 312 | return DXGI_FORMAT_R16_UNORM; | ||
| 313 | default: | ||
| 314 | return DXGI_FORMAT_UNKNOWN; | ||
| 315 | } | ||
| 316 | } | ||
| 317 | |||
| 318 | static void D3D11_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 319 | |||
| 320 | static void D3D11_ReleaseAll(SDL_Renderer *renderer) | ||
| 321 | { | ||
| 322 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 323 | |||
| 324 | // Release all textures | ||
| 325 | for (SDL_Texture *texture = renderer->textures; texture; texture = texture->next) { | ||
| 326 | D3D11_DestroyTexture(renderer, texture); | ||
| 327 | } | ||
| 328 | |||
| 329 | // Release/reset everything else | ||
| 330 | if (data) { | ||
| 331 | int i; | ||
| 332 | |||
| 333 | // Make sure the swap chain is fully released | ||
| 334 | if (data->d3dContext) { | ||
| 335 | ID3D11DeviceContext_ClearState(data->d3dContext); | ||
| 336 | ID3D11DeviceContext_Flush(data->d3dContext); | ||
| 337 | } | ||
| 338 | |||
| 339 | SAFE_RELEASE(data->vertexShaderConstants); | ||
| 340 | SAFE_RELEASE(data->clippedRasterizer); | ||
| 341 | SAFE_RELEASE(data->mainRasterizer); | ||
| 342 | for (i = 0; i < SDL_arraysize(data->samplers); ++i) { | ||
| 343 | SAFE_RELEASE(data->samplers[i]); | ||
| 344 | } | ||
| 345 | |||
| 346 | if (data->blendModesCount > 0) { | ||
| 347 | for (i = 0; i < data->blendModesCount; ++i) { | ||
| 348 | SAFE_RELEASE(data->blendModes[i].blendState); | ||
| 349 | } | ||
| 350 | SDL_free(data->blendModes); | ||
| 351 | data->blendModes = NULL; | ||
| 352 | data->blendModesCount = 0; | ||
| 353 | } | ||
| 354 | for (i = 0; i < SDL_arraysize(data->pixelShaders); ++i) { | ||
| 355 | SAFE_RELEASE(data->pixelShaders[i]); | ||
| 356 | } | ||
| 357 | for (i = 0; i < SDL_arraysize(data->currentShaderState); ++i) { | ||
| 358 | SAFE_RELEASE(data->currentShaderState[i].constants); | ||
| 359 | } | ||
| 360 | SAFE_RELEASE(data->vertexShader); | ||
| 361 | for (i = 0; i < SDL_arraysize(data->vertexBuffers); ++i) { | ||
| 362 | SAFE_RELEASE(data->vertexBuffers[i]); | ||
| 363 | } | ||
| 364 | SAFE_RELEASE(data->inputLayout); | ||
| 365 | SAFE_RELEASE(data->mainRenderTargetView); | ||
| 366 | SAFE_RELEASE(data->swapChain); | ||
| 367 | |||
| 368 | SAFE_RELEASE(data->d3dContext); | ||
| 369 | SAFE_RELEASE(data->d3dDevice); | ||
| 370 | SAFE_RELEASE(data->dxgiAdapter); | ||
| 371 | SAFE_RELEASE(data->dxgiFactory); | ||
| 372 | |||
| 373 | data->swapEffect = (DXGI_SWAP_EFFECT)0; | ||
| 374 | data->rotation = DXGI_MODE_ROTATION_UNSPECIFIED; | ||
| 375 | data->currentOffscreenRenderTargetView = NULL; | ||
| 376 | data->currentRenderTargetView = NULL; | ||
| 377 | data->currentRasterizerState = NULL; | ||
| 378 | data->currentBlendState = NULL; | ||
| 379 | data->currentShader = SHADER_NONE; | ||
| 380 | SDL_zero(data->currentShaderState); | ||
| 381 | data->currentShaderResource = NULL; | ||
| 382 | data->currentSampler = NULL; | ||
| 383 | |||
| 384 | // Check for any leaks if in debug mode | ||
| 385 | if (data->dxgiDebug) { | ||
| 386 | DXGI_DEBUG_RLO_FLAGS rloFlags = (DXGI_DEBUG_RLO_FLAGS)(DXGI_DEBUG_RLO_DETAIL | DXGI_DEBUG_RLO_IGNORE_INTERNAL); | ||
| 387 | IDXGIDebug_ReportLiveObjects(data->dxgiDebug, SDL_DXGI_DEBUG_ALL, rloFlags); | ||
| 388 | SAFE_RELEASE(data->dxgiDebug); | ||
| 389 | } | ||
| 390 | |||
| 391 | /* Unload the D3D libraries. This should be done last, in order | ||
| 392 | * to prevent IUnknown::Release() calls from crashing. | ||
| 393 | */ | ||
| 394 | if (data->hD3D11Mod) { | ||
| 395 | SDL_UnloadObject(data->hD3D11Mod); | ||
| 396 | data->hD3D11Mod = NULL; | ||
| 397 | } | ||
| 398 | if (data->hDXGIMod) { | ||
| 399 | SDL_UnloadObject(data->hDXGIMod); | ||
| 400 | data->hDXGIMod = NULL; | ||
| 401 | } | ||
| 402 | } | ||
| 403 | } | ||
| 404 | |||
| 405 | static void D3D11_DestroyRenderer(SDL_Renderer *renderer) | ||
| 406 | { | ||
| 407 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 408 | if (data) { | ||
| 409 | D3D11_ReleaseAll(renderer); | ||
| 410 | SDL_free(data); | ||
| 411 | } | ||
| 412 | } | ||
| 413 | |||
| 414 | static D3D11_BLEND GetBlendFunc(SDL_BlendFactor factor) | ||
| 415 | { | ||
| 416 | switch (factor) { | ||
| 417 | case SDL_BLENDFACTOR_ZERO: | ||
| 418 | return D3D11_BLEND_ZERO; | ||
| 419 | case SDL_BLENDFACTOR_ONE: | ||
| 420 | return D3D11_BLEND_ONE; | ||
| 421 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 422 | return D3D11_BLEND_SRC_COLOR; | ||
| 423 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 424 | return D3D11_BLEND_INV_SRC_COLOR; | ||
| 425 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 426 | return D3D11_BLEND_SRC_ALPHA; | ||
| 427 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 428 | return D3D11_BLEND_INV_SRC_ALPHA; | ||
| 429 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 430 | return D3D11_BLEND_DEST_COLOR; | ||
| 431 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 432 | return D3D11_BLEND_INV_DEST_COLOR; | ||
| 433 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 434 | return D3D11_BLEND_DEST_ALPHA; | ||
| 435 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 436 | return D3D11_BLEND_INV_DEST_ALPHA; | ||
| 437 | default: | ||
| 438 | return (D3D11_BLEND)0; | ||
| 439 | } | ||
| 440 | } | ||
| 441 | |||
| 442 | static D3D11_BLEND_OP GetBlendEquation(SDL_BlendOperation operation) | ||
| 443 | { | ||
| 444 | switch (operation) { | ||
| 445 | case SDL_BLENDOPERATION_ADD: | ||
| 446 | return D3D11_BLEND_OP_ADD; | ||
| 447 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 448 | return D3D11_BLEND_OP_SUBTRACT; | ||
| 449 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 450 | return D3D11_BLEND_OP_REV_SUBTRACT; | ||
| 451 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 452 | return D3D11_BLEND_OP_MIN; | ||
| 453 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 454 | return D3D11_BLEND_OP_MAX; | ||
| 455 | default: | ||
| 456 | return (D3D11_BLEND_OP)0; | ||
| 457 | } | ||
| 458 | } | ||
| 459 | |||
| 460 | static ID3D11BlendState *D3D11_CreateBlendState(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 461 | { | ||
| 462 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 463 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 464 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 465 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 466 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 467 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 468 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 469 | ID3D11BlendState *blendState = NULL; | ||
| 470 | D3D11_BlendMode *blendModes; | ||
| 471 | HRESULT result = S_OK; | ||
| 472 | |||
| 473 | D3D11_BLEND_DESC blendDesc; | ||
| 474 | SDL_zero(blendDesc); | ||
| 475 | blendDesc.AlphaToCoverageEnable = FALSE; | ||
| 476 | blendDesc.IndependentBlendEnable = FALSE; | ||
| 477 | blendDesc.RenderTarget[0].BlendEnable = TRUE; | ||
| 478 | blendDesc.RenderTarget[0].SrcBlend = GetBlendFunc(srcColorFactor); | ||
| 479 | blendDesc.RenderTarget[0].DestBlend = GetBlendFunc(dstColorFactor); | ||
| 480 | blendDesc.RenderTarget[0].BlendOp = GetBlendEquation(colorOperation); | ||
| 481 | blendDesc.RenderTarget[0].SrcBlendAlpha = GetBlendFunc(srcAlphaFactor); | ||
| 482 | blendDesc.RenderTarget[0].DestBlendAlpha = GetBlendFunc(dstAlphaFactor); | ||
| 483 | blendDesc.RenderTarget[0].BlendOpAlpha = GetBlendEquation(alphaOperation); | ||
| 484 | blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; | ||
| 485 | result = ID3D11Device_CreateBlendState(data->d3dDevice, &blendDesc, &blendState); | ||
| 486 | if (FAILED(result)) { | ||
| 487 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateBlendState"), result); | ||
| 488 | return NULL; | ||
| 489 | } | ||
| 490 | |||
| 491 | blendModes = (D3D11_BlendMode *)SDL_realloc(data->blendModes, (data->blendModesCount + 1) * sizeof(*blendModes)); | ||
| 492 | if (!blendModes) { | ||
| 493 | SAFE_RELEASE(blendState); | ||
| 494 | return NULL; | ||
| 495 | } | ||
| 496 | blendModes[data->blendModesCount].blendMode = blendMode; | ||
| 497 | blendModes[data->blendModesCount].blendState = blendState; | ||
| 498 | data->blendModes = blendModes; | ||
| 499 | ++data->blendModesCount; | ||
| 500 | |||
| 501 | return blendState; | ||
| 502 | } | ||
| 503 | |||
| 504 | // Create resources that depend on the device. | ||
| 505 | static HRESULT D3D11_CreateDeviceResources(SDL_Renderer *renderer) | ||
| 506 | { | ||
| 507 | typedef HRESULT(WINAPI * PFN_CREATE_DXGI_FACTORY)(REFIID riid, void **ppFactory); | ||
| 508 | typedef HRESULT(WINAPI * PFN_CREATE_DXGI_FACTORY2)(UINT flags, REFIID riid, void **ppFactory); | ||
| 509 | PFN_CREATE_DXGI_FACTORY CreateDXGIFactoryFunc = NULL; | ||
| 510 | PFN_CREATE_DXGI_FACTORY2 CreateDXGIFactory2Func = NULL; | ||
| 511 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 512 | PFN_D3D11_CREATE_DEVICE D3D11CreateDeviceFunc; | ||
| 513 | ID3D11Device *d3dDevice = NULL; | ||
| 514 | ID3D11DeviceContext *d3dContext = NULL; | ||
| 515 | IDXGIDevice1 *dxgiDevice = NULL; | ||
| 516 | HRESULT result = S_OK; | ||
| 517 | UINT creationFlags = 0; | ||
| 518 | bool createDebug; | ||
| 519 | |||
| 520 | /* This array defines the set of DirectX hardware feature levels this app will support. | ||
| 521 | * Note the ordering should be preserved. | ||
| 522 | * Don't forget to declare your application's minimum required feature level in its | ||
| 523 | * description. All applications are assumed to support 9.1 unless otherwise stated. | ||
| 524 | */ | ||
| 525 | D3D_FEATURE_LEVEL featureLevels[] = { | ||
| 526 | D3D_FEATURE_LEVEL_11_1, | ||
| 527 | D3D_FEATURE_LEVEL_11_0, | ||
| 528 | D3D_FEATURE_LEVEL_10_1, | ||
| 529 | D3D_FEATURE_LEVEL_10_0, | ||
| 530 | D3D_FEATURE_LEVEL_9_3, | ||
| 531 | D3D_FEATURE_LEVEL_9_2, | ||
| 532 | D3D_FEATURE_LEVEL_9_1 | ||
| 533 | }; | ||
| 534 | |||
| 535 | D3D11_BUFFER_DESC constantBufferDesc; | ||
| 536 | D3D11_SAMPLER_DESC samplerDesc; | ||
| 537 | D3D11_RASTERIZER_DESC rasterDesc; | ||
| 538 | |||
| 539 | // See if we need debug interfaces | ||
| 540 | createDebug = SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D11_DEBUG, false); | ||
| 541 | |||
| 542 | data->hDXGIMod = SDL_LoadObject("dxgi.dll"); | ||
| 543 | if (!data->hDXGIMod) { | ||
| 544 | result = E_FAIL; | ||
| 545 | goto done; | ||
| 546 | } | ||
| 547 | |||
| 548 | CreateDXGIFactory2Func = (PFN_CREATE_DXGI_FACTORY2)SDL_LoadFunction(data->hDXGIMod, "CreateDXGIFactory2"); | ||
| 549 | if (!CreateDXGIFactory2Func) { | ||
| 550 | CreateDXGIFactoryFunc = (PFN_CREATE_DXGI_FACTORY)SDL_LoadFunction(data->hDXGIMod, "CreateDXGIFactory"); | ||
| 551 | if (!CreateDXGIFactoryFunc) { | ||
| 552 | result = E_FAIL; | ||
| 553 | goto done; | ||
| 554 | } | ||
| 555 | } | ||
| 556 | |||
| 557 | data->hD3D11Mod = SDL_LoadObject("d3d11.dll"); | ||
| 558 | if (!data->hD3D11Mod) { | ||
| 559 | result = E_FAIL; | ||
| 560 | goto done; | ||
| 561 | } | ||
| 562 | |||
| 563 | D3D11CreateDeviceFunc = (PFN_D3D11_CREATE_DEVICE)SDL_LoadFunction(data->hD3D11Mod, "D3D11CreateDevice"); | ||
| 564 | if (!D3D11CreateDeviceFunc) { | ||
| 565 | result = E_FAIL; | ||
| 566 | goto done; | ||
| 567 | } | ||
| 568 | |||
| 569 | if (createDebug) { | ||
| 570 | #ifdef __IDXGIInfoQueue_INTERFACE_DEFINED__ | ||
| 571 | IDXGIInfoQueue *dxgiInfoQueue = NULL; | ||
| 572 | PFN_CREATE_DXGI_FACTORY2 DXGIGetDebugInterfaceFunc; | ||
| 573 | |||
| 574 | // If the debug hint is set, also create the DXGI factory in debug mode | ||
| 575 | DXGIGetDebugInterfaceFunc = (PFN_CREATE_DXGI_FACTORY2)SDL_LoadFunction(data->hDXGIMod, "DXGIGetDebugInterface1"); | ||
| 576 | if (!DXGIGetDebugInterfaceFunc) { | ||
| 577 | result = E_FAIL; | ||
| 578 | goto done; | ||
| 579 | } | ||
| 580 | |||
| 581 | result = DXGIGetDebugInterfaceFunc(0, &SDL_IID_IDXGIDebug1, (void **)&data->dxgiDebug); | ||
| 582 | if (FAILED(result)) { | ||
| 583 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result); | ||
| 584 | goto done; | ||
| 585 | } | ||
| 586 | |||
| 587 | result = DXGIGetDebugInterfaceFunc(0, &SDL_IID_IDXGIInfoQueue, (void **)&dxgiInfoQueue); | ||
| 588 | if (FAILED(result)) { | ||
| 589 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result); | ||
| 590 | goto done; | ||
| 591 | } | ||
| 592 | |||
| 593 | IDXGIInfoQueue_SetBreakOnSeverity(dxgiInfoQueue, SDL_DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); | ||
| 594 | IDXGIInfoQueue_SetBreakOnSeverity(dxgiInfoQueue, SDL_DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); | ||
| 595 | SAFE_RELEASE(dxgiInfoQueue); | ||
| 596 | #endif // __IDXGIInfoQueue_INTERFACE_DEFINED__ | ||
| 597 | creationFlags = DXGI_CREATE_FACTORY_DEBUG; | ||
| 598 | } | ||
| 599 | |||
| 600 | if (CreateDXGIFactory2Func) { | ||
| 601 | result = CreateDXGIFactory2Func(creationFlags, &SDL_IID_IDXGIFactory2, (void **)&data->dxgiFactory); | ||
| 602 | } else { | ||
| 603 | result = CreateDXGIFactoryFunc(&SDL_IID_IDXGIFactory2, (void **)&data->dxgiFactory); | ||
| 604 | } | ||
| 605 | if (FAILED(result)) { | ||
| 606 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("CreateDXGIFactory"), result); | ||
| 607 | goto done; | ||
| 608 | } | ||
| 609 | |||
| 610 | // FIXME: Should we use the default adapter? | ||
| 611 | result = IDXGIFactory2_EnumAdapters(data->dxgiFactory, 0, &data->dxgiAdapter); | ||
| 612 | if (FAILED(result)) { | ||
| 613 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D11CreateDevice"), result); | ||
| 614 | goto done; | ||
| 615 | } | ||
| 616 | |||
| 617 | /* This flag adds support for surfaces with a different color channel ordering | ||
| 618 | * than the API default. It is required for compatibility with Direct2D. | ||
| 619 | */ | ||
| 620 | creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; | ||
| 621 | |||
| 622 | // Make sure Direct3D's debugging feature gets used, if the app requests it. | ||
| 623 | if (createDebug) { | ||
| 624 | creationFlags |= D3D11_CREATE_DEVICE_DEBUG; | ||
| 625 | } | ||
| 626 | |||
| 627 | // Create a single-threaded device unless the app requests otherwise. | ||
| 628 | if (!SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D_THREADSAFE, false)) { | ||
| 629 | creationFlags |= D3D11_CREATE_DEVICE_SINGLETHREADED; | ||
| 630 | } | ||
| 631 | |||
| 632 | // Create the Direct3D 11 API device object and a corresponding context. | ||
| 633 | result = D3D11CreateDeviceFunc( | ||
| 634 | data->dxgiAdapter, | ||
| 635 | D3D_DRIVER_TYPE_UNKNOWN, | ||
| 636 | NULL, | ||
| 637 | creationFlags, // Set set debug and Direct2D compatibility flags. | ||
| 638 | featureLevels, // List of feature levels this app can support. | ||
| 639 | SDL_arraysize(featureLevels), | ||
| 640 | D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION for Windows Store apps. | ||
| 641 | &d3dDevice, // Returns the Direct3D device created. | ||
| 642 | &data->featureLevel, // Returns feature level of device created. | ||
| 643 | &d3dContext // Returns the device immediate context. | ||
| 644 | ); | ||
| 645 | if (FAILED(result)) { | ||
| 646 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D11CreateDevice"), result); | ||
| 647 | goto done; | ||
| 648 | } | ||
| 649 | |||
| 650 | result = ID3D11Device_QueryInterface(d3dDevice, &SDL_IID_ID3D11Device1, (void **)&data->d3dDevice); | ||
| 651 | if (FAILED(result)) { | ||
| 652 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device to ID3D11Device1"), result); | ||
| 653 | goto done; | ||
| 654 | } | ||
| 655 | |||
| 656 | result = ID3D11DeviceContext_QueryInterface(d3dContext, &SDL_IID_ID3D11DeviceContext1, (void **)&data->d3dContext); | ||
| 657 | if (FAILED(result)) { | ||
| 658 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11DeviceContext to ID3D11DeviceContext1"), result); | ||
| 659 | goto done; | ||
| 660 | } | ||
| 661 | |||
| 662 | result = ID3D11Device_QueryInterface(d3dDevice, &SDL_IID_IDXGIDevice1, (void **)&dxgiDevice); | ||
| 663 | if (FAILED(result)) { | ||
| 664 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device to IDXGIDevice1"), result); | ||
| 665 | goto done; | ||
| 666 | } | ||
| 667 | |||
| 668 | /* Ensure that DXGI does not queue more than one frame at a time. This both reduces latency and | ||
| 669 | * ensures that the application will only render after each VSync, minimizing power consumption. | ||
| 670 | */ | ||
| 671 | result = IDXGIDevice1_SetMaximumFrameLatency(dxgiDevice, 1); | ||
| 672 | if (FAILED(result)) { | ||
| 673 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIDevice1::SetMaximumFrameLatency"), result); | ||
| 674 | goto done; | ||
| 675 | } | ||
| 676 | |||
| 677 | /* Make note of the maximum texture size | ||
| 678 | * Max texture sizes are documented on MSDN, at: | ||
| 679 | * http://msdn.microsoft.com/en-us/library/windows/apps/ff476876.aspx | ||
| 680 | */ | ||
| 681 | switch (data->featureLevel) { | ||
| 682 | case D3D_FEATURE_LEVEL_11_1: | ||
| 683 | case D3D_FEATURE_LEVEL_11_0: | ||
| 684 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384); | ||
| 685 | break; | ||
| 686 | |||
| 687 | case D3D_FEATURE_LEVEL_10_1: | ||
| 688 | case D3D_FEATURE_LEVEL_10_0: | ||
| 689 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 8192); | ||
| 690 | break; | ||
| 691 | |||
| 692 | case D3D_FEATURE_LEVEL_9_3: | ||
| 693 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 4096); | ||
| 694 | break; | ||
| 695 | |||
| 696 | case D3D_FEATURE_LEVEL_9_2: | ||
| 697 | case D3D_FEATURE_LEVEL_9_1: | ||
| 698 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 2048); | ||
| 699 | break; | ||
| 700 | |||
| 701 | default: | ||
| 702 | SDL_SetError("%s, Unexpected feature level: %d", __FUNCTION__, data->featureLevel); | ||
| 703 | result = E_FAIL; | ||
| 704 | goto done; | ||
| 705 | } | ||
| 706 | |||
| 707 | if (!D3D11_CreateVertexShader(data->d3dDevice, &data->vertexShader, &data->inputLayout)) { | ||
| 708 | goto done; | ||
| 709 | } | ||
| 710 | |||
| 711 | // Setup space to hold vertex shader constants: | ||
| 712 | SDL_zero(constantBufferDesc); | ||
| 713 | constantBufferDesc.ByteWidth = sizeof(D3D11_VertexShaderConstants); | ||
| 714 | constantBufferDesc.Usage = D3D11_USAGE_DEFAULT; | ||
| 715 | constantBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; | ||
| 716 | result = ID3D11Device_CreateBuffer(data->d3dDevice, | ||
| 717 | &constantBufferDesc, | ||
| 718 | NULL, | ||
| 719 | &data->vertexShaderConstants); | ||
| 720 | if (FAILED(result)) { | ||
| 721 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateBuffer [vertex shader constants]"), result); | ||
| 722 | goto done; | ||
| 723 | } | ||
| 724 | |||
| 725 | // Create samplers to use when drawing textures: | ||
| 726 | static struct | ||
| 727 | { | ||
| 728 | D3D11_FILTER filter; | ||
| 729 | D3D11_TEXTURE_ADDRESS_MODE address; | ||
| 730 | } samplerParams[] = { | ||
| 731 | { D3D11_FILTER_MIN_MAG_MIP_POINT, D3D11_TEXTURE_ADDRESS_CLAMP }, | ||
| 732 | { D3D11_FILTER_MIN_MAG_MIP_POINT, D3D11_TEXTURE_ADDRESS_WRAP }, | ||
| 733 | { D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_CLAMP }, | ||
| 734 | { D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_WRAP }, | ||
| 735 | }; | ||
| 736 | SDL_COMPILE_TIME_ASSERT(samplerParams_SIZE, SDL_arraysize(samplerParams) == D3D11_SAMPLER_COUNT); | ||
| 737 | SDL_zero(samplerDesc); | ||
| 738 | samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; | ||
| 739 | samplerDesc.MipLODBias = 0.0f; | ||
| 740 | samplerDesc.MaxAnisotropy = 1; | ||
| 741 | samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; | ||
| 742 | samplerDesc.MinLOD = 0.0f; | ||
| 743 | samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; | ||
| 744 | for (int i = 0; i < SDL_arraysize(samplerParams); ++i) { | ||
| 745 | samplerDesc.Filter = samplerParams[i].filter; | ||
| 746 | samplerDesc.AddressU = samplerParams[i].address; | ||
| 747 | samplerDesc.AddressV = samplerParams[i].address; | ||
| 748 | result = ID3D11Device_CreateSamplerState(data->d3dDevice, | ||
| 749 | &samplerDesc, | ||
| 750 | &data->samplers[i]); | ||
| 751 | if (FAILED(result)) { | ||
| 752 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateSamplerState [nearest-pixel filter]"), result); | ||
| 753 | goto done; | ||
| 754 | } | ||
| 755 | } | ||
| 756 | |||
| 757 | // Setup Direct3D rasterizer states | ||
| 758 | SDL_zero(rasterDesc); | ||
| 759 | rasterDesc.AntialiasedLineEnable = FALSE; | ||
| 760 | rasterDesc.CullMode = D3D11_CULL_NONE; | ||
| 761 | rasterDesc.DepthBias = 0; | ||
| 762 | rasterDesc.DepthBiasClamp = 0.0f; | ||
| 763 | rasterDesc.DepthClipEnable = TRUE; | ||
| 764 | rasterDesc.FillMode = D3D11_FILL_SOLID; | ||
| 765 | rasterDesc.FrontCounterClockwise = FALSE; | ||
| 766 | rasterDesc.MultisampleEnable = FALSE; | ||
| 767 | rasterDesc.ScissorEnable = FALSE; | ||
| 768 | rasterDesc.SlopeScaledDepthBias = 0.0f; | ||
| 769 | result = ID3D11Device_CreateRasterizerState(data->d3dDevice, &rasterDesc, &data->mainRasterizer); | ||
| 770 | if (FAILED(result)) { | ||
| 771 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateRasterizerState [main rasterizer]"), result); | ||
| 772 | goto done; | ||
| 773 | } | ||
| 774 | |||
| 775 | rasterDesc.ScissorEnable = TRUE; | ||
| 776 | result = ID3D11Device_CreateRasterizerState(data->d3dDevice, &rasterDesc, &data->clippedRasterizer); | ||
| 777 | if (FAILED(result)) { | ||
| 778 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateRasterizerState [clipped rasterizer]"), result); | ||
| 779 | goto done; | ||
| 780 | } | ||
| 781 | |||
| 782 | // Create blending states: | ||
| 783 | if (!D3D11_CreateBlendState(renderer, SDL_BLENDMODE_BLEND)) { | ||
| 784 | // D3D11_CreateBlendState will set the SDL error, if it fails | ||
| 785 | goto done; | ||
| 786 | } | ||
| 787 | |||
| 788 | // Setup render state that doesn't change | ||
| 789 | ID3D11DeviceContext_IASetInputLayout(data->d3dContext, data->inputLayout); | ||
| 790 | ID3D11DeviceContext_VSSetShader(data->d3dContext, data->vertexShader, NULL, 0); | ||
| 791 | ID3D11DeviceContext_VSSetConstantBuffers(data->d3dContext, 0, 1, &data->vertexShaderConstants); | ||
| 792 | |||
| 793 | SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D11_DEVICE_POINTER, data->d3dDevice); | ||
| 794 | |||
| 795 | done: | ||
| 796 | SAFE_RELEASE(d3dDevice); | ||
| 797 | SAFE_RELEASE(d3dContext); | ||
| 798 | SAFE_RELEASE(dxgiDevice); | ||
| 799 | return result; | ||
| 800 | } | ||
| 801 | |||
| 802 | static DXGI_MODE_ROTATION D3D11_GetCurrentRotation(void) | ||
| 803 | { | ||
| 804 | // FIXME | ||
| 805 | return DXGI_MODE_ROTATION_IDENTITY; | ||
| 806 | } | ||
| 807 | |||
| 808 | static BOOL D3D11_IsDisplayRotated90Degrees(DXGI_MODE_ROTATION rotation) | ||
| 809 | { | ||
| 810 | switch (rotation) { | ||
| 811 | case DXGI_MODE_ROTATION_ROTATE90: | ||
| 812 | case DXGI_MODE_ROTATION_ROTATE270: | ||
| 813 | return TRUE; | ||
| 814 | default: | ||
| 815 | return FALSE; | ||
| 816 | } | ||
| 817 | } | ||
| 818 | |||
| 819 | static int D3D11_GetRotationForCurrentRenderTarget(SDL_Renderer *renderer) | ||
| 820 | { | ||
| 821 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 822 | if (data->currentOffscreenRenderTargetView) { | ||
| 823 | return DXGI_MODE_ROTATION_IDENTITY; | ||
| 824 | } else { | ||
| 825 | return data->rotation; | ||
| 826 | } | ||
| 827 | } | ||
| 828 | |||
| 829 | static bool D3D11_GetViewportAlignedD3DRect(SDL_Renderer *renderer, const SDL_Rect *sdlRect, D3D11_RECT *outRect, BOOL includeViewportOffset) | ||
| 830 | { | ||
| 831 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 832 | const int rotation = D3D11_GetRotationForCurrentRenderTarget(renderer); | ||
| 833 | const SDL_Rect *viewport = &data->currentViewport; | ||
| 834 | |||
| 835 | switch (rotation) { | ||
| 836 | case DXGI_MODE_ROTATION_IDENTITY: | ||
| 837 | outRect->left = sdlRect->x; | ||
| 838 | outRect->right = (LONG)sdlRect->x + sdlRect->w; | ||
| 839 | outRect->top = sdlRect->y; | ||
| 840 | outRect->bottom = (LONG)sdlRect->y + sdlRect->h; | ||
| 841 | if (includeViewportOffset) { | ||
| 842 | outRect->left += viewport->x; | ||
| 843 | outRect->right += viewport->x; | ||
| 844 | outRect->top += viewport->y; | ||
| 845 | outRect->bottom += viewport->y; | ||
| 846 | } | ||
| 847 | break; | ||
| 848 | case DXGI_MODE_ROTATION_ROTATE270: | ||
| 849 | outRect->left = sdlRect->y; | ||
| 850 | outRect->right = (LONG)sdlRect->y + sdlRect->h; | ||
| 851 | outRect->top = viewport->w - sdlRect->x - sdlRect->w; | ||
| 852 | outRect->bottom = viewport->w - sdlRect->x; | ||
| 853 | break; | ||
| 854 | case DXGI_MODE_ROTATION_ROTATE180: | ||
| 855 | outRect->left = viewport->w - sdlRect->x - sdlRect->w; | ||
| 856 | outRect->right = viewport->w - sdlRect->x; | ||
| 857 | outRect->top = viewport->h - sdlRect->y - sdlRect->h; | ||
| 858 | outRect->bottom = viewport->h - sdlRect->y; | ||
| 859 | break; | ||
| 860 | case DXGI_MODE_ROTATION_ROTATE90: | ||
| 861 | outRect->left = viewport->h - sdlRect->y - sdlRect->h; | ||
| 862 | outRect->right = viewport->h - sdlRect->y; | ||
| 863 | outRect->top = sdlRect->x; | ||
| 864 | outRect->bottom = (LONG)sdlRect->x + sdlRect->h; | ||
| 865 | break; | ||
| 866 | default: | ||
| 867 | return SDL_SetError("The physical display is in an unknown or unsupported rotation"); | ||
| 868 | } | ||
| 869 | return true; | ||
| 870 | } | ||
| 871 | |||
| 872 | static HRESULT D3D11_CreateSwapChain(SDL_Renderer *renderer, int w, int h) | ||
| 873 | { | ||
| 874 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 875 | IUnknown *coreWindow = NULL; | ||
| 876 | IDXGISwapChain3 *swapChain3 = NULL; | ||
| 877 | HRESULT result = S_OK; | ||
| 878 | |||
| 879 | // Create a swap chain using the same adapter as the existing Direct3D device. | ||
| 880 | DXGI_SWAP_CHAIN_DESC1 swapChainDesc; | ||
| 881 | SDL_zero(swapChainDesc); | ||
| 882 | swapChainDesc.Width = w; | ||
| 883 | swapChainDesc.Height = h; | ||
| 884 | switch (renderer->output_colorspace) { | ||
| 885 | case SDL_COLORSPACE_SRGB_LINEAR: | ||
| 886 | swapChainDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 887 | break; | ||
| 888 | case SDL_COLORSPACE_HDR10: | ||
| 889 | swapChainDesc.Format = DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 890 | break; | ||
| 891 | default: | ||
| 892 | swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format. | ||
| 893 | break; | ||
| 894 | } | ||
| 895 | swapChainDesc.Stereo = FALSE; | ||
| 896 | swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling. | ||
| 897 | swapChainDesc.SampleDesc.Quality = 0; | ||
| 898 | swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; | ||
| 899 | swapChainDesc.BufferCount = 2; // Use double-buffering to minimize latency. | ||
| 900 | if (WIN_IsWindows8OrGreater()) { | ||
| 901 | swapChainDesc.Scaling = DXGI_SCALING_NONE; | ||
| 902 | } else { | ||
| 903 | swapChainDesc.Scaling = DXGI_SCALING_STRETCH; | ||
| 904 | } | ||
| 905 | if (SDL_GetWindowFlags(renderer->window) & SDL_WINDOW_TRANSPARENT) { | ||
| 906 | swapChainDesc.Scaling = DXGI_SCALING_STRETCH; | ||
| 907 | swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; | ||
| 908 | } else { | ||
| 909 | swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Windows Store apps must use this SwapEffect. | ||
| 910 | } | ||
| 911 | swapChainDesc.Flags = 0; | ||
| 912 | |||
| 913 | if (coreWindow) { | ||
| 914 | result = IDXGIFactory2_CreateSwapChainForCoreWindow(data->dxgiFactory, | ||
| 915 | (IUnknown *)data->d3dDevice, | ||
| 916 | coreWindow, | ||
| 917 | &swapChainDesc, | ||
| 918 | NULL, // Allow on all displays. | ||
| 919 | &data->swapChain); | ||
| 920 | if (FAILED(result)) { | ||
| 921 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIFactory2::CreateSwapChainForCoreWindow"), result); | ||
| 922 | goto done; | ||
| 923 | } | ||
| 924 | } else { | ||
| 925 | #if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) | ||
| 926 | HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); | ||
| 927 | if (!hwnd) { | ||
| 928 | SDL_SetError("Couldn't get window handle"); | ||
| 929 | result = E_FAIL; | ||
| 930 | goto done; | ||
| 931 | } | ||
| 932 | |||
| 933 | result = IDXGIFactory2_CreateSwapChainForHwnd(data->dxgiFactory, | ||
| 934 | (IUnknown *)data->d3dDevice, | ||
| 935 | hwnd, | ||
| 936 | &swapChainDesc, | ||
| 937 | NULL, | ||
| 938 | NULL, // Allow on all displays. | ||
| 939 | &data->swapChain); | ||
| 940 | if (FAILED(result)) { | ||
| 941 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIFactory2::CreateSwapChainForHwnd"), result); | ||
| 942 | goto done; | ||
| 943 | } | ||
| 944 | |||
| 945 | IDXGIFactory_MakeWindowAssociation(data->dxgiFactory, hwnd, DXGI_MWA_NO_WINDOW_CHANGES); | ||
| 946 | #else | ||
| 947 | SDL_SetError(__FUNCTION__ ", Unable to find something to attach a swap chain to"); | ||
| 948 | goto done; | ||
| 949 | #endif // defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) / else | ||
| 950 | } | ||
| 951 | data->swapEffect = swapChainDesc.SwapEffect; | ||
| 952 | |||
| 953 | if (SUCCEEDED(IDXGISwapChain1_QueryInterface(data->swapChain, &SDL_IID_IDXGISwapChain2, (void **)&swapChain3))) { | ||
| 954 | UINT colorspace_support = 0; | ||
| 955 | DXGI_COLOR_SPACE_TYPE colorspace; | ||
| 956 | switch (renderer->output_colorspace) { | ||
| 957 | case SDL_COLORSPACE_SRGB_LINEAR: | ||
| 958 | colorspace = DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709; | ||
| 959 | break; | ||
| 960 | case SDL_COLORSPACE_HDR10: | ||
| 961 | colorspace = DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; | ||
| 962 | break; | ||
| 963 | default: | ||
| 964 | // sRGB | ||
| 965 | colorspace = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; | ||
| 966 | break; | ||
| 967 | } | ||
| 968 | if (SUCCEEDED(IDXGISwapChain3_CheckColorSpaceSupport(swapChain3, colorspace, &colorspace_support)) && | ||
| 969 | (colorspace_support & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT)) { | ||
| 970 | result = IDXGISwapChain3_SetColorSpace1(swapChain3, colorspace); | ||
| 971 | if (FAILED(result)) { | ||
| 972 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain3::SetColorSpace1"), result); | ||
| 973 | goto done; | ||
| 974 | } | ||
| 975 | } else if (colorspace != DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709) { | ||
| 976 | // Not the default, we're not going to be able to present in this colorspace | ||
| 977 | SDL_SetError("Unsupported output colorspace"); | ||
| 978 | result = DXGI_ERROR_UNSUPPORTED; | ||
| 979 | } | ||
| 980 | } | ||
| 981 | |||
| 982 | SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER, data->swapChain); | ||
| 983 | |||
| 984 | done: | ||
| 985 | SAFE_RELEASE(swapChain3); | ||
| 986 | SAFE_RELEASE(coreWindow); | ||
| 987 | return result; | ||
| 988 | } | ||
| 989 | |||
| 990 | static void D3D11_ReleaseMainRenderTargetView(SDL_Renderer *renderer) | ||
| 991 | { | ||
| 992 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 993 | ID3D11DeviceContext_OMSetRenderTargets(data->d3dContext, 0, NULL, NULL); | ||
| 994 | SAFE_RELEASE(data->mainRenderTargetView); | ||
| 995 | } | ||
| 996 | |||
| 997 | // Initialize all resources that change when the window's size changes. | ||
| 998 | static HRESULT D3D11_CreateWindowSizeDependentResources(SDL_Renderer *renderer) | ||
| 999 | { | ||
| 1000 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 1001 | ID3D11Texture2D *backBuffer = NULL; | ||
| 1002 | HRESULT result = S_OK; | ||
| 1003 | int w, h; | ||
| 1004 | |||
| 1005 | // Release the previous render target view | ||
| 1006 | D3D11_ReleaseMainRenderTargetView(renderer); | ||
| 1007 | |||
| 1008 | /* The width and height of the swap chain must be based on the display's | ||
| 1009 | * non-rotated size. | ||
| 1010 | */ | ||
| 1011 | SDL_GetWindowSizeInPixels(renderer->window, &w, &h); | ||
| 1012 | data->rotation = D3D11_GetCurrentRotation(); | ||
| 1013 | // SDL_Log("%s: windowSize={%d,%d}, orientation=%d", __FUNCTION__, w, h, (int)data->rotation); | ||
| 1014 | if (D3D11_IsDisplayRotated90Degrees(data->rotation)) { | ||
| 1015 | int tmp = w; | ||
| 1016 | w = h; | ||
| 1017 | h = tmp; | ||
| 1018 | } | ||
| 1019 | |||
| 1020 | if (data->swapChain) { | ||
| 1021 | // If the swap chain already exists, resize it. | ||
| 1022 | result = IDXGISwapChain_ResizeBuffers(data->swapChain, | ||
| 1023 | 0, | ||
| 1024 | w, h, | ||
| 1025 | DXGI_FORMAT_UNKNOWN, | ||
| 1026 | 0); | ||
| 1027 | if (FAILED(result)) { | ||
| 1028 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::ResizeBuffers"), result); | ||
| 1029 | goto done; | ||
| 1030 | } | ||
| 1031 | } else { | ||
| 1032 | result = D3D11_CreateSwapChain(renderer, w, h); | ||
| 1033 | if (FAILED(result) || !data->swapChain) { | ||
| 1034 | goto done; | ||
| 1035 | } | ||
| 1036 | } | ||
| 1037 | |||
| 1038 | // Set the proper rotation for the swap chain. | ||
| 1039 | if (WIN_IsWindows8OrGreater()) { | ||
| 1040 | if (data->swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) { | ||
| 1041 | result = IDXGISwapChain1_SetRotation(data->swapChain, data->rotation); | ||
| 1042 | if (FAILED(result)) { | ||
| 1043 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain1::SetRotation"), result); | ||
| 1044 | goto done; | ||
| 1045 | } | ||
| 1046 | } | ||
| 1047 | } | ||
| 1048 | |||
| 1049 | result = IDXGISwapChain_GetBuffer(data->swapChain, | ||
| 1050 | 0, | ||
| 1051 | &SDL_IID_ID3D11Texture2D, | ||
| 1052 | (void **)&backBuffer); | ||
| 1053 | if (FAILED(result)) { | ||
| 1054 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::GetBuffer [back-buffer]"), result); | ||
| 1055 | goto done; | ||
| 1056 | } | ||
| 1057 | |||
| 1058 | // Create a render target view of the swap chain back buffer. | ||
| 1059 | result = ID3D11Device_CreateRenderTargetView(data->d3dDevice, | ||
| 1060 | (ID3D11Resource *)backBuffer, | ||
| 1061 | NULL, | ||
| 1062 | &data->mainRenderTargetView); | ||
| 1063 | if (FAILED(result)) { | ||
| 1064 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device::CreateRenderTargetView"), result); | ||
| 1065 | goto done; | ||
| 1066 | } | ||
| 1067 | |||
| 1068 | /* Set the swap chain target immediately, so that a target is always set | ||
| 1069 | * even before we get to SetDrawState. Without this it's possible to hit | ||
| 1070 | * null references in places like ReadPixels! | ||
| 1071 | */ | ||
| 1072 | ID3D11DeviceContext_OMSetRenderTargets(data->d3dContext, | ||
| 1073 | 1, | ||
| 1074 | &data->mainRenderTargetView, | ||
| 1075 | NULL); | ||
| 1076 | |||
| 1077 | data->viewportDirty = true; | ||
| 1078 | |||
| 1079 | done: | ||
| 1080 | SAFE_RELEASE(backBuffer); | ||
| 1081 | return result; | ||
| 1082 | } | ||
| 1083 | |||
| 1084 | static bool D3D11_HandleDeviceLost(SDL_Renderer *renderer) | ||
| 1085 | { | ||
| 1086 | bool recovered = false; | ||
| 1087 | |||
| 1088 | D3D11_ReleaseAll(renderer); | ||
| 1089 | |||
| 1090 | if (SUCCEEDED(D3D11_CreateDeviceResources(renderer)) && | ||
| 1091 | SUCCEEDED(D3D11_CreateWindowSizeDependentResources(renderer))) { | ||
| 1092 | recovered = true; | ||
| 1093 | } else { | ||
| 1094 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Renderer couldn't recover from device lost: %s", SDL_GetError()); | ||
| 1095 | D3D11_ReleaseAll(renderer); | ||
| 1096 | } | ||
| 1097 | |||
| 1098 | // Let the application know that the device has been reset or lost | ||
| 1099 | SDL_Event event; | ||
| 1100 | SDL_zero(event); | ||
| 1101 | event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST; | ||
| 1102 | event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer)); | ||
| 1103 | SDL_PushEvent(&event); | ||
| 1104 | |||
| 1105 | return recovered; | ||
| 1106 | } | ||
| 1107 | |||
| 1108 | // This method is called when the window's size changes. | ||
| 1109 | static HRESULT D3D11_UpdateForWindowSizeChange(SDL_Renderer *renderer) | ||
| 1110 | { | ||
| 1111 | return D3D11_CreateWindowSizeDependentResources(renderer); | ||
| 1112 | } | ||
| 1113 | |||
| 1114 | static void D3D11_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 1115 | { | ||
| 1116 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 1117 | |||
| 1118 | if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) { | ||
| 1119 | data->pixelSizeChanged = true; | ||
| 1120 | } | ||
| 1121 | } | ||
| 1122 | |||
| 1123 | static bool D3D11_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 1124 | { | ||
| 1125 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 1126 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 1127 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 1128 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 1129 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 1130 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 1131 | |||
| 1132 | if (!GetBlendFunc(srcColorFactor) || !GetBlendFunc(srcAlphaFactor) || | ||
| 1133 | !GetBlendEquation(colorOperation) || | ||
| 1134 | !GetBlendFunc(dstColorFactor) || !GetBlendFunc(dstAlphaFactor) || | ||
| 1135 | !GetBlendEquation(alphaOperation)) { | ||
| 1136 | return false; | ||
| 1137 | } | ||
| 1138 | return true; | ||
| 1139 | } | ||
| 1140 | |||
| 1141 | static bool GetTextureProperty(SDL_PropertiesID props, const char *name, ID3D11Texture2D **texture) | ||
| 1142 | { | ||
| 1143 | IUnknown *unknown = SDL_GetPointerProperty(props, name, NULL); | ||
| 1144 | if (unknown) { | ||
| 1145 | HRESULT result = IUnknown_QueryInterface(unknown, &SDL_IID_ID3D11Texture2D, (void **)texture); | ||
| 1146 | if (FAILED(result)) { | ||
| 1147 | return WIN_SetErrorFromHRESULT(name, result); | ||
| 1148 | } | ||
| 1149 | } | ||
| 1150 | return true; | ||
| 1151 | } | ||
| 1152 | |||
| 1153 | static bool D3D11_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 1154 | { | ||
| 1155 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1156 | D3D11_TextureData *textureData; | ||
| 1157 | HRESULT result; | ||
| 1158 | DXGI_FORMAT textureFormat = SDLPixelFormatToDXGITextureFormat(texture->format, renderer->output_colorspace); | ||
| 1159 | D3D11_TEXTURE2D_DESC textureDesc; | ||
| 1160 | D3D11_SHADER_RESOURCE_VIEW_DESC resourceViewDesc; | ||
| 1161 | |||
| 1162 | if (!rendererData->d3dDevice) { | ||
| 1163 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 1164 | } | ||
| 1165 | |||
| 1166 | if (textureFormat == DXGI_FORMAT_UNKNOWN) { | ||
| 1167 | return SDL_SetError("%s, An unsupported SDL pixel format (0x%x) was specified", | ||
| 1168 | __FUNCTION__, texture->format); | ||
| 1169 | } | ||
| 1170 | |||
| 1171 | textureData = (D3D11_TextureData *)SDL_calloc(1, sizeof(*textureData)); | ||
| 1172 | if (!textureData) { | ||
| 1173 | return false; | ||
| 1174 | } | ||
| 1175 | textureData->scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? D3D11_FILTER_MIN_MAG_MIP_POINT : D3D11_FILTER_MIN_MAG_MIP_LINEAR; | ||
| 1176 | |||
| 1177 | texture->internal = textureData; | ||
| 1178 | |||
| 1179 | SDL_zero(textureDesc); | ||
| 1180 | textureDesc.Width = texture->w; | ||
| 1181 | textureDesc.Height = texture->h; | ||
| 1182 | textureDesc.MipLevels = 1; | ||
| 1183 | textureDesc.ArraySize = 1; | ||
| 1184 | textureDesc.Format = textureFormat; | ||
| 1185 | textureDesc.SampleDesc.Count = 1; | ||
| 1186 | textureDesc.SampleDesc.Quality = 0; | ||
| 1187 | textureDesc.MiscFlags = 0; | ||
| 1188 | |||
| 1189 | // NV12 textures must have even width and height | ||
| 1190 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 1191 | texture->format == SDL_PIXELFORMAT_NV21 || | ||
| 1192 | texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1193 | textureDesc.Width = (textureDesc.Width + 1) & ~1; | ||
| 1194 | textureDesc.Height = (textureDesc.Height + 1) & ~1; | ||
| 1195 | } | ||
| 1196 | textureData->w = (int)textureDesc.Width; | ||
| 1197 | textureData->h = (int)textureDesc.Height; | ||
| 1198 | if (SDL_COLORSPACETRANSFER(texture->colorspace) == SDL_TRANSFER_CHARACTERISTICS_SRGB) { | ||
| 1199 | textureData->shader = SHADER_RGB; | ||
| 1200 | } else { | ||
| 1201 | textureData->shader = SHADER_ADVANCED; | ||
| 1202 | } | ||
| 1203 | |||
| 1204 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 1205 | textureDesc.Usage = D3D11_USAGE_DYNAMIC; | ||
| 1206 | textureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; | ||
| 1207 | } else { | ||
| 1208 | textureDesc.Usage = D3D11_USAGE_DEFAULT; | ||
| 1209 | textureDesc.CPUAccessFlags = 0; | ||
| 1210 | } | ||
| 1211 | |||
| 1212 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 1213 | textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; | ||
| 1214 | } else { | ||
| 1215 | textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; | ||
| 1216 | } | ||
| 1217 | |||
| 1218 | if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER, &textureData->mainTexture)) { | ||
| 1219 | return false; | ||
| 1220 | } | ||
| 1221 | if (!textureData->mainTexture) { | ||
| 1222 | result = ID3D11Device_CreateTexture2D(rendererData->d3dDevice, | ||
| 1223 | &textureDesc, | ||
| 1224 | NULL, | ||
| 1225 | &textureData->mainTexture); | ||
| 1226 | if (FAILED(result)) { | ||
| 1227 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D"), result); | ||
| 1228 | } | ||
| 1229 | } | ||
| 1230 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER, textureData->mainTexture); | ||
| 1231 | #ifdef SDL_HAVE_YUV | ||
| 1232 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 1233 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 1234 | textureData->yuv = true; | ||
| 1235 | |||
| 1236 | textureDesc.Width = (textureDesc.Width + 1) / 2; | ||
| 1237 | textureDesc.Height = (textureDesc.Height + 1) / 2; | ||
| 1238 | |||
| 1239 | if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER, &textureData->mainTextureU)) { | ||
| 1240 | return false; | ||
| 1241 | } | ||
| 1242 | if (!textureData->mainTextureU) { | ||
| 1243 | result = ID3D11Device_CreateTexture2D(rendererData->d3dDevice, | ||
| 1244 | &textureDesc, | ||
| 1245 | NULL, | ||
| 1246 | &textureData->mainTextureU); | ||
| 1247 | if (FAILED(result)) { | ||
| 1248 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D"), result); | ||
| 1249 | } | ||
| 1250 | } | ||
| 1251 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER, textureData->mainTextureU); | ||
| 1252 | |||
| 1253 | if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER, &textureData->mainTextureV)) { | ||
| 1254 | return false; | ||
| 1255 | } | ||
| 1256 | if (!textureData->mainTextureV) { | ||
| 1257 | result = ID3D11Device_CreateTexture2D(rendererData->d3dDevice, | ||
| 1258 | &textureDesc, | ||
| 1259 | NULL, | ||
| 1260 | &textureData->mainTextureV); | ||
| 1261 | if (FAILED(result)) { | ||
| 1262 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D"), result); | ||
| 1263 | } | ||
| 1264 | } | ||
| 1265 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER, textureData->mainTextureV); | ||
| 1266 | |||
| 1267 | textureData->YCbCr_matrix = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8); | ||
| 1268 | if (!textureData->YCbCr_matrix) { | ||
| 1269 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 1270 | } | ||
| 1271 | } | ||
| 1272 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 1273 | texture->format == SDL_PIXELFORMAT_NV21 || | ||
| 1274 | texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1275 | int bits_per_pixel; | ||
| 1276 | |||
| 1277 | textureData->nv12 = true; | ||
| 1278 | |||
| 1279 | switch (texture->format) { | ||
| 1280 | case SDL_PIXELFORMAT_P010: | ||
| 1281 | bits_per_pixel = 10; | ||
| 1282 | break; | ||
| 1283 | default: | ||
| 1284 | bits_per_pixel = 8; | ||
| 1285 | break; | ||
| 1286 | } | ||
| 1287 | textureData->YCbCr_matrix = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, bits_per_pixel); | ||
| 1288 | if (!textureData->YCbCr_matrix) { | ||
| 1289 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 1290 | } | ||
| 1291 | } | ||
| 1292 | #endif // SDL_HAVE_YUV | ||
| 1293 | SDL_zero(resourceViewDesc); | ||
| 1294 | resourceViewDesc.Format = SDLPixelFormatToDXGIMainResourceViewFormat(texture->format, renderer->output_colorspace); | ||
| 1295 | resourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; | ||
| 1296 | resourceViewDesc.Texture2D.MostDetailedMip = 0; | ||
| 1297 | resourceViewDesc.Texture2D.MipLevels = textureDesc.MipLevels; | ||
| 1298 | result = ID3D11Device_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1299 | (ID3D11Resource *)textureData->mainTexture, | ||
| 1300 | &resourceViewDesc, | ||
| 1301 | &textureData->mainTextureResourceView); | ||
| 1302 | if (FAILED(result)) { | ||
| 1303 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateShaderResourceView"), result); | ||
| 1304 | } | ||
| 1305 | #ifdef SDL_HAVE_YUV | ||
| 1306 | if (textureData->yuv) { | ||
| 1307 | result = ID3D11Device_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1308 | (ID3D11Resource *)textureData->mainTextureU, | ||
| 1309 | &resourceViewDesc, | ||
| 1310 | &textureData->mainTextureResourceViewU); | ||
| 1311 | if (FAILED(result)) { | ||
| 1312 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateShaderResourceView"), result); | ||
| 1313 | } | ||
| 1314 | result = ID3D11Device_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1315 | (ID3D11Resource *)textureData->mainTextureV, | ||
| 1316 | &resourceViewDesc, | ||
| 1317 | &textureData->mainTextureResourceViewV); | ||
| 1318 | if (FAILED(result)) { | ||
| 1319 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateShaderResourceView"), result); | ||
| 1320 | } | ||
| 1321 | } | ||
| 1322 | |||
| 1323 | if (textureData->nv12) { | ||
| 1324 | D3D11_SHADER_RESOURCE_VIEW_DESC nvResourceViewDesc = resourceViewDesc; | ||
| 1325 | |||
| 1326 | if (texture->format == SDL_PIXELFORMAT_NV12 || texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 1327 | nvResourceViewDesc.Format = DXGI_FORMAT_R8G8_UNORM; | ||
| 1328 | } else if (texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1329 | nvResourceViewDesc.Format = DXGI_FORMAT_R16G16_UNORM; | ||
| 1330 | } | ||
| 1331 | |||
| 1332 | result = ID3D11Device_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1333 | (ID3D11Resource *)textureData->mainTexture, | ||
| 1334 | &nvResourceViewDesc, | ||
| 1335 | &textureData->mainTextureResourceViewNV); | ||
| 1336 | if (FAILED(result)) { | ||
| 1337 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateShaderResourceView"), result); | ||
| 1338 | } | ||
| 1339 | } | ||
| 1340 | #endif // SDL_HAVE_YUV | ||
| 1341 | |||
| 1342 | if (texture->access & SDL_TEXTUREACCESS_TARGET) { | ||
| 1343 | D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; | ||
| 1344 | SDL_zero(renderTargetViewDesc); | ||
| 1345 | renderTargetViewDesc.Format = textureDesc.Format; | ||
| 1346 | renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; | ||
| 1347 | renderTargetViewDesc.Texture2D.MipSlice = 0; | ||
| 1348 | |||
| 1349 | result = ID3D11Device_CreateRenderTargetView(rendererData->d3dDevice, | ||
| 1350 | (ID3D11Resource *)textureData->mainTexture, | ||
| 1351 | &renderTargetViewDesc, | ||
| 1352 | &textureData->mainTextureRenderTargetView); | ||
| 1353 | if (FAILED(result)) { | ||
| 1354 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateRenderTargetView"), result); | ||
| 1355 | } | ||
| 1356 | } | ||
| 1357 | |||
| 1358 | return true; | ||
| 1359 | } | ||
| 1360 | |||
| 1361 | static void D3D11_DestroyTexture(SDL_Renderer *renderer, | ||
| 1362 | SDL_Texture *texture) | ||
| 1363 | { | ||
| 1364 | D3D11_TextureData *data = (D3D11_TextureData *)texture->internal; | ||
| 1365 | |||
| 1366 | if (!data) { | ||
| 1367 | return; | ||
| 1368 | } | ||
| 1369 | |||
| 1370 | SAFE_RELEASE(data->mainTexture); | ||
| 1371 | SAFE_RELEASE(data->mainTextureResourceView); | ||
| 1372 | SAFE_RELEASE(data->mainTextureRenderTargetView); | ||
| 1373 | SAFE_RELEASE(data->stagingTexture); | ||
| 1374 | #ifdef SDL_HAVE_YUV | ||
| 1375 | SAFE_RELEASE(data->mainTextureU); | ||
| 1376 | SAFE_RELEASE(data->mainTextureResourceViewU); | ||
| 1377 | SAFE_RELEASE(data->mainTextureV); | ||
| 1378 | SAFE_RELEASE(data->mainTextureResourceViewV); | ||
| 1379 | SAFE_RELEASE(data->mainTextureResourceViewNV); | ||
| 1380 | SDL_free(data->pixels); | ||
| 1381 | #endif | ||
| 1382 | SDL_free(data); | ||
| 1383 | texture->internal = NULL; | ||
| 1384 | } | ||
| 1385 | |||
| 1386 | static bool D3D11_UpdateTextureInternal(D3D11_RenderData *rendererData, ID3D11Texture2D *texture, int bpp, int x, int y, int w, int h, const void *pixels, int pitch) | ||
| 1387 | { | ||
| 1388 | ID3D11Texture2D *stagingTexture; | ||
| 1389 | const Uint8 *src; | ||
| 1390 | Uint8 *dst; | ||
| 1391 | int row; | ||
| 1392 | UINT length; | ||
| 1393 | HRESULT result; | ||
| 1394 | D3D11_TEXTURE2D_DESC stagingTextureDesc; | ||
| 1395 | D3D11_MAPPED_SUBRESOURCE textureMemory; | ||
| 1396 | |||
| 1397 | // Create a 'staging' texture, which will be used to write to a portion of the main texture. | ||
| 1398 | ID3D11Texture2D_GetDesc(texture, &stagingTextureDesc); | ||
| 1399 | stagingTextureDesc.Width = w; | ||
| 1400 | stagingTextureDesc.Height = h; | ||
| 1401 | stagingTextureDesc.BindFlags = 0; | ||
| 1402 | stagingTextureDesc.MiscFlags = 0; | ||
| 1403 | stagingTextureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; | ||
| 1404 | stagingTextureDesc.Usage = D3D11_USAGE_STAGING; | ||
| 1405 | if (stagingTextureDesc.Format == DXGI_FORMAT_NV12 || | ||
| 1406 | stagingTextureDesc.Format == DXGI_FORMAT_P010) { | ||
| 1407 | stagingTextureDesc.Width = (stagingTextureDesc.Width + 1) & ~1; | ||
| 1408 | stagingTextureDesc.Height = (stagingTextureDesc.Height + 1) & ~1; | ||
| 1409 | } | ||
| 1410 | result = ID3D11Device_CreateTexture2D(rendererData->d3dDevice, | ||
| 1411 | &stagingTextureDesc, | ||
| 1412 | NULL, | ||
| 1413 | &stagingTexture); | ||
| 1414 | if (FAILED(result)) { | ||
| 1415 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D [create staging texture]"), result); | ||
| 1416 | } | ||
| 1417 | |||
| 1418 | // Get a write-only pointer to data in the staging texture: | ||
| 1419 | result = ID3D11DeviceContext_Map(rendererData->d3dContext, | ||
| 1420 | (ID3D11Resource *)stagingTexture, | ||
| 1421 | 0, | ||
| 1422 | D3D11_MAP_WRITE, | ||
| 1423 | 0, | ||
| 1424 | &textureMemory); | ||
| 1425 | if (FAILED(result)) { | ||
| 1426 | SAFE_RELEASE(stagingTexture); | ||
| 1427 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11DeviceContext1::Map [map staging texture]"), result); | ||
| 1428 | } | ||
| 1429 | |||
| 1430 | src = (const Uint8 *)pixels; | ||
| 1431 | dst = (Uint8 *)textureMemory.pData; | ||
| 1432 | length = w * bpp; | ||
| 1433 | if (length == (UINT)pitch && length == textureMemory.RowPitch) { | ||
| 1434 | SDL_memcpy(dst, src, (size_t)length * h); | ||
| 1435 | } else { | ||
| 1436 | if (length > (UINT)pitch) { | ||
| 1437 | length = pitch; | ||
| 1438 | } | ||
| 1439 | if (length > textureMemory.RowPitch) { | ||
| 1440 | length = textureMemory.RowPitch; | ||
| 1441 | } | ||
| 1442 | for (row = 0; row < h; ++row) { | ||
| 1443 | SDL_memcpy(dst, src, length); | ||
| 1444 | src += pitch; | ||
| 1445 | dst += textureMemory.RowPitch; | ||
| 1446 | } | ||
| 1447 | } | ||
| 1448 | |||
| 1449 | if (stagingTextureDesc.Format == DXGI_FORMAT_NV12 || | ||
| 1450 | stagingTextureDesc.Format == DXGI_FORMAT_P010) { | ||
| 1451 | // Copy the UV plane as well | ||
| 1452 | h = (h + 1) / 2; | ||
| 1453 | if (stagingTextureDesc.Format == DXGI_FORMAT_P010) { | ||
| 1454 | length = (length + 3) & ~3; | ||
| 1455 | pitch = (pitch + 3) & ~3; | ||
| 1456 | } else { | ||
| 1457 | length = (length + 1) & ~1; | ||
| 1458 | pitch = (pitch + 1) & ~1; | ||
| 1459 | } | ||
| 1460 | dst = (Uint8 *)textureMemory.pData + stagingTextureDesc.Height * textureMemory.RowPitch; | ||
| 1461 | for (row = 0; row < h; ++row) { | ||
| 1462 | SDL_memcpy(dst, src, length); | ||
| 1463 | src += pitch; | ||
| 1464 | dst += textureMemory.RowPitch; | ||
| 1465 | } | ||
| 1466 | } | ||
| 1467 | |||
| 1468 | // Commit the pixel buffer's changes back to the staging texture: | ||
| 1469 | ID3D11DeviceContext_Unmap(rendererData->d3dContext, | ||
| 1470 | (ID3D11Resource *)stagingTexture, | ||
| 1471 | 0); | ||
| 1472 | |||
| 1473 | // Copy the staging texture's contents back to the texture: | ||
| 1474 | ID3D11DeviceContext_CopySubresourceRegion(rendererData->d3dContext, | ||
| 1475 | (ID3D11Resource *)texture, | ||
| 1476 | 0, | ||
| 1477 | x, | ||
| 1478 | y, | ||
| 1479 | 0, | ||
| 1480 | (ID3D11Resource *)stagingTexture, | ||
| 1481 | 0, | ||
| 1482 | NULL); | ||
| 1483 | |||
| 1484 | SAFE_RELEASE(stagingTexture); | ||
| 1485 | |||
| 1486 | return true; | ||
| 1487 | } | ||
| 1488 | |||
| 1489 | #ifdef SDL_HAVE_YUV | ||
| 1490 | static bool D3D11_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1491 | const SDL_Rect *rect, | ||
| 1492 | const Uint8 *Yplane, int Ypitch, | ||
| 1493 | const Uint8 *UVplane, int UVpitch); | ||
| 1494 | |||
| 1495 | static bool D3D11_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1496 | const SDL_Rect *rect, | ||
| 1497 | const Uint8 *Yplane, int Ypitch, | ||
| 1498 | const Uint8 *Uplane, int Upitch, | ||
| 1499 | const Uint8 *Vplane, int Vpitch); | ||
| 1500 | #endif | ||
| 1501 | |||
| 1502 | static bool D3D11_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1503 | const SDL_Rect *rect, const void *srcPixels, | ||
| 1504 | int srcPitch) | ||
| 1505 | { | ||
| 1506 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1507 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 1508 | |||
| 1509 | if (!textureData) { | ||
| 1510 | return SDL_SetError("Texture is not currently available"); | ||
| 1511 | } | ||
| 1512 | |||
| 1513 | #ifdef SDL_HAVE_YUV | ||
| 1514 | if (textureData->nv12) { | ||
| 1515 | const Uint8 *Yplane = (const Uint8 *)srcPixels; | ||
| 1516 | const Uint8 *UVplane = Yplane + rect->h * srcPitch; | ||
| 1517 | |||
| 1518 | return D3D11_UpdateTextureNV(renderer, texture, rect, Yplane, srcPitch, UVplane, srcPitch); | ||
| 1519 | |||
| 1520 | } else if (textureData->yuv) { | ||
| 1521 | int Ypitch = srcPitch; | ||
| 1522 | int UVpitch = ((Ypitch + 1) / 2); | ||
| 1523 | const Uint8 *Yplane = (const Uint8 *)srcPixels; | ||
| 1524 | const Uint8 *Uplane = Yplane + rect->h * Ypitch; | ||
| 1525 | const Uint8 *Vplane = Uplane + ((rect->h + 1) / 2) * UVpitch; | ||
| 1526 | |||
| 1527 | if (texture->format == SDL_PIXELFORMAT_YV12) { | ||
| 1528 | return D3D11_UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Vplane, UVpitch, Uplane, UVpitch); | ||
| 1529 | } else { | ||
| 1530 | return D3D11_UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, UVpitch, Vplane, UVpitch); | ||
| 1531 | } | ||
| 1532 | } | ||
| 1533 | #endif | ||
| 1534 | |||
| 1535 | if (!D3D11_UpdateTextureInternal(rendererData, textureData->mainTexture, SDL_BYTESPERPIXEL(texture->format), rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch)) { | ||
| 1536 | return false; | ||
| 1537 | } | ||
| 1538 | return true; | ||
| 1539 | } | ||
| 1540 | |||
| 1541 | #ifdef SDL_HAVE_YUV | ||
| 1542 | static bool D3D11_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1543 | const SDL_Rect *rect, | ||
| 1544 | const Uint8 *Yplane, int Ypitch, | ||
| 1545 | const Uint8 *Uplane, int Upitch, | ||
| 1546 | const Uint8 *Vplane, int Vpitch) | ||
| 1547 | { | ||
| 1548 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1549 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 1550 | |||
| 1551 | if (!textureData) { | ||
| 1552 | return SDL_SetError("Texture is not currently available"); | ||
| 1553 | } | ||
| 1554 | |||
| 1555 | if (!D3D11_UpdateTextureInternal(rendererData, textureData->mainTexture, SDL_BYTESPERPIXEL(texture->format), rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch)) { | ||
| 1556 | return false; | ||
| 1557 | } | ||
| 1558 | if (!D3D11_UpdateTextureInternal(rendererData, textureData->mainTextureU, SDL_BYTESPERPIXEL(texture->format), rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, Uplane, Upitch)) { | ||
| 1559 | return false; | ||
| 1560 | } | ||
| 1561 | if (!D3D11_UpdateTextureInternal(rendererData, textureData->mainTextureV, SDL_BYTESPERPIXEL(texture->format), rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, Vplane, Vpitch)) { | ||
| 1562 | return false; | ||
| 1563 | } | ||
| 1564 | return true; | ||
| 1565 | } | ||
| 1566 | |||
| 1567 | static bool D3D11_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1568 | const SDL_Rect *rect, | ||
| 1569 | const Uint8 *Yplane, int Ypitch, | ||
| 1570 | const Uint8 *UVplane, int UVpitch) | ||
| 1571 | { | ||
| 1572 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1573 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 1574 | ID3D11Texture2D *stagingTexture; | ||
| 1575 | const Uint8 *src; | ||
| 1576 | Uint8 *dst; | ||
| 1577 | int w, h, row; | ||
| 1578 | UINT length; | ||
| 1579 | HRESULT result; | ||
| 1580 | D3D11_TEXTURE2D_DESC stagingTextureDesc; | ||
| 1581 | D3D11_MAPPED_SUBRESOURCE textureMemory; | ||
| 1582 | |||
| 1583 | if (!textureData) { | ||
| 1584 | return SDL_SetError("Texture is not currently available"); | ||
| 1585 | } | ||
| 1586 | |||
| 1587 | w = rect->w; | ||
| 1588 | h = rect->h; | ||
| 1589 | |||
| 1590 | // Create a 'staging' texture, which will be used to write to a portion of the main texture. | ||
| 1591 | ID3D11Texture2D_GetDesc(textureData->mainTexture, &stagingTextureDesc); | ||
| 1592 | stagingTextureDesc.Width = w; | ||
| 1593 | stagingTextureDesc.Height = h; | ||
| 1594 | stagingTextureDesc.BindFlags = 0; | ||
| 1595 | stagingTextureDesc.MiscFlags = 0; | ||
| 1596 | stagingTextureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; | ||
| 1597 | stagingTextureDesc.Usage = D3D11_USAGE_STAGING; | ||
| 1598 | if (stagingTextureDesc.Format == DXGI_FORMAT_NV12 || | ||
| 1599 | stagingTextureDesc.Format == DXGI_FORMAT_P010) { | ||
| 1600 | stagingTextureDesc.Width = (stagingTextureDesc.Width + 1) & ~1; | ||
| 1601 | stagingTextureDesc.Height = (stagingTextureDesc.Height + 1) & ~1; | ||
| 1602 | } | ||
| 1603 | result = ID3D11Device_CreateTexture2D(rendererData->d3dDevice, | ||
| 1604 | &stagingTextureDesc, | ||
| 1605 | NULL, | ||
| 1606 | &stagingTexture); | ||
| 1607 | if (FAILED(result)) { | ||
| 1608 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D [create staging texture]"), result); | ||
| 1609 | } | ||
| 1610 | |||
| 1611 | // Get a write-only pointer to data in the staging texture: | ||
| 1612 | result = ID3D11DeviceContext_Map(rendererData->d3dContext, | ||
| 1613 | (ID3D11Resource *)stagingTexture, | ||
| 1614 | 0, | ||
| 1615 | D3D11_MAP_WRITE, | ||
| 1616 | 0, | ||
| 1617 | &textureMemory); | ||
| 1618 | if (FAILED(result)) { | ||
| 1619 | SAFE_RELEASE(stagingTexture); | ||
| 1620 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11DeviceContext1::Map [map staging texture]"), result); | ||
| 1621 | } | ||
| 1622 | |||
| 1623 | src = Yplane; | ||
| 1624 | dst = (Uint8 *)textureMemory.pData; | ||
| 1625 | length = w; | ||
| 1626 | if (length == (UINT)Ypitch && length == textureMemory.RowPitch) { | ||
| 1627 | SDL_memcpy(dst, src, (size_t)length * h); | ||
| 1628 | } else { | ||
| 1629 | if (length > (UINT)Ypitch) { | ||
| 1630 | length = Ypitch; | ||
| 1631 | } | ||
| 1632 | if (length > textureMemory.RowPitch) { | ||
| 1633 | length = textureMemory.RowPitch; | ||
| 1634 | } | ||
| 1635 | for (row = 0; row < h; ++row) { | ||
| 1636 | SDL_memcpy(dst, src, length); | ||
| 1637 | src += Ypitch; | ||
| 1638 | dst += textureMemory.RowPitch; | ||
| 1639 | } | ||
| 1640 | } | ||
| 1641 | |||
| 1642 | src = UVplane; | ||
| 1643 | length = w; | ||
| 1644 | h = (h + 1) / 2; | ||
| 1645 | if (stagingTextureDesc.Format == DXGI_FORMAT_P010) { | ||
| 1646 | length = (length + 3) & ~3; | ||
| 1647 | UVpitch = (UVpitch + 3) & ~3; | ||
| 1648 | } else { | ||
| 1649 | length = (length + 1) & ~1; | ||
| 1650 | UVpitch = (UVpitch + 1) & ~1; | ||
| 1651 | } | ||
| 1652 | dst = (Uint8 *)textureMemory.pData + stagingTextureDesc.Height * textureMemory.RowPitch; | ||
| 1653 | for (row = 0; row < h; ++row) { | ||
| 1654 | SDL_memcpy(dst, src, length); | ||
| 1655 | src += UVpitch; | ||
| 1656 | dst += textureMemory.RowPitch; | ||
| 1657 | } | ||
| 1658 | |||
| 1659 | // Commit the pixel buffer's changes back to the staging texture: | ||
| 1660 | ID3D11DeviceContext_Unmap(rendererData->d3dContext, | ||
| 1661 | (ID3D11Resource *)stagingTexture, | ||
| 1662 | 0); | ||
| 1663 | |||
| 1664 | // Copy the staging texture's contents back to the texture: | ||
| 1665 | ID3D11DeviceContext_CopySubresourceRegion(rendererData->d3dContext, | ||
| 1666 | (ID3D11Resource *)textureData->mainTexture, | ||
| 1667 | 0, | ||
| 1668 | rect->x, | ||
| 1669 | rect->y, | ||
| 1670 | 0, | ||
| 1671 | (ID3D11Resource *)stagingTexture, | ||
| 1672 | 0, | ||
| 1673 | NULL); | ||
| 1674 | |||
| 1675 | SAFE_RELEASE(stagingTexture); | ||
| 1676 | |||
| 1677 | return true; | ||
| 1678 | } | ||
| 1679 | #endif | ||
| 1680 | |||
| 1681 | static bool D3D11_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1682 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 1683 | { | ||
| 1684 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1685 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 1686 | HRESULT result = S_OK; | ||
| 1687 | D3D11_TEXTURE2D_DESC stagingTextureDesc; | ||
| 1688 | D3D11_MAPPED_SUBRESOURCE textureMemory; | ||
| 1689 | |||
| 1690 | if (!textureData) { | ||
| 1691 | return SDL_SetError("Texture is not currently available"); | ||
| 1692 | } | ||
| 1693 | #ifdef SDL_HAVE_YUV | ||
| 1694 | if (textureData->yuv || textureData->nv12) { | ||
| 1695 | // It's more efficient to upload directly... | ||
| 1696 | if (!textureData->pixels) { | ||
| 1697 | textureData->pitch = texture->w; | ||
| 1698 | textureData->pixels = (Uint8 *)SDL_malloc((texture->h * textureData->pitch * 3) / 2); | ||
| 1699 | if (!textureData->pixels) { | ||
| 1700 | return false; | ||
| 1701 | } | ||
| 1702 | } | ||
| 1703 | textureData->locked_rect = *rect; | ||
| 1704 | *pixels = | ||
| 1705 | (void *)(textureData->pixels + rect->y * textureData->pitch + | ||
| 1706 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 1707 | *pitch = textureData->pitch; | ||
| 1708 | return true; | ||
| 1709 | } | ||
| 1710 | #endif | ||
| 1711 | if (textureData->stagingTexture) { | ||
| 1712 | return SDL_SetError("texture is already locked"); | ||
| 1713 | } | ||
| 1714 | |||
| 1715 | /* Create a 'staging' texture, which will be used to write to a portion | ||
| 1716 | * of the main texture. This is necessary, as Direct3D 11.1 does not | ||
| 1717 | * have the ability to write a CPU-bound pixel buffer to a rectangular | ||
| 1718 | * subrect of a texture. Direct3D 11.1 can, however, write a pixel | ||
| 1719 | * buffer to an entire texture, hence the use of a staging texture. | ||
| 1720 | */ | ||
| 1721 | ID3D11Texture2D_GetDesc(textureData->mainTexture, &stagingTextureDesc); | ||
| 1722 | stagingTextureDesc.Width = rect->w; | ||
| 1723 | stagingTextureDesc.Height = rect->h; | ||
| 1724 | stagingTextureDesc.BindFlags = 0; | ||
| 1725 | stagingTextureDesc.MiscFlags = 0; | ||
| 1726 | stagingTextureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; | ||
| 1727 | stagingTextureDesc.Usage = D3D11_USAGE_STAGING; | ||
| 1728 | result = ID3D11Device_CreateTexture2D(rendererData->d3dDevice, | ||
| 1729 | &stagingTextureDesc, | ||
| 1730 | NULL, | ||
| 1731 | &textureData->stagingTexture); | ||
| 1732 | if (FAILED(result)) { | ||
| 1733 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D [create staging texture]"), result); | ||
| 1734 | } | ||
| 1735 | |||
| 1736 | // Get a write-only pointer to data in the staging texture: | ||
| 1737 | result = ID3D11DeviceContext_Map(rendererData->d3dContext, | ||
| 1738 | (ID3D11Resource *)textureData->stagingTexture, | ||
| 1739 | 0, | ||
| 1740 | D3D11_MAP_WRITE, | ||
| 1741 | 0, | ||
| 1742 | &textureMemory); | ||
| 1743 | if (FAILED(result)) { | ||
| 1744 | SAFE_RELEASE(textureData->stagingTexture); | ||
| 1745 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11DeviceContext1::Map [map staging texture]"), result); | ||
| 1746 | } | ||
| 1747 | |||
| 1748 | /* Make note of where the staging texture will be written to | ||
| 1749 | * (on a call to SDL_UnlockTexture): | ||
| 1750 | */ | ||
| 1751 | textureData->lockedTexturePositionX = rect->x; | ||
| 1752 | textureData->lockedTexturePositionY = rect->y; | ||
| 1753 | |||
| 1754 | /* Make sure the caller has information on the texture's pixel buffer, | ||
| 1755 | * then return: | ||
| 1756 | */ | ||
| 1757 | *pixels = textureMemory.pData; | ||
| 1758 | *pitch = textureMemory.RowPitch; | ||
| 1759 | return true; | ||
| 1760 | } | ||
| 1761 | |||
| 1762 | static void D3D11_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1763 | { | ||
| 1764 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1765 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 1766 | |||
| 1767 | if (!textureData) { | ||
| 1768 | return; | ||
| 1769 | } | ||
| 1770 | #ifdef SDL_HAVE_YUV | ||
| 1771 | if (textureData->yuv || textureData->nv12) { | ||
| 1772 | const SDL_Rect *rect = &textureData->locked_rect; | ||
| 1773 | void *pixels = | ||
| 1774 | (void *)(textureData->pixels + rect->y * textureData->pitch + | ||
| 1775 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 1776 | D3D11_UpdateTexture(renderer, texture, rect, pixels, textureData->pitch); | ||
| 1777 | return; | ||
| 1778 | } | ||
| 1779 | #endif | ||
| 1780 | // Commit the pixel buffer's changes back to the staging texture: | ||
| 1781 | ID3D11DeviceContext_Unmap(rendererData->d3dContext, | ||
| 1782 | (ID3D11Resource *)textureData->stagingTexture, | ||
| 1783 | 0); | ||
| 1784 | |||
| 1785 | // Copy the staging texture's contents back to the main texture: | ||
| 1786 | ID3D11DeviceContext_CopySubresourceRegion(rendererData->d3dContext, | ||
| 1787 | (ID3D11Resource *)textureData->mainTexture, | ||
| 1788 | 0, | ||
| 1789 | textureData->lockedTexturePositionX, | ||
| 1790 | textureData->lockedTexturePositionY, | ||
| 1791 | 0, | ||
| 1792 | (ID3D11Resource *)textureData->stagingTexture, | ||
| 1793 | 0, | ||
| 1794 | NULL); | ||
| 1795 | |||
| 1796 | SAFE_RELEASE(textureData->stagingTexture); | ||
| 1797 | } | ||
| 1798 | |||
| 1799 | static void D3D11_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 1800 | { | ||
| 1801 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 1802 | |||
| 1803 | if (!textureData) { | ||
| 1804 | return; | ||
| 1805 | } | ||
| 1806 | |||
| 1807 | textureData->scaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? D3D11_FILTER_MIN_MAG_MIP_POINT : D3D11_FILTER_MIN_MAG_MIP_LINEAR; | ||
| 1808 | } | ||
| 1809 | |||
| 1810 | static bool D3D11_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1811 | { | ||
| 1812 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1813 | D3D11_TextureData *textureData = NULL; | ||
| 1814 | |||
| 1815 | if (!texture) { | ||
| 1816 | rendererData->currentOffscreenRenderTargetView = NULL; | ||
| 1817 | return true; | ||
| 1818 | } | ||
| 1819 | |||
| 1820 | textureData = (D3D11_TextureData *)texture->internal; | ||
| 1821 | |||
| 1822 | if (!textureData->mainTextureRenderTargetView) { | ||
| 1823 | return SDL_SetError("specified texture is not a render target"); | ||
| 1824 | } | ||
| 1825 | |||
| 1826 | rendererData->currentOffscreenRenderTargetView = textureData->mainTextureRenderTargetView; | ||
| 1827 | |||
| 1828 | return true; | ||
| 1829 | } | ||
| 1830 | |||
| 1831 | static bool D3D11_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 1832 | { | ||
| 1833 | return true; // nothing to do in this backend. | ||
| 1834 | } | ||
| 1835 | |||
| 1836 | static bool D3D11_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 1837 | { | ||
| 1838 | D3D11_VertexPositionColor *verts = (D3D11_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(D3D11_VertexPositionColor), 0, &cmd->data.draw.first); | ||
| 1839 | int i; | ||
| 1840 | SDL_FColor color = cmd->data.draw.color; | ||
| 1841 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 1842 | |||
| 1843 | if (!verts) { | ||
| 1844 | return false; | ||
| 1845 | } | ||
| 1846 | |||
| 1847 | cmd->data.draw.count = count; | ||
| 1848 | |||
| 1849 | if (convert_color) { | ||
| 1850 | SDL_ConvertToLinear(&color); | ||
| 1851 | } | ||
| 1852 | |||
| 1853 | for (i = 0; i < count; i++) { | ||
| 1854 | verts->pos.x = points[i].x + 0.5f; | ||
| 1855 | verts->pos.y = points[i].y + 0.5f; | ||
| 1856 | verts->tex.x = 0.0f; | ||
| 1857 | verts->tex.y = 0.0f; | ||
| 1858 | verts->color = color; | ||
| 1859 | verts++; | ||
| 1860 | } | ||
| 1861 | |||
| 1862 | return true; | ||
| 1863 | } | ||
| 1864 | |||
| 1865 | static bool D3D11_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 1866 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 1867 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 1868 | float scale_x, float scale_y) | ||
| 1869 | { | ||
| 1870 | int i; | ||
| 1871 | int count = indices ? num_indices : num_vertices; | ||
| 1872 | D3D11_VertexPositionColor *verts = (D3D11_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(D3D11_VertexPositionColor), 0, &cmd->data.draw.first); | ||
| 1873 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 1874 | D3D11_TextureData *textureData = texture ? (D3D11_TextureData *)texture->internal : NULL; | ||
| 1875 | float u_scale = textureData ? (float)texture->w / textureData->w : 0.0f; | ||
| 1876 | float v_scale = textureData ? (float)texture->h / textureData->h : 0.0f; | ||
| 1877 | |||
| 1878 | if (!verts) { | ||
| 1879 | return false; | ||
| 1880 | } | ||
| 1881 | |||
| 1882 | cmd->data.draw.count = count; | ||
| 1883 | size_indices = indices ? size_indices : 0; | ||
| 1884 | |||
| 1885 | for (i = 0; i < count; i++) { | ||
| 1886 | int j; | ||
| 1887 | float *xy_; | ||
| 1888 | if (size_indices == 4) { | ||
| 1889 | j = ((const Uint32 *)indices)[i]; | ||
| 1890 | } else if (size_indices == 2) { | ||
| 1891 | j = ((const Uint16 *)indices)[i]; | ||
| 1892 | } else if (size_indices == 1) { | ||
| 1893 | j = ((const Uint8 *)indices)[i]; | ||
| 1894 | } else { | ||
| 1895 | j = i; | ||
| 1896 | } | ||
| 1897 | |||
| 1898 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 1899 | |||
| 1900 | verts->pos.x = xy_[0] * scale_x; | ||
| 1901 | verts->pos.y = xy_[1] * scale_y; | ||
| 1902 | verts->color = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 1903 | if (convert_color) { | ||
| 1904 | SDL_ConvertToLinear(&verts->color); | ||
| 1905 | } | ||
| 1906 | |||
| 1907 | if (texture) { | ||
| 1908 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 1909 | verts->tex.x = uv_[0] * u_scale; | ||
| 1910 | verts->tex.y = uv_[1] * v_scale; | ||
| 1911 | } else { | ||
| 1912 | verts->tex.x = 0.0f; | ||
| 1913 | verts->tex.y = 0.0f; | ||
| 1914 | } | ||
| 1915 | |||
| 1916 | verts += 1; | ||
| 1917 | } | ||
| 1918 | return true; | ||
| 1919 | } | ||
| 1920 | |||
| 1921 | static bool D3D11_UpdateVertexBuffer(SDL_Renderer *renderer, | ||
| 1922 | const void *vertexData, size_t dataSizeInBytes) | ||
| 1923 | { | ||
| 1924 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 1925 | HRESULT result = S_OK; | ||
| 1926 | const int vbidx = rendererData->currentVertexBuffer; | ||
| 1927 | const UINT stride = sizeof(D3D11_VertexPositionColor); | ||
| 1928 | const UINT offset = 0; | ||
| 1929 | |||
| 1930 | if (dataSizeInBytes == 0) { | ||
| 1931 | return true; // nothing to do. | ||
| 1932 | } | ||
| 1933 | |||
| 1934 | if (rendererData->vertexBuffers[vbidx] && rendererData->vertexBufferSizes[vbidx] >= dataSizeInBytes) { | ||
| 1935 | D3D11_MAPPED_SUBRESOURCE mappedResource; | ||
| 1936 | result = ID3D11DeviceContext_Map(rendererData->d3dContext, | ||
| 1937 | (ID3D11Resource *)rendererData->vertexBuffers[vbidx], | ||
| 1938 | 0, | ||
| 1939 | D3D11_MAP_WRITE_DISCARD, | ||
| 1940 | 0, | ||
| 1941 | &mappedResource); | ||
| 1942 | if (FAILED(result)) { | ||
| 1943 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11DeviceContext1::Map [vertex buffer]"), result); | ||
| 1944 | } | ||
| 1945 | SDL_memcpy(mappedResource.pData, vertexData, dataSizeInBytes); | ||
| 1946 | ID3D11DeviceContext_Unmap(rendererData->d3dContext, (ID3D11Resource *)rendererData->vertexBuffers[vbidx], 0); | ||
| 1947 | } else { | ||
| 1948 | D3D11_BUFFER_DESC vertexBufferDesc; | ||
| 1949 | D3D11_SUBRESOURCE_DATA vertexBufferData; | ||
| 1950 | |||
| 1951 | SAFE_RELEASE(rendererData->vertexBuffers[vbidx]); | ||
| 1952 | |||
| 1953 | SDL_zero(vertexBufferDesc); | ||
| 1954 | vertexBufferDesc.ByteWidth = (UINT)dataSizeInBytes; | ||
| 1955 | vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC; | ||
| 1956 | vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; | ||
| 1957 | vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; | ||
| 1958 | |||
| 1959 | SDL_zero(vertexBufferData); | ||
| 1960 | vertexBufferData.pSysMem = vertexData; | ||
| 1961 | vertexBufferData.SysMemPitch = 0; | ||
| 1962 | vertexBufferData.SysMemSlicePitch = 0; | ||
| 1963 | |||
| 1964 | result = ID3D11Device_CreateBuffer(rendererData->d3dDevice, | ||
| 1965 | &vertexBufferDesc, | ||
| 1966 | &vertexBufferData, | ||
| 1967 | &rendererData->vertexBuffers[vbidx]); | ||
| 1968 | if (FAILED(result)) { | ||
| 1969 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateBuffer [vertex buffer]"), result); | ||
| 1970 | } | ||
| 1971 | |||
| 1972 | rendererData->vertexBufferSizes[vbidx] = dataSizeInBytes; | ||
| 1973 | } | ||
| 1974 | |||
| 1975 | ID3D11DeviceContext_IASetVertexBuffers(rendererData->d3dContext, | ||
| 1976 | 0, | ||
| 1977 | 1, | ||
| 1978 | &rendererData->vertexBuffers[vbidx], | ||
| 1979 | &stride, | ||
| 1980 | &offset); | ||
| 1981 | |||
| 1982 | rendererData->currentVertexBuffer++; | ||
| 1983 | if (rendererData->currentVertexBuffer >= SDL_arraysize(rendererData->vertexBuffers)) { | ||
| 1984 | rendererData->currentVertexBuffer = 0; | ||
| 1985 | } | ||
| 1986 | |||
| 1987 | return true; | ||
| 1988 | } | ||
| 1989 | |||
| 1990 | static bool D3D11_UpdateViewport(SDL_Renderer *renderer) | ||
| 1991 | { | ||
| 1992 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 1993 | const SDL_Rect *viewport = &data->currentViewport; | ||
| 1994 | Float4X4 projection; | ||
| 1995 | Float4X4 view; | ||
| 1996 | SDL_FRect orientationAlignedViewport; | ||
| 1997 | BOOL swapDimensions; | ||
| 1998 | D3D11_VIEWPORT d3dviewport; | ||
| 1999 | const int rotation = D3D11_GetRotationForCurrentRenderTarget(renderer); | ||
| 2000 | |||
| 2001 | if (viewport->w == 0 || viewport->h == 0) { | ||
| 2002 | /* If the viewport is empty, assume that it is because | ||
| 2003 | * SDL_CreateRenderer is calling it, and will call it again later | ||
| 2004 | * with a non-empty viewport. | ||
| 2005 | */ | ||
| 2006 | // SDL_Log("%s, no viewport was set!", __FUNCTION__); | ||
| 2007 | return false; | ||
| 2008 | } | ||
| 2009 | |||
| 2010 | /* Make sure the SDL viewport gets rotated to that of the physical display's rotation. | ||
| 2011 | * Keep in mind here that the Y-axis will be been inverted (from Direct3D's | ||
| 2012 | * default coordinate system) so rotations will be done in the opposite | ||
| 2013 | * direction of the DXGI_MODE_ROTATION enumeration. | ||
| 2014 | */ | ||
| 2015 | switch (rotation) { | ||
| 2016 | case DXGI_MODE_ROTATION_IDENTITY: | ||
| 2017 | projection = MatrixIdentity(); | ||
| 2018 | break; | ||
| 2019 | case DXGI_MODE_ROTATION_ROTATE270: | ||
| 2020 | projection = MatrixRotationZ(SDL_PI_F * 0.5f); | ||
| 2021 | break; | ||
| 2022 | case DXGI_MODE_ROTATION_ROTATE180: | ||
| 2023 | projection = MatrixRotationZ(SDL_PI_F); | ||
| 2024 | break; | ||
| 2025 | case DXGI_MODE_ROTATION_ROTATE90: | ||
| 2026 | projection = MatrixRotationZ(-SDL_PI_F * 0.5f); | ||
| 2027 | break; | ||
| 2028 | default: | ||
| 2029 | return SDL_SetError("An unknown DisplayOrientation is being used"); | ||
| 2030 | } | ||
| 2031 | |||
| 2032 | // Update the view matrix | ||
| 2033 | SDL_zero(view); | ||
| 2034 | view.m[0][0] = 2.0f / viewport->w; | ||
| 2035 | view.m[1][1] = -2.0f / viewport->h; | ||
| 2036 | view.m[2][2] = 1.0f; | ||
| 2037 | view.m[3][0] = -1.0f; | ||
| 2038 | view.m[3][1] = 1.0f; | ||
| 2039 | view.m[3][3] = 1.0f; | ||
| 2040 | |||
| 2041 | /* Combine the projection + view matrix together now, as both only get | ||
| 2042 | * set here (as of this writing, on Dec 26, 2013). When done, store it | ||
| 2043 | * for eventual transfer to the GPU. | ||
| 2044 | */ | ||
| 2045 | data->vertexShaderConstantsData.projectionAndView = MatrixMultiply( | ||
| 2046 | view, | ||
| 2047 | projection); | ||
| 2048 | |||
| 2049 | /* Update the Direct3D viewport, which seems to be aligned to the | ||
| 2050 | * swap buffer's coordinate space, which is always in either | ||
| 2051 | * a landscape mode, for all Windows 8/RT devices, or a portrait mode, | ||
| 2052 | * for Windows Phone devices. | ||
| 2053 | */ | ||
| 2054 | swapDimensions = D3D11_IsDisplayRotated90Degrees(rotation); | ||
| 2055 | if (swapDimensions) { | ||
| 2056 | orientationAlignedViewport.x = (float)viewport->y; | ||
| 2057 | orientationAlignedViewport.y = (float)viewport->x; | ||
| 2058 | orientationAlignedViewport.w = (float)viewport->h; | ||
| 2059 | orientationAlignedViewport.h = (float)viewport->w; | ||
| 2060 | } else { | ||
| 2061 | orientationAlignedViewport.x = (float)viewport->x; | ||
| 2062 | orientationAlignedViewport.y = (float)viewport->y; | ||
| 2063 | orientationAlignedViewport.w = (float)viewport->w; | ||
| 2064 | orientationAlignedViewport.h = (float)viewport->h; | ||
| 2065 | } | ||
| 2066 | |||
| 2067 | d3dviewport.TopLeftX = orientationAlignedViewport.x; | ||
| 2068 | d3dviewport.TopLeftY = orientationAlignedViewport.y; | ||
| 2069 | d3dviewport.Width = orientationAlignedViewport.w; | ||
| 2070 | d3dviewport.Height = orientationAlignedViewport.h; | ||
| 2071 | d3dviewport.MinDepth = 0.0f; | ||
| 2072 | d3dviewport.MaxDepth = 1.0f; | ||
| 2073 | // SDL_Log("%s: D3D viewport = {%f,%f,%f,%f}", __FUNCTION__, d3dviewport.TopLeftX, d3dviewport.TopLeftY, d3dviewport.Width, d3dviewport.Height); | ||
| 2074 | ID3D11DeviceContext_RSSetViewports(data->d3dContext, 1, &d3dviewport); | ||
| 2075 | |||
| 2076 | data->viewportDirty = false; | ||
| 2077 | |||
| 2078 | return true; | ||
| 2079 | } | ||
| 2080 | |||
| 2081 | static ID3D11RenderTargetView *D3D11_GetCurrentRenderTargetView(SDL_Renderer *renderer) | ||
| 2082 | { | ||
| 2083 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 2084 | if (data->currentOffscreenRenderTargetView) { | ||
| 2085 | return data->currentOffscreenRenderTargetView; | ||
| 2086 | } else { | ||
| 2087 | return data->mainRenderTargetView; | ||
| 2088 | } | ||
| 2089 | } | ||
| 2090 | |||
| 2091 | static void D3D11_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const SDL_Texture *texture, D3D11_PixelShaderConstants *constants) | ||
| 2092 | { | ||
| 2093 | float output_headroom; | ||
| 2094 | |||
| 2095 | SDL_zerop(constants); | ||
| 2096 | |||
| 2097 | constants->scRGB_output = (float)SDL_RenderingLinearSpace(renderer); | ||
| 2098 | constants->color_scale = cmd->data.draw.color_scale; | ||
| 2099 | |||
| 2100 | if (texture) { | ||
| 2101 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 2102 | |||
| 2103 | switch (texture->format) { | ||
| 2104 | case SDL_PIXELFORMAT_YV12: | ||
| 2105 | case SDL_PIXELFORMAT_IYUV: | ||
| 2106 | constants->texture_type = TEXTURETYPE_YUV; | ||
| 2107 | constants->input_type = INPUTTYPE_SRGB; | ||
| 2108 | break; | ||
| 2109 | case SDL_PIXELFORMAT_NV12: | ||
| 2110 | constants->texture_type = TEXTURETYPE_NV12; | ||
| 2111 | constants->input_type = INPUTTYPE_SRGB; | ||
| 2112 | break; | ||
| 2113 | case SDL_PIXELFORMAT_NV21: | ||
| 2114 | constants->texture_type = TEXTURETYPE_NV21; | ||
| 2115 | constants->input_type = INPUTTYPE_SRGB; | ||
| 2116 | break; | ||
| 2117 | case SDL_PIXELFORMAT_P010: | ||
| 2118 | constants->texture_type = TEXTURETYPE_NV12; | ||
| 2119 | constants->input_type = INPUTTYPE_HDR10; | ||
| 2120 | break; | ||
| 2121 | default: | ||
| 2122 | constants->texture_type = TEXTURETYPE_RGB; | ||
| 2123 | if (texture->colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 2124 | constants->input_type = INPUTTYPE_SCRGB; | ||
| 2125 | } else if (texture->colorspace == SDL_COLORSPACE_HDR10) { | ||
| 2126 | constants->input_type = INPUTTYPE_HDR10; | ||
| 2127 | } else { | ||
| 2128 | // The sampler will convert from sRGB to linear on load if working in linear colorspace | ||
| 2129 | constants->input_type = INPUTTYPE_UNSPECIFIED; | ||
| 2130 | } | ||
| 2131 | break; | ||
| 2132 | } | ||
| 2133 | |||
| 2134 | constants->sdr_white_point = texture->SDR_white_point; | ||
| 2135 | |||
| 2136 | if (renderer->target) { | ||
| 2137 | output_headroom = renderer->target->HDR_headroom; | ||
| 2138 | } else { | ||
| 2139 | output_headroom = renderer->HDR_headroom; | ||
| 2140 | } | ||
| 2141 | |||
| 2142 | if (texture->HDR_headroom > output_headroom) { | ||
| 2143 | constants->tonemap_method = TONEMAP_CHROME; | ||
| 2144 | constants->tonemap_factor1 = (output_headroom / (texture->HDR_headroom * texture->HDR_headroom)); | ||
| 2145 | constants->tonemap_factor2 = (1.0f / output_headroom); | ||
| 2146 | } | ||
| 2147 | |||
| 2148 | if (textureData->YCbCr_matrix) { | ||
| 2149 | SDL_memcpy(constants->YCbCr_matrix, textureData->YCbCr_matrix, sizeof(constants->YCbCr_matrix)); | ||
| 2150 | } | ||
| 2151 | } | ||
| 2152 | } | ||
| 2153 | |||
| 2154 | static bool D3D11_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, | ||
| 2155 | D3D11_Shader shader, const D3D11_PixelShaderConstants *shader_constants, | ||
| 2156 | const int numShaderResources, ID3D11ShaderResourceView **shaderResources, | ||
| 2157 | ID3D11SamplerState *sampler, const Float4X4 *matrix) | ||
| 2158 | |||
| 2159 | { | ||
| 2160 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 2161 | const Float4X4 *newmatrix = matrix ? matrix : &rendererData->identity; | ||
| 2162 | ID3D11RasterizerState *rasterizerState; | ||
| 2163 | ID3D11RenderTargetView *renderTargetView = D3D11_GetCurrentRenderTargetView(renderer); | ||
| 2164 | ID3D11ShaderResourceView *shaderResource; | ||
| 2165 | const SDL_BlendMode blendMode = cmd->data.draw.blend; | ||
| 2166 | ID3D11BlendState *blendState = NULL; | ||
| 2167 | bool updateSubresource = false; | ||
| 2168 | D3D11_PixelShaderState *shader_state = &rendererData->currentShaderState[shader]; | ||
| 2169 | D3D11_PixelShaderConstants solid_constants; | ||
| 2170 | |||
| 2171 | if (numShaderResources > 0) { | ||
| 2172 | shaderResource = shaderResources[0]; | ||
| 2173 | } else { | ||
| 2174 | shaderResource = NULL; | ||
| 2175 | } | ||
| 2176 | |||
| 2177 | // Make sure the render target isn't bound to a shader | ||
| 2178 | if (shaderResource != rendererData->currentShaderResource) { | ||
| 2179 | ID3D11ShaderResourceView *pNullResource = NULL; | ||
| 2180 | ID3D11DeviceContext_PSSetShaderResources(rendererData->d3dContext, 0, 1, &pNullResource); | ||
| 2181 | rendererData->currentShaderResource = NULL; | ||
| 2182 | } | ||
| 2183 | |||
| 2184 | if (renderTargetView != rendererData->currentRenderTargetView) { | ||
| 2185 | ID3D11DeviceContext_OMSetRenderTargets(rendererData->d3dContext, | ||
| 2186 | 1, | ||
| 2187 | &renderTargetView, | ||
| 2188 | NULL); | ||
| 2189 | rendererData->currentRenderTargetView = renderTargetView; | ||
| 2190 | } | ||
| 2191 | |||
| 2192 | if (rendererData->viewportDirty) { | ||
| 2193 | if (D3D11_UpdateViewport(renderer)) { | ||
| 2194 | // vertexShaderConstantsData.projectionAndView has changed | ||
| 2195 | updateSubresource = true; | ||
| 2196 | } | ||
| 2197 | } | ||
| 2198 | |||
| 2199 | if (rendererData->cliprectDirty) { | ||
| 2200 | if (!rendererData->currentCliprectEnabled) { | ||
| 2201 | ID3D11DeviceContext_RSSetScissorRects(rendererData->d3dContext, 0, NULL); | ||
| 2202 | } else { | ||
| 2203 | D3D11_RECT scissorRect; | ||
| 2204 | if (!D3D11_GetViewportAlignedD3DRect(renderer, &rendererData->currentCliprect, &scissorRect, TRUE)) { | ||
| 2205 | // D3D11_GetViewportAlignedD3DRect will have set the SDL error | ||
| 2206 | return false; | ||
| 2207 | } | ||
| 2208 | ID3D11DeviceContext_RSSetScissorRects(rendererData->d3dContext, 1, &scissorRect); | ||
| 2209 | } | ||
| 2210 | rendererData->cliprectDirty = false; | ||
| 2211 | } | ||
| 2212 | |||
| 2213 | if (!rendererData->currentCliprectEnabled) { | ||
| 2214 | rasterizerState = rendererData->mainRasterizer; | ||
| 2215 | } else { | ||
| 2216 | rasterizerState = rendererData->clippedRasterizer; | ||
| 2217 | } | ||
| 2218 | if (rasterizerState != rendererData->currentRasterizerState) { | ||
| 2219 | ID3D11DeviceContext_RSSetState(rendererData->d3dContext, rasterizerState); | ||
| 2220 | rendererData->currentRasterizerState = rasterizerState; | ||
| 2221 | } | ||
| 2222 | |||
| 2223 | if (blendMode != SDL_BLENDMODE_NONE) { | ||
| 2224 | int i; | ||
| 2225 | for (i = 0; i < rendererData->blendModesCount; ++i) { | ||
| 2226 | if (blendMode == rendererData->blendModes[i].blendMode) { | ||
| 2227 | blendState = rendererData->blendModes[i].blendState; | ||
| 2228 | break; | ||
| 2229 | } | ||
| 2230 | } | ||
| 2231 | if (!blendState) { | ||
| 2232 | blendState = D3D11_CreateBlendState(renderer, blendMode); | ||
| 2233 | if (!blendState) { | ||
| 2234 | return false; | ||
| 2235 | } | ||
| 2236 | } | ||
| 2237 | } | ||
| 2238 | if (blendState != rendererData->currentBlendState) { | ||
| 2239 | ID3D11DeviceContext_OMSetBlendState(rendererData->d3dContext, blendState, 0, 0xFFFFFFFF); | ||
| 2240 | rendererData->currentBlendState = blendState; | ||
| 2241 | } | ||
| 2242 | |||
| 2243 | if (!shader_constants) { | ||
| 2244 | D3D11_SetupShaderConstants(renderer, cmd, NULL, &solid_constants); | ||
| 2245 | shader_constants = &solid_constants; | ||
| 2246 | } | ||
| 2247 | |||
| 2248 | if (!shader_state->constants || | ||
| 2249 | SDL_memcmp(shader_constants, &shader_state->shader_constants, sizeof(*shader_constants)) != 0) { | ||
| 2250 | SAFE_RELEASE(shader_state->constants); | ||
| 2251 | |||
| 2252 | D3D11_BUFFER_DESC desc; | ||
| 2253 | SDL_zero(desc); | ||
| 2254 | desc.Usage = D3D11_USAGE_DEFAULT; | ||
| 2255 | desc.ByteWidth = sizeof(*shader_constants); | ||
| 2256 | desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; | ||
| 2257 | |||
| 2258 | D3D11_SUBRESOURCE_DATA data; | ||
| 2259 | SDL_zero(data); | ||
| 2260 | data.pSysMem = shader_constants; | ||
| 2261 | |||
| 2262 | HRESULT result = ID3D11Device_CreateBuffer(rendererData->d3dDevice, &desc, &data, &shader_state->constants); | ||
| 2263 | if (FAILED(result)) { | ||
| 2264 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device::CreateBuffer [create shader constants]"), result); | ||
| 2265 | return false; | ||
| 2266 | } | ||
| 2267 | SDL_memcpy(&shader_state->shader_constants, shader_constants, sizeof(*shader_constants)); | ||
| 2268 | |||
| 2269 | // Force the shader parameters to be re-set | ||
| 2270 | rendererData->currentShader = SHADER_NONE; | ||
| 2271 | } | ||
| 2272 | if (shader != rendererData->currentShader) { | ||
| 2273 | if (!rendererData->pixelShaders[shader]) { | ||
| 2274 | if (!D3D11_CreatePixelShader(rendererData->d3dDevice, shader, &rendererData->pixelShaders[shader])) { | ||
| 2275 | return false; | ||
| 2276 | } | ||
| 2277 | } | ||
| 2278 | ID3D11DeviceContext_PSSetShader(rendererData->d3dContext, rendererData->pixelShaders[shader], NULL, 0); | ||
| 2279 | if (shader_state->constants) { | ||
| 2280 | ID3D11DeviceContext_PSSetConstantBuffers(rendererData->d3dContext, 0, 1, &shader_state->constants); | ||
| 2281 | } | ||
| 2282 | rendererData->currentShader = shader; | ||
| 2283 | } | ||
| 2284 | if (shaderResource != rendererData->currentShaderResource) { | ||
| 2285 | ID3D11DeviceContext_PSSetShaderResources(rendererData->d3dContext, 0, numShaderResources, shaderResources); | ||
| 2286 | rendererData->currentShaderResource = shaderResource; | ||
| 2287 | } | ||
| 2288 | if (sampler != rendererData->currentSampler) { | ||
| 2289 | ID3D11DeviceContext_PSSetSamplers(rendererData->d3dContext, 0, 1, &sampler); | ||
| 2290 | rendererData->currentSampler = sampler; | ||
| 2291 | } | ||
| 2292 | |||
| 2293 | if (updateSubresource == true || SDL_memcmp(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix)) != 0) { | ||
| 2294 | SDL_copyp(&rendererData->vertexShaderConstantsData.model, newmatrix); | ||
| 2295 | ID3D11DeviceContext_UpdateSubresource(rendererData->d3dContext, | ||
| 2296 | (ID3D11Resource *)rendererData->vertexShaderConstants, | ||
| 2297 | 0, | ||
| 2298 | NULL, | ||
| 2299 | &rendererData->vertexShaderConstantsData, | ||
| 2300 | 0, | ||
| 2301 | 0); | ||
| 2302 | } | ||
| 2303 | |||
| 2304 | return true; | ||
| 2305 | } | ||
| 2306 | |||
| 2307 | static bool D3D11_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const Float4X4 *matrix) | ||
| 2308 | { | ||
| 2309 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 2310 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 2311 | D3D11_TextureData *textureData = (D3D11_TextureData *)texture->internal; | ||
| 2312 | ID3D11SamplerState *textureSampler; | ||
| 2313 | D3D11_PixelShaderConstants constants; | ||
| 2314 | |||
| 2315 | if (!textureData) { | ||
| 2316 | return SDL_SetError("Texture is not currently available"); | ||
| 2317 | } | ||
| 2318 | |||
| 2319 | D3D11_SetupShaderConstants(renderer, cmd, texture, &constants); | ||
| 2320 | |||
| 2321 | switch (textureData->scaleMode) { | ||
| 2322 | case D3D11_FILTER_MIN_MAG_MIP_POINT: | ||
| 2323 | switch (cmd->data.draw.texture_address_mode) { | ||
| 2324 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 2325 | textureSampler = rendererData->samplers[D3D11_SAMPLER_NEAREST_CLAMP]; | ||
| 2326 | break; | ||
| 2327 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 2328 | textureSampler = rendererData->samplers[D3D11_SAMPLER_NEAREST_WRAP]; | ||
| 2329 | break; | ||
| 2330 | default: | ||
| 2331 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 2332 | } | ||
| 2333 | break; | ||
| 2334 | case D3D11_FILTER_MIN_MAG_MIP_LINEAR: | ||
| 2335 | switch (cmd->data.draw.texture_address_mode) { | ||
| 2336 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 2337 | textureSampler = rendererData->samplers[D3D11_SAMPLER_LINEAR_CLAMP]; | ||
| 2338 | break; | ||
| 2339 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 2340 | textureSampler = rendererData->samplers[D3D11_SAMPLER_LINEAR_WRAP]; | ||
| 2341 | break; | ||
| 2342 | default: | ||
| 2343 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 2344 | } | ||
| 2345 | break; | ||
| 2346 | default: | ||
| 2347 | return SDL_SetError("Unknown scale mode: %d", textureData->scaleMode); | ||
| 2348 | } | ||
| 2349 | #ifdef SDL_HAVE_YUV | ||
| 2350 | if (textureData->yuv) { | ||
| 2351 | ID3D11ShaderResourceView *shaderResources[3]; | ||
| 2352 | |||
| 2353 | shaderResources[0] = textureData->mainTextureResourceView; | ||
| 2354 | shaderResources[1] = textureData->mainTextureResourceViewU; | ||
| 2355 | shaderResources[2] = textureData->mainTextureResourceViewV; | ||
| 2356 | |||
| 2357 | return D3D11_SetDrawState(renderer, cmd, textureData->shader, &constants, | ||
| 2358 | SDL_arraysize(shaderResources), shaderResources, textureSampler, matrix); | ||
| 2359 | |||
| 2360 | } else if (textureData->nv12) { | ||
| 2361 | ID3D11ShaderResourceView *shaderResources[2]; | ||
| 2362 | |||
| 2363 | shaderResources[0] = textureData->mainTextureResourceView; | ||
| 2364 | shaderResources[1] = textureData->mainTextureResourceViewNV; | ||
| 2365 | |||
| 2366 | return D3D11_SetDrawState(renderer, cmd, textureData->shader, &constants, | ||
| 2367 | SDL_arraysize(shaderResources), shaderResources, textureSampler, matrix); | ||
| 2368 | } | ||
| 2369 | #endif // SDL_HAVE_YUV | ||
| 2370 | return D3D11_SetDrawState(renderer, cmd, textureData->shader, &constants, | ||
| 2371 | 1, &textureData->mainTextureResourceView, textureSampler, matrix); | ||
| 2372 | } | ||
| 2373 | |||
| 2374 | static void D3D11_DrawPrimitives(SDL_Renderer *renderer, D3D11_PRIMITIVE_TOPOLOGY primitiveTopology, const size_t vertexStart, const size_t vertexCount) | ||
| 2375 | { | ||
| 2376 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 2377 | ID3D11DeviceContext_IASetPrimitiveTopology(rendererData->d3dContext, primitiveTopology); | ||
| 2378 | ID3D11DeviceContext_Draw(rendererData->d3dContext, (UINT)vertexCount, (UINT)vertexStart); | ||
| 2379 | } | ||
| 2380 | |||
| 2381 | static void D3D11_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 2382 | { | ||
| 2383 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 2384 | data->currentRenderTargetView = NULL; | ||
| 2385 | data->currentRasterizerState = NULL; | ||
| 2386 | data->currentBlendState = NULL; | ||
| 2387 | data->currentShader = SHADER_NONE; | ||
| 2388 | data->currentShaderResource = NULL; | ||
| 2389 | data->currentSampler = NULL; | ||
| 2390 | data->cliprectDirty = true; | ||
| 2391 | data->viewportDirty = true; | ||
| 2392 | } | ||
| 2393 | |||
| 2394 | static bool D3D11_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 2395 | { | ||
| 2396 | D3D11_RenderData *rendererData = (D3D11_RenderData *)renderer->internal; | ||
| 2397 | const int viewportRotation = D3D11_GetRotationForCurrentRenderTarget(renderer); | ||
| 2398 | |||
| 2399 | if (!rendererData->d3dDevice) { | ||
| 2400 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 2401 | } | ||
| 2402 | |||
| 2403 | if (rendererData->pixelSizeChanged) { | ||
| 2404 | D3D11_UpdateForWindowSizeChange(renderer); | ||
| 2405 | rendererData->pixelSizeChanged = false; | ||
| 2406 | } | ||
| 2407 | |||
| 2408 | if (rendererData->currentViewportRotation != viewportRotation) { | ||
| 2409 | rendererData->currentViewportRotation = viewportRotation; | ||
| 2410 | rendererData->viewportDirty = true; | ||
| 2411 | } | ||
| 2412 | |||
| 2413 | if (!D3D11_UpdateVertexBuffer(renderer, vertices, vertsize)) { | ||
| 2414 | return false; | ||
| 2415 | } | ||
| 2416 | |||
| 2417 | while (cmd) { | ||
| 2418 | switch (cmd->command) { | ||
| 2419 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 2420 | { | ||
| 2421 | break; // this isn't currently used in this render backend. | ||
| 2422 | } | ||
| 2423 | |||
| 2424 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 2425 | { | ||
| 2426 | SDL_Rect *viewport = &rendererData->currentViewport; | ||
| 2427 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 2428 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 2429 | rendererData->viewportDirty = true; | ||
| 2430 | rendererData->cliprectDirty = true; | ||
| 2431 | } | ||
| 2432 | break; | ||
| 2433 | } | ||
| 2434 | |||
| 2435 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 2436 | { | ||
| 2437 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 2438 | if (rendererData->currentCliprectEnabled != cmd->data.cliprect.enabled) { | ||
| 2439 | rendererData->currentCliprectEnabled = cmd->data.cliprect.enabled; | ||
| 2440 | rendererData->cliprectDirty = true; | ||
| 2441 | } | ||
| 2442 | if (SDL_memcmp(&rendererData->currentCliprect, rect, sizeof(*rect)) != 0) { | ||
| 2443 | SDL_copyp(&rendererData->currentCliprect, rect); | ||
| 2444 | rendererData->cliprectDirty = true; | ||
| 2445 | } | ||
| 2446 | break; | ||
| 2447 | } | ||
| 2448 | |||
| 2449 | case SDL_RENDERCMD_CLEAR: | ||
| 2450 | { | ||
| 2451 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 2452 | SDL_FColor color = cmd->data.color.color; | ||
| 2453 | if (convert_color) { | ||
| 2454 | SDL_ConvertToLinear(&color); | ||
| 2455 | } | ||
| 2456 | color.r *= cmd->data.color.color_scale; | ||
| 2457 | color.g *= cmd->data.color.color_scale; | ||
| 2458 | color.b *= cmd->data.color.color_scale; | ||
| 2459 | ID3D11DeviceContext_ClearRenderTargetView(rendererData->d3dContext, D3D11_GetCurrentRenderTargetView(renderer), &color.r); | ||
| 2460 | break; | ||
| 2461 | } | ||
| 2462 | |||
| 2463 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 2464 | { | ||
| 2465 | const size_t count = cmd->data.draw.count; | ||
| 2466 | const size_t first = cmd->data.draw.first; | ||
| 2467 | const size_t start = first / sizeof(D3D11_VertexPositionColor); | ||
| 2468 | D3D11_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, 0, NULL, NULL, NULL); | ||
| 2469 | D3D11_DrawPrimitives(renderer, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST, start, count); | ||
| 2470 | break; | ||
| 2471 | } | ||
| 2472 | |||
| 2473 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 2474 | { | ||
| 2475 | const size_t count = cmd->data.draw.count; | ||
| 2476 | const size_t first = cmd->data.draw.first; | ||
| 2477 | const size_t start = first / sizeof(D3D11_VertexPositionColor); | ||
| 2478 | const D3D11_VertexPositionColor *verts = (D3D11_VertexPositionColor *)(((Uint8 *)vertices) + first); | ||
| 2479 | D3D11_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, 0, NULL, NULL, NULL); | ||
| 2480 | D3D11_DrawPrimitives(renderer, D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP, start, count); | ||
| 2481 | if (verts[0].pos.x != verts[count - 1].pos.x || verts[0].pos.y != verts[count - 1].pos.y) { | ||
| 2482 | D3D11_DrawPrimitives(renderer, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST, start + (count - 1), 1); | ||
| 2483 | } | ||
| 2484 | break; | ||
| 2485 | } | ||
| 2486 | |||
| 2487 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 2488 | break; | ||
| 2489 | |||
| 2490 | case SDL_RENDERCMD_COPY: // unused | ||
| 2491 | break; | ||
| 2492 | |||
| 2493 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 2494 | break; | ||
| 2495 | |||
| 2496 | case SDL_RENDERCMD_GEOMETRY: | ||
| 2497 | { | ||
| 2498 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 2499 | const size_t count = cmd->data.draw.count; | ||
| 2500 | const size_t first = cmd->data.draw.first; | ||
| 2501 | const size_t start = first / sizeof(D3D11_VertexPositionColor); | ||
| 2502 | |||
| 2503 | if (texture) { | ||
| 2504 | D3D11_SetCopyState(renderer, cmd, NULL); | ||
| 2505 | } else { | ||
| 2506 | D3D11_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, 0, NULL, NULL, NULL); | ||
| 2507 | } | ||
| 2508 | |||
| 2509 | D3D11_DrawPrimitives(renderer, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST, start, count); | ||
| 2510 | break; | ||
| 2511 | } | ||
| 2512 | |||
| 2513 | case SDL_RENDERCMD_NO_OP: | ||
| 2514 | break; | ||
| 2515 | } | ||
| 2516 | |||
| 2517 | cmd = cmd->next; | ||
| 2518 | } | ||
| 2519 | |||
| 2520 | return true; | ||
| 2521 | } | ||
| 2522 | |||
| 2523 | static SDL_Surface *D3D11_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 2524 | { | ||
| 2525 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 2526 | ID3D11RenderTargetView *renderTargetView = NULL; | ||
| 2527 | ID3D11Texture2D *backBuffer = NULL; | ||
| 2528 | ID3D11Texture2D *stagingTexture = NULL; | ||
| 2529 | HRESULT result; | ||
| 2530 | D3D11_TEXTURE2D_DESC stagingTextureDesc; | ||
| 2531 | D3D11_RECT srcRect = { 0, 0, 0, 0 }; | ||
| 2532 | D3D11_BOX srcBox; | ||
| 2533 | D3D11_MAPPED_SUBRESOURCE textureMemory; | ||
| 2534 | SDL_Surface *output = NULL; | ||
| 2535 | |||
| 2536 | renderTargetView = D3D11_GetCurrentRenderTargetView(renderer); | ||
| 2537 | if (!renderTargetView) { | ||
| 2538 | SDL_SetError("%s, ID3D11DeviceContext::OMGetRenderTargets failed", __FUNCTION__); | ||
| 2539 | goto done; | ||
| 2540 | } | ||
| 2541 | |||
| 2542 | ID3D11View_GetResource(renderTargetView, (ID3D11Resource **)&backBuffer); | ||
| 2543 | if (!backBuffer) { | ||
| 2544 | SDL_SetError("%s, ID3D11View::GetResource failed", __FUNCTION__); | ||
| 2545 | goto done; | ||
| 2546 | } | ||
| 2547 | |||
| 2548 | // Create a staging texture to copy the screen's data to: | ||
| 2549 | ID3D11Texture2D_GetDesc(backBuffer, &stagingTextureDesc); | ||
| 2550 | stagingTextureDesc.Width = rect->w; | ||
| 2551 | stagingTextureDesc.Height = rect->h; | ||
| 2552 | stagingTextureDesc.BindFlags = 0; | ||
| 2553 | stagingTextureDesc.MiscFlags = 0; | ||
| 2554 | stagingTextureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; | ||
| 2555 | stagingTextureDesc.Usage = D3D11_USAGE_STAGING; | ||
| 2556 | result = ID3D11Device_CreateTexture2D(data->d3dDevice, | ||
| 2557 | &stagingTextureDesc, | ||
| 2558 | NULL, | ||
| 2559 | &stagingTexture); | ||
| 2560 | if (FAILED(result)) { | ||
| 2561 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateTexture2D [create staging texture]"), result); | ||
| 2562 | goto done; | ||
| 2563 | } | ||
| 2564 | |||
| 2565 | // Copy the desired portion of the back buffer to the staging texture: | ||
| 2566 | if (!D3D11_GetViewportAlignedD3DRect(renderer, rect, &srcRect, FALSE)) { | ||
| 2567 | // D3D11_GetViewportAlignedD3DRect will have set the SDL error | ||
| 2568 | goto done; | ||
| 2569 | } | ||
| 2570 | |||
| 2571 | srcBox.left = srcRect.left; | ||
| 2572 | srcBox.right = srcRect.right; | ||
| 2573 | srcBox.top = srcRect.top; | ||
| 2574 | srcBox.bottom = srcRect.bottom; | ||
| 2575 | srcBox.front = 0; | ||
| 2576 | srcBox.back = 1; | ||
| 2577 | ID3D11DeviceContext_CopySubresourceRegion(data->d3dContext, | ||
| 2578 | (ID3D11Resource *)stagingTexture, | ||
| 2579 | 0, | ||
| 2580 | 0, 0, 0, | ||
| 2581 | (ID3D11Resource *)backBuffer, | ||
| 2582 | 0, | ||
| 2583 | &srcBox); | ||
| 2584 | |||
| 2585 | // Map the staging texture's data to CPU-accessible memory: | ||
| 2586 | result = ID3D11DeviceContext_Map(data->d3dContext, | ||
| 2587 | (ID3D11Resource *)stagingTexture, | ||
| 2588 | 0, | ||
| 2589 | D3D11_MAP_READ, | ||
| 2590 | 0, | ||
| 2591 | &textureMemory); | ||
| 2592 | if (FAILED(result)) { | ||
| 2593 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11DeviceContext1::Map [map staging texture]"), result); | ||
| 2594 | goto done; | ||
| 2595 | } | ||
| 2596 | |||
| 2597 | output = SDL_DuplicatePixels( | ||
| 2598 | rect->w, rect->h, | ||
| 2599 | D3D11_DXGIFormatToSDLPixelFormat(stagingTextureDesc.Format), | ||
| 2600 | renderer->target ? renderer->target->colorspace : renderer->output_colorspace, | ||
| 2601 | textureMemory.pData, | ||
| 2602 | textureMemory.RowPitch); | ||
| 2603 | |||
| 2604 | // Unmap the texture: | ||
| 2605 | ID3D11DeviceContext_Unmap(data->d3dContext, | ||
| 2606 | (ID3D11Resource *)stagingTexture, | ||
| 2607 | 0); | ||
| 2608 | |||
| 2609 | done: | ||
| 2610 | SAFE_RELEASE(backBuffer); | ||
| 2611 | SAFE_RELEASE(stagingTexture); | ||
| 2612 | return output; | ||
| 2613 | } | ||
| 2614 | |||
| 2615 | static bool D3D11_RenderPresent(SDL_Renderer *renderer) | ||
| 2616 | { | ||
| 2617 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 2618 | HRESULT result; | ||
| 2619 | DXGI_PRESENT_PARAMETERS parameters; | ||
| 2620 | |||
| 2621 | if (!data->d3dDevice) { | ||
| 2622 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 2623 | } | ||
| 2624 | |||
| 2625 | SDL_zero(parameters); | ||
| 2626 | |||
| 2627 | /* The application may optionally specify "dirty" or "scroll" | ||
| 2628 | * rects to improve efficiency in certain scenarios. | ||
| 2629 | */ | ||
| 2630 | result = IDXGISwapChain1_Present1(data->swapChain, data->syncInterval, data->presentFlags, ¶meters); | ||
| 2631 | |||
| 2632 | /* Discard the contents of the render target. | ||
| 2633 | * This is a valid operation only when the existing contents will be entirely | ||
| 2634 | * overwritten. If dirty or scroll rects are used, this call should be removed. | ||
| 2635 | */ | ||
| 2636 | ID3D11DeviceContext1_DiscardView(data->d3dContext, (ID3D11View *)data->mainRenderTargetView); | ||
| 2637 | |||
| 2638 | // When the present flips, it unbinds the current view, so bind it again on the next draw call | ||
| 2639 | data->currentRenderTargetView = NULL; | ||
| 2640 | |||
| 2641 | if (FAILED(result) && result != DXGI_ERROR_WAS_STILL_DRAWING) { | ||
| 2642 | /* If the device was removed either by a disconnect or a driver upgrade, we | ||
| 2643 | * must recreate all device resources. | ||
| 2644 | */ | ||
| 2645 | if (result == DXGI_ERROR_DEVICE_REMOVED) { | ||
| 2646 | if (D3D11_HandleDeviceLost(renderer)) { | ||
| 2647 | SDL_SetError("Present failed, device lost"); | ||
| 2648 | } else { | ||
| 2649 | // Recovering from device lost failed, error is already set | ||
| 2650 | } | ||
| 2651 | } else if (result == DXGI_ERROR_INVALID_CALL) { | ||
| 2652 | // We probably went through a fullscreen <-> windowed transition | ||
| 2653 | D3D11_CreateWindowSizeDependentResources(renderer); | ||
| 2654 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::Present"), result); | ||
| 2655 | } else { | ||
| 2656 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::Present"), result); | ||
| 2657 | } | ||
| 2658 | return false; | ||
| 2659 | } | ||
| 2660 | return true; | ||
| 2661 | } | ||
| 2662 | |||
| 2663 | static bool D3D11_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 2664 | { | ||
| 2665 | D3D11_RenderData *data = (D3D11_RenderData *)renderer->internal; | ||
| 2666 | |||
| 2667 | if (vsync < 0) { | ||
| 2668 | return SDL_Unsupported(); | ||
| 2669 | } | ||
| 2670 | |||
| 2671 | if (vsync > 0) { | ||
| 2672 | data->syncInterval = vsync; | ||
| 2673 | data->presentFlags = 0; | ||
| 2674 | } else { | ||
| 2675 | data->syncInterval = 0; | ||
| 2676 | data->presentFlags = DXGI_PRESENT_DO_NOT_WAIT; | ||
| 2677 | } | ||
| 2678 | return true; | ||
| 2679 | } | ||
| 2680 | |||
| 2681 | static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 2682 | { | ||
| 2683 | D3D11_RenderData *data; | ||
| 2684 | |||
| 2685 | HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); | ||
| 2686 | if (!hwnd) { | ||
| 2687 | return SDL_SetError("Couldn't get window handle"); | ||
| 2688 | } | ||
| 2689 | |||
| 2690 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 2691 | |||
| 2692 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB && | ||
| 2693 | renderer->output_colorspace != SDL_COLORSPACE_SRGB_LINEAR | ||
| 2694 | /*&& renderer->output_colorspace != SDL_COLORSPACE_HDR10*/) { | ||
| 2695 | return SDL_SetError("Unsupported output colorspace"); | ||
| 2696 | } | ||
| 2697 | |||
| 2698 | data = (D3D11_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 2699 | if (!data) { | ||
| 2700 | return false; | ||
| 2701 | } | ||
| 2702 | |||
| 2703 | data->identity = MatrixIdentity(); | ||
| 2704 | |||
| 2705 | renderer->WindowEvent = D3D11_WindowEvent; | ||
| 2706 | renderer->SupportsBlendMode = D3D11_SupportsBlendMode; | ||
| 2707 | renderer->CreateTexture = D3D11_CreateTexture; | ||
| 2708 | renderer->UpdateTexture = D3D11_UpdateTexture; | ||
| 2709 | #ifdef SDL_HAVE_YUV | ||
| 2710 | renderer->UpdateTextureYUV = D3D11_UpdateTextureYUV; | ||
| 2711 | renderer->UpdateTextureNV = D3D11_UpdateTextureNV; | ||
| 2712 | #endif | ||
| 2713 | renderer->LockTexture = D3D11_LockTexture; | ||
| 2714 | renderer->UnlockTexture = D3D11_UnlockTexture; | ||
| 2715 | renderer->SetTextureScaleMode = D3D11_SetTextureScaleMode; | ||
| 2716 | renderer->SetRenderTarget = D3D11_SetRenderTarget; | ||
| 2717 | renderer->QueueSetViewport = D3D11_QueueNoOp; | ||
| 2718 | renderer->QueueSetDrawColor = D3D11_QueueNoOp; | ||
| 2719 | renderer->QueueDrawPoints = D3D11_QueueDrawPoints; | ||
| 2720 | renderer->QueueDrawLines = D3D11_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 2721 | renderer->QueueGeometry = D3D11_QueueGeometry; | ||
| 2722 | renderer->InvalidateCachedState = D3D11_InvalidateCachedState; | ||
| 2723 | renderer->RunCommandQueue = D3D11_RunCommandQueue; | ||
| 2724 | renderer->RenderReadPixels = D3D11_RenderReadPixels; | ||
| 2725 | renderer->RenderPresent = D3D11_RenderPresent; | ||
| 2726 | renderer->DestroyTexture = D3D11_DestroyTexture; | ||
| 2727 | renderer->DestroyRenderer = D3D11_DestroyRenderer; | ||
| 2728 | renderer->SetVSync = D3D11_SetVSync; | ||
| 2729 | renderer->internal = data; | ||
| 2730 | D3D11_InvalidateCachedState(renderer); | ||
| 2731 | |||
| 2732 | renderer->name = D3D11_RenderDriver.name; | ||
| 2733 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 2734 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 2735 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888); | ||
| 2736 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010); | ||
| 2737 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT); | ||
| 2738 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 2739 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 2740 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 2741 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 2742 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); | ||
| 2743 | |||
| 2744 | data->syncInterval = 0; | ||
| 2745 | data->presentFlags = DXGI_PRESENT_DO_NOT_WAIT; | ||
| 2746 | |||
| 2747 | /* HACK: make sure the SDL_Renderer references the SDL_Window data now, in | ||
| 2748 | * order to give init functions access to the underlying window handle: | ||
| 2749 | */ | ||
| 2750 | renderer->window = window; | ||
| 2751 | |||
| 2752 | // Initialize Direct3D resources | ||
| 2753 | if (FAILED(D3D11_CreateDeviceResources(renderer))) { | ||
| 2754 | return false; | ||
| 2755 | } | ||
| 2756 | if (FAILED(D3D11_CreateWindowSizeDependentResources(renderer))) { | ||
| 2757 | return false; | ||
| 2758 | } | ||
| 2759 | |||
| 2760 | return true; | ||
| 2761 | } | ||
| 2762 | |||
| 2763 | SDL_RenderDriver D3D11_RenderDriver = { | ||
| 2764 | D3D11_CreateRenderer, "direct3d11" | ||
| 2765 | }; | ||
| 2766 | |||
| 2767 | #endif // SDL_VIDEO_RENDER_D3D11 | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/SDL_shaders_d3d11.c b/SDL-3.2.8/src/render/direct3d11/SDL_shaders_d3d11.c new file mode 100644 index 0000000..18965e2 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/SDL_shaders_d3d11.c | |||
| @@ -0,0 +1,116 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_D3D11 | ||
| 24 | |||
| 25 | #define COBJMACROS | ||
| 26 | #include "../../core/windows/SDL_windows.h" | ||
| 27 | #include <d3d11_1.h> | ||
| 28 | |||
| 29 | #include "SDL_shaders_d3d11.h" | ||
| 30 | |||
| 31 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 32 | |||
| 33 | #if SDL_WINAPI_FAMILY_PHONE | ||
| 34 | #error Need to build shaders with level_9_3 | ||
| 35 | #endif | ||
| 36 | |||
| 37 | // The shaders here were compiled with compile_shaders.bat | ||
| 38 | |||
| 39 | #define g_main D3D11_PixelShader_Colors | ||
| 40 | #include "D3D11_PixelShader_Colors.h" | ||
| 41 | #undef g_main | ||
| 42 | |||
| 43 | #define g_main D3D11_PixelShader_Textures | ||
| 44 | #include "D3D11_PixelShader_Textures.h" | ||
| 45 | #undef g_main | ||
| 46 | |||
| 47 | #define g_main D3D11_PixelShader_Advanced | ||
| 48 | #include "D3D11_PixelShader_Advanced.h" | ||
| 49 | #undef g_main | ||
| 50 | |||
| 51 | #define g_main D3D11_VertexShader | ||
| 52 | #include "D3D11_VertexShader.h" | ||
| 53 | #undef g_main | ||
| 54 | |||
| 55 | |||
| 56 | static struct | ||
| 57 | { | ||
| 58 | const void *shader_data; | ||
| 59 | SIZE_T shader_size; | ||
| 60 | } D3D11_shaders[] = { | ||
| 61 | { NULL, 0 }, | ||
| 62 | { D3D11_PixelShader_Colors, sizeof(D3D11_PixelShader_Colors) }, | ||
| 63 | { D3D11_PixelShader_Textures, sizeof(D3D11_PixelShader_Textures) }, | ||
| 64 | { D3D11_PixelShader_Advanced, sizeof(D3D11_PixelShader_Advanced) }, | ||
| 65 | }; | ||
| 66 | SDL_COMPILE_TIME_ASSERT(D3D11_shaders, SDL_arraysize(D3D11_shaders) == NUM_SHADERS); | ||
| 67 | |||
| 68 | bool D3D11_CreateVertexShader(ID3D11Device1 *d3dDevice, ID3D11VertexShader **vertexShader, ID3D11InputLayout **inputLayout) | ||
| 69 | { | ||
| 70 | // Declare how the input layout for SDL's vertex shader will be setup: | ||
| 71 | const D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { | ||
| 72 | { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, | ||
| 73 | { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0 }, | ||
| 74 | { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0 }, | ||
| 75 | }; | ||
| 76 | HRESULT result; | ||
| 77 | |||
| 78 | // Load in SDL's one and only vertex shader: | ||
| 79 | result = ID3D11Device_CreateVertexShader(d3dDevice, | ||
| 80 | D3D11_VertexShader, | ||
| 81 | sizeof(D3D11_VertexShader), | ||
| 82 | NULL, | ||
| 83 | vertexShader); | ||
| 84 | if (FAILED(result)) { | ||
| 85 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateVertexShader"), result); | ||
| 86 | } | ||
| 87 | |||
| 88 | // Create an input layout for SDL's vertex shader: | ||
| 89 | result = ID3D11Device_CreateInputLayout(d3dDevice, | ||
| 90 | vertexDesc, | ||
| 91 | ARRAYSIZE(vertexDesc), | ||
| 92 | D3D11_VertexShader, | ||
| 93 | sizeof(D3D11_VertexShader), | ||
| 94 | inputLayout); | ||
| 95 | if (FAILED(result)) { | ||
| 96 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateInputLayout"), result); | ||
| 97 | } | ||
| 98 | return true; | ||
| 99 | } | ||
| 100 | |||
| 101 | bool D3D11_CreatePixelShader(ID3D11Device1 *d3dDevice, D3D11_Shader shader, ID3D11PixelShader **pixelShader) | ||
| 102 | { | ||
| 103 | HRESULT result; | ||
| 104 | |||
| 105 | result = ID3D11Device_CreatePixelShader(d3dDevice, | ||
| 106 | D3D11_shaders[shader].shader_data, | ||
| 107 | D3D11_shaders[shader].shader_size, | ||
| 108 | NULL, | ||
| 109 | pixelShader); | ||
| 110 | if (FAILED(result)) { | ||
| 111 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreatePixelShader"), result); | ||
| 112 | } | ||
| 113 | return true; | ||
| 114 | } | ||
| 115 | |||
| 116 | #endif // SDL_VIDEO_RENDER_D3D11 | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/SDL_shaders_d3d11.h b/SDL-3.2.8/src/render/direct3d11/SDL_shaders_d3d11.h new file mode 100644 index 0000000..2279fb0 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/SDL_shaders_d3d11.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | // D3D11 shader implementation | ||
| 24 | |||
| 25 | typedef enum | ||
| 26 | { | ||
| 27 | SHADER_NONE, | ||
| 28 | SHADER_SOLID, | ||
| 29 | SHADER_RGB, | ||
| 30 | SHADER_ADVANCED, | ||
| 31 | NUM_SHADERS | ||
| 32 | } D3D11_Shader; | ||
| 33 | |||
| 34 | extern bool D3D11_CreateVertexShader(ID3D11Device1 *d3dDevice, ID3D11VertexShader **vertexShader, ID3D11InputLayout **inputLayout); | ||
| 35 | extern bool D3D11_CreatePixelShader(ID3D11Device1 *d3dDevice, D3D11_Shader shader, ID3D11PixelShader **pixelShader); | ||
diff --git a/SDL-3.2.8/src/render/direct3d11/compile_shaders.bat b/SDL-3.2.8/src/render/direct3d11/compile_shaders.bat new file mode 100644 index 0000000..51d2a34 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d11/compile_shaders.bat | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | fxc /T ps_4_0_level_9_1 /Fh D3D11_PixelShader_Colors.h D3D11_PixelShader_Colors.hlsl | ||
| 2 | fxc /T ps_4_0_level_9_1 /Fh D3D11_PixelShader_Textures.h D3D11_PixelShader_Textures.hlsl | ||
| 3 | fxc /T ps_5_0 /Fh D3D11_PixelShader_Advanced.h D3D11_PixelShader_Advanced.hlsl | ||
| 4 | fxc /T vs_4_0_level_9_1 /Fh D3D11_VertexShader.h D3D11_VertexShader.hlsl | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h new file mode 100644 index 0000000..b8f40fe --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h | |||
| @@ -0,0 +1,1389 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; SV_Position 0 xyzw 0 POS float | ||
| 8 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 9 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; SV_Target 0 xyzw 0 TARGET float xyzw | ||
| 17 | ; | ||
| 18 | ; shader hash: f6874446eaee41c102142c02d5bb3ab7 | ||
| 19 | ; | ||
| 20 | ; Pipeline Runtime Information: | ||
| 21 | ; | ||
| 22 | ; Pixel Shader | ||
| 23 | ; DepthOutput=0 | ||
| 24 | ; SampleFrequency=0 | ||
| 25 | ; | ||
| 26 | ; | ||
| 27 | ; Input signature: | ||
| 28 | ; | ||
| 29 | ; Name Index InterpMode DynIdx | ||
| 30 | ; -------------------- ----- ---------------------- ------ | ||
| 31 | ; SV_Position 0 noperspective | ||
| 32 | ; TEXCOORD 0 linear | ||
| 33 | ; COLOR 0 linear | ||
| 34 | ; | ||
| 35 | ; Output signature: | ||
| 36 | ; | ||
| 37 | ; Name Index InterpMode DynIdx | ||
| 38 | ; -------------------- ----- ---------------------- ------ | ||
| 39 | ; SV_Target 0 | ||
| 40 | ; | ||
| 41 | ; Buffer Definitions: | ||
| 42 | ; | ||
| 43 | ; cbuffer Constants | ||
| 44 | ; { | ||
| 45 | ; | ||
| 46 | ; struct Constants | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; float scRGB_output; ; Offset: 0 | ||
| 50 | ; float texture_type; ; Offset: 4 | ||
| 51 | ; float input_type; ; Offset: 8 | ||
| 52 | ; float color_scale; ; Offset: 12 | ||
| 53 | ; float tonemap_method; ; Offset: 16 | ||
| 54 | ; float tonemap_factor1; ; Offset: 20 | ||
| 55 | ; float tonemap_factor2; ; Offset: 24 | ||
| 56 | ; float sdr_white_point; ; Offset: 28 | ||
| 57 | ; float4 Yoffset; ; Offset: 32 | ||
| 58 | ; float4 Rcoeff; ; Offset: 48 | ||
| 59 | ; float4 Gcoeff; ; Offset: 64 | ||
| 60 | ; float4 Bcoeff; ; Offset: 80 | ||
| 61 | ; | ||
| 62 | ; } Constants; ; Offset: 0 Size: 96 | ||
| 63 | ; | ||
| 64 | ; } | ||
| 65 | ; | ||
| 66 | ; | ||
| 67 | ; Resource Bindings: | ||
| 68 | ; | ||
| 69 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 70 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 71 | ; Constants cbuffer NA NA CB0 cb1 1 | ||
| 72 | ; sampler0 sampler NA NA S0 s0 1 | ||
| 73 | ; texture0 texture f32 2d T0 t0 1 | ||
| 74 | ; texture1 texture f32 2d T1 t1 1 | ||
| 75 | ; texture2 texture f32 2d T2 t2 1 | ||
| 76 | ; | ||
| 77 | ; | ||
| 78 | ; ViewId state: | ||
| 79 | ; | ||
| 80 | ; Number of inputs: 12, outputs: 4 | ||
| 81 | ; Outputs dependent on ViewId: { } | ||
| 82 | ; Inputs contributing to computation of Outputs: | ||
| 83 | ; output 0 depends on inputs: { 4, 5, 8 } | ||
| 84 | ; output 1 depends on inputs: { 4, 5, 9 } | ||
| 85 | ; output 2 depends on inputs: { 4, 5, 10 } | ||
| 86 | ; output 3 depends on inputs: { 4, 5, 11 } | ||
| 87 | ; | ||
| 88 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 89 | target triple = "dxil-ms-dx" | ||
| 90 | |||
| 91 | %dx.types.Handle = type { i8* } | ||
| 92 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 93 | %dx.types.ResRet.f32 = type { float, float, float, float, i32 } | ||
| 94 | %"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" } | ||
| 95 | %"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 } | ||
| 96 | %Constants = type { float, float, float, float, float, float, float, float, <4 x float>, <4 x float>, <4 x float>, <4 x float> } | ||
| 97 | %struct.SamplerState = type { i32 } | ||
| 98 | |||
| 99 | define void @main() { | ||
| 100 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 2, i32 2, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 101 | %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 1, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 102 | %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 103 | %4 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 104 | %5 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 105 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 106 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 107 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 108 | %9 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 109 | %10 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 110 | %11 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 111 | %12 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 112 | %13 = extractvalue %dx.types.CBufRet.f32 %12, 1 | ||
| 113 | %14 = fcmp fast oeq float %13, 0.000000e+00 | ||
| 114 | br i1 %14, label %114, label %15 | ||
| 115 | |||
| 116 | ; <label>:15 ; preds = %0 | ||
| 117 | %16 = fcmp fast oeq float %13, 1.000000e+00 | ||
| 118 | br i1 %16, label %17, label %23 | ||
| 119 | |||
| 120 | ; <label>:17 ; preds = %15 | ||
| 121 | %18 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 122 | %19 = extractvalue %dx.types.ResRet.f32 %18, 0 | ||
| 123 | %20 = extractvalue %dx.types.ResRet.f32 %18, 1 | ||
| 124 | %21 = extractvalue %dx.types.ResRet.f32 %18, 2 | ||
| 125 | %22 = extractvalue %dx.types.ResRet.f32 %18, 3 | ||
| 126 | br label %114 | ||
| 127 | |||
| 128 | ; <label>:23 ; preds = %15 | ||
| 129 | %24 = fcmp fast oeq float %13, 2.000000e+00 | ||
| 130 | br i1 %24, label %25, label %53 | ||
| 131 | |||
| 132 | ; <label>:25 ; preds = %23 | ||
| 133 | %26 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 134 | %27 = extractvalue %dx.types.ResRet.f32 %26, 0 | ||
| 135 | %28 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %2, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 136 | %29 = extractvalue %dx.types.ResRet.f32 %28, 0 | ||
| 137 | %30 = extractvalue %dx.types.ResRet.f32 %28, 1 | ||
| 138 | %31 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 2) ; CBufferLoadLegacy(handle,regIndex) | ||
| 139 | %32 = extractvalue %dx.types.CBufRet.f32 %31, 0 | ||
| 140 | %33 = extractvalue %dx.types.CBufRet.f32 %31, 1 | ||
| 141 | %34 = extractvalue %dx.types.CBufRet.f32 %31, 2 | ||
| 142 | %35 = fadd fast float %32, %27 | ||
| 143 | %36 = fadd fast float %33, %29 | ||
| 144 | %37 = fadd fast float %34, %30 | ||
| 145 | %38 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 146 | %39 = extractvalue %dx.types.CBufRet.f32 %38, 0 | ||
| 147 | %40 = extractvalue %dx.types.CBufRet.f32 %38, 1 | ||
| 148 | %41 = extractvalue %dx.types.CBufRet.f32 %38, 2 | ||
| 149 | %42 = call float @dx.op.dot3.f32(i32 55, float %35, float %36, float %37, float %39, float %40, float %41) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 150 | %43 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 151 | %44 = extractvalue %dx.types.CBufRet.f32 %43, 0 | ||
| 152 | %45 = extractvalue %dx.types.CBufRet.f32 %43, 1 | ||
| 153 | %46 = extractvalue %dx.types.CBufRet.f32 %43, 2 | ||
| 154 | %47 = call float @dx.op.dot3.f32(i32 55, float %35, float %36, float %37, float %44, float %45, float %46) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 155 | %48 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 156 | %49 = extractvalue %dx.types.CBufRet.f32 %48, 0 | ||
| 157 | %50 = extractvalue %dx.types.CBufRet.f32 %48, 1 | ||
| 158 | %51 = extractvalue %dx.types.CBufRet.f32 %48, 2 | ||
| 159 | %52 = call float @dx.op.dot3.f32(i32 55, float %35, float %36, float %37, float %49, float %50, float %51) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 160 | br label %114 | ||
| 161 | |||
| 162 | ; <label>:53 ; preds = %23 | ||
| 163 | %54 = fcmp fast oeq float %13, 3.000000e+00 | ||
| 164 | br i1 %54, label %55, label %83 | ||
| 165 | |||
| 166 | ; <label>:55 ; preds = %53 | ||
| 167 | %56 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 168 | %57 = extractvalue %dx.types.ResRet.f32 %56, 0 | ||
| 169 | %58 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %2, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 170 | %59 = extractvalue %dx.types.ResRet.f32 %58, 0 | ||
| 171 | %60 = extractvalue %dx.types.ResRet.f32 %58, 1 | ||
| 172 | %61 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 2) ; CBufferLoadLegacy(handle,regIndex) | ||
| 173 | %62 = extractvalue %dx.types.CBufRet.f32 %61, 0 | ||
| 174 | %63 = extractvalue %dx.types.CBufRet.f32 %61, 1 | ||
| 175 | %64 = extractvalue %dx.types.CBufRet.f32 %61, 2 | ||
| 176 | %65 = fadd fast float %62, %57 | ||
| 177 | %66 = fadd fast float %63, %60 | ||
| 178 | %67 = fadd fast float %64, %59 | ||
| 179 | %68 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 180 | %69 = extractvalue %dx.types.CBufRet.f32 %68, 0 | ||
| 181 | %70 = extractvalue %dx.types.CBufRet.f32 %68, 1 | ||
| 182 | %71 = extractvalue %dx.types.CBufRet.f32 %68, 2 | ||
| 183 | %72 = call float @dx.op.dot3.f32(i32 55, float %65, float %66, float %67, float %69, float %70, float %71) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 184 | %73 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 185 | %74 = extractvalue %dx.types.CBufRet.f32 %73, 0 | ||
| 186 | %75 = extractvalue %dx.types.CBufRet.f32 %73, 1 | ||
| 187 | %76 = extractvalue %dx.types.CBufRet.f32 %73, 2 | ||
| 188 | %77 = call float @dx.op.dot3.f32(i32 55, float %65, float %66, float %67, float %74, float %75, float %76) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 189 | %78 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 190 | %79 = extractvalue %dx.types.CBufRet.f32 %78, 0 | ||
| 191 | %80 = extractvalue %dx.types.CBufRet.f32 %78, 1 | ||
| 192 | %81 = extractvalue %dx.types.CBufRet.f32 %78, 2 | ||
| 193 | %82 = call float @dx.op.dot3.f32(i32 55, float %65, float %66, float %67, float %79, float %80, float %81) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 194 | br label %114 | ||
| 195 | |||
| 196 | ; <label>:83 ; preds = %53 | ||
| 197 | %84 = fcmp fast oeq float %13, 4.000000e+00 | ||
| 198 | br i1 %84, label %85, label %114 | ||
| 199 | |||
| 200 | ; <label>:85 ; preds = %83 | ||
| 201 | %86 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 202 | %87 = extractvalue %dx.types.ResRet.f32 %86, 0 | ||
| 203 | %88 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %2, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 204 | %89 = extractvalue %dx.types.ResRet.f32 %88, 0 | ||
| 205 | %90 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %1, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 206 | %91 = extractvalue %dx.types.ResRet.f32 %90, 0 | ||
| 207 | %92 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 2) ; CBufferLoadLegacy(handle,regIndex) | ||
| 208 | %93 = extractvalue %dx.types.CBufRet.f32 %92, 0 | ||
| 209 | %94 = extractvalue %dx.types.CBufRet.f32 %92, 1 | ||
| 210 | %95 = extractvalue %dx.types.CBufRet.f32 %92, 2 | ||
| 211 | %96 = fadd fast float %93, %87 | ||
| 212 | %97 = fadd fast float %94, %89 | ||
| 213 | %98 = fadd fast float %95, %91 | ||
| 214 | %99 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 215 | %100 = extractvalue %dx.types.CBufRet.f32 %99, 0 | ||
| 216 | %101 = extractvalue %dx.types.CBufRet.f32 %99, 1 | ||
| 217 | %102 = extractvalue %dx.types.CBufRet.f32 %99, 2 | ||
| 218 | %103 = call float @dx.op.dot3.f32(i32 55, float %96, float %97, float %98, float %100, float %101, float %102) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 219 | %104 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 220 | %105 = extractvalue %dx.types.CBufRet.f32 %104, 0 | ||
| 221 | %106 = extractvalue %dx.types.CBufRet.f32 %104, 1 | ||
| 222 | %107 = extractvalue %dx.types.CBufRet.f32 %104, 2 | ||
| 223 | %108 = call float @dx.op.dot3.f32(i32 55, float %96, float %97, float %98, float %105, float %106, float %107) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 224 | %109 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 225 | %110 = extractvalue %dx.types.CBufRet.f32 %109, 0 | ||
| 226 | %111 = extractvalue %dx.types.CBufRet.f32 %109, 1 | ||
| 227 | %112 = extractvalue %dx.types.CBufRet.f32 %109, 2 | ||
| 228 | %113 = call float @dx.op.dot3.f32(i32 55, float %96, float %97, float %98, float %110, float %111, float %112) ; Dot3(ax,ay,az,bx,by,bz) | ||
| 229 | br label %114 | ||
| 230 | |||
| 231 | ; <label>:114 ; preds = %85, %83, %55, %25, %17, %0 | ||
| 232 | %115 = phi float [ %19, %17 ], [ %42, %25 ], [ %72, %55 ], [ %103, %85 ], [ 1.000000e+00, %0 ], [ 1.000000e+00, %83 ] | ||
| 233 | %116 = phi float [ %20, %17 ], [ %47, %25 ], [ %77, %55 ], [ %108, %85 ], [ 1.000000e+00, %0 ], [ 0.000000e+00, %83 ] | ||
| 234 | %117 = phi float [ %21, %17 ], [ %52, %25 ], [ %82, %55 ], [ %113, %85 ], [ 1.000000e+00, %0 ], [ 0.000000e+00, %83 ] | ||
| 235 | %118 = phi float [ %22, %17 ], [ 1.000000e+00, %25 ], [ 1.000000e+00, %55 ], [ 1.000000e+00, %85 ], [ 1.000000e+00, %0 ], [ 1.000000e+00, %83 ] | ||
| 236 | %119 = extractvalue %dx.types.CBufRet.f32 %12, 2 | ||
| 237 | %120 = fcmp fast oeq float %119, 3.000000e+00 | ||
| 238 | br i1 %120, label %121, label %169 | ||
| 239 | |||
| 240 | ; <label>:121 ; preds = %114 | ||
| 241 | %122 = call float @dx.op.unary.f32(i32 6, float %115) ; FAbs(value) | ||
| 242 | %123 = call float @dx.op.unary.f32(i32 6, float %116) ; FAbs(value) | ||
| 243 | %124 = call float @dx.op.unary.f32(i32 6, float %117) ; FAbs(value) | ||
| 244 | %125 = call float @dx.op.unary.f32(i32 23, float %122) ; Log(value) | ||
| 245 | %126 = call float @dx.op.unary.f32(i32 23, float %123) ; Log(value) | ||
| 246 | %127 = call float @dx.op.unary.f32(i32 23, float %124) ; Log(value) | ||
| 247 | %128 = fmul fast float %125, 0x3F89F9B580000000 | ||
| 248 | %129 = fmul fast float %126, 0x3F89F9B580000000 | ||
| 249 | %130 = fmul fast float %127, 0x3F89F9B580000000 | ||
| 250 | %131 = call float @dx.op.unary.f32(i32 21, float %128) ; Exp(value) | ||
| 251 | %132 = call float @dx.op.unary.f32(i32 21, float %129) ; Exp(value) | ||
| 252 | %133 = call float @dx.op.unary.f32(i32 21, float %130) ; Exp(value) | ||
| 253 | %134 = fadd fast float %131, -8.359375e-01 | ||
| 254 | %135 = fadd fast float %132, -8.359375e-01 | ||
| 255 | %136 = fadd fast float %133, -8.359375e-01 | ||
| 256 | %137 = call float @dx.op.binary.f32(i32 35, float %134, float 0.000000e+00) ; FMax(a,b) | ||
| 257 | %138 = call float @dx.op.binary.f32(i32 35, float %135, float 0.000000e+00) ; FMax(a,b) | ||
| 258 | %139 = call float @dx.op.binary.f32(i32 35, float %136, float 0.000000e+00) ; FMax(a,b) | ||
| 259 | %140 = fmul fast float %131, 1.868750e+01 | ||
| 260 | %141 = fmul fast float %132, 1.868750e+01 | ||
| 261 | %142 = fmul fast float %133, 1.868750e+01 | ||
| 262 | %143 = fsub fast float 0x4032DA0000000000, %140 | ||
| 263 | %144 = fsub fast float 0x4032DA0000000000, %141 | ||
| 264 | %145 = fsub fast float 0x4032DA0000000000, %142 | ||
| 265 | %146 = fdiv fast float %137, %143 | ||
| 266 | %147 = fdiv fast float %138, %144 | ||
| 267 | %148 = fdiv fast float %139, %145 | ||
| 268 | %149 = call float @dx.op.unary.f32(i32 6, float %146) ; FAbs(value) | ||
| 269 | %150 = call float @dx.op.unary.f32(i32 6, float %147) ; FAbs(value) | ||
| 270 | %151 = call float @dx.op.unary.f32(i32 6, float %148) ; FAbs(value) | ||
| 271 | %152 = call float @dx.op.unary.f32(i32 23, float %149) ; Log(value) | ||
| 272 | %153 = call float @dx.op.unary.f32(i32 23, float %150) ; Log(value) | ||
| 273 | %154 = call float @dx.op.unary.f32(i32 23, float %151) ; Log(value) | ||
| 274 | %155 = fmul fast float %152, 0x40191C0D60000000 | ||
| 275 | %156 = fmul fast float %153, 0x40191C0D60000000 | ||
| 276 | %157 = fmul fast float %154, 0x40191C0D60000000 | ||
| 277 | %158 = call float @dx.op.unary.f32(i32 21, float %155) ; Exp(value) | ||
| 278 | %159 = call float @dx.op.unary.f32(i32 21, float %156) ; Exp(value) | ||
| 279 | %160 = call float @dx.op.unary.f32(i32 21, float %157) ; Exp(value) | ||
| 280 | %161 = fmul fast float %158, 1.000000e+04 | ||
| 281 | %162 = fmul fast float %159, 1.000000e+04 | ||
| 282 | %163 = fmul fast float %160, 1.000000e+04 | ||
| 283 | %164 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 284 | %165 = extractvalue %dx.types.CBufRet.f32 %164, 3 | ||
| 285 | %166 = fdiv fast float %161, %165 | ||
| 286 | %167 = fdiv fast float %162, %165 | ||
| 287 | %168 = fdiv fast float %163, %165 | ||
| 288 | br label %169 | ||
| 289 | |||
| 290 | ; <label>:169 ; preds = %121, %114 | ||
| 291 | %170 = phi float [ %166, %121 ], [ %115, %114 ] | ||
| 292 | %171 = phi float [ %167, %121 ], [ %116, %114 ] | ||
| 293 | %172 = phi float [ %168, %121 ], [ %117, %114 ] | ||
| 294 | %173 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 295 | %174 = extractvalue %dx.types.CBufRet.f32 %173, 0 | ||
| 296 | %175 = fcmp fast une float %174, 0.000000e+00 | ||
| 297 | br i1 %175, label %176, label %229 | ||
| 298 | |||
| 299 | ; <label>:176 ; preds = %169 | ||
| 300 | %177 = fcmp fast oeq float %174, 1.000000e+00 | ||
| 301 | br i1 %177, label %178, label %183 | ||
| 302 | |||
| 303 | ; <label>:178 ; preds = %176 | ||
| 304 | %179 = extractvalue %dx.types.CBufRet.f32 %173, 1 | ||
| 305 | %180 = fmul fast float %179, %170 | ||
| 306 | %181 = fmul fast float %179, %171 | ||
| 307 | %182 = fmul fast float %179, %172 | ||
| 308 | br label %229 | ||
| 309 | |||
| 310 | ; <label>:183 ; preds = %176 | ||
| 311 | %184 = fcmp fast oeq float %174, 2.000000e+00 | ||
| 312 | br i1 %184, label %185, label %229 | ||
| 313 | |||
| 314 | ; <label>:185 ; preds = %183 | ||
| 315 | %186 = fcmp fast oeq float %119, 2.000000e+00 | ||
| 316 | br i1 %186, label %187, label %197 | ||
| 317 | |||
| 318 | ; <label>:187 ; preds = %185 | ||
| 319 | %188 = fmul fast float %170, 0x3FE413B180000000 | ||
| 320 | %189 = call float @dx.op.tertiary.f32(i32 46, float 0x3FD512F900000000, float %171, float %188) ; FMad(a,b,c) | ||
| 321 | %190 = call float @dx.op.tertiary.f32(i32 46, float 0x3FA62D1F20000000, float %172, float %189) ; FMad(a,b,c) | ||
| 322 | %191 = fmul fast float %170, 0x3FB1B05740000000 | ||
| 323 | %192 = call float @dx.op.tertiary.f32(i32 46, float 0x3FED6CE140000000, float %171, float %191) ; FMad(a,b,c) | ||
| 324 | %193 = call float @dx.op.tertiary.f32(i32 46, float 0x3F8744F5E0000000, float %172, float %192) ; FMad(a,b,c) | ||
| 325 | %194 = fmul fast float %170, 0x3F90C8CD60000000 | ||
| 326 | %195 = call float @dx.op.tertiary.f32(i32 46, float 0x3FB6880520000000, float %171, float %194) ; FMad(a,b,c) | ||
| 327 | %196 = call float @dx.op.tertiary.f32(i32 46, float 0x3FECA8B6E0000000, float %172, float %195) ; FMad(a,b,c) | ||
| 328 | br label %197 | ||
| 329 | |||
| 330 | ; <label>:197 ; preds = %187, %185 | ||
| 331 | %198 = phi float [ %190, %187 ], [ %170, %185 ] | ||
| 332 | %199 = phi float [ %193, %187 ], [ %171, %185 ] | ||
| 333 | %200 = phi float [ %196, %187 ], [ %172, %185 ] | ||
| 334 | %201 = call float @dx.op.binary.f32(i32 35, float %199, float %200) ; FMax(a,b) | ||
| 335 | %202 = call float @dx.op.binary.f32(i32 35, float %198, float %201) ; FMax(a,b) | ||
| 336 | %203 = fcmp fast ogt float %202, 0.000000e+00 | ||
| 337 | br i1 %203, label %204, label %215 | ||
| 338 | |||
| 339 | ; <label>:204 ; preds = %197 | ||
| 340 | %205 = extractvalue %dx.types.CBufRet.f32 %173, 1 | ||
| 341 | %206 = fmul fast float %205, %202 | ||
| 342 | %207 = fadd fast float %206, 1.000000e+00 | ||
| 343 | %208 = extractvalue %dx.types.CBufRet.f32 %173, 2 | ||
| 344 | %209 = fmul fast float %208, %202 | ||
| 345 | %210 = fadd fast float %209, 1.000000e+00 | ||
| 346 | %211 = fdiv fast float %207, %210 | ||
| 347 | %212 = fmul fast float %211, %198 | ||
| 348 | %213 = fmul fast float %211, %199 | ||
| 349 | %214 = fmul fast float %211, %200 | ||
| 350 | br label %215 | ||
| 351 | |||
| 352 | ; <label>:215 ; preds = %204, %197 | ||
| 353 | %216 = phi float [ %212, %204 ], [ %198, %197 ] | ||
| 354 | %217 = phi float [ %213, %204 ], [ %199, %197 ] | ||
| 355 | %218 = phi float [ %214, %204 ], [ %200, %197 ] | ||
| 356 | br i1 %186, label %219, label %229 | ||
| 357 | |||
| 358 | ; <label>:219 ; preds = %215 | ||
| 359 | %220 = fmul fast float %216, 0x3FFA916440000000 | ||
| 360 | %221 = call float @dx.op.tertiary.f32(i32 46, float 0xBFE2CE1400000000, float %217, float %220) ; FMad(a,b,c) | ||
| 361 | %222 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB2A5A460000000, float %218, float %221) ; FMad(a,b,c) | ||
| 362 | %223 = fmul fast float %216, 0xBFBFE24FE0000000 | ||
| 363 | %224 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF2205680000000, float %217, float %223) ; FMad(a,b,c) | ||
| 364 | %225 = call float @dx.op.tertiary.f32(i32 46, float 0xBF8118C1A0000000, float %218, float %224) ; FMad(a,b,c) | ||
| 365 | %226 = fmul fast float %216, 0xBF9296F660000000 | ||
| 366 | %227 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB9C0B9A0000000, float %217, float %226) ; FMad(a,b,c) | ||
| 367 | %228 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF1E66780000000, float %218, float %227) ; FMad(a,b,c) | ||
| 368 | br label %229 | ||
| 369 | |||
| 370 | ; <label>:229 ; preds = %219, %215, %183, %178, %169 | ||
| 371 | %230 = phi float [ %170, %169 ], [ %180, %178 ], [ %222, %219 ], [ %216, %215 ], [ %170, %183 ] | ||
| 372 | %231 = phi float [ %171, %169 ], [ %181, %178 ], [ %225, %219 ], [ %217, %215 ], [ %171, %183 ] | ||
| 373 | %232 = phi float [ %172, %169 ], [ %182, %178 ], [ %228, %219 ], [ %218, %215 ], [ %172, %183 ] | ||
| 374 | %233 = fcmp fast oeq float %119, 1.000000e+00 | ||
| 375 | br i1 %233, label %234, label %280 | ||
| 376 | |||
| 377 | ; <label>:234 ; preds = %229 | ||
| 378 | %235 = extractvalue %dx.types.CBufRet.f32 %12, 0 | ||
| 379 | %236 = fcmp fast une float %235, 0.000000e+00 | ||
| 380 | br i1 %236, label %237, label %272 | ||
| 381 | |||
| 382 | ; <label>:237 ; preds = %234 | ||
| 383 | %238 = fcmp fast ugt float %230, 0x3FA4B5DCC0000000 | ||
| 384 | br i1 %238, label %241, label %239 | ||
| 385 | |||
| 386 | ; <label>:239 ; preds = %237 | ||
| 387 | %240 = fmul fast float %230, 0x3FB3D07220000000 | ||
| 388 | br label %248 | ||
| 389 | |||
| 390 | ; <label>:241 ; preds = %237 | ||
| 391 | %242 = fadd fast float %230, 0x3FAC28F5C0000000 | ||
| 392 | %243 = call float @dx.op.unary.f32(i32 6, float %242) ; FAbs(value) | ||
| 393 | %244 = fmul fast float %243, 0x3FEE54EDE0000000 | ||
| 394 | %245 = call float @dx.op.unary.f32(i32 23, float %244) ; Log(value) | ||
| 395 | %246 = fmul fast float %245, 0x4003333340000000 | ||
| 396 | %247 = call float @dx.op.unary.f32(i32 21, float %246) ; Exp(value) | ||
| 397 | br label %248 | ||
| 398 | |||
| 399 | ; <label>:248 ; preds = %241, %239 | ||
| 400 | %249 = phi float [ %240, %239 ], [ %247, %241 ] | ||
| 401 | %250 = fcmp fast ugt float %231, 0x3FA4B5DCC0000000 | ||
| 402 | br i1 %250, label %253, label %251 | ||
| 403 | |||
| 404 | ; <label>:251 ; preds = %248 | ||
| 405 | %252 = fmul fast float %231, 0x3FB3D07220000000 | ||
| 406 | br label %260 | ||
| 407 | |||
| 408 | ; <label>:253 ; preds = %248 | ||
| 409 | %254 = fadd fast float %231, 0x3FAC28F5C0000000 | ||
| 410 | %255 = call float @dx.op.unary.f32(i32 6, float %254) ; FAbs(value) | ||
| 411 | %256 = fmul fast float %255, 0x3FEE54EDE0000000 | ||
| 412 | %257 = call float @dx.op.unary.f32(i32 23, float %256) ; Log(value) | ||
| 413 | %258 = fmul fast float %257, 0x4003333340000000 | ||
| 414 | %259 = call float @dx.op.unary.f32(i32 21, float %258) ; Exp(value) | ||
| 415 | br label %260 | ||
| 416 | |||
| 417 | ; <label>:260 ; preds = %253, %251 | ||
| 418 | %261 = phi float [ %252, %251 ], [ %259, %253 ] | ||
| 419 | %262 = fcmp fast ugt float %232, 0x3FA4B5DCC0000000 | ||
| 420 | br i1 %262, label %265, label %263 | ||
| 421 | |||
| 422 | ; <label>:263 ; preds = %260 | ||
| 423 | %264 = fmul fast float %232, 0x3FB3D07220000000 | ||
| 424 | br label %272 | ||
| 425 | |||
| 426 | ; <label>:265 ; preds = %260 | ||
| 427 | %266 = fadd fast float %232, 0x3FAC28F5C0000000 | ||
| 428 | %267 = call float @dx.op.unary.f32(i32 6, float %266) ; FAbs(value) | ||
| 429 | %268 = fmul fast float %267, 0x3FEE54EDE0000000 | ||
| 430 | %269 = call float @dx.op.unary.f32(i32 23, float %268) ; Log(value) | ||
| 431 | %270 = fmul fast float %269, 0x4003333340000000 | ||
| 432 | %271 = call float @dx.op.unary.f32(i32 21, float %270) ; Exp(value) | ||
| 433 | br label %272 | ||
| 434 | |||
| 435 | ; <label>:272 ; preds = %265, %263, %234 | ||
| 436 | %273 = phi float [ %230, %234 ], [ %249, %265 ], [ %249, %263 ] | ||
| 437 | %274 = phi float [ %231, %234 ], [ %261, %265 ], [ %261, %263 ] | ||
| 438 | %275 = phi float [ %232, %234 ], [ %271, %265 ], [ %264, %263 ] | ||
| 439 | %276 = extractvalue %dx.types.CBufRet.f32 %12, 3 | ||
| 440 | %277 = fmul fast float %276, %273 | ||
| 441 | %278 = fmul fast float %276, %274 | ||
| 442 | %279 = fmul fast float %276, %275 | ||
| 443 | br label %389 | ||
| 444 | |||
| 445 | ; <label>:280 ; preds = %229 | ||
| 446 | %281 = fcmp fast oeq float %119, 2.000000e+00 | ||
| 447 | %282 = extractvalue %dx.types.CBufRet.f32 %12, 3 | ||
| 448 | br i1 %281, label %283, label %329 | ||
| 449 | |||
| 450 | ; <label>:283 ; preds = %280 | ||
| 451 | %284 = fmul fast float %282, %230 | ||
| 452 | %285 = fmul fast float %282, %231 | ||
| 453 | %286 = fmul fast float %282, %232 | ||
| 454 | %287 = extractvalue %dx.types.CBufRet.f32 %12, 0 | ||
| 455 | %288 = fcmp fast une float %287, 0.000000e+00 | ||
| 456 | br i1 %288, label %389, label %289 | ||
| 457 | |||
| 458 | ; <label>:289 ; preds = %283 | ||
| 459 | %290 = fcmp fast ugt float %284, 0x3F69A5C380000000 | ||
| 460 | br i1 %290, label %293, label %291 | ||
| 461 | |||
| 462 | ; <label>:291 ; preds = %289 | ||
| 463 | %292 = fmul fast float %284, 0x4029D70A40000000 | ||
| 464 | br label %300 | ||
| 465 | |||
| 466 | ; <label>:293 ; preds = %289 | ||
| 467 | %294 = call float @dx.op.unary.f32(i32 6, float %284) ; FAbs(value) | ||
| 468 | %295 = call float @dx.op.unary.f32(i32 23, float %294) ; Log(value) | ||
| 469 | %296 = fmul fast float %295, 0x3FDAAAAAA0000000 | ||
| 470 | %297 = call float @dx.op.unary.f32(i32 21, float %296) ; Exp(value) | ||
| 471 | %298 = fmul fast float %297, 0x3FF0E147A0000000 | ||
| 472 | %299 = fadd fast float %298, 0xBFAC28F5C0000000 | ||
| 473 | br label %300 | ||
| 474 | |||
| 475 | ; <label>:300 ; preds = %293, %291 | ||
| 476 | %301 = phi float [ %292, %291 ], [ %299, %293 ] | ||
| 477 | %302 = fcmp fast ugt float %285, 0x3F69A5C380000000 | ||
| 478 | br i1 %302, label %305, label %303 | ||
| 479 | |||
| 480 | ; <label>:303 ; preds = %300 | ||
| 481 | %304 = fmul fast float %285, 0x4029D70A40000000 | ||
| 482 | br label %312 | ||
| 483 | |||
| 484 | ; <label>:305 ; preds = %300 | ||
| 485 | %306 = call float @dx.op.unary.f32(i32 6, float %285) ; FAbs(value) | ||
| 486 | %307 = call float @dx.op.unary.f32(i32 23, float %306) ; Log(value) | ||
| 487 | %308 = fmul fast float %307, 0x3FDAAAAAA0000000 | ||
| 488 | %309 = call float @dx.op.unary.f32(i32 21, float %308) ; Exp(value) | ||
| 489 | %310 = fmul fast float %309, 0x3FF0E147A0000000 | ||
| 490 | %311 = fadd fast float %310, 0xBFAC28F5C0000000 | ||
| 491 | br label %312 | ||
| 492 | |||
| 493 | ; <label>:312 ; preds = %305, %303 | ||
| 494 | %313 = phi float [ %304, %303 ], [ %311, %305 ] | ||
| 495 | %314 = fcmp fast ugt float %286, 0x3F69A5C380000000 | ||
| 496 | br i1 %314, label %317, label %315 | ||
| 497 | |||
| 498 | ; <label>:315 ; preds = %312 | ||
| 499 | %316 = fmul fast float %286, 0x4029D70A40000000 | ||
| 500 | br label %324 | ||
| 501 | |||
| 502 | ; <label>:317 ; preds = %312 | ||
| 503 | %318 = call float @dx.op.unary.f32(i32 6, float %286) ; FAbs(value) | ||
| 504 | %319 = call float @dx.op.unary.f32(i32 23, float %318) ; Log(value) | ||
| 505 | %320 = fmul fast float %319, 0x3FDAAAAAA0000000 | ||
| 506 | %321 = call float @dx.op.unary.f32(i32 21, float %320) ; Exp(value) | ||
| 507 | %322 = fmul fast float %321, 0x3FF0E147A0000000 | ||
| 508 | %323 = fadd fast float %322, 0xBFAC28F5C0000000 | ||
| 509 | br label %324 | ||
| 510 | |||
| 511 | ; <label>:324 ; preds = %317, %315 | ||
| 512 | %325 = phi float [ %316, %315 ], [ %323, %317 ] | ||
| 513 | %326 = call float @dx.op.unary.f32(i32 7, float %301) ; Saturate(value) | ||
| 514 | %327 = call float @dx.op.unary.f32(i32 7, float %313) ; Saturate(value) | ||
| 515 | %328 = call float @dx.op.unary.f32(i32 7, float %325) ; Saturate(value) | ||
| 516 | br label %389 | ||
| 517 | |||
| 518 | ; <label>:329 ; preds = %280 | ||
| 519 | br i1 %120, label %330, label %385 | ||
| 520 | |||
| 521 | ; <label>:330 ; preds = %329 | ||
| 522 | %331 = fmul fast float %230, 0x3FFA916440000000 | ||
| 523 | %332 = call float @dx.op.tertiary.f32(i32 46, float 0xBFE2CE1400000000, float %231, float %331) ; FMad(a,b,c) | ||
| 524 | %333 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB2A5A460000000, float %232, float %332) ; FMad(a,b,c) | ||
| 525 | %334 = fmul fast float %230, 0xBFBFE24FE0000000 | ||
| 526 | %335 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF2205680000000, float %231, float %334) ; FMad(a,b,c) | ||
| 527 | %336 = call float @dx.op.tertiary.f32(i32 46, float 0xBF8118C1A0000000, float %232, float %335) ; FMad(a,b,c) | ||
| 528 | %337 = fmul fast float %230, 0xBF9296F660000000 | ||
| 529 | %338 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB9C0B9A0000000, float %231, float %337) ; FMad(a,b,c) | ||
| 530 | %339 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF1E66780000000, float %232, float %338) ; FMad(a,b,c) | ||
| 531 | %340 = fmul fast float %282, %333 | ||
| 532 | %341 = fmul fast float %282, %336 | ||
| 533 | %342 = fmul fast float %282, %339 | ||
| 534 | %343 = extractvalue %dx.types.CBufRet.f32 %12, 0 | ||
| 535 | %344 = fcmp fast une float %343, 0.000000e+00 | ||
| 536 | br i1 %344, label %389, label %345 | ||
| 537 | |||
| 538 | ; <label>:345 ; preds = %330 | ||
| 539 | %346 = fcmp fast ugt float %340, 0x3F69A5C380000000 | ||
| 540 | br i1 %346, label %349, label %347 | ||
| 541 | |||
| 542 | ; <label>:347 ; preds = %345 | ||
| 543 | %348 = fmul fast float %340, 0x4029D70A40000000 | ||
| 544 | br label %356 | ||
| 545 | |||
| 546 | ; <label>:349 ; preds = %345 | ||
| 547 | %350 = call float @dx.op.unary.f32(i32 6, float %340) ; FAbs(value) | ||
| 548 | %351 = call float @dx.op.unary.f32(i32 23, float %350) ; Log(value) | ||
| 549 | %352 = fmul fast float %351, 0x3FDAAAAAA0000000 | ||
| 550 | %353 = call float @dx.op.unary.f32(i32 21, float %352) ; Exp(value) | ||
| 551 | %354 = fmul fast float %353, 0x3FF0E147A0000000 | ||
| 552 | %355 = fadd fast float %354, 0xBFAC28F5C0000000 | ||
| 553 | br label %356 | ||
| 554 | |||
| 555 | ; <label>:356 ; preds = %349, %347 | ||
| 556 | %357 = phi float [ %348, %347 ], [ %355, %349 ] | ||
| 557 | %358 = fcmp fast ugt float %341, 0x3F69A5C380000000 | ||
| 558 | br i1 %358, label %361, label %359 | ||
| 559 | |||
| 560 | ; <label>:359 ; preds = %356 | ||
| 561 | %360 = fmul fast float %341, 0x4029D70A40000000 | ||
| 562 | br label %368 | ||
| 563 | |||
| 564 | ; <label>:361 ; preds = %356 | ||
| 565 | %362 = call float @dx.op.unary.f32(i32 6, float %341) ; FAbs(value) | ||
| 566 | %363 = call float @dx.op.unary.f32(i32 23, float %362) ; Log(value) | ||
| 567 | %364 = fmul fast float %363, 0x3FDAAAAAA0000000 | ||
| 568 | %365 = call float @dx.op.unary.f32(i32 21, float %364) ; Exp(value) | ||
| 569 | %366 = fmul fast float %365, 0x3FF0E147A0000000 | ||
| 570 | %367 = fadd fast float %366, 0xBFAC28F5C0000000 | ||
| 571 | br label %368 | ||
| 572 | |||
| 573 | ; <label>:368 ; preds = %361, %359 | ||
| 574 | %369 = phi float [ %360, %359 ], [ %367, %361 ] | ||
| 575 | %370 = fcmp fast ugt float %342, 0x3F69A5C380000000 | ||
| 576 | br i1 %370, label %373, label %371 | ||
| 577 | |||
| 578 | ; <label>:371 ; preds = %368 | ||
| 579 | %372 = fmul fast float %342, 0x4029D70A40000000 | ||
| 580 | br label %380 | ||
| 581 | |||
| 582 | ; <label>:373 ; preds = %368 | ||
| 583 | %374 = call float @dx.op.unary.f32(i32 6, float %342) ; FAbs(value) | ||
| 584 | %375 = call float @dx.op.unary.f32(i32 23, float %374) ; Log(value) | ||
| 585 | %376 = fmul fast float %375, 0x3FDAAAAAA0000000 | ||
| 586 | %377 = call float @dx.op.unary.f32(i32 21, float %376) ; Exp(value) | ||
| 587 | %378 = fmul fast float %377, 0x3FF0E147A0000000 | ||
| 588 | %379 = fadd fast float %378, 0xBFAC28F5C0000000 | ||
| 589 | br label %380 | ||
| 590 | |||
| 591 | ; <label>:380 ; preds = %373, %371 | ||
| 592 | %381 = phi float [ %372, %371 ], [ %379, %373 ] | ||
| 593 | %382 = call float @dx.op.unary.f32(i32 7, float %357) ; Saturate(value) | ||
| 594 | %383 = call float @dx.op.unary.f32(i32 7, float %369) ; Saturate(value) | ||
| 595 | %384 = call float @dx.op.unary.f32(i32 7, float %381) ; Saturate(value) | ||
| 596 | br label %389 | ||
| 597 | |||
| 598 | ; <label>:385 ; preds = %329 | ||
| 599 | %386 = fmul fast float %282, %230 | ||
| 600 | %387 = fmul fast float %282, %231 | ||
| 601 | %388 = fmul fast float %282, %232 | ||
| 602 | br label %389 | ||
| 603 | |||
| 604 | ; <label>:389 ; preds = %385, %380, %330, %324, %283, %272 | ||
| 605 | %390 = phi float [ %277, %272 ], [ %386, %385 ], [ %284, %283 ], [ %326, %324 ], [ %340, %330 ], [ %382, %380 ] | ||
| 606 | %391 = phi float [ %278, %272 ], [ %387, %385 ], [ %285, %283 ], [ %327, %324 ], [ %341, %330 ], [ %383, %380 ] | ||
| 607 | %392 = phi float [ %279, %272 ], [ %388, %385 ], [ %286, %283 ], [ %328, %324 ], [ %342, %330 ], [ %384, %380 ] | ||
| 608 | %393 = fmul fast float %390, %6 | ||
| 609 | %394 = fmul fast float %391, %7 | ||
| 610 | %395 = fmul fast float %392, %8 | ||
| 611 | %396 = fmul fast float %118, %9 | ||
| 612 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %393) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 613 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %394) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 614 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %395) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 615 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %396) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 616 | ret void | ||
| 617 | } | ||
| 618 | |||
| 619 | ; Function Attrs: nounwind readnone | ||
| 620 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 621 | |||
| 622 | ; Function Attrs: nounwind | ||
| 623 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 624 | |||
| 625 | ; Function Attrs: nounwind readonly | ||
| 626 | declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 | ||
| 627 | |||
| 628 | ; Function Attrs: nounwind readnone | ||
| 629 | declare float @dx.op.dot3.f32(i32, float, float, float, float, float, float) #0 | ||
| 630 | |||
| 631 | ; Function Attrs: nounwind readnone | ||
| 632 | declare float @dx.op.unary.f32(i32, float) #0 | ||
| 633 | |||
| 634 | ; Function Attrs: nounwind readnone | ||
| 635 | declare float @dx.op.binary.f32(i32, float, float) #0 | ||
| 636 | |||
| 637 | ; Function Attrs: nounwind readonly | ||
| 638 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 639 | |||
| 640 | ; Function Attrs: nounwind readnone | ||
| 641 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 642 | |||
| 643 | ; Function Attrs: nounwind readonly | ||
| 644 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 645 | |||
| 646 | attributes #0 = { nounwind readnone } | ||
| 647 | attributes #1 = { nounwind } | ||
| 648 | attributes #2 = { nounwind readonly } | ||
| 649 | |||
| 650 | !llvm.ident = !{!0} | ||
| 651 | !dx.version = !{!1} | ||
| 652 | !dx.valver = !{!2} | ||
| 653 | !dx.shaderModel = !{!3} | ||
| 654 | !dx.resources = !{!4} | ||
| 655 | !dx.viewIdState = !{!14} | ||
| 656 | !dx.entryPoints = !{!15} | ||
| 657 | |||
| 658 | !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} | ||
| 659 | !1 = !{i32 1, i32 0} | ||
| 660 | !2 = !{i32 1, i32 6} | ||
| 661 | !3 = !{!"ps", i32 6, i32 0} | ||
| 662 | !4 = !{!5, null, !10, !12} | ||
| 663 | !5 = !{!6, !8, !9} | ||
| 664 | !6 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 0, i32 1, i32 2, i32 0, !7} | ||
| 665 | !7 = !{i32 0, i32 9} | ||
| 666 | !8 = !{i32 1, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 1, i32 1, i32 2, i32 0, !7} | ||
| 667 | !9 = !{i32 2, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 2, i32 1, i32 2, i32 0, !7} | ||
| 668 | !10 = !{!11} | ||
| 669 | !11 = !{i32 0, %Constants* undef, !"", i32 0, i32 1, i32 1, i32 96, null} | ||
| 670 | !12 = !{!13} | ||
| 671 | !13 = !{i32 0, %struct.SamplerState* undef, !"", i32 0, i32 0, i32 1, i32 0, null} | ||
| 672 | !14 = !{[14 x i32] [i32 12, i32 4, i32 0, i32 0, i32 0, i32 0, i32 15, i32 15, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]} | ||
| 673 | !15 = !{void ()* @main, !"main", !16, !4, null} | ||
| 674 | !16 = !{!17, !24, null} | ||
| 675 | !17 = !{!18, !20, !22} | ||
| 676 | !18 = !{i32 0, !"SV_Position", i8 9, i8 3, !19, i8 4, i32 1, i8 4, i32 0, i8 0, null} | ||
| 677 | !19 = !{i32 0} | ||
| 678 | !20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !19, i8 2, i32 1, i8 2, i32 1, i8 0, !21} | ||
| 679 | !21 = !{i32 3, i32 3} | ||
| 680 | !22 = !{i32 2, !"COLOR", i8 9, i8 0, !19, i8 2, i32 1, i8 4, i32 2, i8 0, !23} | ||
| 681 | !23 = !{i32 3, i32 15} | ||
| 682 | !24 = !{!25} | ||
| 683 | !25 = !{i32 0, !"SV_Target", i8 9, i8 16, !19, i8 0, i32 1, i8 4, i32 0, i8 0, !23} | ||
| 684 | |||
| 685 | #endif | ||
| 686 | |||
| 687 | const unsigned char g_main[] = { | ||
| 688 | 0x44, 0x58, 0x42, 0x43, 0x78, 0xad, 0xb4, 0x13, 0x3d, 0x52, 0x26, 0xa9, | ||
| 689 | 0x43, 0x6f, 0x29, 0xd4, 0x3d, 0xe5, 0x45, 0x27, 0x01, 0x00, 0x00, 0x00, | ||
| 690 | 0xd9, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 691 | 0x50, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, | ||
| 692 | 0x61, 0x02, 0x00, 0x00, 0x61, 0x03, 0x00, 0x00, 0xd9, 0x0c, 0x00, 0x00, | ||
| 693 | 0xf5, 0x0c, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, | ||
| 694 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, | ||
| 695 | 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 696 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 697 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 698 | 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 699 | 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 700 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 701 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, | ||
| 702 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 703 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 704 | 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, | ||
| 705 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, | ||
| 706 | 0x4f, 0x52, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01, | ||
| 707 | 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, | ||
| 708 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, | ||
| 709 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, | ||
| 710 | 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, | ||
| 711 | 0x00, 0x50, 0x53, 0x56, 0x30, 0x44, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, | ||
| 712 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 713 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 714 | 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00, 0x00, | ||
| 715 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 716 | 0x00, 0x05, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 717 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 718 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 719 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 720 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 721 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 722 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 723 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 724 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 725 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 726 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 727 | 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, | ||
| 728 | 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 729 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 730 | 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 731 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, | ||
| 732 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, | ||
| 733 | 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 734 | 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 735 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 736 | 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 737 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 738 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, | ||
| 739 | 0x30, 0xf8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 740 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, | ||
| 741 | 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 742 | 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 743 | 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 744 | 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 745 | 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 746 | 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 747 | 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 748 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 749 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, | ||
| 750 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 751 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 752 | 0xff, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 753 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 754 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, | ||
| 755 | 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 756 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 757 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, | ||
| 758 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 759 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 760 | 0xff, 0x53, 0x54, 0x41, 0x54, 0x70, 0x09, 0x00, 0x00, 0x60, 0x00, 0x00, | ||
| 761 | 0x00, 0x5c, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, | ||
| 762 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x58, 0x09, 0x00, 0x00, 0x42, 0x43, 0xc0, | ||
| 763 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x53, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 764 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 765 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 766 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 767 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 768 | 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 769 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, | ||
| 770 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, | ||
| 771 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, | ||
| 772 | 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, | ||
| 773 | 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, | ||
| 774 | 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 775 | 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, | ||
| 776 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, | ||
| 777 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, | ||
| 778 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, | ||
| 779 | 0x4c, 0x10, 0x9c, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6, | ||
| 780 | 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, | ||
| 781 | 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, | ||
| 782 | 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, | ||
| 783 | 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10, | ||
| 784 | 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, | ||
| 785 | 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, 0x41, 0x06, 0x62, 0x18, | ||
| 786 | 0x86, 0x61, 0x18, 0xe8, 0x29, 0xc3, 0x40, 0x0c, 0x14, 0x15, 0x62, 0x20, | ||
| 787 | 0x86, 0x81, 0xa6, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, | ||
| 788 | 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0x0c, 0xc3, 0x50, | ||
| 789 | 0x88, 0x8a, 0x60, 0x08, 0xb2, 0x4a, 0x31, 0x10, 0xc3, 0x30, 0x10, 0x36, | ||
| 790 | 0x47, 0x10, 0x14, 0x83, 0x21, 0x0a, 0x82, 0xd0, 0x68, 0x1b, 0x08, 0x18, | ||
| 791 | 0x46, 0x20, 0x86, 0x99, 0xda, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, 0x61, | ||
| 792 | 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, | ||
| 793 | 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, | ||
| 794 | 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x81, | ||
| 795 | 0x0d, 0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x40, 0x0f, 0xf4, 0xa0, | ||
| 796 | 0x1d, 0xd2, 0x01, 0x1e, 0xe6, 0xe1, 0x17, 0xe8, 0x21, 0x1f, 0xe0, 0xa1, | ||
| 797 | 0x1c, 0x50, 0x40, 0xcc, 0x24, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 798 | 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, | ||
| 799 | 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, | ||
| 800 | 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, 0x40, 0x0f, | ||
| 801 | 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x48, 0xf0, 0x3e, | ||
| 802 | 0x02, 0x2f, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, 0x92, 0x10, 0x33, 0x0c, | ||
| 803 | 0xc3, 0x30, 0x0c, 0xc3, 0xe0, 0x79, 0x9e, 0x47, 0xe2, 0x4d, 0xd2, 0x14, | ||
| 804 | 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, | ||
| 805 | 0xa0, 0x80, 0x20, 0x32, 0x1d, 0x08, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, | ||
| 806 | 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, | ||
| 807 | 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, | ||
| 808 | 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 809 | 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 810 | 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, | ||
| 811 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 812 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 813 | 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 814 | 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 815 | 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, | ||
| 816 | 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 817 | 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 818 | 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, | ||
| 819 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, | ||
| 820 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, | ||
| 821 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, | ||
| 822 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x13, 0x01, | ||
| 823 | 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67, | ||
| 824 | 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, | ||
| 825 | 0x8f, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 826 | 0x43, 0x1e, 0x0c, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 827 | 0x00, 0x86, 0x3c, 0x1b, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 828 | 0x00, 0x00, 0x64, 0x81, 0x00, 0x19, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 829 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 830 | 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24, 0x0a, 0x38, 0xa0, | ||
| 831 | 0x0c, 0xca, 0xa1, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4, 0x50, 0x0a, 0xa6, | ||
| 832 | 0x70, 0x0a, 0xa8, 0xc0, 0x0a, 0x30, 0xa0, 0x40, 0x03, 0xca, 0xa3, 0x6c, | ||
| 833 | 0xca, 0x70, 0xa0, 0x44, 0x0d, 0xa8, 0x28, 0x89, 0x32, 0x28, 0x84, 0x11, | ||
| 834 | 0x80, 0x22, 0x28, 0x10, 0xd2, 0x6a, 0x80, 0xc2, 0x19, 0x00, 0x12, 0x67, | ||
| 835 | 0x00, 0x68, 0x9c, 0x01, 0xa0, 0x72, 0x06, 0x80, 0xcc, 0xb1, 0x1c, 0x86, | ||
| 836 | 0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, | ||
| 837 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 838 | 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, | ||
| 839 | 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, | ||
| 840 | 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, | ||
| 841 | 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, | ||
| 842 | 0xd9, 0x10, 0x04, 0x13, 0x04, 0x42, 0x99, 0x20, 0x10, 0xcb, 0x06, 0x61, | ||
| 843 | 0x20, 0x36, 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x30, 0x1b, | ||
| 844 | 0x86, 0x03, 0x21, 0x26, 0x08, 0x61, 0x80, 0x06, 0x44, 0xe8, 0xca, 0xf0, | ||
| 845 | 0xe8, 0xea, 0xe4, 0xca, 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, | ||
| 846 | 0x0d, 0x02, 0xd1, 0x6c, 0x48, 0x08, 0x65, 0x21, 0x88, 0x81, 0x21, 0x1c, | ||
| 847 | 0x22, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x31, 0x1b, 0x92, 0x41, | ||
| 848 | 0x81, 0x88, 0x61, 0x60, 0x08, 0x87, 0x08, 0x5d, 0x19, 0x1e, 0x5d, 0x9d, | ||
| 849 | 0x5c, 0x99, 0xcc, 0x86, 0x84, 0x51, 0x24, 0x82, 0x19, 0x18, 0xc2, 0xd9, | ||
| 850 | 0x30, 0x3c, 0xd1, 0x34, 0x41, 0x18, 0x03, 0x35, 0x60, 0x32, 0xf4, 0xe6, | ||
| 851 | 0x36, 0x47, 0x17, 0xe6, 0x46, 0x37, 0x37, 0x41, 0x20, 0x9e, 0x0d, 0x08, | ||
| 852 | 0x51, 0x59, 0xc4, 0x30, 0x5c, 0xc0, 0x86, 0x00, 0x9b, 0x20, 0x94, 0xc1, | ||
| 853 | 0x1a, 0x10, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0x93, 0x83, 0xd9, 0x80, | ||
| 854 | 0x10, 0xda, 0x46, 0x10, 0x03, 0x01, 0x6c, 0x08, 0xb8, 0x0d, 0x04, 0x05, | ||
| 855 | 0x64, 0xdd, 0x04, 0x41, 0x0c, 0xd2, 0x80, 0xcc, 0xdc, 0x98, 0xd4, 0x91, | ||
| 856 | 0xd0, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0xdd, 0x04, 0x81, 0x80, 0x26, | ||
| 857 | 0x08, 0x44, 0x34, 0x41, 0xd0, 0xce, 0x60, 0x03, 0x82, 0x80, 0x41, 0x18, | ||
| 858 | 0x10, 0x62, 0xd0, 0x34, 0x63, 0x40, 0x86, 0xae, 0x0c, 0x8f, 0xae, 0x4e, | ||
| 859 | 0xae, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0x6c, 0x82, 0x40, 0x48, 0x1b, 0x10, | ||
| 860 | 0xa4, 0x0c, 0xc2, 0xc0, 0x0c, 0xc4, 0xa0, 0x69, 0xc6, 0x80, 0x4a, 0x9a, | ||
| 861 | 0x1b, 0x5c, 0x1d, 0xdd, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x04, 0x81, 0x98, | ||
| 862 | 0x36, 0x20, 0x08, 0x1a, 0x84, 0x41, 0x1a, 0x88, 0x41, 0xd3, 0x8c, 0x01, | ||
| 863 | 0x97, 0xb1, 0x37, 0xb6, 0x37, 0xb9, 0xaf, 0xb9, 0xb1, 0x30, 0xb6, 0xb2, | ||
| 864 | 0x09, 0x02, 0x41, 0x6d, 0x40, 0x90, 0x35, 0x08, 0x03, 0x36, 0x10, 0x83, | ||
| 865 | 0xa6, 0x19, 0x03, 0x3a, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, | ||
| 866 | 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x13, 0x04, 0xa2, 0xda, 0x80, 0x20, | ||
| 867 | 0x6e, 0x10, 0x06, 0x6f, 0x20, 0x06, 0x4d, 0x33, 0x06, 0x7c, 0xe8, 0xde, | ||
| 868 | 0xdc, 0xca, 0xda, 0xc2, 0xe0, 0xbe, 0xcc, 0xc2, 0xc6, 0xe8, 0xde, 0xe4, | ||
| 869 | 0x62, 0x26, 0x08, 0x84, 0xb5, 0x01, 0x41, 0xe2, 0x20, 0x0c, 0xe4, 0x40, | ||
| 870 | 0x0c, 0x9a, 0x66, 0x0c, 0xf8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, | ||
| 871 | 0x7d, 0x99, 0x85, 0x8d, 0xd1, 0xbd, 0xc9, 0xc9, 0x4c, 0x10, 0x88, 0x6b, | ||
| 872 | 0x03, 0x82, 0xd0, 0x41, 0x18, 0xd4, 0x81, 0x18, 0x34, 0xcd, 0x18, 0xf0, | ||
| 873 | 0x99, 0x23, 0x93, 0xfb, 0xba, 0x43, 0x4b, 0xa3, 0x2b, 0xfb, 0x82, 0x7b, | ||
| 874 | 0x4b, 0x73, 0xa3, 0x9b, 0x20, 0x10, 0xd8, 0x06, 0x04, 0xb9, 0x83, 0x30, | ||
| 875 | 0xc0, 0x03, 0x31, 0x68, 0x9a, 0x31, 0xe0, 0x91, 0xf5, 0x66, 0x66, 0x36, | ||
| 876 | 0x57, 0x46, 0x37, 0x41, 0x20, 0xb2, 0x0d, 0x08, 0xa2, 0x07, 0x61, 0xb0, | ||
| 877 | 0x07, 0x62, 0xd0, 0x34, 0x63, 0x40, 0x43, 0x6a, 0xec, 0xad, 0xcc, 0xcc, | ||
| 878 | 0x6c, 0x82, 0x40, 0x68, 0x1b, 0x10, 0xa4, 0x0f, 0xc2, 0xc0, 0x0f, 0xc4, | ||
| 879 | 0xa0, 0x69, 0xc6, 0x80, 0xc6, 0xd1, 0xd8, 0x5b, 0x99, 0x99, 0xd9, 0x04, | ||
| 880 | 0x81, 0xd8, 0x36, 0x20, 0x08, 0x28, 0x84, 0x41, 0x28, 0x88, 0x41, 0xd3, | ||
| 881 | 0x8c, 0x01, 0x0d, 0xa1, 0xb1, 0xb7, 0x32, 0x33, 0xb3, 0x09, 0x02, 0xc1, | ||
| 882 | 0x6d, 0x40, 0x90, 0x51, 0x08, 0x03, 0x52, 0x10, 0x83, 0xa6, 0x19, 0x83, | ||
| 883 | 0x0d, 0xcd, 0x45, 0x06, 0x67, 0xa0, 0x06, 0x6d, 0x00, 0x07, 0x73, 0x60, | ||
| 884 | 0x07, 0x79, 0xc0, 0x07, 0x7f, 0x20, 0x0a, 0xa5, 0xb0, 0x61, 0x20, 0x3e, | ||
| 885 | 0x53, 0x98, 0x20, 0x08, 0xc0, 0x06, 0x60, 0xc3, 0x40, 0xa4, 0x42, 0x2a, | ||
| 886 | 0x6c, 0x08, 0x54, 0x61, 0xc3, 0x30, 0xa0, 0xc2, 0x2a, 0x4c, 0x10, 0xcc, | ||
| 887 | 0x80, 0x0d, 0x36, 0x04, 0xad, 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0xcb, | ||
| 888 | 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, | ||
| 889 | 0xa1, 0x08, 0x83, 0x09, 0x42, 0x21, 0x06, 0x1b, 0x02, 0x62, 0x82, 0x50, | ||
| 890 | 0x8c, 0xc1, 0x04, 0xa1, 0x20, 0x83, 0x0d, 0x0b, 0x01, 0x0b, 0xb1, 0x20, | ||
| 891 | 0x0b, 0xb3, 0x40, 0x0b, 0x03, 0x2d, 0x10, 0xb5, 0x00, 0x10, 0xa1, 0x2a, | ||
| 892 | 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0x65, 0xb0, 0x41, | ||
| 893 | 0x08, 0x83, 0x30, 0xd8, 0xb0, 0x0c, 0xb7, 0x10, 0x0b, 0xb5, 0x30, 0x0b, | ||
| 894 | 0xb8, 0x30, 0xe0, 0xc2, 0x50, 0x0b, 0xb9, 0xc0, 0x62, 0xe8, 0x89, 0xe9, | ||
| 895 | 0x49, 0x6a, 0x82, 0x40, 0x74, 0x1b, 0x84, 0x30, 0xe0, 0x85, 0x0d, 0x0b, | ||
| 896 | 0xb3, 0x0b, 0xb1, 0x50, 0x0b, 0xb3, 0x80, 0x0b, 0x03, 0x2d, 0x30, 0xb5, | ||
| 897 | 0xd0, 0x0b, 0x1b, 0x06, 0x5b, 0xd0, 0x05, 0x5f, 0x60, 0x32, 0x65, 0xf5, | ||
| 898 | 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xcc, 0x60, 0xc3, | ||
| 899 | 0x42, 0x80, 0x43, 0x2c, 0x84, 0xc3, 0x2c, 0xd4, 0xc2, 0x40, 0x0b, 0x44, | ||
| 900 | 0x2d, 0xf4, 0xc2, 0x86, 0x40, 0x1c, 0x36, 0x0c, 0xbf, 0x30, 0x0e, 0xc0, | ||
| 901 | 0x86, 0x02, 0x15, 0x5e, 0x81, 0x1c, 0x3c, 0x80, 0x88, 0x98, 0x5c, 0x98, | ||
| 902 | 0xdb, 0x18, 0x5a, 0xd9, 0xdc, 0x04, 0x81, 0xf0, 0x68, 0x98, 0xb1, 0xbd, | ||
| 903 | 0x85, 0xd1, 0xcd, 0x4d, 0x10, 0x88, 0x8f, 0x45, 0x9a, 0xdb, 0x1c, 0xdd, | ||
| 904 | 0xdc, 0x04, 0x81, 0x00, 0x03, 0x1a, 0x73, 0x69, 0x67, 0x5f, 0x6c, 0x64, | ||
| 905 | 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x88, 0xd0, 0x95, 0xe1, 0x7d, | ||
| 906 | 0xb9, 0xbd, 0xc9, 0xb5, 0x6d, 0x60, 0xcc, 0xe1, 0x1c, 0xd0, 0x21, 0x1d, | ||
| 907 | 0xd4, 0x61, 0x1d, 0xd8, 0x01, 0x69, 0x07, 0x33, 0x70, 0x87, 0x34, 0xa8, | ||
| 908 | 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, | ||
| 909 | 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, | ||
| 910 | 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, | ||
| 911 | 0x72, 0x53, 0x82, 0xa2, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, | ||
| 912 | 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, 0xdb, 0x94, 0x00, 0x29, 0x43, 0x86, | ||
| 913 | 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, | ||
| 914 | 0xe8, 0x2a, 0x91, 0xe1, 0xb9, 0xd0, 0xe5, 0xc1, 0x95, 0x05, 0xb9, 0xb9, | ||
| 915 | 0xbd, 0xd1, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0xcd, 0x4d, 0x11, 0x4c, 0x61, | ||
| 916 | 0x15, 0xea, 0x90, 0xe1, 0xb9, 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, | ||
| 917 | 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0x5a, 0xa1, 0x0e, 0x19, 0x9e, 0x4b, | ||
| 918 | 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, | ||
| 919 | 0x80, 0x1c, 0xba, 0x90, 0xe1, 0xb9, 0x8c, 0xbd, 0xd5, 0xb9, 0xd1, 0x95, | ||
| 920 | 0xc9, 0xcd, 0x4d, 0x09, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 921 | 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 922 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 923 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 924 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 925 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 926 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 927 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 928 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 929 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 930 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 931 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 932 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 933 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 934 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 935 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 936 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 937 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 938 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 939 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 940 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 941 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 942 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 943 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, | ||
| 944 | 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, | ||
| 945 | 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, | ||
| 946 | 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f, | ||
| 947 | 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c, | ||
| 948 | 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, | ||
| 949 | 0x00, 0x66, 0x00, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x80, 0x34, 0x40, 0x84, | ||
| 950 | 0xf9, 0xc5, 0x6d, 0xdb, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, | ||
| 951 | 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x5f, | ||
| 952 | 0xdc, 0xb6, 0x25, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, | ||
| 953 | 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x04, 0xce, 0x70, 0xf9, 0xce, 0xe3, | ||
| 954 | 0x0f, 0xce, 0x74, 0xfb, 0xc5, 0x6d, 0x5b, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, | ||
| 955 | 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x0d, | ||
| 956 | 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, 0x10, 0x7e, 0x71, | ||
| 957 | 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11, 0x81, | ||
| 958 | 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x86, 0x20, 0x0d, 0x97, 0xef, | ||
| 959 | 0x3c, 0xfe, 0x44, 0x44, 0x13, 0x02, 0x44, 0x98, 0x5f, 0xdc, 0xb6, 0x15, | ||
| 960 | 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, | ||
| 961 | 0x1b, 0x00, 0xc1, 0x00, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 962 | 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 963 | 0x00, 0xf6, 0x87, 0x44, 0x46, 0xea, 0xee, 0x41, 0xc1, 0x02, 0x14, 0x2c, | ||
| 964 | 0x02, 0xd5, 0xbb, 0x3a, 0xb7, 0x44, 0x58, 0x49, 0x4c, 0xdc, 0x13, 0x00, | ||
| 965 | 0x00, 0x60, 0x00, 0x00, 0x00, 0xf7, 0x04, 0x00, 0x00, 0x44, 0x58, 0x49, | ||
| 966 | 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc4, 0x13, 0x00, | ||
| 967 | 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xee, 0x04, 0x00, | ||
| 968 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 969 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 970 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 971 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 972 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, | ||
| 973 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, | ||
| 974 | 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 975 | 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 976 | 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, | ||
| 977 | 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, | ||
| 978 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, | ||
| 979 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, | ||
| 980 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x57, 0x00, 0x00, | ||
| 981 | 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, | ||
| 982 | 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, | ||
| 983 | 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xa0, 0xc1, 0x08, 0x40, 0x09, 0x00, | ||
| 984 | 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, | ||
| 985 | 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, | ||
| 986 | 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, | ||
| 987 | 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, | ||
| 988 | 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, | ||
| 989 | 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, | ||
| 990 | 0x41, 0x06, 0x62, 0x18, 0x86, 0x61, 0x18, 0xe8, 0x29, 0xc3, 0x40, 0x0c, | ||
| 991 | 0x14, 0x15, 0x62, 0x20, 0x86, 0x81, 0xa6, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, | ||
| 992 | 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, | ||
| 993 | 0x31, 0x0c, 0xc3, 0x50, 0x88, 0x8a, 0x60, 0x08, 0xb2, 0x4a, 0x31, 0x10, | ||
| 994 | 0xc3, 0x30, 0x10, 0x36, 0x47, 0x10, 0x14, 0x83, 0x21, 0x0a, 0x82, 0xd0, | ||
| 995 | 0x68, 0x1b, 0x08, 0x18, 0x46, 0x20, 0x86, 0x99, 0xda, 0x60, 0x1c, 0xd8, | ||
| 996 | 0x21, 0x1c, 0xe6, 0x61, 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, | ||
| 997 | 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, | ||
| 998 | 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, | ||
| 999 | 0x21, 0x1c, 0xe8, 0x81, 0x0d, 0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, | ||
| 1000 | 0x40, 0x0f, 0xf4, 0xa0, 0x1d, 0xd2, 0x01, 0x1e, 0xe6, 0xe1, 0x17, 0xe8, | ||
| 1001 | 0x21, 0x1f, 0xe0, 0xa1, 0x1c, 0x50, 0x40, 0xcc, 0x24, 0x06, 0xe3, 0xc0, | ||
| 1002 | 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, | ||
| 1003 | 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, 0x50, | ||
| 1004 | 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, | ||
| 1005 | 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, | ||
| 1006 | 0x07, 0x48, 0xf0, 0x3e, 0x02, 0x2f, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, | ||
| 1007 | 0x92, 0x10, 0x33, 0x0c, 0xc3, 0x30, 0x0c, 0xc3, 0xe0, 0x79, 0x9e, 0x47, | ||
| 1008 | 0xe2, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, | ||
| 1009 | 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0x20, 0x32, 0x1d, 0x88, 0x29, 0x00, | ||
| 1010 | 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, | ||
| 1011 | 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, | ||
| 1012 | 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 1013 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, | ||
| 1014 | 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 1015 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, | ||
| 1016 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, | ||
| 1017 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, | ||
| 1018 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1019 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1020 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 1021 | 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, | ||
| 1022 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, | ||
| 1023 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, | ||
| 1024 | 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, | ||
| 1025 | 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, | ||
| 1026 | 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1027 | 0x60, 0xc8, 0x13, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1028 | 0x00, 0xc0, 0x90, 0x67, 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1029 | 0x00, 0x00, 0x80, 0x21, 0x8f, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, | ||
| 1030 | 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0c, 0x08, 0x80, 0x00, 0x00, 0x00, | ||
| 1031 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1b, 0x10, 0x00, 0x03, 0x00, | ||
| 1032 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, 0x11, 0x00, 0x00, | ||
| 1033 | 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 1034 | 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, | ||
| 1035 | 0x24, 0x0a, 0x38, 0xa0, 0x0c, 0xca, 0x83, 0x8a, 0x92, 0x28, 0x83, 0x42, | ||
| 1036 | 0x18, 0x01, 0x28, 0x82, 0x02, 0xa1, 0x70, 0x06, 0x80, 0xc6, 0x19, 0x00, | ||
| 1037 | 0x2a, 0x67, 0x00, 0xc8, 0x1c, 0xcb, 0x61, 0x08, 0x00, 0x00, 0x80, 0xe7, | ||
| 1038 | 0x01, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 1039 | 0x00, 0x71, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, | ||
| 1040 | 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, | ||
| 1041 | 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, | ||
| 1042 | 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, | ||
| 1043 | 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, | ||
| 1044 | 0x04, 0x42, 0x99, 0x20, 0x10, 0xcb, 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, | ||
| 1045 | 0xb3, 0x41, 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, | ||
| 1046 | 0x08, 0x61, 0x80, 0x11, 0x98, 0x20, 0x10, 0xcd, 0x04, 0x81, 0x70, 0x36, | ||
| 1047 | 0x08, 0x44, 0xb3, 0x21, 0x21, 0x94, 0x85, 0x20, 0x06, 0x86, 0x70, 0x36, | ||
| 1048 | 0x24, 0x83, 0xb2, 0x10, 0xc3, 0xc0, 0x10, 0xce, 0x86, 0x84, 0x51, 0x16, | ||
| 1049 | 0x82, 0x19, 0x18, 0xc2, 0xd9, 0x30, 0x3c, 0x50, 0x34, 0x41, 0x18, 0x83, | ||
| 1050 | 0x6c, 0x82, 0x40, 0x3c, 0x1b, 0x10, 0x62, 0x5a, 0x88, 0x61, 0xa0, 0x80, | ||
| 1051 | 0x0d, 0x41, 0x35, 0x41, 0x28, 0x03, 0x6d, 0x03, 0x42, 0x5c, 0x0b, 0x41, | ||
| 1052 | 0x0c, 0x04, 0xb0, 0x21, 0xc0, 0x36, 0x10, 0x12, 0x60, 0x65, 0x13, 0x04, | ||
| 1053 | 0x33, 0xd8, 0x36, 0x04, 0xdb, 0x04, 0x41, 0x00, 0x48, 0xb4, 0x85, 0xa5, | ||
| 1054 | 0xb9, 0x71, 0x99, 0xb2, 0xfa, 0x82, 0x7a, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, | ||
| 1055 | 0x73, 0x9b, 0x20, 0x14, 0xd2, 0x04, 0xa1, 0x98, 0x36, 0x04, 0xc4, 0x04, | ||
| 1056 | 0xa1, 0xa0, 0x26, 0x08, 0x45, 0xb5, 0x61, 0x21, 0x3e, 0x30, 0x08, 0x03, | ||
| 1057 | 0x31, 0x18, 0x83, 0x61, 0x0c, 0x08, 0x32, 0x00, 0x88, 0x50, 0x15, 0x61, | ||
| 1058 | 0x0d, 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x0a, 0x6b, 0x82, 0x40, 0x40, | ||
| 1059 | 0x1b, 0x04, 0x34, 0x40, 0x83, 0x0d, 0xcb, 0x60, 0x06, 0x60, 0x40, 0x06, | ||
| 1060 | 0x62, 0x70, 0x06, 0xc3, 0x19, 0x0c, 0x64, 0x90, 0x06, 0x2c, 0x86, 0x9e, | ||
| 1061 | 0x98, 0x9e, 0xa4, 0x26, 0x08, 0x44, 0xb4, 0x41, 0x40, 0x03, 0x36, 0xd8, | ||
| 1062 | 0xb0, 0x30, 0x6b, 0x00, 0x06, 0x64, 0x20, 0x06, 0x67, 0x30, 0x8c, 0x01, | ||
| 1063 | 0x43, 0x06, 0x6d, 0xb0, 0x61, 0x28, 0x03, 0x35, 0x70, 0x03, 0x26, 0x53, | ||
| 1064 | 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x84, 0xe2, 0xda, | ||
| 1065 | 0xb0, 0x10, 0x70, 0x00, 0x06, 0x71, 0x20, 0x06, 0x64, 0x30, 0x8c, 0x01, | ||
| 1066 | 0x41, 0x06, 0x6d, 0xb0, 0x21, 0x90, 0x83, 0x0d, 0xc3, 0x1b, 0xcc, 0x01, | ||
| 1067 | 0xb0, 0xa1, 0xe8, 0x3c, 0x3a, 0xd0, 0x80, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, | ||
| 1068 | 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, | ||
| 1069 | 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, | ||
| 1070 | 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, | ||
| 1071 | 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, | ||
| 1072 | 0x95, 0xb1, 0x4d, 0x09, 0x90, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, | ||
| 1073 | 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x82, 0xac, 0x0e, 0x19, 0x9e, | ||
| 1074 | 0x8b, 0x5d, 0x5a, 0xd9, 0x5d, 0x12, 0xd9, 0x14, 0x5d, 0x18, 0x5d, 0xd9, | ||
| 1075 | 0x94, 0x60, 0xab, 0x43, 0x86, 0xe7, 0x52, 0xe6, 0x46, 0x27, 0x97, 0x07, | ||
| 1076 | 0xf5, 0x96, 0xe6, 0x46, 0x37, 0x37, 0x25, 0xa0, 0x03, 0x00, 0x00, 0x00, | ||
| 1077 | 0x00, 0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 1078 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 1079 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 1080 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 1081 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 1082 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 1083 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 1084 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 1085 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 1086 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 1087 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 1088 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 1089 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 1090 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 1091 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 1092 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 1093 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 1094 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 1095 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 1096 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 1097 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 1098 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 1099 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, | ||
| 1100 | 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, | ||
| 1101 | 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, | ||
| 1102 | 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, | ||
| 1103 | 0x81, 0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, | ||
| 1104 | 0x1d, 0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 1105 | 0x00, 0x26, 0x00, 0x00, 0x00, 0x66, 0x00, 0x0d, 0x97, 0xef, 0x3c, 0x7e, | ||
| 1106 | 0x80, 0x34, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0xdb, 0xc1, 0x36, 0x5c, 0xbe, | ||
| 1107 | 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, | ||
| 1108 | 0x01, 0x08, 0x98, 0x5f, 0xdc, 0xb6, 0x25, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, | ||
| 1109 | 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x04, 0xce, | ||
| 1110 | 0x70, 0xf9, 0xce, 0xe3, 0x0f, 0xce, 0x74, 0xfb, 0xc5, 0x6d, 0x5b, 0xc0, | ||
| 1111 | 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, | ||
| 1112 | 0x5f, 0xdc, 0xb6, 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, | ||
| 1113 | 0xb3, 0x10, 0x7e, 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, | ||
| 1114 | 0x34, 0x39, 0x11, 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x86, | ||
| 1115 | 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0x44, 0x44, 0x13, 0x02, 0x44, 0x98, | ||
| 1116 | 0x5f, 0xdc, 0xb6, 0x15, 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, | ||
| 1117 | 0x84, 0xf9, 0xc5, 0x6d, 0x1b, 0x00, 0xc1, 0x00, 0x48, 0x03, 0x00, 0x00, | ||
| 1118 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x29, 0x03, 0x00, 0x00, 0x13, 0x04, 0x7b, | ||
| 1119 | 0x10, 0x0b, 0x04, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0xa4, 0x8d, 0x00, | ||
| 1120 | 0x50, 0x51, 0x02, 0x44, 0x94, 0x51, 0xc9, 0x95, 0x43, 0x29, 0x14, 0x5e, | ||
| 1121 | 0xb9, 0x15, 0xc2, 0x0c, 0x40, 0xa9, 0x94, 0x4b, 0xd9, 0x15, 0x17, 0x0d, | ||
| 1122 | 0x63, 0x04, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x8c, 0x11, 0x98, 0xf7, 0xba, | ||
| 1123 | 0xca, 0xde, 0x18, 0x41, 0xcc, 0x83, 0x7d, 0xee, 0x8d, 0x11, 0xb8, 0x7d, | ||
| 1124 | 0x2c, 0xda, 0xde, 0x18, 0xc1, 0xbb, 0xa7, 0xe5, 0xfd, 0x8d, 0x11, 0xe8, | ||
| 1125 | 0xac, 0x39, 0x87, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0x48, 0x82, 0xc1, | ||
| 1126 | 0x18, 0x81, 0x98, 0x8b, 0x69, 0xff, 0x8d, 0x11, 0x80, 0x25, 0xcf, 0xc6, | ||
| 1127 | 0xbf, 0x30, 0x46, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x18, 0xc1, 0x3f, | ||
| 1128 | 0x93, 0xfe, 0xef, 0x0b, 0x63, 0x04, 0x74, 0x0d, 0x8a, 0xf9, 0x37, 0x46, | ||
| 1129 | 0xd0, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x18, 0xc1, 0xdc, 0xb7, 0x69, 0xea, | ||
| 1130 | 0x0b, 0x63, 0x04, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0x8c, 0x11, 0xf0, 0x39, | ||
| 1131 | 0xeb, 0xe3, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0x0a, 0x06, 0x63, 0x04, | ||
| 1132 | 0x2c, 0x7b, 0x86, 0xf2, 0x37, 0x46, 0x80, 0xfa, 0x65, 0xac, 0x7e, 0x63, | ||
| 1133 | 0x04, 0xf9, 0xa9, 0x8b, 0xb3, 0x37, 0x46, 0xa0, 0xd7, 0xe0, 0x8e, 0x7b, | ||
| 1134 | 0x63, 0x04, 0x2a, 0x9e, 0xdb, 0xf6, 0x37, 0x46, 0xf0, 0xf6, 0x29, 0x3d, | ||
| 1135 | 0x7a, 0x63, 0x04, 0xeb, 0x1c, 0xb3, 0xa8, 0x37, 0x46, 0x90, 0x86, 0x30, | ||
| 1136 | 0xba, 0x7b, 0x63, 0x04, 0x77, 0x1b, 0xab, 0xf6, 0x37, 0x46, 0xb0, 0x8e, | ||
| 1137 | 0x78, 0xcc, 0x82, 0xc1, 0x18, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x63, | ||
| 1138 | 0x04, 0x20, 0x08, 0xae, 0x39, 0x18, 0x8c, 0x11, 0x80, 0x20, 0xc8, 0xd6, | ||
| 1139 | 0xbf, 0x30, 0x46, 0xc0, 0xb6, 0xf3, 0x4f, 0x7a, 0x63, 0x04, 0x20, 0x08, | ||
| 1140 | 0x82, 0x20, 0x18, 0x8c, 0x11, 0xb8, 0x7d, 0x2c, 0xda, 0xbe, 0x30, 0x46, | ||
| 1141 | 0xd0, 0xc7, 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0xb5, 0x5a, 0xab, 0xed, 0x37, | ||
| 1142 | 0x46, 0x20, 0x8b, 0x6e, 0x4f, 0x83, 0xc1, 0x18, 0x01, 0x0f, 0xaf, 0x3a, | ||
| 1143 | 0xdd, 0x8d, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x0c, 0x00, | ||
| 1144 | 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xb0, 0xa5, 0xc2, 0x1c, 0xf4, | ||
| 1145 | 0x41, 0x29, 0x94, 0x82, 0x1d, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0xc1, | ||
| 1146 | 0xa6, 0x0a, 0x74, 0xe0, 0x07, 0xa9, 0x90, 0x0a, 0x77, 0x30, 0x62, 0x90, | ||
| 1147 | 0x00, 0x20, 0x08, 0x06, 0xdb, 0x2a, 0xd4, 0xc1, 0x1f, 0xa4, 0x42, 0x2a, | ||
| 1148 | 0xe0, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x6c, 0xac, 0x60, 0x07, | ||
| 1149 | 0xa2, 0xa0, 0x0a, 0xaa, 0x90, 0x07, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, | ||
| 1150 | 0xb0, 0xb5, 0xc2, 0x1d, 0x80, 0xc2, 0x2a, 0xb0, 0x82, 0x1e, 0x8c, 0x18, | ||
| 1151 | 0x24, 0x00, 0x08, 0x82, 0x81, 0x61, 0x0b, 0x73, 0xa0, 0x0a, 0xac, 0x20, | ||
| 1152 | 0x0a, 0x72, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x2d, 0xd0, | ||
| 1153 | 0xc1, 0x2a, 0xb4, 0xc2, 0x1e, 0xcc, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, | ||
| 1154 | 0x18, 0x18, 0xb8, 0x50, 0x07, 0xac, 0xe0, 0x0a, 0xa3, 0x40, 0x07, 0x23, | ||
| 1155 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xe4, 0x82, 0x1d, 0xb4, 0xc2, 0x2b, | ||
| 1156 | 0x9c, 0x42, 0x1d, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xa1, 0x0b, | ||
| 1157 | 0x77, 0x10, 0x0b, 0xb0, 0x60, 0x0a, 0x76, 0x30, 0x62, 0x90, 0x00, 0x20, | ||
| 1158 | 0x08, 0x06, 0xc6, 0x2e, 0xe0, 0x81, 0x2c, 0xc4, 0xc2, 0x1f, 0xdc, 0xc1, | ||
| 1159 | 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x58, 0xb6, 0x50, 0x07, 0x87, 0x2c, | ||
| 1160 | 0x8c, 0x26, 0x04, 0xc1, 0x70, 0x44, 0x00, 0x05, 0xdf, 0x2c, 0x43, 0x12, | ||
| 1161 | 0x04, 0xc3, 0x11, 0x02, 0x14, 0x7c, 0xb3, 0x0c, 0xc2, 0x10, 0x8c, 0x18, | ||
| 1162 | 0x3c, 0x00, 0x08, 0x82, 0x41, 0xe3, 0x0b, 0x7f, 0xd0, 0x30, 0x46, 0x01, | ||
| 1163 | 0x41, 0xb6, 0x60, 0x0b, 0x7c, 0x00, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, | ||
| 1164 | 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xcc, 0x12, 0x24, 0xc3, | ||
| 1165 | 0x11, 0x48, 0x17, 0x7c, 0xb3, 0x0c, 0x44, 0x11, 0x8c, 0x18, 0x3c, 0x00, | ||
| 1166 | 0x08, 0x82, 0x41, 0x43, 0x0e, 0xa5, 0x30, 0x49, 0xcc, 0x62, 0x59, 0xbc, | ||
| 1167 | 0xc0, 0x0b, 0xa2, 0x60, 0x8d, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03, 0x80, | ||
| 1168 | 0x20, 0x18, 0x34, 0xe6, 0x70, 0x0a, 0x16, 0xe5, 0x34, 0x18, 0xe6, 0x0b, | ||
| 1169 | 0xbe, 0x40, 0x0a, 0xd8, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x88, | ||
| 1170 | 0xc1, 0x01, 0x80, 0x20, 0x18, 0x58, 0xe5, 0x40, 0x0a, 0xd6, 0x2f, 0x8c, | ||
| 1171 | 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0x82, 0x0d, 0x08, | ||
| 1172 | 0x7c, 0x6c, 0x38, 0xe0, 0x63, 0xc3, 0x01, 0x9f, 0x11, 0x83, 0x03, 0x00, | ||
| 1173 | 0x41, 0x30, 0xb0, 0xd8, 0x61, 0x15, 0xba, 0x71, 0x18, 0x4d, 0x08, 0x80, | ||
| 1174 | 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0x11, 0x83, 0x05, 0x00, 0x41, | ||
| 1175 | 0x30, 0x78, 0xe6, 0x81, 0x16, 0x0e, 0xa3, 0x18, 0x84, 0x60, 0xc4, 0xe0, | ||
| 1176 | 0x00, 0x40, 0x10, 0x0c, 0xac, 0x78, 0x80, 0x05, 0x31, 0xa0, 0x85, 0xd1, | ||
| 1177 | 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, 0x84, 0x41, 0x18, 0x31, 0x58, | ||
| 1178 | 0x00, 0x10, 0x04, 0x83, 0x07, 0x1f, 0x72, 0x81, 0x59, 0x94, 0x41, 0x08, | ||
| 1179 | 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0, 0xb2, 0x87, 0x5a, 0x38, 0x03, | ||
| 1180 | 0x5e, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, | ||
| 1181 | 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x78, 0xfa, 0xc1, 0x17, 0x22, 0xe8, | ||
| 1182 | 0x19, 0x84, 0x60, 0x96, 0x20, 0x19, 0x8e, 0x20, 0x03, 0x59, 0x08, 0xbe, | ||
| 1183 | 0x59, 0x06, 0xe3, 0x08, 0x46, 0x0c, 0x1e, 0x00, 0x04, 0xc1, 0xa0, 0x01, | ||
| 1184 | 0x89, 0x70, 0x78, 0x03, 0x37, 0x40, 0x83, 0x33, 0x90, 0x03, 0x39, 0xc0, | ||
| 1185 | 0x07, 0x7c, 0xf0, 0x05, 0x39, 0x18, 0x4d, 0x08, 0x80, 0x11, 0x83, 0x07, | ||
| 1186 | 0x00, 0x41, 0x30, 0x68, 0x44, 0x62, 0x1c, 0xe4, 0x00, 0x0e, 0xd4, 0x20, | ||
| 1187 | 0x0d, 0xe8, 0x80, 0x0e, 0xf4, 0x41, 0x1f, 0xc0, 0x81, 0x0e, 0x46, 0x13, | ||
| 1188 | 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0, | ||
| 1189 | 0x0a, 0x09, 0x70, 0x90, 0x83, 0x7d, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, | ||
| 1190 | 0x21, 0x18, 0x4d, 0x18, 0x04, 0x1b, 0x10, 0xf8, 0xd8, 0x60, 0xc0, 0xc7, | ||
| 1191 | 0x06, 0x04, 0x3e, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x60, 0xa1, 0xc4, | ||
| 1192 | 0x39, 0xe4, 0xc1, 0x3f, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 1193 | 0x26, 0x0c, 0xc2, 0x88, 0xc1, 0x02, 0x80, 0x20, 0x18, 0x3c, 0x2f, 0x01, | ||
| 1194 | 0x0f, 0x87, 0x51, 0x0c, 0x42, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, | ||
| 1195 | 0x56, 0x4b, 0xb0, 0x83, 0x1f, 0xc0, 0xc3, 0x68, 0x42, 0x00, 0x8c, 0x26, | ||
| 1196 | 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x18, 0x2c, 0x00, 0x08, 0x82, 0xc1, | ||
| 1197 | 0x43, 0x13, 0xf5, 0xc0, 0x2c, 0xca, 0x20, 0x04, 0x23, 0x06, 0x07, 0x00, | ||
| 1198 | 0x82, 0x60, 0x60, 0xc9, 0x44, 0x3c, 0x8c, 0x02, 0x3e, 0x8c, 0x26, 0x04, | ||
| 1199 | 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x88, 0xc1, 0x02, 0x80, | ||
| 1200 | 0x20, 0x18, 0x3c, 0x39, 0xa1, 0x0f, 0x11, 0xf4, 0x0c, 0x42, 0x30, 0x4b, | ||
| 1201 | 0x90, 0x0c, 0x47, 0x80, 0x02, 0x39, 0x04, 0xdf, 0x2c, 0x03, 0x92, 0x04, | ||
| 1202 | 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xf0, 0x44, 0x3f, 0xac, 0x82, | ||
| 1203 | 0x2a, 0x90, 0xc2, 0x28, 0xb8, 0x82, 0x2b, 0xd0, 0x04, 0x4d, 0xe8, 0x83, | ||
| 1204 | 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, | ||
| 1205 | 0x3e, 0xf1, 0x0f, 0xae, 0xc0, 0x0a, 0xa6, 0x50, 0x0a, 0xb0, 0x00, 0x0b, | ||
| 1206 | 0x36, 0x61, 0x13, 0xfc, 0x00, 0x0b, 0xa3, 0x09, 0x01, 0x30, 0x62, 0xf0, | ||
| 1207 | 0x00, 0x20, 0x08, 0x06, 0x0d, 0x58, 0x84, 0x44, 0x2c, 0xb8, 0x02, 0x2a, | ||
| 1208 | 0x9c, 0x82, 0x2c, 0xc8, 0x02, 0x4e, 0xe0, 0x84, 0x3f, 0xc8, 0xc2, 0x68, | ||
| 1209 | 0x42, 0x00, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x81, 0xe5, 0x13, 0xfd, | ||
| 1210 | 0xf0, 0x0a, 0x38, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, | ||
| 1211 | 0x30, 0x08, 0x36, 0x24, 0xf0, 0xb1, 0x01, 0x81, 0x8f, 0x0d, 0x07, 0x7c, | ||
| 1212 | 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0, 0x2a, 0x0b, 0x92, 0xb0, 0x05, | ||
| 1213 | 0x9e, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, | ||
| 1214 | 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x78, 0xd8, 0xa2, 0x25, 0x0e, 0xa3, | ||
| 1215 | 0x18, 0x84, 0x60, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x2c, 0xb5, 0x48, | ||
| 1216 | 0x89, 0x5d, 0x68, 0x89, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, | ||
| 1217 | 0x84, 0x41, 0x18, 0x31, 0x58, 0x00, 0x10, 0x04, 0x83, 0x27, 0x2e, 0x64, | ||
| 1218 | 0x82, 0x59, 0x94, 0x41, 0x08, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0, | ||
| 1219 | 0x7a, 0x0b, 0x97, 0x00, 0x87, 0x9a, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, | ||
| 1220 | 0x21, 0x18, 0x4d, 0x18, 0x84, 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x78, | ||
| 1221 | 0xec, 0xe2, 0x26, 0x22, 0xe8, 0x19, 0x84, 0x60, 0x96, 0x20, 0x19, 0xa8, | ||
| 1222 | 0x19, 0xe4, 0x42, 0x40, 0x09, 0x02, 0x16, 0x0c, 0x0b, 0xb1, 0x0d, 0xc0, | ||
| 1223 | 0x36, 0x8e, 0x81, 0x9a, 0x41, 0x2e, 0x04, 0x90, 0x20, 0x50, 0xc1, 0x70, | ||
| 1224 | 0x10, 0xdc, 0x00, 0x74, 0xe3, 0x18, 0xa8, 0x19, 0xe4, 0x42, 0xc0, 0x07, | ||
| 1225 | 0x02, 0x14, 0x0c, 0x03, 0xd1, 0x0d, 0x80, 0x37, 0x8e, 0x81, 0x9a, 0x41, | ||
| 1226 | 0x2e, 0x04, 0xde, 0x20, 0x78, 0xc3, 0xe0, 0x0d, 0x84, 0x37, 0x00, 0xde, | ||
| 1227 | 0x38, 0x46, 0x13, 0xc4, 0x41, 0x18, 0x8e, 0x08, 0x60, 0x22, 0xf8, 0x66, | ||
| 1228 | 0x19, 0x94, 0x25, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x88, 0x2f, | ||
| 1229 | 0xea, 0xc2, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xa8, 0x2f, 0xec, | ||
| 1230 | 0xc2, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xc8, 0x2f, 0xee, 0xc2, | ||
| 1231 | 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xe8, 0x2f, 0x7a, 0x62, 0x18, | ||
| 1232 | 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x08, 0x34, 0x7c, 0x62, 0x18, 0x31, | ||
| 1233 | 0x30, 0x00, 0x10, 0x04, 0x83, 0x28, 0x34, 0x7e, 0x62, 0xb0, 0xe1, 0x1f, | ||
| 1234 | 0xe4, 0x63, 0x03, 0x48, 0xc8, 0xc7, 0x86, 0x90, 0x90, 0xcf, 0x88, 0x81, | ||
| 1235 | 0x01, 0x80, 0x20, 0x18, 0x44, 0xa5, 0x41, 0x16, 0xc3, 0x88, 0x81, 0x01, | ||
| 1236 | 0x80, 0x20, 0x18, 0x44, 0xa6, 0x51, 0x16, 0xc3, 0x88, 0x81, 0x01, 0x80, | ||
| 1237 | 0x20, 0x18, 0x44, 0xa7, 0x61, 0x16, 0x83, 0x0d, 0x26, 0x01, 0x1f, 0x1b, | ||
| 1238 | 0x4e, 0x02, 0x3e, 0x36, 0xa0, 0x04, 0x7c, 0x46, 0x0c, 0x0e, 0x00, 0x04, | ||
| 1239 | 0xc1, 0x60, 0x52, 0x0d, 0xb9, 0x18, 0x42, 0x62, 0xc4, 0xe0, 0x00, 0x40, | ||
| 1240 | 0x10, 0x0c, 0xa6, 0xd5, 0x98, 0x8b, 0x41, 0x24, 0x46, 0x0c, 0x0e, 0x00, | ||
| 1241 | 0x04, 0xc1, 0x60, 0x62, 0x0d, 0xba, 0x18, 0x46, 0xc2, 0x92, 0x96, 0x90, | ||
| 1242 | 0x8f, 0x25, 0x2e, 0x21, 0x1f, 0x4b, 0x5e, 0x42, 0x3e, 0x16, 0x13, 0x43, | ||
| 1243 | 0x7c, 0x4c, 0x26, 0x86, 0xf8, 0xd8, 0x4c, 0x0c, 0xf1, 0xb1, 0x64, 0xa0, | ||
| 1244 | 0x8f, 0x25, 0x03, 0x7d, 0x2c, 0x19, 0xe8, 0x33, 0x62, 0x60, 0x00, 0x20, | ||
| 1245 | 0x08, 0x06, 0xd1, 0x6d, 0xc0, 0xc6, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, | ||
| 1246 | 0x06, 0x11, 0x6e, 0xc4, 0xc6, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, | ||
| 1247 | 0x51, 0x6e, 0xc8, 0xc6, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x91, | ||
| 1248 | 0x6e, 0xe0, 0xc5, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xd1, 0x6e, | ||
| 1249 | 0xe4, 0xc5, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x11, 0x6f, 0xe8, | ||
| 1250 | 0xc5, 0x60, 0x83, 0x4f, 0xc8, 0xc7, 0x86, 0x9f, 0x90, 0x8f, 0x0d, 0x60, | ||
| 1251 | 0x21, 0x9f, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0xc0, 0xe3, 0x2f, | ||
| 1252 | 0x86, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0xc2, 0x03, 0x34, 0x86, | ||
| 1253 | 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0xc4, 0x23, 0x34, 0x06, 0x1b, | ||
| 1254 | 0xfc, 0x42, 0x3e, 0x36, 0xfc, 0x85, 0x7c, 0x6c, 0x00, 0x0d, 0xf9, 0x8c, | ||
| 1255 | 0x18, 0x1c, 0x00, 0x08, 0x82, 0x81, 0x45, 0x1e, 0xa3, 0x51, 0x13, 0xe1, | ||
| 1256 | 0x31, 0x9a, 0x10, 0x0c, 0x56, 0x04, 0xf4, 0xb1, 0x42, 0xa0, 0x8f, 0x15, | ||
| 1257 | 0x03, 0x7d, 0x66, 0x09, 0x96, 0x81, 0x8a, 0xc1, 0x50, 0xd4, 0x21, 0x19, | ||
| 1258 | 0xa8, 0x18, 0x0c, 0x45, 0x1d, 0x92, 0x81, 0x8a, 0xc1, 0x50, 0xd4, 0x21, | ||
| 1259 | 0x19, 0x31, 0x38, 0x00, 0x10, 0x04, 0x03, 0x8b, 0x3d, 0x56, 0xa3, 0x27, | ||
| 1260 | 0xd2, 0x63, 0x34, 0x21, 0x00, 0x86, 0x23, 0x02, 0xb3, 0x70, 0xbe, 0x59, | ||
| 1261 | 0x06, 0xa6, 0x0a, 0x86, 0x23, 0x04, 0xb3, 0x08, 0xbe, 0x59, 0x86, 0xc6, | ||
| 1262 | 0x09, 0x46, 0x13, 0x88, 0xc0, 0x02, 0x44, 0x3e, 0x26, 0x20, 0xf2, 0xb1, | ||
| 1263 | 0x01, 0x91, 0xcf, 0x2c, 0x41, 0x35, 0x1c, 0x71, 0xc8, 0x45, 0xf0, 0xcd, | ||
| 1264 | 0x32, 0x3c, 0x55, 0x30, 0x1c, 0xd1, 0x07, 0x73, 0x11, 0x7c, 0xb3, 0x0c, | ||
| 1265 | 0x50, 0x14, 0x58, 0x23, 0x1a, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, | ||
| 1266 | 0x03, 0xcc, 0x3e, 0x6a, 0x43, 0x34, 0x9a, 0x60, 0xc4, 0x00, 0x01, 0x40, | ||
| 1267 | 0x10, 0x0c, 0xb0, 0xfb, 0xb0, 0x0d, 0xd1, 0x68, 0x02, 0x83, 0x44, 0x43, | ||
| 1268 | 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xe5, 0x07, 0x6e, 0x88, | ||
| 1269 | 0x06, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x01, 0xa6, 0x1f, 0xb9, | ||
| 1270 | 0x21, 0x1a, 0x50, 0x60, 0x93, 0x68, 0xc8, 0x67, 0xc4, 0x00, 0x01, 0x40, | ||
| 1271 | 0x10, 0x0c, 0x30, 0xfe, 0xd8, 0x0d, 0xd1, 0x98, 0x82, 0x11, 0x03, 0x04, | ||
| 1272 | 0x00, 0x41, 0x30, 0xc0, 0xfa, 0x83, 0x37, 0x44, 0x63, 0x0a, 0x66, 0x09, | ||
| 1273 | 0xa2, 0x81, 0x8a, 0xc1, 0x81, 0xd8, 0xe0, 0x19, 0xa8, 0x18, 0x14, 0x88, | ||
| 1274 | 0x0d, 0x9e, 0x81, 0x8a, 0xc1, 0x80, 0xd8, 0xe0, 0x19, 0x31, 0x38, 0x00, | ||
| 1275 | 0x10, 0x04, 0x83, 0x69, 0x44, 0xd6, 0x43, 0x08, 0x46, 0x0c, 0x0e, 0x00, | ||
| 1276 | 0x04, 0xc1, 0x60, 0x22, 0x11, 0xf6, 0x20, 0x82, 0xe1, 0x88, 0x80, 0x2f, | ||
| 1277 | 0x84, 0x6f, 0x96, 0x41, 0x9a, 0x82, 0xd1, 0x84, 0x2c, 0xb0, 0x60, 0x90, | ||
| 1278 | 0x8f, 0x05, 0x7e, 0x01, 0x9f, 0xd1, 0x04, 0x4e, 0xb0, 0xc0, 0x90, 0x8f, | ||
| 1279 | 0x05, 0xa1, 0x01, 0x1f, 0x23, 0x02, 0xfa, 0x58, 0xd0, 0xc8, 0xc7, 0x84, | ||
| 1280 | 0x46, 0x3e, 0x36, 0x34, 0xf2, 0x99, 0x25, 0x98, 0x06, 0x2a, 0x06, 0x43, | ||
| 1281 | 0x02, 0x83, 0x68, 0xa0, 0x62, 0x30, 0x24, 0x30, 0x88, 0x06, 0x2a, 0x06, | ||
| 1282 | 0x43, 0x02, 0x83, 0x68, 0x96, 0x81, 0xaa, 0x3a, 0x1b, 0xd0, 0x43, 0x3e, | ||
| 1283 | 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xc9, 0x48, 0x7c, 0xa0, 0xc7, | ||
| 1284 | 0x10, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x01, 0x36, 0x23, 0xf2, 0x81, | ||
| 1285 | 0x1e, 0x43, 0x60, 0x06, 0x7a, 0xc8, 0x67, 0xc4, 0x00, 0x01, 0x40, 0x10, | ||
| 1286 | 0x0c, 0xb0, 0x1a, 0xa1, 0x0f, 0xf4, 0x30, 0x82, 0x11, 0x03, 0x04, 0x00, | ||
| 1287 | 0x41, 0x30, 0xc0, 0x6c, 0xa4, 0x3e, 0xd0, 0xc3, 0x08, 0x2c, 0x41, 0x0f, | ||
| 1288 | 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x01, 0x86, 0x23, 0xf7, 0x81, | ||
| 1289 | 0x1e, 0x49, 0x30, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x58, 0x8e, 0xe0, | ||
| 1290 | 0x07, 0x7a, 0x24, 0xc1, 0x2c, 0x41, 0x35, 0xd0, 0x32, 0x90, 0xc3, 0x42, | ||
| 1291 | 0x0b, 0x8d, 0x43, 0x61, 0x13, 0x39, 0x38, 0x03, 0x2d, 0x03, 0x39, 0x2c, | ||
| 1292 | 0xb4, 0xd0, 0x28, 0x14, 0x36, 0x91, 0x83, 0x33, 0xd0, 0x32, 0x90, 0xc3, | ||
| 1293 | 0x42, 0x0b, 0x8d, 0x41, 0x61, 0x13, 0x39, 0x38, 0xc3, 0x11, 0xe6, 0x50, | ||
| 1294 | 0x1b, 0xc1, 0x37, 0xcb, 0x60, 0x85, 0x41, 0x30, 0x9a, 0x90, 0x1a, 0xc0, | ||
| 1295 | 0x70, 0x44, 0x80, 0x1b, 0xce, 0x37, 0xcb, 0x70, 0x81, 0x41, 0x30, 0x1c, | ||
| 1296 | 0x61, 0xf4, 0x87, 0xf2, 0xcd, 0x32, 0x64, 0x58, 0x60, 0x47, 0x7f, 0xc8, | ||
| 1297 | 0x67, 0x96, 0x40, 0x33, 0xa4, 0x3f, 0xe0, 0x33, 0x62, 0x60, 0x00, 0x20, | ||
| 1298 | 0x08, 0x06, 0x91, 0x99, 0xfc, 0x48, 0x60, 0x81, 0x7f, 0xc8, 0x67, 0xc4, | ||
| 1299 | 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x22, 0x34, 0x31, 0x91, 0xc0, 0x82, 0xff, | ||
| 1300 | 0x90, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x6a, 0x92, 0x22, | ||
| 1301 | 0xc1, 0x2c, 0x81, 0x36, 0x50, 0x31, 0x38, 0x98, 0x90, 0x0d, 0x47, 0x38, | ||
| 1302 | 0x26, 0xa2, 0x7c, 0xb3, 0x0c, 0xdc, 0x16, 0xd8, 0x63, 0x22, 0xf2, 0x99, | ||
| 1303 | 0x25, 0xe8, 0x0c, 0x32, 0x11, 0xf8, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, | ||
| 1304 | 0x41, 0xf4, 0x26, 0x68, 0x12, 0x58, 0x70, 0x22, 0xf2, 0x19, 0x31, 0x30, | ||
| 1305 | 0x00, 0x10, 0x04, 0x83, 0x28, 0x4e, 0x5e, 0x24, 0xb0, 0x00, 0x45, 0xe4, | ||
| 1306 | 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xd1, 0x9c, 0xc8, 0x48, 0x30, | ||
| 1307 | 0x4b, 0xd0, 0x0d, 0x54, 0x0c, 0xce, 0x26, 0x70, 0xc3, 0x11, 0xd6, 0x8b, | ||
| 1308 | 0x28, 0xdf, 0x2c, 0xc3, 0xe7, 0x05, 0x76, 0xbd, 0x88, 0x7c, 0x66, 0x09, | ||
| 1309 | 0xc0, 0xc0, 0xb0, 0x17, 0x81, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, | ||
| 1310 | 0x44, 0x78, 0x12, 0x27, 0x81, 0x05, 0x30, 0x22, 0x9f, 0x11, 0x03, 0x03, | ||
| 1311 | 0x00, 0x41, 0x30, 0x88, 0xf4, 0x04, 0x47, 0x02, 0x0b, 0x62, 0x44, 0x3e, | ||
| 1312 | 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x10, 0xf1, 0xc9, 0x8e, 0x04, 0xb3, | ||
| 1313 | 0x04, 0x60, 0x30, 0xd0, 0x31, 0x80, 0x82, 0x45, 0x06, 0x1f, 0x19, 0x78, | ||
| 1314 | 0x03, 0x1d, 0x03, 0x28, 0x58, 0xd4, 0x47, 0x79, 0x03, 0x1d, 0x03, 0x28, | ||
| 1315 | 0x58, 0xc6, 0x27, 0x79, 0xa3, 0x09, 0xe8, 0x31, 0x58, 0x40, 0xc8, 0xc7, | ||
| 1316 | 0x04, 0x42, 0x3e, 0x36, 0x10, 0xf2, 0x99, 0x25, 0xd0, 0x83, 0xe1, 0x08, | ||
| 1317 | 0x95, 0x00, 0x91, 0xe0, 0x1b, 0x4d, 0x68, 0x8f, 0x61, 0x96, 0x41, 0x0c, | ||
| 1318 | 0xda, 0x40, 0xb0, 0x20, 0x0d, 0xe4, 0x63, 0x42, 0x1a, 0xc8, 0xc7, 0x86, | ||
| 1319 | 0x34, 0x90, 0xcf, 0x68, 0x42, 0x7c, 0x00, 0xc3, 0x11, 0x01, 0x88, 0x38, | ||
| 1320 | 0xdf, 0x2c, 0x83, 0x1e, 0x8c, 0x41, 0x30, 0x1c, 0x51, 0x88, 0x88, 0xf2, | ||
| 1321 | 0xcd, 0x32, 0x94, 0x01, 0x19, 0x04, 0x66, 0x90, 0x88, 0x7c, 0x66, 0x09, | ||
| 1322 | 0xcc, 0x60, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0xa2, 0x56, 0x31, 0x95, | ||
| 1323 | 0x63, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x22, 0x57, 0x61, 0x93, 0xc0, | ||
| 1324 | 0x02, 0x14, 0x91, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0xb0, | ||
| 1325 | 0xf2, 0x26, 0x81, 0x05, 0x2b, 0x22, 0x1f, 0x0b, 0x5a, 0x04, 0x3e, 0xb3, | ||
| 1326 | 0x04, 0x66, 0x30, 0x50, 0x31, 0x38, 0x64, 0x20, 0x94, 0xc1, 0x70, 0x44, | ||
| 1327 | 0xb3, 0x22, 0xca, 0x37, 0xcb, 0x80, 0x06, 0x67, 0x10, 0x98, 0xd3, 0x22, | ||
| 1328 | 0xf2, 0x99, 0x25, 0x48, 0x83, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, | ||
| 1329 | 0x6c, 0xe5, 0x55, 0x9e, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0x6e, | ||
| 1330 | 0xa5, 0x4e, 0x02, 0x0b, 0x62, 0x44, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, | ||
| 1331 | 0x60, 0x10, 0xe5, 0x0a, 0x9e, 0x04, 0x16, 0xd0, 0x88, 0x7c, 0x2c, 0xb0, | ||
| 1332 | 0x11, 0xf8, 0xcc, 0x12, 0xa4, 0xc1, 0x40, 0xc5, 0xe0, 0x9c, 0x81, 0x80, | ||
| 1333 | 0x06, 0xc3, 0x11, 0x15, 0x8d, 0x28, 0xdf, 0x2c, 0xc3, 0x1a, 0xa8, 0x41, | ||
| 1334 | 0x60, 0x96, 0x8d, 0xc8, 0x67, 0x96, 0x80, 0x0d, 0x46, 0x0c, 0x0c, 0x00, | ||
| 1335 | 0x04, 0xc1, 0x20, 0xfa, 0x15, 0x5c, 0xb9, 0x46, 0x0c, 0x0c, 0x00, 0x04, | ||
| 1336 | 0xc1, 0x20, 0x02, 0x17, 0x3f, 0x09, 0x2c, 0xd0, 0x11, 0xf9, 0x8c, 0x18, | ||
| 1337 | 0x18, 0x00, 0x08, 0x82, 0x41, 0x24, 0x2e, 0xa1, 0x12, 0x58, 0xd0, 0x23, | ||
| 1338 | 0xf2, 0xb1, 0xe0, 0x47, 0xe0, 0x33, 0x4b, 0xc0, 0x06, 0x03, 0x15, 0x83, | ||
| 1339 | 0xa3, 0x06, 0xc2, 0x1a, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x64, | ||
| 1340 | 0x2e, 0xab, 0x32, 0x8d, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x74, 0x2e, | ||
| 1341 | 0xac, 0xb2, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x84, 0x2e, 0xad, | ||
| 1342 | 0x32, 0xcc, 0x12, 0xe8, 0xc1, 0x2c, 0x83, 0x1b, 0xe4, 0x81, 0x5b, 0x18, | ||
| 1343 | 0x2b, 0xf4, 0x89, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x00, 0x3b, | ||
| 1344 | 0x17, 0x53, 0xe9, 0x13, 0x56, 0x08, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, | ||
| 1345 | 0x00, 0x43, 0x97, 0x53, 0xe9, 0x13, 0x56, 0x08, 0xec, 0x15, 0xfa, 0x44, | ||
| 1346 | 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xa9, 0x4b, 0xaa, 0xf4, | ||
| 1347 | 0xc9, 0x2b, 0x04, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xad, 0x8b, | ||
| 1348 | 0xaa, 0xf4, 0xc9, 0x2b, 0x04, 0x26, 0x0b, 0x7d, 0x22, 0x9f, 0x11, 0x03, | ||
| 1349 | 0x04, 0x00, 0x41, 0x30, 0xc0, 0xda, 0x85, 0x55, 0xfa, 0x44, 0x16, 0x82, | ||
| 1350 | 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0xc0, 0xdc, 0xa5, 0x55, 0xfa, 0x44, | ||
| 1351 | 0x16, 0x02, 0x6b, 0x83, 0x43, 0x3e, 0xe6, 0x06, 0x85, 0x7c, 0xec, 0x0d, | ||
| 1352 | 0x06, 0xf9, 0x8c, 0x26, 0xf4, 0x08, 0x30, 0x1c, 0x11, 0xb0, 0x89, 0xf3, | ||
| 1353 | 0xcd, 0x32, 0xe8, 0xc1, 0x1b, 0x04, 0xc3, 0x11, 0x85, 0x9b, 0x28, 0xdf, | ||
| 1354 | 0x2c, 0x43, 0x1c, 0xc0, 0x41, 0x60, 0x06, 0x9c, 0xc8, 0x67, 0x96, 0x40, | ||
| 1355 | 0x0e, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0x20, 0xca, 0x17, 0x79, 0x39, | ||
| 1356 | 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0x20, 0xd2, 0x17, 0x5c, 0x09, 0x2c, | ||
| 1357 | 0xa0, 0x13, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0xc4, 0x2f, | ||
| 1358 | 0xbb, 0x12, 0x58, 0x70, 0x27, 0xf2, 0xb1, 0x20, 0x4f, 0xe0, 0x33, 0x4b, | ||
| 1359 | 0x20, 0x07, 0x03, 0x15, 0x83, 0x03, 0x07, 0x42, 0x1c, 0x0c, 0x47, 0x34, | ||
| 1360 | 0x77, 0xa2, 0x7c, 0xb3, 0x0c, 0x74, 0x30, 0x07, 0x81, 0x39, 0x79, 0x22, | ||
| 1361 | 0x9f, 0x59, 0x82, 0x3a, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x48, | ||
| 1362 | 0x64, 0xf6, 0xe5, 0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x68, 0x64, | ||
| 1363 | 0xc2, 0x25, 0xb0, 0xa0, 0x4f, 0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, | ||
| 1364 | 0x06, 0x51, 0xc9, 0x90, 0x4b, 0x60, 0x01, 0xa8, 0xc8, 0xc7, 0x02, 0x51, | ||
| 1365 | 0x81, 0xcf, 0x2c, 0x41, 0x1d, 0x0c, 0x54, 0x0c, 0xce, 0x1c, 0x08, 0x74, | ||
| 1366 | 0x30, 0x1c, 0x51, 0x81, 0x8a, 0xf2, 0xcd, 0x32, 0xdc, 0x81, 0x1d, 0x04, | ||
| 1367 | 0x66, 0x89, 0x8a, 0x7c, 0x66, 0x09, 0xf0, 0x60, 0xc4, 0xc0, 0x00, 0x40, | ||
| 1368 | 0x10, 0x0c, 0xa2, 0x95, 0x21, 0x99, 0x6b, 0xc4, 0xc0, 0x00, 0x40, 0x10, | ||
| 1369 | 0x0c, 0x22, 0x96, 0x51, 0x97, 0xc0, 0x02, 0x53, 0x91, 0xcf, 0x88, 0x81, | ||
| 1370 | 0x01, 0x80, 0x20, 0x18, 0x44, 0x2e, 0xd3, 0x2e, 0x81, 0x05, 0xa9, 0x22, | ||
| 1371 | 0x1f, 0x0b, 0x56, 0x05, 0x3e, 0xb3, 0x04, 0x78, 0x30, 0x50, 0x31, 0x38, | ||
| 1372 | 0x76, 0x20, 0xdc, 0xc1, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x32, | ||
| 1373 | 0x73, 0x2f, 0xd3, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x33, 0x83, | ||
| 1374 | 0x2f, 0xcb, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x34, 0x93, 0x2f, | ||
| 1375 | 0xc3, 0x2c, 0x81, 0x1e, 0x18, 0x2c, 0xe0, 0x83, 0x7c, 0x2c, 0x16, 0xf0, | ||
| 1376 | 0x41, 0x3e, 0x26, 0x0b, 0xf8, 0x20, 0x9f, 0x59, 0x02, 0x3d, 0x18, 0xa8, | ||
| 1377 | 0x19, 0xdc, 0x02, 0x0c, 0x8c, 0x3c, 0x20, 0x0b, 0x31, 0x20, 0x07, 0x36, | ||
| 1378 | 0x60, 0x05, 0x37, 0x60, 0xf0, 0x60, 0xa0, 0x66, 0x70, 0x0b, 0x30, 0x30, | ||
| 1379 | 0xf2, 0x80, 0x2c, 0xc4, 0x80, 0x1c, 0xd8, 0x80, 0x15, 0xdc, 0x80, 0xc1, | ||
| 1380 | 0x83, 0x81, 0x9a, 0xc1, 0x2d, 0xc0, 0xc0, 0xc8, 0x03, 0xb2, 0x10, 0x03, | ||
| 1381 | 0x72, 0x60, 0x03, 0x56, 0x70, 0x03, 0x06, 0x0f, 0x6c, 0x48, 0x15, 0xf9, | ||
| 1382 | 0xd8, 0x90, 0x2a, 0xf2, 0xb1, 0x21, 0x55, 0xe4, 0x63, 0xe5, 0x91, 0x2a, | ||
| 1383 | 0xf2, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0x44, 0x6c, 0x46, 0x26, | ||
| 1384 | 0x67, 0x72, 0xe6, 0x65, 0x88, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, | ||
| 1385 | 0xc4, 0x66, 0x64, 0x72, 0x26, 0x67, 0x4e, 0x66, 0x18, 0x31, 0x48, 0x00, | ||
| 1386 | 0x10, 0x04, 0x03, 0x44, 0x6c, 0x46, 0x26, 0x67, 0x72, 0xc6, 0x65, 0x84, | ||
| 1387 | 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xc4, 0x66, 0x64, 0x72, 0x26, | ||
| 1388 | 0x67, 0x62, 0x26, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 1389 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl new file mode 100644 index 0000000..1c869b8 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | |||
| 2 | #include "D3D12_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | [RootSignature(AdvancedRS)] | ||
| 5 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 6 | { | ||
| 7 | return AdvancedPixelShader(input); | ||
| 8 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h new file mode 100644 index 0000000..7b1a917 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h | |||
| @@ -0,0 +1,490 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; SV_Position 0 xyzw 0 POS float | ||
| 8 | ; TEXCOORD 0 xy 1 NONE float | ||
| 9 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; SV_Target 0 xyzw 0 TARGET float xyzw | ||
| 17 | ; | ||
| 18 | ; shader hash: cef595d746206d54840a8f4fa9597d19 | ||
| 19 | ; | ||
| 20 | ; Pipeline Runtime Information: | ||
| 21 | ; | ||
| 22 | ; Pixel Shader | ||
| 23 | ; DepthOutput=0 | ||
| 24 | ; SampleFrequency=0 | ||
| 25 | ; | ||
| 26 | ; | ||
| 27 | ; Input signature: | ||
| 28 | ; | ||
| 29 | ; Name Index InterpMode DynIdx | ||
| 30 | ; -------------------- ----- ---------------------- ------ | ||
| 31 | ; SV_Position 0 noperspective | ||
| 32 | ; TEXCOORD 0 linear | ||
| 33 | ; COLOR 0 linear | ||
| 34 | ; | ||
| 35 | ; Output signature: | ||
| 36 | ; | ||
| 37 | ; Name Index InterpMode DynIdx | ||
| 38 | ; -------------------- ----- ---------------------- ------ | ||
| 39 | ; SV_Target 0 | ||
| 40 | ; | ||
| 41 | ; Buffer Definitions: | ||
| 42 | ; | ||
| 43 | ; cbuffer Constants | ||
| 44 | ; { | ||
| 45 | ; | ||
| 46 | ; struct Constants | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; float scRGB_output; ; Offset: 0 | ||
| 50 | ; float texture_type; ; Offset: 4 | ||
| 51 | ; float input_type; ; Offset: 8 | ||
| 52 | ; float color_scale; ; Offset: 12 | ||
| 53 | ; float tonemap_method; ; Offset: 16 | ||
| 54 | ; float tonemap_factor1; ; Offset: 20 | ||
| 55 | ; float tonemap_factor2; ; Offset: 24 | ||
| 56 | ; float sdr_white_point; ; Offset: 28 | ||
| 57 | ; float4 Yoffset; ; Offset: 32 | ||
| 58 | ; float4 Rcoeff; ; Offset: 48 | ||
| 59 | ; float4 Gcoeff; ; Offset: 64 | ||
| 60 | ; float4 Bcoeff; ; Offset: 80 | ||
| 61 | ; | ||
| 62 | ; } Constants; ; Offset: 0 Size: 96 | ||
| 63 | ; | ||
| 64 | ; } | ||
| 65 | ; | ||
| 66 | ; | ||
| 67 | ; Resource Bindings: | ||
| 68 | ; | ||
| 69 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 70 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 71 | ; Constants cbuffer NA NA CB0 cb1 1 | ||
| 72 | ; | ||
| 73 | ; | ||
| 74 | ; ViewId state: | ||
| 75 | ; | ||
| 76 | ; Number of inputs: 12, outputs: 4 | ||
| 77 | ; Outputs dependent on ViewId: { } | ||
| 78 | ; Inputs contributing to computation of Outputs: | ||
| 79 | ; output 0 depends on inputs: { 8 } | ||
| 80 | ; output 1 depends on inputs: { 9 } | ||
| 81 | ; output 2 depends on inputs: { 10 } | ||
| 82 | ; output 3 depends on inputs: { 11 } | ||
| 83 | ; | ||
| 84 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 85 | target triple = "dxil-ms-dx" | ||
| 86 | |||
| 87 | %dx.types.Handle = type { i8* } | ||
| 88 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 89 | %Constants = type { float, float, float, float, float, float, float, float, <4 x float>, <4 x float>, <4 x float>, <4 x float> } | ||
| 90 | |||
| 91 | define void @main() { | ||
| 92 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 93 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 94 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 95 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 96 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 97 | %6 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 98 | %7 = extractvalue %dx.types.CBufRet.f32 %6, 3 | ||
| 99 | %8 = fmul fast float %7, %2 | ||
| 100 | %9 = fmul fast float %7, %3 | ||
| 101 | %10 = fmul fast float %7, %4 | ||
| 102 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %8) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 103 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %9) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 104 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %10) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 105 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 106 | ret void | ||
| 107 | } | ||
| 108 | |||
| 109 | ; Function Attrs: nounwind readnone | ||
| 110 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 111 | |||
| 112 | ; Function Attrs: nounwind | ||
| 113 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 114 | |||
| 115 | ; Function Attrs: nounwind readonly | ||
| 116 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 117 | |||
| 118 | ; Function Attrs: nounwind readonly | ||
| 119 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 120 | |||
| 121 | attributes #0 = { nounwind readnone } | ||
| 122 | attributes #1 = { nounwind } | ||
| 123 | attributes #2 = { nounwind readonly } | ||
| 124 | |||
| 125 | !llvm.ident = !{!0} | ||
| 126 | !dx.version = !{!1} | ||
| 127 | !dx.valver = !{!2} | ||
| 128 | !dx.shaderModel = !{!3} | ||
| 129 | !dx.resources = !{!4} | ||
| 130 | !dx.viewIdState = !{!7} | ||
| 131 | !dx.entryPoints = !{!8} | ||
| 132 | |||
| 133 | !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} | ||
| 134 | !1 = !{i32 1, i32 0} | ||
| 135 | !2 = !{i32 1, i32 6} | ||
| 136 | !3 = !{!"ps", i32 6, i32 0} | ||
| 137 | !4 = !{null, null, !5, null} | ||
| 138 | !5 = !{!6} | ||
| 139 | !6 = !{i32 0, %Constants* undef, !"", i32 0, i32 1, i32 1, i32 96, null} | ||
| 140 | !7 = !{[14 x i32] [i32 12, i32 4, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]} | ||
| 141 | !8 = !{void ()* @main, !"main", !9, !4, null} | ||
| 142 | !9 = !{!10, !16, null} | ||
| 143 | !10 = !{!11, !13, !14} | ||
| 144 | !11 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, null} | ||
| 145 | !12 = !{i32 0} | ||
| 146 | !13 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, null} | ||
| 147 | !14 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !15} | ||
| 148 | !15 = !{i32 3, i32 15} | ||
| 149 | !16 = !{!17} | ||
| 150 | !17 = !{i32 0, !"SV_Target", i8 9, i8 16, !12, i8 0, i32 1, i8 4, i32 0, i8 0, !15} | ||
| 151 | |||
| 152 | #endif | ||
| 153 | |||
| 154 | const unsigned char g_main[] = { | ||
| 155 | 0x44, 0x58, 0x42, 0x43, 0xe0, 0x6a, 0x51, 0x4c, 0x14, 0x1a, 0x6a, 0x67, | ||
| 156 | 0x04, 0x23, 0x10, 0x54, 0xf8, 0xe3, 0xa6, 0x1a, 0x01, 0x00, 0x00, 0x00, | ||
| 157 | 0xb1, 0x0f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 158 | 0x50, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, | ||
| 159 | 0x01, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, | ||
| 160 | 0xa1, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, | ||
| 161 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, | ||
| 162 | 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 163 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 164 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 165 | 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 166 | 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 167 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 168 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, | ||
| 169 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 170 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 171 | 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, | ||
| 172 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, | ||
| 173 | 0x4f, 0x52, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01, | ||
| 174 | 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, | ||
| 175 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, | ||
| 176 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, | ||
| 177 | 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, | ||
| 178 | 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, | ||
| 179 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 180 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 181 | 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00, 0x00, | ||
| 182 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 183 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 184 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 185 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 186 | 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, | ||
| 187 | 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 188 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 189 | 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 190 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, | ||
| 191 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, | ||
| 192 | 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 193 | 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 194 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 195 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 197 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, | ||
| 198 | 0x30, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 199 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, | ||
| 200 | 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 201 | 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 202 | 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 203 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 204 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x2c, 0x07, 0x00, | ||
| 205 | 0x00, 0x60, 0x00, 0x00, 0x00, 0xcb, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, | ||
| 206 | 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x07, 0x00, | ||
| 207 | 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc2, 0x01, 0x00, | ||
| 208 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 209 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 210 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 211 | 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, | ||
| 212 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, | ||
| 213 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, | ||
| 214 | 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 215 | 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 216 | 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, | ||
| 217 | 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, | ||
| 218 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, | ||
| 219 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, | ||
| 220 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, | ||
| 221 | 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, | ||
| 222 | 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, | ||
| 223 | 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x5c, 0x23, 0x00, 0x25, 0x00, 0x14, | ||
| 224 | 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, | ||
| 225 | 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, | ||
| 226 | 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, | ||
| 227 | 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, | ||
| 228 | 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, | ||
| 229 | 0x42, 0x6d, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x90, 0x47, 0x70, 0x20, | ||
| 230 | 0x60, 0x18, 0x81, 0x18, 0x2e, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, 0x92, | ||
| 231 | 0x10, 0x33, 0xc6, 0x18, 0x63, 0x8c, 0x31, 0xe7, 0x9c, 0x44, 0xd3, 0x81, | ||
| 232 | 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, | ||
| 233 | 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, | ||
| 234 | 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 235 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, | ||
| 236 | 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 237 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, | ||
| 238 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, | ||
| 239 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, | ||
| 240 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 241 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 242 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 243 | 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, | ||
| 244 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, | ||
| 245 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, | ||
| 246 | 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, | ||
| 247 | 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, | ||
| 248 | 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 249 | 0x20, 0x0b, 0x04, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 250 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 251 | 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1c, 0x50, 0x06, 0xe5, 0x50, | ||
| 252 | 0x12, 0x85, 0x50, 0x10, 0x85, 0x51, 0x20, 0x85, 0x52, 0x30, 0x85, 0x53, | ||
| 253 | 0x40, 0x05, 0x56, 0x80, 0x01, 0x05, 0x1a, 0x50, 0x04, 0xe5, 0x41, 0xa5, | ||
| 254 | 0x24, 0xca, 0xa0, 0x10, 0x46, 0x00, 0x8a, 0xa0, 0x40, 0xe8, 0xd5, 0x00, | ||
| 255 | 0xd1, 0x19, 0x00, 0xaa, 0x33, 0x00, 0x64, 0xc7, 0x72, 0x18, 0x02, 0x00, | ||
| 256 | 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x00, 0x79, 0x18, 0x00, | ||
| 257 | 0x00, 0xc9, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, | ||
| 258 | 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, | ||
| 259 | 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, | ||
| 260 | 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, | ||
| 261 | 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, | ||
| 262 | 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, | ||
| 263 | 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x1c, 0x1b, 0x86, 0x03, 0x21, 0x26, | ||
| 264 | 0x08, 0x55, 0x18, 0x30, 0x19, 0x7a, 0x73, 0x9b, 0xa3, 0x0b, 0x73, 0xa3, | ||
| 265 | 0x9b, 0x9b, 0x20, 0x10, 0xc8, 0x06, 0x84, 0x50, 0x16, 0x62, 0x18, 0x18, | ||
| 266 | 0x60, 0x43, 0xd0, 0x6c, 0x20, 0x00, 0xc0, 0x01, 0x26, 0x08, 0x14, 0x18, | ||
| 267 | 0x90, 0x99, 0x1b, 0x93, 0x3a, 0x12, 0xfa, 0x7a, 0xab, 0xa3, 0x83, 0xab, | ||
| 268 | 0xa3, 0x9b, 0x20, 0x10, 0xc9, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0xb2, | ||
| 269 | 0xc1, 0x40, 0x22, 0x89, 0x98, 0x28, 0x32, 0x74, 0x65, 0x78, 0x74, 0x75, | ||
| 270 | 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x13, 0x04, 0x82, 0xd9, 0x60, | ||
| 271 | 0x20, 0x96, 0x74, 0x4d, 0x14, 0x95, 0x34, 0x37, 0xb8, 0x3a, 0xba, 0x2f, | ||
| 272 | 0xba, 0x3c, 0xb8, 0xb2, 0x09, 0x02, 0xd1, 0x6c, 0x30, 0x90, 0x4c, 0xd2, | ||
| 273 | 0x26, 0x8a, 0xcb, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0xd7, 0xdc, 0x58, 0x18, | ||
| 274 | 0x5b, 0xd9, 0x04, 0x81, 0x70, 0x26, 0x08, 0xcf, 0xb7, 0x01, 0x41, 0x38, | ||
| 275 | 0xa9, 0x9b, 0x28, 0xca, 0xa3, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16, 0x06, | ||
| 276 | 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0x36, 0x41, 0x20, 0x9e, 0x0d, | ||
| 277 | 0x06, 0x02, 0x06, 0x52, 0x18, 0x4c, 0x14, 0x1f, 0xba, 0x37, 0xb7, 0xb2, | ||
| 278 | 0xb6, 0x30, 0xb8, 0x2f, 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x98, 0x09, | ||
| 279 | 0x02, 0x01, 0x6d, 0x30, 0x90, 0x31, 0x90, 0xc8, 0x60, 0xa2, 0xf8, 0xd0, | ||
| 280 | 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0x99, 0x85, 0x8d, 0xd1, 0xbd, | ||
| 281 | 0xc9, 0xc9, 0x4c, 0x10, 0x88, 0x68, 0x83, 0x81, 0x98, 0x81, 0x74, 0x06, | ||
| 282 | 0x13, 0xc5, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, 0x2d, 0x8d, 0xae, 0xec, | ||
| 283 | 0x0b, 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x82, 0x40, 0x48, 0x1b, 0x0c, 0x24, | ||
| 284 | 0x0d, 0x24, 0x35, 0x98, 0x28, 0x1e, 0x59, 0x6f, 0x66, 0x66, 0x73, 0x65, | ||
| 285 | 0x74, 0x13, 0x04, 0x62, 0xda, 0x60, 0x20, 0x6c, 0x20, 0xb5, 0xc1, 0x44, | ||
| 286 | 0xd1, 0x90, 0x1a, 0x7b, 0x2b, 0x33, 0x33, 0x9b, 0x20, 0x10, 0xd4, 0x06, | ||
| 287 | 0x03, 0x79, 0x03, 0x09, 0x0e, 0x26, 0x8a, 0xc6, 0xd1, 0xd8, 0x5b, 0x99, | ||
| 288 | 0x99, 0xd9, 0x04, 0x81, 0xa8, 0x36, 0x18, 0x88, 0x1c, 0x48, 0x73, 0x30, | ||
| 289 | 0x51, 0x34, 0x84, 0xc6, 0xde, 0xca, 0xcc, 0xcc, 0x26, 0x08, 0x84, 0xb5, | ||
| 290 | 0xc1, 0x40, 0xea, 0x40, 0xb2, 0x83, 0x89, 0xda, 0xd0, 0x30, 0x15, 0xb6, | ||
| 291 | 0x7d, 0x62, 0x50, 0x06, 0x68, 0xb0, 0x06, 0x6e, 0x10, 0x07, 0x74, 0x70, | ||
| 292 | 0x07, 0x1b, 0x06, 0x02, 0xc2, 0x83, 0x09, 0x82, 0x00, 0x6c, 0x00, 0x36, | ||
| 293 | 0x0c, 0xc4, 0x1e, 0xec, 0xc1, 0x86, 0x80, 0x0f, 0x36, 0x0c, 0x83, 0x1e, | ||
| 294 | 0xf4, 0xc1, 0x04, 0xc1, 0x12, 0x83, 0x0d, 0xc1, 0x1f, 0x90, 0x68, 0x0b, | ||
| 295 | 0x4b, 0x73, 0xe3, 0x32, 0x65, 0xf5, 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, | ||
| 296 | 0xf6, 0xe6, 0x36, 0x41, 0x28, 0xb2, 0x09, 0x42, 0xa1, 0x6d, 0x08, 0x88, | ||
| 297 | 0x09, 0x42, 0xb1, 0x4d, 0x10, 0x0a, 0x6e, 0xc3, 0x42, 0x88, 0xc2, 0x28, | ||
| 298 | 0x90, 0x42, 0x29, 0x98, 0xc2, 0x60, 0x0a, 0xc4, 0x29, 0x00, 0x44, 0xa8, | ||
| 299 | 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0xb7, 0x61, | ||
| 300 | 0x19, 0x52, 0x61, 0x14, 0x4e, 0xa1, 0x14, 0x54, 0x61, 0x50, 0x85, 0xe1, | ||
| 301 | 0x14, 0x80, 0x09, 0x02, 0x71, 0xb1, 0x18, 0x7a, 0x62, 0x7a, 0x92, 0x9a, | ||
| 302 | 0x20, 0x10, 0xd8, 0x06, 0x41, 0x72, 0x85, 0x0d, 0x0b, 0x2b, 0xb4, 0xc2, | ||
| 303 | 0x28, 0x9c, 0x42, 0x29, 0xa8, 0xc2, 0x60, 0x0a, 0xac, 0x70, 0x0a, 0xaf, | ||
| 304 | 0xb0, 0x61, 0x40, 0x85, 0x55, 0x80, 0x05, 0x26, 0x53, 0x56, 0x5f, 0x54, | ||
| 305 | 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x84, 0xc2, 0xdb, 0xb0, 0x10, 0xb2, | ||
| 306 | 0x30, 0x0a, 0xb3, 0x50, 0x0a, 0xa7, 0x30, 0x98, 0x02, 0x71, 0x0a, 0xaf, | ||
| 307 | 0xb0, 0x21, 0xa0, 0x85, 0x0d, 0x43, 0x2c, 0xd4, 0x02, 0xb0, 0xa1, 0xd0, | ||
| 308 | 0x83, 0x50, 0xb0, 0x85, 0x07, 0xa0, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, | ||
| 309 | 0xc7, 0x22, 0xcd, 0x6d, 0x8e, 0x6e, 0x8e, 0xc6, 0x5c, 0xda, 0xd9, 0x17, | ||
| 310 | 0x1b, 0x19, 0x8d, 0xb9, 0xb4, 0xb3, 0xaf, 0x39, 0xba, 0x0d, 0x08, 0x2e, | ||
| 311 | 0x48, 0xb9, 0xe0, 0x0a, 0xba, 0x70, 0xed, 0xc2, 0x55, 0x85, 0x8d, 0xcd, | ||
| 312 | 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, | ||
| 313 | 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, | ||
| 314 | 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, | ||
| 315 | 0x45, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9, 0xa6, | ||
| 316 | 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, | ||
| 317 | 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xe0, 0x54, 0x22, | ||
| 318 | 0xc3, 0x73, 0xa1, 0xcb, 0x83, 0x2b, 0x0b, 0x72, 0x73, 0x7b, 0xa3, 0x0b, | ||
| 319 | 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x22, 0xe0, 0x41, 0x1f, 0xd4, 0x21, | ||
| 320 | 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, | ||
| 321 | 0x2b, 0x9b, 0x12, 0xfc, 0x41, 0x1d, 0x32, 0x3c, 0x97, 0x32, 0x37, 0x3a, | ||
| 322 | 0xb9, 0x3c, 0xa8, 0xb7, 0x34, 0x37, 0xba, 0xb9, 0x29, 0x81, 0x2d, 0x74, | ||
| 323 | 0x21, 0xc3, 0x73, 0x19, 0x7b, 0xab, 0x73, 0xa3, 0x2b, 0x93, 0x9b, 0x9b, | ||
| 324 | 0x12, 0xec, 0x02, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, | ||
| 325 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 326 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 327 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 328 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 329 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 330 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 331 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 332 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 333 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 334 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 335 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 336 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 337 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 338 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 339 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 340 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 341 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 342 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 343 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 344 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 345 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 346 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 347 | 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, | ||
| 348 | 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, | ||
| 349 | 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, | ||
| 350 | 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 351 | 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, | ||
| 352 | 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, | ||
| 353 | 0x04, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, | ||
| 354 | 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, | ||
| 355 | 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, | ||
| 356 | 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, | ||
| 357 | 0xdc, 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 358 | 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 359 | 0x00, 0xce, 0xf5, 0x95, 0xd7, 0x46, 0x20, 0x6d, 0x54, 0x84, 0x0a, 0x8f, | ||
| 360 | 0x4f, 0xa9, 0x59, 0x7d, 0x19, 0x44, 0x58, 0x49, 0x4c, 0x08, 0x06, 0x00, | ||
| 361 | 0x00, 0x60, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, | ||
| 362 | 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x05, 0x00, | ||
| 363 | 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x79, 0x01, 0x00, | ||
| 364 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 365 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 366 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 367 | 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, | ||
| 368 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, | ||
| 369 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, | ||
| 370 | 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 371 | 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 372 | 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, | ||
| 373 | 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, | ||
| 374 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, | ||
| 375 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, | ||
| 376 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, | ||
| 377 | 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, | ||
| 378 | 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, | ||
| 379 | 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x5c, 0x23, 0x00, 0x25, 0x00, 0x14, | ||
| 380 | 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, | ||
| 381 | 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, | ||
| 382 | 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, | ||
| 383 | 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, | ||
| 384 | 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, | ||
| 385 | 0x42, 0x6d, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x90, 0x47, 0x70, 0x20, | ||
| 386 | 0x60, 0x18, 0x81, 0x18, 0x2e, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, 0x92, | ||
| 387 | 0x10, 0x33, 0xc6, 0x18, 0x63, 0x8c, 0x31, 0xe7, 0x9c, 0x44, 0xd3, 0x81, | ||
| 388 | 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, | ||
| 389 | 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, | ||
| 390 | 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 391 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, | ||
| 392 | 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 393 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, | ||
| 394 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, | ||
| 395 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, | ||
| 396 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 397 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 398 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 399 | 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, | ||
| 400 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, | ||
| 401 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, | ||
| 402 | 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, | ||
| 403 | 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, | ||
| 404 | 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 405 | 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 406 | 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 407 | 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1c, 0x50, 0x04, 0x65, 0x50, | ||
| 408 | 0x1e, 0x54, 0x4a, 0xa2, 0x0c, 0x0a, 0x61, 0x04, 0xa0, 0x08, 0x0a, 0x84, | ||
| 409 | 0xea, 0x0c, 0x00, 0xd9, 0xb1, 0x1c, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 410 | 0x00, 0x08, 0x04, 0x02, 0x01, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, | ||
| 411 | 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, | ||
| 412 | 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, | ||
| 413 | 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, | ||
| 414 | 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, | ||
| 415 | 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, | ||
| 416 | 0x10, 0xc6, 0x06, 0x61, 0x20, 0x26, 0x08, 0xc4, 0xb1, 0x41, 0x18, 0x0c, | ||
| 417 | 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0x95, 0x44, 0x60, | ||
| 418 | 0x82, 0x40, 0x20, 0x1b, 0x10, 0x42, 0x59, 0x88, 0x61, 0x60, 0x80, 0x0d, | ||
| 419 | 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x58, 0xd3, 0x86, 0x00, | ||
| 420 | 0x9a, 0x20, 0x08, 0x00, 0x89, 0xb6, 0xb0, 0x34, 0x37, 0x2e, 0x53, 0x56, | ||
| 421 | 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x84, 0x82, | ||
| 422 | 0x99, 0x20, 0x14, 0xcd, 0x86, 0x80, 0x98, 0x20, 0x14, 0xce, 0x04, 0xa1, | ||
| 423 | 0x78, 0x36, 0x2c, 0x04, 0x55, 0x59, 0x17, 0x36, 0x60, 0x44, 0x06, 0x10, | ||
| 424 | 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xd0, | ||
| 425 | 0x86, 0x65, 0xd8, 0xaa, 0xec, 0xe2, 0x06, 0x6e, 0xc8, 0x80, 0x09, 0x02, | ||
| 426 | 0x91, 0xb0, 0x18, 0x7a, 0x62, 0x7a, 0x92, 0x9a, 0x20, 0x10, 0xca, 0x04, | ||
| 427 | 0x81, 0x58, 0x36, 0x08, 0x60, 0x10, 0x06, 0x1b, 0x16, 0xef, 0xab, 0xb2, | ||
| 428 | 0x8b, 0x1b, 0x30, 0x2f, 0x13, 0x83, 0x0d, 0x83, 0xd6, 0x8d, 0x01, 0x93, | ||
| 429 | 0x29, 0xab, 0x2f, 0xaa, 0x30, 0xb9, 0xb3, 0x32, 0xba, 0x09, 0x42, 0x11, | ||
| 430 | 0x6d, 0x58, 0x88, 0x32, 0xa8, 0xcc, 0xe0, 0xca, 0x06, 0x8c, 0xc8, 0xc4, | ||
| 431 | 0x60, 0x43, 0x70, 0x06, 0x1b, 0x06, 0x32, 0x40, 0x03, 0x60, 0x43, 0x21, | ||
| 432 | 0x4d, 0x69, 0xf0, 0x00, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, | ||
| 433 | 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32, | ||
| 434 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, | ||
| 435 | 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x60, 0xd4, 0x21, 0xc3, 0x73, | ||
| 436 | 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, | ||
| 437 | 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4, | ||
| 438 | 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x1d, 0x32, 0x3c, 0x17, 0xbb, 0xb4, | ||
| 439 | 0xb2, 0xbb, 0x24, 0xb2, 0x29, 0xba, 0x30, 0xba, 0xb2, 0x29, 0x01, 0x54, | ||
| 440 | 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, | ||
| 441 | 0x8d, 0x6e, 0x6e, 0x4a, 0x90, 0x06, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 442 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 443 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 444 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 445 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 446 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 447 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 448 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 449 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 450 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 451 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 452 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 453 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 454 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 455 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 456 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 457 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 458 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 459 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 460 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 461 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 462 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 463 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 464 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, | ||
| 465 | 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, | ||
| 466 | 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, | ||
| 467 | 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 468 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, | ||
| 469 | 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, | ||
| 470 | 0xe6, 0x17, 0xb7, 0x6d, 0x04, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, | ||
| 471 | 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, | ||
| 472 | 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, | ||
| 473 | 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, | ||
| 474 | 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00, | ||
| 475 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, | ||
| 476 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x0a, 0x61, | ||
| 477 | 0x06, 0xa0, 0x14, 0x4a, 0xae, 0xec, 0xa8, 0x94, 0x00, 0xbd, 0x11, 0x00, | ||
| 478 | 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0x5d, 0xc4, 0x52, 0x59, | ||
| 479 | 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x1b, 0x32, 0x59, 0xcd, | ||
| 480 | 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x06, 0x97, 0x50, 0x17, 0x81, | ||
| 481 | 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xd1, 0x29, 0x15, 0xe6, 0x24, | ||
| 482 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x78, 0x8b, 0x95, 0x49, 0xca, | ||
| 483 | 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x1d, 0x52, 0x68, 0xa3, 0x09, | ||
| 484 | 0xc1, 0x60, 0x81, 0x21, 0x1f, 0x13, 0x0c, 0xf9, 0xd8, 0x60, 0xc8, 0x67, | ||
| 485 | 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x31, 0x78, 0xbe, 0xcf, 0x1a, | ||
| 486 | 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, 0x19, 0x83, 0xe7, 0xfb, 0x18, | ||
| 487 | 0x61, 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x31, 0x78, 0xbe, 0xaf, | ||
| 488 | 0x0a, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, 0x19, 0x83, 0xe7, 0xfb, | ||
| 489 | 0x30, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 490 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl new file mode 100644 index 0000000..834d629 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | |||
| 2 | #include "D3D12_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | [RootSignature(ColorRS)] | ||
| 5 | float4 main(PixelShaderInput input) : SV_TARGET0 | ||
| 6 | { | ||
| 7 | return GetOutputColor(1.0) * input.color; | ||
| 8 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli new file mode 100644 index 0000000..ba32e0c --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli | |||
| @@ -0,0 +1,236 @@ | |||
| 1 | #include "D3D12_Shader_Common.hlsli" | ||
| 2 | |||
| 3 | Texture2D texture0 : register(t0); | ||
| 4 | Texture2D texture1 : register(t1); | ||
| 5 | Texture2D texture2 : register(t2); | ||
| 6 | SamplerState sampler0 : register(s0); | ||
| 7 | |||
| 8 | struct PixelShaderInput | ||
| 9 | { | ||
| 10 | float4 pos : SV_POSITION; | ||
| 11 | float2 tex : TEXCOORD0; | ||
| 12 | float4 color : COLOR0; | ||
| 13 | }; | ||
| 14 | |||
| 15 | // These should mirror the definitions in SDL_render_d3d12.c | ||
| 16 | static const float TONEMAP_NONE = 0; | ||
| 17 | static const float TONEMAP_LINEAR = 1; | ||
| 18 | static const float TONEMAP_CHROME = 2; | ||
| 19 | |||
| 20 | static const float TEXTURETYPE_NONE = 0; | ||
| 21 | static const float TEXTURETYPE_RGB = 1; | ||
| 22 | static const float TEXTURETYPE_NV12 = 2; | ||
| 23 | static const float TEXTURETYPE_NV21 = 3; | ||
| 24 | static const float TEXTURETYPE_YUV = 4; | ||
| 25 | |||
| 26 | static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 27 | static const float INPUTTYPE_SRGB = 1; | ||
| 28 | static const float INPUTTYPE_SCRGB = 2; | ||
| 29 | static const float INPUTTYPE_HDR10 = 3; | ||
| 30 | |||
| 31 | cbuffer Constants : register(b1) | ||
| 32 | { | ||
| 33 | float scRGB_output; | ||
| 34 | float texture_type; | ||
| 35 | float input_type; | ||
| 36 | float color_scale; | ||
| 37 | |||
| 38 | float tonemap_method; | ||
| 39 | float tonemap_factor1; | ||
| 40 | float tonemap_factor2; | ||
| 41 | float sdr_white_point; | ||
| 42 | |||
| 43 | float4 Yoffset; | ||
| 44 | float4 Rcoeff; | ||
| 45 | float4 Gcoeff; | ||
| 46 | float4 Bcoeff; | ||
| 47 | }; | ||
| 48 | |||
| 49 | static const float3x3 mat709to2020 = { | ||
| 50 | { 0.627404, 0.329283, 0.043313 }, | ||
| 51 | { 0.069097, 0.919541, 0.011362 }, | ||
| 52 | { 0.016391, 0.088013, 0.895595 } | ||
| 53 | }; | ||
| 54 | |||
| 55 | static const float3x3 mat2020to709 = { | ||
| 56 | { 1.660496, -0.587656, -0.072840 }, | ||
| 57 | { -0.124547, 1.132895, -0.008348 }, | ||
| 58 | { -0.018154, -0.100597, 1.118751 } | ||
| 59 | }; | ||
| 60 | |||
| 61 | float sRGBtoLinear(float v) | ||
| 62 | { | ||
| 63 | if (v <= 0.04045) { | ||
| 64 | v = (v / 12.92); | ||
| 65 | } else { | ||
| 66 | v = pow(abs(v + 0.055) / 1.055, 2.4); | ||
| 67 | } | ||
| 68 | return v; | ||
| 69 | } | ||
| 70 | |||
| 71 | float sRGBfromLinear(float v) | ||
| 72 | { | ||
| 73 | if (v <= 0.0031308) { | ||
| 74 | v = (v * 12.92); | ||
| 75 | } else { | ||
| 76 | v = (pow(abs(v), 1.0 / 2.4) * 1.055 - 0.055); | ||
| 77 | } | ||
| 78 | return v; | ||
| 79 | } | ||
| 80 | |||
| 81 | float3 PQtoLinear(float3 v) | ||
| 82 | { | ||
| 83 | const float c1 = 0.8359375; | ||
| 84 | const float c2 = 18.8515625; | ||
| 85 | const float c3 = 18.6875; | ||
| 86 | const float oo_m1 = 1.0 / 0.1593017578125; | ||
| 87 | const float oo_m2 = 1.0 / 78.84375; | ||
| 88 | |||
| 89 | float3 num = max(pow(abs(v), oo_m2) - c1, 0.0); | ||
| 90 | float3 den = c2 - c3 * pow(abs(v), oo_m2); | ||
| 91 | return (10000.0 * pow(abs(num / den), oo_m1) / sdr_white_point); | ||
| 92 | } | ||
| 93 | |||
| 94 | float3 ApplyTonemap(float3 v) | ||
| 95 | { | ||
| 96 | if (tonemap_method == TONEMAP_LINEAR) { | ||
| 97 | v *= tonemap_factor1; | ||
| 98 | } else if (tonemap_method == TONEMAP_CHROME) { | ||
| 99 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 100 | // Convert to BT.2020 colorspace for tone mapping | ||
| 101 | v = mul(mat709to2020, v); | ||
| 102 | } | ||
| 103 | |||
| 104 | float vmax = max(v.r, max(v.g, v.b)); | ||
| 105 | if (vmax > 0.0) { | ||
| 106 | float scale = (1.0 + tonemap_factor1 * vmax) / (1.0 + tonemap_factor2 * vmax); | ||
| 107 | v *= scale; | ||
| 108 | } | ||
| 109 | |||
| 110 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 111 | // Convert to BT.709 colorspace after tone mapping | ||
| 112 | v = mul(mat2020to709, v); | ||
| 113 | } | ||
| 114 | } | ||
| 115 | return v; | ||
| 116 | } | ||
| 117 | |||
| 118 | float4 GetInputColor(PixelShaderInput input) | ||
| 119 | { | ||
| 120 | float4 rgba; | ||
| 121 | |||
| 122 | if (texture_type == TEXTURETYPE_NONE) { | ||
| 123 | rgba = 1.0; | ||
| 124 | } else if (texture_type == TEXTURETYPE_RGB) { | ||
| 125 | rgba = texture0.Sample(sampler0, input.tex); | ||
| 126 | } else if (texture_type == TEXTURETYPE_NV12) { | ||
| 127 | float3 yuv; | ||
| 128 | yuv.x = texture0.Sample(sampler0, input.tex).r; | ||
| 129 | yuv.yz = texture1.Sample(sampler0, input.tex).rg; | ||
| 130 | |||
| 131 | yuv += Yoffset.xyz; | ||
| 132 | rgba.r = dot(yuv, Rcoeff.xyz); | ||
| 133 | rgba.g = dot(yuv, Gcoeff.xyz); | ||
| 134 | rgba.b = dot(yuv, Bcoeff.xyz); | ||
| 135 | rgba.a = 1.0; | ||
| 136 | } else if (texture_type == TEXTURETYPE_NV21) { | ||
| 137 | float3 yuv; | ||
| 138 | yuv.x = texture0.Sample(sampler0, input.tex).r; | ||
| 139 | yuv.yz = texture1.Sample(sampler0, input.tex).gr; | ||
| 140 | |||
| 141 | yuv += Yoffset.xyz; | ||
| 142 | rgba.r = dot(yuv, Rcoeff.xyz); | ||
| 143 | rgba.g = dot(yuv, Gcoeff.xyz); | ||
| 144 | rgba.b = dot(yuv, Bcoeff.xyz); | ||
| 145 | rgba.a = 1.0; | ||
| 146 | } else if (texture_type == TEXTURETYPE_YUV) { | ||
| 147 | float3 yuv; | ||
| 148 | yuv.x = texture0.Sample(sampler0, input.tex).r; | ||
| 149 | yuv.y = texture1.Sample(sampler0, input.tex).r; | ||
| 150 | yuv.z = texture2.Sample(sampler0, input.tex).r; | ||
| 151 | |||
| 152 | yuv += Yoffset.xyz; | ||
| 153 | rgba.r = dot(yuv, Rcoeff.xyz); | ||
| 154 | rgba.g = dot(yuv, Gcoeff.xyz); | ||
| 155 | rgba.b = dot(yuv, Bcoeff.xyz); | ||
| 156 | rgba.a = 1.0; | ||
| 157 | } else { | ||
| 158 | // Error! | ||
| 159 | rgba.r = 1.0; | ||
| 160 | rgba.g = 0.0; | ||
| 161 | rgba.b = 0.0; | ||
| 162 | rgba.a = 1.0; | ||
| 163 | } | ||
| 164 | return rgba; | ||
| 165 | } | ||
| 166 | |||
| 167 | float4 GetOutputColor(float4 rgba) | ||
| 168 | { | ||
| 169 | float4 output; | ||
| 170 | |||
| 171 | output.rgb = rgba.rgb * color_scale; | ||
| 172 | output.a = rgba.a; | ||
| 173 | |||
| 174 | return output; | ||
| 175 | } | ||
| 176 | |||
| 177 | float3 GetOutputColorFromSRGB(float3 rgb) | ||
| 178 | { | ||
| 179 | float3 output; | ||
| 180 | |||
| 181 | if (scRGB_output) { | ||
| 182 | rgb.r = sRGBtoLinear(rgb.r); | ||
| 183 | rgb.g = sRGBtoLinear(rgb.g); | ||
| 184 | rgb.b = sRGBtoLinear(rgb.b); | ||
| 185 | } | ||
| 186 | |||
| 187 | output.rgb = rgb * color_scale; | ||
| 188 | |||
| 189 | return output; | ||
| 190 | } | ||
| 191 | |||
| 192 | float3 GetOutputColorFromLinear(float3 rgb) | ||
| 193 | { | ||
| 194 | float3 output; | ||
| 195 | |||
| 196 | output.rgb = rgb * color_scale; | ||
| 197 | |||
| 198 | if (!scRGB_output) { | ||
| 199 | output.r = sRGBfromLinear(output.r); | ||
| 200 | output.g = sRGBfromLinear(output.g); | ||
| 201 | output.b = sRGBfromLinear(output.b); | ||
| 202 | output.rgb = saturate(output.rgb); | ||
| 203 | } | ||
| 204 | |||
| 205 | return output; | ||
| 206 | } | ||
| 207 | |||
| 208 | float4 AdvancedPixelShader(PixelShaderInput input) | ||
| 209 | { | ||
| 210 | float4 rgba = GetInputColor(input); | ||
| 211 | float4 output; | ||
| 212 | |||
| 213 | if (input_type == INPUTTYPE_HDR10) { | ||
| 214 | rgba.rgb = PQtoLinear(rgba.rgb); | ||
| 215 | } | ||
| 216 | |||
| 217 | if (tonemap_method != TONEMAP_NONE) { | ||
| 218 | rgba.rgb = ApplyTonemap(rgba.rgb); | ||
| 219 | } | ||
| 220 | |||
| 221 | if (input_type == INPUTTYPE_SRGB) { | ||
| 222 | output.rgb = GetOutputColorFromSRGB(rgba.rgb); | ||
| 223 | output.a = rgba.a; | ||
| 224 | } else if (input_type == INPUTTYPE_SCRGB) { | ||
| 225 | output.rgb = GetOutputColorFromLinear(rgba.rgb); | ||
| 226 | output.a = rgba.a; | ||
| 227 | } else if (input_type == INPUTTYPE_HDR10) { | ||
| 228 | rgba.rgb = mul(mat2020to709, rgba.rgb); | ||
| 229 | output.rgb = GetOutputColorFromLinear(rgba.rgb); | ||
| 230 | output.a = rgba.a; | ||
| 231 | } else { | ||
| 232 | output = GetOutputColor(rgba); | ||
| 233 | } | ||
| 234 | |||
| 235 | return output * input.color; | ||
| 236 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h new file mode 100644 index 0000000..4aa8ef0 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h | |||
| @@ -0,0 +1,586 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; SV_Position 0 xyzw 0 POS float | ||
| 8 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 9 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; SV_Target 0 xyzw 0 TARGET float xyzw | ||
| 17 | ; | ||
| 18 | ; shader hash: 7a58efcd6cfa5eef872e7cbc3b5f38b8 | ||
| 19 | ; | ||
| 20 | ; Pipeline Runtime Information: | ||
| 21 | ; | ||
| 22 | ; Pixel Shader | ||
| 23 | ; DepthOutput=0 | ||
| 24 | ; SampleFrequency=0 | ||
| 25 | ; | ||
| 26 | ; | ||
| 27 | ; Input signature: | ||
| 28 | ; | ||
| 29 | ; Name Index InterpMode DynIdx | ||
| 30 | ; -------------------- ----- ---------------------- ------ | ||
| 31 | ; SV_Position 0 noperspective | ||
| 32 | ; TEXCOORD 0 linear | ||
| 33 | ; COLOR 0 linear | ||
| 34 | ; | ||
| 35 | ; Output signature: | ||
| 36 | ; | ||
| 37 | ; Name Index InterpMode DynIdx | ||
| 38 | ; -------------------- ----- ---------------------- ------ | ||
| 39 | ; SV_Target 0 | ||
| 40 | ; | ||
| 41 | ; Buffer Definitions: | ||
| 42 | ; | ||
| 43 | ; cbuffer Constants | ||
| 44 | ; { | ||
| 45 | ; | ||
| 46 | ; struct Constants | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; float scRGB_output; ; Offset: 0 | ||
| 50 | ; float texture_type; ; Offset: 4 | ||
| 51 | ; float input_type; ; Offset: 8 | ||
| 52 | ; float color_scale; ; Offset: 12 | ||
| 53 | ; float tonemap_method; ; Offset: 16 | ||
| 54 | ; float tonemap_factor1; ; Offset: 20 | ||
| 55 | ; float tonemap_factor2; ; Offset: 24 | ||
| 56 | ; float sdr_white_point; ; Offset: 28 | ||
| 57 | ; float4 Yoffset; ; Offset: 32 | ||
| 58 | ; float4 Rcoeff; ; Offset: 48 | ||
| 59 | ; float4 Gcoeff; ; Offset: 64 | ||
| 60 | ; float4 Bcoeff; ; Offset: 80 | ||
| 61 | ; | ||
| 62 | ; } Constants; ; Offset: 0 Size: 96 | ||
| 63 | ; | ||
| 64 | ; } | ||
| 65 | ; | ||
| 66 | ; | ||
| 67 | ; Resource Bindings: | ||
| 68 | ; | ||
| 69 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 70 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 71 | ; Constants cbuffer NA NA CB0 cb1 1 | ||
| 72 | ; sampler0 sampler NA NA S0 s0 1 | ||
| 73 | ; texture0 texture f32 2d T0 t0 1 | ||
| 74 | ; | ||
| 75 | ; | ||
| 76 | ; ViewId state: | ||
| 77 | ; | ||
| 78 | ; Number of inputs: 12, outputs: 4 | ||
| 79 | ; Outputs dependent on ViewId: { } | ||
| 80 | ; Inputs contributing to computation of Outputs: | ||
| 81 | ; output 0 depends on inputs: { 4, 5, 8 } | ||
| 82 | ; output 1 depends on inputs: { 4, 5, 9 } | ||
| 83 | ; output 2 depends on inputs: { 4, 5, 10 } | ||
| 84 | ; output 3 depends on inputs: { 4, 5, 11 } | ||
| 85 | ; | ||
| 86 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 87 | target triple = "dxil-ms-dx" | ||
| 88 | |||
| 89 | %dx.types.Handle = type { i8* } | ||
| 90 | %dx.types.ResRet.f32 = type { float, float, float, float, i32 } | ||
| 91 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 92 | %"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" } | ||
| 93 | %"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 } | ||
| 94 | %Constants = type { float, float, float, float, float, float, float, float, <4 x float>, <4 x float>, <4 x float>, <4 x float> } | ||
| 95 | %struct.SamplerState = type { i32 } | ||
| 96 | |||
| 97 | define void @main() { | ||
| 98 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 99 | %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 100 | %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 101 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 102 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 103 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 104 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 105 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 106 | %9 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 107 | %10 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %1, %dx.types.Handle %2, float %8, float %9, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 108 | %11 = extractvalue %dx.types.ResRet.f32 %10, 0 | ||
| 109 | %12 = extractvalue %dx.types.ResRet.f32 %10, 1 | ||
| 110 | %13 = extractvalue %dx.types.ResRet.f32 %10, 2 | ||
| 111 | %14 = extractvalue %dx.types.ResRet.f32 %10, 3 | ||
| 112 | %15 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 113 | %16 = extractvalue %dx.types.CBufRet.f32 %15, 3 | ||
| 114 | %17 = fmul fast float %11, %4 | ||
| 115 | %18 = fmul fast float %17, %16 | ||
| 116 | %19 = fmul fast float %12, %5 | ||
| 117 | %20 = fmul fast float %19, %16 | ||
| 118 | %21 = fmul fast float %13, %6 | ||
| 119 | %22 = fmul fast float %21, %16 | ||
| 120 | %23 = fmul fast float %14, %7 | ||
| 121 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %18) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 122 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %20) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 123 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %22) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 124 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %23) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 125 | ret void | ||
| 126 | } | ||
| 127 | |||
| 128 | ; Function Attrs: nounwind readnone | ||
| 129 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 130 | |||
| 131 | ; Function Attrs: nounwind | ||
| 132 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 133 | |||
| 134 | ; Function Attrs: nounwind readonly | ||
| 135 | declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 | ||
| 136 | |||
| 137 | ; Function Attrs: nounwind readonly | ||
| 138 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 139 | |||
| 140 | ; Function Attrs: nounwind readonly | ||
| 141 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 142 | |||
| 143 | attributes #0 = { nounwind readnone } | ||
| 144 | attributes #1 = { nounwind } | ||
| 145 | attributes #2 = { nounwind readonly } | ||
| 146 | |||
| 147 | !llvm.ident = !{!0} | ||
| 148 | !dx.version = !{!1} | ||
| 149 | !dx.valver = !{!2} | ||
| 150 | !dx.shaderModel = !{!3} | ||
| 151 | !dx.resources = !{!4} | ||
| 152 | !dx.viewIdState = !{!12} | ||
| 153 | !dx.entryPoints = !{!13} | ||
| 154 | |||
| 155 | !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} | ||
| 156 | !1 = !{i32 1, i32 0} | ||
| 157 | !2 = !{i32 1, i32 6} | ||
| 158 | !3 = !{!"ps", i32 6, i32 0} | ||
| 159 | !4 = !{!5, null, !8, !10} | ||
| 160 | !5 = !{!6} | ||
| 161 | !6 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 0, i32 1, i32 2, i32 0, !7} | ||
| 162 | !7 = !{i32 0, i32 9} | ||
| 163 | !8 = !{!9} | ||
| 164 | !9 = !{i32 0, %Constants* undef, !"", i32 0, i32 1, i32 1, i32 96, null} | ||
| 165 | !10 = !{!11} | ||
| 166 | !11 = !{i32 0, %struct.SamplerState* undef, !"", i32 0, i32 0, i32 1, i32 0, null} | ||
| 167 | !12 = !{[14 x i32] [i32 12, i32 4, i32 0, i32 0, i32 0, i32 0, i32 15, i32 15, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]} | ||
| 168 | !13 = !{void ()* @main, !"main", !14, !4, null} | ||
| 169 | !14 = !{!15, !22, null} | ||
| 170 | !15 = !{!16, !18, !20} | ||
| 171 | !16 = !{i32 0, !"SV_Position", i8 9, i8 3, !17, i8 4, i32 1, i8 4, i32 0, i8 0, null} | ||
| 172 | !17 = !{i32 0} | ||
| 173 | !18 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !17, i8 2, i32 1, i8 2, i32 1, i8 0, !19} | ||
| 174 | !19 = !{i32 3, i32 3} | ||
| 175 | !20 = !{i32 2, !"COLOR", i8 9, i8 0, !17, i8 2, i32 1, i8 4, i32 2, i8 0, !21} | ||
| 176 | !21 = !{i32 3, i32 15} | ||
| 177 | !22 = !{!23} | ||
| 178 | !23 = !{i32 0, !"SV_Target", i8 9, i8 16, !17, i8 0, i32 1, i8 4, i32 0, i8 0, !21} | ||
| 179 | |||
| 180 | #endif | ||
| 181 | |||
| 182 | const unsigned char g_main[] = { | ||
| 183 | 0x44, 0x58, 0x42, 0x43, 0xb2, 0xdd, 0x4e, 0x8d, 0x7f, 0x3c, 0x1f, 0x5e, | ||
| 184 | 0x6f, 0x0e, 0x03, 0xe7, 0x8c, 0xce, 0x62, 0x95, 0x01, 0x00, 0x00, 0x00, | ||
| 185 | 0xe1, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 186 | 0x50, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, | ||
| 187 | 0x31, 0x02, 0x00, 0x00, 0xd9, 0x02, 0x00, 0x00, 0x31, 0x0b, 0x00, 0x00, | ||
| 188 | 0x4d, 0x0b, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, | ||
| 189 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, | ||
| 190 | 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 191 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 192 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 193 | 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 194 | 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 195 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, | ||
| 197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 198 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 199 | 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, | ||
| 200 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, | ||
| 201 | 0x4f, 0x52, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01, | ||
| 202 | 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, | ||
| 203 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, | ||
| 204 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, | ||
| 205 | 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, | ||
| 206 | 0x00, 0x50, 0x53, 0x56, 0x30, 0x14, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, | ||
| 207 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 208 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 209 | 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00, 0x00, | ||
| 210 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 211 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 212 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 213 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 214 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 215 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 216 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 217 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 218 | 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, | ||
| 219 | 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 220 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 221 | 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 222 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, | ||
| 223 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, | ||
| 224 | 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 225 | 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 226 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 227 | 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 228 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 229 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, | ||
| 230 | 0x30, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 231 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, | ||
| 232 | 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 233 | 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 234 | 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 235 | 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 236 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 237 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 238 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, | ||
| 239 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 240 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 241 | 0xff, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 242 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 243 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x53, 0x54, 0x41, | ||
| 244 | 0x54, 0x50, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, | ||
| 245 | 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 246 | 0x00, 0x38, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, | ||
| 247 | 0x00, 0x0b, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, | ||
| 248 | 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, | ||
| 249 | 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, | ||
| 250 | 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, | ||
| 251 | 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, | ||
| 252 | 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, | ||
| 253 | 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, | ||
| 254 | 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, | ||
| 255 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, | ||
| 256 | 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, | ||
| 257 | 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, | ||
| 258 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, | ||
| 259 | 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, | ||
| 260 | 0x00, 0x4e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, | ||
| 261 | 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, | ||
| 262 | 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x7c, 0x23, | ||
| 263 | 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, | ||
| 264 | 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, | ||
| 265 | 0xa1, 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, | ||
| 266 | 0x62, 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, | ||
| 267 | 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, | ||
| 268 | 0x55, 0x18, 0x45, 0x18, 0x1b, 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x76, 0xd4, | ||
| 269 | 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, 0x93, | ||
| 270 | 0x5f, 0xdc, 0x36, 0x22, 0xc6, 0x18, 0xa3, 0x10, 0x8f, 0x30, 0x42, 0x70, | ||
| 271 | 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x10, 0x49, 0x73, 0x20, 0x60, 0x18, | ||
| 272 | 0x81, 0x18, 0x66, 0x6a, 0x83, 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, | ||
| 273 | 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, | ||
| 274 | 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, | ||
| 275 | 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0x36, | ||
| 276 | 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x3d, 0xd0, 0x83, 0x76, | ||
| 277 | 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, | ||
| 278 | 0x40, 0x01, 0x99, 0x49, 0x0c, 0xc6, 0x81, 0x1d, 0xc2, 0x61, 0x1e, 0xe6, | ||
| 279 | 0xc1, 0x0d, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, | ||
| 280 | 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 281 | 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, 0xc2, 0x81, 0x1e, 0xd8, | ||
| 282 | 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, 0x90, 0x60, 0x2f, 0xe1, | ||
| 283 | 0x4b, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0xc4, 0x8c, 0x31, 0xc6, | ||
| 284 | 0x18, 0x63, 0x58, 0x6b, 0x2d, 0xe9, 0x9b, 0xa4, 0x29, 0xa2, 0x84, 0xc9, | ||
| 285 | 0x67, 0x01, 0xe6, 0x59, 0x88, 0x88, 0x9d, 0x80, 0x89, 0x40, 0x01, 0x21, | ||
| 286 | 0x9e, 0x0e, 0x04, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, | ||
| 287 | 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, | ||
| 288 | 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, | ||
| 289 | 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, | ||
| 290 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, | ||
| 291 | 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 292 | 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 293 | 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, | ||
| 294 | 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, | ||
| 295 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, | ||
| 296 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, | ||
| 297 | 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, | ||
| 298 | 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 299 | 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 300 | 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 301 | 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, | ||
| 302 | 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 303 | 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, 0x00, 0x00, | ||
| 304 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x17, 0x00, 0x00, | ||
| 305 | 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 306 | 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x45, 0x50, | ||
| 307 | 0x12, 0x05, 0x1c, 0x50, 0x06, 0xe5, 0x50, 0x08, 0x05, 0x51, 0x18, 0x05, | ||
| 308 | 0x52, 0x28, 0x05, 0x53, 0x38, 0x05, 0x54, 0x60, 0x05, 0x18, 0x50, 0xa0, | ||
| 309 | 0x01, 0xe5, 0x41, 0xa5, 0x24, 0xca, 0xa0, 0x10, 0x46, 0x00, 0x8a, 0xa0, | ||
| 310 | 0x40, 0x48, 0xd6, 0x00, 0xe5, 0x19, 0x00, 0xd2, 0x33, 0x00, 0xb4, 0x67, | ||
| 311 | 0x00, 0xa8, 0xcf, 0x00, 0x90, 0x1f, 0xcb, 0x61, 0x08, 0x00, 0x00, 0x80, | ||
| 312 | 0xe7, 0x01, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 313 | 0x00, 0xdc, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, | ||
| 314 | 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, | ||
| 315 | 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, | ||
| 316 | 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, | ||
| 317 | 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, | ||
| 318 | 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, | ||
| 319 | 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, | ||
| 320 | 0x08, 0x59, 0x18, 0x10, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x83, | ||
| 321 | 0x99, 0x20, 0x10, 0xc9, 0x04, 0x81, 0x50, 0x36, 0x08, 0x44, 0xb3, 0x21, | ||
| 322 | 0x21, 0x94, 0x85, 0x20, 0x06, 0x86, 0x70, 0x36, 0x04, 0xcf, 0x04, 0x61, | ||
| 323 | 0x1b, 0x03, 0x26, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, | ||
| 324 | 0x13, 0x04, 0x62, 0xd9, 0x80, 0x10, 0x91, 0x44, 0x0c, 0xc3, 0x04, 0x6c, | ||
| 325 | 0x08, 0xa8, 0x09, 0x42, 0x47, 0x06, 0x44, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, | ||
| 326 | 0xca, 0xe4, 0x60, 0x36, 0x20, 0x84, 0x75, 0x11, 0xc4, 0x40, 0x00, 0x1b, | ||
| 327 | 0x02, 0x6c, 0x03, 0x01, 0x01, 0x55, 0x36, 0x41, 0xd0, 0xc4, 0x80, 0xcc, | ||
| 328 | 0xdc, 0x98, 0xd4, 0x91, 0xd0, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0xdd, | ||
| 329 | 0x04, 0x81, 0x60, 0x26, 0x08, 0x44, 0xb3, 0xc1, 0x40, 0xb8, 0x8e, 0xf0, | ||
| 330 | 0x1a, 0x32, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, | ||
| 331 | 0x70, 0x65, 0x13, 0x04, 0xc2, 0xd9, 0x60, 0x20, 0x60, 0xd0, 0x85, 0x81, | ||
| 332 | 0xd7, 0x50, 0x49, 0x73, 0x83, 0xab, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, | ||
| 333 | 0x9b, 0x20, 0x10, 0xcf, 0x06, 0x03, 0x19, 0x83, 0x8e, 0x0c, 0xbc, 0x86, | ||
| 334 | 0xcb, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0xd7, 0xdc, 0x58, 0x18, 0x5b, 0xd9, | ||
| 335 | 0x04, 0x81, 0x80, 0x26, 0x08, 0x12, 0x18, 0x6c, 0x40, 0x10, 0x33, 0xe8, | ||
| 336 | 0xce, 0xc0, 0x6b, 0x1a, 0x34, 0xa0, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16, | ||
| 337 | 0x06, 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0x36, 0x41, 0x20, 0xa2, | ||
| 338 | 0x0d, 0x06, 0xa2, 0x06, 0xdd, 0x1a, 0x78, 0x0d, 0x1f, 0xba, 0x37, 0xb7, | ||
| 339 | 0xb2, 0xb6, 0x30, 0xb8, 0x2f, 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x98, | ||
| 340 | 0x09, 0x02, 0x21, 0x6d, 0x30, 0x90, 0x36, 0xe8, 0xdc, 0xc0, 0x6b, 0xf8, | ||
| 341 | 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0x99, 0x85, 0x8d, 0xd1, | ||
| 342 | 0xbd, 0xc9, 0xc9, 0x4c, 0x10, 0x88, 0x69, 0x83, 0x81, 0xc0, 0x41, 0x17, | ||
| 343 | 0x07, 0x5e, 0xc3, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, 0x2d, 0x8d, 0xae, | ||
| 344 | 0xec, 0x0b, 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x82, 0x40, 0x50, 0x1b, 0x0c, | ||
| 345 | 0x64, 0x0e, 0x3a, 0x3a, 0xf0, 0x1a, 0x1e, 0x59, 0x6f, 0x66, 0x66, 0x73, | ||
| 346 | 0x65, 0x74, 0x13, 0x04, 0xa2, 0xda, 0x60, 0x20, 0x76, 0xd0, 0xdd, 0x81, | ||
| 347 | 0xd7, 0xd0, 0x90, 0x1a, 0x7b, 0x2b, 0x33, 0x33, 0x9b, 0x20, 0x10, 0xd6, | ||
| 348 | 0x06, 0x03, 0xc9, 0x83, 0x4e, 0x0f, 0xbc, 0x86, 0xc6, 0xd1, 0xd8, 0x5b, | ||
| 349 | 0x99, 0x99, 0xd9, 0x04, 0x81, 0xb8, 0x36, 0x18, 0x08, 0x1f, 0x74, 0x7d, | ||
| 350 | 0xe0, 0x35, 0x34, 0x84, 0xc6, 0xde, 0xca, 0xcc, 0xcc, 0x26, 0x08, 0x04, | ||
| 351 | 0xb6, 0xc1, 0x40, 0xfe, 0xa0, 0x03, 0x05, 0xaf, 0xd9, 0xd0, 0x4c, 0x9f, | ||
| 352 | 0x18, 0x94, 0x41, 0x1a, 0xb0, 0xc1, 0x1b, 0xc8, 0x41, 0x1d, 0xe0, 0xc1, | ||
| 353 | 0x1e, 0xf8, 0x41, 0x28, 0x6c, 0x18, 0x88, 0x4d, 0x14, 0x26, 0x08, 0x02, | ||
| 354 | 0xb0, 0x01, 0xd8, 0x30, 0x10, 0xa5, 0x50, 0x0a, 0x1b, 0x02, 0x53, 0xd8, | ||
| 355 | 0x30, 0x0c, 0xa4, 0x70, 0x0a, 0x13, 0x04, 0xaf, 0x0c, 0x36, 0x04, 0xa9, | ||
| 356 | 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, | ||
| 357 | 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, 0xa1, 0xd0, 0x26, 0x08, 0xc5, | ||
| 358 | 0xb6, 0x21, 0x20, 0x26, 0x08, 0x05, 0x37, 0x41, 0x28, 0xba, 0x0d, 0x0b, | ||
| 359 | 0xc1, 0x0a, 0xad, 0xe0, 0x0a, 0xaf, 0x00, 0x0b, 0x03, 0x2c, 0x10, 0xb1, | ||
| 360 | 0x00, 0x10, 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, | ||
| 361 | 0x14, 0xde, 0x06, 0xa1, 0xeb, 0x36, 0x2c, 0xc3, 0x2c, 0xb4, 0x42, 0x2c, | ||
| 362 | 0xbc, 0x02, 0x2d, 0x0c, 0xb4, 0x30, 0xc4, 0x42, 0x2d, 0xb0, 0x18, 0x7a, | ||
| 363 | 0x62, 0x7a, 0x92, 0x9a, 0x20, 0x10, 0xd9, 0x06, 0xa1, 0xc3, 0x85, 0x0d, | ||
| 364 | 0x0b, 0x73, 0x0b, 0xad, 0x10, 0x0b, 0xaf, 0x40, 0x0b, 0x03, 0x2c, 0x30, | ||
| 365 | 0xb1, 0x90, 0x0b, 0x1b, 0x06, 0x59, 0xb0, 0x05, 0x5d, 0x60, 0x32, 0x65, | ||
| 366 | 0xf5, 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xbe, 0x0d, | ||
| 367 | 0x0b, 0xc1, 0x0b, 0xad, 0xd0, 0x0b, 0xaf, 0x10, 0x0b, 0x03, 0x2c, 0x10, | ||
| 368 | 0xb1, 0x90, 0x0b, 0x1b, 0x02, 0x5f, 0xd8, 0x30, 0xec, 0xc2, 0x2f, 0x00, | ||
| 369 | 0x1b, 0x0a, 0x52, 0x58, 0x05, 0x70, 0xd0, 0x00, 0x1a, 0x66, 0x6c, 0x6f, | ||
| 370 | 0x61, 0x74, 0x73, 0x2c, 0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x68, 0xcc, 0xa5, | ||
| 371 | 0x9d, 0x7d, 0xb1, 0x91, 0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x9a, 0xa3, 0x23, | ||
| 372 | 0x42, 0x57, 0x86, 0xf7, 0xe5, 0xf6, 0x26, 0xd7, 0xb6, 0x41, 0x11, 0x07, | ||
| 373 | 0x6f, 0x1c, 0xe8, 0x80, 0x1c, 0x90, 0x72, 0x08, 0x03, 0x73, 0x18, 0xaa, | ||
| 374 | 0xb0, 0xb1, 0xd9, 0xb5, 0xb9, 0xa4, 0x91, 0x95, 0xb9, 0xd1, 0x4d, 0x09, | ||
| 375 | 0x82, 0x2a, 0x64, 0x78, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, | ||
| 376 | 0x53, 0x02, 0xa2, 0x09, 0x19, 0x9e, 0x8b, 0x5d, 0x18, 0x9b, 0x5d, 0x99, | ||
| 377 | 0xdc, 0x94, 0xa0, 0xa8, 0x43, 0x86, 0xe7, 0x32, 0x87, 0x16, 0x46, 0x56, | ||
| 378 | 0x26, 0xd7, 0xf4, 0x46, 0x56, 0xc6, 0x36, 0x25, 0x40, 0xca, 0x90, 0xe1, | ||
| 379 | 0xb9, 0xc8, 0x95, 0xcd, 0xbd, 0xd5, 0xc9, 0x8d, 0x95, 0xcd, 0x4d, 0x09, | ||
| 380 | 0xb2, 0x4a, 0x64, 0x78, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x6e, | ||
| 381 | 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x04, 0x51, 0x38, | ||
| 382 | 0x85, 0x3a, 0x64, 0x78, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x53, | ||
| 383 | 0x74, 0x61, 0x74, 0x65, 0x53, 0x82, 0x54, 0xa8, 0x43, 0x86, 0xe7, 0x52, | ||
| 384 | 0xe6, 0x46, 0x27, 0x97, 0x07, 0xf5, 0x96, 0xe6, 0x46, 0x37, 0x37, 0x25, | ||
| 385 | 0x00, 0x87, 0x2e, 0x64, 0x78, 0x2e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, | ||
| 386 | 0x72, 0x73, 0x53, 0x02, 0x73, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 387 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 388 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 389 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 390 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 391 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 392 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 393 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 394 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 395 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 396 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 397 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 398 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 399 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 400 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 401 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 402 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 403 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 404 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 405 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 406 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 407 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 408 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 409 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, | ||
| 410 | 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, | ||
| 411 | 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, | ||
| 412 | 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 413 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, | ||
| 414 | 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, | ||
| 415 | 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, | ||
| 416 | 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, | ||
| 417 | 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, | ||
| 418 | 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, 0x10, 0x7e, | ||
| 419 | 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11, | ||
| 420 | 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x06, 0x40, 0x30, 0x00, | ||
| 421 | 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, | ||
| 422 | 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x58, 0xef, | ||
| 423 | 0xcd, 0x6c, 0xfa, 0x5e, 0xef, 0x87, 0x2e, 0x7c, 0xbc, 0x3b, 0x5f, 0x38, | ||
| 424 | 0xb8, 0x44, 0x58, 0x49, 0x4c, 0x8c, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, | ||
| 425 | 0x00, 0xe3, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, | ||
| 426 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, | ||
| 427 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 428 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 429 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 430 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 431 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 432 | 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 433 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, | ||
| 434 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, | ||
| 435 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, | ||
| 436 | 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, | ||
| 437 | 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, | ||
| 438 | 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 439 | 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, | ||
| 440 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 441 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 442 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 443 | 0x4c, 0x10, 0x7c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, | ||
| 444 | 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, | ||
| 445 | 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, | ||
| 446 | 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x18, 0x63, | ||
| 447 | 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, | ||
| 448 | 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b, 0x63, 0x0c, 0x42, | ||
| 449 | 0xc8, 0xa0, 0x76, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, | ||
| 450 | 0x54, 0xb1, 0x12, 0x93, 0x5f, 0xdc, 0x36, 0x22, 0xc6, 0x18, 0xa3, 0x10, | ||
| 451 | 0x8f, 0x30, 0x42, 0x70, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x10, 0x49, | ||
| 452 | 0x73, 0x20, 0x60, 0x18, 0x81, 0x18, 0x66, 0x6a, 0x83, 0x71, 0x60, 0x87, | ||
| 453 | 0x70, 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87, | ||
| 454 | 0x7a, 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87, | ||
| 455 | 0x71, 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87, | ||
| 456 | 0x70, 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03, | ||
| 457 | 0x3d, 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87, | ||
| 458 | 0x7c, 0x80, 0x87, 0x72, 0x40, 0x01, 0x99, 0x49, 0x0c, 0xc6, 0x81, 0x1d, | ||
| 459 | 0xc2, 0x61, 0x1e, 0xe6, 0xc1, 0x0d, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, | ||
| 460 | 0xea, 0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, | ||
| 461 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, | ||
| 462 | 0xc2, 0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, | ||
| 463 | 0x90, 0x60, 0x2f, 0xe1, 0x4b, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, | ||
| 464 | 0xc4, 0x8c, 0x31, 0xc6, 0x18, 0x63, 0x58, 0x6b, 0x2d, 0xe9, 0x9b, 0xa4, | ||
| 465 | 0x29, 0xa2, 0x84, 0xc9, 0x67, 0x01, 0xe6, 0x59, 0x88, 0x88, 0x9d, 0x80, | ||
| 466 | 0x89, 0x40, 0x01, 0x21, 0x9e, 0x0e, 0x04, 0x00, 0x00, 0x13, 0x14, 0x72, | ||
| 467 | 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, | ||
| 468 | 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, | ||
| 469 | 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 470 | 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 471 | 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, | ||
| 472 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 473 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 474 | 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 475 | 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 476 | 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, | ||
| 477 | 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 478 | 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 479 | 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, | ||
| 480 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, | ||
| 481 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, | ||
| 482 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, | ||
| 483 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, | ||
| 484 | 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, | ||
| 485 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, | ||
| 486 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, | ||
| 487 | 0x50, 0x0c, 0x45, 0x50, 0x12, 0x05, 0x1c, 0x50, 0x06, 0xe5, 0x41, 0xa5, | ||
| 488 | 0x24, 0xca, 0xa0, 0x10, 0x46, 0x00, 0x8a, 0xa0, 0x40, 0x28, 0xcf, 0x00, | ||
| 489 | 0xd0, 0x9e, 0x01, 0xa0, 0x3e, 0x03, 0x40, 0x7e, 0x2c, 0x87, 0x21, 0x00, | ||
| 490 | 0x00, 0x00, 0x9e, 0x07, 0x00, 0x02, 0x81, 0x40, 0x00, 0x79, 0x18, 0x00, | ||
| 491 | 0x00, 0x6a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, | ||
| 492 | 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, | ||
| 493 | 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, | ||
| 494 | 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, | ||
| 495 | 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, | ||
| 496 | 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, | ||
| 497 | 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, | ||
| 498 | 0x08, 0x19, 0x45, 0x60, 0x82, 0x40, 0x24, 0x13, 0x04, 0x42, 0xd9, 0x20, | ||
| 499 | 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, 0x82, 0x18, 0x18, 0xc2, 0xd9, 0x10, | ||
| 500 | 0x3c, 0x13, 0x84, 0xad, 0x9a, 0x20, 0x10, 0xcb, 0x06, 0x84, 0x88, 0x16, | ||
| 501 | 0x62, 0x18, 0x24, 0x60, 0x43, 0x30, 0x4d, 0x10, 0x3a, 0x6b, 0x03, 0x42, | ||
| 502 | 0x54, 0x0b, 0x41, 0x0c, 0x04, 0xb0, 0x21, 0xb0, 0x36, 0x10, 0x10, 0x40, | ||
| 503 | 0x5d, 0x13, 0x04, 0xef, 0xda, 0x10, 0x64, 0x13, 0x04, 0x01, 0x20, 0xd1, | ||
| 504 | 0x16, 0x96, 0xe6, 0xc6, 0x65, 0xca, 0xea, 0x0b, 0xea, 0x6d, 0x2e, 0x8d, | ||
| 505 | 0x2e, 0xed, 0xcd, 0x6d, 0x82, 0x50, 0x38, 0x13, 0x84, 0xe2, 0xd9, 0x10, | ||
| 506 | 0x10, 0x13, 0x84, 0x02, 0x9a, 0x20, 0x14, 0xd1, 0x86, 0x85, 0xe8, 0xbc, | ||
| 507 | 0x0f, 0x0c, 0xc2, 0x60, 0x08, 0x03, 0x42, 0x0c, 0x00, 0x22, 0x54, 0x45, | ||
| 508 | 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x13, 0x84, 0x42, 0x9a, 0x20, 0x10, | ||
| 509 | 0xcc, 0x06, 0xc1, 0x0c, 0xcc, 0x60, 0xc3, 0x32, 0x90, 0x81, 0x27, 0x06, | ||
| 510 | 0x60, 0x50, 0x06, 0x43, 0x19, 0x0c, 0x62, 0x70, 0x06, 0x2c, 0x86, 0x9e, | ||
| 511 | 0x98, 0x9e, 0xa4, 0x26, 0x08, 0x44, 0xb3, 0x41, 0x30, 0x03, 0x35, 0xd8, | ||
| 512 | 0xb0, 0x30, 0x69, 0xe0, 0x89, 0x01, 0x18, 0x94, 0xc1, 0x10, 0x06, 0x8c, | ||
| 513 | 0x18, 0xac, 0xc1, 0x86, 0x61, 0x0c, 0xd0, 0x80, 0x0d, 0x98, 0x4c, 0x59, | ||
| 514 | 0x7d, 0x51, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x4d, 0x10, 0x8a, 0x69, 0xc3, | ||
| 515 | 0x42, 0xb8, 0x81, 0xf7, 0x06, 0x60, 0x20, 0x06, 0x43, 0x18, 0x10, 0x62, | ||
| 516 | 0xb0, 0x06, 0x1b, 0x02, 0x38, 0xd8, 0x30, 0xb4, 0x41, 0x1c, 0x00, 0x1b, | ||
| 517 | 0x8a, 0x8d, 0x93, 0x03, 0x0c, 0xa8, 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, | ||
| 518 | 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, | ||
| 519 | 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, | ||
| 520 | 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x02, 0xa3, 0x0e, 0x19, | ||
| 521 | 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, | ||
| 522 | 0xdb, 0x94, 0x00, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, | ||
| 523 | 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0xb8, 0xea, 0x90, 0xe1, 0xb9, 0xd8, | ||
| 524 | 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, | ||
| 525 | 0xb2, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, | ||
| 526 | 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x39, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 527 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 528 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 529 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 530 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 531 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 532 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 533 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 534 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 535 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 536 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 537 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 538 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 539 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 540 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 541 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 542 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 543 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 544 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 545 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 546 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 547 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 548 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 549 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, | ||
| 550 | 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, | ||
| 551 | 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, | ||
| 552 | 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 553 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, | ||
| 554 | 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, | ||
| 555 | 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, | ||
| 556 | 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, | ||
| 557 | 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, | ||
| 558 | 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, 0x10, 0x7e, | ||
| 559 | 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11, | ||
| 560 | 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x06, 0x40, 0x30, 0x00, | ||
| 561 | 0xd2, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x46, 0x00, 0x00, | ||
| 562 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 563 | 0x00, 0x24, 0x47, 0x00, 0x88, 0xcc, 0x00, 0x14, 0x42, 0x29, 0x94, 0x5c, | ||
| 564 | 0xe1, 0x95, 0x1d, 0x95, 0x12, 0xa0, 0x31, 0x03, 0x00, 0x23, 0x06, 0x09, | ||
| 565 | 0x00, 0x82, 0x60, 0x30, 0x71, 0x05, 0xa4, 0x69, 0xc9, 0x88, 0x41, 0x02, | ||
| 566 | 0x80, 0x20, 0x18, 0x4c, 0x9d, 0x31, 0x6d, 0x9b, 0x32, 0x62, 0x90, 0x00, | ||
| 567 | 0x20, 0x08, 0x06, 0x93, 0x77, 0x44, 0x5c, 0xb7, 0x8c, 0x18, 0x24, 0x00, | ||
| 568 | 0x08, 0x82, 0x81, 0x31, 0x06, 0xca, 0xd6, 0x4d, 0xcb, 0x88, 0x41, 0x02, | ||
| 569 | 0x80, 0x20, 0x18, 0x18, 0x64, 0xb0, 0x70, 0x9e, 0xc1, 0x8c, 0x18, 0x24, | ||
| 570 | 0x00, 0x08, 0x82, 0x81, 0x51, 0x06, 0x4c, 0xf7, 0x51, 0xcd, 0x88, 0x41, | ||
| 571 | 0x02, 0x80, 0x20, 0x18, 0x18, 0x66, 0xd0, 0x78, 0x60, 0x80, 0x39, 0x23, | ||
| 572 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x9c, 0x81, 0x23, 0x06, 0x61, 0x70, | ||
| 573 | 0x3d, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xa0, 0xc1, 0x33, 0x06, | ||
| 574 | 0x62, 0xa0, 0x40, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0x9c, 0x41, | ||
| 575 | 0x93, 0x20, 0x42, 0xa0, 0x28, 0x63, 0x30, 0x06, 0x91, 0x32, 0x9a, 0x10, | ||
| 576 | 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, | ||
| 577 | 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0xd0, 0x1a, 0x44, 0x0c, 0x1a, 0x8c, | ||
| 578 | 0x26, 0x04, 0x83, 0x19, 0x8d, 0x7c, 0x2c, 0x10, 0xe4, 0x63, 0x87, 0x23, | ||
| 579 | 0x1f, 0x0b, 0x08, 0xf9, 0x18, 0xf2, 0xc8, 0xc7, 0x02, 0x43, 0x3e, 0x96, | ||
| 580 | 0x40, 0xf2, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xc4, 0x0e, 0xba, | ||
| 581 | 0x38, 0x88, 0x83, 0x33, 0x30, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, | ||
| 582 | 0xb1, 0x83, 0x2e, 0x0e, 0xe2, 0x20, 0x23, 0x46, 0x0c, 0x12, 0x00, 0x04, | ||
| 583 | 0xc1, 0x00, 0xb1, 0x83, 0x2e, 0x0e, 0xe2, 0xc0, 0x0c, 0x84, 0x11, 0x83, | ||
| 584 | 0x04, 0x00, 0x41, 0x30, 0x40, 0xec, 0xa0, 0x8b, 0x83, 0x38, 0x48, 0x83, | ||
| 585 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 586 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl new file mode 100644 index 0000000..f705742 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | |||
| 2 | #include "D3D12_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | [RootSignature(TextureRS)] | ||
| 5 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 6 | { | ||
| 7 | return GetOutputColor(texture0.Sample(sampler0, input.tex)) * input.color; | ||
| 8 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h b/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h new file mode 100644 index 0000000..ac88cbb --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | #if 0 | ||
| 2 | Disassembly failed | ||
| 3 | #endif | ||
| 4 | |||
| 5 | const unsigned char g_AdvancedRS[] = { | ||
| 6 | 0x44, 0x58, 0x42, 0x43, 0x61, 0xd8, 0x65, 0x6e, 0x1d, 0x30, 0x64, 0x8a, | ||
| 7 | 0x54, 0x75, 0xb7, 0x59, 0xea, 0x11, 0x73, 0xec, 0x01, 0x00, 0x00, 0x00, | ||
| 8 | 0x24, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 9 | 0x52, 0x54, 0x53, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 10 | 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 11 | 0xf8, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 12 | 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 13 | 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 14 | 0x05, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 15 | 0x05, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 16 | 0x05, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 17 | 0x05, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 18 | 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 19 | 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 20 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 22 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, | ||
| 23 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 24 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, | ||
| 25 | 0x01, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 26 | 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 27 | 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, | ||
| 28 | 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 30 | 0xff, 0xff, 0xff, 0xff | ||
| 31 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h b/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h new file mode 100644 index 0000000..e47eb5c --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | #if 0 | ||
| 2 | Disassembly failed | ||
| 3 | #endif | ||
| 4 | |||
| 5 | const unsigned char g_ColorRS[] = { | ||
| 6 | 0x44, 0x58, 0x42, 0x43, 0x1a, 0x67, 0x3b, 0x20, 0xac, 0xdc, 0xbb, 0xa0, | ||
| 7 | 0x3c, 0x72, 0xa7, 0xdf, 0x14, 0xa5, 0x3a, 0x2e, 0x01, 0x00, 0x00, 0x00, | ||
| 8 | 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 9 | 0x52, 0x54, 0x53, 0x30, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 10 | 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 11 | 0x48, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 12 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 13 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 14 | 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 15 | 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00 | ||
| 16 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h b/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h new file mode 100644 index 0000000..2675b98 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #if 0 | ||
| 2 | Disassembly failed | ||
| 3 | #endif | ||
| 4 | |||
| 5 | const unsigned char g_TextureRS[] = { | ||
| 6 | 0x44, 0x58, 0x42, 0x43, 0xbc, 0x46, 0x63, 0x56, 0xe3, 0xea, 0x41, 0x4c, | ||
| 7 | 0xf7, 0x90, 0x24, 0xc2, 0x14, 0x4d, 0x79, 0xdd, 0x01, 0x00, 0x00, 0x00, | ||
| 8 | 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 9 | 0x52, 0x54, 0x53, 0x30, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 10 | 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 11 | 0xa0, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 12 | 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 13 | 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 14 | 0x05, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 15 | 0x05, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 16 | 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 17 | 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 18 | 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 20 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, | ||
| 21 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 22 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff | ||
| 23 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli b/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli new file mode 100644 index 0000000..4bf8074 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | #pragma pack_matrix( row_major ) | ||
| 2 | |||
| 3 | cbuffer VertexShaderConstants : register(b0) | ||
| 4 | { | ||
| 5 | matrix model; | ||
| 6 | matrix projectionAndView; | ||
| 7 | }; | ||
| 8 | |||
| 9 | #define ColorRS \ | ||
| 10 | "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \ | ||
| 11 | "DENY_DOMAIN_SHADER_ROOT_ACCESS |" \ | ||
| 12 | "DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \ | ||
| 13 | "DENY_HULL_SHADER_ROOT_ACCESS )," \ | ||
| 14 | "RootConstants(num32BitConstants=32, b0)," \ | ||
| 15 | "RootConstants(num32BitConstants=24, b1)"\ | ||
| 16 | |||
| 17 | #define TextureRS \ | ||
| 18 | "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \ | ||
| 19 | " DENY_DOMAIN_SHADER_ROOT_ACCESS |" \ | ||
| 20 | " DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \ | ||
| 21 | " DENY_HULL_SHADER_ROOT_ACCESS )," \ | ||
| 22 | "RootConstants(num32BitConstants=32, b0),"\ | ||
| 23 | "RootConstants(num32BitConstants=24, b1),"\ | ||
| 24 | "DescriptorTable ( SRV(t0), visibility = SHADER_VISIBILITY_PIXEL ),"\ | ||
| 25 | "DescriptorTable ( Sampler(s0), visibility = SHADER_VISIBILITY_PIXEL )" | ||
| 26 | |||
| 27 | #define AdvancedRS \ | ||
| 28 | "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \ | ||
| 29 | " DENY_DOMAIN_SHADER_ROOT_ACCESS |" \ | ||
| 30 | " DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \ | ||
| 31 | " DENY_HULL_SHADER_ROOT_ACCESS )," \ | ||
| 32 | "RootConstants(num32BitConstants=32, b0),"\ | ||
| 33 | "RootConstants(num32BitConstants=24, b1),"\ | ||
| 34 | "DescriptorTable ( SRV(t0), visibility = SHADER_VISIBILITY_PIXEL ),"\ | ||
| 35 | "DescriptorTable ( SRV(t1), visibility = SHADER_VISIBILITY_PIXEL ),"\ | ||
| 36 | "DescriptorTable ( SRV(t2), visibility = SHADER_VISIBILITY_PIXEL ),"\ | ||
| 37 | "DescriptorTable ( Sampler(s0), visibility = SHADER_VISIBILITY_PIXEL )" | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl new file mode 100644 index 0000000..c7d2433 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | #include "D3D12_Shader_Common.hlsli" | ||
| 2 | |||
| 3 | struct VertexShaderInput | ||
| 4 | { | ||
| 5 | float3 pos : POSITION; | ||
| 6 | float2 tex : TEXCOORD0; | ||
| 7 | float4 color : COLOR0; | ||
| 8 | }; | ||
| 9 | |||
| 10 | struct VertexShaderOutput | ||
| 11 | { | ||
| 12 | float4 pos : SV_POSITION; | ||
| 13 | float2 tex : TEXCOORD0; | ||
| 14 | float4 color : COLOR0; | ||
| 15 | }; | ||
| 16 | |||
| 17 | [RootSignature(ColorRS)] | ||
| 18 | VertexShaderOutput mainColor(VertexShaderInput input) | ||
| 19 | { | ||
| 20 | VertexShaderOutput output; | ||
| 21 | float4 pos = float4(input.pos, 1.0f); | ||
| 22 | |||
| 23 | // Transform the vertex position into projected space. | ||
| 24 | pos = mul(pos, model); | ||
| 25 | pos = mul(pos, projectionAndView); | ||
| 26 | output.pos = pos; | ||
| 27 | |||
| 28 | // Pass through texture coordinates and color values without transformation | ||
| 29 | output.tex = input.tex; | ||
| 30 | output.color = input.color; | ||
| 31 | |||
| 32 | return output; | ||
| 33 | } | ||
| 34 | |||
| 35 | [RootSignature(TextureRS)] | ||
| 36 | VertexShaderOutput mainTexture(VertexShaderInput input) | ||
| 37 | { | ||
| 38 | return mainColor(input); | ||
| 39 | } | ||
| 40 | |||
| 41 | [RootSignature(AdvancedRS)] | ||
| 42 | VertexShaderOutput mainAdvanced(VertexShaderInput input) | ||
| 43 | { | ||
| 44 | return mainColor(input); | ||
| 45 | } | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h new file mode 100644 index 0000000..5c358d5 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h | |||
| @@ -0,0 +1,653 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; POSITION 0 xyz 0 NONE float xyz | ||
| 8 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 9 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; SV_Position 0 xyzw 0 POS float xyzw | ||
| 17 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 18 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 19 | ; | ||
| 20 | ; shader hash: c170d994513745a8e268b8d54da903ed | ||
| 21 | ; | ||
| 22 | ; Pipeline Runtime Information: | ||
| 23 | ; | ||
| 24 | ; Vertex Shader | ||
| 25 | ; OutputPositionPresent=1 | ||
| 26 | ; | ||
| 27 | ; | ||
| 28 | ; Input signature: | ||
| 29 | ; | ||
| 30 | ; Name Index InterpMode DynIdx | ||
| 31 | ; -------------------- ----- ---------------------- ------ | ||
| 32 | ; POSITION 0 | ||
| 33 | ; TEXCOORD 0 | ||
| 34 | ; COLOR 0 | ||
| 35 | ; | ||
| 36 | ; Output signature: | ||
| 37 | ; | ||
| 38 | ; Name Index InterpMode DynIdx | ||
| 39 | ; -------------------- ----- ---------------------- ------ | ||
| 40 | ; SV_Position 0 noperspective | ||
| 41 | ; TEXCOORD 0 linear | ||
| 42 | ; COLOR 0 linear | ||
| 43 | ; | ||
| 44 | ; Buffer Definitions: | ||
| 45 | ; | ||
| 46 | ; cbuffer VertexShaderConstants | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; struct hostlayout.VertexShaderConstants | ||
| 50 | ; { | ||
| 51 | ; | ||
| 52 | ; row_major float4x4 model; ; Offset: 0 | ||
| 53 | ; row_major float4x4 projectionAndView; ; Offset: 64 | ||
| 54 | ; | ||
| 55 | ; } VertexShaderConstants; ; Offset: 0 Size: 128 | ||
| 56 | ; | ||
| 57 | ; } | ||
| 58 | ; | ||
| 59 | ; | ||
| 60 | ; Resource Bindings: | ||
| 61 | ; | ||
| 62 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 63 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 64 | ; VertexShaderConstants cbuffer NA NA CB0 cb0 1 | ||
| 65 | ; | ||
| 66 | ; | ||
| 67 | ; ViewId state: | ||
| 68 | ; | ||
| 69 | ; Number of inputs: 12, outputs: 12 | ||
| 70 | ; Outputs dependent on ViewId: { } | ||
| 71 | ; Inputs contributing to computation of Outputs: | ||
| 72 | ; output 0 depends on inputs: { 0, 1, 2 } | ||
| 73 | ; output 1 depends on inputs: { 0, 1, 2 } | ||
| 74 | ; output 2 depends on inputs: { 0, 1, 2 } | ||
| 75 | ; output 3 depends on inputs: { 0, 1, 2 } | ||
| 76 | ; output 4 depends on inputs: { 4 } | ||
| 77 | ; output 5 depends on inputs: { 5 } | ||
| 78 | ; output 8 depends on inputs: { 8 } | ||
| 79 | ; output 9 depends on inputs: { 9 } | ||
| 80 | ; output 10 depends on inputs: { 10 } | ||
| 81 | ; output 11 depends on inputs: { 11 } | ||
| 82 | ; | ||
| 83 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 84 | target triple = "dxil-ms-dx" | ||
| 85 | |||
| 86 | %dx.types.Handle = type { i8* } | ||
| 87 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 88 | %hostlayout.VertexShaderConstants = type { [4 x <4 x float>], [4 x <4 x float>] } | ||
| 89 | |||
| 90 | define void @mainAdvanced() { | ||
| 91 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 92 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 93 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 94 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 95 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 96 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 97 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 98 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 99 | %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 100 | %10 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 101 | %11 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 102 | %12 = extractvalue %dx.types.CBufRet.f32 %11, 0 | ||
| 103 | %13 = extractvalue %dx.types.CBufRet.f32 %11, 1 | ||
| 104 | %14 = extractvalue %dx.types.CBufRet.f32 %11, 2 | ||
| 105 | %15 = extractvalue %dx.types.CBufRet.f32 %11, 3 | ||
| 106 | %16 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 107 | %17 = extractvalue %dx.types.CBufRet.f32 %16, 0 | ||
| 108 | %18 = extractvalue %dx.types.CBufRet.f32 %16, 1 | ||
| 109 | %19 = extractvalue %dx.types.CBufRet.f32 %16, 2 | ||
| 110 | %20 = extractvalue %dx.types.CBufRet.f32 %16, 3 | ||
| 111 | %21 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 2) ; CBufferLoadLegacy(handle,regIndex) | ||
| 112 | %22 = extractvalue %dx.types.CBufRet.f32 %21, 0 | ||
| 113 | %23 = extractvalue %dx.types.CBufRet.f32 %21, 1 | ||
| 114 | %24 = extractvalue %dx.types.CBufRet.f32 %21, 2 | ||
| 115 | %25 = extractvalue %dx.types.CBufRet.f32 %21, 3 | ||
| 116 | %26 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 117 | %27 = extractvalue %dx.types.CBufRet.f32 %26, 0 | ||
| 118 | %28 = extractvalue %dx.types.CBufRet.f32 %26, 1 | ||
| 119 | %29 = extractvalue %dx.types.CBufRet.f32 %26, 2 | ||
| 120 | %30 = extractvalue %dx.types.CBufRet.f32 %26, 3 | ||
| 121 | %31 = fmul fast float %12, %8 | ||
| 122 | %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %31) ; FMad(a,b,c) | ||
| 123 | %33 = call float @dx.op.tertiary.f32(i32 46, float %10, float %22, float %32) ; FMad(a,b,c) | ||
| 124 | %34 = fadd fast float %33, %27 | ||
| 125 | %35 = fmul fast float %13, %8 | ||
| 126 | %36 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %35) ; FMad(a,b,c) | ||
| 127 | %37 = call float @dx.op.tertiary.f32(i32 46, float %10, float %23, float %36) ; FMad(a,b,c) | ||
| 128 | %38 = fadd fast float %37, %28 | ||
| 129 | %39 = fmul fast float %14, %8 | ||
| 130 | %40 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %39) ; FMad(a,b,c) | ||
| 131 | %41 = call float @dx.op.tertiary.f32(i32 46, float %10, float %24, float %40) ; FMad(a,b,c) | ||
| 132 | %42 = fadd fast float %41, %29 | ||
| 133 | %43 = fmul fast float %15, %8 | ||
| 134 | %44 = call float @dx.op.tertiary.f32(i32 46, float %9, float %20, float %43) ; FMad(a,b,c) | ||
| 135 | %45 = call float @dx.op.tertiary.f32(i32 46, float %10, float %25, float %44) ; FMad(a,b,c) | ||
| 136 | %46 = fadd fast float %45, %30 | ||
| 137 | %47 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 138 | %48 = extractvalue %dx.types.CBufRet.f32 %47, 0 | ||
| 139 | %49 = extractvalue %dx.types.CBufRet.f32 %47, 1 | ||
| 140 | %50 = extractvalue %dx.types.CBufRet.f32 %47, 2 | ||
| 141 | %51 = extractvalue %dx.types.CBufRet.f32 %47, 3 | ||
| 142 | %52 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 143 | %53 = extractvalue %dx.types.CBufRet.f32 %52, 0 | ||
| 144 | %54 = extractvalue %dx.types.CBufRet.f32 %52, 1 | ||
| 145 | %55 = extractvalue %dx.types.CBufRet.f32 %52, 2 | ||
| 146 | %56 = extractvalue %dx.types.CBufRet.f32 %52, 3 | ||
| 147 | %57 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 6) ; CBufferLoadLegacy(handle,regIndex) | ||
| 148 | %58 = extractvalue %dx.types.CBufRet.f32 %57, 0 | ||
| 149 | %59 = extractvalue %dx.types.CBufRet.f32 %57, 1 | ||
| 150 | %60 = extractvalue %dx.types.CBufRet.f32 %57, 2 | ||
| 151 | %61 = extractvalue %dx.types.CBufRet.f32 %57, 3 | ||
| 152 | %62 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 7) ; CBufferLoadLegacy(handle,regIndex) | ||
| 153 | %63 = extractvalue %dx.types.CBufRet.f32 %62, 0 | ||
| 154 | %64 = extractvalue %dx.types.CBufRet.f32 %62, 1 | ||
| 155 | %65 = extractvalue %dx.types.CBufRet.f32 %62, 2 | ||
| 156 | %66 = extractvalue %dx.types.CBufRet.f32 %62, 3 | ||
| 157 | %67 = fmul fast float %48, %34 | ||
| 158 | %68 = call float @dx.op.tertiary.f32(i32 46, float %38, float %53, float %67) ; FMad(a,b,c) | ||
| 159 | %69 = call float @dx.op.tertiary.f32(i32 46, float %42, float %58, float %68) ; FMad(a,b,c) | ||
| 160 | %70 = call float @dx.op.tertiary.f32(i32 46, float %46, float %63, float %69) ; FMad(a,b,c) | ||
| 161 | %71 = fmul fast float %49, %34 | ||
| 162 | %72 = call float @dx.op.tertiary.f32(i32 46, float %38, float %54, float %71) ; FMad(a,b,c) | ||
| 163 | %73 = call float @dx.op.tertiary.f32(i32 46, float %42, float %59, float %72) ; FMad(a,b,c) | ||
| 164 | %74 = call float @dx.op.tertiary.f32(i32 46, float %46, float %64, float %73) ; FMad(a,b,c) | ||
| 165 | %75 = fmul fast float %50, %34 | ||
| 166 | %76 = call float @dx.op.tertiary.f32(i32 46, float %38, float %55, float %75) ; FMad(a,b,c) | ||
| 167 | %77 = call float @dx.op.tertiary.f32(i32 46, float %42, float %60, float %76) ; FMad(a,b,c) | ||
| 168 | %78 = call float @dx.op.tertiary.f32(i32 46, float %46, float %65, float %77) ; FMad(a,b,c) | ||
| 169 | %79 = fmul fast float %51, %34 | ||
| 170 | %80 = call float @dx.op.tertiary.f32(i32 46, float %38, float %56, float %79) ; FMad(a,b,c) | ||
| 171 | %81 = call float @dx.op.tertiary.f32(i32 46, float %42, float %61, float %80) ; FMad(a,b,c) | ||
| 172 | %82 = call float @dx.op.tertiary.f32(i32 46, float %46, float %66, float %81) ; FMad(a,b,c) | ||
| 173 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %70) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 174 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %74) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 175 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %78) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 176 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %82) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 177 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 178 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 179 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 180 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 181 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 182 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 183 | ret void | ||
| 184 | } | ||
| 185 | |||
| 186 | ; Function Attrs: nounwind readnone | ||
| 187 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 188 | |||
| 189 | ; Function Attrs: nounwind | ||
| 190 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 191 | |||
| 192 | ; Function Attrs: nounwind readonly | ||
| 193 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 194 | |||
| 195 | ; Function Attrs: nounwind readnone | ||
| 196 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 197 | |||
| 198 | ; Function Attrs: nounwind readonly | ||
| 199 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 200 | |||
| 201 | attributes #0 = { nounwind readnone } | ||
| 202 | attributes #1 = { nounwind } | ||
| 203 | attributes #2 = { nounwind readonly } | ||
| 204 | |||
| 205 | !llvm.ident = !{!0} | ||
| 206 | !dx.version = !{!1} | ||
| 207 | !dx.valver = !{!2} | ||
| 208 | !dx.shaderModel = !{!3} | ||
| 209 | !dx.resources = !{!4} | ||
| 210 | !dx.viewIdState = !{!7} | ||
| 211 | !dx.entryPoints = !{!8} | ||
| 212 | |||
| 213 | !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} | ||
| 214 | !1 = !{i32 1, i32 0} | ||
| 215 | !2 = !{i32 1, i32 6} | ||
| 216 | !3 = !{!"vs", i32 6, i32 0} | ||
| 217 | !4 = !{null, null, !5, null} | ||
| 218 | !5 = !{!6} | ||
| 219 | !6 = !{i32 0, %hostlayout.VertexShaderConstants* undef, !"", i32 0, i32 0, i32 1, i32 128, null} | ||
| 220 | !7 = !{[14 x i32] [i32 12, i32 12, i32 15, i32 15, i32 15, i32 0, i32 16, i32 32, i32 0, i32 0, i32 256, i32 512, i32 1024, i32 2048]} | ||
| 221 | !8 = !{void ()* @mainAdvanced, !"mainAdvanced", !9, !4, null} | ||
| 222 | !9 = !{!10, !18, null} | ||
| 223 | !10 = !{!11, !14, !16} | ||
| 224 | !11 = !{i32 0, !"POSITION", i8 9, i8 0, !12, i8 0, i32 1, i8 3, i32 0, i8 0, !13} | ||
| 225 | !12 = !{i32 0} | ||
| 226 | !13 = !{i32 3, i32 7} | ||
| 227 | !14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 1, i8 0, !15} | ||
| 228 | !15 = !{i32 3, i32 3} | ||
| 229 | !16 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 0, i32 1, i8 4, i32 2, i8 0, !17} | ||
| 230 | !17 = !{i32 3, i32 15} | ||
| 231 | !18 = !{!19, !20, !21} | ||
| 232 | !19 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, !17} | ||
| 233 | !20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, !15} | ||
| 234 | !21 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !17} | ||
| 235 | |||
| 236 | #endif | ||
| 237 | |||
| 238 | const unsigned char g_mainAdvanced[] = { | ||
| 239 | 0x44, 0x58, 0x42, 0x43, 0xff, 0x5d, 0x02, 0x19, 0xed, 0x89, 0xe9, 0x33, | ||
| 240 | 0xf6, 0x5b, 0x76, 0x8c, 0x9f, 0x8b, 0x4d, 0xf1, 0x01, 0x00, 0x00, 0x00, | ||
| 241 | 0x63, 0x13, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 242 | 0x50, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, | ||
| 243 | 0x87, 0x02, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0x3f, 0x0a, 0x00, 0x00, | ||
| 244 | 0x5b, 0x0a, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, | ||
| 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, | ||
| 246 | 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 247 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 248 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 249 | 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 250 | 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 251 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 252 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, | ||
| 253 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 254 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 255 | 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, | ||
| 256 | 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, | ||
| 257 | 0x4f, 0x53, 0x47, 0x31, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 258 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
| 259 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 260 | 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 261 | 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 262 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 263 | 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 264 | 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 265 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 266 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, | ||
| 267 | 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, | ||
| 268 | 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x53, 0x56, 0x30, 0x1c, | ||
| 269 | 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 270 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 271 | 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x03, | ||
| 272 | 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 273 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, | ||
| 274 | 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 275 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, | ||
| 276 | 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, | ||
| 277 | 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 278 | 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, | ||
| 279 | 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, | ||
| 280 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, | ||
| 281 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x03, | ||
| 282 | 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 283 | 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, | ||
| 284 | 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
| 285 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, | ||
| 286 | 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 287 | 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, | ||
| 288 | 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f, | ||
| 289 | 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, | ||
| 290 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, | ||
| 291 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 292 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x52, | ||
| 293 | 0x54, 0x53, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, | ||
| 294 | 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, | ||
| 295 | 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 296 | 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 297 | 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, | ||
| 298 | 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, | ||
| 299 | 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, | ||
| 300 | 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, | ||
| 301 | 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 302 | 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 303 | 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, | ||
| 304 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 305 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, | ||
| 306 | 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, | ||
| 307 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 308 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, | ||
| 309 | 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 310 | 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 311 | 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, | ||
| 312 | 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 313 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, | ||
| 314 | 0xff, 0xff, 0xff, 0x53, 0x54, 0x41, 0x54, 0xb0, 0x06, 0x00, 0x00, 0x60, | ||
| 315 | 0x00, 0x01, 0x00, 0xac, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, | ||
| 316 | 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x98, 0x06, 0x00, 0x00, 0x42, | ||
| 317 | 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00, 0x0b, | ||
| 318 | 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, | ||
| 319 | 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, | ||
| 320 | 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, | ||
| 321 | 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, | ||
| 322 | 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, | ||
| 323 | 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, | ||
| 324 | 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, | ||
| 325 | 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, | ||
| 326 | 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, | ||
| 327 | 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, | ||
| 328 | 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, | ||
| 329 | 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, | ||
| 330 | 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, | ||
| 331 | 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, | ||
| 332 | 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, | ||
| 333 | 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, | ||
| 334 | 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, | ||
| 335 | 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, | ||
| 336 | 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, | ||
| 337 | 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, | ||
| 338 | 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, | ||
| 339 | 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, | ||
| 340 | 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, | ||
| 341 | 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, | ||
| 342 | 0x8b, 0x3d, 0x80, 0x81, 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, | ||
| 343 | 0x24, 0x58, 0x4b, 0x37, 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, | ||
| 344 | 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, | ||
| 345 | 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, | ||
| 346 | 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 347 | 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, | ||
| 348 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 349 | 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, | ||
| 350 | 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 351 | 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 352 | 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, | ||
| 353 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, | ||
| 354 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, | ||
| 355 | 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 356 | 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 357 | 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 358 | 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, | ||
| 359 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, | ||
| 360 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, | ||
| 361 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x14, | ||
| 362 | 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, | ||
| 363 | 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, | ||
| 364 | 0x05, 0x28, 0x50, 0x04, 0x85, 0x50, 0x06, 0xe5, 0x50, 0x12, 0x05, 0x18, | ||
| 365 | 0x50, 0x1e, 0x85, 0x51, 0xba, 0x01, 0x45, 0x41, 0xa5, 0x24, 0x46, 0x00, | ||
| 366 | 0xca, 0xa0, 0x08, 0x0a, 0x81, 0x62, 0x0d, 0xd0, 0x9d, 0x01, 0x20, 0x3c, | ||
| 367 | 0x03, 0x40, 0x79, 0x2c, 0x87, 0x61, 0x9e, 0xe7, 0x01, 0x20, 0x30, 0x00, | ||
| 368 | 0x00, 0x10, 0x01, 0x21, 0x10, 0x0c, 0x40, 0x50, 0x00, 0x00, 0x00, 0x79, | ||
| 369 | 0x18, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, | ||
| 370 | 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, | ||
| 371 | 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, | ||
| 372 | 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, | ||
| 373 | 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, | ||
| 374 | 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, | ||
| 375 | 0x08, 0x04, 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, | ||
| 376 | 0x21, 0x26, 0x08, 0xd8, 0xc6, 0xca, 0xaa, 0x4c, 0x8e, 0xae, 0x0c, 0x6f, | ||
| 377 | 0x0a, 0x2d, 0x8c, 0xac, 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, 0x8e, 0x2e, 0xcc, | ||
| 378 | 0x8d, 0x6e, 0x6e, 0x82, 0x40, 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, | ||
| 379 | 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x5c, | ||
| 380 | 0x1a, 0x8b, 0xb6, 0x37, 0xb2, 0x32, 0xb6, 0x09, 0x02, 0xa1, 0x4c, 0x10, | ||
| 381 | 0x88, 0x65, 0xc3, 0x30, 0x4d, 0xc3, 0x04, 0x81, 0x60, 0x26, 0x08, 0x44, | ||
| 382 | 0x33, 0x41, 0x20, 0x9c, 0x09, 0x42, 0x94, 0x6d, 0x50, 0x90, 0x48, 0xa2, | ||
| 383 | 0x2a, 0xc2, 0xba, 0x2e, 0x8c, 0x11, 0x9c, 0xdc, 0x9b, 0x5a, 0xd9, 0x18, | ||
| 384 | 0x5d, 0xda, 0x9b, 0x5b, 0x90, 0x1b, 0x99, 0x55, 0x5a, 0xd9, 0xdd, 0x04, | ||
| 385 | 0x81, 0x78, 0x36, 0x28, 0x88, 0x26, 0x51, 0xd5, 0x66, 0x5d, 0x17, 0xb6, | ||
| 386 | 0x61, 0x60, 0x32, 0x6e, 0xc3, 0x40, 0x40, 0xdd, 0x04, 0x41, 0x00, 0x36, | ||
| 387 | 0x00, 0x1b, 0x06, 0x02, 0x0c, 0xc0, 0x60, 0x43, 0x10, 0x06, 0x1b, 0x86, | ||
| 388 | 0xe1, 0x13, 0x83, 0x09, 0x42, 0xc6, 0x6d, 0x08, 0xc8, 0x80, 0x4c, 0x5b, | ||
| 389 | 0x58, 0x9a, 0x5b, 0x10, 0x99, 0x5d, 0x98, 0xdb, 0x58, 0x19, 0x19, 0x11, | ||
| 390 | 0xa8, 0xa7, 0xa9, 0x24, 0xaa, 0xa4, 0x27, 0xa7, 0x09, 0x42, 0x41, 0x4d, | ||
| 391 | 0x10, 0x8a, 0x6a, 0x43, 0x40, 0x4c, 0x10, 0x0a, 0x6b, 0x83, 0x50, 0x59, | ||
| 392 | 0x1b, 0x16, 0xe2, 0x0c, 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x35, | ||
| 393 | 0x20, 0xd2, 0x80, 0x0d, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49, | ||
| 394 | 0x11, 0x4d, 0x10, 0x8a, 0x6b, 0x83, 0x50, 0x55, 0x1b, 0x96, 0xc1, 0x0d, | ||
| 395 | 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x37, 0x18, 0xd2, 0x00, 0x0e, | ||
| 396 | 0x58, 0x0c, 0x3d, 0x31, 0x3d, 0x49, 0x4d, 0x10, 0x0a, 0x6c, 0x82, 0x40, | ||
| 397 | 0x40, 0x1b, 0x84, 0x8a, 0x0e, 0x36, 0x2c, 0x92, 0x1c, 0xa0, 0x41, 0x1a, | ||
| 398 | 0xa8, 0x41, 0x1a, 0x0c, 0x73, 0x20, 0xa5, 0x41, 0x1d, 0x6c, 0x18, 0xda, | ||
| 399 | 0x20, 0x0e, 0xec, 0x80, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, | ||
| 400 | 0x5d, 0xda, 0x9b, 0xdb, 0x86, 0x85, 0xc0, 0x03, 0x34, 0x58, 0x03, 0x35, | ||
| 401 | 0x98, 0x83, 0x61, 0x0e, 0x88, 0x34, 0xa8, 0x83, 0x0d, 0xcb, 0xe0, 0x06, | ||
| 402 | 0x68, 0x90, 0x06, 0x6a, 0xf0, 0x06, 0xc3, 0x1b, 0x0c, 0x69, 0x00, 0x07, | ||
| 403 | 0x1b, 0x16, 0x49, 0x0e, 0xd0, 0x20, 0x0d, 0xd4, 0xe0, 0x0d, 0x86, 0x39, | ||
| 404 | 0x90, 0xd2, 0xa0, 0x0e, 0x36, 0x0c, 0x79, 0xa0, 0x07, 0x7b, 0xb0, 0x61, | ||
| 405 | 0xb8, 0x03, 0x3e, 0x00, 0x36, 0x14, 0x9f, 0x19, 0xf4, 0xc1, 0x03, 0xd0, | ||
| 406 | 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x11, 0x8b, 0x34, | ||
| 407 | 0xb7, 0x39, 0xba, 0xb9, 0x09, 0x02, 0x21, 0xd1, 0x98, 0x4b, 0x3b, 0xfb, | ||
| 408 | 0x62, 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, 0x35, 0x47, 0x37, 0x41, 0x20, | ||
| 409 | 0xa6, 0x0d, 0xc8, 0x1f, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x5c, 0xa4, | ||
| 410 | 0x50, 0x0a, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc, | ||
| 411 | 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32, 0xb9, 0xb9, | ||
| 412 | 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e, 0x8c, | ||
| 413 | 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99, 0x43, | ||
| 414 | 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12, 0x20, | ||
| 415 | 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4, 0xc6, 0xca, | ||
| 416 | 0xe6, 0xa6, 0x04, 0x4e, 0x25, 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, 0xb2, | ||
| 417 | 0x20, 0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, | ||
| 418 | 0x42, 0x27, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, | ||
| 419 | 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x64, 0x50, 0x87, 0x0c, | ||
| 420 | 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, | ||
| 421 | 0x6e, 0x4a, 0xd0, 0x07, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc, | ||
| 422 | 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x79, | ||
| 423 | 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, | ||
| 424 | 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, | ||
| 425 | 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, | ||
| 426 | 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, | ||
| 427 | 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, | ||
| 428 | 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, | ||
| 429 | 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, | ||
| 430 | 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, | ||
| 431 | 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, | ||
| 432 | 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, | ||
| 433 | 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, | ||
| 434 | 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, | ||
| 435 | 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, | ||
| 436 | 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, | ||
| 437 | 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, | ||
| 438 | 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, | ||
| 439 | 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, | ||
| 440 | 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, | ||
| 441 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, | ||
| 442 | 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 443 | 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, | ||
| 444 | 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, | ||
| 445 | 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, | ||
| 446 | 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, | ||
| 447 | 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x71, | ||
| 448 | 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, | ||
| 449 | 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, | ||
| 450 | 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, | ||
| 451 | 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, | ||
| 452 | 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, | ||
| 453 | 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, | ||
| 454 | 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5, | ||
| 455 | 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, | ||
| 456 | 0x00, 0x0c, 0x03, 0x20, 0x8d, 0x36, 0x54, 0x40, 0x23, 0x10, 0x03, 0x00, | ||
| 457 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, | ||
| 458 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x70, 0xd9, 0x94, 0x51, | ||
| 459 | 0x37, 0x45, 0xa8, 0xe2, 0x68, 0xb8, 0xd5, 0x4d, 0xa9, 0x03, 0xed, 0x44, | ||
| 460 | 0x58, 0x49, 0x4c, 0x00, 0x09, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x40, | ||
| 461 | 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, | ||
| 462 | 0x00, 0x00, 0x00, 0xe8, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, | ||
| 463 | 0x0c, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, | ||
| 464 | 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, | ||
| 465 | 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, | ||
| 466 | 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, | ||
| 467 | 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, | ||
| 468 | 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, | ||
| 469 | 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, | ||
| 470 | 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, | ||
| 471 | 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, | ||
| 472 | 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, | ||
| 473 | 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, | ||
| 474 | 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, | ||
| 475 | 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, | ||
| 476 | 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, | ||
| 477 | 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, | ||
| 478 | 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, | ||
| 479 | 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, | ||
| 480 | 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, | ||
| 481 | 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, | ||
| 482 | 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, | ||
| 483 | 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, | ||
| 484 | 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, | ||
| 485 | 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, | ||
| 486 | 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, | ||
| 487 | 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, | ||
| 488 | 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, | ||
| 489 | 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, | ||
| 490 | 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, | ||
| 491 | 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, | ||
| 492 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, | ||
| 493 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 494 | 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 495 | 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 496 | 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, | ||
| 497 | 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, | ||
| 498 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, | ||
| 499 | 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, | ||
| 500 | 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, | ||
| 501 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, | ||
| 502 | 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
| 503 | 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 504 | 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 505 | 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 506 | 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, | ||
| 507 | 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, | ||
| 508 | 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, | ||
| 509 | 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x06, | ||
| 510 | 0xe5, 0x50, 0x04, 0xe5, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, | ||
| 511 | 0x0a, 0x81, 0xf0, 0x0c, 0x00, 0xe5, 0xb1, 0x1c, 0x86, 0x79, 0x9e, 0x07, | ||
| 512 | 0x80, 0xc0, 0x00, 0x00, 0x40, 0x04, 0x84, 0x40, 0x30, 0x00, 0x41, 0x01, | ||
| 513 | 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x1a, | ||
| 514 | 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, | ||
| 515 | 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, | ||
| 516 | 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, | ||
| 517 | 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, | ||
| 518 | 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, | ||
| 519 | 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, | ||
| 520 | 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0xd8, 0x44, 0x60, 0x82, 0x40, | ||
| 521 | 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, | ||
| 522 | 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x64, 0xd4, 0x86, 0x00, 0x9a, 0x20, | ||
| 523 | 0x08, 0x00, 0x99, 0xb6, 0xb0, 0x34, 0xb7, 0x20, 0x32, 0xbb, 0x30, 0xb7, | ||
| 524 | 0xb1, 0x32, 0x32, 0x22, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, | ||
| 525 | 0x13, 0x84, 0xc2, 0x99, 0x20, 0x14, 0xcf, 0x86, 0x80, 0x98, 0x20, 0x14, | ||
| 526 | 0xd0, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xc8, 0xb4, 0x0d, | ||
| 527 | 0x0b, 0x41, 0x55, 0xd6, 0x65, 0x0d, 0x18, 0x61, 0x6d, 0x44, 0xa8, 0x8a, | ||
| 528 | 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0xb4, 0x41, 0xc8, | ||
| 529 | 0xb2, 0x0d, 0xcb, 0xd0, 0x55, 0xd6, 0x65, 0x0d, 0xde, 0x60, 0x7d, 0x13, | ||
| 530 | 0x04, 0x82, 0x61, 0x31, 0xf4, 0xc4, 0xf4, 0x24, 0x35, 0x41, 0x28, 0xa4, | ||
| 531 | 0x09, 0x02, 0xd1, 0x6c, 0x10, 0x32, 0x32, 0xd8, 0xb0, 0x84, 0x81, 0x18, | ||
| 532 | 0x54, 0xd6, 0x65, 0x0d, 0x63, 0x10, 0x06, 0x56, 0x19, 0x6c, 0x18, 0x38, | ||
| 533 | 0x30, 0x30, 0x03, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, | ||
| 534 | 0x69, 0x6f, 0x6e, 0x1b, 0x16, 0x02, 0x0d, 0x2a, 0xec, 0x1a, 0x83, 0x61, | ||
| 535 | 0x0c, 0x08, 0xab, 0x0c, 0x36, 0x2c, 0x43, 0x57, 0x59, 0x97, 0x37, 0x78, | ||
| 536 | 0x83, 0xf5, 0x6d, 0x58, 0xc2, 0x40, 0x0c, 0x2a, 0xeb, 0xf2, 0x86, 0x31, | ||
| 537 | 0x08, 0x03, 0xab, 0x0c, 0x36, 0x0c, 0x69, 0xa0, 0x06, 0x6b, 0xb0, 0x61, | ||
| 538 | 0x38, 0x03, 0x36, 0x00, 0x36, 0x14, 0xd2, 0xd4, 0x06, 0x0f, 0x50, 0x85, | ||
| 539 | 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, | ||
| 540 | 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, | ||
| 541 | 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, | ||
| 542 | 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, | ||
| 543 | 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, | ||
| 544 | 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xe0, | ||
| 545 | 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, | ||
| 546 | 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, | ||
| 547 | 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x6d, | ||
| 548 | 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, | ||
| 549 | 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, | ||
| 550 | 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, | ||
| 551 | 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, | ||
| 552 | 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, | ||
| 553 | 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, | ||
| 554 | 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, | ||
| 555 | 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, | ||
| 556 | 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, | ||
| 557 | 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, | ||
| 558 | 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, | ||
| 559 | 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, | ||
| 560 | 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, | ||
| 561 | 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, | ||
| 562 | 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, | ||
| 563 | 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, | ||
| 564 | 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, | ||
| 565 | 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, | ||
| 566 | 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, | ||
| 567 | 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, | ||
| 568 | 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, | ||
| 569 | 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, | ||
| 570 | 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, | ||
| 571 | 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, | ||
| 572 | 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, | ||
| 573 | 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x36, | ||
| 574 | 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, | ||
| 575 | 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, | ||
| 576 | 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, | ||
| 577 | 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, | ||
| 578 | 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, | ||
| 579 | 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, | ||
| 580 | 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, | ||
| 581 | 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x0c, 0x03, 0x20, 0x8d, 0x36, 0x54, 0x40, | ||
| 582 | 0x23, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xcf, | ||
| 583 | 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, | ||
| 584 | 0x00, 0x00, 0x00, 0x44, 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec, | ||
| 585 | 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, | ||
| 586 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x61, 0x03, 0x63, 0x59, 0xc1, 0x88, | ||
| 587 | 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xdd, 0x21, 0x5d, 0x8f, 0x31, 0x62, | ||
| 588 | 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x87, 0x4c, 0x18, 0x71, 0x8c, 0x18, | ||
| 589 | 0x24, 0x00, 0x08, 0x82, 0x81, 0xf1, 0x25, 0x54, 0xf6, 0x20, 0x23, 0x06, | ||
| 590 | 0x09, 0x00, 0x82, 0x60, 0x60, 0x80, 0x81, 0x52, 0x69, 0x51, 0x32, 0x62, | ||
| 591 | 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x18, 0x2c, 0xdc, 0x36, 0x29, 0x23, | ||
| 592 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x88, 0x01, 0xd3, 0x71, 0xc8, 0x32, | ||
| 593 | 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x18, 0x34, 0x5d, 0x57, 0x31, | ||
| 594 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x90, 0x81, 0xe3, 0x79, 0x4a, | ||
| 595 | 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x19, 0x3c, 0xdf, 0x57, | ||
| 596 | 0x39, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0x90, 0x81, 0xa3, 0x80, | ||
| 597 | 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, | ||
| 598 | 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x69, 0x30, | ||
| 599 | 0x3d, 0x66, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, | ||
| 600 | 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, | ||
| 601 | 0x1b, 0x60, 0x54, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 602 | 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, | ||
| 603 | 0x41, 0x33, 0x07, 0x5d, 0xc6, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, | ||
| 604 | 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x5d, 0xf2, 0x19, | ||
| 605 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x07, 0x0f, 0xce, 0xe0, 0x7a, 0x82, | ||
| 606 | 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xf2, 0x00, 0x0d, 0xae, 0x25, | ||
| 607 | 0xb0, 0xe0, 0x80, 0x8e, 0x59, 0x9b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, | ||
| 608 | 0xc1, 0xe0, 0xe1, 0x83, 0x35, 0xd8, 0xa4, 0x60, 0xc4, 0x00, 0x01, 0x40, | ||
| 609 | 0x10, 0x0c, 0x9e, 0x3e, 0x60, 0x83, 0xcd, 0x09, 0x2c, 0x50, 0xa0, 0x63, | ||
| 610 | 0xd9, 0x27, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x40, 0xe1, | ||
| 611 | 0x0d, 0xbe, 0x2a, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x27, 0x14, | ||
| 612 | 0xe0, 0xe0, 0x8b, 0x02, 0x0b, 0x1a, 0xe8, 0x18, 0x37, 0x06, 0xf2, 0x19, | ||
| 613 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x14, 0xe6, 0x60, 0x0c, 0xb0, | ||
| 614 | 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x52, 0xa0, 0x83, 0x31, | ||
| 615 | 0xa0, 0x02, 0x0b, 0x20, 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, | ||
| 616 | 0x83, 0x0a, 0x72, 0xe0, 0x06, 0x74, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, | ||
| 617 | 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, | ||
| 618 | 0x20, 0x08, 0x06, 0x4d, 0x2b, 0xdc, 0xc1, 0x1c, 0xe8, 0xc1, 0x68, 0x42, | ||
| 619 | 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, | ||
| 620 | 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0xb2, 0xc0, 0x07, 0x78, 0xd0, | ||
| 621 | 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, | ||
| 622 | 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xdc, 0x42, | ||
| 623 | 0x28, 0xf4, 0xc1, 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 624 | 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xd8, 0x14, 0x06, 0xf2, 0x19, 0x31, | ||
| 625 | 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x17, 0x56, 0xc1, 0x7b, 0x82, 0x11, | ||
| 626 | 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x7a, 0x81, 0x15, 0xb6, 0x25, 0x18, | ||
| 627 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x17, 0x5a, 0x01, 0x3b, 0x02, | ||
| 628 | 0xb3, 0xca, 0x40, 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xf0, 0x80, | ||
| 629 | 0xc3, 0x2b, 0x88, 0x81, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1, | ||
| 630 | 0x13, 0x0e, 0xb0, 0xf0, 0x39, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, | ||
| 631 | 0x3c, 0xe2, 0x10, 0x0b, 0x9c, 0x12, 0x58, 0x96, 0x06, 0xf2, 0x19, 0x31, | ||
| 632 | 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x1c, 0x66, 0xc1, 0x0c, 0xaa, 0x60, | ||
| 633 | 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x72, 0xa0, 0x85, 0x31, 0x88, | ||
| 634 | 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xcc, 0xa1, 0x16, 0xc0, | ||
| 635 | 0xa0, 0x09, 0x8c, 0x6b, 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, | ||
| 636 | 0xc1, 0x83, 0x0e, 0xb7, 0xa0, 0x06, 0x58, 0x30, 0x62, 0x80, 0x00, 0x20, | ||
| 637 | 0x08, 0x06, 0x4f, 0x3a, 0xe0, 0xc2, 0x19, 0x50, 0xc1, 0x88, 0x01, 0x02, | ||
| 638 | 0x80, 0x20, 0x18, 0x3c, 0xea, 0x90, 0x0b, 0x64, 0x00, 0x05, 0x23, 0x06, | ||
| 639 | 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0x80, | ||
| 640 | 0x43, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, | ||
| 641 | 0x3a, 0xa0, 0x03, 0x2d, 0x24, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, | ||
| 642 | 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0xf8, 0x42, 0x31, 0x62, 0x90, 0x00, | ||
| 643 | 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0xc3, 0x2f, 0x04, | ||
| 644 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa4, 0x03, | ||
| 645 | 0x3a, 0x80, 0x43, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, | ||
| 646 | 0x0e, 0xb9, 0x90, 0x0e, 0xe8, 0x40, 0x0b, 0xac, 0x30, 0x62, 0x90, 0x00, | ||
| 647 | 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0xc2, 0x38, 0xa0, 0x03, 0x38, 0xc4, | ||
| 648 | 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xed, 0x90, 0x0b, 0xe3, | ||
| 649 | 0x80, 0x0e, 0xb4, 0x00, 0x0b, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, | ||
| 650 | 0xb4, 0x43, 0x2e, 0x8c, 0x03, 0x3a, 0xf8, 0xc2, 0x2b, 0x8c, 0x18, 0x24, | ||
| 651 | 0x00, 0x08, 0x82, 0x01, 0xd2, 0x0e, 0xb9, 0x30, 0x0e, 0xe8, 0xf0, 0x0b, | ||
| 652 | 0xae, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 653 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h new file mode 100644 index 0000000..36909c1 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h | |||
| @@ -0,0 +1,637 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; POSITION 0 xyz 0 NONE float xyz | ||
| 8 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 9 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; SV_Position 0 xyzw 0 POS float xyzw | ||
| 17 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 18 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 19 | ; | ||
| 20 | ; shader hash: 466968c79e75899fd3e9065346b2df1c | ||
| 21 | ; | ||
| 22 | ; Pipeline Runtime Information: | ||
| 23 | ; | ||
| 24 | ; Vertex Shader | ||
| 25 | ; OutputPositionPresent=1 | ||
| 26 | ; | ||
| 27 | ; | ||
| 28 | ; Input signature: | ||
| 29 | ; | ||
| 30 | ; Name Index InterpMode DynIdx | ||
| 31 | ; -------------------- ----- ---------------------- ------ | ||
| 32 | ; POSITION 0 | ||
| 33 | ; TEXCOORD 0 | ||
| 34 | ; COLOR 0 | ||
| 35 | ; | ||
| 36 | ; Output signature: | ||
| 37 | ; | ||
| 38 | ; Name Index InterpMode DynIdx | ||
| 39 | ; -------------------- ----- ---------------------- ------ | ||
| 40 | ; SV_Position 0 noperspective | ||
| 41 | ; TEXCOORD 0 linear | ||
| 42 | ; COLOR 0 linear | ||
| 43 | ; | ||
| 44 | ; Buffer Definitions: | ||
| 45 | ; | ||
| 46 | ; cbuffer VertexShaderConstants | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; struct hostlayout.VertexShaderConstants | ||
| 50 | ; { | ||
| 51 | ; | ||
| 52 | ; row_major float4x4 model; ; Offset: 0 | ||
| 53 | ; row_major float4x4 projectionAndView; ; Offset: 64 | ||
| 54 | ; | ||
| 55 | ; } VertexShaderConstants; ; Offset: 0 Size: 128 | ||
| 56 | ; | ||
| 57 | ; } | ||
| 58 | ; | ||
| 59 | ; | ||
| 60 | ; Resource Bindings: | ||
| 61 | ; | ||
| 62 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 63 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 64 | ; VertexShaderConstants cbuffer NA NA CB0 cb0 1 | ||
| 65 | ; | ||
| 66 | ; | ||
| 67 | ; ViewId state: | ||
| 68 | ; | ||
| 69 | ; Number of inputs: 12, outputs: 12 | ||
| 70 | ; Outputs dependent on ViewId: { } | ||
| 71 | ; Inputs contributing to computation of Outputs: | ||
| 72 | ; output 0 depends on inputs: { 0, 1, 2 } | ||
| 73 | ; output 1 depends on inputs: { 0, 1, 2 } | ||
| 74 | ; output 2 depends on inputs: { 0, 1, 2 } | ||
| 75 | ; output 3 depends on inputs: { 0, 1, 2 } | ||
| 76 | ; output 4 depends on inputs: { 4 } | ||
| 77 | ; output 5 depends on inputs: { 5 } | ||
| 78 | ; output 8 depends on inputs: { 8 } | ||
| 79 | ; output 9 depends on inputs: { 9 } | ||
| 80 | ; output 10 depends on inputs: { 10 } | ||
| 81 | ; output 11 depends on inputs: { 11 } | ||
| 82 | ; | ||
| 83 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 84 | target triple = "dxil-ms-dx" | ||
| 85 | |||
| 86 | %dx.types.Handle = type { i8* } | ||
| 87 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 88 | %hostlayout.VertexShaderConstants = type { [4 x <4 x float>], [4 x <4 x float>] } | ||
| 89 | |||
| 90 | define void @mainColor() { | ||
| 91 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 92 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 93 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 94 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 95 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 96 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 97 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 98 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 99 | %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 100 | %10 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 101 | %11 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 102 | %12 = extractvalue %dx.types.CBufRet.f32 %11, 0 | ||
| 103 | %13 = extractvalue %dx.types.CBufRet.f32 %11, 1 | ||
| 104 | %14 = extractvalue %dx.types.CBufRet.f32 %11, 2 | ||
| 105 | %15 = extractvalue %dx.types.CBufRet.f32 %11, 3 | ||
| 106 | %16 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 107 | %17 = extractvalue %dx.types.CBufRet.f32 %16, 0 | ||
| 108 | %18 = extractvalue %dx.types.CBufRet.f32 %16, 1 | ||
| 109 | %19 = extractvalue %dx.types.CBufRet.f32 %16, 2 | ||
| 110 | %20 = extractvalue %dx.types.CBufRet.f32 %16, 3 | ||
| 111 | %21 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 2) ; CBufferLoadLegacy(handle,regIndex) | ||
| 112 | %22 = extractvalue %dx.types.CBufRet.f32 %21, 0 | ||
| 113 | %23 = extractvalue %dx.types.CBufRet.f32 %21, 1 | ||
| 114 | %24 = extractvalue %dx.types.CBufRet.f32 %21, 2 | ||
| 115 | %25 = extractvalue %dx.types.CBufRet.f32 %21, 3 | ||
| 116 | %26 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 117 | %27 = extractvalue %dx.types.CBufRet.f32 %26, 0 | ||
| 118 | %28 = extractvalue %dx.types.CBufRet.f32 %26, 1 | ||
| 119 | %29 = extractvalue %dx.types.CBufRet.f32 %26, 2 | ||
| 120 | %30 = extractvalue %dx.types.CBufRet.f32 %26, 3 | ||
| 121 | %31 = fmul fast float %12, %8 | ||
| 122 | %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %31) ; FMad(a,b,c) | ||
| 123 | %33 = call float @dx.op.tertiary.f32(i32 46, float %10, float %22, float %32) ; FMad(a,b,c) | ||
| 124 | %34 = fadd fast float %33, %27 | ||
| 125 | %35 = fmul fast float %13, %8 | ||
| 126 | %36 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %35) ; FMad(a,b,c) | ||
| 127 | %37 = call float @dx.op.tertiary.f32(i32 46, float %10, float %23, float %36) ; FMad(a,b,c) | ||
| 128 | %38 = fadd fast float %37, %28 | ||
| 129 | %39 = fmul fast float %14, %8 | ||
| 130 | %40 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %39) ; FMad(a,b,c) | ||
| 131 | %41 = call float @dx.op.tertiary.f32(i32 46, float %10, float %24, float %40) ; FMad(a,b,c) | ||
| 132 | %42 = fadd fast float %41, %29 | ||
| 133 | %43 = fmul fast float %15, %8 | ||
| 134 | %44 = call float @dx.op.tertiary.f32(i32 46, float %9, float %20, float %43) ; FMad(a,b,c) | ||
| 135 | %45 = call float @dx.op.tertiary.f32(i32 46, float %10, float %25, float %44) ; FMad(a,b,c) | ||
| 136 | %46 = fadd fast float %45, %30 | ||
| 137 | %47 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 138 | %48 = extractvalue %dx.types.CBufRet.f32 %47, 0 | ||
| 139 | %49 = extractvalue %dx.types.CBufRet.f32 %47, 1 | ||
| 140 | %50 = extractvalue %dx.types.CBufRet.f32 %47, 2 | ||
| 141 | %51 = extractvalue %dx.types.CBufRet.f32 %47, 3 | ||
| 142 | %52 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 143 | %53 = extractvalue %dx.types.CBufRet.f32 %52, 0 | ||
| 144 | %54 = extractvalue %dx.types.CBufRet.f32 %52, 1 | ||
| 145 | %55 = extractvalue %dx.types.CBufRet.f32 %52, 2 | ||
| 146 | %56 = extractvalue %dx.types.CBufRet.f32 %52, 3 | ||
| 147 | %57 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 6) ; CBufferLoadLegacy(handle,regIndex) | ||
| 148 | %58 = extractvalue %dx.types.CBufRet.f32 %57, 0 | ||
| 149 | %59 = extractvalue %dx.types.CBufRet.f32 %57, 1 | ||
| 150 | %60 = extractvalue %dx.types.CBufRet.f32 %57, 2 | ||
| 151 | %61 = extractvalue %dx.types.CBufRet.f32 %57, 3 | ||
| 152 | %62 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 7) ; CBufferLoadLegacy(handle,regIndex) | ||
| 153 | %63 = extractvalue %dx.types.CBufRet.f32 %62, 0 | ||
| 154 | %64 = extractvalue %dx.types.CBufRet.f32 %62, 1 | ||
| 155 | %65 = extractvalue %dx.types.CBufRet.f32 %62, 2 | ||
| 156 | %66 = extractvalue %dx.types.CBufRet.f32 %62, 3 | ||
| 157 | %67 = fmul fast float %48, %34 | ||
| 158 | %68 = call float @dx.op.tertiary.f32(i32 46, float %38, float %53, float %67) ; FMad(a,b,c) | ||
| 159 | %69 = call float @dx.op.tertiary.f32(i32 46, float %42, float %58, float %68) ; FMad(a,b,c) | ||
| 160 | %70 = call float @dx.op.tertiary.f32(i32 46, float %46, float %63, float %69) ; FMad(a,b,c) | ||
| 161 | %71 = fmul fast float %49, %34 | ||
| 162 | %72 = call float @dx.op.tertiary.f32(i32 46, float %38, float %54, float %71) ; FMad(a,b,c) | ||
| 163 | %73 = call float @dx.op.tertiary.f32(i32 46, float %42, float %59, float %72) ; FMad(a,b,c) | ||
| 164 | %74 = call float @dx.op.tertiary.f32(i32 46, float %46, float %64, float %73) ; FMad(a,b,c) | ||
| 165 | %75 = fmul fast float %50, %34 | ||
| 166 | %76 = call float @dx.op.tertiary.f32(i32 46, float %38, float %55, float %75) ; FMad(a,b,c) | ||
| 167 | %77 = call float @dx.op.tertiary.f32(i32 46, float %42, float %60, float %76) ; FMad(a,b,c) | ||
| 168 | %78 = call float @dx.op.tertiary.f32(i32 46, float %46, float %65, float %77) ; FMad(a,b,c) | ||
| 169 | %79 = fmul fast float %51, %34 | ||
| 170 | %80 = call float @dx.op.tertiary.f32(i32 46, float %38, float %56, float %79) ; FMad(a,b,c) | ||
| 171 | %81 = call float @dx.op.tertiary.f32(i32 46, float %42, float %61, float %80) ; FMad(a,b,c) | ||
| 172 | %82 = call float @dx.op.tertiary.f32(i32 46, float %46, float %66, float %81) ; FMad(a,b,c) | ||
| 173 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %70) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 174 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %74) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 175 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %78) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 176 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %82) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 177 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 178 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 179 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 180 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 181 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 182 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 183 | ret void | ||
| 184 | } | ||
| 185 | |||
| 186 | ; Function Attrs: nounwind readnone | ||
| 187 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 188 | |||
| 189 | ; Function Attrs: nounwind | ||
| 190 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 191 | |||
| 192 | ; Function Attrs: nounwind readonly | ||
| 193 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 194 | |||
| 195 | ; Function Attrs: nounwind readnone | ||
| 196 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 197 | |||
| 198 | ; Function Attrs: nounwind readonly | ||
| 199 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 200 | |||
| 201 | attributes #0 = { nounwind readnone } | ||
| 202 | attributes #1 = { nounwind } | ||
| 203 | attributes #2 = { nounwind readonly } | ||
| 204 | |||
| 205 | !llvm.ident = !{!0} | ||
| 206 | !dx.version = !{!1} | ||
| 207 | !dx.valver = !{!2} | ||
| 208 | !dx.shaderModel = !{!3} | ||
| 209 | !dx.resources = !{!4} | ||
| 210 | !dx.viewIdState = !{!7} | ||
| 211 | !dx.entryPoints = !{!8} | ||
| 212 | |||
| 213 | !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} | ||
| 214 | !1 = !{i32 1, i32 0} | ||
| 215 | !2 = !{i32 1, i32 6} | ||
| 216 | !3 = !{!"vs", i32 6, i32 0} | ||
| 217 | !4 = !{null, null, !5, null} | ||
| 218 | !5 = !{!6} | ||
| 219 | !6 = !{i32 0, %hostlayout.VertexShaderConstants* undef, !"", i32 0, i32 0, i32 1, i32 128, null} | ||
| 220 | !7 = !{[14 x i32] [i32 12, i32 12, i32 15, i32 15, i32 15, i32 0, i32 16, i32 32, i32 0, i32 0, i32 256, i32 512, i32 1024, i32 2048]} | ||
| 221 | !8 = !{void ()* @mainColor, !"mainColor", !9, !4, null} | ||
| 222 | !9 = !{!10, !18, null} | ||
| 223 | !10 = !{!11, !14, !16} | ||
| 224 | !11 = !{i32 0, !"POSITION", i8 9, i8 0, !12, i8 0, i32 1, i8 3, i32 0, i8 0, !13} | ||
| 225 | !12 = !{i32 0} | ||
| 226 | !13 = !{i32 3, i32 7} | ||
| 227 | !14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 1, i8 0, !15} | ||
| 228 | !15 = !{i32 3, i32 3} | ||
| 229 | !16 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 0, i32 1, i8 4, i32 2, i8 0, !17} | ||
| 230 | !17 = !{i32 3, i32 15} | ||
| 231 | !18 = !{!19, !20, !21} | ||
| 232 | !19 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, !17} | ||
| 233 | !20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, !15} | ||
| 234 | !21 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !17} | ||
| 235 | |||
| 236 | #endif | ||
| 237 | |||
| 238 | const unsigned char g_mainColor[] = { | ||
| 239 | 0x44, 0x58, 0x42, 0x43, 0x28, 0x20, 0xca, 0xe8, 0xab, 0xe5, 0x24, 0x7a, | ||
| 240 | 0x5d, 0x2b, 0x6f, 0xa4, 0x2c, 0x10, 0xa8, 0xb6, 0x01, 0x00, 0x00, 0x00, | ||
| 241 | 0xa3, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 242 | 0x50, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, | ||
| 243 | 0x87, 0x02, 0x00, 0x00, 0xd7, 0x02, 0x00, 0x00, 0x87, 0x09, 0x00, 0x00, | ||
| 244 | 0xa3, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, | ||
| 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, | ||
| 246 | 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 247 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 248 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 249 | 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 250 | 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 251 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 252 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, | ||
| 253 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 254 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 255 | 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, | ||
| 256 | 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, | ||
| 257 | 0x4f, 0x53, 0x47, 0x31, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 258 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
| 259 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 260 | 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 261 | 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 262 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 263 | 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 264 | 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 265 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 266 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, | ||
| 267 | 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, | ||
| 268 | 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x53, 0x56, 0x30, 0x1c, | ||
| 269 | 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 270 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 271 | 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x03, | ||
| 272 | 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 273 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, | ||
| 274 | 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 275 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, | ||
| 276 | 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, | ||
| 277 | 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 278 | 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, | ||
| 279 | 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, | ||
| 280 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, | ||
| 281 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x03, | ||
| 282 | 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 283 | 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, | ||
| 284 | 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
| 285 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, | ||
| 286 | 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 287 | 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, | ||
| 288 | 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f, | ||
| 289 | 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, | ||
| 290 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, | ||
| 291 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 292 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x52, | ||
| 293 | 0x54, 0x53, 0x30, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, | ||
| 294 | 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, | ||
| 295 | 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 296 | 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 297 | 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 298 | 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 299 | 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xa8, | ||
| 300 | 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0xaa, 0x01, 0x00, 0x00, 0x44, | ||
| 301 | 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x90, | ||
| 302 | 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa1, | ||
| 303 | 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, | ||
| 304 | 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, | ||
| 305 | 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, | ||
| 306 | 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, | ||
| 307 | 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, | ||
| 308 | 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, | ||
| 309 | 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, | ||
| 310 | 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, | ||
| 311 | 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, | ||
| 312 | 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, | ||
| 313 | 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, | ||
| 314 | 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, | ||
| 315 | 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x26, | ||
| 316 | 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, | ||
| 317 | 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, | ||
| 318 | 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, | ||
| 319 | 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, | ||
| 320 | 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, | ||
| 321 | 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, | ||
| 322 | 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, | ||
| 323 | 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, | ||
| 324 | 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, | ||
| 325 | 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, | ||
| 326 | 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2, | ||
| 327 | 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, 0x88, 0x38, 0xa7, 0x91, | ||
| 328 | 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, 0x1d, 0x08, 0x00, 0x13, | ||
| 329 | 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, | ||
| 330 | 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, | ||
| 331 | 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 332 | 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 333 | 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, | ||
| 334 | 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, | ||
| 335 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, | ||
| 336 | 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, | ||
| 337 | 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 338 | 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, | ||
| 339 | 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 340 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 341 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, | ||
| 342 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, | ||
| 343 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, | ||
| 344 | 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, | ||
| 345 | 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, | ||
| 346 | 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, | ||
| 347 | 0x16, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, | ||
| 348 | 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, | ||
| 349 | 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x04, 0x85, 0x50, 0x06, 0xe5, | ||
| 350 | 0x50, 0x12, 0x05, 0x18, 0x50, 0x1e, 0x85, 0x51, 0xba, 0x01, 0x45, 0x41, | ||
| 351 | 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, 0x0a, 0x81, 0x62, 0x0d, 0xd0, | ||
| 352 | 0x9d, 0x01, 0x20, 0x3c, 0x03, 0x40, 0x79, 0x2c, 0x87, 0x61, 0x9e, 0xe7, | ||
| 353 | 0x01, 0x20, 0x30, 0x00, 0x00, 0x10, 0x01, 0x21, 0x10, 0x0c, 0x40, 0x50, | ||
| 354 | 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x1a, | ||
| 355 | 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, | ||
| 356 | 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, | ||
| 357 | 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, | ||
| 358 | 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, | ||
| 359 | 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, | ||
| 360 | 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x40, | ||
| 361 | 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0xd8, 0xc6, 0xca, 0xaa, 0x4c, | ||
| 362 | 0x8e, 0xae, 0x0c, 0x6f, 0x0a, 0x2d, 0x8c, 0xac, 0x4c, 0x6e, 0xe8, 0xcd, | ||
| 363 | 0x6d, 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x6e, 0x82, 0x40, 0x24, 0x1b, 0x10, | ||
| 364 | 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, | ||
| 365 | 0x07, 0x98, 0x20, 0x5c, 0x1a, 0x8b, 0xb6, 0x37, 0xb2, 0x32, 0xb6, 0x09, | ||
| 366 | 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30, 0x4d, 0xc3, 0x04, 0x81, | ||
| 367 | 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, 0x09, 0x42, 0x94, 0x6d, | ||
| 368 | 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e, 0x8c, 0x11, 0x9c, 0xdc, | ||
| 369 | 0x9b, 0x5a, 0xd9, 0x18, 0x5d, 0xda, 0x9b, 0x5b, 0x90, 0x1b, 0x99, 0x55, | ||
| 370 | 0x5a, 0xd9, 0xdd, 0x04, 0x81, 0x78, 0x36, 0x28, 0x88, 0x26, 0x51, 0xd5, | ||
| 371 | 0x66, 0x5d, 0x17, 0xb6, 0x61, 0x60, 0x32, 0x6e, 0xc3, 0x40, 0x40, 0xdd, | ||
| 372 | 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0x02, 0x0c, 0xc0, 0x60, 0x43, | ||
| 373 | 0x10, 0x06, 0x1b, 0x86, 0xe1, 0x13, 0x83, 0x09, 0x42, 0xc6, 0x6d, 0x08, | ||
| 374 | 0xc8, 0x80, 0x49, 0x5b, 0x58, 0x9a, 0xdb, 0xd0, 0x1b, 0xdb, 0x9b, 0x1c, | ||
| 375 | 0x11, 0xa8, 0xa7, 0xa9, 0x24, 0xaa, 0xa4, 0x27, 0xa7, 0x09, 0x42, 0x41, | ||
| 376 | 0x4d, 0x10, 0x8a, 0x6a, 0x43, 0x40, 0x4c, 0x10, 0x0a, 0x6b, 0x83, 0x50, | ||
| 377 | 0x59, 0x1b, 0x16, 0xe2, 0x0c, 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, | ||
| 378 | 0x35, 0x20, 0xd2, 0x80, 0x0d, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, | ||
| 379 | 0x49, 0x11, 0x4d, 0x10, 0x8a, 0x6b, 0x83, 0x50, 0x55, 0x1b, 0x96, 0xc1, | ||
| 380 | 0x0d, 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x37, 0x18, 0xd2, 0x00, | ||
| 381 | 0x0e, 0x58, 0x0c, 0x3d, 0x31, 0x3d, 0x49, 0x4d, 0x10, 0x0a, 0x6c, 0x82, | ||
| 382 | 0x40, 0x40, 0x1b, 0x84, 0x8a, 0x0e, 0x36, 0x2c, 0x92, 0x1c, 0xa0, 0x41, | ||
| 383 | 0x1a, 0xa8, 0x41, 0x1a, 0x0c, 0x73, 0x20, 0xa5, 0x41, 0x1d, 0x6c, 0x18, | ||
| 384 | 0xda, 0x20, 0x0e, 0xec, 0x80, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, | ||
| 385 | 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x86, 0x85, 0xc0, 0x03, 0x34, 0x58, 0x03, | ||
| 386 | 0x35, 0x98, 0x83, 0x61, 0x0e, 0x88, 0x34, 0xa8, 0x83, 0x0d, 0xcb, 0xe0, | ||
| 387 | 0x06, 0x68, 0x90, 0x06, 0x6a, 0xf0, 0x06, 0xc3, 0x1b, 0x0c, 0x69, 0x00, | ||
| 388 | 0x07, 0x1b, 0x16, 0x49, 0x0e, 0xd0, 0x20, 0x0d, 0xd4, 0xe0, 0x0d, 0x86, | ||
| 389 | 0x39, 0x90, 0xd2, 0xa0, 0x0e, 0x36, 0x0c, 0x79, 0xa0, 0x07, 0x7b, 0xb0, | ||
| 390 | 0x61, 0xb8, 0x03, 0x3e, 0x00, 0x36, 0x14, 0x9f, 0x19, 0xf4, 0xc1, 0x03, | ||
| 391 | 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x11, 0x8b, | ||
| 392 | 0x34, 0xb7, 0x39, 0xba, 0xb9, 0x09, 0x02, 0x21, 0xd1, 0x98, 0x4b, 0x3b, | ||
| 393 | 0xfb, 0x62, 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, 0x35, 0x47, 0x37, 0x41, | ||
| 394 | 0x20, 0xa6, 0x0d, 0xc8, 0x1f, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x5c, | ||
| 395 | 0xa4, 0x50, 0x0a, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, | ||
| 396 | 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32, 0xb9, | ||
| 397 | 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e, | ||
| 398 | 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99, | ||
| 399 | 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12, | ||
| 400 | 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4, 0xc6, | ||
| 401 | 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x25, 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, | ||
| 402 | 0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, | ||
| 403 | 0x29, 0x42, 0x27, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, | ||
| 404 | 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x64, 0x50, 0x87, | ||
| 405 | 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, | ||
| 406 | 0x6e, 0x6e, 0x4a, 0xd0, 0x07, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, | ||
| 407 | 0xdc, 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xa5, 0x00, 0x00, 0x00, 0x79, | ||
| 408 | 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, | ||
| 409 | 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, | ||
| 410 | 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, | ||
| 411 | 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, | ||
| 412 | 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, | ||
| 413 | 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, | ||
| 414 | 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, | ||
| 415 | 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, | ||
| 416 | 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, | ||
| 417 | 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, | ||
| 418 | 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, | ||
| 419 | 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, | ||
| 420 | 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, | ||
| 421 | 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, | ||
| 422 | 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, | ||
| 423 | 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, | ||
| 424 | 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, | ||
| 425 | 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, | ||
| 426 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, | ||
| 427 | 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 428 | 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, | ||
| 429 | 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, | ||
| 430 | 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, | ||
| 431 | 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, | ||
| 432 | 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x71, | ||
| 433 | 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, | ||
| 434 | 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, | ||
| 435 | 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, | ||
| 436 | 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, | ||
| 437 | 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, | ||
| 438 | 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, | ||
| 439 | 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5, | ||
| 440 | 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, | ||
| 441 | 0x00, 0x09, 0x03, 0x20, 0x0d, 0xe7, 0x2c, 0x4e, 0x04, 0x00, 0x00, 0x00, | ||
| 442 | 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, | ||
| 443 | 0x00, 0x00, 0x00, 0x46, 0x69, 0x68, 0xc7, 0x9e, 0x75, 0x89, 0x9f, 0xd3, | ||
| 444 | 0xe9, 0x06, 0x53, 0x46, 0xb2, 0xdf, 0x1c, 0x44, 0x58, 0x49, 0x4c, 0xf8, | ||
| 445 | 0x08, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x3e, 0x02, 0x00, 0x00, 0x44, | ||
| 446 | 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe0, | ||
| 447 | 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x35, | ||
| 448 | 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, | ||
| 449 | 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, | ||
| 450 | 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, | ||
| 451 | 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, | ||
| 452 | 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, | ||
| 453 | 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, | ||
| 454 | 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, | ||
| 455 | 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, | ||
| 456 | 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, | ||
| 457 | 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, | ||
| 458 | 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, | ||
| 459 | 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, | ||
| 460 | 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x26, | ||
| 461 | 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, | ||
| 462 | 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, | ||
| 463 | 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, | ||
| 464 | 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, | ||
| 465 | 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, | ||
| 466 | 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, | ||
| 467 | 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, | ||
| 468 | 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, | ||
| 469 | 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, | ||
| 470 | 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, | ||
| 471 | 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2, | ||
| 472 | 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, 0x88, 0x38, 0xa7, 0x91, | ||
| 473 | 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, 0x1d, 0x08, 0x00, 0x13, | ||
| 474 | 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, | ||
| 475 | 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, | ||
| 476 | 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 477 | 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 478 | 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, | ||
| 479 | 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, | ||
| 480 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, | ||
| 481 | 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, | ||
| 482 | 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 483 | 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, | ||
| 484 | 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 485 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 486 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, | ||
| 487 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, | ||
| 488 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, | ||
| 489 | 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, | ||
| 490 | 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, | ||
| 491 | 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, | ||
| 492 | 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, | ||
| 493 | 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, | ||
| 494 | 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x06, 0xe5, 0x50, 0x04, 0xe5, | ||
| 495 | 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, 0x0a, 0x81, 0xf0, 0x0c, | ||
| 496 | 0x00, 0xe5, 0xb1, 0x1c, 0x86, 0x79, 0x9e, 0x07, 0x80, 0xc0, 0x00, 0x00, | ||
| 497 | 0x40, 0x04, 0x84, 0x40, 0x30, 0x00, 0x41, 0x01, 0x00, 0x00, 0x00, 0x79, | ||
| 498 | 0x18, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, | ||
| 499 | 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, | ||
| 500 | 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, | ||
| 501 | 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, | ||
| 502 | 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, | ||
| 503 | 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x26, | ||
| 504 | 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, 0x73, 0x1b, 0x06, 0xc4, | ||
| 505 | 0x20, 0x26, 0x08, 0xd8, 0x44, 0x60, 0x82, 0x40, 0x24, 0x1b, 0x10, 0x42, | ||
| 506 | 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, | ||
| 507 | 0x98, 0x20, 0x64, 0xd4, 0x86, 0x00, 0x9a, 0x20, 0x08, 0x00, 0x93, 0xb6, | ||
| 508 | 0xb0, 0x34, 0xb7, 0xa1, 0x37, 0xb6, 0x37, 0x39, 0x22, 0x50, 0x4f, 0x53, | ||
| 509 | 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x13, 0x84, 0xc2, 0x99, 0x20, 0x14, 0xcf, | ||
| 510 | 0x86, 0x80, 0x98, 0x20, 0x14, 0xd0, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, | ||
| 511 | 0xb2, 0x41, 0xc8, 0xb4, 0x0d, 0x0b, 0x41, 0x55, 0xd6, 0x65, 0x0d, 0x18, | ||
| 512 | 0x61, 0x6d, 0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, | ||
| 513 | 0x08, 0x45, 0xb4, 0x41, 0xc8, 0xb2, 0x0d, 0xcb, 0xd0, 0x55, 0xd6, 0x65, | ||
| 514 | 0x0d, 0xde, 0x60, 0x7d, 0x13, 0x04, 0x82, 0x61, 0x31, 0xf4, 0xc4, 0xf4, | ||
| 515 | 0x24, 0x35, 0x41, 0x28, 0xa4, 0x09, 0x02, 0xd1, 0x6c, 0x10, 0x32, 0x32, | ||
| 516 | 0xd8, 0xb0, 0x84, 0x81, 0x18, 0x54, 0xd6, 0x65, 0x0d, 0x63, 0x10, 0x06, | ||
| 517 | 0x56, 0x19, 0x6c, 0x18, 0x38, 0x30, 0x30, 0x03, 0x2e, 0x53, 0x56, 0x5f, | ||
| 518 | 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1b, 0x16, 0x02, 0x0d, | ||
| 519 | 0x2a, 0xec, 0x1a, 0x83, 0x61, 0x0c, 0x08, 0xab, 0x0c, 0x36, 0x2c, 0x43, | ||
| 520 | 0x57, 0x59, 0x97, 0x37, 0x78, 0x83, 0xf5, 0x6d, 0x58, 0xc2, 0x40, 0x0c, | ||
| 521 | 0x2a, 0xeb, 0xf2, 0x86, 0x31, 0x08, 0x03, 0xab, 0x0c, 0x36, 0x0c, 0x69, | ||
| 522 | 0xa0, 0x06, 0x6b, 0xb0, 0x61, 0x38, 0x03, 0x36, 0x00, 0x36, 0x14, 0xd2, | ||
| 523 | 0xd4, 0x06, 0x0f, 0x50, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, | ||
| 524 | 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, | ||
| 525 | 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, | ||
| 526 | 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, | ||
| 527 | 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, | ||
| 528 | 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, | ||
| 529 | 0xac, 0x6c, 0x6e, 0x4a, 0xe0, 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, | ||
| 530 | 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75, | ||
| 531 | 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, | ||
| 532 | 0xe8, 0xe6, 0xa6, 0x04, 0x6d, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, | ||
| 533 | 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, | ||
| 534 | 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, | ||
| 535 | 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, | ||
| 536 | 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, | ||
| 537 | 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, | ||
| 538 | 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, | ||
| 539 | 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, | ||
| 540 | 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, | ||
| 541 | 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, | ||
| 542 | 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, | ||
| 543 | 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, | ||
| 544 | 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, | ||
| 545 | 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, | ||
| 546 | 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, | ||
| 547 | 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, | ||
| 548 | 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, | ||
| 549 | 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, | ||
| 550 | 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 551 | 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, | ||
| 552 | 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, | ||
| 553 | 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, | ||
| 554 | 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, | ||
| 555 | 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, | ||
| 556 | 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, | ||
| 557 | 0xa8, 0x07, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x19, | ||
| 558 | 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, | ||
| 559 | 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, | ||
| 560 | 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, | ||
| 561 | 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, | ||
| 562 | 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, | ||
| 563 | 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, | ||
| 564 | 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, | ||
| 565 | 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x09, 0x03, 0x20, | ||
| 566 | 0x0d, 0xe7, 0x2c, 0x4e, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xcf, | ||
| 567 | 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, | ||
| 568 | 0x00, 0x00, 0x00, 0x44, 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec, | ||
| 569 | 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, | ||
| 570 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x61, 0x03, 0x63, 0x59, 0xc1, 0x88, | ||
| 571 | 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xdd, 0x21, 0x5d, 0x8f, 0x31, 0x62, | ||
| 572 | 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x87, 0x4c, 0x18, 0x71, 0x8c, 0x18, | ||
| 573 | 0x24, 0x00, 0x08, 0x82, 0x81, 0xf1, 0x25, 0x54, 0xf6, 0x20, 0x23, 0x06, | ||
| 574 | 0x09, 0x00, 0x82, 0x60, 0x60, 0x80, 0x81, 0x52, 0x69, 0x51, 0x32, 0x62, | ||
| 575 | 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x18, 0x2c, 0xdc, 0x36, 0x29, 0x23, | ||
| 576 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x88, 0x01, 0xd3, 0x71, 0xc8, 0x32, | ||
| 577 | 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x18, 0x34, 0x5d, 0x57, 0x31, | ||
| 578 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x90, 0x81, 0xe3, 0x79, 0x4a, | ||
| 579 | 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x19, 0x3c, 0xdf, 0x57, | ||
| 580 | 0x39, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0x90, 0x81, 0xa3, 0x80, | ||
| 581 | 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, | ||
| 582 | 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x69, 0x30, | ||
| 583 | 0x3d, 0x66, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, | ||
| 584 | 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, | ||
| 585 | 0x1b, 0x60, 0x54, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 586 | 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, | ||
| 587 | 0x41, 0x33, 0x07, 0x5d, 0xc6, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, | ||
| 588 | 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x5d, 0xf2, 0x19, | ||
| 589 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x07, 0x0f, 0xce, 0xe0, 0x7a, 0x82, | ||
| 590 | 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xf2, 0x00, 0x0d, 0xae, 0x25, | ||
| 591 | 0xb0, 0xe0, 0x80, 0x8e, 0x59, 0x9b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, | ||
| 592 | 0xc1, 0xe0, 0xe1, 0x83, 0x35, 0xd8, 0xa4, 0x60, 0xc4, 0x00, 0x01, 0x40, | ||
| 593 | 0x10, 0x0c, 0x9e, 0x3e, 0x60, 0x83, 0xcd, 0x09, 0x2c, 0x50, 0xa0, 0x63, | ||
| 594 | 0xd9, 0x27, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x40, 0xe1, | ||
| 595 | 0x0d, 0xbe, 0x2a, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x27, 0x14, | ||
| 596 | 0xe0, 0xe0, 0x8b, 0x02, 0x0b, 0x1a, 0xe8, 0x18, 0x37, 0x06, 0xf2, 0x19, | ||
| 597 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x14, 0xe6, 0x60, 0x0c, 0xb0, | ||
| 598 | 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x52, 0xa0, 0x83, 0x31, | ||
| 599 | 0xa0, 0x02, 0x0b, 0x20, 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, | ||
| 600 | 0x83, 0x0a, 0x72, 0xe0, 0x06, 0x74, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, | ||
| 601 | 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, | ||
| 602 | 0x20, 0x08, 0x06, 0x4d, 0x2b, 0xdc, 0xc1, 0x1c, 0xe8, 0xc1, 0x68, 0x42, | ||
| 603 | 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, | ||
| 604 | 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0xb2, 0xc0, 0x07, 0x78, 0xd0, | ||
| 605 | 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, | ||
| 606 | 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xdc, 0x42, | ||
| 607 | 0x28, 0xf4, 0xc1, 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 608 | 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xd8, 0x14, 0x06, 0xf2, 0x19, 0x31, | ||
| 609 | 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x17, 0x56, 0xc1, 0x7b, 0x82, 0x11, | ||
| 610 | 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x7a, 0x81, 0x15, 0xb6, 0x25, 0x18, | ||
| 611 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x17, 0x5a, 0x01, 0x3b, 0x02, | ||
| 612 | 0xb3, 0xca, 0x40, 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xf0, 0x80, | ||
| 613 | 0xc3, 0x2b, 0x88, 0x81, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1, | ||
| 614 | 0x13, 0x0e, 0xb0, 0xf0, 0x39, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, | ||
| 615 | 0x3c, 0xe2, 0x10, 0x0b, 0x9c, 0x12, 0x58, 0x96, 0x06, 0xf2, 0x19, 0x31, | ||
| 616 | 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x1c, 0x66, 0xc1, 0x0c, 0xaa, 0x60, | ||
| 617 | 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x72, 0xa0, 0x85, 0x31, 0x88, | ||
| 618 | 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xcc, 0xa1, 0x16, 0xc0, | ||
| 619 | 0xa0, 0x09, 0x8c, 0x6b, 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, | ||
| 620 | 0xc1, 0x83, 0x0e, 0xb7, 0xa0, 0x06, 0x58, 0x30, 0x62, 0x80, 0x00, 0x20, | ||
| 621 | 0x08, 0x06, 0x4f, 0x3a, 0xe0, 0xc2, 0x19, 0x50, 0xc1, 0x88, 0x01, 0x02, | ||
| 622 | 0x80, 0x20, 0x18, 0x3c, 0xea, 0x90, 0x0b, 0x64, 0x00, 0x05, 0x23, 0x06, | ||
| 623 | 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0x80, | ||
| 624 | 0x43, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, | ||
| 625 | 0x3a, 0xa0, 0x03, 0x2d, 0x24, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, | ||
| 626 | 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0xf8, 0x42, 0x31, 0x62, 0x90, 0x00, | ||
| 627 | 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0xc3, 0x2f, 0x04, | ||
| 628 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa4, 0x03, | ||
| 629 | 0x3a, 0x80, 0x43, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, | ||
| 630 | 0x0e, 0xb9, 0x90, 0x0e, 0xe8, 0x40, 0x0b, 0xac, 0x30, 0x62, 0x90, 0x00, | ||
| 631 | 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0xc2, 0x38, 0xa0, 0x03, 0x38, 0xc4, | ||
| 632 | 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xed, 0x90, 0x0b, 0xe3, | ||
| 633 | 0x80, 0x0e, 0xb4, 0x00, 0x0b, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, | ||
| 634 | 0xb4, 0x43, 0x2e, 0x8c, 0x03, 0x3a, 0xf8, 0xc2, 0x2b, 0x8c, 0x18, 0x24, | ||
| 635 | 0x00, 0x08, 0x82, 0x01, 0xd2, 0x0e, 0xb9, 0x30, 0x0e, 0xe8, 0xf0, 0x0b, | ||
| 636 | 0xae, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 637 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h new file mode 100644 index 0000000..ac68e32 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h | |||
| @@ -0,0 +1,645 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; POSITION 0 xyz 0 NONE float xyz | ||
| 8 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 9 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; SV_Position 0 xyzw 0 POS float xyzw | ||
| 17 | ; TEXCOORD 0 xy 1 NONE float xy | ||
| 18 | ; COLOR 0 xyzw 2 NONE float xyzw | ||
| 19 | ; | ||
| 20 | ; shader hash: 6b5daf1892267550d482ef06f687d614 | ||
| 21 | ; | ||
| 22 | ; Pipeline Runtime Information: | ||
| 23 | ; | ||
| 24 | ; Vertex Shader | ||
| 25 | ; OutputPositionPresent=1 | ||
| 26 | ; | ||
| 27 | ; | ||
| 28 | ; Input signature: | ||
| 29 | ; | ||
| 30 | ; Name Index InterpMode DynIdx | ||
| 31 | ; -------------------- ----- ---------------------- ------ | ||
| 32 | ; POSITION 0 | ||
| 33 | ; TEXCOORD 0 | ||
| 34 | ; COLOR 0 | ||
| 35 | ; | ||
| 36 | ; Output signature: | ||
| 37 | ; | ||
| 38 | ; Name Index InterpMode DynIdx | ||
| 39 | ; -------------------- ----- ---------------------- ------ | ||
| 40 | ; SV_Position 0 noperspective | ||
| 41 | ; TEXCOORD 0 linear | ||
| 42 | ; COLOR 0 linear | ||
| 43 | ; | ||
| 44 | ; Buffer Definitions: | ||
| 45 | ; | ||
| 46 | ; cbuffer VertexShaderConstants | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; struct hostlayout.VertexShaderConstants | ||
| 50 | ; { | ||
| 51 | ; | ||
| 52 | ; row_major float4x4 model; ; Offset: 0 | ||
| 53 | ; row_major float4x4 projectionAndView; ; Offset: 64 | ||
| 54 | ; | ||
| 55 | ; } VertexShaderConstants; ; Offset: 0 Size: 128 | ||
| 56 | ; | ||
| 57 | ; } | ||
| 58 | ; | ||
| 59 | ; | ||
| 60 | ; Resource Bindings: | ||
| 61 | ; | ||
| 62 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 63 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 64 | ; VertexShaderConstants cbuffer NA NA CB0 cb0 1 | ||
| 65 | ; | ||
| 66 | ; | ||
| 67 | ; ViewId state: | ||
| 68 | ; | ||
| 69 | ; Number of inputs: 12, outputs: 12 | ||
| 70 | ; Outputs dependent on ViewId: { } | ||
| 71 | ; Inputs contributing to computation of Outputs: | ||
| 72 | ; output 0 depends on inputs: { 0, 1, 2 } | ||
| 73 | ; output 1 depends on inputs: { 0, 1, 2 } | ||
| 74 | ; output 2 depends on inputs: { 0, 1, 2 } | ||
| 75 | ; output 3 depends on inputs: { 0, 1, 2 } | ||
| 76 | ; output 4 depends on inputs: { 4 } | ||
| 77 | ; output 5 depends on inputs: { 5 } | ||
| 78 | ; output 8 depends on inputs: { 8 } | ||
| 79 | ; output 9 depends on inputs: { 9 } | ||
| 80 | ; output 10 depends on inputs: { 10 } | ||
| 81 | ; output 11 depends on inputs: { 11 } | ||
| 82 | ; | ||
| 83 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 84 | target triple = "dxil-ms-dx" | ||
| 85 | |||
| 86 | %dx.types.Handle = type { i8* } | ||
| 87 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 88 | %hostlayout.VertexShaderConstants = type { [4 x <4 x float>], [4 x <4 x float>] } | ||
| 89 | |||
| 90 | define void @mainTexture() { | ||
| 91 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 92 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 93 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 94 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 95 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 96 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 97 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 98 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 99 | %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 100 | %10 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 101 | %11 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 102 | %12 = extractvalue %dx.types.CBufRet.f32 %11, 0 | ||
| 103 | %13 = extractvalue %dx.types.CBufRet.f32 %11, 1 | ||
| 104 | %14 = extractvalue %dx.types.CBufRet.f32 %11, 2 | ||
| 105 | %15 = extractvalue %dx.types.CBufRet.f32 %11, 3 | ||
| 106 | %16 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 107 | %17 = extractvalue %dx.types.CBufRet.f32 %16, 0 | ||
| 108 | %18 = extractvalue %dx.types.CBufRet.f32 %16, 1 | ||
| 109 | %19 = extractvalue %dx.types.CBufRet.f32 %16, 2 | ||
| 110 | %20 = extractvalue %dx.types.CBufRet.f32 %16, 3 | ||
| 111 | %21 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 2) ; CBufferLoadLegacy(handle,regIndex) | ||
| 112 | %22 = extractvalue %dx.types.CBufRet.f32 %21, 0 | ||
| 113 | %23 = extractvalue %dx.types.CBufRet.f32 %21, 1 | ||
| 114 | %24 = extractvalue %dx.types.CBufRet.f32 %21, 2 | ||
| 115 | %25 = extractvalue %dx.types.CBufRet.f32 %21, 3 | ||
| 116 | %26 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 117 | %27 = extractvalue %dx.types.CBufRet.f32 %26, 0 | ||
| 118 | %28 = extractvalue %dx.types.CBufRet.f32 %26, 1 | ||
| 119 | %29 = extractvalue %dx.types.CBufRet.f32 %26, 2 | ||
| 120 | %30 = extractvalue %dx.types.CBufRet.f32 %26, 3 | ||
| 121 | %31 = fmul fast float %12, %8 | ||
| 122 | %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %31) ; FMad(a,b,c) | ||
| 123 | %33 = call float @dx.op.tertiary.f32(i32 46, float %10, float %22, float %32) ; FMad(a,b,c) | ||
| 124 | %34 = fadd fast float %33, %27 | ||
| 125 | %35 = fmul fast float %13, %8 | ||
| 126 | %36 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %35) ; FMad(a,b,c) | ||
| 127 | %37 = call float @dx.op.tertiary.f32(i32 46, float %10, float %23, float %36) ; FMad(a,b,c) | ||
| 128 | %38 = fadd fast float %37, %28 | ||
| 129 | %39 = fmul fast float %14, %8 | ||
| 130 | %40 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %39) ; FMad(a,b,c) | ||
| 131 | %41 = call float @dx.op.tertiary.f32(i32 46, float %10, float %24, float %40) ; FMad(a,b,c) | ||
| 132 | %42 = fadd fast float %41, %29 | ||
| 133 | %43 = fmul fast float %15, %8 | ||
| 134 | %44 = call float @dx.op.tertiary.f32(i32 46, float %9, float %20, float %43) ; FMad(a,b,c) | ||
| 135 | %45 = call float @dx.op.tertiary.f32(i32 46, float %10, float %25, float %44) ; FMad(a,b,c) | ||
| 136 | %46 = fadd fast float %45, %30 | ||
| 137 | %47 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 138 | %48 = extractvalue %dx.types.CBufRet.f32 %47, 0 | ||
| 139 | %49 = extractvalue %dx.types.CBufRet.f32 %47, 1 | ||
| 140 | %50 = extractvalue %dx.types.CBufRet.f32 %47, 2 | ||
| 141 | %51 = extractvalue %dx.types.CBufRet.f32 %47, 3 | ||
| 142 | %52 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 143 | %53 = extractvalue %dx.types.CBufRet.f32 %52, 0 | ||
| 144 | %54 = extractvalue %dx.types.CBufRet.f32 %52, 1 | ||
| 145 | %55 = extractvalue %dx.types.CBufRet.f32 %52, 2 | ||
| 146 | %56 = extractvalue %dx.types.CBufRet.f32 %52, 3 | ||
| 147 | %57 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 6) ; CBufferLoadLegacy(handle,regIndex) | ||
| 148 | %58 = extractvalue %dx.types.CBufRet.f32 %57, 0 | ||
| 149 | %59 = extractvalue %dx.types.CBufRet.f32 %57, 1 | ||
| 150 | %60 = extractvalue %dx.types.CBufRet.f32 %57, 2 | ||
| 151 | %61 = extractvalue %dx.types.CBufRet.f32 %57, 3 | ||
| 152 | %62 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 7) ; CBufferLoadLegacy(handle,regIndex) | ||
| 153 | %63 = extractvalue %dx.types.CBufRet.f32 %62, 0 | ||
| 154 | %64 = extractvalue %dx.types.CBufRet.f32 %62, 1 | ||
| 155 | %65 = extractvalue %dx.types.CBufRet.f32 %62, 2 | ||
| 156 | %66 = extractvalue %dx.types.CBufRet.f32 %62, 3 | ||
| 157 | %67 = fmul fast float %48, %34 | ||
| 158 | %68 = call float @dx.op.tertiary.f32(i32 46, float %38, float %53, float %67) ; FMad(a,b,c) | ||
| 159 | %69 = call float @dx.op.tertiary.f32(i32 46, float %42, float %58, float %68) ; FMad(a,b,c) | ||
| 160 | %70 = call float @dx.op.tertiary.f32(i32 46, float %46, float %63, float %69) ; FMad(a,b,c) | ||
| 161 | %71 = fmul fast float %49, %34 | ||
| 162 | %72 = call float @dx.op.tertiary.f32(i32 46, float %38, float %54, float %71) ; FMad(a,b,c) | ||
| 163 | %73 = call float @dx.op.tertiary.f32(i32 46, float %42, float %59, float %72) ; FMad(a,b,c) | ||
| 164 | %74 = call float @dx.op.tertiary.f32(i32 46, float %46, float %64, float %73) ; FMad(a,b,c) | ||
| 165 | %75 = fmul fast float %50, %34 | ||
| 166 | %76 = call float @dx.op.tertiary.f32(i32 46, float %38, float %55, float %75) ; FMad(a,b,c) | ||
| 167 | %77 = call float @dx.op.tertiary.f32(i32 46, float %42, float %60, float %76) ; FMad(a,b,c) | ||
| 168 | %78 = call float @dx.op.tertiary.f32(i32 46, float %46, float %65, float %77) ; FMad(a,b,c) | ||
| 169 | %79 = fmul fast float %51, %34 | ||
| 170 | %80 = call float @dx.op.tertiary.f32(i32 46, float %38, float %56, float %79) ; FMad(a,b,c) | ||
| 171 | %81 = call float @dx.op.tertiary.f32(i32 46, float %42, float %61, float %80) ; FMad(a,b,c) | ||
| 172 | %82 = call float @dx.op.tertiary.f32(i32 46, float %46, float %66, float %81) ; FMad(a,b,c) | ||
| 173 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %70) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 174 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %74) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 175 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %78) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 176 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %82) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 177 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 178 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 179 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 180 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 181 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 182 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 183 | ret void | ||
| 184 | } | ||
| 185 | |||
| 186 | ; Function Attrs: nounwind readnone | ||
| 187 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 188 | |||
| 189 | ; Function Attrs: nounwind | ||
| 190 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 191 | |||
| 192 | ; Function Attrs: nounwind readonly | ||
| 193 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 194 | |||
| 195 | ; Function Attrs: nounwind readnone | ||
| 196 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 197 | |||
| 198 | ; Function Attrs: nounwind readonly | ||
| 199 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 200 | |||
| 201 | attributes #0 = { nounwind readnone } | ||
| 202 | attributes #1 = { nounwind } | ||
| 203 | attributes #2 = { nounwind readonly } | ||
| 204 | |||
| 205 | !llvm.ident = !{!0} | ||
| 206 | !dx.version = !{!1} | ||
| 207 | !dx.valver = !{!2} | ||
| 208 | !dx.shaderModel = !{!3} | ||
| 209 | !dx.resources = !{!4} | ||
| 210 | !dx.viewIdState = !{!7} | ||
| 211 | !dx.entryPoints = !{!8} | ||
| 212 | |||
| 213 | !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} | ||
| 214 | !1 = !{i32 1, i32 0} | ||
| 215 | !2 = !{i32 1, i32 6} | ||
| 216 | !3 = !{!"vs", i32 6, i32 0} | ||
| 217 | !4 = !{null, null, !5, null} | ||
| 218 | !5 = !{!6} | ||
| 219 | !6 = !{i32 0, %hostlayout.VertexShaderConstants* undef, !"", i32 0, i32 0, i32 1, i32 128, null} | ||
| 220 | !7 = !{[14 x i32] [i32 12, i32 12, i32 15, i32 15, i32 15, i32 0, i32 16, i32 32, i32 0, i32 0, i32 256, i32 512, i32 1024, i32 2048]} | ||
| 221 | !8 = !{void ()* @mainTexture, !"mainTexture", !9, !4, null} | ||
| 222 | !9 = !{!10, !18, null} | ||
| 223 | !10 = !{!11, !14, !16} | ||
| 224 | !11 = !{i32 0, !"POSITION", i8 9, i8 0, !12, i8 0, i32 1, i8 3, i32 0, i8 0, !13} | ||
| 225 | !12 = !{i32 0} | ||
| 226 | !13 = !{i32 3, i32 7} | ||
| 227 | !14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 1, i8 0, !15} | ||
| 228 | !15 = !{i32 3, i32 3} | ||
| 229 | !16 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 0, i32 1, i8 4, i32 2, i8 0, !17} | ||
| 230 | !17 = !{i32 3, i32 15} | ||
| 231 | !18 = !{!19, !20, !21} | ||
| 232 | !19 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, !17} | ||
| 233 | !20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, !15} | ||
| 234 | !21 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !17} | ||
| 235 | |||
| 236 | #endif | ||
| 237 | |||
| 238 | const unsigned char g_mainTexture[] = { | ||
| 239 | 0x44, 0x58, 0x42, 0x43, 0xda, 0xc9, 0x75, 0xea, 0x0d, 0x18, 0xc7, 0xf5, | ||
| 240 | 0xb4, 0x80, 0x10, 0xd9, 0xd7, 0x88, 0x5a, 0x23, 0x01, 0x00, 0x00, 0x00, | ||
| 241 | 0xff, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 242 | 0x50, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, | ||
| 243 | 0x87, 0x02, 0x00, 0x00, 0x2f, 0x03, 0x00, 0x00, 0xdf, 0x09, 0x00, 0x00, | ||
| 244 | 0xfb, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, | ||
| 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, | ||
| 246 | 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 247 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 248 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 249 | 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 250 | 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 251 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 252 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, | ||
| 253 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 254 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 255 | 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, | ||
| 256 | 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, | ||
| 257 | 0x4f, 0x53, 0x47, 0x31, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 258 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
| 259 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 260 | 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 261 | 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 262 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 263 | 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 264 | 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 265 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 266 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, | ||
| 267 | 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, | ||
| 268 | 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x53, 0x56, 0x30, 0x1c, | ||
| 269 | 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 270 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 271 | 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x03, | ||
| 272 | 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 273 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, | ||
| 274 | 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 275 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, | ||
| 276 | 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, | ||
| 277 | 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 278 | 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, | ||
| 279 | 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, | ||
| 280 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, | ||
| 281 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x03, | ||
| 282 | 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 283 | 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, | ||
| 284 | 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
| 285 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, | ||
| 286 | 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | ||
| 287 | 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, | ||
| 288 | 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f, | ||
| 289 | 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, | ||
| 290 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, | ||
| 291 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 292 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x52, | ||
| 293 | 0x54, 0x53, 0x30, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, | ||
| 294 | 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, | ||
| 295 | 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 296 | 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 297 | 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, | ||
| 298 | 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, | ||
| 299 | 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 300 | 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 301 | 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, | ||
| 302 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 303 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, | ||
| 304 | 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, | ||
| 305 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 306 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x53, | ||
| 307 | 0x54, 0x41, 0x54, 0xa8, 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0xaa, | ||
| 308 | 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, | ||
| 309 | 0x00, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, | ||
| 310 | 0x0c, 0x00, 0x00, 0xa1, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, | ||
| 311 | 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, | ||
| 312 | 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, | ||
| 313 | 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, | ||
| 314 | 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, | ||
| 315 | 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, | ||
| 316 | 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, | ||
| 317 | 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, | ||
| 318 | 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, | ||
| 319 | 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, | ||
| 320 | 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, | ||
| 321 | 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, | ||
| 322 | 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, | ||
| 323 | 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, | ||
| 324 | 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, | ||
| 325 | 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, | ||
| 326 | 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, | ||
| 327 | 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, | ||
| 328 | 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, | ||
| 329 | 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, | ||
| 330 | 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, | ||
| 331 | 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, | ||
| 332 | 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, | ||
| 333 | 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, | ||
| 334 | 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, | ||
| 335 | 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, | ||
| 336 | 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, | ||
| 337 | 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, | ||
| 338 | 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, | ||
| 339 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, | ||
| 340 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 341 | 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 342 | 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 343 | 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, | ||
| 344 | 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, | ||
| 345 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, | ||
| 346 | 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, | ||
| 347 | 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, | ||
| 348 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, | ||
| 349 | 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
| 350 | 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 351 | 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 352 | 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 353 | 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, | ||
| 354 | 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x32, | ||
| 355 | 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, | ||
| 356 | 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x04, | ||
| 357 | 0x85, 0x50, 0x06, 0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x1e, 0x85, 0x51, | ||
| 358 | 0xba, 0x01, 0x45, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, 0x0a, | ||
| 359 | 0x81, 0x62, 0x0d, 0xd0, 0x9d, 0x01, 0x20, 0x3c, 0x03, 0x40, 0x79, 0x2c, | ||
| 360 | 0x87, 0x61, 0x9e, 0xe7, 0x01, 0x20, 0x30, 0x00, 0x00, 0x10, 0x01, 0x21, | ||
| 361 | 0x10, 0x0c, 0x40, 0x50, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x9f, | ||
| 362 | 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, | ||
| 363 | 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, | ||
| 364 | 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, | ||
| 365 | 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, | ||
| 366 | 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, | ||
| 367 | 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0xc1, | ||
| 368 | 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0xd8, | ||
| 369 | 0xc6, 0xca, 0xaa, 0x4c, 0x8e, 0xae, 0x0c, 0x6f, 0x0a, 0x2d, 0x8c, 0xac, | ||
| 370 | 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x6e, 0x82, | ||
| 371 | 0x40, 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, | ||
| 372 | 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x5c, 0x1a, 0x8b, 0xb6, 0x37, | ||
| 373 | 0xb2, 0x32, 0xb6, 0x09, 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30, | ||
| 374 | 0x4d, 0xc3, 0x04, 0x81, 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, | ||
| 375 | 0x09, 0x42, 0x94, 0x6d, 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e, | ||
| 376 | 0x8c, 0x11, 0x9c, 0xdc, 0x9b, 0x5a, 0xd9, 0x18, 0x5d, 0xda, 0x9b, 0x5b, | ||
| 377 | 0x90, 0x1b, 0x99, 0x55, 0x5a, 0xd9, 0xdd, 0x04, 0x81, 0x78, 0x36, 0x28, | ||
| 378 | 0x88, 0x26, 0x51, 0xd5, 0x66, 0x5d, 0x17, 0xb6, 0x61, 0x60, 0x32, 0x6e, | ||
| 379 | 0xc3, 0x40, 0x40, 0xdd, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0x02, | ||
| 380 | 0x0c, 0xc0, 0x60, 0x43, 0x10, 0x06, 0x1b, 0x86, 0xe1, 0x13, 0x83, 0x09, | ||
| 381 | 0x42, 0xc6, 0x6d, 0x08, 0xc8, 0x80, 0x4b, 0x5b, 0x58, 0x9a, 0x1b, 0x55, | ||
| 382 | 0x19, 0x1e, 0x5d, 0x9d, 0x5c, 0x19, 0x11, 0xa8, 0xa7, 0xa9, 0x24, 0xaa, | ||
| 383 | 0xa4, 0x27, 0xa7, 0x09, 0x42, 0x41, 0x4d, 0x10, 0x8a, 0x6a, 0x43, 0x40, | ||
| 384 | 0x4c, 0x10, 0x0a, 0x6b, 0x83, 0x50, 0x59, 0x1b, 0x16, 0xe2, 0x0c, 0xd0, | ||
| 385 | 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x35, 0x20, 0xd2, 0x80, 0x0d, 0x88, | ||
| 386 | 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x8a, 0x6b, | ||
| 387 | 0x83, 0x50, 0x55, 0x1b, 0x96, 0xc1, 0x0d, 0xd0, 0x20, 0x0d, 0xd4, 0x20, | ||
| 388 | 0x0d, 0x86, 0x37, 0x18, 0xd2, 0x00, 0x0e, 0x58, 0x0c, 0x3d, 0x31, 0x3d, | ||
| 389 | 0x49, 0x4d, 0x10, 0x0a, 0x6c, 0x82, 0x40, 0x40, 0x1b, 0x84, 0x8a, 0x0e, | ||
| 390 | 0x36, 0x2c, 0x92, 0x1c, 0xa0, 0x41, 0x1a, 0xa8, 0x41, 0x1a, 0x0c, 0x73, | ||
| 391 | 0x20, 0xa5, 0x41, 0x1d, 0x6c, 0x18, 0xda, 0x20, 0x0e, 0xec, 0x80, 0xcb, | ||
| 392 | 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x86, | ||
| 393 | 0x85, 0xc0, 0x03, 0x34, 0x58, 0x03, 0x35, 0x98, 0x83, 0x61, 0x0e, 0x88, | ||
| 394 | 0x34, 0xa8, 0x83, 0x0d, 0xcb, 0xe0, 0x06, 0x68, 0x90, 0x06, 0x6a, 0xf0, | ||
| 395 | 0x06, 0xc3, 0x1b, 0x0c, 0x69, 0x00, 0x07, 0x1b, 0x16, 0x49, 0x0e, 0xd0, | ||
| 396 | 0x20, 0x0d, 0xd4, 0xe0, 0x0d, 0x86, 0x39, 0x90, 0xd2, 0xa0, 0x0e, 0x36, | ||
| 397 | 0x0c, 0x79, 0xa0, 0x07, 0x7b, 0xb0, 0x61, 0xb8, 0x03, 0x3e, 0x00, 0x36, | ||
| 398 | 0x14, 0x9f, 0x19, 0xf4, 0xc1, 0x03, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, | ||
| 399 | 0x9b, 0x9b, 0x20, 0x10, 0x11, 0x8b, 0x34, 0xb7, 0x39, 0xba, 0xb9, 0x09, | ||
| 400 | 0x02, 0x21, 0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x62, 0x23, 0xa3, 0x31, 0x97, | ||
| 401 | 0x76, 0xf6, 0x35, 0x47, 0x37, 0x41, 0x20, 0xa6, 0x0d, 0xc8, 0x1f, 0x80, | ||
| 402 | 0x42, 0x28, 0x88, 0xc2, 0x28, 0x5c, 0xa4, 0x50, 0x0a, 0x55, 0xd8, 0xd8, | ||
| 403 | 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, | ||
| 404 | 0x32, 0x3c, 0x17, 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, | ||
| 405 | 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, | ||
| 406 | 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, | ||
| 407 | 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, | ||
| 408 | 0xca, 0xe6, 0xde, 0xea, 0xe4, 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x25, | ||
| 409 | 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, 0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba, | ||
| 410 | 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, 0x42, 0x27, 0x06, 0x75, 0xc8, | ||
| 411 | 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, | ||
| 412 | 0xca, 0xa6, 0x04, 0x64, 0x50, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, | ||
| 413 | 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, 0xd0, 0x07, 0x5d, | ||
| 414 | 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc, 0xe8, 0xca, 0xe4, 0xe6, 0xa6, | ||
| 415 | 0x04, 0xa5, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, | ||
| 416 | 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, | ||
| 417 | 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, | ||
| 418 | 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, | ||
| 419 | 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, | ||
| 420 | 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, | ||
| 421 | 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, | ||
| 422 | 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, | ||
| 423 | 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, | ||
| 424 | 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, | ||
| 425 | 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, | ||
| 426 | 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, | ||
| 427 | 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, | ||
| 428 | 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, | ||
| 429 | 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, | ||
| 430 | 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, | ||
| 431 | 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, | ||
| 432 | 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, | ||
| 433 | 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, | ||
| 434 | 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, | ||
| 435 | 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, | ||
| 436 | 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, | ||
| 437 | 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, | ||
| 438 | 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, | ||
| 439 | 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, | ||
| 440 | 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36, | ||
| 441 | 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, | ||
| 442 | 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, | ||
| 443 | 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, | ||
| 444 | 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, | ||
| 445 | 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, | ||
| 446 | 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, | ||
| 447 | 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, | ||
| 448 | 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x0b, 0x03, 0x20, 0x4d, 0x4b, 0x5c, 0x13, | ||
| 449 | 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, | ||
| 450 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x5d, 0xaf, 0x18, 0x92, | ||
| 451 | 0x26, 0x75, 0x50, 0xd4, 0x82, 0xef, 0x06, 0xf6, 0x87, 0xd6, 0x14, 0x44, | ||
| 452 | 0x58, 0x49, 0x4c, 0xfc, 0x08, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x3f, | ||
| 453 | 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, | ||
| 454 | 0x00, 0x00, 0x00, 0xe4, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, | ||
| 455 | 0x0c, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, | ||
| 456 | 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, | ||
| 457 | 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, | ||
| 458 | 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, | ||
| 459 | 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, | ||
| 460 | 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, | ||
| 461 | 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, | ||
| 462 | 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, | ||
| 463 | 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, | ||
| 464 | 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, | ||
| 465 | 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, | ||
| 466 | 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, | ||
| 467 | 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, | ||
| 468 | 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, | ||
| 469 | 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, | ||
| 470 | 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, | ||
| 471 | 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, | ||
| 472 | 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, | ||
| 473 | 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, | ||
| 474 | 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, | ||
| 475 | 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, | ||
| 476 | 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, | ||
| 477 | 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, | ||
| 478 | 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, | ||
| 479 | 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, | ||
| 480 | 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, | ||
| 481 | 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, | ||
| 482 | 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, | ||
| 483 | 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, | ||
| 484 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, | ||
| 485 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 486 | 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 487 | 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 488 | 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, | ||
| 489 | 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, | ||
| 490 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, | ||
| 491 | 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, | ||
| 492 | 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, | ||
| 493 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, | ||
| 494 | 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
| 495 | 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 496 | 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 497 | 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 498 | 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, | ||
| 499 | 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, | ||
| 500 | 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, | ||
| 501 | 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x06, | ||
| 502 | 0xe5, 0x50, 0x04, 0xe5, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, | ||
| 503 | 0x0a, 0x81, 0xf0, 0x0c, 0x00, 0xe5, 0xb1, 0x1c, 0x86, 0x79, 0x9e, 0x07, | ||
| 504 | 0x80, 0xc0, 0x00, 0x00, 0x40, 0x04, 0x84, 0x40, 0x30, 0x00, 0x41, 0x01, | ||
| 505 | 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x1a, | ||
| 506 | 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, | ||
| 507 | 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, | ||
| 508 | 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, | ||
| 509 | 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, | ||
| 510 | 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, | ||
| 511 | 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, | ||
| 512 | 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0xd8, 0x44, 0x60, 0x82, 0x40, | ||
| 513 | 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, | ||
| 514 | 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x64, 0xd4, 0x86, 0x00, 0x9a, 0x20, | ||
| 515 | 0x08, 0x00, 0x97, 0xb6, 0xb0, 0x34, 0x37, 0xaa, 0x32, 0x3c, 0xba, 0x3a, | ||
| 516 | 0xb9, 0x32, 0x22, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x13, | ||
| 517 | 0x84, 0xc2, 0x99, 0x20, 0x14, 0xcf, 0x86, 0x80, 0x98, 0x20, 0x14, 0xd0, | ||
| 518 | 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xc8, 0xb4, 0x0d, 0x0b, | ||
| 519 | 0x41, 0x55, 0xd6, 0x65, 0x0d, 0x18, 0x61, 0x6d, 0x44, 0xa8, 0x8a, 0xb0, | ||
| 520 | 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0xb4, 0x41, 0xc8, 0xb2, | ||
| 521 | 0x0d, 0xcb, 0xd0, 0x55, 0xd6, 0x65, 0x0d, 0xde, 0x60, 0x7d, 0x13, 0x04, | ||
| 522 | 0x82, 0x61, 0x31, 0xf4, 0xc4, 0xf4, 0x24, 0x35, 0x41, 0x28, 0xa4, 0x09, | ||
| 523 | 0x02, 0xd1, 0x6c, 0x10, 0x32, 0x32, 0xd8, 0xb0, 0x84, 0x81, 0x18, 0x54, | ||
| 524 | 0xd6, 0x65, 0x0d, 0x63, 0x10, 0x06, 0x56, 0x19, 0x6c, 0x18, 0x38, 0x30, | ||
| 525 | 0x30, 0x03, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, | ||
| 526 | 0x6f, 0x6e, 0x1b, 0x16, 0x02, 0x0d, 0x2a, 0xec, 0x1a, 0x83, 0x61, 0x0c, | ||
| 527 | 0x08, 0xab, 0x0c, 0x36, 0x2c, 0x43, 0x57, 0x59, 0x97, 0x37, 0x78, 0x83, | ||
| 528 | 0xf5, 0x6d, 0x58, 0xc2, 0x40, 0x0c, 0x2a, 0xeb, 0xf2, 0x86, 0x31, 0x08, | ||
| 529 | 0x03, 0xab, 0x0c, 0x36, 0x0c, 0x69, 0xa0, 0x06, 0x6b, 0xb0, 0x61, 0x38, | ||
| 530 | 0x03, 0x36, 0x00, 0x36, 0x14, 0xd2, 0xd4, 0x06, 0x0f, 0x50, 0x85, 0x8d, | ||
| 531 | 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, | ||
| 532 | 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, | ||
| 533 | 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, | ||
| 534 | 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9, | ||
| 535 | 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, | ||
| 536 | 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xe0, 0xd4, | ||
| 537 | 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, | ||
| 538 | 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, | ||
| 539 | 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x6d, 0x00, | ||
| 540 | 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, | ||
| 541 | 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, | ||
| 542 | 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, | ||
| 543 | 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, | ||
| 544 | 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, | ||
| 545 | 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, | ||
| 546 | 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, | ||
| 547 | 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, | ||
| 548 | 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, | ||
| 549 | 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, | ||
| 550 | 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, | ||
| 551 | 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, | ||
| 552 | 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, | ||
| 553 | 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, | ||
| 554 | 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, | ||
| 555 | 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, | ||
| 556 | 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, | ||
| 557 | 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, | ||
| 558 | 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, | ||
| 559 | 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, | ||
| 560 | 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, | ||
| 561 | 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, | ||
| 562 | 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, | ||
| 563 | 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, | ||
| 564 | 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, | ||
| 565 | 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36, | ||
| 566 | 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, | ||
| 567 | 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, | ||
| 568 | 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, | ||
| 569 | 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, | ||
| 570 | 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, | ||
| 571 | 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, | ||
| 572 | 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, | ||
| 573 | 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x0b, 0x03, 0x20, 0x4d, 0x4b, 0x5c, 0x13, | ||
| 574 | 0x15, 0x11, 0x00, 0x61, 0x20, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x13, | ||
| 575 | 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x44, | ||
| 576 | 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec, 0x4a, 0x8e, 0x4a, 0x09, | ||
| 577 | 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, | ||
| 578 | 0x60, 0x20, 0x61, 0x03, 0x63, 0x59, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, | ||
| 579 | 0x18, 0x18, 0xdd, 0x21, 0x5d, 0x8f, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, | ||
| 580 | 0x06, 0x86, 0x87, 0x4c, 0x18, 0x71, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, | ||
| 581 | 0x81, 0xf1, 0x25, 0x54, 0xf6, 0x20, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, | ||
| 582 | 0x60, 0x80, 0x81, 0x52, 0x69, 0x51, 0x32, 0x62, 0x90, 0x00, 0x20, 0x08, | ||
| 583 | 0x06, 0x46, 0x18, 0x2c, 0xdc, 0x36, 0x29, 0x23, 0x06, 0x09, 0x00, 0x82, | ||
| 584 | 0x60, 0x60, 0x88, 0x01, 0xd3, 0x71, 0xc8, 0x32, 0x62, 0x90, 0x00, 0x20, | ||
| 585 | 0x08, 0x06, 0xc6, 0x18, 0x34, 0x5d, 0x57, 0x31, 0x23, 0x06, 0x09, 0x00, | ||
| 586 | 0x82, 0x60, 0x60, 0x90, 0x81, 0xe3, 0x79, 0x4a, 0x33, 0x62, 0x90, 0x00, | ||
| 587 | 0x20, 0x08, 0x06, 0x46, 0x19, 0x3c, 0xdf, 0x57, 0x39, 0x23, 0x06, 0x07, | ||
| 588 | 0x00, 0x82, 0x60, 0xd0, 0x90, 0x81, 0xa3, 0x80, 0xc1, 0x68, 0x42, 0x00, | ||
| 589 | 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88, | ||
| 590 | 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x69, 0x30, 0x3d, 0x66, 0x30, 0x9a, | ||
| 591 | 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, | ||
| 592 | 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x1b, 0x60, 0x54, 0x19, | ||
| 593 | 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, | ||
| 594 | 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x33, 0x07, 0x5d, | ||
| 595 | 0xc6, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, | ||
| 596 | 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x5d, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, | ||
| 597 | 0x04, 0x83, 0x07, 0x0f, 0xce, 0xe0, 0x7a, 0x82, 0x11, 0x03, 0x04, 0x00, | ||
| 598 | 0x41, 0x30, 0x78, 0xf2, 0x00, 0x0d, 0xae, 0x25, 0xb0, 0xe0, 0x80, 0x8e, | ||
| 599 | 0x59, 0x9b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0xe0, 0xe1, 0x83, | ||
| 600 | 0x35, 0xd8, 0xa4, 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x3e, | ||
| 601 | 0x60, 0x83, 0xcd, 0x09, 0x2c, 0x50, 0xa0, 0x63, 0xd9, 0x27, 0x9f, 0x11, | ||
| 602 | 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x40, 0xe1, 0x0d, 0xbe, 0x2a, 0x18, | ||
| 603 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x27, 0x14, 0xe0, 0xe0, 0x8b, 0x02, | ||
| 604 | 0x0b, 0x1a, 0xe8, 0x18, 0x37, 0x06, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, | ||
| 605 | 0x04, 0x83, 0x87, 0x14, 0xe6, 0x60, 0x0c, 0xb0, 0x60, 0xc4, 0x00, 0x01, | ||
| 606 | 0x40, 0x10, 0x0c, 0x9e, 0x52, 0xa0, 0x83, 0x31, 0xa0, 0x02, 0x0b, 0x20, | ||
| 607 | 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x83, 0x0a, 0x72, 0xe0, | ||
| 608 | 0x06, 0x74, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, | ||
| 609 | 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x4d, | ||
| 610 | 0x2b, 0xdc, 0xc1, 0x1c, 0xe8, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, | ||
| 611 | 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80, | ||
| 612 | 0x20, 0x18, 0x34, 0xb2, 0xc0, 0x07, 0x78, 0xd0, 0x0a, 0xa3, 0x09, 0x01, | ||
| 613 | 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x23, | ||
| 614 | 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xdc, 0x42, 0x28, 0xf4, 0xc1, 0x2b, | ||
| 615 | 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, | ||
| 616 | 0x02, 0x31, 0xd8, 0x14, 0x06, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, | ||
| 617 | 0x83, 0x87, 0x17, 0x56, 0xc1, 0x7b, 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, | ||
| 618 | 0x30, 0x78, 0x7a, 0x81, 0x15, 0xb6, 0x25, 0x18, 0x31, 0x40, 0x00, 0x10, | ||
| 619 | 0x04, 0x83, 0xc7, 0x17, 0x5a, 0x01, 0x3b, 0x02, 0xb3, 0xca, 0x40, 0x3e, | ||
| 620 | 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xf0, 0x80, 0xc3, 0x2b, 0x88, 0x81, | ||
| 621 | 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1, 0x13, 0x0e, 0xb0, 0xf0, | ||
| 622 | 0x39, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x3c, 0xe2, 0x10, 0x0b, | ||
| 623 | 0x9c, 0x12, 0x58, 0x96, 0x06, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, | ||
| 624 | 0x83, 0x87, 0x1c, 0x66, 0xc1, 0x0c, 0xaa, 0x60, 0xc4, 0x00, 0x01, 0x40, | ||
| 625 | 0x10, 0x0c, 0x9e, 0x72, 0xa0, 0x85, 0x31, 0x88, 0x82, 0x11, 0x03, 0x04, | ||
| 626 | 0x00, 0x41, 0x30, 0x78, 0xcc, 0xa1, 0x16, 0xc0, 0xa0, 0x09, 0x8c, 0x6b, | ||
| 627 | 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1, 0x83, 0x0e, 0xb7, | ||
| 628 | 0xa0, 0x06, 0x58, 0x30, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x4f, 0x3a, | ||
| 629 | 0xe0, 0xc2, 0x19, 0x50, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x3c, | ||
| 630 | 0xea, 0x90, 0x0b, 0x64, 0x00, 0x05, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, | ||
| 631 | 0x80, 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0x80, 0x43, 0x33, 0x62, 0x90, | ||
| 632 | 0x00, 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0x03, 0x2d, | ||
| 633 | 0x24, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa0, | ||
| 634 | 0x03, 0x3a, 0xf8, 0x42, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, | ||
| 635 | 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0xc3, 0x2f, 0x04, 0x23, 0x06, 0x09, 0x00, | ||
| 636 | 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa4, 0x03, 0x3a, 0x80, 0x43, 0x2b, | ||
| 637 | 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, 0x0e, 0xb9, 0x90, 0x0e, | ||
| 638 | 0xe8, 0x40, 0x0b, 0xac, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, | ||
| 639 | 0x3b, 0xe4, 0xc2, 0x38, 0xa0, 0x03, 0x38, 0xc4, 0xc2, 0x88, 0x41, 0x02, | ||
| 640 | 0x80, 0x20, 0x18, 0x20, 0xed, 0x90, 0x0b, 0xe3, 0x80, 0x0e, 0xb4, 0x00, | ||
| 641 | 0x0b, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0x8c, | ||
| 642 | 0x03, 0x3a, 0xf8, 0xc2, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, | ||
| 643 | 0xd2, 0x0e, 0xb9, 0x30, 0x0e, 0xe8, 0xf0, 0x0b, 0xae, 0x80, 0x00, 0x00, | ||
| 644 | 0x00, 0x00, 0x00 | ||
| 645 | }; | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c b/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c new file mode 100644 index 0000000..06535f0 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c | |||
| @@ -0,0 +1,3309 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_D3D12 | ||
| 24 | |||
| 25 | #define SDL_D3D12_NUM_BUFFERS 2 | ||
| 26 | #define SDL_D3D12_NUM_VERTEX_BUFFERS 256 | ||
| 27 | #define SDL_D3D12_MAX_NUM_TEXTURES 16384 | ||
| 28 | #define SDL_D3D12_NUM_UPLOAD_BUFFERS 32 | ||
| 29 | |||
| 30 | #include "../../core/windows/SDL_windows.h" | ||
| 31 | #include "../../video/windows/SDL_windowswindow.h" | ||
| 32 | #include "../SDL_sysrender.h" | ||
| 33 | #include "../SDL_d3dmath.h" | ||
| 34 | #include "../../video/directx/SDL_d3d12.h" | ||
| 35 | |||
| 36 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 37 | #include "SDL_render_d3d12_xbox.h" | ||
| 38 | #endif | ||
| 39 | |||
| 40 | #include "SDL_shaders_d3d12.h" | ||
| 41 | |||
| 42 | #if defined(_MSC_VER) && !defined(__clang__) | ||
| 43 | #define SDL_COMPOSE_ERROR(str) __FUNCTION__ ", " str | ||
| 44 | #else | ||
| 45 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 46 | #endif | ||
| 47 | |||
| 48 | // Set up for C function definitions, even when using C++ | ||
| 49 | #ifdef __cplusplus | ||
| 50 | extern "C" { | ||
| 51 | #endif | ||
| 52 | |||
| 53 | // This must be included here as the function definitions in SDL_pixels.c/_c.h are C, not C++ | ||
| 54 | #include "../../video/SDL_pixels_c.h" | ||
| 55 | |||
| 56 | /* !!! FIXME: vertex buffer bandwidth could be lower; only use UV coords when | ||
| 57 | !!! FIXME: textures are needed. */ | ||
| 58 | |||
| 59 | // Sampler types | ||
| 60 | typedef enum | ||
| 61 | { | ||
| 62 | D3D12_SAMPLER_NEAREST_CLAMP, | ||
| 63 | D3D12_SAMPLER_NEAREST_WRAP, | ||
| 64 | D3D12_SAMPLER_LINEAR_CLAMP, | ||
| 65 | D3D12_SAMPLER_LINEAR_WRAP, | ||
| 66 | D3D12_SAMPLER_COUNT | ||
| 67 | } D3D12_Sampler; | ||
| 68 | |||
| 69 | // Vertex shader, common values | ||
| 70 | typedef struct | ||
| 71 | { | ||
| 72 | Float4X4 model; | ||
| 73 | Float4X4 projectionAndView; | ||
| 74 | } D3D12_VertexShaderConstants; | ||
| 75 | |||
| 76 | // These should mirror the definitions in D3D12_PixelShader_Common.hlsli | ||
| 77 | //static const float TONEMAP_NONE = 0; | ||
| 78 | //static const float TONEMAP_LINEAR = 1; | ||
| 79 | static const float TONEMAP_CHROME = 2; | ||
| 80 | |||
| 81 | //static const float TEXTURETYPE_NONE = 0; | ||
| 82 | static const float TEXTURETYPE_RGB = 1; | ||
| 83 | static const float TEXTURETYPE_NV12 = 2; | ||
| 84 | static const float TEXTURETYPE_NV21 = 3; | ||
| 85 | static const float TEXTURETYPE_YUV = 4; | ||
| 86 | |||
| 87 | static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 88 | static const float INPUTTYPE_SRGB = 1; | ||
| 89 | static const float INPUTTYPE_SCRGB = 2; | ||
| 90 | static const float INPUTTYPE_HDR10 = 3; | ||
| 91 | |||
| 92 | typedef struct | ||
| 93 | { | ||
| 94 | float scRGB_output; | ||
| 95 | float texture_type; | ||
| 96 | float input_type; | ||
| 97 | float color_scale; | ||
| 98 | |||
| 99 | float tonemap_method; | ||
| 100 | float tonemap_factor1; | ||
| 101 | float tonemap_factor2; | ||
| 102 | float sdr_white_point; | ||
| 103 | |||
| 104 | float YCbCr_matrix[16]; | ||
| 105 | } D3D12_PixelShaderConstants; | ||
| 106 | |||
| 107 | // Per-vertex data | ||
| 108 | typedef struct | ||
| 109 | { | ||
| 110 | Float2 pos; | ||
| 111 | Float2 tex; | ||
| 112 | SDL_FColor color; | ||
| 113 | } D3D12_VertexPositionColor; | ||
| 114 | |||
| 115 | // Per-texture data | ||
| 116 | typedef struct | ||
| 117 | { | ||
| 118 | int w, h; | ||
| 119 | ID3D12Resource *mainTexture; | ||
| 120 | D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceView; | ||
| 121 | D3D12_RESOURCE_STATES mainResourceState; | ||
| 122 | SIZE_T mainSRVIndex; | ||
| 123 | D3D12_CPU_DESCRIPTOR_HANDLE mainTextureRenderTargetView; | ||
| 124 | DXGI_FORMAT mainTextureFormat; | ||
| 125 | ID3D12Resource *stagingBuffer; | ||
| 126 | D3D12_RESOURCE_STATES stagingResourceState; | ||
| 127 | D3D12_FILTER scaleMode; | ||
| 128 | D3D12_Shader shader; | ||
| 129 | const float *YCbCr_matrix; | ||
| 130 | #ifdef SDL_HAVE_YUV | ||
| 131 | // YV12 texture support | ||
| 132 | bool yuv; | ||
| 133 | ID3D12Resource *mainTextureU; | ||
| 134 | D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceViewU; | ||
| 135 | D3D12_RESOURCE_STATES mainResourceStateU; | ||
| 136 | SIZE_T mainSRVIndexU; | ||
| 137 | ID3D12Resource *mainTextureV; | ||
| 138 | D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceViewV; | ||
| 139 | D3D12_RESOURCE_STATES mainResourceStateV; | ||
| 140 | SIZE_T mainSRVIndexV; | ||
| 141 | |||
| 142 | // NV12 texture support | ||
| 143 | bool nv12; | ||
| 144 | D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceViewNV; | ||
| 145 | SIZE_T mainSRVIndexNV; | ||
| 146 | |||
| 147 | Uint8 *pixels; | ||
| 148 | int pitch; | ||
| 149 | #endif | ||
| 150 | SDL_Rect lockedRect; | ||
| 151 | } D3D12_TextureData; | ||
| 152 | |||
| 153 | // Pipeline State Object data | ||
| 154 | typedef struct | ||
| 155 | { | ||
| 156 | D3D12_Shader shader; | ||
| 157 | D3D12_PixelShaderConstants shader_constants; | ||
| 158 | SDL_BlendMode blendMode; | ||
| 159 | D3D12_PRIMITIVE_TOPOLOGY_TYPE topology; | ||
| 160 | DXGI_FORMAT rtvFormat; | ||
| 161 | ID3D12PipelineState *pipelineState; | ||
| 162 | } D3D12_PipelineState; | ||
| 163 | |||
| 164 | // Vertex Buffer | ||
| 165 | typedef struct | ||
| 166 | { | ||
| 167 | ID3D12Resource *resource; | ||
| 168 | D3D12_VERTEX_BUFFER_VIEW view; | ||
| 169 | size_t size; | ||
| 170 | } D3D12_VertexBuffer; | ||
| 171 | |||
| 172 | // For SRV pool allocator | ||
| 173 | typedef struct | ||
| 174 | { | ||
| 175 | SIZE_T index; | ||
| 176 | void *next; | ||
| 177 | } D3D12_SRVPoolNode; | ||
| 178 | |||
| 179 | // Private renderer data | ||
| 180 | typedef struct | ||
| 181 | { | ||
| 182 | SDL_SharedObject *hDXGIMod; | ||
| 183 | SDL_SharedObject *hD3D12Mod; | ||
| 184 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 185 | UINT64 frameToken; | ||
| 186 | #else | ||
| 187 | IDXGIFactory6 *dxgiFactory; | ||
| 188 | IDXGIAdapter4 *dxgiAdapter; | ||
| 189 | IDXGIDebug *dxgiDebug; | ||
| 190 | IDXGISwapChain4 *swapChain; | ||
| 191 | #endif | ||
| 192 | ID3D12Device1 *d3dDevice; | ||
| 193 | ID3D12Debug *debugInterface; | ||
| 194 | ID3D12CommandQueue *commandQueue; | ||
| 195 | ID3D12GraphicsCommandList2 *commandList; | ||
| 196 | DXGI_SWAP_EFFECT swapEffect; | ||
| 197 | UINT swapFlags; | ||
| 198 | UINT syncInterval; | ||
| 199 | UINT presentFlags; | ||
| 200 | DXGI_FORMAT renderTargetFormat; | ||
| 201 | bool pixelSizeChanged; | ||
| 202 | |||
| 203 | // Descriptor heaps | ||
| 204 | ID3D12DescriptorHeap *rtvDescriptorHeap; | ||
| 205 | UINT rtvDescriptorSize; | ||
| 206 | ID3D12DescriptorHeap *textureRTVDescriptorHeap; | ||
| 207 | ID3D12DescriptorHeap *srvDescriptorHeap; | ||
| 208 | UINT srvDescriptorSize; | ||
| 209 | ID3D12DescriptorHeap *samplerDescriptorHeap; | ||
| 210 | UINT samplerDescriptorSize; | ||
| 211 | |||
| 212 | // Data needed per backbuffer | ||
| 213 | ID3D12CommandAllocator *commandAllocators[SDL_D3D12_NUM_BUFFERS]; | ||
| 214 | ID3D12Resource *renderTargets[SDL_D3D12_NUM_BUFFERS]; | ||
| 215 | UINT64 fenceValue; | ||
| 216 | int currentBackBufferIndex; | ||
| 217 | |||
| 218 | // Fences | ||
| 219 | ID3D12Fence *fence; | ||
| 220 | HANDLE fenceEvent; | ||
| 221 | |||
| 222 | // Root signature and pipeline state data | ||
| 223 | ID3D12RootSignature *rootSignatures[NUM_ROOTSIGS]; | ||
| 224 | int pipelineStateCount; | ||
| 225 | D3D12_PipelineState *pipelineStates; | ||
| 226 | D3D12_PipelineState *currentPipelineState; | ||
| 227 | |||
| 228 | D3D12_VertexBuffer vertexBuffers[SDL_D3D12_NUM_VERTEX_BUFFERS]; | ||
| 229 | D3D12_CPU_DESCRIPTOR_HANDLE samplers[D3D12_SAMPLER_COUNT]; | ||
| 230 | |||
| 231 | // Data for staging/allocating textures | ||
| 232 | ID3D12Resource *uploadBuffers[SDL_D3D12_NUM_UPLOAD_BUFFERS]; | ||
| 233 | int currentUploadBuffer; | ||
| 234 | |||
| 235 | // Pool allocator to handle reusing SRV heap indices | ||
| 236 | D3D12_SRVPoolNode *srvPoolHead; | ||
| 237 | D3D12_SRVPoolNode srvPoolNodes[SDL_D3D12_MAX_NUM_TEXTURES]; | ||
| 238 | |||
| 239 | // Vertex buffer constants | ||
| 240 | D3D12_VertexShaderConstants vertexShaderConstantsData; | ||
| 241 | |||
| 242 | // Cached renderer properties | ||
| 243 | DXGI_MODE_ROTATION rotation; | ||
| 244 | D3D12_TextureData *textureRenderTarget; | ||
| 245 | D3D12_CPU_DESCRIPTOR_HANDLE currentRenderTargetView; | ||
| 246 | D3D12_CPU_DESCRIPTOR_HANDLE currentShaderResource; | ||
| 247 | D3D12_CPU_DESCRIPTOR_HANDLE currentSampler; | ||
| 248 | bool cliprectDirty; | ||
| 249 | bool currentCliprectEnabled; | ||
| 250 | SDL_Rect currentCliprect; | ||
| 251 | SDL_Rect currentViewport; | ||
| 252 | int currentViewportRotation; | ||
| 253 | bool viewportDirty; | ||
| 254 | Float4X4 identity; | ||
| 255 | int currentVertexBuffer; | ||
| 256 | bool issueBatch; | ||
| 257 | } D3D12_RenderData; | ||
| 258 | |||
| 259 | // Define D3D GUIDs here so we don't have to include uuid.lib. | ||
| 260 | |||
| 261 | #ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA | ||
| 262 | #pragma GCC diagnostic push | ||
| 263 | #pragma GCC diagnostic ignored "-Wunused-const-variable" | ||
| 264 | #endif | ||
| 265 | |||
| 266 | static const GUID SDL_IID_IDXGIFactory6 = { 0xc1b6694f, 0xff09, 0x44a9, { 0xb0, 0x3c, 0x77, 0x90, 0x0a, 0x0a, 0x1d, 0x17 } }; | ||
| 267 | static const GUID SDL_IID_IDXGIAdapter4 = { 0x3c8d99d1, 0x4fbf, 0x4181, { 0xa8, 0x2c, 0xaf, 0x66, 0xbf, 0x7b, 0xd2, 0x4e } }; | ||
| 268 | static const GUID SDL_IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } }; | ||
| 269 | static const GUID SDL_IID_ID3D12Device1 = { 0x77acce80, 0x638e, 0x4e65, { 0x88, 0x95, 0xc1, 0xf2, 0x33, 0x86, 0x86, 0x3e } }; | ||
| 270 | static const GUID SDL_IID_IDXGISwapChain4 = { 0x3D585D5A, 0xBD4A, 0x489E, { 0xB1, 0xF4, 0x3D, 0xBC, 0xB6, 0x45, 0x2F, 0xFB } }; | ||
| 271 | static const GUID SDL_IID_IDXGIDebug1 = { 0xc5a05f0c, 0x16f2, 0x4adf, { 0x9f, 0x4d, 0xa8, 0xc4, 0xd5, 0x8a, 0xc5, 0x50 } }; | ||
| 272 | static const GUID SDL_IID_IDXGIInfoQueue = { 0xD67441C7, 0x672A, 0x476f, { 0x9E, 0x82, 0xCD, 0x55, 0xB4, 0x49, 0x49, 0xCE } }; | ||
| 273 | static const GUID SDL_IID_ID3D12Debug = { 0x344488b7, 0x6846, 0x474b, { 0xb9, 0x89, 0xf0, 0x27, 0x44, 0x82, 0x45, 0xe0 } }; | ||
| 274 | static const GUID SDL_DXGI_DEBUG_ALL = { 0xe48ae283, 0xda80, 0x490b, { 0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x8 } }; | ||
| 275 | static const GUID SDL_IID_ID3D12CommandQueue = { 0x0ec870a6, 0x5d7e, 0x4c22, { 0x8c, 0xfc, 0x5b, 0xaa, 0xe0, 0x76, 0x16, 0xed } }; | ||
| 276 | static const GUID SDL_IID_ID3D12DescriptorHeap = { 0x8efb471d, 0x616c, 0x4f49, { 0x90, 0xf7, 0x12, 0x7b, 0xb7, 0x63, 0xfa, 0x51 } }; | ||
| 277 | static const GUID SDL_IID_ID3D12CommandAllocator = { 0x6102dee4, 0xaf59, 0x4b09, { 0xb9, 0x99, 0xb4, 0x4d, 0x73, 0xf0, 0x9b, 0x24 } }; | ||
| 278 | static const GUID SDL_IID_ID3D12GraphicsCommandList2 = { 0x38C3E585, 0xFF17, 0x412C, { 0x91, 0x50, 0x4F, 0xC6, 0xF9, 0xD7, 0x2A, 0x28 } }; | ||
| 279 | static const GUID SDL_IID_ID3D12Fence = { 0x0a753dcf, 0xc4d8, 0x4b91, { 0xad, 0xf6, 0xbe, 0x5a, 0x60, 0xd9, 0x5a, 0x76 } }; | ||
| 280 | static const GUID SDL_IID_ID3D12Resource = { 0x696442be, 0xa72e, 0x4059, { 0xbc, 0x79, 0x5b, 0x5c, 0x98, 0x04, 0x0f, 0xad } }; | ||
| 281 | static const GUID SDL_IID_ID3D12RootSignature = { 0xc54a6b66, 0x72df, 0x4ee8, { 0x8b, 0xe5, 0xa9, 0x46, 0xa1, 0x42, 0x92, 0x14 } }; | ||
| 282 | static const GUID SDL_IID_ID3D12PipelineState = { 0x765a30f3, 0xf624, 0x4c6f, { 0xa8, 0x28, 0xac, 0xe9, 0x48, 0x62, 0x24, 0x45 } }; | ||
| 283 | static const GUID SDL_IID_ID3D12Heap = { 0x6b3b2502, 0x6e51, 0x45b3, { 0x90, 0xee, 0x98, 0x84, 0x26, 0x5e, 0x8d, 0xf3 } }; | ||
| 284 | static const GUID SDL_IID_ID3D12InfoQueue = { 0x0742a90b, 0xc387, 0x483f, { 0xb9, 0x46, 0x30, 0xa7, 0xe4, 0xe6, 0x14, 0x58 } }; | ||
| 285 | |||
| 286 | #ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA | ||
| 287 | #pragma GCC diagnostic pop | ||
| 288 | #endif | ||
| 289 | |||
| 290 | static UINT D3D12_Align(UINT location, UINT alignment) | ||
| 291 | { | ||
| 292 | return (location + (alignment - 1)) & ~(alignment - 1); | ||
| 293 | } | ||
| 294 | |||
| 295 | static SDL_PixelFormat D3D12_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat) | ||
| 296 | { | ||
| 297 | switch (dxgiFormat) { | ||
| 298 | case DXGI_FORMAT_B8G8R8A8_UNORM: | ||
| 299 | case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: | ||
| 300 | return SDL_PIXELFORMAT_ARGB8888; | ||
| 301 | case DXGI_FORMAT_R8G8B8A8_UNORM: | ||
| 302 | case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: | ||
| 303 | return SDL_PIXELFORMAT_ABGR8888; | ||
| 304 | case DXGI_FORMAT_B8G8R8X8_UNORM: | ||
| 305 | case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: | ||
| 306 | return SDL_PIXELFORMAT_XRGB8888; | ||
| 307 | case DXGI_FORMAT_R10G10B10A2_UNORM: | ||
| 308 | return SDL_PIXELFORMAT_ABGR2101010; | ||
| 309 | case DXGI_FORMAT_R16G16B16A16_FLOAT: | ||
| 310 | return SDL_PIXELFORMAT_RGBA64_FLOAT; | ||
| 311 | default: | ||
| 312 | return SDL_PIXELFORMAT_UNKNOWN; | ||
| 313 | } | ||
| 314 | } | ||
| 315 | |||
| 316 | static DXGI_FORMAT SDLPixelFormatToDXGITextureFormat(Uint32 format, Uint32 output_colorspace) | ||
| 317 | { | ||
| 318 | switch (format) { | ||
| 319 | case SDL_PIXELFORMAT_RGBA64_FLOAT: | ||
| 320 | return DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 321 | case SDL_PIXELFORMAT_ABGR2101010: | ||
| 322 | return DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 323 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 324 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 325 | return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; | ||
| 326 | } | ||
| 327 | return DXGI_FORMAT_B8G8R8A8_UNORM; | ||
| 328 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 329 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 330 | return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; | ||
| 331 | } | ||
| 332 | return DXGI_FORMAT_R8G8B8A8_UNORM; | ||
| 333 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 334 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 335 | return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; | ||
| 336 | } | ||
| 337 | return DXGI_FORMAT_B8G8R8X8_UNORM; | ||
| 338 | case SDL_PIXELFORMAT_YV12: | ||
| 339 | case SDL_PIXELFORMAT_IYUV: | ||
| 340 | return DXGI_FORMAT_R8_UNORM; | ||
| 341 | case SDL_PIXELFORMAT_NV12: | ||
| 342 | case SDL_PIXELFORMAT_NV21: | ||
| 343 | return DXGI_FORMAT_NV12; | ||
| 344 | case SDL_PIXELFORMAT_P010: | ||
| 345 | return DXGI_FORMAT_P010; | ||
| 346 | default: | ||
| 347 | return DXGI_FORMAT_UNKNOWN; | ||
| 348 | } | ||
| 349 | } | ||
| 350 | |||
| 351 | static DXGI_FORMAT SDLPixelFormatToDXGIMainResourceViewFormat(Uint32 format, Uint32 colorspace) | ||
| 352 | { | ||
| 353 | switch (format) { | ||
| 354 | case SDL_PIXELFORMAT_RGBA64_FLOAT: | ||
| 355 | return DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 356 | case SDL_PIXELFORMAT_ABGR2101010: | ||
| 357 | return DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 358 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 359 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 360 | return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; | ||
| 361 | } | ||
| 362 | return DXGI_FORMAT_B8G8R8A8_UNORM; | ||
| 363 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 364 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 365 | return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; | ||
| 366 | } | ||
| 367 | return DXGI_FORMAT_R8G8B8A8_UNORM; | ||
| 368 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 369 | if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 370 | return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; | ||
| 371 | } | ||
| 372 | return DXGI_FORMAT_B8G8R8X8_UNORM; | ||
| 373 | case SDL_PIXELFORMAT_YV12: | ||
| 374 | case SDL_PIXELFORMAT_IYUV: | ||
| 375 | case SDL_PIXELFORMAT_NV12: // For the Y texture | ||
| 376 | case SDL_PIXELFORMAT_NV21: // For the Y texture | ||
| 377 | return DXGI_FORMAT_R8_UNORM; | ||
| 378 | case SDL_PIXELFORMAT_P010: // For the Y texture | ||
| 379 | return DXGI_FORMAT_R16_UNORM; | ||
| 380 | default: | ||
| 381 | return DXGI_FORMAT_UNKNOWN; | ||
| 382 | } | ||
| 383 | } | ||
| 384 | |||
| 385 | static void D3D12_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 386 | |||
| 387 | static void D3D12_ReleaseAll(SDL_Renderer *renderer) | ||
| 388 | { | ||
| 389 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 390 | |||
| 391 | SDL_PropertiesID props = SDL_GetRendererProperties(renderer); | ||
| 392 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_DEVICE_POINTER, NULL); | ||
| 393 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER, NULL); | ||
| 394 | |||
| 395 | // Release all textures | ||
| 396 | for (SDL_Texture *texture = renderer->textures; texture; texture = texture->next) { | ||
| 397 | D3D12_DestroyTexture(renderer, texture); | ||
| 398 | } | ||
| 399 | |||
| 400 | // Release/reset everything else | ||
| 401 | if (data) { | ||
| 402 | int i; | ||
| 403 | |||
| 404 | #if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 405 | D3D_SAFE_RELEASE(data->dxgiFactory); | ||
| 406 | D3D_SAFE_RELEASE(data->dxgiAdapter); | ||
| 407 | D3D_SAFE_RELEASE(data->swapChain); | ||
| 408 | #endif | ||
| 409 | D3D_SAFE_RELEASE(data->d3dDevice); | ||
| 410 | D3D_SAFE_RELEASE(data->debugInterface); | ||
| 411 | D3D_SAFE_RELEASE(data->commandQueue); | ||
| 412 | D3D_SAFE_RELEASE(data->commandList); | ||
| 413 | D3D_SAFE_RELEASE(data->rtvDescriptorHeap); | ||
| 414 | D3D_SAFE_RELEASE(data->textureRTVDescriptorHeap); | ||
| 415 | D3D_SAFE_RELEASE(data->srvDescriptorHeap); | ||
| 416 | D3D_SAFE_RELEASE(data->samplerDescriptorHeap); | ||
| 417 | D3D_SAFE_RELEASE(data->fence); | ||
| 418 | |||
| 419 | for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) { | ||
| 420 | D3D_SAFE_RELEASE(data->commandAllocators[i]); | ||
| 421 | D3D_SAFE_RELEASE(data->renderTargets[i]); | ||
| 422 | } | ||
| 423 | |||
| 424 | if (data->pipelineStateCount > 0) { | ||
| 425 | for (i = 0; i < data->pipelineStateCount; ++i) { | ||
| 426 | D3D_SAFE_RELEASE(data->pipelineStates[i].pipelineState); | ||
| 427 | } | ||
| 428 | SDL_free(data->pipelineStates); | ||
| 429 | data->pipelineStates = NULL; | ||
| 430 | data->pipelineStateCount = 0; | ||
| 431 | } | ||
| 432 | |||
| 433 | for (i = 0; i < NUM_ROOTSIGS; ++i) { | ||
| 434 | D3D_SAFE_RELEASE(data->rootSignatures[i]); | ||
| 435 | } | ||
| 436 | |||
| 437 | for (i = 0; i < SDL_D3D12_NUM_VERTEX_BUFFERS; ++i) { | ||
| 438 | D3D_SAFE_RELEASE(data->vertexBuffers[i].resource); | ||
| 439 | data->vertexBuffers[i].size = 0; | ||
| 440 | } | ||
| 441 | |||
| 442 | data->swapEffect = (DXGI_SWAP_EFFECT)0; | ||
| 443 | data->swapFlags = 0; | ||
| 444 | data->currentRenderTargetView.ptr = 0; | ||
| 445 | data->currentSampler.ptr = 0; | ||
| 446 | |||
| 447 | #if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 448 | // Check for any leaks if in debug mode | ||
| 449 | if (data->dxgiDebug) { | ||
| 450 | DXGI_DEBUG_RLO_FLAGS rloFlags = (DXGI_DEBUG_RLO_FLAGS)(DXGI_DEBUG_RLO_DETAIL | DXGI_DEBUG_RLO_IGNORE_INTERNAL); | ||
| 451 | IDXGIDebug_ReportLiveObjects(data->dxgiDebug, SDL_DXGI_DEBUG_ALL, rloFlags); | ||
| 452 | D3D_SAFE_RELEASE(data->dxgiDebug); | ||
| 453 | } | ||
| 454 | #endif | ||
| 455 | |||
| 456 | /* Unload the D3D libraries. This should be done last, in order | ||
| 457 | * to prevent IUnknown::Release() calls from crashing. | ||
| 458 | */ | ||
| 459 | if (data->hD3D12Mod) { | ||
| 460 | SDL_UnloadObject(data->hD3D12Mod); | ||
| 461 | data->hD3D12Mod = NULL; | ||
| 462 | } | ||
| 463 | if (data->hDXGIMod) { | ||
| 464 | SDL_UnloadObject(data->hDXGIMod); | ||
| 465 | data->hDXGIMod = NULL; | ||
| 466 | } | ||
| 467 | } | ||
| 468 | } | ||
| 469 | |||
| 470 | static D3D12_GPU_DESCRIPTOR_HANDLE D3D12_CPUtoGPUHandle(ID3D12DescriptorHeap *heap, D3D12_CPU_DESCRIPTOR_HANDLE CPUHandle) | ||
| 471 | { | ||
| 472 | D3D12_CPU_DESCRIPTOR_HANDLE CPUHeapStart; | ||
| 473 | D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle; | ||
| 474 | SIZE_T offset; | ||
| 475 | |||
| 476 | // Calculate the correct offset into the heap | ||
| 477 | D3D_CALL_RET(heap, GetCPUDescriptorHandleForHeapStart, &CPUHeapStart); | ||
| 478 | offset = CPUHandle.ptr - CPUHeapStart.ptr; | ||
| 479 | |||
| 480 | D3D_CALL_RET(heap, GetGPUDescriptorHandleForHeapStart, &GPUHandle); | ||
| 481 | GPUHandle.ptr += offset; | ||
| 482 | |||
| 483 | return GPUHandle; | ||
| 484 | } | ||
| 485 | |||
| 486 | static void D3D12_WaitForGPU(D3D12_RenderData *data) | ||
| 487 | { | ||
| 488 | if (data->commandQueue && data->fence && data->fenceEvent) { | ||
| 489 | ID3D12CommandQueue_Signal(data->commandQueue, data->fence, data->fenceValue); | ||
| 490 | if (ID3D12Fence_GetCompletedValue(data->fence) < data->fenceValue) { | ||
| 491 | ID3D12Fence_SetEventOnCompletion(data->fence, | ||
| 492 | data->fenceValue, | ||
| 493 | data->fenceEvent); | ||
| 494 | WaitForSingleObjectEx(data->fenceEvent, INFINITE, FALSE); | ||
| 495 | } | ||
| 496 | |||
| 497 | data->fenceValue++; | ||
| 498 | } | ||
| 499 | } | ||
| 500 | |||
| 501 | static D3D12_CPU_DESCRIPTOR_HANDLE D3D12_GetCurrentRenderTargetView(SDL_Renderer *renderer) | ||
| 502 | { | ||
| 503 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 504 | D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor; | ||
| 505 | |||
| 506 | if (data->textureRenderTarget) { | ||
| 507 | return data->textureRenderTarget->mainTextureRenderTargetView; | ||
| 508 | } | ||
| 509 | |||
| 510 | SDL_zero(rtvDescriptor); | ||
| 511 | D3D_CALL_RET(data->rtvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &rtvDescriptor); | ||
| 512 | rtvDescriptor.ptr += data->currentBackBufferIndex * data->rtvDescriptorSize; | ||
| 513 | return rtvDescriptor; | ||
| 514 | } | ||
| 515 | |||
| 516 | static void D3D12_TransitionResource(D3D12_RenderData *data, | ||
| 517 | ID3D12Resource *resource, | ||
| 518 | D3D12_RESOURCE_STATES beforeState, | ||
| 519 | D3D12_RESOURCE_STATES afterState) | ||
| 520 | { | ||
| 521 | D3D12_RESOURCE_BARRIER barrier; | ||
| 522 | |||
| 523 | if (beforeState != afterState) { | ||
| 524 | SDL_zero(barrier); | ||
| 525 | barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; | ||
| 526 | barrier.Transition.pResource = resource; | ||
| 527 | barrier.Transition.StateBefore = beforeState; | ||
| 528 | barrier.Transition.StateAfter = afterState; | ||
| 529 | barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; | ||
| 530 | |||
| 531 | ID3D12GraphicsCommandList2_ResourceBarrier(data->commandList, 1, &barrier); | ||
| 532 | } | ||
| 533 | } | ||
| 534 | |||
| 535 | static void D3D12_ResetCommandList(D3D12_RenderData *data) | ||
| 536 | { | ||
| 537 | int i; | ||
| 538 | ID3D12DescriptorHeap *rootDescriptorHeaps[] = { data->srvDescriptorHeap, data->samplerDescriptorHeap }; | ||
| 539 | ID3D12CommandAllocator *commandAllocator = data->commandAllocators[data->currentBackBufferIndex]; | ||
| 540 | |||
| 541 | ID3D12CommandAllocator_Reset(commandAllocator); | ||
| 542 | ID3D12GraphicsCommandList2_Reset(data->commandList, commandAllocator, NULL); | ||
| 543 | data->currentPipelineState = NULL; | ||
| 544 | data->currentVertexBuffer = 0; | ||
| 545 | data->issueBatch = false; | ||
| 546 | data->cliprectDirty = true; | ||
| 547 | data->viewportDirty = true; | ||
| 548 | data->currentRenderTargetView.ptr = 0; | ||
| 549 | // FIXME should we also clear currentSampler.ptr and currentRenderTargetView.ptr ? (and use D3D12_InvalidateCachedState() instead) | ||
| 550 | |||
| 551 | // Release any upload buffers that were inflight | ||
| 552 | for (i = 0; i < data->currentUploadBuffer; ++i) { | ||
| 553 | D3D_SAFE_RELEASE(data->uploadBuffers[i]); | ||
| 554 | } | ||
| 555 | data->currentUploadBuffer = 0; | ||
| 556 | |||
| 557 | ID3D12GraphicsCommandList2_SetDescriptorHeaps(data->commandList, 2, rootDescriptorHeaps); | ||
| 558 | } | ||
| 559 | |||
| 560 | static HRESULT D3D12_IssueBatch(D3D12_RenderData *data) | ||
| 561 | { | ||
| 562 | HRESULT result = S_OK; | ||
| 563 | |||
| 564 | // Issue the command list | ||
| 565 | result = ID3D12GraphicsCommandList2_Close(data->commandList); | ||
| 566 | if (FAILED(result)) { | ||
| 567 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D12_IssueBatch"), result); | ||
| 568 | return result; | ||
| 569 | } | ||
| 570 | ID3D12CommandQueue_ExecuteCommandLists(data->commandQueue, 1, (ID3D12CommandList *const *)&data->commandList); | ||
| 571 | |||
| 572 | D3D12_WaitForGPU(data); | ||
| 573 | |||
| 574 | D3D12_ResetCommandList(data); | ||
| 575 | |||
| 576 | return result; | ||
| 577 | } | ||
| 578 | |||
| 579 | static void D3D12_DestroyRenderer(SDL_Renderer *renderer) | ||
| 580 | { | ||
| 581 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 582 | if (data) { | ||
| 583 | D3D12_WaitForGPU(data); | ||
| 584 | D3D12_ReleaseAll(renderer); | ||
| 585 | SDL_free(data); | ||
| 586 | } | ||
| 587 | } | ||
| 588 | |||
| 589 | static D3D12_BLEND GetBlendFunc(SDL_BlendFactor factor) | ||
| 590 | { | ||
| 591 | switch (factor) { | ||
| 592 | case SDL_BLENDFACTOR_ZERO: | ||
| 593 | return D3D12_BLEND_ZERO; | ||
| 594 | case SDL_BLENDFACTOR_ONE: | ||
| 595 | return D3D12_BLEND_ONE; | ||
| 596 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 597 | return D3D12_BLEND_SRC_COLOR; | ||
| 598 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 599 | return D3D12_BLEND_INV_SRC_COLOR; | ||
| 600 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 601 | return D3D12_BLEND_SRC_ALPHA; | ||
| 602 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 603 | return D3D12_BLEND_INV_SRC_ALPHA; | ||
| 604 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 605 | return D3D12_BLEND_DEST_COLOR; | ||
| 606 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 607 | return D3D12_BLEND_INV_DEST_COLOR; | ||
| 608 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 609 | return D3D12_BLEND_DEST_ALPHA; | ||
| 610 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 611 | return D3D12_BLEND_INV_DEST_ALPHA; | ||
| 612 | default: | ||
| 613 | return (D3D12_BLEND)0; | ||
| 614 | } | ||
| 615 | } | ||
| 616 | |||
| 617 | static D3D12_BLEND_OP GetBlendEquation(SDL_BlendOperation operation) | ||
| 618 | { | ||
| 619 | switch (operation) { | ||
| 620 | case SDL_BLENDOPERATION_ADD: | ||
| 621 | return D3D12_BLEND_OP_ADD; | ||
| 622 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 623 | return D3D12_BLEND_OP_SUBTRACT; | ||
| 624 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 625 | return D3D12_BLEND_OP_REV_SUBTRACT; | ||
| 626 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 627 | return D3D12_BLEND_OP_MIN; | ||
| 628 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 629 | return D3D12_BLEND_OP_MAX; | ||
| 630 | default: | ||
| 631 | return (D3D12_BLEND_OP)0; | ||
| 632 | } | ||
| 633 | } | ||
| 634 | |||
| 635 | static void D3D12_CreateBlendState(SDL_Renderer *renderer, SDL_BlendMode blendMode, D3D12_BLEND_DESC *outBlendDesc) | ||
| 636 | { | ||
| 637 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 638 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 639 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 640 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 641 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 642 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 643 | |||
| 644 | SDL_zerop(outBlendDesc); | ||
| 645 | outBlendDesc->AlphaToCoverageEnable = FALSE; | ||
| 646 | outBlendDesc->IndependentBlendEnable = FALSE; | ||
| 647 | outBlendDesc->RenderTarget[0].BlendEnable = TRUE; | ||
| 648 | outBlendDesc->RenderTarget[0].SrcBlend = GetBlendFunc(srcColorFactor); | ||
| 649 | outBlendDesc->RenderTarget[0].DestBlend = GetBlendFunc(dstColorFactor); | ||
| 650 | outBlendDesc->RenderTarget[0].BlendOp = GetBlendEquation(colorOperation); | ||
| 651 | outBlendDesc->RenderTarget[0].SrcBlendAlpha = GetBlendFunc(srcAlphaFactor); | ||
| 652 | outBlendDesc->RenderTarget[0].DestBlendAlpha = GetBlendFunc(dstAlphaFactor); | ||
| 653 | outBlendDesc->RenderTarget[0].BlendOpAlpha = GetBlendEquation(alphaOperation); | ||
| 654 | outBlendDesc->RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; | ||
| 655 | } | ||
| 656 | |||
| 657 | static D3D12_PipelineState *D3D12_CreatePipelineState(SDL_Renderer *renderer, | ||
| 658 | D3D12_Shader shader, | ||
| 659 | SDL_BlendMode blendMode, | ||
| 660 | D3D12_PRIMITIVE_TOPOLOGY_TYPE topology, | ||
| 661 | DXGI_FORMAT rtvFormat) | ||
| 662 | { | ||
| 663 | const D3D12_INPUT_ELEMENT_DESC vertexDesc[] = { | ||
| 664 | { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, | ||
| 665 | { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, | ||
| 666 | { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 16, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, | ||
| 667 | }; | ||
| 668 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 669 | D3D12_GRAPHICS_PIPELINE_STATE_DESC pipelineDesc; | ||
| 670 | ID3D12PipelineState *pipelineState = NULL; | ||
| 671 | D3D12_PipelineState *pipelineStates; | ||
| 672 | HRESULT result = S_OK; | ||
| 673 | |||
| 674 | SDL_zero(pipelineDesc); | ||
| 675 | pipelineDesc.pRootSignature = data->rootSignatures[D3D12_GetRootSignatureType(shader)]; | ||
| 676 | D3D12_GetVertexShader(shader, &pipelineDesc.VS); | ||
| 677 | D3D12_GetPixelShader(shader, &pipelineDesc.PS); | ||
| 678 | D3D12_CreateBlendState(renderer, blendMode, &pipelineDesc.BlendState); | ||
| 679 | pipelineDesc.SampleMask = 0xffffffff; | ||
| 680 | |||
| 681 | pipelineDesc.RasterizerState.AntialiasedLineEnable = FALSE; | ||
| 682 | pipelineDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE; | ||
| 683 | pipelineDesc.RasterizerState.DepthBias = 0; | ||
| 684 | pipelineDesc.RasterizerState.DepthBiasClamp = 0.0f; | ||
| 685 | pipelineDesc.RasterizerState.DepthClipEnable = TRUE; | ||
| 686 | pipelineDesc.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID; | ||
| 687 | pipelineDesc.RasterizerState.FrontCounterClockwise = FALSE; | ||
| 688 | pipelineDesc.RasterizerState.MultisampleEnable = FALSE; | ||
| 689 | pipelineDesc.RasterizerState.SlopeScaledDepthBias = 0.0f; | ||
| 690 | |||
| 691 | pipelineDesc.InputLayout.pInputElementDescs = vertexDesc; | ||
| 692 | pipelineDesc.InputLayout.NumElements = 3; | ||
| 693 | |||
| 694 | pipelineDesc.PrimitiveTopologyType = topology; | ||
| 695 | |||
| 696 | pipelineDesc.NumRenderTargets = 1; | ||
| 697 | pipelineDesc.RTVFormats[0] = rtvFormat; | ||
| 698 | pipelineDesc.SampleDesc.Count = 1; | ||
| 699 | pipelineDesc.SampleDesc.Quality = 0; | ||
| 700 | |||
| 701 | result = ID3D12Device1_CreateGraphicsPipelineState(data->d3dDevice, | ||
| 702 | &pipelineDesc, | ||
| 703 | D3D_GUID(SDL_IID_ID3D12PipelineState), | ||
| 704 | (void **)&pipelineState); | ||
| 705 | if (FAILED(result)) { | ||
| 706 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateGraphicsPipelineState"), result); | ||
| 707 | return NULL; | ||
| 708 | } | ||
| 709 | |||
| 710 | pipelineStates = (D3D12_PipelineState *)SDL_realloc(data->pipelineStates, (data->pipelineStateCount + 1) * sizeof(*pipelineStates)); | ||
| 711 | if (!pipelineStates) { | ||
| 712 | D3D_SAFE_RELEASE(pipelineState); | ||
| 713 | return NULL; | ||
| 714 | } | ||
| 715 | |||
| 716 | pipelineStates[data->pipelineStateCount].shader = shader; | ||
| 717 | pipelineStates[data->pipelineStateCount].blendMode = blendMode; | ||
| 718 | pipelineStates[data->pipelineStateCount].topology = topology; | ||
| 719 | pipelineStates[data->pipelineStateCount].rtvFormat = rtvFormat; | ||
| 720 | pipelineStates[data->pipelineStateCount].pipelineState = pipelineState; | ||
| 721 | data->pipelineStates = pipelineStates; | ||
| 722 | ++data->pipelineStateCount; | ||
| 723 | |||
| 724 | return &pipelineStates[data->pipelineStateCount - 1]; | ||
| 725 | } | ||
| 726 | |||
| 727 | static HRESULT D3D12_CreateVertexBuffer(D3D12_RenderData *data, size_t vbidx, size_t size) | ||
| 728 | { | ||
| 729 | D3D12_HEAP_PROPERTIES vbufferHeapProps; | ||
| 730 | D3D12_RESOURCE_DESC vbufferDesc; | ||
| 731 | HRESULT result; | ||
| 732 | |||
| 733 | D3D_SAFE_RELEASE(data->vertexBuffers[vbidx].resource); | ||
| 734 | |||
| 735 | SDL_zero(vbufferHeapProps); | ||
| 736 | vbufferHeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; | ||
| 737 | vbufferHeapProps.CreationNodeMask = 1; | ||
| 738 | vbufferHeapProps.VisibleNodeMask = 1; | ||
| 739 | |||
| 740 | SDL_zero(vbufferDesc); | ||
| 741 | vbufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; | ||
| 742 | vbufferDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; | ||
| 743 | vbufferDesc.Width = size; | ||
| 744 | vbufferDesc.Height = 1; | ||
| 745 | vbufferDesc.DepthOrArraySize = 1; | ||
| 746 | vbufferDesc.MipLevels = 1; | ||
| 747 | vbufferDesc.Format = DXGI_FORMAT_UNKNOWN; | ||
| 748 | vbufferDesc.SampleDesc.Count = 1; | ||
| 749 | vbufferDesc.SampleDesc.Quality = 0; | ||
| 750 | vbufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; | ||
| 751 | vbufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; | ||
| 752 | |||
| 753 | result = ID3D12Device1_CreateCommittedResource(data->d3dDevice, | ||
| 754 | &vbufferHeapProps, | ||
| 755 | D3D12_HEAP_FLAG_NONE, | ||
| 756 | &vbufferDesc, | ||
| 757 | D3D12_RESOURCE_STATE_GENERIC_READ, | ||
| 758 | NULL, | ||
| 759 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 760 | (void **)&data->vertexBuffers[vbidx].resource); | ||
| 761 | |||
| 762 | if (FAILED(result)) { | ||
| 763 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreatePlacedResource [vertex buffer]"), result); | ||
| 764 | return result; | ||
| 765 | } | ||
| 766 | |||
| 767 | data->vertexBuffers[vbidx].view.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(data->vertexBuffers[vbidx].resource); | ||
| 768 | data->vertexBuffers[vbidx].view.StrideInBytes = sizeof(D3D12_VertexPositionColor); | ||
| 769 | data->vertexBuffers[vbidx].size = size; | ||
| 770 | |||
| 771 | return result; | ||
| 772 | } | ||
| 773 | |||
| 774 | // Create resources that depend on the device. | ||
| 775 | static HRESULT D3D12_CreateDeviceResources(SDL_Renderer *renderer) | ||
| 776 | { | ||
| 777 | #if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 778 | typedef HRESULT(WINAPI * PFN_CREATE_DXGI_FACTORY)(UINT flags, REFIID riid, void **ppFactory); | ||
| 779 | PFN_CREATE_DXGI_FACTORY CreateDXGIFactoryFunc; | ||
| 780 | PFN_D3D12_CREATE_DEVICE D3D12CreateDeviceFunc; | ||
| 781 | #endif | ||
| 782 | typedef HANDLE(WINAPI * PFN_CREATE_EVENT_EX)(LPSECURITY_ATTRIBUTES lpEventAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); | ||
| 783 | PFN_CREATE_EVENT_EX CreateEventExFunc; | ||
| 784 | |||
| 785 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 786 | ID3D12Device *d3dDevice = NULL; | ||
| 787 | HRESULT result = S_OK; | ||
| 788 | UINT creationFlags = 0; | ||
| 789 | int i; | ||
| 790 | bool createDebug; | ||
| 791 | |||
| 792 | D3D12_COMMAND_QUEUE_DESC queueDesc; | ||
| 793 | D3D12_DESCRIPTOR_HEAP_DESC descriptorHeapDesc; | ||
| 794 | D3D12_SAMPLER_DESC samplerDesc; | ||
| 795 | ID3D12DescriptorHeap *rootDescriptorHeaps[2]; | ||
| 796 | |||
| 797 | // See if we need debug interfaces | ||
| 798 | createDebug = SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D11_DEBUG, false); | ||
| 799 | |||
| 800 | #ifdef SDL_PLATFORM_GDK | ||
| 801 | CreateEventExFunc = CreateEventExW; | ||
| 802 | #else | ||
| 803 | // CreateEventEx() arrived in Vista, so we need to load it with GetProcAddress for XP. | ||
| 804 | { | ||
| 805 | HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll")); | ||
| 806 | CreateEventExFunc = NULL; | ||
| 807 | if (kernel32) { | ||
| 808 | CreateEventExFunc = (PFN_CREATE_EVENT_EX)GetProcAddress(kernel32, "CreateEventExW"); | ||
| 809 | } | ||
| 810 | } | ||
| 811 | #endif | ||
| 812 | if (!CreateEventExFunc) { | ||
| 813 | result = E_FAIL; | ||
| 814 | goto done; | ||
| 815 | } | ||
| 816 | |||
| 817 | #if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 818 | data->hDXGIMod = SDL_LoadObject("dxgi.dll"); | ||
| 819 | if (!data->hDXGIMod) { | ||
| 820 | result = E_FAIL; | ||
| 821 | goto done; | ||
| 822 | } | ||
| 823 | |||
| 824 | CreateDXGIFactoryFunc = (PFN_CREATE_DXGI_FACTORY)SDL_LoadFunction(data->hDXGIMod, "CreateDXGIFactory2"); | ||
| 825 | if (!CreateDXGIFactoryFunc) { | ||
| 826 | result = E_FAIL; | ||
| 827 | goto done; | ||
| 828 | } | ||
| 829 | |||
| 830 | data->hD3D12Mod = SDL_LoadObject("D3D12.dll"); | ||
| 831 | if (!data->hD3D12Mod) { | ||
| 832 | result = E_FAIL; | ||
| 833 | goto done; | ||
| 834 | } | ||
| 835 | |||
| 836 | D3D12CreateDeviceFunc = (PFN_D3D12_CREATE_DEVICE)SDL_LoadFunction(data->hD3D12Mod, "D3D12CreateDevice"); | ||
| 837 | if (!D3D12CreateDeviceFunc) { | ||
| 838 | result = E_FAIL; | ||
| 839 | goto done; | ||
| 840 | } | ||
| 841 | |||
| 842 | if (createDebug) { | ||
| 843 | PFN_D3D12_GET_DEBUG_INTERFACE D3D12GetDebugInterfaceFunc; | ||
| 844 | |||
| 845 | D3D12GetDebugInterfaceFunc = (PFN_D3D12_GET_DEBUG_INTERFACE)SDL_LoadFunction(data->hD3D12Mod, "D3D12GetDebugInterface"); | ||
| 846 | if (!D3D12GetDebugInterfaceFunc) { | ||
| 847 | result = E_FAIL; | ||
| 848 | goto done; | ||
| 849 | } | ||
| 850 | if (SUCCEEDED(D3D12GetDebugInterfaceFunc(D3D_GUID(SDL_IID_ID3D12Debug), (void **)&data->debugInterface))) { | ||
| 851 | ID3D12Debug_EnableDebugLayer(data->debugInterface); | ||
| 852 | } | ||
| 853 | } | ||
| 854 | #endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 855 | |||
| 856 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 857 | result = D3D12_XBOX_CreateDevice(&d3dDevice, createDebug); | ||
| 858 | if (FAILED(result)) { | ||
| 859 | // SDL Error is set by D3D12_XBOX_CreateDevice | ||
| 860 | goto done; | ||
| 861 | } | ||
| 862 | #else | ||
| 863 | if (createDebug) { | ||
| 864 | #ifdef __IDXGIInfoQueue_INTERFACE_DEFINED__ | ||
| 865 | IDXGIInfoQueue *dxgiInfoQueue = NULL; | ||
| 866 | PFN_CREATE_DXGI_FACTORY DXGIGetDebugInterfaceFunc; | ||
| 867 | |||
| 868 | // If the debug hint is set, also create the DXGI factory in debug mode | ||
| 869 | DXGIGetDebugInterfaceFunc = (PFN_CREATE_DXGI_FACTORY)SDL_LoadFunction(data->hDXGIMod, "DXGIGetDebugInterface1"); | ||
| 870 | if (!DXGIGetDebugInterfaceFunc) { | ||
| 871 | result = E_FAIL; | ||
| 872 | goto done; | ||
| 873 | } | ||
| 874 | |||
| 875 | result = DXGIGetDebugInterfaceFunc(0, D3D_GUID(SDL_IID_IDXGIDebug1), (void **)&data->dxgiDebug); | ||
| 876 | if (FAILED(result)) { | ||
| 877 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result); | ||
| 878 | goto done; | ||
| 879 | } | ||
| 880 | |||
| 881 | result = DXGIGetDebugInterfaceFunc(0, D3D_GUID(SDL_IID_IDXGIInfoQueue), (void **)&dxgiInfoQueue); | ||
| 882 | if (FAILED(result)) { | ||
| 883 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result); | ||
| 884 | goto done; | ||
| 885 | } | ||
| 886 | |||
| 887 | IDXGIInfoQueue_SetBreakOnSeverity(dxgiInfoQueue, SDL_DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); | ||
| 888 | IDXGIInfoQueue_SetBreakOnSeverity(dxgiInfoQueue, SDL_DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); | ||
| 889 | D3D_SAFE_RELEASE(dxgiInfoQueue); | ||
| 890 | #endif // __IDXGIInfoQueue_INTERFACE_DEFINED__ | ||
| 891 | creationFlags = DXGI_CREATE_FACTORY_DEBUG; | ||
| 892 | } | ||
| 893 | |||
| 894 | result = CreateDXGIFactoryFunc(creationFlags, D3D_GUID(SDL_IID_IDXGIFactory6), (void **)&data->dxgiFactory); | ||
| 895 | if (FAILED(result)) { | ||
| 896 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("CreateDXGIFactory"), result); | ||
| 897 | goto done; | ||
| 898 | } | ||
| 899 | |||
| 900 | // Prefer a high performance adapter if there are multiple choices | ||
| 901 | result = IDXGIFactory6_EnumAdapterByGpuPreference(data->dxgiFactory, | ||
| 902 | 0, | ||
| 903 | DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, | ||
| 904 | D3D_GUID(SDL_IID_IDXGIAdapter4), | ||
| 905 | (void **)&data->dxgiAdapter); | ||
| 906 | if (FAILED(result)) { | ||
| 907 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIFactory6::EnumAdapterByGPUPreference"), result); | ||
| 908 | goto done; | ||
| 909 | } | ||
| 910 | |||
| 911 | result = D3D12CreateDeviceFunc((IUnknown *)data->dxgiAdapter, | ||
| 912 | D3D_FEATURE_LEVEL_11_0, // Request minimum feature level 11.0 for maximum compatibility | ||
| 913 | D3D_GUID(SDL_IID_ID3D12Device1), | ||
| 914 | (void **)&d3dDevice); | ||
| 915 | if (FAILED(result)) { | ||
| 916 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D12CreateDevice"), result); | ||
| 917 | goto done; | ||
| 918 | } | ||
| 919 | |||
| 920 | // Setup the info queue if in debug mode | ||
| 921 | if (createDebug) { | ||
| 922 | ID3D12InfoQueue *infoQueue = NULL; | ||
| 923 | D3D12_MESSAGE_SEVERITY severities[] = { D3D12_MESSAGE_SEVERITY_INFO }; | ||
| 924 | D3D12_INFO_QUEUE_FILTER filter; | ||
| 925 | |||
| 926 | result = ID3D12Device1_QueryInterface(d3dDevice, D3D_GUID(SDL_IID_ID3D12InfoQueue), (void **)&infoQueue); | ||
| 927 | if (FAILED(result)) { | ||
| 928 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device to ID3D12InfoQueue"), result); | ||
| 929 | goto done; | ||
| 930 | } | ||
| 931 | |||
| 932 | SDL_zero(filter); | ||
| 933 | filter.DenyList.NumSeverities = 1; | ||
| 934 | filter.DenyList.pSeverityList = severities; | ||
| 935 | ID3D12InfoQueue_PushStorageFilter(infoQueue, &filter); | ||
| 936 | |||
| 937 | ID3D12InfoQueue_SetBreakOnSeverity(infoQueue, D3D12_MESSAGE_SEVERITY_ERROR, TRUE); | ||
| 938 | ID3D12InfoQueue_SetBreakOnSeverity(infoQueue, D3D12_MESSAGE_SEVERITY_CORRUPTION, TRUE); | ||
| 939 | |||
| 940 | D3D_SAFE_RELEASE(infoQueue); | ||
| 941 | } | ||
| 942 | #endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 943 | |||
| 944 | result = ID3D12Device_QueryInterface(d3dDevice, D3D_GUID(SDL_IID_ID3D12Device1), (void **)&data->d3dDevice); | ||
| 945 | if (FAILED(result)) { | ||
| 946 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device to ID3D12Device1"), result); | ||
| 947 | goto done; | ||
| 948 | } | ||
| 949 | |||
| 950 | // Create a command queue | ||
| 951 | SDL_zero(queueDesc); | ||
| 952 | queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; | ||
| 953 | queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; | ||
| 954 | |||
| 955 | result = ID3D12Device1_CreateCommandQueue(data->d3dDevice, | ||
| 956 | &queueDesc, | ||
| 957 | D3D_GUID(SDL_IID_ID3D12CommandQueue), | ||
| 958 | (void **)&data->commandQueue); | ||
| 959 | if (FAILED(result)) { | ||
| 960 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommandQueue"), result); | ||
| 961 | goto done; | ||
| 962 | } | ||
| 963 | |||
| 964 | // Create the descriptor heaps for the render target view, texture SRVs, and samplers | ||
| 965 | SDL_zero(descriptorHeapDesc); | ||
| 966 | descriptorHeapDesc.NumDescriptors = SDL_D3D12_NUM_BUFFERS; | ||
| 967 | descriptorHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV; | ||
| 968 | result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice, | ||
| 969 | &descriptorHeapDesc, | ||
| 970 | D3D_GUID(SDL_IID_ID3D12DescriptorHeap), | ||
| 971 | (void **)&data->rtvDescriptorHeap); | ||
| 972 | if (FAILED(result)) { | ||
| 973 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [rtv]"), result); | ||
| 974 | goto done; | ||
| 975 | } | ||
| 976 | data->rtvDescriptorSize = ID3D12Device1_GetDescriptorHandleIncrementSize(d3dDevice, D3D12_DESCRIPTOR_HEAP_TYPE_RTV); | ||
| 977 | |||
| 978 | descriptorHeapDesc.NumDescriptors = SDL_D3D12_MAX_NUM_TEXTURES; | ||
| 979 | result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice, | ||
| 980 | &descriptorHeapDesc, | ||
| 981 | D3D_GUID(SDL_IID_ID3D12DescriptorHeap), | ||
| 982 | (void **)&data->textureRTVDescriptorHeap); | ||
| 983 | if (FAILED(result)) { | ||
| 984 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [texture rtv]"), result); | ||
| 985 | goto done; | ||
| 986 | } | ||
| 987 | |||
| 988 | SDL_zero(descriptorHeapDesc); | ||
| 989 | descriptorHeapDesc.NumDescriptors = SDL_D3D12_MAX_NUM_TEXTURES; | ||
| 990 | descriptorHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; | ||
| 991 | descriptorHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; | ||
| 992 | result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice, | ||
| 993 | &descriptorHeapDesc, | ||
| 994 | D3D_GUID(SDL_IID_ID3D12DescriptorHeap), | ||
| 995 | (void **)&data->srvDescriptorHeap); | ||
| 996 | if (FAILED(result)) { | ||
| 997 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [srv]"), result); | ||
| 998 | goto done; | ||
| 999 | } | ||
| 1000 | rootDescriptorHeaps[0] = data->srvDescriptorHeap; | ||
| 1001 | data->srvDescriptorSize = ID3D12Device1_GetDescriptorHandleIncrementSize(d3dDevice, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); | ||
| 1002 | |||
| 1003 | SDL_zero(descriptorHeapDesc); | ||
| 1004 | descriptorHeapDesc.NumDescriptors = 4; | ||
| 1005 | descriptorHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER; | ||
| 1006 | descriptorHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; | ||
| 1007 | result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice, | ||
| 1008 | &descriptorHeapDesc, | ||
| 1009 | D3D_GUID(SDL_IID_ID3D12DescriptorHeap), | ||
| 1010 | (void **)&data->samplerDescriptorHeap); | ||
| 1011 | if (FAILED(result)) { | ||
| 1012 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [sampler]"), result); | ||
| 1013 | goto done; | ||
| 1014 | } | ||
| 1015 | rootDescriptorHeaps[1] = data->samplerDescriptorHeap; | ||
| 1016 | data->samplerDescriptorSize = ID3D12Device1_GetDescriptorHandleIncrementSize(d3dDevice, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); | ||
| 1017 | |||
| 1018 | // Create a command allocator for each back buffer | ||
| 1019 | for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) { | ||
| 1020 | result = ID3D12Device1_CreateCommandAllocator(data->d3dDevice, | ||
| 1021 | D3D12_COMMAND_LIST_TYPE_DIRECT, | ||
| 1022 | D3D_GUID(SDL_IID_ID3D12CommandAllocator), | ||
| 1023 | (void **)&data->commandAllocators[i]); | ||
| 1024 | if (FAILED(result)) { | ||
| 1025 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommandAllocator"), result); | ||
| 1026 | goto done; | ||
| 1027 | } | ||
| 1028 | } | ||
| 1029 | |||
| 1030 | // Create the command list | ||
| 1031 | result = ID3D12Device1_CreateCommandList(data->d3dDevice, | ||
| 1032 | 0, | ||
| 1033 | D3D12_COMMAND_LIST_TYPE_DIRECT, | ||
| 1034 | data->commandAllocators[0], | ||
| 1035 | NULL, | ||
| 1036 | D3D_GUID(SDL_IID_ID3D12GraphicsCommandList2), | ||
| 1037 | (void **)&data->commandList); | ||
| 1038 | if (FAILED(result)) { | ||
| 1039 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommandList"), result); | ||
| 1040 | goto done; | ||
| 1041 | } | ||
| 1042 | |||
| 1043 | // Set the descriptor heaps to the correct initial value | ||
| 1044 | ID3D12GraphicsCommandList2_SetDescriptorHeaps(data->commandList, 2, rootDescriptorHeaps); | ||
| 1045 | |||
| 1046 | // Create the fence and fence event | ||
| 1047 | result = ID3D12Device_CreateFence(data->d3dDevice, | ||
| 1048 | data->fenceValue, | ||
| 1049 | D3D12_FENCE_FLAG_NONE, | ||
| 1050 | D3D_GUID(SDL_IID_ID3D12Fence), | ||
| 1051 | (void **)&data->fence); | ||
| 1052 | if (FAILED(result)) { | ||
| 1053 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateFence"), result); | ||
| 1054 | goto done; | ||
| 1055 | } | ||
| 1056 | |||
| 1057 | data->fenceValue++; | ||
| 1058 | |||
| 1059 | data->fenceEvent = CreateEventExFunc(NULL, NULL, 0, EVENT_MODIFY_STATE | SYNCHRONIZE); | ||
| 1060 | if (!data->fenceEvent) { | ||
| 1061 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("CreateEventEx"), result); | ||
| 1062 | goto done; | ||
| 1063 | } | ||
| 1064 | |||
| 1065 | // Create all the root signatures | ||
| 1066 | for (i = 0; i < NUM_ROOTSIGS; ++i) { | ||
| 1067 | D3D12_SHADER_BYTECODE rootSigData; | ||
| 1068 | D3D12_GetRootSignatureData((D3D12_RootSignature)i, &rootSigData); | ||
| 1069 | result = ID3D12Device1_CreateRootSignature(data->d3dDevice, | ||
| 1070 | 0, | ||
| 1071 | rootSigData.pShaderBytecode, | ||
| 1072 | rootSigData.BytecodeLength, | ||
| 1073 | D3D_GUID(SDL_IID_ID3D12RootSignature), | ||
| 1074 | (void **)&data->rootSignatures[i]); | ||
| 1075 | if (FAILED(result)) { | ||
| 1076 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateRootSignature"), result); | ||
| 1077 | goto done; | ||
| 1078 | } | ||
| 1079 | } | ||
| 1080 | |||
| 1081 | { | ||
| 1082 | const SDL_BlendMode defaultBlendModes[] = { | ||
| 1083 | SDL_BLENDMODE_BLEND, | ||
| 1084 | }; | ||
| 1085 | const DXGI_FORMAT defaultRTVFormats[] = { | ||
| 1086 | DXGI_FORMAT_B8G8R8A8_UNORM, | ||
| 1087 | }; | ||
| 1088 | int j, k, l; | ||
| 1089 | |||
| 1090 | // Create a few default pipeline state objects, to verify that this renderer will work | ||
| 1091 | for (i = 0; i < NUM_SHADERS; ++i) { | ||
| 1092 | for (j = 0; j < SDL_arraysize(defaultBlendModes); ++j) { | ||
| 1093 | for (k = D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT; k < D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH; ++k) { | ||
| 1094 | for (l = 0; l < SDL_arraysize(defaultRTVFormats); ++l) { | ||
| 1095 | if (!D3D12_CreatePipelineState(renderer, (D3D12_Shader)i, defaultBlendModes[j], (D3D12_PRIMITIVE_TOPOLOGY_TYPE)k, defaultRTVFormats[l])) { | ||
| 1096 | // D3D12_CreatePipelineState will set the SDL error, if it fails | ||
| 1097 | result = E_FAIL; | ||
| 1098 | goto done; | ||
| 1099 | } | ||
| 1100 | } | ||
| 1101 | } | ||
| 1102 | } | ||
| 1103 | } | ||
| 1104 | } | ||
| 1105 | |||
| 1106 | // Create default vertex buffers | ||
| 1107 | for (i = 0; i < SDL_D3D12_NUM_VERTEX_BUFFERS; ++i) { | ||
| 1108 | D3D12_CreateVertexBuffer(data, i, D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT); | ||
| 1109 | } | ||
| 1110 | |||
| 1111 | // Create samplers to use when drawing textures: | ||
| 1112 | static struct | ||
| 1113 | { | ||
| 1114 | D3D12_FILTER filter; | ||
| 1115 | D3D12_TEXTURE_ADDRESS_MODE address; | ||
| 1116 | } samplerParams[] = { | ||
| 1117 | { D3D12_FILTER_MIN_MAG_MIP_POINT, D3D12_TEXTURE_ADDRESS_MODE_CLAMP }, | ||
| 1118 | { D3D12_FILTER_MIN_MAG_MIP_POINT, D3D12_TEXTURE_ADDRESS_MODE_WRAP }, | ||
| 1119 | { D3D12_FILTER_MIN_MAG_MIP_LINEAR, D3D12_TEXTURE_ADDRESS_MODE_CLAMP }, | ||
| 1120 | { D3D12_FILTER_MIN_MAG_MIP_LINEAR, D3D12_TEXTURE_ADDRESS_MODE_WRAP }, | ||
| 1121 | }; | ||
| 1122 | SDL_COMPILE_TIME_ASSERT(samplerParams_SIZE, SDL_arraysize(samplerParams) == D3D12_SAMPLER_COUNT); | ||
| 1123 | SDL_zero(samplerDesc); | ||
| 1124 | samplerDesc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; | ||
| 1125 | samplerDesc.MipLODBias = 0.0f; | ||
| 1126 | samplerDesc.MaxAnisotropy = 1; | ||
| 1127 | samplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; | ||
| 1128 | samplerDesc.MinLOD = 0.0f; | ||
| 1129 | samplerDesc.MaxLOD = D3D12_FLOAT32_MAX; | ||
| 1130 | D3D_CALL_RET(data->samplerDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &data->samplers[0]); | ||
| 1131 | for (i = 0; i < SDL_arraysize(samplerParams); ++i) { | ||
| 1132 | samplerDesc.Filter = samplerParams[i].filter; | ||
| 1133 | samplerDesc.AddressU = samplerParams[i].address; | ||
| 1134 | samplerDesc.AddressV = samplerParams[i].address; | ||
| 1135 | data->samplers[i].ptr = data->samplers[0].ptr + i * data->samplerDescriptorSize; | ||
| 1136 | ID3D12Device1_CreateSampler(data->d3dDevice, &samplerDesc, data->samplers[i]); | ||
| 1137 | } | ||
| 1138 | |||
| 1139 | // Initialize the pool allocator for SRVs | ||
| 1140 | for (i = 0; i < SDL_D3D12_MAX_NUM_TEXTURES; ++i) { | ||
| 1141 | data->srvPoolNodes[i].index = (SIZE_T)i; | ||
| 1142 | if (i != SDL_D3D12_MAX_NUM_TEXTURES - 1) { | ||
| 1143 | data->srvPoolNodes[i].next = &data->srvPoolNodes[i + 1]; | ||
| 1144 | } | ||
| 1145 | } | ||
| 1146 | data->srvPoolHead = &data->srvPoolNodes[0]; | ||
| 1147 | |||
| 1148 | SDL_PropertiesID props = SDL_GetRendererProperties(renderer); | ||
| 1149 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_DEVICE_POINTER, data->d3dDevice); | ||
| 1150 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER, data->commandQueue); | ||
| 1151 | |||
| 1152 | done: | ||
| 1153 | D3D_SAFE_RELEASE(d3dDevice); | ||
| 1154 | return result; | ||
| 1155 | } | ||
| 1156 | |||
| 1157 | static DXGI_MODE_ROTATION D3D12_GetCurrentRotation(void) | ||
| 1158 | { | ||
| 1159 | // FIXME | ||
| 1160 | return DXGI_MODE_ROTATION_IDENTITY; | ||
| 1161 | } | ||
| 1162 | |||
| 1163 | static BOOL D3D12_IsDisplayRotated90Degrees(DXGI_MODE_ROTATION rotation) | ||
| 1164 | { | ||
| 1165 | switch (rotation) { | ||
| 1166 | case DXGI_MODE_ROTATION_ROTATE90: | ||
| 1167 | case DXGI_MODE_ROTATION_ROTATE270: | ||
| 1168 | return TRUE; | ||
| 1169 | default: | ||
| 1170 | return FALSE; | ||
| 1171 | } | ||
| 1172 | } | ||
| 1173 | |||
| 1174 | static int D3D12_GetRotationForCurrentRenderTarget(SDL_Renderer *renderer) | ||
| 1175 | { | ||
| 1176 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 1177 | if (data->textureRenderTarget) { | ||
| 1178 | return DXGI_MODE_ROTATION_IDENTITY; | ||
| 1179 | } else { | ||
| 1180 | return data->rotation; | ||
| 1181 | } | ||
| 1182 | } | ||
| 1183 | |||
| 1184 | static bool D3D12_GetViewportAlignedD3DRect(SDL_Renderer *renderer, const SDL_Rect *sdlRect, D3D12_RECT *outRect, BOOL includeViewportOffset) | ||
| 1185 | { | ||
| 1186 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 1187 | const int rotation = D3D12_GetRotationForCurrentRenderTarget(renderer); | ||
| 1188 | const SDL_Rect *viewport = &data->currentViewport; | ||
| 1189 | |||
| 1190 | switch (rotation) { | ||
| 1191 | case DXGI_MODE_ROTATION_IDENTITY: | ||
| 1192 | outRect->left = sdlRect->x; | ||
| 1193 | outRect->right = (LONG)sdlRect->x + sdlRect->w; | ||
| 1194 | outRect->top = sdlRect->y; | ||
| 1195 | outRect->bottom = (LONG)sdlRect->y + sdlRect->h; | ||
| 1196 | if (includeViewportOffset) { | ||
| 1197 | outRect->left += viewport->x; | ||
| 1198 | outRect->right += viewport->x; | ||
| 1199 | outRect->top += viewport->y; | ||
| 1200 | outRect->bottom += viewport->y; | ||
| 1201 | } | ||
| 1202 | break; | ||
| 1203 | case DXGI_MODE_ROTATION_ROTATE270: | ||
| 1204 | outRect->left = sdlRect->y; | ||
| 1205 | outRect->right = (LONG)sdlRect->y + sdlRect->h; | ||
| 1206 | outRect->top = viewport->w - sdlRect->x - sdlRect->w; | ||
| 1207 | outRect->bottom = viewport->w - sdlRect->x; | ||
| 1208 | break; | ||
| 1209 | case DXGI_MODE_ROTATION_ROTATE180: | ||
| 1210 | outRect->left = viewport->w - sdlRect->x - sdlRect->w; | ||
| 1211 | outRect->right = viewport->w - sdlRect->x; | ||
| 1212 | outRect->top = viewport->h - sdlRect->y - sdlRect->h; | ||
| 1213 | outRect->bottom = viewport->h - sdlRect->y; | ||
| 1214 | break; | ||
| 1215 | case DXGI_MODE_ROTATION_ROTATE90: | ||
| 1216 | outRect->left = viewport->h - sdlRect->y - sdlRect->h; | ||
| 1217 | outRect->right = viewport->h - sdlRect->y; | ||
| 1218 | outRect->top = sdlRect->x; | ||
| 1219 | outRect->bottom = (LONG)sdlRect->x + sdlRect->h; | ||
| 1220 | break; | ||
| 1221 | default: | ||
| 1222 | return SDL_SetError("The physical display is in an unknown or unsupported rotation"); | ||
| 1223 | } | ||
| 1224 | return true; | ||
| 1225 | } | ||
| 1226 | |||
| 1227 | #if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1228 | static HRESULT D3D12_CreateSwapChain(SDL_Renderer *renderer, int w, int h) | ||
| 1229 | { | ||
| 1230 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 1231 | IDXGISwapChain1 *swapChain = NULL; | ||
| 1232 | HRESULT result = S_OK; | ||
| 1233 | |||
| 1234 | // Create a swap chain using the same adapter as the existing Direct3D device. | ||
| 1235 | DXGI_SWAP_CHAIN_DESC1 swapChainDesc; | ||
| 1236 | SDL_zero(swapChainDesc); | ||
| 1237 | swapChainDesc.Width = w; | ||
| 1238 | swapChainDesc.Height = h; | ||
| 1239 | switch (renderer->output_colorspace) { | ||
| 1240 | case SDL_COLORSPACE_SRGB_LINEAR: | ||
| 1241 | swapChainDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 1242 | data->renderTargetFormat = DXGI_FORMAT_R16G16B16A16_FLOAT; | ||
| 1243 | break; | ||
| 1244 | case SDL_COLORSPACE_HDR10: | ||
| 1245 | swapChainDesc.Format = DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 1246 | data->renderTargetFormat = DXGI_FORMAT_R10G10B10A2_UNORM; | ||
| 1247 | break; | ||
| 1248 | default: | ||
| 1249 | swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format. | ||
| 1250 | data->renderTargetFormat = DXGI_FORMAT_B8G8R8A8_UNORM; | ||
| 1251 | break; | ||
| 1252 | } | ||
| 1253 | swapChainDesc.Stereo = FALSE; | ||
| 1254 | swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling. | ||
| 1255 | swapChainDesc.SampleDesc.Quality = 0; | ||
| 1256 | swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; | ||
| 1257 | swapChainDesc.BufferCount = 2; // Use double-buffering to minimize latency. | ||
| 1258 | if (WIN_IsWindows8OrGreater()) { | ||
| 1259 | swapChainDesc.Scaling = DXGI_SCALING_NONE; | ||
| 1260 | } else { | ||
| 1261 | swapChainDesc.Scaling = DXGI_SCALING_STRETCH; | ||
| 1262 | } | ||
| 1263 | swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Windows Store apps must use this SwapEffect. | ||
| 1264 | swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT | // To support SetMaximumFrameLatency | ||
| 1265 | DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING; // To support presenting with allow tearing on | ||
| 1266 | |||
| 1267 | HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); | ||
| 1268 | if (!hwnd) { | ||
| 1269 | SDL_SetError("Couldn't get window handle"); | ||
| 1270 | result = E_FAIL; | ||
| 1271 | goto done; | ||
| 1272 | } | ||
| 1273 | |||
| 1274 | result = IDXGIFactory2_CreateSwapChainForHwnd(data->dxgiFactory, | ||
| 1275 | (IUnknown *)data->commandQueue, | ||
| 1276 | hwnd, | ||
| 1277 | &swapChainDesc, | ||
| 1278 | NULL, | ||
| 1279 | NULL, // Allow on all displays. | ||
| 1280 | &swapChain); | ||
| 1281 | if (FAILED(result)) { | ||
| 1282 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIFactory2::CreateSwapChainForHwnd"), result); | ||
| 1283 | goto done; | ||
| 1284 | } | ||
| 1285 | |||
| 1286 | IDXGIFactory6_MakeWindowAssociation(data->dxgiFactory, hwnd, DXGI_MWA_NO_WINDOW_CHANGES); | ||
| 1287 | |||
| 1288 | result = IDXGISwapChain1_QueryInterface(swapChain, D3D_GUID(SDL_IID_IDXGISwapChain4), (void **)&data->swapChain); | ||
| 1289 | if (FAILED(result)) { | ||
| 1290 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain1::QueryInterface"), result); | ||
| 1291 | goto done; | ||
| 1292 | } | ||
| 1293 | |||
| 1294 | /* Ensure that the swapchain does not queue more than one frame at a time. This both reduces latency | ||
| 1295 | * and ensures that the application will only render after each VSync, minimizing power consumption. | ||
| 1296 | */ | ||
| 1297 | result = IDXGISwapChain4_SetMaximumFrameLatency(data->swapChain, 1); | ||
| 1298 | if (FAILED(result)) { | ||
| 1299 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::SetMaximumFrameLatency"), result); | ||
| 1300 | goto done; | ||
| 1301 | } | ||
| 1302 | |||
| 1303 | data->swapEffect = swapChainDesc.SwapEffect; | ||
| 1304 | data->swapFlags = swapChainDesc.Flags; | ||
| 1305 | |||
| 1306 | UINT colorspace_support = 0; | ||
| 1307 | DXGI_COLOR_SPACE_TYPE colorspace; | ||
| 1308 | switch (renderer->output_colorspace) { | ||
| 1309 | case SDL_COLORSPACE_SRGB_LINEAR: | ||
| 1310 | colorspace = DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709; | ||
| 1311 | break; | ||
| 1312 | case SDL_COLORSPACE_HDR10: | ||
| 1313 | colorspace = DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; | ||
| 1314 | break; | ||
| 1315 | default: | ||
| 1316 | // sRGB | ||
| 1317 | colorspace = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; | ||
| 1318 | break; | ||
| 1319 | } | ||
| 1320 | if (SUCCEEDED(IDXGISwapChain3_CheckColorSpaceSupport(data->swapChain, colorspace, &colorspace_support)) && | ||
| 1321 | (colorspace_support & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT)) { | ||
| 1322 | result = IDXGISwapChain3_SetColorSpace1(data->swapChain, colorspace); | ||
| 1323 | if (FAILED(result)) { | ||
| 1324 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain3::SetColorSpace1"), result); | ||
| 1325 | goto done; | ||
| 1326 | } | ||
| 1327 | } else { | ||
| 1328 | // Not the default, we're not going to be able to present in this colorspace | ||
| 1329 | SDL_SetError("Unsupported output colorspace"); | ||
| 1330 | result = DXGI_ERROR_UNSUPPORTED; | ||
| 1331 | } | ||
| 1332 | |||
| 1333 | SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER, data->swapChain); | ||
| 1334 | |||
| 1335 | done: | ||
| 1336 | D3D_SAFE_RELEASE(swapChain); | ||
| 1337 | return result; | ||
| 1338 | } | ||
| 1339 | #endif | ||
| 1340 | |||
| 1341 | // Initialize all resources that change when the window's size changes. | ||
| 1342 | static HRESULT D3D12_CreateWindowSizeDependentResources(SDL_Renderer *renderer) | ||
| 1343 | { | ||
| 1344 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 1345 | HRESULT result = S_OK; | ||
| 1346 | int i, w, h; | ||
| 1347 | |||
| 1348 | D3D12_RENDER_TARGET_VIEW_DESC rtvDesc; | ||
| 1349 | D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor; | ||
| 1350 | |||
| 1351 | // Release resources in the current command list | ||
| 1352 | D3D12_IssueBatch(data); | ||
| 1353 | ID3D12GraphicsCommandList2_OMSetRenderTargets(data->commandList, 0, NULL, FALSE, NULL); | ||
| 1354 | |||
| 1355 | // Release render targets | ||
| 1356 | for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) { | ||
| 1357 | D3D_SAFE_RELEASE(data->renderTargets[i]); | ||
| 1358 | } | ||
| 1359 | |||
| 1360 | /* The width and height of the swap chain must be based on the display's | ||
| 1361 | * non-rotated size. | ||
| 1362 | */ | ||
| 1363 | SDL_GetWindowSizeInPixels(renderer->window, &w, &h); | ||
| 1364 | data->rotation = D3D12_GetCurrentRotation(); | ||
| 1365 | if (D3D12_IsDisplayRotated90Degrees(data->rotation)) { | ||
| 1366 | int tmp = w; | ||
| 1367 | w = h; | ||
| 1368 | h = tmp; | ||
| 1369 | } | ||
| 1370 | |||
| 1371 | #if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1372 | if (data->swapChain) { | ||
| 1373 | // If the swap chain already exists, resize it. | ||
| 1374 | result = IDXGISwapChain_ResizeBuffers(data->swapChain, | ||
| 1375 | 0, | ||
| 1376 | w, h, | ||
| 1377 | DXGI_FORMAT_UNKNOWN, | ||
| 1378 | data->swapFlags); | ||
| 1379 | if (FAILED(result)) { | ||
| 1380 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::ResizeBuffers"), result); | ||
| 1381 | goto done; | ||
| 1382 | } | ||
| 1383 | } else { | ||
| 1384 | result = D3D12_CreateSwapChain(renderer, w, h); | ||
| 1385 | if (FAILED(result) || !data->swapChain) { | ||
| 1386 | goto done; | ||
| 1387 | } | ||
| 1388 | } | ||
| 1389 | |||
| 1390 | // Set the proper rotation for the swap chain. | ||
| 1391 | if (WIN_IsWindows8OrGreater()) { | ||
| 1392 | if (data->swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) { | ||
| 1393 | result = IDXGISwapChain4_SetRotation(data->swapChain, data->rotation); // NOLINT(clang-analyzer-core.NullDereference) | ||
| 1394 | if (FAILED(result)) { | ||
| 1395 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::SetRotation"), result); | ||
| 1396 | goto done; | ||
| 1397 | } | ||
| 1398 | } | ||
| 1399 | } | ||
| 1400 | #endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1401 | |||
| 1402 | // Get each back buffer render target and create render target views | ||
| 1403 | for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) { | ||
| 1404 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1405 | result = D3D12_XBOX_CreateBackBufferTarget(data->d3dDevice, renderer->window->w, renderer->window->h, (void **)&data->renderTargets[i]); | ||
| 1406 | if (FAILED(result)) { | ||
| 1407 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D12_XBOX_CreateBackBufferTarget"), result); | ||
| 1408 | goto done; | ||
| 1409 | } | ||
| 1410 | #else | ||
| 1411 | result = IDXGISwapChain4_GetBuffer(data->swapChain, // NOLINT(clang-analyzer-core.NullDereference) | ||
| 1412 | i, | ||
| 1413 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 1414 | (void **)&data->renderTargets[i]); | ||
| 1415 | if (FAILED(result)) { | ||
| 1416 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::GetBuffer"), result); | ||
| 1417 | goto done; | ||
| 1418 | } | ||
| 1419 | #endif | ||
| 1420 | |||
| 1421 | SDL_zero(rtvDesc); | ||
| 1422 | rtvDesc.Format = data->renderTargetFormat; | ||
| 1423 | rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; | ||
| 1424 | |||
| 1425 | SDL_zero(rtvDescriptor); | ||
| 1426 | D3D_CALL_RET(data->rtvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &rtvDescriptor); | ||
| 1427 | rtvDescriptor.ptr += i * data->rtvDescriptorSize; | ||
| 1428 | ID3D12Device1_CreateRenderTargetView(data->d3dDevice, data->renderTargets[i], &rtvDesc, rtvDescriptor); | ||
| 1429 | } | ||
| 1430 | |||
| 1431 | // Set back buffer index to current buffer | ||
| 1432 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1433 | data->currentBackBufferIndex = 0; | ||
| 1434 | #else | ||
| 1435 | data->currentBackBufferIndex = IDXGISwapChain4_GetCurrentBackBufferIndex(data->swapChain); | ||
| 1436 | #endif | ||
| 1437 | |||
| 1438 | /* Set the swap chain target immediately, so that a target is always set | ||
| 1439 | * even before we get to SetDrawState. Without this it's possible to hit | ||
| 1440 | * null references in places like ReadPixels! | ||
| 1441 | */ | ||
| 1442 | data->currentRenderTargetView = D3D12_GetCurrentRenderTargetView(renderer); | ||
| 1443 | ID3D12GraphicsCommandList2_OMSetRenderTargets(data->commandList, 1, &data->currentRenderTargetView, FALSE, NULL); | ||
| 1444 | D3D12_TransitionResource(data, | ||
| 1445 | data->renderTargets[data->currentBackBufferIndex], | ||
| 1446 | D3D12_RESOURCE_STATE_PRESENT, | ||
| 1447 | D3D12_RESOURCE_STATE_RENDER_TARGET); | ||
| 1448 | |||
| 1449 | data->viewportDirty = true; | ||
| 1450 | |||
| 1451 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1452 | D3D12_XBOX_StartFrame(data->d3dDevice, &data->frameToken); | ||
| 1453 | #endif | ||
| 1454 | |||
| 1455 | done: | ||
| 1456 | return result; | ||
| 1457 | } | ||
| 1458 | |||
| 1459 | static bool D3D12_HandleDeviceLost(SDL_Renderer *renderer) | ||
| 1460 | { | ||
| 1461 | bool recovered = false; | ||
| 1462 | |||
| 1463 | D3D12_ReleaseAll(renderer); | ||
| 1464 | |||
| 1465 | if (SUCCEEDED(D3D12_CreateDeviceResources(renderer)) && | ||
| 1466 | SUCCEEDED(D3D12_CreateWindowSizeDependentResources(renderer))) { | ||
| 1467 | recovered = true; | ||
| 1468 | } else { | ||
| 1469 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Renderer couldn't recover from device lost: %s", SDL_GetError()); | ||
| 1470 | D3D12_ReleaseAll(renderer); | ||
| 1471 | } | ||
| 1472 | |||
| 1473 | // Let the application know that the device has been reset or lost | ||
| 1474 | SDL_Event event; | ||
| 1475 | SDL_zero(event); | ||
| 1476 | event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST; | ||
| 1477 | event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer)); | ||
| 1478 | SDL_PushEvent(&event); | ||
| 1479 | |||
| 1480 | return recovered; | ||
| 1481 | } | ||
| 1482 | |||
| 1483 | // This method is called when the window's size changes. | ||
| 1484 | static HRESULT D3D12_UpdateForWindowSizeChange(SDL_Renderer *renderer) | ||
| 1485 | { | ||
| 1486 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 1487 | // If the GPU has previous work, wait for it to be done first | ||
| 1488 | D3D12_WaitForGPU(data); | ||
| 1489 | return D3D12_CreateWindowSizeDependentResources(renderer); | ||
| 1490 | } | ||
| 1491 | |||
| 1492 | static void D3D12_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 1493 | { | ||
| 1494 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 1495 | |||
| 1496 | if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) { | ||
| 1497 | data->pixelSizeChanged = true; | ||
| 1498 | } | ||
| 1499 | } | ||
| 1500 | |||
| 1501 | static bool D3D12_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 1502 | { | ||
| 1503 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 1504 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 1505 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 1506 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 1507 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 1508 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 1509 | |||
| 1510 | if (!GetBlendFunc(srcColorFactor) || !GetBlendFunc(srcAlphaFactor) || | ||
| 1511 | !GetBlendEquation(colorOperation) || | ||
| 1512 | !GetBlendFunc(dstColorFactor) || !GetBlendFunc(dstAlphaFactor) || | ||
| 1513 | !GetBlendEquation(alphaOperation)) { | ||
| 1514 | return false; | ||
| 1515 | } | ||
| 1516 | return true; | ||
| 1517 | } | ||
| 1518 | |||
| 1519 | static SIZE_T D3D12_GetAvailableSRVIndex(SDL_Renderer *renderer) | ||
| 1520 | { | ||
| 1521 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 1522 | if (rendererData->srvPoolHead) { | ||
| 1523 | SIZE_T index = rendererData->srvPoolHead->index; | ||
| 1524 | rendererData->srvPoolHead = (D3D12_SRVPoolNode *)(rendererData->srvPoolHead->next); | ||
| 1525 | return index; | ||
| 1526 | } else { | ||
| 1527 | SDL_SetError("[d3d12] Cannot allocate more than %d textures!", SDL_D3D12_MAX_NUM_TEXTURES); | ||
| 1528 | return SDL_D3D12_MAX_NUM_TEXTURES + 1; | ||
| 1529 | } | ||
| 1530 | } | ||
| 1531 | |||
| 1532 | static void D3D12_FreeSRVIndex(SDL_Renderer *renderer, SIZE_T index) | ||
| 1533 | { | ||
| 1534 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 1535 | rendererData->srvPoolNodes[index].next = rendererData->srvPoolHead; | ||
| 1536 | rendererData->srvPoolHead = &rendererData->srvPoolNodes[index]; | ||
| 1537 | } | ||
| 1538 | |||
| 1539 | static bool GetTextureProperty(SDL_PropertiesID props, const char *name, ID3D12Resource **texture) | ||
| 1540 | { | ||
| 1541 | IUnknown *unknown = (IUnknown*)SDL_GetPointerProperty(props, name, NULL); | ||
| 1542 | if (unknown) { | ||
| 1543 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 1544 | HRESULT result = unknown->QueryInterface(D3D_GUID(SDL_IID_ID3D12Resource), (void **)texture); | ||
| 1545 | #else | ||
| 1546 | HRESULT result = IUnknown_QueryInterface(unknown, D3D_GUID(SDL_IID_ID3D12Resource), (void **)texture); | ||
| 1547 | #endif | ||
| 1548 | if (FAILED(result)) { | ||
| 1549 | return WIN_SetErrorFromHRESULT(name, result); | ||
| 1550 | } | ||
| 1551 | } | ||
| 1552 | return true; | ||
| 1553 | } | ||
| 1554 | |||
| 1555 | static bool D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 1556 | { | ||
| 1557 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 1558 | D3D12_TextureData *textureData; | ||
| 1559 | HRESULT result; | ||
| 1560 | DXGI_FORMAT textureFormat = SDLPixelFormatToDXGITextureFormat(texture->format, renderer->output_colorspace); | ||
| 1561 | D3D12_RESOURCE_DESC textureDesc; | ||
| 1562 | D3D12_HEAP_PROPERTIES heapProps; | ||
| 1563 | D3D12_SHADER_RESOURCE_VIEW_DESC resourceViewDesc; | ||
| 1564 | |||
| 1565 | if (!rendererData->d3dDevice) { | ||
| 1566 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 1567 | } | ||
| 1568 | |||
| 1569 | if (textureFormat == DXGI_FORMAT_UNKNOWN) { | ||
| 1570 | return SDL_SetError("%s, An unsupported SDL pixel format (0x%x) was specified", __FUNCTION__, texture->format); | ||
| 1571 | } | ||
| 1572 | |||
| 1573 | textureData = (D3D12_TextureData *)SDL_calloc(1, sizeof(*textureData)); | ||
| 1574 | if (!textureData) { | ||
| 1575 | return false; | ||
| 1576 | } | ||
| 1577 | textureData->scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? D3D12_FILTER_MIN_MAG_MIP_POINT : D3D12_FILTER_MIN_MAG_MIP_LINEAR; | ||
| 1578 | |||
| 1579 | texture->internal = textureData; | ||
| 1580 | textureData->mainTextureFormat = textureFormat; | ||
| 1581 | |||
| 1582 | SDL_zero(textureDesc); | ||
| 1583 | textureDesc.Width = texture->w; | ||
| 1584 | textureDesc.Height = texture->h; | ||
| 1585 | textureDesc.MipLevels = 1; | ||
| 1586 | textureDesc.DepthOrArraySize = 1; | ||
| 1587 | textureDesc.Format = textureFormat; | ||
| 1588 | textureDesc.SampleDesc.Count = 1; | ||
| 1589 | textureDesc.SampleDesc.Quality = 0; | ||
| 1590 | textureDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; | ||
| 1591 | textureDesc.Flags = D3D12_RESOURCE_FLAG_NONE; | ||
| 1592 | |||
| 1593 | // NV12 textures must have even width and height | ||
| 1594 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 1595 | texture->format == SDL_PIXELFORMAT_NV21 || | ||
| 1596 | texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1597 | textureDesc.Width = (textureDesc.Width + 1) & ~1; | ||
| 1598 | textureDesc.Height = (textureDesc.Height + 1) & ~1; | ||
| 1599 | } | ||
| 1600 | textureData->w = (int)textureDesc.Width; | ||
| 1601 | textureData->h = (int)textureDesc.Height; | ||
| 1602 | if (SDL_COLORSPACETRANSFER(texture->colorspace) == SDL_TRANSFER_CHARACTERISTICS_SRGB) { | ||
| 1603 | textureData->shader = SHADER_RGB; | ||
| 1604 | } else { | ||
| 1605 | textureData->shader = SHADER_ADVANCED; | ||
| 1606 | } | ||
| 1607 | |||
| 1608 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 1609 | textureDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; | ||
| 1610 | } | ||
| 1611 | |||
| 1612 | SDL_zero(heapProps); | ||
| 1613 | heapProps.Type = D3D12_HEAP_TYPE_DEFAULT; | ||
| 1614 | heapProps.CreationNodeMask = 1; | ||
| 1615 | heapProps.VisibleNodeMask = 1; | ||
| 1616 | |||
| 1617 | if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER, &textureData->mainTexture)) { | ||
| 1618 | return false; | ||
| 1619 | } | ||
| 1620 | if (!textureData->mainTexture) { | ||
| 1621 | result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice, | ||
| 1622 | &heapProps, | ||
| 1623 | D3D12_HEAP_FLAG_NONE, | ||
| 1624 | &textureDesc, | ||
| 1625 | D3D12_RESOURCE_STATE_COPY_DEST, | ||
| 1626 | NULL, | ||
| 1627 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 1628 | (void **)&textureData->mainTexture); | ||
| 1629 | if (FAILED(result)) { | ||
| 1630 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [texture]"), result); | ||
| 1631 | } | ||
| 1632 | } | ||
| 1633 | textureData->mainResourceState = D3D12_RESOURCE_STATE_COPY_DEST; | ||
| 1634 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER, textureData->mainTexture); | ||
| 1635 | #ifdef SDL_HAVE_YUV | ||
| 1636 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 1637 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 1638 | textureData->yuv = true; | ||
| 1639 | |||
| 1640 | textureDesc.Width = (textureDesc.Width + 1) / 2; | ||
| 1641 | textureDesc.Height = (textureDesc.Height + 1) / 2; | ||
| 1642 | |||
| 1643 | if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER, &textureData->mainTextureU)) { | ||
| 1644 | return false; | ||
| 1645 | } | ||
| 1646 | if (!textureData->mainTextureU) { | ||
| 1647 | result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice, | ||
| 1648 | &heapProps, | ||
| 1649 | D3D12_HEAP_FLAG_NONE, | ||
| 1650 | &textureDesc, | ||
| 1651 | D3D12_RESOURCE_STATE_COPY_DEST, | ||
| 1652 | NULL, | ||
| 1653 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 1654 | (void **)&textureData->mainTextureU); | ||
| 1655 | if (FAILED(result)) { | ||
| 1656 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [texture]"), result); | ||
| 1657 | } | ||
| 1658 | } | ||
| 1659 | textureData->mainResourceStateU = D3D12_RESOURCE_STATE_COPY_DEST; | ||
| 1660 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER, textureData->mainTextureU); | ||
| 1661 | |||
| 1662 | if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER, &textureData->mainTextureV)) { | ||
| 1663 | return false; | ||
| 1664 | } | ||
| 1665 | if (!textureData->mainTextureV) { | ||
| 1666 | result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice, | ||
| 1667 | &heapProps, | ||
| 1668 | D3D12_HEAP_FLAG_NONE, | ||
| 1669 | &textureDesc, | ||
| 1670 | D3D12_RESOURCE_STATE_COPY_DEST, | ||
| 1671 | NULL, | ||
| 1672 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 1673 | (void **)&textureData->mainTextureV); | ||
| 1674 | if (FAILED(result)) { | ||
| 1675 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [texture]"), result); | ||
| 1676 | } | ||
| 1677 | } | ||
| 1678 | textureData->mainResourceStateV = D3D12_RESOURCE_STATE_COPY_DEST; | ||
| 1679 | SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER, textureData->mainTextureV); | ||
| 1680 | |||
| 1681 | textureData->YCbCr_matrix = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8); | ||
| 1682 | if (!textureData->YCbCr_matrix) { | ||
| 1683 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 1684 | } | ||
| 1685 | } | ||
| 1686 | |||
| 1687 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 1688 | texture->format == SDL_PIXELFORMAT_NV21 || | ||
| 1689 | texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1690 | int bits_per_pixel; | ||
| 1691 | |||
| 1692 | textureData->nv12 = true; | ||
| 1693 | |||
| 1694 | switch (texture->format) { | ||
| 1695 | case SDL_PIXELFORMAT_P010: | ||
| 1696 | bits_per_pixel = 10; | ||
| 1697 | break; | ||
| 1698 | default: | ||
| 1699 | bits_per_pixel = 8; | ||
| 1700 | break; | ||
| 1701 | } | ||
| 1702 | textureData->YCbCr_matrix = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, bits_per_pixel); | ||
| 1703 | if (!textureData->YCbCr_matrix) { | ||
| 1704 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 1705 | } | ||
| 1706 | } | ||
| 1707 | #endif // SDL_HAVE_YUV | ||
| 1708 | SDL_zero(resourceViewDesc); | ||
| 1709 | resourceViewDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; | ||
| 1710 | resourceViewDesc.Format = SDLPixelFormatToDXGIMainResourceViewFormat(texture->format, renderer->output_colorspace); | ||
| 1711 | resourceViewDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; | ||
| 1712 | resourceViewDesc.Texture2D.MipLevels = textureDesc.MipLevels; | ||
| 1713 | |||
| 1714 | textureData->mainSRVIndex = D3D12_GetAvailableSRVIndex(renderer); | ||
| 1715 | D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceView); | ||
| 1716 | textureData->mainTextureResourceView.ptr += textureData->mainSRVIndex * rendererData->srvDescriptorSize; | ||
| 1717 | |||
| 1718 | ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1719 | textureData->mainTexture, | ||
| 1720 | &resourceViewDesc, | ||
| 1721 | textureData->mainTextureResourceView); | ||
| 1722 | #ifdef SDL_HAVE_YUV | ||
| 1723 | if (textureData->yuv) { | ||
| 1724 | D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewU); | ||
| 1725 | textureData->mainSRVIndexU = D3D12_GetAvailableSRVIndex(renderer); | ||
| 1726 | textureData->mainTextureResourceViewU.ptr += textureData->mainSRVIndexU * rendererData->srvDescriptorSize; | ||
| 1727 | ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1728 | textureData->mainTextureU, | ||
| 1729 | &resourceViewDesc, | ||
| 1730 | textureData->mainTextureResourceViewU); | ||
| 1731 | |||
| 1732 | D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewV); | ||
| 1733 | textureData->mainSRVIndexV = D3D12_GetAvailableSRVIndex(renderer); | ||
| 1734 | textureData->mainTextureResourceViewV.ptr += textureData->mainSRVIndexV * rendererData->srvDescriptorSize; | ||
| 1735 | ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1736 | textureData->mainTextureV, | ||
| 1737 | &resourceViewDesc, | ||
| 1738 | textureData->mainTextureResourceViewV); | ||
| 1739 | } | ||
| 1740 | |||
| 1741 | if (textureData->nv12) { | ||
| 1742 | D3D12_SHADER_RESOURCE_VIEW_DESC nvResourceViewDesc = resourceViewDesc; | ||
| 1743 | |||
| 1744 | if (texture->format == SDL_PIXELFORMAT_NV12 || texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 1745 | nvResourceViewDesc.Format = DXGI_FORMAT_R8G8_UNORM; | ||
| 1746 | } else if (texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1747 | nvResourceViewDesc.Format = DXGI_FORMAT_R16G16_UNORM; | ||
| 1748 | } | ||
| 1749 | nvResourceViewDesc.Texture2D.PlaneSlice = 1; | ||
| 1750 | |||
| 1751 | D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewNV); | ||
| 1752 | textureData->mainSRVIndexNV = D3D12_GetAvailableSRVIndex(renderer); | ||
| 1753 | textureData->mainTextureResourceViewNV.ptr += textureData->mainSRVIndexNV * rendererData->srvDescriptorSize; | ||
| 1754 | ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice, | ||
| 1755 | textureData->mainTexture, | ||
| 1756 | &nvResourceViewDesc, | ||
| 1757 | textureData->mainTextureResourceViewNV); | ||
| 1758 | } | ||
| 1759 | #endif // SDL_HAVE_YUV | ||
| 1760 | |||
| 1761 | if (texture->access & SDL_TEXTUREACCESS_TARGET) { | ||
| 1762 | D3D12_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; | ||
| 1763 | SDL_zero(renderTargetViewDesc); | ||
| 1764 | renderTargetViewDesc.Format = textureDesc.Format; | ||
| 1765 | renderTargetViewDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; | ||
| 1766 | renderTargetViewDesc.Texture2D.MipSlice = 0; | ||
| 1767 | |||
| 1768 | D3D_CALL_RET(rendererData->textureRTVDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureRenderTargetView); | ||
| 1769 | textureData->mainTextureRenderTargetView.ptr += textureData->mainSRVIndex * rendererData->rtvDescriptorSize; | ||
| 1770 | |||
| 1771 | ID3D12Device1_CreateRenderTargetView(rendererData->d3dDevice, | ||
| 1772 | (ID3D12Resource *)textureData->mainTexture, | ||
| 1773 | &renderTargetViewDesc, | ||
| 1774 | textureData->mainTextureRenderTargetView); | ||
| 1775 | } | ||
| 1776 | |||
| 1777 | return true; | ||
| 1778 | } | ||
| 1779 | |||
| 1780 | static void D3D12_DestroyTexture(SDL_Renderer *renderer, | ||
| 1781 | SDL_Texture *texture) | ||
| 1782 | { | ||
| 1783 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 1784 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 1785 | |||
| 1786 | if (!textureData) { | ||
| 1787 | return; | ||
| 1788 | } | ||
| 1789 | |||
| 1790 | /* Because SDL_DestroyTexture might be called while the data is in-flight, we need to issue the batch first | ||
| 1791 | Unfortunately, this means that deleting a lot of textures mid-frame will have poor performance. */ | ||
| 1792 | D3D12_IssueBatch(rendererData); | ||
| 1793 | |||
| 1794 | D3D_SAFE_RELEASE(textureData->mainTexture); | ||
| 1795 | D3D_SAFE_RELEASE(textureData->stagingBuffer); | ||
| 1796 | D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndex); | ||
| 1797 | #ifdef SDL_HAVE_YUV | ||
| 1798 | D3D_SAFE_RELEASE(textureData->mainTextureU); | ||
| 1799 | D3D_SAFE_RELEASE(textureData->mainTextureV); | ||
| 1800 | if (textureData->yuv) { | ||
| 1801 | D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexU); | ||
| 1802 | D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexV); | ||
| 1803 | } | ||
| 1804 | if (textureData->nv12) { | ||
| 1805 | D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexNV); | ||
| 1806 | } | ||
| 1807 | SDL_free(textureData->pixels); | ||
| 1808 | #endif | ||
| 1809 | SDL_free(textureData); | ||
| 1810 | texture->internal = NULL; | ||
| 1811 | } | ||
| 1812 | |||
| 1813 | static bool D3D12_UpdateTextureInternal(D3D12_RenderData *rendererData, ID3D12Resource *texture, int plane, int x, int y, int w, int h, const void *pixels, int pitch, D3D12_RESOURCE_STATES *resourceState) | ||
| 1814 | { | ||
| 1815 | const Uint8 *src; | ||
| 1816 | Uint8 *dst; | ||
| 1817 | UINT length; | ||
| 1818 | HRESULT result; | ||
| 1819 | D3D12_RESOURCE_DESC textureDesc; | ||
| 1820 | D3D12_RESOURCE_DESC uploadDesc; | ||
| 1821 | D3D12_HEAP_PROPERTIES heapProps; | ||
| 1822 | D3D12_PLACED_SUBRESOURCE_FOOTPRINT placedTextureDesc; | ||
| 1823 | D3D12_TEXTURE_COPY_LOCATION srcLocation; | ||
| 1824 | D3D12_TEXTURE_COPY_LOCATION dstLocation; | ||
| 1825 | BYTE *textureMemory; | ||
| 1826 | ID3D12Resource *uploadBuffer; | ||
| 1827 | UINT row, NumRows, RowPitch; | ||
| 1828 | UINT64 RowLength; | ||
| 1829 | |||
| 1830 | // Create an upload buffer, which will be used to write to the main texture. | ||
| 1831 | SDL_zero(textureDesc); | ||
| 1832 | D3D_CALL_RET(texture, GetDesc, &textureDesc); | ||
| 1833 | textureDesc.Width = w; | ||
| 1834 | textureDesc.Height = h; | ||
| 1835 | if (textureDesc.Format == DXGI_FORMAT_NV12 || | ||
| 1836 | textureDesc.Format == DXGI_FORMAT_P010) { | ||
| 1837 | textureDesc.Width = (textureDesc.Width + 1) & ~1; | ||
| 1838 | textureDesc.Height = (textureDesc.Height + 1) & ~1; | ||
| 1839 | } | ||
| 1840 | |||
| 1841 | SDL_zero(uploadDesc); | ||
| 1842 | uploadDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; | ||
| 1843 | uploadDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; | ||
| 1844 | uploadDesc.Height = 1; | ||
| 1845 | uploadDesc.DepthOrArraySize = 1; | ||
| 1846 | uploadDesc.MipLevels = 1; | ||
| 1847 | uploadDesc.Format = DXGI_FORMAT_UNKNOWN; | ||
| 1848 | uploadDesc.SampleDesc.Count = 1; | ||
| 1849 | uploadDesc.SampleDesc.Quality = 0; | ||
| 1850 | uploadDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; | ||
| 1851 | uploadDesc.Flags = D3D12_RESOURCE_FLAG_NONE; | ||
| 1852 | |||
| 1853 | // Figure out how much we need to allocate for the upload buffer | ||
| 1854 | ID3D12Device1_GetCopyableFootprints(rendererData->d3dDevice, | ||
| 1855 | &textureDesc, | ||
| 1856 | plane, | ||
| 1857 | 1, | ||
| 1858 | 0, | ||
| 1859 | &placedTextureDesc, | ||
| 1860 | &NumRows, | ||
| 1861 | &RowLength, | ||
| 1862 | &uploadDesc.Width); | ||
| 1863 | RowPitch = placedTextureDesc.Footprint.RowPitch; | ||
| 1864 | |||
| 1865 | SDL_zero(heapProps); | ||
| 1866 | heapProps.Type = D3D12_HEAP_TYPE_UPLOAD; | ||
| 1867 | heapProps.CreationNodeMask = 1; | ||
| 1868 | heapProps.VisibleNodeMask = 1; | ||
| 1869 | |||
| 1870 | // Create the upload buffer | ||
| 1871 | result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice, | ||
| 1872 | &heapProps, | ||
| 1873 | D3D12_HEAP_FLAG_NONE, | ||
| 1874 | &uploadDesc, | ||
| 1875 | D3D12_RESOURCE_STATE_GENERIC_READ, | ||
| 1876 | NULL, | ||
| 1877 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 1878 | (void **)&rendererData->uploadBuffers[rendererData->currentUploadBuffer]); | ||
| 1879 | if (FAILED(result)) { | ||
| 1880 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [create upload buffer]"), result); | ||
| 1881 | } | ||
| 1882 | |||
| 1883 | // Get a write-only pointer to data in the upload buffer: | ||
| 1884 | uploadBuffer = rendererData->uploadBuffers[rendererData->currentUploadBuffer]; | ||
| 1885 | result = ID3D12Resource_Map(uploadBuffer, | ||
| 1886 | 0, | ||
| 1887 | NULL, | ||
| 1888 | (void **)&textureMemory); | ||
| 1889 | if (FAILED(result)) { | ||
| 1890 | D3D_SAFE_RELEASE(rendererData->uploadBuffers[rendererData->currentUploadBuffer]); | ||
| 1891 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [map staging texture]"), result); | ||
| 1892 | } | ||
| 1893 | |||
| 1894 | src = (const Uint8 *)pixels; | ||
| 1895 | dst = textureMemory; | ||
| 1896 | length = (UINT)RowLength; | ||
| 1897 | if (length == (UINT)pitch && length == RowPitch) { | ||
| 1898 | SDL_memcpy(dst, src, (size_t)length * NumRows); | ||
| 1899 | } else { | ||
| 1900 | if (length > (UINT)pitch) { | ||
| 1901 | length = pitch; | ||
| 1902 | } | ||
| 1903 | if (length > RowPitch) { | ||
| 1904 | length = RowPitch; | ||
| 1905 | } | ||
| 1906 | for (row = NumRows; row--; ) { | ||
| 1907 | SDL_memcpy(dst, src, length); | ||
| 1908 | src += pitch; | ||
| 1909 | dst += RowPitch; | ||
| 1910 | } | ||
| 1911 | } | ||
| 1912 | |||
| 1913 | // Commit the changes back to the upload buffer: | ||
| 1914 | ID3D12Resource_Unmap(uploadBuffer, 0, NULL); | ||
| 1915 | |||
| 1916 | // Make sure the destination is in the correct resource state | ||
| 1917 | D3D12_TransitionResource(rendererData, texture, *resourceState, D3D12_RESOURCE_STATE_COPY_DEST); | ||
| 1918 | *resourceState = D3D12_RESOURCE_STATE_COPY_DEST; | ||
| 1919 | |||
| 1920 | SDL_zero(dstLocation); | ||
| 1921 | dstLocation.pResource = texture; | ||
| 1922 | dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; | ||
| 1923 | dstLocation.SubresourceIndex = plane; | ||
| 1924 | |||
| 1925 | SDL_zero(srcLocation); | ||
| 1926 | srcLocation.pResource = rendererData->uploadBuffers[rendererData->currentUploadBuffer]; | ||
| 1927 | srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; | ||
| 1928 | srcLocation.PlacedFootprint = placedTextureDesc; | ||
| 1929 | |||
| 1930 | ID3D12GraphicsCommandList2_CopyTextureRegion(rendererData->commandList, | ||
| 1931 | &dstLocation, | ||
| 1932 | x, | ||
| 1933 | y, | ||
| 1934 | 0, | ||
| 1935 | &srcLocation, | ||
| 1936 | NULL); | ||
| 1937 | |||
| 1938 | // Transition the texture to be shader accessible | ||
| 1939 | D3D12_TransitionResource(rendererData, texture, *resourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 1940 | *resourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 1941 | |||
| 1942 | rendererData->currentUploadBuffer++; | ||
| 1943 | // If we've used up all the upload buffers, we need to issue the batch | ||
| 1944 | if (rendererData->currentUploadBuffer == SDL_D3D12_NUM_UPLOAD_BUFFERS) { | ||
| 1945 | D3D12_IssueBatch(rendererData); | ||
| 1946 | } | ||
| 1947 | |||
| 1948 | return true; | ||
| 1949 | } | ||
| 1950 | |||
| 1951 | static bool D3D12_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1952 | const SDL_Rect *rect, const void *srcPixels, | ||
| 1953 | int srcPitch) | ||
| 1954 | { | ||
| 1955 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 1956 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 1957 | |||
| 1958 | if (!textureData) { | ||
| 1959 | return SDL_SetError("Texture is not currently available"); | ||
| 1960 | } | ||
| 1961 | |||
| 1962 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch, &textureData->mainResourceState)) { | ||
| 1963 | return false; | ||
| 1964 | } | ||
| 1965 | #ifdef SDL_HAVE_YUV | ||
| 1966 | if (textureData->yuv) { | ||
| 1967 | // Skip to the correct offset into the next texture | ||
| 1968 | srcPixels = (const void *)((const Uint8 *)srcPixels + rect->h * srcPitch); | ||
| 1969 | |||
| 1970 | if (!D3D12_UpdateTextureInternal(rendererData, texture->format == SDL_PIXELFORMAT_YV12 ? textureData->mainTextureV : textureData->mainTextureU, 0, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, srcPixels, (srcPitch + 1) / 2, texture->format == SDL_PIXELFORMAT_YV12 ? &textureData->mainResourceStateV : &textureData->mainResourceStateU)) { | ||
| 1971 | return false; | ||
| 1972 | } | ||
| 1973 | |||
| 1974 | // Skip to the correct offset into the next texture | ||
| 1975 | srcPixels = (const void *)((const Uint8 *)srcPixels + ((rect->h + 1) / 2) * ((srcPitch + 1) / 2)); | ||
| 1976 | if (!D3D12_UpdateTextureInternal(rendererData, texture->format == SDL_PIXELFORMAT_YV12 ? textureData->mainTextureU : textureData->mainTextureV, 0, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, srcPixels, (srcPitch + 1) / 2, texture->format == SDL_PIXELFORMAT_YV12 ? &textureData->mainResourceStateU : &textureData->mainResourceStateV)) { | ||
| 1977 | return false; | ||
| 1978 | } | ||
| 1979 | } | ||
| 1980 | |||
| 1981 | if (textureData->nv12) { | ||
| 1982 | // Skip to the correct offset into the next texture | ||
| 1983 | srcPixels = (const void *)((const Uint8 *)srcPixels + rect->h * srcPitch); | ||
| 1984 | |||
| 1985 | if (texture->format == SDL_PIXELFORMAT_P010) { | ||
| 1986 | srcPitch = (srcPitch + 3) & ~3; | ||
| 1987 | } else { | ||
| 1988 | srcPitch = (srcPitch + 1) & ~1; | ||
| 1989 | } | ||
| 1990 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 1, rect->x, rect->y, (rect->w + 1) & ~1, (rect->h + 1) & ~1, srcPixels, srcPitch, &textureData->mainResourceState)) { | ||
| 1991 | return false; | ||
| 1992 | } | ||
| 1993 | } | ||
| 1994 | #endif // SDL_HAVE_YUV | ||
| 1995 | return true; | ||
| 1996 | } | ||
| 1997 | |||
| 1998 | #ifdef SDL_HAVE_YUV | ||
| 1999 | static bool D3D12_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 2000 | const SDL_Rect *rect, | ||
| 2001 | const Uint8 *Yplane, int Ypitch, | ||
| 2002 | const Uint8 *Uplane, int Upitch, | ||
| 2003 | const Uint8 *Vplane, int Vpitch) | ||
| 2004 | { | ||
| 2005 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2006 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2007 | |||
| 2008 | if (!textureData) { | ||
| 2009 | return SDL_SetError("Texture is not currently available"); | ||
| 2010 | } | ||
| 2011 | |||
| 2012 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch, &textureData->mainResourceState)) { | ||
| 2013 | return false; | ||
| 2014 | } | ||
| 2015 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTextureU, 0, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Uplane, Upitch, &textureData->mainResourceStateU)) { | ||
| 2016 | return false; | ||
| 2017 | } | ||
| 2018 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTextureV, 0, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Vplane, Vpitch, &textureData->mainResourceStateV)) { | ||
| 2019 | return false; | ||
| 2020 | } | ||
| 2021 | return true; | ||
| 2022 | } | ||
| 2023 | |||
| 2024 | static bool D3D12_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 2025 | const SDL_Rect *rect, | ||
| 2026 | const Uint8 *Yplane, int Ypitch, | ||
| 2027 | const Uint8 *UVplane, int UVpitch) | ||
| 2028 | { | ||
| 2029 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2030 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2031 | |||
| 2032 | if (!textureData) { | ||
| 2033 | return SDL_SetError("Texture is not currently available"); | ||
| 2034 | } | ||
| 2035 | |||
| 2036 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch, &textureData->mainResourceState)) { | ||
| 2037 | return false; | ||
| 2038 | } | ||
| 2039 | |||
| 2040 | if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 1, rect->x, rect->y, rect->w, rect->h, UVplane, UVpitch, &textureData->mainResourceState)) { | ||
| 2041 | return false; | ||
| 2042 | } | ||
| 2043 | return true; | ||
| 2044 | } | ||
| 2045 | #endif | ||
| 2046 | |||
| 2047 | static bool D3D12_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 2048 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 2049 | { | ||
| 2050 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2051 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2052 | HRESULT result = S_OK; | ||
| 2053 | |||
| 2054 | D3D12_RESOURCE_DESC textureDesc; | ||
| 2055 | D3D12_RESOURCE_DESC uploadDesc; | ||
| 2056 | D3D12_HEAP_PROPERTIES heapProps; | ||
| 2057 | D3D12_SUBRESOURCE_FOOTPRINT pitchedDesc; | ||
| 2058 | BYTE *textureMemory; | ||
| 2059 | int bpp; | ||
| 2060 | |||
| 2061 | if (!textureData) { | ||
| 2062 | return SDL_SetError("Texture is not currently available"); | ||
| 2063 | } | ||
| 2064 | #ifdef SDL_HAVE_YUV | ||
| 2065 | if (textureData->yuv || textureData->nv12) { | ||
| 2066 | // It's more efficient to upload directly... | ||
| 2067 | if (!textureData->pixels) { | ||
| 2068 | textureData->pitch = texture->w; | ||
| 2069 | textureData->pixels = (Uint8 *)SDL_malloc((texture->h * textureData->pitch * 3) / 2); | ||
| 2070 | if (!textureData->pixels) { | ||
| 2071 | return false; | ||
| 2072 | } | ||
| 2073 | } | ||
| 2074 | textureData->lockedRect = *rect; | ||
| 2075 | *pixels = | ||
| 2076 | (void *)(textureData->pixels + rect->y * textureData->pitch + | ||
| 2077 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 2078 | *pitch = textureData->pitch; | ||
| 2079 | return true; | ||
| 2080 | } | ||
| 2081 | #endif | ||
| 2082 | if (textureData->stagingBuffer) { | ||
| 2083 | return SDL_SetError("texture is already locked"); | ||
| 2084 | } | ||
| 2085 | |||
| 2086 | // Create an upload buffer, which will be used to write to the main texture. | ||
| 2087 | SDL_zero(textureDesc); | ||
| 2088 | D3D_CALL_RET(textureData->mainTexture, GetDesc, &textureDesc); | ||
| 2089 | textureDesc.Width = rect->w; | ||
| 2090 | textureDesc.Height = rect->h; | ||
| 2091 | |||
| 2092 | SDL_zero(uploadDesc); | ||
| 2093 | uploadDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; | ||
| 2094 | uploadDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; | ||
| 2095 | uploadDesc.Height = 1; | ||
| 2096 | uploadDesc.DepthOrArraySize = 1; | ||
| 2097 | uploadDesc.MipLevels = 1; | ||
| 2098 | uploadDesc.Format = DXGI_FORMAT_UNKNOWN; | ||
| 2099 | uploadDesc.SampleDesc.Count = 1; | ||
| 2100 | uploadDesc.SampleDesc.Quality = 0; | ||
| 2101 | uploadDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; | ||
| 2102 | uploadDesc.Flags = D3D12_RESOURCE_FLAG_NONE; | ||
| 2103 | |||
| 2104 | // Figure out how much we need to allocate for the upload buffer | ||
| 2105 | ID3D12Device1_GetCopyableFootprints(rendererData->d3dDevice, | ||
| 2106 | &textureDesc, | ||
| 2107 | 0, | ||
| 2108 | 1, | ||
| 2109 | 0, | ||
| 2110 | NULL, | ||
| 2111 | NULL, | ||
| 2112 | NULL, | ||
| 2113 | &uploadDesc.Width); | ||
| 2114 | |||
| 2115 | SDL_zero(heapProps); | ||
| 2116 | heapProps.Type = D3D12_HEAP_TYPE_UPLOAD; | ||
| 2117 | heapProps.CreationNodeMask = 1; | ||
| 2118 | heapProps.VisibleNodeMask = 1; | ||
| 2119 | |||
| 2120 | // Create the upload buffer | ||
| 2121 | result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice, | ||
| 2122 | &heapProps, | ||
| 2123 | D3D12_HEAP_FLAG_NONE, | ||
| 2124 | &uploadDesc, | ||
| 2125 | D3D12_RESOURCE_STATE_GENERIC_READ, | ||
| 2126 | NULL, | ||
| 2127 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 2128 | (void **)&textureData->stagingBuffer); | ||
| 2129 | if (FAILED(result)) { | ||
| 2130 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [create upload buffer]"), result); | ||
| 2131 | } | ||
| 2132 | |||
| 2133 | // Get a write-only pointer to data in the upload buffer: | ||
| 2134 | result = ID3D12Resource_Map(textureData->stagingBuffer, | ||
| 2135 | 0, | ||
| 2136 | NULL, | ||
| 2137 | (void **)&textureMemory); | ||
| 2138 | if (FAILED(result)) { | ||
| 2139 | D3D_SAFE_RELEASE(rendererData->uploadBuffers[rendererData->currentUploadBuffer]); | ||
| 2140 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [map staging texture]"), result); | ||
| 2141 | } | ||
| 2142 | |||
| 2143 | SDL_zero(pitchedDesc); | ||
| 2144 | pitchedDesc.Format = textureDesc.Format; | ||
| 2145 | pitchedDesc.Width = rect->w; | ||
| 2146 | pitchedDesc.Height = rect->h; | ||
| 2147 | pitchedDesc.Depth = 1; | ||
| 2148 | if (pitchedDesc.Format == DXGI_FORMAT_R8_UNORM) { | ||
| 2149 | bpp = 1; | ||
| 2150 | } else { | ||
| 2151 | bpp = 4; | ||
| 2152 | } | ||
| 2153 | pitchedDesc.RowPitch = D3D12_Align(rect->w * bpp, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT); | ||
| 2154 | |||
| 2155 | /* Make note of where the staging texture will be written to | ||
| 2156 | * (on a call to SDL_UnlockTexture): | ||
| 2157 | */ | ||
| 2158 | textureData->lockedRect = *rect; | ||
| 2159 | |||
| 2160 | /* Make sure the caller has information on the texture's pixel buffer, | ||
| 2161 | * then return: | ||
| 2162 | */ | ||
| 2163 | *pixels = textureMemory; | ||
| 2164 | *pitch = pitchedDesc.RowPitch; | ||
| 2165 | return true; | ||
| 2166 | } | ||
| 2167 | |||
| 2168 | static void D3D12_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 2169 | { | ||
| 2170 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2171 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2172 | |||
| 2173 | D3D12_RESOURCE_DESC textureDesc; | ||
| 2174 | D3D12_SUBRESOURCE_FOOTPRINT pitchedDesc; | ||
| 2175 | D3D12_PLACED_SUBRESOURCE_FOOTPRINT placedTextureDesc; | ||
| 2176 | D3D12_TEXTURE_COPY_LOCATION srcLocation; | ||
| 2177 | D3D12_TEXTURE_COPY_LOCATION dstLocation; | ||
| 2178 | int bpp; | ||
| 2179 | |||
| 2180 | if (!textureData) { | ||
| 2181 | return; | ||
| 2182 | } | ||
| 2183 | #ifdef SDL_HAVE_YUV | ||
| 2184 | if (textureData->yuv || textureData->nv12) { | ||
| 2185 | const SDL_Rect *rect = &textureData->lockedRect; | ||
| 2186 | void *pixels = | ||
| 2187 | (void *)(textureData->pixels + rect->y * textureData->pitch + | ||
| 2188 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 2189 | D3D12_UpdateTexture(renderer, texture, rect, pixels, textureData->pitch); | ||
| 2190 | return; | ||
| 2191 | } | ||
| 2192 | #endif | ||
| 2193 | // Commit the pixel buffer's changes back to the staging texture: | ||
| 2194 | ID3D12Resource_Unmap(textureData->stagingBuffer, 0, NULL); | ||
| 2195 | |||
| 2196 | SDL_zero(textureDesc); | ||
| 2197 | D3D_CALL_RET(textureData->mainTexture, GetDesc, &textureDesc); | ||
| 2198 | textureDesc.Width = textureData->lockedRect.w; | ||
| 2199 | textureDesc.Height = textureData->lockedRect.h; | ||
| 2200 | |||
| 2201 | SDL_zero(pitchedDesc); | ||
| 2202 | pitchedDesc.Format = textureDesc.Format; | ||
| 2203 | pitchedDesc.Width = (UINT)textureDesc.Width; | ||
| 2204 | pitchedDesc.Height = textureDesc.Height; | ||
| 2205 | pitchedDesc.Depth = 1; | ||
| 2206 | if (pitchedDesc.Format == DXGI_FORMAT_R8_UNORM) { | ||
| 2207 | bpp = 1; | ||
| 2208 | } else { | ||
| 2209 | bpp = 4; | ||
| 2210 | } | ||
| 2211 | pitchedDesc.RowPitch = D3D12_Align(textureData->lockedRect.w * bpp, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT); | ||
| 2212 | |||
| 2213 | SDL_zero(placedTextureDesc); | ||
| 2214 | placedTextureDesc.Offset = 0; | ||
| 2215 | placedTextureDesc.Footprint = pitchedDesc; | ||
| 2216 | |||
| 2217 | D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_COPY_DEST); | ||
| 2218 | textureData->mainResourceState = D3D12_RESOURCE_STATE_COPY_DEST; | ||
| 2219 | |||
| 2220 | SDL_zero(dstLocation); | ||
| 2221 | dstLocation.pResource = textureData->mainTexture; | ||
| 2222 | dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; | ||
| 2223 | dstLocation.SubresourceIndex = 0; | ||
| 2224 | |||
| 2225 | SDL_zero(srcLocation); | ||
| 2226 | srcLocation.pResource = textureData->stagingBuffer; | ||
| 2227 | srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; | ||
| 2228 | srcLocation.PlacedFootprint = placedTextureDesc; | ||
| 2229 | |||
| 2230 | ID3D12GraphicsCommandList2_CopyTextureRegion(rendererData->commandList, | ||
| 2231 | &dstLocation, | ||
| 2232 | textureData->lockedRect.x, | ||
| 2233 | textureData->lockedRect.y, | ||
| 2234 | 0, | ||
| 2235 | &srcLocation, | ||
| 2236 | NULL); | ||
| 2237 | |||
| 2238 | // Transition the texture to be shader accessible | ||
| 2239 | D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2240 | textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2241 | |||
| 2242 | // Execute the command list before releasing the staging buffer | ||
| 2243 | D3D12_IssueBatch(rendererData); | ||
| 2244 | D3D_SAFE_RELEASE(textureData->stagingBuffer); | ||
| 2245 | } | ||
| 2246 | |||
| 2247 | static void D3D12_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 2248 | { | ||
| 2249 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2250 | |||
| 2251 | if (!textureData) { | ||
| 2252 | return; | ||
| 2253 | } | ||
| 2254 | |||
| 2255 | textureData->scaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? D3D12_FILTER_MIN_MAG_MIP_POINT : D3D12_FILTER_MIN_MAG_MIP_LINEAR; | ||
| 2256 | } | ||
| 2257 | |||
| 2258 | static bool D3D12_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 2259 | { | ||
| 2260 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2261 | D3D12_TextureData *textureData = NULL; | ||
| 2262 | |||
| 2263 | if (!texture) { | ||
| 2264 | if (rendererData->textureRenderTarget) { | ||
| 2265 | D3D12_TransitionResource(rendererData, | ||
| 2266 | rendererData->textureRenderTarget->mainTexture, | ||
| 2267 | rendererData->textureRenderTarget->mainResourceState, | ||
| 2268 | D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2269 | rendererData->textureRenderTarget->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2270 | } | ||
| 2271 | rendererData->textureRenderTarget = NULL; | ||
| 2272 | return true; | ||
| 2273 | } | ||
| 2274 | |||
| 2275 | textureData = (D3D12_TextureData *)texture->internal; | ||
| 2276 | |||
| 2277 | if (!textureData->mainTextureRenderTargetView.ptr) { | ||
| 2278 | return SDL_SetError("specified texture is not a render target"); | ||
| 2279 | } | ||
| 2280 | |||
| 2281 | rendererData->textureRenderTarget = textureData; | ||
| 2282 | D3D12_TransitionResource(rendererData, | ||
| 2283 | rendererData->textureRenderTarget->mainTexture, | ||
| 2284 | rendererData->textureRenderTarget->mainResourceState, | ||
| 2285 | D3D12_RESOURCE_STATE_RENDER_TARGET); | ||
| 2286 | rendererData->textureRenderTarget->mainResourceState = D3D12_RESOURCE_STATE_RENDER_TARGET; | ||
| 2287 | |||
| 2288 | return true; | ||
| 2289 | } | ||
| 2290 | |||
| 2291 | static bool D3D12_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 2292 | { | ||
| 2293 | return true; // nothing to do in this backend. | ||
| 2294 | } | ||
| 2295 | |||
| 2296 | static bool D3D12_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 2297 | { | ||
| 2298 | D3D12_VertexPositionColor *verts = (D3D12_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(D3D12_VertexPositionColor), 0, &cmd->data.draw.first); | ||
| 2299 | int i; | ||
| 2300 | SDL_FColor color = cmd->data.draw.color; | ||
| 2301 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 2302 | |||
| 2303 | if (!verts) { | ||
| 2304 | return false; | ||
| 2305 | } | ||
| 2306 | |||
| 2307 | cmd->data.draw.count = count; | ||
| 2308 | |||
| 2309 | if (convert_color) { | ||
| 2310 | SDL_ConvertToLinear(&color); | ||
| 2311 | } | ||
| 2312 | |||
| 2313 | for (i = 0; i < count; i++) { | ||
| 2314 | verts->pos.x = points[i].x + 0.5f; | ||
| 2315 | verts->pos.y = points[i].y + 0.5f; | ||
| 2316 | verts->tex.x = 0.0f; | ||
| 2317 | verts->tex.y = 0.0f; | ||
| 2318 | verts->color = color; | ||
| 2319 | verts++; | ||
| 2320 | } | ||
| 2321 | |||
| 2322 | return true; | ||
| 2323 | } | ||
| 2324 | |||
| 2325 | static bool D3D12_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 2326 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 2327 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 2328 | float scale_x, float scale_y) | ||
| 2329 | { | ||
| 2330 | int i; | ||
| 2331 | int count = indices ? num_indices : num_vertices; | ||
| 2332 | D3D12_VertexPositionColor *verts = (D3D12_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(D3D12_VertexPositionColor), 0, &cmd->data.draw.first); | ||
| 2333 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 2334 | D3D12_TextureData *textureData = texture ? (D3D12_TextureData *)texture->internal : NULL; | ||
| 2335 | float u_scale = textureData ? (float)texture->w / textureData->w : 0.0f; | ||
| 2336 | float v_scale = textureData ? (float)texture->h / textureData->h : 0.0f; | ||
| 2337 | |||
| 2338 | if (!verts) { | ||
| 2339 | return false; | ||
| 2340 | } | ||
| 2341 | |||
| 2342 | cmd->data.draw.count = count; | ||
| 2343 | size_indices = indices ? size_indices : 0; | ||
| 2344 | |||
| 2345 | for (i = 0; i < count; i++) { | ||
| 2346 | int j; | ||
| 2347 | float *xy_; | ||
| 2348 | if (size_indices == 4) { | ||
| 2349 | j = ((const Uint32 *)indices)[i]; | ||
| 2350 | } else if (size_indices == 2) { | ||
| 2351 | j = ((const Uint16 *)indices)[i]; | ||
| 2352 | } else if (size_indices == 1) { | ||
| 2353 | j = ((const Uint8 *)indices)[i]; | ||
| 2354 | } else { | ||
| 2355 | j = i; | ||
| 2356 | } | ||
| 2357 | |||
| 2358 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 2359 | |||
| 2360 | verts->pos.x = xy_[0] * scale_x; | ||
| 2361 | verts->pos.y = xy_[1] * scale_y; | ||
| 2362 | verts->color = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 2363 | if (convert_color) { | ||
| 2364 | SDL_ConvertToLinear(&verts->color); | ||
| 2365 | } | ||
| 2366 | |||
| 2367 | if (texture) { | ||
| 2368 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 2369 | verts->tex.x = uv_[0] * u_scale; | ||
| 2370 | verts->tex.y = uv_[1] * v_scale; | ||
| 2371 | } else { | ||
| 2372 | verts->tex.x = 0.0f; | ||
| 2373 | verts->tex.y = 0.0f; | ||
| 2374 | } | ||
| 2375 | |||
| 2376 | verts += 1; | ||
| 2377 | } | ||
| 2378 | return true; | ||
| 2379 | } | ||
| 2380 | |||
| 2381 | static bool D3D12_UpdateVertexBuffer(SDL_Renderer *renderer, | ||
| 2382 | const void *vertexData, size_t dataSizeInBytes) | ||
| 2383 | { | ||
| 2384 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2385 | HRESULT result = S_OK; | ||
| 2386 | const int vbidx = rendererData->currentVertexBuffer; | ||
| 2387 | UINT8 *vertexBufferData = NULL; | ||
| 2388 | D3D12_RANGE range; | ||
| 2389 | ID3D12Resource *vertexBuffer; | ||
| 2390 | |||
| 2391 | range.Begin = 0; | ||
| 2392 | range.End = 0; | ||
| 2393 | |||
| 2394 | if (dataSizeInBytes == 0) { | ||
| 2395 | return true; // nothing to do. | ||
| 2396 | } | ||
| 2397 | |||
| 2398 | if (rendererData->issueBatch) { | ||
| 2399 | if (FAILED(D3D12_IssueBatch(rendererData))) { | ||
| 2400 | return SDL_SetError("Failed to issue intermediate batch"); | ||
| 2401 | } | ||
| 2402 | } | ||
| 2403 | |||
| 2404 | // If the existing vertex buffer isn't big enough, we need to recreate a big enough one | ||
| 2405 | if (dataSizeInBytes > rendererData->vertexBuffers[vbidx].size) { | ||
| 2406 | D3D12_CreateVertexBuffer(rendererData, vbidx, dataSizeInBytes); | ||
| 2407 | } | ||
| 2408 | |||
| 2409 | vertexBuffer = rendererData->vertexBuffers[vbidx].resource; | ||
| 2410 | result = ID3D12Resource_Map(vertexBuffer, 0, &range, (void **)&vertexBufferData); | ||
| 2411 | if (FAILED(result)) { | ||
| 2412 | return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [vertex buffer]"), result); | ||
| 2413 | } | ||
| 2414 | SDL_memcpy(vertexBufferData, vertexData, dataSizeInBytes); | ||
| 2415 | ID3D12Resource_Unmap(vertexBuffer, 0, NULL); | ||
| 2416 | |||
| 2417 | rendererData->vertexBuffers[vbidx].view.SizeInBytes = (UINT)dataSizeInBytes; | ||
| 2418 | |||
| 2419 | ID3D12GraphicsCommandList2_IASetVertexBuffers(rendererData->commandList, 0, 1, &rendererData->vertexBuffers[vbidx].view); | ||
| 2420 | |||
| 2421 | rendererData->currentVertexBuffer++; | ||
| 2422 | if (rendererData->currentVertexBuffer >= SDL_D3D12_NUM_VERTEX_BUFFERS) { | ||
| 2423 | rendererData->currentVertexBuffer = 0; | ||
| 2424 | rendererData->issueBatch = true; | ||
| 2425 | } | ||
| 2426 | |||
| 2427 | return true; | ||
| 2428 | } | ||
| 2429 | |||
| 2430 | static bool D3D12_UpdateViewport(SDL_Renderer *renderer) | ||
| 2431 | { | ||
| 2432 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 2433 | const SDL_Rect *viewport = &data->currentViewport; | ||
| 2434 | Float4X4 projection; | ||
| 2435 | Float4X4 view; | ||
| 2436 | SDL_FRect orientationAlignedViewport; | ||
| 2437 | BOOL swapDimensions; | ||
| 2438 | D3D12_VIEWPORT d3dviewport; | ||
| 2439 | const int rotation = D3D12_GetRotationForCurrentRenderTarget(renderer); | ||
| 2440 | |||
| 2441 | if (viewport->w == 0 || viewport->h == 0) { | ||
| 2442 | /* If the viewport is empty, assume that it is because | ||
| 2443 | * SDL_CreateRenderer is calling it, and will call it again later | ||
| 2444 | * with a non-empty viewport. | ||
| 2445 | */ | ||
| 2446 | // SDL_Log("%s, no viewport was set!", __FUNCTION__); | ||
| 2447 | return false; | ||
| 2448 | } | ||
| 2449 | |||
| 2450 | /* Make sure the SDL viewport gets rotated to that of the physical display's rotation. | ||
| 2451 | * Keep in mind here that the Y-axis will be been inverted (from Direct3D's | ||
| 2452 | * default coordinate system) so rotations will be done in the opposite | ||
| 2453 | * direction of the DXGI_MODE_ROTATION enumeration. | ||
| 2454 | */ | ||
| 2455 | switch (rotation) { | ||
| 2456 | case DXGI_MODE_ROTATION_IDENTITY: | ||
| 2457 | projection = MatrixIdentity(); | ||
| 2458 | break; | ||
| 2459 | case DXGI_MODE_ROTATION_ROTATE270: | ||
| 2460 | projection = MatrixRotationZ(SDL_PI_F * 0.5f); | ||
| 2461 | break; | ||
| 2462 | case DXGI_MODE_ROTATION_ROTATE180: | ||
| 2463 | projection = MatrixRotationZ(SDL_PI_F); | ||
| 2464 | break; | ||
| 2465 | case DXGI_MODE_ROTATION_ROTATE90: | ||
| 2466 | projection = MatrixRotationZ(-SDL_PI_F * 0.5f); | ||
| 2467 | break; | ||
| 2468 | default: | ||
| 2469 | return SDL_SetError("An unknown DisplayOrientation is being used"); | ||
| 2470 | } | ||
| 2471 | |||
| 2472 | // Update the view matrix | ||
| 2473 | SDL_zero(view); | ||
| 2474 | view.m[0][0] = 2.0f / viewport->w; | ||
| 2475 | view.m[1][1] = -2.0f / viewport->h; | ||
| 2476 | view.m[2][2] = 1.0f; | ||
| 2477 | view.m[3][0] = -1.0f; | ||
| 2478 | view.m[3][1] = 1.0f; | ||
| 2479 | view.m[3][3] = 1.0f; | ||
| 2480 | |||
| 2481 | /* Combine the projection + view matrix together now, as both only get | ||
| 2482 | * set here (as of this writing, on Dec 26, 2013). When done, store it | ||
| 2483 | * for eventual transfer to the GPU. | ||
| 2484 | */ | ||
| 2485 | data->vertexShaderConstantsData.projectionAndView = MatrixMultiply( | ||
| 2486 | view, | ||
| 2487 | projection); | ||
| 2488 | |||
| 2489 | /* Update the Direct3D viewport, which seems to be aligned to the | ||
| 2490 | * swap buffer's coordinate space, which is always in either | ||
| 2491 | * a landscape mode, for all Windows 8/RT devices, or a portrait mode, | ||
| 2492 | * for Windows Phone devices. | ||
| 2493 | */ | ||
| 2494 | swapDimensions = D3D12_IsDisplayRotated90Degrees((DXGI_MODE_ROTATION)rotation); | ||
| 2495 | if (swapDimensions) { | ||
| 2496 | orientationAlignedViewport.x = (float)viewport->y; | ||
| 2497 | orientationAlignedViewport.y = (float)viewport->x; | ||
| 2498 | orientationAlignedViewport.w = (float)viewport->h; | ||
| 2499 | orientationAlignedViewport.h = (float)viewport->w; | ||
| 2500 | } else { | ||
| 2501 | orientationAlignedViewport.x = (float)viewport->x; | ||
| 2502 | orientationAlignedViewport.y = (float)viewport->y; | ||
| 2503 | orientationAlignedViewport.w = (float)viewport->w; | ||
| 2504 | orientationAlignedViewport.h = (float)viewport->h; | ||
| 2505 | } | ||
| 2506 | |||
| 2507 | d3dviewport.TopLeftX = orientationAlignedViewport.x; | ||
| 2508 | d3dviewport.TopLeftY = orientationAlignedViewport.y; | ||
| 2509 | d3dviewport.Width = orientationAlignedViewport.w; | ||
| 2510 | d3dviewport.Height = orientationAlignedViewport.h; | ||
| 2511 | d3dviewport.MinDepth = 0.0f; | ||
| 2512 | d3dviewport.MaxDepth = 1.0f; | ||
| 2513 | // SDL_Log("%s: D3D viewport = {%f,%f,%f,%f}", __FUNCTION__, d3dviewport.TopLeftX, d3dviewport.TopLeftY, d3dviewport.Width, d3dviewport.Height); | ||
| 2514 | ID3D12GraphicsCommandList_RSSetViewports(data->commandList, 1, &d3dviewport); | ||
| 2515 | |||
| 2516 | data->viewportDirty = false; | ||
| 2517 | |||
| 2518 | return true; | ||
| 2519 | } | ||
| 2520 | |||
| 2521 | static void D3D12_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const SDL_Texture *texture, D3D12_PixelShaderConstants *constants) | ||
| 2522 | { | ||
| 2523 | float output_headroom; | ||
| 2524 | |||
| 2525 | SDL_zerop(constants); | ||
| 2526 | |||
| 2527 | constants->scRGB_output = (float)SDL_RenderingLinearSpace(renderer); | ||
| 2528 | constants->color_scale = cmd->data.draw.color_scale; | ||
| 2529 | |||
| 2530 | if (texture) { | ||
| 2531 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2532 | |||
| 2533 | switch (texture->format) { | ||
| 2534 | case SDL_PIXELFORMAT_YV12: | ||
| 2535 | case SDL_PIXELFORMAT_IYUV: | ||
| 2536 | constants->texture_type = TEXTURETYPE_YUV; | ||
| 2537 | constants->input_type = INPUTTYPE_SRGB; | ||
| 2538 | break; | ||
| 2539 | case SDL_PIXELFORMAT_NV12: | ||
| 2540 | constants->texture_type = TEXTURETYPE_NV12; | ||
| 2541 | constants->input_type = INPUTTYPE_SRGB; | ||
| 2542 | break; | ||
| 2543 | case SDL_PIXELFORMAT_NV21: | ||
| 2544 | constants->texture_type = TEXTURETYPE_NV21; | ||
| 2545 | constants->input_type = INPUTTYPE_SRGB; | ||
| 2546 | break; | ||
| 2547 | case SDL_PIXELFORMAT_P010: | ||
| 2548 | constants->texture_type = TEXTURETYPE_NV12; | ||
| 2549 | constants->input_type = INPUTTYPE_HDR10; | ||
| 2550 | break; | ||
| 2551 | default: | ||
| 2552 | constants->texture_type = TEXTURETYPE_RGB; | ||
| 2553 | if (texture->colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 2554 | constants->input_type = INPUTTYPE_SCRGB; | ||
| 2555 | } else if (texture->colorspace == SDL_COLORSPACE_HDR10) { | ||
| 2556 | constants->input_type = INPUTTYPE_HDR10; | ||
| 2557 | } else { | ||
| 2558 | // The sampler will convert from sRGB to linear on load if working in linear colorspace | ||
| 2559 | constants->input_type = INPUTTYPE_UNSPECIFIED; | ||
| 2560 | } | ||
| 2561 | break; | ||
| 2562 | } | ||
| 2563 | |||
| 2564 | constants->sdr_white_point = texture->SDR_white_point; | ||
| 2565 | |||
| 2566 | if (renderer->target) { | ||
| 2567 | output_headroom = renderer->target->HDR_headroom; | ||
| 2568 | } else { | ||
| 2569 | output_headroom = renderer->HDR_headroom; | ||
| 2570 | } | ||
| 2571 | |||
| 2572 | if (texture->HDR_headroom > output_headroom) { | ||
| 2573 | constants->tonemap_method = TONEMAP_CHROME; | ||
| 2574 | constants->tonemap_factor1 = (output_headroom / (texture->HDR_headroom * texture->HDR_headroom)); | ||
| 2575 | constants->tonemap_factor2 = (1.0f / output_headroom); | ||
| 2576 | } | ||
| 2577 | |||
| 2578 | if (textureData->YCbCr_matrix) { | ||
| 2579 | SDL_memcpy(constants->YCbCr_matrix, textureData->YCbCr_matrix, sizeof(constants->YCbCr_matrix)); | ||
| 2580 | } | ||
| 2581 | } | ||
| 2582 | } | ||
| 2583 | |||
| 2584 | static bool D3D12_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, D3D12_Shader shader, const D3D12_PixelShaderConstants *shader_constants, | ||
| 2585 | D3D12_PRIMITIVE_TOPOLOGY_TYPE topology, | ||
| 2586 | const int numShaderResources, D3D12_CPU_DESCRIPTOR_HANDLE *shaderResources, | ||
| 2587 | D3D12_CPU_DESCRIPTOR_HANDLE *sampler, const Float4X4 *matrix) | ||
| 2588 | |||
| 2589 | { | ||
| 2590 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2591 | const Float4X4 *newmatrix = matrix ? matrix : &rendererData->identity; | ||
| 2592 | D3D12_CPU_DESCRIPTOR_HANDLE renderTargetView = D3D12_GetCurrentRenderTargetView(renderer); | ||
| 2593 | const SDL_BlendMode blendMode = cmd->data.draw.blend; | ||
| 2594 | bool updateSubresource = false; | ||
| 2595 | int i; | ||
| 2596 | D3D12_CPU_DESCRIPTOR_HANDLE firstShaderResource; | ||
| 2597 | DXGI_FORMAT rtvFormat = rendererData->renderTargetFormat; | ||
| 2598 | D3D12_PipelineState *currentPipelineState = rendererData->currentPipelineState;; | ||
| 2599 | D3D12_PixelShaderConstants solid_constants; | ||
| 2600 | |||
| 2601 | if (rendererData->textureRenderTarget) { | ||
| 2602 | rtvFormat = rendererData->textureRenderTarget->mainTextureFormat; | ||
| 2603 | } | ||
| 2604 | |||
| 2605 | // See if we need to change the pipeline state | ||
| 2606 | if (!currentPipelineState || | ||
| 2607 | currentPipelineState->shader != shader || | ||
| 2608 | currentPipelineState->blendMode != blendMode || | ||
| 2609 | currentPipelineState->topology != topology || | ||
| 2610 | currentPipelineState->rtvFormat != rtvFormat) { | ||
| 2611 | |||
| 2612 | /* Find the matching pipeline. | ||
| 2613 | NOTE: Although it may seem inefficient to linearly search through ~450 pipelines | ||
| 2614 | to find the correct one, in profiling this doesn't come up at all. | ||
| 2615 | It's unlikely that using a hash table would affect performance a measurable amount unless | ||
| 2616 | it's a degenerate case that's changing the pipeline state dozens of times per frame. | ||
| 2617 | */ | ||
| 2618 | currentPipelineState = NULL; | ||
| 2619 | for (i = 0; i < rendererData->pipelineStateCount; ++i) { | ||
| 2620 | D3D12_PipelineState *candidatePiplineState = &rendererData->pipelineStates[i]; | ||
| 2621 | if (candidatePiplineState->shader == shader && | ||
| 2622 | candidatePiplineState->blendMode == blendMode && | ||
| 2623 | candidatePiplineState->topology == topology && | ||
| 2624 | candidatePiplineState->rtvFormat == rtvFormat) { | ||
| 2625 | currentPipelineState = candidatePiplineState; | ||
| 2626 | break; | ||
| 2627 | } | ||
| 2628 | } | ||
| 2629 | |||
| 2630 | // If we didn't find a match, create a new one -- it must mean the blend mode is non-standard | ||
| 2631 | if (!currentPipelineState) { | ||
| 2632 | currentPipelineState = D3D12_CreatePipelineState(renderer, shader, blendMode, topology, rtvFormat); | ||
| 2633 | } | ||
| 2634 | |||
| 2635 | if (!currentPipelineState) { | ||
| 2636 | // The error has been set inside D3D12_CreatePipelineState() | ||
| 2637 | return false; | ||
| 2638 | } | ||
| 2639 | |||
| 2640 | ID3D12GraphicsCommandList2_SetPipelineState(rendererData->commandList, currentPipelineState->pipelineState); | ||
| 2641 | ID3D12GraphicsCommandList2_SetGraphicsRootSignature(rendererData->commandList, | ||
| 2642 | rendererData->rootSignatures[D3D12_GetRootSignatureType(currentPipelineState->shader)]); | ||
| 2643 | // When we change these we will need to re-upload the constant buffer and reset any descriptors | ||
| 2644 | updateSubresource = true; | ||
| 2645 | rendererData->currentSampler.ptr = 0; | ||
| 2646 | rendererData->currentShaderResource.ptr = 0; | ||
| 2647 | rendererData->currentPipelineState = currentPipelineState; | ||
| 2648 | } | ||
| 2649 | |||
| 2650 | if (renderTargetView.ptr != rendererData->currentRenderTargetView.ptr) { | ||
| 2651 | ID3D12GraphicsCommandList2_OMSetRenderTargets(rendererData->commandList, 1, &renderTargetView, FALSE, NULL); | ||
| 2652 | rendererData->currentRenderTargetView = renderTargetView; | ||
| 2653 | } | ||
| 2654 | |||
| 2655 | if (rendererData->viewportDirty) { | ||
| 2656 | if (D3D12_UpdateViewport(renderer)) { | ||
| 2657 | // vertexShaderConstantsData.projectionAndView has changed | ||
| 2658 | updateSubresource = true; | ||
| 2659 | } | ||
| 2660 | } | ||
| 2661 | |||
| 2662 | if (rendererData->cliprectDirty) { | ||
| 2663 | D3D12_RECT scissorRect; | ||
| 2664 | if (!D3D12_GetViewportAlignedD3DRect(renderer, &rendererData->currentCliprect, &scissorRect, TRUE)) { | ||
| 2665 | // D3D12_GetViewportAlignedD3DRect will have set the SDL error | ||
| 2666 | return false; | ||
| 2667 | } | ||
| 2668 | ID3D12GraphicsCommandList2_RSSetScissorRects(rendererData->commandList, 1, &scissorRect); | ||
| 2669 | rendererData->cliprectDirty = false; | ||
| 2670 | } | ||
| 2671 | |||
| 2672 | if (numShaderResources > 0) { | ||
| 2673 | firstShaderResource = shaderResources[0]; | ||
| 2674 | } else { | ||
| 2675 | firstShaderResource.ptr = 0; | ||
| 2676 | } | ||
| 2677 | if (firstShaderResource.ptr != rendererData->currentShaderResource.ptr) { | ||
| 2678 | for (i = 0; i < numShaderResources; ++i) { | ||
| 2679 | D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle = D3D12_CPUtoGPUHandle(rendererData->srvDescriptorHeap, shaderResources[i]); | ||
| 2680 | ID3D12GraphicsCommandList2_SetGraphicsRootDescriptorTable(rendererData->commandList, i + 2, GPUHandle); | ||
| 2681 | } | ||
| 2682 | rendererData->currentShaderResource.ptr = firstShaderResource.ptr; | ||
| 2683 | } | ||
| 2684 | |||
| 2685 | if (sampler && sampler->ptr != rendererData->currentSampler.ptr) { | ||
| 2686 | D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle = D3D12_CPUtoGPUHandle(rendererData->samplerDescriptorHeap, *sampler); | ||
| 2687 | UINT tableIndex = 0; | ||
| 2688 | |||
| 2689 | // Figure out the correct sampler descriptor table index based on the type of shader | ||
| 2690 | switch (shader) { | ||
| 2691 | case SHADER_RGB: | ||
| 2692 | tableIndex = 3; | ||
| 2693 | break; | ||
| 2694 | case SHADER_ADVANCED: | ||
| 2695 | tableIndex = 5; | ||
| 2696 | break; | ||
| 2697 | default: | ||
| 2698 | return SDL_SetError("[direct3d12] Trying to set a sampler for a shader which doesn't have one"); | ||
| 2699 | break; | ||
| 2700 | } | ||
| 2701 | |||
| 2702 | ID3D12GraphicsCommandList2_SetGraphicsRootDescriptorTable(rendererData->commandList, tableIndex, GPUHandle); | ||
| 2703 | rendererData->currentSampler = *sampler; | ||
| 2704 | } | ||
| 2705 | |||
| 2706 | if (updateSubresource == true || SDL_memcmp(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix)) != 0) { | ||
| 2707 | SDL_memcpy(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix)); | ||
| 2708 | ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstants(rendererData->commandList, | ||
| 2709 | 0, | ||
| 2710 | 32, | ||
| 2711 | &rendererData->vertexShaderConstantsData, | ||
| 2712 | 0); | ||
| 2713 | } | ||
| 2714 | |||
| 2715 | if (!shader_constants) { | ||
| 2716 | D3D12_SetupShaderConstants(renderer, cmd, NULL, &solid_constants); | ||
| 2717 | shader_constants = &solid_constants; | ||
| 2718 | } | ||
| 2719 | |||
| 2720 | if (updateSubresource == true || | ||
| 2721 | SDL_memcmp(shader_constants, ¤tPipelineState->shader_constants, sizeof(*shader_constants)) != 0) { | ||
| 2722 | ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstants(rendererData->commandList, | ||
| 2723 | 1, | ||
| 2724 | sizeof(*shader_constants) / sizeof(float), | ||
| 2725 | shader_constants, | ||
| 2726 | 0); | ||
| 2727 | |||
| 2728 | SDL_memcpy(¤tPipelineState->shader_constants, shader_constants, sizeof(*shader_constants)); | ||
| 2729 | } | ||
| 2730 | |||
| 2731 | return true; | ||
| 2732 | } | ||
| 2733 | |||
| 2734 | static bool D3D12_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const Float4X4 *matrix) | ||
| 2735 | { | ||
| 2736 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 2737 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2738 | D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal; | ||
| 2739 | D3D12_CPU_DESCRIPTOR_HANDLE *textureSampler; | ||
| 2740 | D3D12_PixelShaderConstants constants; | ||
| 2741 | |||
| 2742 | if (!textureData) { | ||
| 2743 | return SDL_SetError("Texture is not currently available"); | ||
| 2744 | } | ||
| 2745 | |||
| 2746 | D3D12_SetupShaderConstants(renderer, cmd, texture, &constants); | ||
| 2747 | |||
| 2748 | switch (textureData->scaleMode) { | ||
| 2749 | case D3D12_FILTER_MIN_MAG_MIP_POINT: | ||
| 2750 | switch (cmd->data.draw.texture_address_mode) { | ||
| 2751 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 2752 | textureSampler = &rendererData->samplers[D3D12_SAMPLER_NEAREST_CLAMP]; | ||
| 2753 | break; | ||
| 2754 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 2755 | textureSampler = &rendererData->samplers[D3D12_SAMPLER_NEAREST_WRAP]; | ||
| 2756 | break; | ||
| 2757 | default: | ||
| 2758 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 2759 | } | ||
| 2760 | break; | ||
| 2761 | case D3D12_FILTER_MIN_MAG_MIP_LINEAR: | ||
| 2762 | switch (cmd->data.draw.texture_address_mode) { | ||
| 2763 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 2764 | textureSampler = &rendererData->samplers[D3D12_SAMPLER_LINEAR_CLAMP]; | ||
| 2765 | break; | ||
| 2766 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 2767 | textureSampler = &rendererData->samplers[D3D12_SAMPLER_LINEAR_WRAP]; | ||
| 2768 | break; | ||
| 2769 | default: | ||
| 2770 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 2771 | } | ||
| 2772 | break; | ||
| 2773 | default: | ||
| 2774 | return SDL_SetError("Unknown scale mode: %d", textureData->scaleMode); | ||
| 2775 | } | ||
| 2776 | #ifdef SDL_HAVE_YUV | ||
| 2777 | if (textureData->yuv) { | ||
| 2778 | D3D12_CPU_DESCRIPTOR_HANDLE shaderResources[3]; | ||
| 2779 | |||
| 2780 | shaderResources[0] = textureData->mainTextureResourceView; | ||
| 2781 | shaderResources[1] = textureData->mainTextureResourceViewU; | ||
| 2782 | shaderResources[2] = textureData->mainTextureResourceViewV; | ||
| 2783 | |||
| 2784 | // Make sure each texture is in the correct state to be accessed by the pixel shader. | ||
| 2785 | D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2786 | textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2787 | D3D12_TransitionResource(rendererData, textureData->mainTextureU, textureData->mainResourceStateU, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2788 | textureData->mainResourceStateU = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2789 | D3D12_TransitionResource(rendererData, textureData->mainTextureV, textureData->mainResourceStateV, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2790 | textureData->mainResourceStateV = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2791 | |||
| 2792 | return D3D12_SetDrawState(renderer, cmd, textureData->shader, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, SDL_arraysize(shaderResources), shaderResources, textureSampler, matrix); | ||
| 2793 | } else if (textureData->nv12) { | ||
| 2794 | D3D12_CPU_DESCRIPTOR_HANDLE shaderResources[2]; | ||
| 2795 | |||
| 2796 | shaderResources[0] = textureData->mainTextureResourceView; | ||
| 2797 | shaderResources[1] = textureData->mainTextureResourceViewNV; | ||
| 2798 | |||
| 2799 | // Make sure each texture is in the correct state to be accessed by the pixel shader. | ||
| 2800 | D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2801 | textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2802 | |||
| 2803 | return D3D12_SetDrawState(renderer, cmd, textureData->shader, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, SDL_arraysize(shaderResources), shaderResources, textureSampler, matrix); | ||
| 2804 | } | ||
| 2805 | #endif // SDL_HAVE_YUV | ||
| 2806 | D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); | ||
| 2807 | textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; | ||
| 2808 | return D3D12_SetDrawState(renderer, cmd, textureData->shader, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, 1, &textureData->mainTextureResourceView, textureSampler, matrix); | ||
| 2809 | } | ||
| 2810 | |||
| 2811 | static void D3D12_DrawPrimitives(SDL_Renderer *renderer, D3D12_PRIMITIVE_TOPOLOGY primitiveTopology, const size_t vertexStart, const size_t vertexCount) | ||
| 2812 | { | ||
| 2813 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2814 | ID3D12GraphicsCommandList2_IASetPrimitiveTopology(rendererData->commandList, primitiveTopology); | ||
| 2815 | ID3D12GraphicsCommandList2_DrawInstanced(rendererData->commandList, (UINT)vertexCount, 1, (UINT)vertexStart, 0); | ||
| 2816 | } | ||
| 2817 | |||
| 2818 | static void D3D12_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 2819 | { | ||
| 2820 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 2821 | data->currentRenderTargetView.ptr = 0; | ||
| 2822 | data->currentShaderResource.ptr = 0; | ||
| 2823 | data->currentSampler.ptr = 0; | ||
| 2824 | data->cliprectDirty = true; | ||
| 2825 | data->viewportDirty = true; | ||
| 2826 | } | ||
| 2827 | |||
| 2828 | static bool D3D12_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 2829 | { | ||
| 2830 | D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal; | ||
| 2831 | const int viewportRotation = D3D12_GetRotationForCurrentRenderTarget(renderer); | ||
| 2832 | |||
| 2833 | if (!rendererData->d3dDevice) { | ||
| 2834 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 2835 | } | ||
| 2836 | |||
| 2837 | if (rendererData->pixelSizeChanged) { | ||
| 2838 | D3D12_UpdateForWindowSizeChange(renderer); | ||
| 2839 | rendererData->pixelSizeChanged = false; | ||
| 2840 | } | ||
| 2841 | |||
| 2842 | if (rendererData->currentViewportRotation != viewportRotation) { | ||
| 2843 | rendererData->currentViewportRotation = viewportRotation; | ||
| 2844 | rendererData->viewportDirty = true; | ||
| 2845 | } | ||
| 2846 | |||
| 2847 | if (!D3D12_UpdateVertexBuffer(renderer, vertices, vertsize)) { | ||
| 2848 | return false; | ||
| 2849 | } | ||
| 2850 | |||
| 2851 | while (cmd) { | ||
| 2852 | switch (cmd->command) { | ||
| 2853 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 2854 | { | ||
| 2855 | break; // this isn't currently used in this render backend. | ||
| 2856 | } | ||
| 2857 | |||
| 2858 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 2859 | { | ||
| 2860 | SDL_Rect *viewport = &rendererData->currentViewport; | ||
| 2861 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 2862 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 2863 | rendererData->viewportDirty = true; | ||
| 2864 | rendererData->cliprectDirty = true; | ||
| 2865 | } | ||
| 2866 | break; | ||
| 2867 | } | ||
| 2868 | |||
| 2869 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 2870 | { | ||
| 2871 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 2872 | SDL_Rect viewport_cliprect; | ||
| 2873 | if (rendererData->currentCliprectEnabled != cmd->data.cliprect.enabled) { | ||
| 2874 | rendererData->currentCliprectEnabled = cmd->data.cliprect.enabled; | ||
| 2875 | rendererData->cliprectDirty = true; | ||
| 2876 | } | ||
| 2877 | if (!rendererData->currentCliprectEnabled) { | ||
| 2878 | /* If the clip rect is disabled, then the scissor rect should be the whole viewport, | ||
| 2879 | since direct3d12 doesn't allow disabling the scissor rectangle */ | ||
| 2880 | viewport_cliprect.x = 0; | ||
| 2881 | viewport_cliprect.y = 0; | ||
| 2882 | viewport_cliprect.w = rendererData->currentViewport.w; | ||
| 2883 | viewport_cliprect.h = rendererData->currentViewport.h; | ||
| 2884 | rect = &viewport_cliprect; | ||
| 2885 | } | ||
| 2886 | if (SDL_memcmp(&rendererData->currentCliprect, rect, sizeof(*rect)) != 0) { | ||
| 2887 | SDL_copyp(&rendererData->currentCliprect, rect); | ||
| 2888 | rendererData->cliprectDirty = true; | ||
| 2889 | } | ||
| 2890 | break; | ||
| 2891 | } | ||
| 2892 | |||
| 2893 | case SDL_RENDERCMD_CLEAR: | ||
| 2894 | { | ||
| 2895 | D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = D3D12_GetCurrentRenderTargetView(renderer); | ||
| 2896 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 2897 | SDL_FColor color = cmd->data.color.color; | ||
| 2898 | if (convert_color) { | ||
| 2899 | SDL_ConvertToLinear(&color); | ||
| 2900 | } | ||
| 2901 | color.r *= cmd->data.color.color_scale; | ||
| 2902 | color.g *= cmd->data.color.color_scale; | ||
| 2903 | color.b *= cmd->data.color.color_scale; | ||
| 2904 | ID3D12GraphicsCommandList2_ClearRenderTargetView(rendererData->commandList, rtvDescriptor, &color.r, 0, NULL); | ||
| 2905 | break; | ||
| 2906 | } | ||
| 2907 | |||
| 2908 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 2909 | { | ||
| 2910 | const size_t count = cmd->data.draw.count; | ||
| 2911 | const size_t first = cmd->data.draw.first; | ||
| 2912 | const size_t start = first / sizeof(D3D12_VertexPositionColor); | ||
| 2913 | D3D12_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT, 0, NULL, NULL, NULL); | ||
| 2914 | D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_POINTLIST, start, count); | ||
| 2915 | break; | ||
| 2916 | } | ||
| 2917 | |||
| 2918 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 2919 | { | ||
| 2920 | const size_t count = cmd->data.draw.count; | ||
| 2921 | const size_t first = cmd->data.draw.first; | ||
| 2922 | const size_t start = first / sizeof(D3D12_VertexPositionColor); | ||
| 2923 | const D3D12_VertexPositionColor *verts = (D3D12_VertexPositionColor *)(((Uint8 *)vertices) + first); | ||
| 2924 | D3D12_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE, 0, NULL, NULL, NULL); | ||
| 2925 | D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, start, count); | ||
| 2926 | if (verts[0].pos.x != verts[count - 1].pos.x || verts[0].pos.y != verts[count - 1].pos.y) { | ||
| 2927 | D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_POINTLIST, start + (count - 1), 1); | ||
| 2928 | } | ||
| 2929 | break; | ||
| 2930 | } | ||
| 2931 | |||
| 2932 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 2933 | break; | ||
| 2934 | |||
| 2935 | case SDL_RENDERCMD_COPY: // unused | ||
| 2936 | break; | ||
| 2937 | |||
| 2938 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 2939 | break; | ||
| 2940 | |||
| 2941 | case SDL_RENDERCMD_GEOMETRY: | ||
| 2942 | { | ||
| 2943 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 2944 | const size_t count = cmd->data.draw.count; | ||
| 2945 | const size_t first = cmd->data.draw.first; | ||
| 2946 | const size_t start = first / sizeof(D3D12_VertexPositionColor); | ||
| 2947 | |||
| 2948 | if (texture) { | ||
| 2949 | D3D12_SetCopyState(renderer, cmd, NULL); | ||
| 2950 | } else { | ||
| 2951 | D3D12_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, 0, NULL, NULL, NULL); | ||
| 2952 | } | ||
| 2953 | |||
| 2954 | D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, start, count); | ||
| 2955 | break; | ||
| 2956 | } | ||
| 2957 | |||
| 2958 | case SDL_RENDERCMD_NO_OP: | ||
| 2959 | break; | ||
| 2960 | } | ||
| 2961 | |||
| 2962 | cmd = cmd->next; | ||
| 2963 | } | ||
| 2964 | |||
| 2965 | return true; | ||
| 2966 | } | ||
| 2967 | |||
| 2968 | static SDL_Surface *D3D12_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 2969 | { | ||
| 2970 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 2971 | ID3D12Resource *backBuffer = NULL; | ||
| 2972 | ID3D12Resource *readbackBuffer = NULL; | ||
| 2973 | HRESULT result; | ||
| 2974 | D3D12_RESOURCE_DESC textureDesc; | ||
| 2975 | D3D12_RESOURCE_DESC readbackDesc; | ||
| 2976 | D3D12_HEAP_PROPERTIES heapProps; | ||
| 2977 | D3D12_RECT srcRect = { 0, 0, 0, 0 }; | ||
| 2978 | D3D12_BOX srcBox; | ||
| 2979 | D3D12_TEXTURE_COPY_LOCATION dstLocation; | ||
| 2980 | D3D12_TEXTURE_COPY_LOCATION srcLocation; | ||
| 2981 | D3D12_PLACED_SUBRESOURCE_FOOTPRINT placedTextureDesc; | ||
| 2982 | D3D12_SUBRESOURCE_FOOTPRINT pitchedDesc; | ||
| 2983 | BYTE *textureMemory; | ||
| 2984 | int bpp; | ||
| 2985 | SDL_Surface *output = NULL; | ||
| 2986 | |||
| 2987 | if (data->textureRenderTarget) { | ||
| 2988 | backBuffer = data->textureRenderTarget->mainTexture; | ||
| 2989 | } else { | ||
| 2990 | backBuffer = data->renderTargets[data->currentBackBufferIndex]; | ||
| 2991 | } | ||
| 2992 | |||
| 2993 | // Create a staging texture to copy the screen's data to: | ||
| 2994 | SDL_zero(textureDesc); | ||
| 2995 | D3D_CALL_RET(backBuffer, GetDesc, &textureDesc); | ||
| 2996 | textureDesc.Width = rect->w; | ||
| 2997 | textureDesc.Height = rect->h; | ||
| 2998 | |||
| 2999 | SDL_zero(readbackDesc); | ||
| 3000 | readbackDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; | ||
| 3001 | readbackDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; | ||
| 3002 | readbackDesc.Height = 1; | ||
| 3003 | readbackDesc.DepthOrArraySize = 1; | ||
| 3004 | readbackDesc.MipLevels = 1; | ||
| 3005 | readbackDesc.Format = DXGI_FORMAT_UNKNOWN; | ||
| 3006 | readbackDesc.SampleDesc.Count = 1; | ||
| 3007 | readbackDesc.SampleDesc.Quality = 0; | ||
| 3008 | readbackDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; | ||
| 3009 | readbackDesc.Flags = D3D12_RESOURCE_FLAG_NONE; | ||
| 3010 | |||
| 3011 | // Figure out how much we need to allocate for the upload buffer | ||
| 3012 | ID3D12Device1_GetCopyableFootprints(data->d3dDevice, | ||
| 3013 | &textureDesc, | ||
| 3014 | 0, | ||
| 3015 | 1, | ||
| 3016 | 0, | ||
| 3017 | NULL, | ||
| 3018 | NULL, | ||
| 3019 | NULL, | ||
| 3020 | &readbackDesc.Width); | ||
| 3021 | |||
| 3022 | SDL_zero(heapProps); | ||
| 3023 | heapProps.Type = D3D12_HEAP_TYPE_READBACK; | ||
| 3024 | heapProps.CreationNodeMask = 1; | ||
| 3025 | heapProps.VisibleNodeMask = 1; | ||
| 3026 | |||
| 3027 | result = ID3D12Device1_CreateCommittedResource(data->d3dDevice, | ||
| 3028 | &heapProps, | ||
| 3029 | D3D12_HEAP_FLAG_NONE, | ||
| 3030 | &readbackDesc, | ||
| 3031 | D3D12_RESOURCE_STATE_COPY_DEST, | ||
| 3032 | NULL, | ||
| 3033 | D3D_GUID(SDL_IID_ID3D12Resource), | ||
| 3034 | (void **)&readbackBuffer); | ||
| 3035 | if (FAILED(result)) { | ||
| 3036 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateTexture2D [create staging texture]"), result); | ||
| 3037 | goto done; | ||
| 3038 | } | ||
| 3039 | |||
| 3040 | // Transition the render target to be copyable from | ||
| 3041 | D3D12_TransitionResource(data, backBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE); | ||
| 3042 | |||
| 3043 | // Copy the desired portion of the back buffer to the staging texture: | ||
| 3044 | if (!D3D12_GetViewportAlignedD3DRect(renderer, rect, &srcRect, FALSE)) { | ||
| 3045 | // D3D12_GetViewportAlignedD3DRect will have set the SDL error | ||
| 3046 | goto done; | ||
| 3047 | } | ||
| 3048 | srcBox.left = srcRect.left; | ||
| 3049 | srcBox.right = srcRect.right; | ||
| 3050 | srcBox.top = srcRect.top; | ||
| 3051 | srcBox.bottom = srcRect.bottom; | ||
| 3052 | srcBox.front = 0; | ||
| 3053 | srcBox.back = 1; | ||
| 3054 | |||
| 3055 | // Issue the copy texture region | ||
| 3056 | SDL_zero(pitchedDesc); | ||
| 3057 | pitchedDesc.Format = textureDesc.Format; | ||
| 3058 | pitchedDesc.Width = (UINT)textureDesc.Width; | ||
| 3059 | pitchedDesc.Height = textureDesc.Height; | ||
| 3060 | pitchedDesc.Depth = 1; | ||
| 3061 | bpp = SDL_BYTESPERPIXEL(D3D12_DXGIFormatToSDLPixelFormat(pitchedDesc.Format)); | ||
| 3062 | pitchedDesc.RowPitch = D3D12_Align(pitchedDesc.Width * bpp, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT); | ||
| 3063 | |||
| 3064 | SDL_zero(placedTextureDesc); | ||
| 3065 | placedTextureDesc.Offset = 0; | ||
| 3066 | placedTextureDesc.Footprint = pitchedDesc; | ||
| 3067 | |||
| 3068 | SDL_zero(dstLocation); | ||
| 3069 | dstLocation.pResource = readbackBuffer; | ||
| 3070 | dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; | ||
| 3071 | dstLocation.PlacedFootprint = placedTextureDesc; | ||
| 3072 | |||
| 3073 | SDL_zero(srcLocation); | ||
| 3074 | srcLocation.pResource = backBuffer; | ||
| 3075 | srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; | ||
| 3076 | srcLocation.SubresourceIndex = 0; | ||
| 3077 | |||
| 3078 | ID3D12GraphicsCommandList2_CopyTextureRegion(data->commandList, | ||
| 3079 | &dstLocation, | ||
| 3080 | 0, 0, 0, | ||
| 3081 | &srcLocation, | ||
| 3082 | &srcBox); | ||
| 3083 | |||
| 3084 | // We need to issue the command list for the copy to finish | ||
| 3085 | D3D12_IssueBatch(data); | ||
| 3086 | |||
| 3087 | // Transition the render target back to a render target | ||
| 3088 | D3D12_TransitionResource(data, backBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET); | ||
| 3089 | |||
| 3090 | // Map the staging texture's data to CPU-accessible memory: | ||
| 3091 | result = ID3D12Resource_Map(readbackBuffer, | ||
| 3092 | 0, | ||
| 3093 | NULL, | ||
| 3094 | (void **)&textureMemory); | ||
| 3095 | if (FAILED(result)) { | ||
| 3096 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [map staging texture]"), result); | ||
| 3097 | goto done; | ||
| 3098 | } | ||
| 3099 | |||
| 3100 | output = SDL_DuplicatePixels( | ||
| 3101 | rect->w, rect->h, | ||
| 3102 | D3D12_DXGIFormatToSDLPixelFormat(textureDesc.Format), | ||
| 3103 | renderer->target ? renderer->target->colorspace : renderer->output_colorspace, | ||
| 3104 | textureMemory, | ||
| 3105 | pitchedDesc.RowPitch); | ||
| 3106 | |||
| 3107 | // Unmap the texture: | ||
| 3108 | ID3D12Resource_Unmap(readbackBuffer, 0, NULL); | ||
| 3109 | |||
| 3110 | done: | ||
| 3111 | D3D_SAFE_RELEASE(readbackBuffer); | ||
| 3112 | return output; | ||
| 3113 | } | ||
| 3114 | |||
| 3115 | static bool D3D12_RenderPresent(SDL_Renderer *renderer) | ||
| 3116 | { | ||
| 3117 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 3118 | HRESULT result; | ||
| 3119 | |||
| 3120 | if (!data->d3dDevice) { | ||
| 3121 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 3122 | } | ||
| 3123 | |||
| 3124 | // Transition the render target to present state | ||
| 3125 | D3D12_TransitionResource(data, | ||
| 3126 | data->renderTargets[data->currentBackBufferIndex], | ||
| 3127 | D3D12_RESOURCE_STATE_RENDER_TARGET, | ||
| 3128 | D3D12_RESOURCE_STATE_PRESENT); | ||
| 3129 | |||
| 3130 | // Issue the command list | ||
| 3131 | result = ID3D12GraphicsCommandList2_Close(data->commandList); | ||
| 3132 | ID3D12CommandQueue_ExecuteCommandLists(data->commandQueue, 1, (ID3D12CommandList *const *)&data->commandList); | ||
| 3133 | |||
| 3134 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 3135 | result = D3D12_XBOX_PresentFrame(data->commandQueue, data->frameToken, data->renderTargets[data->currentBackBufferIndex]); | ||
| 3136 | #else | ||
| 3137 | /* The application may optionally specify "dirty" or "scroll" | ||
| 3138 | * rects to improve efficiency in certain scenarios. | ||
| 3139 | */ | ||
| 3140 | result = IDXGISwapChain_Present(data->swapChain, data->syncInterval, data->presentFlags); | ||
| 3141 | #endif | ||
| 3142 | |||
| 3143 | if (FAILED(result) && result != DXGI_ERROR_WAS_STILL_DRAWING) { | ||
| 3144 | /* If the device was removed either by a disconnect or a driver upgrade, we | ||
| 3145 | * must recreate all device resources. | ||
| 3146 | */ | ||
| 3147 | if (result == DXGI_ERROR_DEVICE_REMOVED) { | ||
| 3148 | if (D3D12_HandleDeviceLost(renderer)) { | ||
| 3149 | SDL_SetError("Present failed, device lost"); | ||
| 3150 | } else { | ||
| 3151 | // Recovering from device lost failed, error is already set | ||
| 3152 | } | ||
| 3153 | } else if (result == DXGI_ERROR_INVALID_CALL) { | ||
| 3154 | // We probably went through a fullscreen <-> windowed transition | ||
| 3155 | D3D12_CreateWindowSizeDependentResources(renderer); | ||
| 3156 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::Present"), result); | ||
| 3157 | } else { | ||
| 3158 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::Present"), result); | ||
| 3159 | } | ||
| 3160 | return false; | ||
| 3161 | } else { | ||
| 3162 | // Wait for the GPU and move to the next frame | ||
| 3163 | result = ID3D12CommandQueue_Signal(data->commandQueue, data->fence, data->fenceValue); | ||
| 3164 | |||
| 3165 | if (ID3D12Fence_GetCompletedValue(data->fence) < data->fenceValue) { | ||
| 3166 | result = ID3D12Fence_SetEventOnCompletion(data->fence, | ||
| 3167 | data->fenceValue, | ||
| 3168 | data->fenceEvent); | ||
| 3169 | WaitForSingleObjectEx(data->fenceEvent, INFINITE, FALSE); | ||
| 3170 | } | ||
| 3171 | |||
| 3172 | data->fenceValue++; | ||
| 3173 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 3174 | data->currentBackBufferIndex++; | ||
| 3175 | data->currentBackBufferIndex %= SDL_D3D12_NUM_BUFFERS; | ||
| 3176 | #else | ||
| 3177 | data->currentBackBufferIndex = IDXGISwapChain4_GetCurrentBackBufferIndex(data->swapChain); | ||
| 3178 | #endif | ||
| 3179 | |||
| 3180 | // Reset the command allocator and command list, and transition back to render target | ||
| 3181 | D3D12_ResetCommandList(data); | ||
| 3182 | D3D12_TransitionResource(data, | ||
| 3183 | data->renderTargets[data->currentBackBufferIndex], | ||
| 3184 | D3D12_RESOURCE_STATE_PRESENT, | ||
| 3185 | D3D12_RESOURCE_STATE_RENDER_TARGET); | ||
| 3186 | |||
| 3187 | #if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) | ||
| 3188 | D3D12_XBOX_StartFrame(data->d3dDevice, &data->frameToken); | ||
| 3189 | #endif | ||
| 3190 | return true; | ||
| 3191 | } | ||
| 3192 | } | ||
| 3193 | |||
| 3194 | static bool D3D12_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 3195 | { | ||
| 3196 | D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal; | ||
| 3197 | |||
| 3198 | if (vsync < 0) { | ||
| 3199 | return SDL_Unsupported(); | ||
| 3200 | } | ||
| 3201 | |||
| 3202 | if (vsync > 0) { | ||
| 3203 | data->syncInterval = vsync; | ||
| 3204 | data->presentFlags = 0; | ||
| 3205 | } else { | ||
| 3206 | data->syncInterval = 0; | ||
| 3207 | data->presentFlags = DXGI_PRESENT_ALLOW_TEARING; | ||
| 3208 | } | ||
| 3209 | return true; | ||
| 3210 | } | ||
| 3211 | |||
| 3212 | bool D3D12_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 3213 | { | ||
| 3214 | D3D12_RenderData *data; | ||
| 3215 | |||
| 3216 | HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); | ||
| 3217 | if (!hwnd) { | ||
| 3218 | return SDL_SetError("Couldn't get window handle"); | ||
| 3219 | } | ||
| 3220 | |||
| 3221 | if (SDL_GetWindowFlags(window) & SDL_WINDOW_TRANSPARENT) { | ||
| 3222 | // D3D12 removed the swap effect needed to support transparent windows, use D3D11 instead | ||
| 3223 | return SDL_SetError("The direct3d12 renderer doesn't work with transparent windows"); | ||
| 3224 | } | ||
| 3225 | |||
| 3226 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 3227 | |||
| 3228 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB && | ||
| 3229 | renderer->output_colorspace != SDL_COLORSPACE_SRGB_LINEAR | ||
| 3230 | /*&& renderer->output_colorspace != SDL_COLORSPACE_HDR10*/) { | ||
| 3231 | return SDL_SetError("Unsupported output colorspace"); | ||
| 3232 | } | ||
| 3233 | |||
| 3234 | data = (D3D12_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 3235 | if (!data) { | ||
| 3236 | return false; | ||
| 3237 | } | ||
| 3238 | |||
| 3239 | data->identity = MatrixIdentity(); | ||
| 3240 | |||
| 3241 | renderer->WindowEvent = D3D12_WindowEvent; | ||
| 3242 | renderer->SupportsBlendMode = D3D12_SupportsBlendMode; | ||
| 3243 | renderer->CreateTexture = D3D12_CreateTexture; | ||
| 3244 | renderer->UpdateTexture = D3D12_UpdateTexture; | ||
| 3245 | #ifdef SDL_HAVE_YUV | ||
| 3246 | renderer->UpdateTextureYUV = D3D12_UpdateTextureYUV; | ||
| 3247 | renderer->UpdateTextureNV = D3D12_UpdateTextureNV; | ||
| 3248 | #endif | ||
| 3249 | renderer->LockTexture = D3D12_LockTexture; | ||
| 3250 | renderer->UnlockTexture = D3D12_UnlockTexture; | ||
| 3251 | renderer->SetTextureScaleMode = D3D12_SetTextureScaleMode; | ||
| 3252 | renderer->SetRenderTarget = D3D12_SetRenderTarget; | ||
| 3253 | renderer->QueueSetViewport = D3D12_QueueNoOp; | ||
| 3254 | renderer->QueueSetDrawColor = D3D12_QueueNoOp; | ||
| 3255 | renderer->QueueDrawPoints = D3D12_QueueDrawPoints; | ||
| 3256 | renderer->QueueDrawLines = D3D12_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 3257 | renderer->QueueGeometry = D3D12_QueueGeometry; | ||
| 3258 | renderer->InvalidateCachedState = D3D12_InvalidateCachedState; | ||
| 3259 | renderer->RunCommandQueue = D3D12_RunCommandQueue; | ||
| 3260 | renderer->RenderReadPixels = D3D12_RenderReadPixels; | ||
| 3261 | renderer->RenderPresent = D3D12_RenderPresent; | ||
| 3262 | renderer->DestroyTexture = D3D12_DestroyTexture; | ||
| 3263 | renderer->DestroyRenderer = D3D12_DestroyRenderer; | ||
| 3264 | renderer->SetVSync = D3D12_SetVSync; | ||
| 3265 | renderer->internal = data; | ||
| 3266 | D3D12_InvalidateCachedState(renderer); | ||
| 3267 | |||
| 3268 | renderer->name = D3D12_RenderDriver.name; | ||
| 3269 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 3270 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 3271 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888); | ||
| 3272 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010); | ||
| 3273 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT); | ||
| 3274 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 3275 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 3276 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 3277 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 3278 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); | ||
| 3279 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384); | ||
| 3280 | |||
| 3281 | data->syncInterval = 0; | ||
| 3282 | data->presentFlags = DXGI_PRESENT_ALLOW_TEARING; | ||
| 3283 | |||
| 3284 | /* HACK: make sure the SDL_Renderer references the SDL_Window data now, in | ||
| 3285 | * order to give init functions access to the underlying window handle: | ||
| 3286 | */ | ||
| 3287 | renderer->window = window; | ||
| 3288 | |||
| 3289 | // Initialize Direct3D resources | ||
| 3290 | if (FAILED(D3D12_CreateDeviceResources(renderer))) { | ||
| 3291 | return false; | ||
| 3292 | } | ||
| 3293 | if (FAILED(D3D12_CreateWindowSizeDependentResources(renderer))) { | ||
| 3294 | return false; | ||
| 3295 | } | ||
| 3296 | |||
| 3297 | return true; | ||
| 3298 | } | ||
| 3299 | |||
| 3300 | SDL_RenderDriver D3D12_RenderDriver = { | ||
| 3301 | D3D12_CreateRenderer, "direct3d12" | ||
| 3302 | }; | ||
| 3303 | |||
| 3304 | // Ends C function definitions when using C++ | ||
| 3305 | #ifdef __cplusplus | ||
| 3306 | } | ||
| 3307 | #endif | ||
| 3308 | |||
| 3309 | #endif // SDL_VIDEO_RENDER_D3D12 | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp b/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp new file mode 100644 index 0000000..2ea3cf1 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp | |||
| @@ -0,0 +1,174 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #include "../../SDL_internal.h" | ||
| 23 | #if defined(SDL_VIDEO_RENDER_D3D12) && (defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)) | ||
| 24 | #include "SDL_render_d3d12_xbox.h" | ||
| 25 | #include "../../core/windows/SDL_windows.h" | ||
| 26 | #include <XGameRuntime.h> | ||
| 27 | |||
| 28 | #if defined(_MSC_VER) && !defined(__clang__) | ||
| 29 | #define SDL_COMPOSE_ERROR(str) __FUNCTION__ ", " str | ||
| 30 | #else | ||
| 31 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 32 | #endif | ||
| 33 | |||
| 34 | static const GUID SDL_IID_ID3D12Device1 = { 0x77acce80, 0x638e, 0x4e65, { 0x88, 0x95, 0xc1, 0xf2, 0x33, 0x86, 0x86, 0x3e } }; | ||
| 35 | static const GUID SDL_IID_ID3D12Resource = { 0x696442be, 0xa72e, 0x4059, { 0xbc, 0x79, 0x5b, 0x5c, 0x98, 0x04, 0x0f, 0xad } }; | ||
| 36 | static const GUID SDL_IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } }; | ||
| 37 | |||
| 38 | extern "C" | ||
| 39 | HRESULT D3D12_XBOX_CreateDevice(ID3D12Device **device, bool createDebug) | ||
| 40 | { | ||
| 41 | HRESULT result; | ||
| 42 | D3D12XBOX_CREATE_DEVICE_PARAMETERS params; | ||
| 43 | IDXGIDevice1 *dxgiDevice; | ||
| 44 | IDXGIAdapter *dxgiAdapter; | ||
| 45 | IDXGIOutput *dxgiOutput; | ||
| 46 | SDL_zero(params); | ||
| 47 | |||
| 48 | params.Version = D3D12_SDK_VERSION; | ||
| 49 | params.ProcessDebugFlags = createDebug ? D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED : D3D12XBOX_PROCESS_DEBUG_FLAG_NONE; | ||
| 50 | params.GraphicsCommandQueueRingSizeBytes = D3D12XBOX_DEFAULT_SIZE_BYTES; | ||
| 51 | params.GraphicsScratchMemorySizeBytes = D3D12XBOX_DEFAULT_SIZE_BYTES; | ||
| 52 | params.ComputeScratchMemorySizeBytes = D3D12XBOX_DEFAULT_SIZE_BYTES; | ||
| 53 | |||
| 54 | result = D3D12XboxCreateDevice(NULL, ¶ms, SDL_IID_ID3D12Device1, (void **) device); | ||
| 55 | if (FAILED(result)) { | ||
| 56 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] D3D12XboxCreateDevice"), result); | ||
| 57 | goto done; | ||
| 58 | } | ||
| 59 | |||
| 60 | result = (*device)->QueryInterface(SDL_IID_IDXGIDevice1, (void **) &dxgiDevice); | ||
| 61 | if (FAILED(result)) { | ||
| 62 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] ID3D12Device to IDXGIDevice1"), result); | ||
| 63 | goto done; | ||
| 64 | } | ||
| 65 | |||
| 66 | result = dxgiDevice->GetAdapter(&dxgiAdapter); | ||
| 67 | if (FAILED(result)) { | ||
| 68 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] dxgiDevice->GetAdapter"), result); | ||
| 69 | goto done; | ||
| 70 | } | ||
| 71 | |||
| 72 | result = dxgiAdapter->EnumOutputs(0, &dxgiOutput); | ||
| 73 | if (FAILED(result)) { | ||
| 74 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] dxgiAdapter->EnumOutputs"), result); | ||
| 75 | goto done; | ||
| 76 | } | ||
| 77 | |||
| 78 | // Set frame interval | ||
| 79 | result = (*device)->SetFrameIntervalX(dxgiOutput, D3D12XBOX_FRAME_INTERVAL_60_HZ, 1, D3D12XBOX_FRAME_INTERVAL_FLAG_NONE); | ||
| 80 | if (FAILED(result)) { | ||
| 81 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] SetFrameIntervalX"), result); | ||
| 82 | goto done; | ||
| 83 | } | ||
| 84 | |||
| 85 | result = (*device)->ScheduleFrameEventX(D3D12XBOX_FRAME_EVENT_ORIGIN, 0, NULL, D3D12XBOX_SCHEDULE_FRAME_EVENT_FLAG_NONE); | ||
| 86 | if (FAILED(result)) { | ||
| 87 | WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] ScheduleFrameEventX"), result); | ||
| 88 | goto done; | ||
| 89 | } | ||
| 90 | |||
| 91 | done: | ||
| 92 | return result; | ||
| 93 | } | ||
| 94 | |||
| 95 | extern "C" | ||
| 96 | HRESULT D3D12_XBOX_CreateBackBufferTarget(ID3D12Device1 *device, int width, int height, void **resource) | ||
| 97 | { | ||
| 98 | |||
| 99 | D3D12_HEAP_PROPERTIES heapProps; | ||
| 100 | D3D12_RESOURCE_DESC resourceDesc; | ||
| 101 | |||
| 102 | SDL_zero(heapProps); | ||
| 103 | heapProps.Type = D3D12_HEAP_TYPE_DEFAULT; | ||
| 104 | heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; | ||
| 105 | heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; | ||
| 106 | heapProps.CreationNodeMask = 1; | ||
| 107 | heapProps.VisibleNodeMask = 1; | ||
| 108 | |||
| 109 | SDL_zero(resourceDesc); | ||
| 110 | resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; | ||
| 111 | resourceDesc.Alignment = 0; | ||
| 112 | resourceDesc.Width = width; | ||
| 113 | resourceDesc.Height = height; | ||
| 114 | resourceDesc.DepthOrArraySize = 1; | ||
| 115 | resourceDesc.MipLevels = 1; | ||
| 116 | resourceDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; | ||
| 117 | resourceDesc.SampleDesc.Count = 1; | ||
| 118 | resourceDesc.SampleDesc.Quality = 0; | ||
| 119 | resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; | ||
| 120 | resourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; | ||
| 121 | |||
| 122 | return device->CreateCommittedResource(&heapProps, | ||
| 123 | D3D12_HEAP_FLAG_ALLOW_DISPLAY, | ||
| 124 | &resourceDesc, | ||
| 125 | D3D12_RESOURCE_STATE_PRESENT, | ||
| 126 | NULL, | ||
| 127 | SDL_IID_ID3D12Resource, | ||
| 128 | resource | ||
| 129 | ); | ||
| 130 | } | ||
| 131 | |||
| 132 | extern "C" | ||
| 133 | HRESULT D3D12_XBOX_StartFrame(ID3D12Device1 *device, UINT64 *outToken) | ||
| 134 | { | ||
| 135 | *outToken = D3D12XBOX_FRAME_PIPELINE_TOKEN_NULL; | ||
| 136 | return device->WaitFrameEventX(D3D12XBOX_FRAME_EVENT_ORIGIN, INFINITE, NULL, D3D12XBOX_WAIT_FRAME_EVENT_FLAG_NONE, outToken); | ||
| 137 | } | ||
| 138 | |||
| 139 | extern "C" | ||
| 140 | HRESULT D3D12_XBOX_PresentFrame(ID3D12CommandQueue *commandQueue, UINT64 token, ID3D12Resource *renderTarget) | ||
| 141 | { | ||
| 142 | D3D12XBOX_PRESENT_PLANE_PARAMETERS planeParameters; | ||
| 143 | SDL_zero(planeParameters); | ||
| 144 | planeParameters.Token = token; | ||
| 145 | planeParameters.ResourceCount = 1; | ||
| 146 | planeParameters.ppResources = &renderTarget; | ||
| 147 | return commandQueue->PresentX(1, &planeParameters, NULL); | ||
| 148 | } | ||
| 149 | |||
| 150 | extern "C" | ||
| 151 | void D3D12_XBOX_GetResolution(Uint32 *width, Uint32 *height) | ||
| 152 | { | ||
| 153 | switch (XSystemGetDeviceType()) { | ||
| 154 | case XSystemDeviceType::XboxScarlettLockhart: | ||
| 155 | *width = 2560; | ||
| 156 | *height = 1440; | ||
| 157 | break; | ||
| 158 | |||
| 159 | case XSystemDeviceType::XboxOneX: | ||
| 160 | case XSystemDeviceType::XboxScarlettAnaconda: | ||
| 161 | case XSystemDeviceType::XboxOneXDevkit: | ||
| 162 | case XSystemDeviceType::XboxScarlettDevkit: | ||
| 163 | *width = 3840; | ||
| 164 | *height = 2160; | ||
| 165 | break; | ||
| 166 | |||
| 167 | default: | ||
| 168 | *width = 1920; | ||
| 169 | *height = 1080; | ||
| 170 | break; | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 174 | #endif // SDL_VIDEO_RENDER_D3D12 && (SDL_PLATFORM_XBOXONE || SDL_PLATFORM_XBOXSERIES) | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h b/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h new file mode 100644 index 0000000..947148e --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_render_d3d12_xbox_h_ | ||
| 23 | #define SDL_render_d3d12_xbox_h_ | ||
| 24 | |||
| 25 | #include "../../SDL_internal.h" | ||
| 26 | #include "../../video/directx/SDL_d3d12.h" | ||
| 27 | |||
| 28 | // Set up for C function definitions, even when using C++ | ||
| 29 | #ifdef __cplusplus | ||
| 30 | extern "C" { | ||
| 31 | #endif | ||
| 32 | |||
| 33 | extern HRESULT D3D12_XBOX_CreateDevice(ID3D12Device **device, bool createDebug); | ||
| 34 | extern HRESULT D3D12_XBOX_CreateBackBufferTarget(ID3D12Device1 *device, int width, int height, void **resource); | ||
| 35 | extern HRESULT D3D12_XBOX_StartFrame(ID3D12Device1 *device, UINT64 *outToken); | ||
| 36 | extern HRESULT D3D12_XBOX_PresentFrame(ID3D12CommandQueue *commandQueue, UINT64 token, ID3D12Resource *renderTarget); | ||
| 37 | extern void D3D12_XBOX_GetResolution(Uint32 *width, Uint32 *height); | ||
| 38 | |||
| 39 | // Ends C function definitions when using C++ | ||
| 40 | #ifdef __cplusplus | ||
| 41 | } | ||
| 42 | #endif | ||
| 43 | |||
| 44 | #endif | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c new file mode 100644 index 0000000..8d06db0 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c | |||
| @@ -0,0 +1,125 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #if defined(SDL_VIDEO_RENDER_D3D12) && !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) | ||
| 24 | |||
| 25 | #include "../../core/windows/SDL_windows.h" | ||
| 26 | #include "../../video/directx/SDL_d3d12.h" | ||
| 27 | |||
| 28 | #include "SDL_shaders_d3d12.h" | ||
| 29 | |||
| 30 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 31 | |||
| 32 | // The shaders here were compiled with compile_shaders.bat | ||
| 33 | |||
| 34 | #define g_main D3D12_PixelShader_Colors | ||
| 35 | #include "D3D12_PixelShader_Colors.h" | ||
| 36 | #undef g_main | ||
| 37 | |||
| 38 | #define g_main D3D12_PixelShader_Textures | ||
| 39 | #include "D3D12_PixelShader_Textures.h" | ||
| 40 | #undef g_main | ||
| 41 | |||
| 42 | #define g_main D3D12_PixelShader_Advanced | ||
| 43 | #include "D3D12_PixelShader_Advanced.h" | ||
| 44 | #undef g_main | ||
| 45 | |||
| 46 | |||
| 47 | #define g_mainColor D3D12_VertexShader_Colors | ||
| 48 | #include "D3D12_VertexShader_Color.h" | ||
| 49 | #undef g_mainColor | ||
| 50 | |||
| 51 | #define g_mainTexture D3D12_VertexShader_Textures | ||
| 52 | #include "D3D12_VertexShader_Texture.h" | ||
| 53 | #undef g_mainTexture | ||
| 54 | |||
| 55 | #define g_mainAdvanced D3D12_VertexShader_Advanced | ||
| 56 | #include "D3D12_VertexShader_Advanced.h" | ||
| 57 | #undef g_mainAdvanced | ||
| 58 | |||
| 59 | |||
| 60 | #define g_ColorRS D3D12_RootSig_Color | ||
| 61 | #include "D3D12_RootSig_Color.h" | ||
| 62 | #undef g_ColorRS | ||
| 63 | |||
| 64 | #define g_TextureRS D3D12_RootSig_Texture | ||
| 65 | #include "D3D12_RootSig_Texture.h" | ||
| 66 | #undef g_TextureRS | ||
| 67 | |||
| 68 | #define g_AdvancedRS D3D12_RootSig_Advanced | ||
| 69 | #include "D3D12_RootSig_Advanced.h" | ||
| 70 | #undef g_AdvancedRS | ||
| 71 | |||
| 72 | |||
| 73 | static struct | ||
| 74 | { | ||
| 75 | const void *ps_shader_data; | ||
| 76 | SIZE_T ps_shader_size; | ||
| 77 | const void *vs_shader_data; | ||
| 78 | SIZE_T vs_shader_size; | ||
| 79 | D3D12_RootSignature root_sig; | ||
| 80 | } D3D12_shaders[NUM_SHADERS] = { | ||
| 81 | { D3D12_PixelShader_Colors, sizeof(D3D12_PixelShader_Colors), | ||
| 82 | D3D12_VertexShader_Colors, sizeof(D3D12_VertexShader_Colors), | ||
| 83 | ROOTSIG_COLOR }, | ||
| 84 | { D3D12_PixelShader_Textures, sizeof(D3D12_PixelShader_Textures), | ||
| 85 | D3D12_VertexShader_Textures, sizeof(D3D12_VertexShader_Textures), | ||
| 86 | ROOTSIG_TEXTURE }, | ||
| 87 | { D3D12_PixelShader_Advanced, sizeof(D3D12_PixelShader_Advanced), | ||
| 88 | D3D12_VertexShader_Advanced, sizeof(D3D12_VertexShader_Advanced), | ||
| 89 | ROOTSIG_ADVANCED }, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static struct | ||
| 93 | { | ||
| 94 | const void *rs_shader_data; | ||
| 95 | SIZE_T rs_shader_size; | ||
| 96 | } D3D12_rootsigs[NUM_ROOTSIGS] = { | ||
| 97 | { D3D12_RootSig_Color, sizeof(D3D12_RootSig_Color) }, | ||
| 98 | { D3D12_RootSig_Texture, sizeof(D3D12_RootSig_Texture) }, | ||
| 99 | { D3D12_RootSig_Advanced, sizeof(D3D12_RootSig_Advanced) }, | ||
| 100 | }; | ||
| 101 | |||
| 102 | void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 103 | { | ||
| 104 | outBytecode->pShaderBytecode = D3D12_shaders[shader].vs_shader_data; | ||
| 105 | outBytecode->BytecodeLength = D3D12_shaders[shader].vs_shader_size; | ||
| 106 | } | ||
| 107 | |||
| 108 | void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 109 | { | ||
| 110 | outBytecode->pShaderBytecode = D3D12_shaders[shader].ps_shader_data; | ||
| 111 | outBytecode->BytecodeLength = D3D12_shaders[shader].ps_shader_size; | ||
| 112 | } | ||
| 113 | |||
| 114 | D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader) | ||
| 115 | { | ||
| 116 | return D3D12_shaders[shader].root_sig; | ||
| 117 | } | ||
| 118 | |||
| 119 | void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 120 | { | ||
| 121 | outBytecode->pShaderBytecode = D3D12_rootsigs[rootSig].rs_shader_data; | ||
| 122 | outBytecode->BytecodeLength = D3D12_rootsigs[rootSig].rs_shader_size; | ||
| 123 | } | ||
| 124 | |||
| 125 | #endif // SDL_VIDEO_RENDER_D3D12 && !SDL_PLATFORM_XBOXONE && !SDL_PLATFORM_XBOXSERIES | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h new file mode 100644 index 0000000..0250b97 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | // D3D12 shader implementation | ||
| 24 | |||
| 25 | // Set up for C function definitions, even when using C++ | ||
| 26 | #ifdef __cplusplus | ||
| 27 | extern "C" { | ||
| 28 | #endif | ||
| 29 | |||
| 30 | typedef enum | ||
| 31 | { | ||
| 32 | SHADER_SOLID, | ||
| 33 | SHADER_RGB, | ||
| 34 | SHADER_ADVANCED, | ||
| 35 | NUM_SHADERS | ||
| 36 | } D3D12_Shader; | ||
| 37 | |||
| 38 | typedef enum | ||
| 39 | { | ||
| 40 | ROOTSIG_COLOR, | ||
| 41 | ROOTSIG_TEXTURE, | ||
| 42 | ROOTSIG_ADVANCED, | ||
| 43 | NUM_ROOTSIGS | ||
| 44 | } D3D12_RootSignature; | ||
| 45 | |||
| 46 | extern void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode); | ||
| 47 | extern void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode); | ||
| 48 | extern D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader); | ||
| 49 | extern void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode); | ||
| 50 | |||
| 51 | // Ends C function definitions when using C++ | ||
| 52 | #ifdef __cplusplus | ||
| 53 | } | ||
| 54 | #endif | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp new file mode 100644 index 0000000..bc6146b --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp | |||
| @@ -0,0 +1,132 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "../../SDL_internal.h" | ||
| 22 | |||
| 23 | #if defined(SDL_VIDEO_RENDER_D3D12) && defined(SDL_PLATFORM_XBOXONE) | ||
| 24 | |||
| 25 | #include <SDL3/SDL_stdinc.h> | ||
| 26 | |||
| 27 | #include "../../core/windows/SDL_windows.h" | ||
| 28 | #include "../../video/directx/SDL_d3d12.h" | ||
| 29 | |||
| 30 | #include "SDL_shaders_d3d12.h" | ||
| 31 | |||
| 32 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 33 | |||
| 34 | // Shader blob headers are generated with a pre-build step using compile_shaders_xbox.bat | ||
| 35 | |||
| 36 | #define g_main D3D12_PixelShader_Colors | ||
| 37 | #include "D3D12_PixelShader_Colors_One.h" | ||
| 38 | #undef g_main | ||
| 39 | |||
| 40 | #define g_main D3D12_PixelShader_Textures | ||
| 41 | #include "D3D12_PixelShader_Textures_One.h" | ||
| 42 | #undef g_main | ||
| 43 | |||
| 44 | #define g_main D3D12_PixelShader_Advanced | ||
| 45 | #include "D3D12_PixelShader_Advanced_One.h" | ||
| 46 | #undef g_main | ||
| 47 | |||
| 48 | |||
| 49 | #define g_mainColor D3D12_VertexShader_Colors | ||
| 50 | #include "D3D12_VertexShader_Color_One.h" | ||
| 51 | #undef g_mainColor | ||
| 52 | |||
| 53 | #define g_mainTexture D3D12_VertexShader_Textures | ||
| 54 | #include "D3D12_VertexShader_Texture_One.h" | ||
| 55 | #undef g_mainTexture | ||
| 56 | |||
| 57 | #define g_mainAdvanced D3D12_VertexShader_Advanced | ||
| 58 | #include "D3D12_VertexShader_Advanced_One.h" | ||
| 59 | #undef g_mainAdvanced | ||
| 60 | |||
| 61 | |||
| 62 | #define g_ColorRS D3D12_RootSig_Color | ||
| 63 | #include "D3D12_RootSig_Color_One.h" | ||
| 64 | #undef g_ColorRS | ||
| 65 | |||
| 66 | #define g_TextureRS D3D12_RootSig_Texture | ||
| 67 | #include "D3D12_RootSig_Texture_One.h" | ||
| 68 | #undef g_TextureRS | ||
| 69 | |||
| 70 | #define g_AdvancedRS D3D12_RootSig_Advanced | ||
| 71 | #include "D3D12_RootSig_Advanced_One.h" | ||
| 72 | #undef g_AdvancedRS | ||
| 73 | |||
| 74 | |||
| 75 | static struct | ||
| 76 | { | ||
| 77 | const void *ps_shader_data; | ||
| 78 | SIZE_T ps_shader_size; | ||
| 79 | const void *vs_shader_data; | ||
| 80 | SIZE_T vs_shader_size; | ||
| 81 | D3D12_RootSignature root_sig; | ||
| 82 | } D3D12_shaders[NUM_SHADERS] = { | ||
| 83 | { D3D12_PixelShader_Colors, sizeof(D3D12_PixelShader_Colors), | ||
| 84 | D3D12_VertexShader_Colors, sizeof(D3D12_VertexShader_Colors), | ||
| 85 | ROOTSIG_COLOR }, | ||
| 86 | { D3D12_PixelShader_Textures, sizeof(D3D12_PixelShader_Textures), | ||
| 87 | D3D12_VertexShader_Textures, sizeof(D3D12_VertexShader_Textures), | ||
| 88 | ROOTSIG_TEXTURE }, | ||
| 89 | { D3D12_PixelShader_Advanced, sizeof(D3D12_PixelShader_Advanced), | ||
| 90 | D3D12_VertexShader_Advanced, sizeof(D3D12_VertexShader_Advanced), | ||
| 91 | ROOTSIG_ADVANCED }, | ||
| 92 | }; | ||
| 93 | |||
| 94 | static struct | ||
| 95 | { | ||
| 96 | const void *rs_shader_data; | ||
| 97 | SIZE_T rs_shader_size; | ||
| 98 | } D3D12_rootsigs[NUM_ROOTSIGS] = { | ||
| 99 | { D3D12_RootSig_Color, sizeof(D3D12_RootSig_Color) }, | ||
| 100 | { D3D12_RootSig_Texture, sizeof(D3D12_RootSig_Texture) }, | ||
| 101 | { D3D12_RootSig_Advanced, sizeof(D3D12_RootSig_Advanced) }, | ||
| 102 | }; | ||
| 103 | |||
| 104 | extern "C" | ||
| 105 | void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 106 | { | ||
| 107 | outBytecode->pShaderBytecode = D3D12_shaders[shader].vs_shader_data; | ||
| 108 | outBytecode->BytecodeLength = D3D12_shaders[shader].vs_shader_size; | ||
| 109 | } | ||
| 110 | |||
| 111 | extern "C" | ||
| 112 | void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 113 | { | ||
| 114 | outBytecode->pShaderBytecode = D3D12_shaders[shader].ps_shader_data; | ||
| 115 | outBytecode->BytecodeLength = D3D12_shaders[shader].ps_shader_size; | ||
| 116 | } | ||
| 117 | |||
| 118 | extern "C" | ||
| 119 | D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader) | ||
| 120 | { | ||
| 121 | return D3D12_shaders[shader].root_sig; | ||
| 122 | } | ||
| 123 | |||
| 124 | extern "C" | ||
| 125 | void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 126 | { | ||
| 127 | outBytecode->pShaderBytecode = D3D12_rootsigs[rootSig].rs_shader_data; | ||
| 128 | outBytecode->BytecodeLength = D3D12_rootsigs[rootSig].rs_shader_size; | ||
| 129 | } | ||
| 130 | |||
| 131 | #endif // SDL_VIDEO_RENDER_D3D12 && SDL_PLATFORM_XBOXONE | ||
| 132 | |||
diff --git a/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp new file mode 100644 index 0000000..6c1c037 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp | |||
| @@ -0,0 +1,133 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "../../SDL_internal.h" | ||
| 22 | |||
| 23 | #if defined(SDL_VIDEO_RENDER_D3D12) && defined(SDL_PLATFORM_XBOXSERIES) | ||
| 24 | |||
| 25 | #include <SDL3/SDL_stdinc.h> | ||
| 26 | |||
| 27 | #include "../../core/windows/SDL_windows.h" | ||
| 28 | #include "../../video/directx/SDL_d3d12.h" | ||
| 29 | |||
| 30 | #include "SDL_shaders_d3d12.h" | ||
| 31 | |||
| 32 | #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str | ||
| 33 | |||
| 34 | |||
| 35 | // Shader blob headers are generated with a pre-build step using compile_shaders_xbox.bat | ||
| 36 | |||
| 37 | #define g_main D3D12_PixelShader_Colors | ||
| 38 | #include "D3D12_PixelShader_Colors_Series.h" | ||
| 39 | #undef g_main | ||
| 40 | |||
| 41 | #define g_main D3D12_PixelShader_Textures | ||
| 42 | #include "D3D12_PixelShader_Textures_Series.h" | ||
| 43 | #undef g_main | ||
| 44 | |||
| 45 | #define g_main D3D12_PixelShader_Advanced | ||
| 46 | #include "D3D12_PixelShader_Advanced_Series.h" | ||
| 47 | #undef g_main | ||
| 48 | |||
| 49 | |||
| 50 | #define g_mainColor D3D12_VertexShader_Colors | ||
| 51 | #include "D3D12_VertexShader_Color_Series.h" | ||
| 52 | #undef g_mainColor | ||
| 53 | |||
| 54 | #define g_mainTexture D3D12_VertexShader_Textures | ||
| 55 | #include "D3D12_VertexShader_Texture_Series.h" | ||
| 56 | #undef g_mainTexture | ||
| 57 | |||
| 58 | #define g_mainAdvanced D3D12_VertexShader_Advanced | ||
| 59 | #include "D3D12_VertexShader_Advanced_Series.h" | ||
| 60 | #undef g_mainAdvanced | ||
| 61 | |||
| 62 | |||
| 63 | #define g_ColorRS D3D12_RootSig_Color | ||
| 64 | #include "D3D12_RootSig_Color_Series.h" | ||
| 65 | #undef g_ColorRS | ||
| 66 | |||
| 67 | #define g_TextureRS D3D12_RootSig_Texture | ||
| 68 | #include "D3D12_RootSig_Texture_Series.h" | ||
| 69 | #undef g_TextureRS | ||
| 70 | |||
| 71 | #define g_AdvancedRS D3D12_RootSig_Advanced | ||
| 72 | #include "D3D12_RootSig_Advanced_Series.h" | ||
| 73 | #undef g_AdvancedRS | ||
| 74 | |||
| 75 | |||
| 76 | static struct | ||
| 77 | { | ||
| 78 | const void *ps_shader_data; | ||
| 79 | SIZE_T ps_shader_size; | ||
| 80 | const void *vs_shader_data; | ||
| 81 | SIZE_T vs_shader_size; | ||
| 82 | D3D12_RootSignature root_sig; | ||
| 83 | } D3D12_shaders[NUM_SHADERS] = { | ||
| 84 | { D3D12_PixelShader_Colors, sizeof(D3D12_PixelShader_Colors), | ||
| 85 | D3D12_VertexShader_Colors, sizeof(D3D12_VertexShader_Colors), | ||
| 86 | ROOTSIG_COLOR }, | ||
| 87 | { D3D12_PixelShader_Textures, sizeof(D3D12_PixelShader_Textures), | ||
| 88 | D3D12_VertexShader_Textures, sizeof(D3D12_VertexShader_Textures), | ||
| 89 | ROOTSIG_TEXTURE }, | ||
| 90 | { D3D12_PixelShader_Advanced, sizeof(D3D12_PixelShader_Advanced), | ||
| 91 | D3D12_VertexShader_Advanced, sizeof(D3D12_VertexShader_Advanced), | ||
| 92 | ROOTSIG_ADVANCED }, | ||
| 93 | }; | ||
| 94 | |||
| 95 | static struct | ||
| 96 | { | ||
| 97 | const void *rs_shader_data; | ||
| 98 | SIZE_T rs_shader_size; | ||
| 99 | } D3D12_rootsigs[NUM_ROOTSIGS] = { | ||
| 100 | { D3D12_RootSig_Color, sizeof(D3D12_RootSig_Color) }, | ||
| 101 | { D3D12_RootSig_Texture, sizeof(D3D12_RootSig_Texture) }, | ||
| 102 | { D3D12_RootSig_Advanced, sizeof(D3D12_RootSig_Advanced) }, | ||
| 103 | }; | ||
| 104 | |||
| 105 | extern "C" | ||
| 106 | void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 107 | { | ||
| 108 | outBytecode->pShaderBytecode = D3D12_shaders[shader].vs_shader_data; | ||
| 109 | outBytecode->BytecodeLength = D3D12_shaders[shader].vs_shader_size; | ||
| 110 | } | ||
| 111 | |||
| 112 | extern "C" | ||
| 113 | void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 114 | { | ||
| 115 | outBytecode->pShaderBytecode = D3D12_shaders[shader].ps_shader_data; | ||
| 116 | outBytecode->BytecodeLength = D3D12_shaders[shader].ps_shader_size; | ||
| 117 | } | ||
| 118 | |||
| 119 | extern "C" | ||
| 120 | D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader) | ||
| 121 | { | ||
| 122 | return D3D12_shaders[shader].root_sig; | ||
| 123 | } | ||
| 124 | |||
| 125 | extern "C" | ||
| 126 | void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode) | ||
| 127 | { | ||
| 128 | outBytecode->pShaderBytecode = D3D12_rootsigs[rootSig].rs_shader_data; | ||
| 129 | outBytecode->BytecodeLength = D3D12_rootsigs[rootSig].rs_shader_size; | ||
| 130 | } | ||
| 131 | |||
| 132 | #endif // SDL_VIDEO_RENDER_D3D12 && SDL_PLATFORM_XBOXSERIES | ||
| 133 | |||
diff --git a/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat b/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat new file mode 100644 index 0000000..699fdf3 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | rem This script runs for the Windows build, but also via the _xbox variant with these vars set. | ||
| 2 | rem Make sure to default to building for Windows if they're not set. | ||
| 3 | if %DXC%.==. set DXC=dxc | ||
| 4 | if %SUFFIX%.==. set SUFFIX=.h | ||
| 5 | |||
| 6 | echo Building with %DXC% | ||
| 7 | echo Suffix %SUFFIX% | ||
| 8 | |||
| 9 | cd "%~dp0" | ||
| 10 | |||
| 11 | %DXC% -E main -T ps_6_0 -Fh D3D12_PixelShader_Colors%SUFFIX% D3D12_PixelShader_Colors.hlsl | ||
| 12 | %DXC% -E main -T ps_6_0 -Fh D3D12_PixelShader_Textures%SUFFIX% D3D12_PixelShader_Textures.hlsl | ||
| 13 | %DXC% -E main -T ps_6_0 -Fh D3D12_PixelShader_Advanced%SUFFIX% D3D12_PixelShader_Advanced.hlsl | ||
| 14 | |||
| 15 | %DXC% -E mainColor -T vs_6_0 -Fh D3D12_VertexShader_Color%SUFFIX% D3D12_VertexShader.hlsl | ||
| 16 | %DXC% -E mainTexture -T vs_6_0 -Fh D3D12_VertexShader_Texture%SUFFIX% D3D12_VertexShader.hlsl | ||
| 17 | %DXC% -E mainAdvanced -T vs_6_0 -Fh D3D12_VertexShader_Advanced%SUFFIX% D3D12_VertexShader.hlsl | ||
| 18 | |||
| 19 | %DXC% -E ColorRS -T rootsig_1_1 -rootsig-define ColorRS -Fh D3D12_RootSig_Color%SUFFIX% D3D12_VertexShader.hlsl | ||
| 20 | %DXC% -E TextureRS -T rootsig_1_1 -rootsig-define TextureRS -Fh D3D12_RootSig_Texture%SUFFIX% D3D12_VertexShader.hlsl | ||
| 21 | %DXC% -E AdvancedRS -T rootsig_1_1 -rootsig-define AdvancedRS -Fh D3D12_RootSig_Advanced%SUFFIX% D3D12_VertexShader.hlsl | ||
diff --git a/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat b/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat new file mode 100644 index 0000000..311b172 --- /dev/null +++ b/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | if %2.==one. goto setxboxone | ||
| 2 | rem Xbox Series compile | ||
| 3 | set DXC="%GameDKLatest%\GXDK\bin\Scarlett\DXC.exe" | ||
| 4 | set SUFFIX=_Series.h | ||
| 5 | goto startbuild | ||
| 6 | |||
| 7 | :setxboxone | ||
| 8 | set DXC="%GameDKLatest%\GXDK\bin\XboxOne\DXC.exe" | ||
| 9 | set SUFFIX=_One.h | ||
| 10 | |||
| 11 | :startbuild | ||
| 12 | |||
| 13 | call "%~dp0\compile_shaders.bat" | ||
diff --git a/SDL-3.2.8/src/render/gpu/SDL_gpu_util.h b/SDL-3.2.8/src/render/gpu/SDL_gpu_util.h new file mode 100644 index 0000000..ca32ce0 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/SDL_gpu_util.h | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_gpu_util_h_ | ||
| 23 | #define SDL_gpu_util_h_ | ||
| 24 | |||
| 25 | #define SDL_GPU_BLENDOP_INVALID ((SDL_GPUBlendOp)0x7fffffff) | ||
| 26 | #define SDL_GPU_BLENDFACTOR_INVALID ((SDL_GPUBlendFactor)0x7fffffff) | ||
| 27 | |||
| 28 | static SDL_INLINE SDL_GPUBlendFactor GPU_ConvertBlendFactor(SDL_BlendFactor factor) | ||
| 29 | { | ||
| 30 | switch (factor) { | ||
| 31 | case SDL_BLENDFACTOR_ZERO: | ||
| 32 | return SDL_GPU_BLENDFACTOR_ZERO; | ||
| 33 | case SDL_BLENDFACTOR_ONE: | ||
| 34 | return SDL_GPU_BLENDFACTOR_ONE; | ||
| 35 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 36 | return SDL_GPU_BLENDFACTOR_SRC_COLOR; | ||
| 37 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 38 | return SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_COLOR; | ||
| 39 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 40 | return SDL_GPU_BLENDFACTOR_SRC_ALPHA; | ||
| 41 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 42 | return SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA; | ||
| 43 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 44 | return SDL_GPU_BLENDFACTOR_DST_COLOR; | ||
| 45 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 46 | return SDL_GPU_BLENDFACTOR_ONE_MINUS_DST_COLOR; | ||
| 47 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 48 | return SDL_GPU_BLENDFACTOR_DST_ALPHA; | ||
| 49 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 50 | return SDL_GPU_BLENDFACTOR_ONE_MINUS_DST_ALPHA; | ||
| 51 | default: | ||
| 52 | return SDL_GPU_BLENDFACTOR_INVALID; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | static SDL_INLINE SDL_GPUBlendOp GPU_ConvertBlendOperation(SDL_BlendOperation operation) | ||
| 57 | { | ||
| 58 | switch (operation) { | ||
| 59 | case SDL_BLENDOPERATION_ADD: | ||
| 60 | return SDL_GPU_BLENDOP_ADD; | ||
| 61 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 62 | return SDL_GPU_BLENDOP_SUBTRACT; | ||
| 63 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 64 | return SDL_GPU_BLENDOP_REVERSE_SUBTRACT; | ||
| 65 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 66 | return SDL_GPU_BLENDOP_MIN; | ||
| 67 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 68 | return SDL_GPU_BLENDOP_MAX; | ||
| 69 | default: | ||
| 70 | return SDL_GPU_BLENDOP_INVALID; | ||
| 71 | } | ||
| 72 | } | ||
| 73 | |||
| 74 | #endif // SDL_gpu_util_h | ||
diff --git a/SDL-3.2.8/src/render/gpu/SDL_pipeline_gpu.c b/SDL-3.2.8/src/render/gpu/SDL_pipeline_gpu.c new file mode 100644 index 0000000..0783374 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/SDL_pipeline_gpu.c | |||
| @@ -0,0 +1,202 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_GPU | ||
| 24 | |||
| 25 | #include "SDL_gpu_util.h" | ||
| 26 | #include "SDL_pipeline_gpu.h" | ||
| 27 | |||
| 28 | #include "../SDL_sysrender.h" | ||
| 29 | |||
| 30 | struct GPU_PipelineCacheKeyStruct | ||
| 31 | { | ||
| 32 | Uint64 blend_mode : 28; | ||
| 33 | Uint64 frag_shader : 4; | ||
| 34 | Uint64 vert_shader : 4; | ||
| 35 | Uint64 attachment_format : 6; | ||
| 36 | Uint64 primitive_type : 3; | ||
| 37 | }; | ||
| 38 | |||
| 39 | typedef union GPU_PipelineCacheKeyConverter | ||
| 40 | { | ||
| 41 | struct GPU_PipelineCacheKeyStruct as_struct; | ||
| 42 | Uint64 as_uint64; | ||
| 43 | } GPU_PipelineCacheKeyConverter; | ||
| 44 | |||
| 45 | SDL_COMPILE_TIME_ASSERT(GPU_PipelineCacheKeyConverter_Size, sizeof(GPU_PipelineCacheKeyConverter) <= sizeof(Uint64)); | ||
| 46 | |||
| 47 | static Uint32 SDLCALL HashPipelineCacheKey(void *userdata, const void *key) | ||
| 48 | { | ||
| 49 | const GPU_PipelineParameters *params = (const GPU_PipelineParameters *) key; | ||
| 50 | GPU_PipelineCacheKeyConverter cvt; | ||
| 51 | cvt.as_uint64 = 0; | ||
| 52 | cvt.as_struct.blend_mode = params->blend_mode; | ||
| 53 | cvt.as_struct.frag_shader = params->frag_shader; | ||
| 54 | cvt.as_struct.vert_shader = params->vert_shader; | ||
| 55 | cvt.as_struct.attachment_format = params->attachment_format; | ||
| 56 | cvt.as_struct.primitive_type = params->primitive_type; | ||
| 57 | |||
| 58 | // 64-bit uint hash function stolen from taisei (which stole it from somewhere else) | ||
| 59 | Uint64 x = cvt.as_uint64; | ||
| 60 | x = (x ^ (x >> 30)) * UINT64_C(0xbf58476d1ce4e5b9); | ||
| 61 | x = (x ^ (x >> 27)) * UINT64_C(0x94d049bb133111eb); | ||
| 62 | x = x ^ (x >> 31); | ||
| 63 | return (Uint32)(x & 0xffffffff); | ||
| 64 | } | ||
| 65 | |||
| 66 | static bool SDLCALL MatchPipelineCacheKey(void *userdata, const void *a, const void *b) | ||
| 67 | { | ||
| 68 | return (SDL_memcmp(a, b, sizeof (GPU_PipelineParameters)) == 0); | ||
| 69 | } | ||
| 70 | |||
| 71 | static void SDLCALL DestroyPipelineCacheHashItem(void *userdata, const void *key, const void *value) | ||
| 72 | { | ||
| 73 | SDL_GPUGraphicsPipeline *pipeline = (SDL_GPUGraphicsPipeline *) value; | ||
| 74 | SDL_GPUDevice *device = (SDL_GPUDevice *) userdata; | ||
| 75 | SDL_ReleaseGPUGraphicsPipeline(device, pipeline); | ||
| 76 | SDL_free((GPU_PipelineParameters *) key); | ||
| 77 | } | ||
| 78 | |||
| 79 | bool GPU_InitPipelineCache(GPU_PipelineCache *cache, SDL_GPUDevice *device) | ||
| 80 | { | ||
| 81 | cache->table = SDL_CreateHashTable(0, false, HashPipelineCacheKey, MatchPipelineCacheKey, DestroyPipelineCacheHashItem, device); | ||
| 82 | return (cache->table != NULL); | ||
| 83 | } | ||
| 84 | |||
| 85 | void GPU_DestroyPipelineCache(GPU_PipelineCache *cache) | ||
| 86 | { | ||
| 87 | SDL_DestroyHashTable(cache->table); | ||
| 88 | } | ||
| 89 | |||
| 90 | static SDL_GPUGraphicsPipeline *MakePipeline(SDL_GPUDevice *device, GPU_Shaders *shaders, const GPU_PipelineParameters *params) | ||
| 91 | { | ||
| 92 | SDL_GPUColorTargetDescription ad; | ||
| 93 | SDL_zero(ad); | ||
| 94 | ad.format = params->attachment_format; | ||
| 95 | |||
| 96 | SDL_BlendMode blend = params->blend_mode; | ||
| 97 | ad.blend_state.enable_blend = blend != 0; | ||
| 98 | ad.blend_state.color_write_mask = 0xF; | ||
| 99 | ad.blend_state.alpha_blend_op = GPU_ConvertBlendOperation(SDL_GetBlendModeAlphaOperation(blend)); | ||
| 100 | ad.blend_state.dst_alpha_blendfactor = GPU_ConvertBlendFactor(SDL_GetBlendModeDstAlphaFactor(blend)); | ||
| 101 | ad.blend_state.src_alpha_blendfactor = GPU_ConvertBlendFactor(SDL_GetBlendModeSrcAlphaFactor(blend)); | ||
| 102 | ad.blend_state.color_blend_op = GPU_ConvertBlendOperation(SDL_GetBlendModeColorOperation(blend)); | ||
| 103 | ad.blend_state.dst_color_blendfactor = GPU_ConvertBlendFactor(SDL_GetBlendModeDstColorFactor(blend)); | ||
| 104 | ad.blend_state.src_color_blendfactor = GPU_ConvertBlendFactor(SDL_GetBlendModeSrcColorFactor(blend)); | ||
| 105 | |||
| 106 | SDL_GPUGraphicsPipelineCreateInfo pci; | ||
| 107 | SDL_zero(pci); | ||
| 108 | pci.target_info.has_depth_stencil_target = false; | ||
| 109 | pci.target_info.num_color_targets = 1; | ||
| 110 | pci.target_info.color_target_descriptions = &ad; | ||
| 111 | pci.vertex_shader = GPU_GetVertexShader(shaders, params->vert_shader); | ||
| 112 | pci.fragment_shader = GPU_GetFragmentShader(shaders, params->frag_shader); | ||
| 113 | pci.multisample_state.sample_count = SDL_GPU_SAMPLECOUNT_1; | ||
| 114 | pci.multisample_state.enable_mask = false; | ||
| 115 | pci.primitive_type = params->primitive_type; | ||
| 116 | |||
| 117 | pci.rasterizer_state.cull_mode = SDL_GPU_CULLMODE_NONE; | ||
| 118 | pci.rasterizer_state.fill_mode = SDL_GPU_FILLMODE_FILL; | ||
| 119 | pci.rasterizer_state.front_face = SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE; | ||
| 120 | |||
| 121 | SDL_GPUVertexBufferDescription vertex_buffer_desc; | ||
| 122 | SDL_zero(vertex_buffer_desc); | ||
| 123 | |||
| 124 | Uint32 num_attribs = 0; | ||
| 125 | SDL_GPUVertexAttribute attribs[4]; | ||
| 126 | SDL_zero(attribs); | ||
| 127 | |||
| 128 | bool have_attr_color = false; | ||
| 129 | bool have_attr_uv = false; | ||
| 130 | |||
| 131 | switch (params->vert_shader) { | ||
| 132 | case VERT_SHADER_TRI_TEXTURE: | ||
| 133 | have_attr_uv = true; | ||
| 134 | SDL_FALLTHROUGH; | ||
| 135 | case VERT_SHADER_TRI_COLOR: | ||
| 136 | have_attr_color = true; | ||
| 137 | SDL_FALLTHROUGH; | ||
| 138 | default: | ||
| 139 | break; | ||
| 140 | } | ||
| 141 | |||
| 142 | // Position | ||
| 143 | attribs[num_attribs].location = num_attribs; | ||
| 144 | attribs[num_attribs].format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2; | ||
| 145 | attribs[num_attribs].offset = vertex_buffer_desc.pitch; | ||
| 146 | vertex_buffer_desc.pitch += 2 * sizeof(float); | ||
| 147 | num_attribs++; | ||
| 148 | |||
| 149 | if (have_attr_color) { | ||
| 150 | // Color | ||
| 151 | attribs[num_attribs].location = num_attribs; | ||
| 152 | attribs[num_attribs].format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4; | ||
| 153 | attribs[num_attribs].offset = vertex_buffer_desc.pitch; | ||
| 154 | vertex_buffer_desc.pitch += 4 * sizeof(float); | ||
| 155 | num_attribs++; | ||
| 156 | } | ||
| 157 | |||
| 158 | if (have_attr_uv) { | ||
| 159 | // UVs | ||
| 160 | attribs[num_attribs].location = num_attribs; | ||
| 161 | attribs[num_attribs].format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2; | ||
| 162 | attribs[num_attribs].offset = vertex_buffer_desc.pitch; | ||
| 163 | vertex_buffer_desc.pitch += 2 * sizeof(float); | ||
| 164 | num_attribs++; | ||
| 165 | } | ||
| 166 | |||
| 167 | pci.vertex_input_state.num_vertex_attributes = num_attribs; | ||
| 168 | pci.vertex_input_state.vertex_attributes = attribs; | ||
| 169 | pci.vertex_input_state.num_vertex_buffers = 1; | ||
| 170 | pci.vertex_input_state.vertex_buffer_descriptions = &vertex_buffer_desc; | ||
| 171 | |||
| 172 | return SDL_CreateGPUGraphicsPipeline(device, &pci); | ||
| 173 | } | ||
| 174 | |||
| 175 | SDL_GPUGraphicsPipeline *GPU_GetPipeline(GPU_PipelineCache *cache, GPU_Shaders *shaders, SDL_GPUDevice *device, const GPU_PipelineParameters *params) | ||
| 176 | { | ||
| 177 | SDL_GPUGraphicsPipeline *pipeline = NULL; | ||
| 178 | if (!SDL_FindInHashTable(cache->table, params, (const void **) &pipeline)) { | ||
| 179 | bool inserted = false; | ||
| 180 | // !!! FIXME: why don't we have an SDL_alloc_copy function/macro? | ||
| 181 | GPU_PipelineParameters *paramscpy = (GPU_PipelineParameters *) SDL_malloc(sizeof (*paramscpy)); | ||
| 182 | if (paramscpy) { | ||
| 183 | SDL_copyp(paramscpy, params); | ||
| 184 | pipeline = MakePipeline(device, shaders, params); | ||
| 185 | if (pipeline) { | ||
| 186 | inserted = SDL_InsertIntoHashTable(cache->table, paramscpy, pipeline, false); | ||
| 187 | } | ||
| 188 | } | ||
| 189 | |||
| 190 | if (!inserted) { | ||
| 191 | SDL_free(paramscpy); | ||
| 192 | if (pipeline) { | ||
| 193 | SDL_ReleaseGPUGraphicsPipeline(device, pipeline); | ||
| 194 | pipeline = NULL; | ||
| 195 | } | ||
| 196 | } | ||
| 197 | } | ||
| 198 | |||
| 199 | return pipeline; | ||
| 200 | } | ||
| 201 | |||
| 202 | #endif // SDL_VIDEO_RENDER_GPU | ||
diff --git a/SDL-3.2.8/src/render/gpu/SDL_pipeline_gpu.h b/SDL-3.2.8/src/render/gpu/SDL_pipeline_gpu.h new file mode 100644 index 0000000..c3fc39b --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/SDL_pipeline_gpu.h | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_pipeline_gpu_h_ | ||
| 23 | #define SDL_pipeline_gpu_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | #include "SDL_shaders_gpu.h" | ||
| 28 | |||
| 29 | typedef struct GPU_PipelineParameters | ||
| 30 | { | ||
| 31 | SDL_BlendMode blend_mode; | ||
| 32 | GPU_FragmentShaderID frag_shader; | ||
| 33 | GPU_VertexShaderID vert_shader; | ||
| 34 | SDL_GPUTextureFormat attachment_format; | ||
| 35 | SDL_GPUPrimitiveType primitive_type; | ||
| 36 | } GPU_PipelineParameters; | ||
| 37 | |||
| 38 | typedef struct GPU_PipelineCache | ||
| 39 | { | ||
| 40 | SDL_HashTable *table; | ||
| 41 | } GPU_PipelineCache; | ||
| 42 | |||
| 43 | extern bool GPU_InitPipelineCache(GPU_PipelineCache *cache, SDL_GPUDevice *device); | ||
| 44 | extern void GPU_DestroyPipelineCache(GPU_PipelineCache *cache); | ||
| 45 | extern SDL_GPUGraphicsPipeline *GPU_GetPipeline(GPU_PipelineCache *cache, GPU_Shaders *shaders, SDL_GPUDevice *device, const GPU_PipelineParameters *params); | ||
| 46 | |||
| 47 | #endif // SDL_pipeline_gpu_h_ | ||
diff --git a/SDL-3.2.8/src/render/gpu/SDL_render_gpu.c b/SDL-3.2.8/src/render/gpu/SDL_render_gpu.c new file mode 100644 index 0000000..73c1dbe --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/SDL_render_gpu.c | |||
| @@ -0,0 +1,1276 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_GPU | ||
| 24 | |||
| 25 | #include "../../video/SDL_pixels_c.h" | ||
| 26 | #include "../SDL_d3dmath.h" | ||
| 27 | #include "../SDL_sysrender.h" | ||
| 28 | #include "SDL_gpu_util.h" | ||
| 29 | #include "SDL_pipeline_gpu.h" | ||
| 30 | #include "SDL_shaders_gpu.h" | ||
| 31 | |||
| 32 | typedef struct GPU_ShaderUniformData | ||
| 33 | { | ||
| 34 | Float4X4 mvp; | ||
| 35 | SDL_FColor color; | ||
| 36 | float texture_size[2]; | ||
| 37 | } GPU_ShaderUniformData; | ||
| 38 | |||
| 39 | typedef struct GPU_RenderData | ||
| 40 | { | ||
| 41 | SDL_GPUDevice *device; | ||
| 42 | GPU_Shaders shaders; | ||
| 43 | GPU_PipelineCache pipeline_cache; | ||
| 44 | |||
| 45 | struct | ||
| 46 | { | ||
| 47 | SDL_GPUTexture *texture; | ||
| 48 | SDL_GPUTextureFormat format; | ||
| 49 | Uint32 width; | ||
| 50 | Uint32 height; | ||
| 51 | } backbuffer; | ||
| 52 | |||
| 53 | struct | ||
| 54 | { | ||
| 55 | SDL_GPUSwapchainComposition composition; | ||
| 56 | SDL_GPUPresentMode present_mode; | ||
| 57 | } swapchain; | ||
| 58 | |||
| 59 | struct | ||
| 60 | { | ||
| 61 | SDL_GPUTransferBuffer *transfer_buf; | ||
| 62 | SDL_GPUBuffer *buffer; | ||
| 63 | Uint32 buffer_size; | ||
| 64 | } vertices; | ||
| 65 | |||
| 66 | struct | ||
| 67 | { | ||
| 68 | SDL_GPURenderPass *render_pass; | ||
| 69 | SDL_Texture *render_target; | ||
| 70 | SDL_GPUCommandBuffer *command_buffer; | ||
| 71 | SDL_GPUColorTargetInfo color_attachment; | ||
| 72 | SDL_GPUViewport viewport; | ||
| 73 | SDL_Rect scissor; | ||
| 74 | SDL_FColor draw_color; | ||
| 75 | bool scissor_enabled; | ||
| 76 | bool scissor_was_enabled; | ||
| 77 | GPU_ShaderUniformData shader_data; | ||
| 78 | } state; | ||
| 79 | |||
| 80 | SDL_GPUSampler *samplers[2][2]; | ||
| 81 | } GPU_RenderData; | ||
| 82 | |||
| 83 | typedef struct GPU_TextureData | ||
| 84 | { | ||
| 85 | SDL_GPUTexture *texture; | ||
| 86 | SDL_GPUTextureFormat format; | ||
| 87 | GPU_FragmentShaderID shader; | ||
| 88 | void *pixels; | ||
| 89 | int pitch; | ||
| 90 | SDL_Rect locked_rect; | ||
| 91 | } GPU_TextureData; | ||
| 92 | |||
| 93 | static bool GPU_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 94 | { | ||
| 95 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 96 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 97 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 98 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 99 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 100 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 101 | |||
| 102 | if (GPU_ConvertBlendFactor(srcColorFactor) == SDL_GPU_BLENDFACTOR_INVALID || | ||
| 103 | GPU_ConvertBlendFactor(srcAlphaFactor) == SDL_GPU_BLENDFACTOR_INVALID || | ||
| 104 | GPU_ConvertBlendOperation(colorOperation) == SDL_GPU_BLENDOP_INVALID || | ||
| 105 | GPU_ConvertBlendFactor(dstColorFactor) == SDL_GPU_BLENDFACTOR_INVALID || | ||
| 106 | GPU_ConvertBlendFactor(dstAlphaFactor) == SDL_GPU_BLENDFACTOR_INVALID || | ||
| 107 | GPU_ConvertBlendOperation(alphaOperation) == SDL_GPU_BLENDOP_INVALID) { | ||
| 108 | return false; | ||
| 109 | } | ||
| 110 | |||
| 111 | return true; | ||
| 112 | } | ||
| 113 | |||
| 114 | static SDL_GPUTextureFormat PixFormatToTexFormat(SDL_PixelFormat pixel_format) | ||
| 115 | { | ||
| 116 | switch (pixel_format) { | ||
| 117 | case SDL_PIXELFORMAT_BGRA32: | ||
| 118 | case SDL_PIXELFORMAT_BGRX32: | ||
| 119 | return SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM; | ||
| 120 | case SDL_PIXELFORMAT_RGBA32: | ||
| 121 | case SDL_PIXELFORMAT_RGBX32: | ||
| 122 | return SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; | ||
| 123 | |||
| 124 | // YUV TODO | ||
| 125 | case SDL_PIXELFORMAT_YV12: | ||
| 126 | case SDL_PIXELFORMAT_IYUV: | ||
| 127 | case SDL_PIXELFORMAT_NV12: | ||
| 128 | case SDL_PIXELFORMAT_NV21: | ||
| 129 | case SDL_PIXELFORMAT_UYVY: | ||
| 130 | default: | ||
| 131 | return SDL_GPU_TEXTUREFORMAT_INVALID; | ||
| 132 | } | ||
| 133 | } | ||
| 134 | |||
| 135 | static SDL_PixelFormat TexFormatToPixFormat(SDL_GPUTextureFormat tex_format) | ||
| 136 | { | ||
| 137 | switch (tex_format) { | ||
| 138 | case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM: | ||
| 139 | return SDL_PIXELFORMAT_RGBA32; | ||
| 140 | case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM: | ||
| 141 | return SDL_PIXELFORMAT_BGRA32; | ||
| 142 | case SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM: | ||
| 143 | return SDL_PIXELFORMAT_BGR565; | ||
| 144 | case SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM: | ||
| 145 | return SDL_PIXELFORMAT_BGRA5551; | ||
| 146 | case SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM: | ||
| 147 | return SDL_PIXELFORMAT_BGRA4444; | ||
| 148 | case SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM: | ||
| 149 | return SDL_PIXELFORMAT_ABGR2101010; | ||
| 150 | case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM: | ||
| 151 | return SDL_PIXELFORMAT_RGBA64; | ||
| 152 | case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM: | ||
| 153 | return SDL_PIXELFORMAT_RGBA32; | ||
| 154 | case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT: | ||
| 155 | return SDL_PIXELFORMAT_RGBA64_FLOAT; | ||
| 156 | case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT: | ||
| 157 | return SDL_PIXELFORMAT_RGBA128_FLOAT; | ||
| 158 | case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT: | ||
| 159 | return SDL_PIXELFORMAT_RGBA32; | ||
| 160 | case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT: | ||
| 161 | return SDL_PIXELFORMAT_RGBA64; | ||
| 162 | case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB: | ||
| 163 | return SDL_PIXELFORMAT_RGBA32; | ||
| 164 | case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB: | ||
| 165 | return SDL_PIXELFORMAT_BGRA32; | ||
| 166 | default: | ||
| 167 | return SDL_PIXELFORMAT_UNKNOWN; | ||
| 168 | } | ||
| 169 | } | ||
| 170 | |||
| 171 | static bool GPU_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 172 | { | ||
| 173 | GPU_RenderData *renderdata = (GPU_RenderData *)renderer->internal; | ||
| 174 | GPU_TextureData *data; | ||
| 175 | SDL_GPUTextureFormat format; | ||
| 176 | SDL_GPUTextureUsageFlags usage = SDL_GPU_TEXTUREUSAGE_SAMPLER; | ||
| 177 | |||
| 178 | format = PixFormatToTexFormat(texture->format); | ||
| 179 | |||
| 180 | if (format == SDL_GPU_TEXTUREFORMAT_INVALID) { | ||
| 181 | return SDL_SetError("Texture format %s not supported by SDL_GPU", | ||
| 182 | SDL_GetPixelFormatName(texture->format)); | ||
| 183 | } | ||
| 184 | |||
| 185 | data = (GPU_TextureData *)SDL_calloc(1, sizeof(*data)); | ||
| 186 | if (!data) { | ||
| 187 | return false; | ||
| 188 | } | ||
| 189 | |||
| 190 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 191 | size_t size; | ||
| 192 | data->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 193 | size = (size_t)texture->h * data->pitch; | ||
| 194 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 195 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 196 | // Need to add size for the U and V planes | ||
| 197 | size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2); | ||
| 198 | } | ||
| 199 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 200 | texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 201 | // Need to add size for the U/V plane | ||
| 202 | size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2); | ||
| 203 | } | ||
| 204 | data->pixels = SDL_calloc(1, size); | ||
| 205 | if (!data->pixels) { | ||
| 206 | SDL_free(data); | ||
| 207 | return false; | ||
| 208 | } | ||
| 209 | |||
| 210 | // TODO allocate a persistent transfer buffer | ||
| 211 | } | ||
| 212 | |||
| 213 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 214 | usage |= SDL_GPU_TEXTUREUSAGE_COLOR_TARGET; | ||
| 215 | } | ||
| 216 | |||
| 217 | texture->internal = data; | ||
| 218 | SDL_GPUTextureCreateInfo tci; | ||
| 219 | SDL_zero(tci); | ||
| 220 | tci.format = format; | ||
| 221 | tci.layer_count_or_depth = 1; | ||
| 222 | tci.num_levels = 1; | ||
| 223 | tci.usage = usage; | ||
| 224 | tci.width = texture->w; | ||
| 225 | tci.height = texture->h; | ||
| 226 | tci.sample_count = SDL_GPU_SAMPLECOUNT_1; | ||
| 227 | |||
| 228 | data->format = format; | ||
| 229 | data->texture = SDL_CreateGPUTexture(renderdata->device, &tci); | ||
| 230 | |||
| 231 | if (!data->texture) { | ||
| 232 | return false; | ||
| 233 | } | ||
| 234 | |||
| 235 | if (texture->format == SDL_PIXELFORMAT_RGBA32 || texture->format == SDL_PIXELFORMAT_BGRA32) { | ||
| 236 | data->shader = FRAG_SHADER_TEXTURE_RGBA; | ||
| 237 | } else { | ||
| 238 | data->shader = FRAG_SHADER_TEXTURE_RGB; | ||
| 239 | } | ||
| 240 | |||
| 241 | return true; | ||
| 242 | } | ||
| 243 | |||
| 244 | static bool GPU_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 245 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 246 | { | ||
| 247 | GPU_RenderData *renderdata = (GPU_RenderData *)renderer->internal; | ||
| 248 | GPU_TextureData *data = (GPU_TextureData *)texture->internal; | ||
| 249 | const Uint32 texturebpp = SDL_BYTESPERPIXEL(texture->format); | ||
| 250 | |||
| 251 | size_t row_size, data_size; | ||
| 252 | |||
| 253 | if (!SDL_size_mul_check_overflow(rect->w, texturebpp, &row_size) || | ||
| 254 | !SDL_size_mul_check_overflow(rect->h, row_size, &data_size)) { | ||
| 255 | return SDL_SetError("update size overflow"); | ||
| 256 | } | ||
| 257 | |||
| 258 | SDL_GPUTransferBufferCreateInfo tbci; | ||
| 259 | SDL_zero(tbci); | ||
| 260 | tbci.size = (Uint32)data_size; | ||
| 261 | tbci.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD; | ||
| 262 | |||
| 263 | SDL_GPUTransferBuffer *tbuf = SDL_CreateGPUTransferBuffer(renderdata->device, &tbci); | ||
| 264 | |||
| 265 | if (tbuf == NULL) { | ||
| 266 | return false; | ||
| 267 | } | ||
| 268 | |||
| 269 | Uint8 *output = SDL_MapGPUTransferBuffer(renderdata->device, tbuf, false); | ||
| 270 | |||
| 271 | if ((size_t)pitch == row_size) { | ||
| 272 | SDL_memcpy(output, pixels, data_size); | ||
| 273 | } else { | ||
| 274 | // FIXME is negative pitch supposed to work? | ||
| 275 | // If not, maybe use SDL_GPUTextureTransferInfo::pixels_per_row instead of this | ||
| 276 | const Uint8 *input = pixels; | ||
| 277 | |||
| 278 | for (int i = 0; i < rect->h; ++i) { | ||
| 279 | SDL_memcpy(output, input, row_size); | ||
| 280 | output += row_size; | ||
| 281 | input += pitch; | ||
| 282 | } | ||
| 283 | } | ||
| 284 | |||
| 285 | SDL_UnmapGPUTransferBuffer(renderdata->device, tbuf); | ||
| 286 | |||
| 287 | SDL_GPUCommandBuffer *cbuf = renderdata->state.command_buffer; | ||
| 288 | SDL_GPUCopyPass *cpass = SDL_BeginGPUCopyPass(cbuf); | ||
| 289 | |||
| 290 | SDL_GPUTextureTransferInfo tex_src; | ||
| 291 | SDL_zero(tex_src); | ||
| 292 | tex_src.transfer_buffer = tbuf; | ||
| 293 | tex_src.rows_per_layer = rect->h; | ||
| 294 | tex_src.pixels_per_row = rect->w; | ||
| 295 | |||
| 296 | SDL_GPUTextureRegion tex_dst; | ||
| 297 | SDL_zero(tex_dst); | ||
| 298 | tex_dst.texture = data->texture; | ||
| 299 | tex_dst.x = rect->x; | ||
| 300 | tex_dst.y = rect->y; | ||
| 301 | tex_dst.w = rect->w; | ||
| 302 | tex_dst.h = rect->h; | ||
| 303 | tex_dst.d = 1; | ||
| 304 | |||
| 305 | SDL_UploadToGPUTexture(cpass, &tex_src, &tex_dst, false); | ||
| 306 | SDL_EndGPUCopyPass(cpass); | ||
| 307 | SDL_ReleaseGPUTransferBuffer(renderdata->device, tbuf); | ||
| 308 | |||
| 309 | return true; | ||
| 310 | } | ||
| 311 | |||
| 312 | static bool GPU_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 313 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 314 | { | ||
| 315 | GPU_TextureData *data = (GPU_TextureData *)texture->internal; | ||
| 316 | |||
| 317 | data->locked_rect = *rect; | ||
| 318 | *pixels = | ||
| 319 | (void *)((Uint8 *)data->pixels + rect->y * data->pitch + | ||
| 320 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 321 | *pitch = data->pitch; | ||
| 322 | return true; | ||
| 323 | } | ||
| 324 | |||
| 325 | static void GPU_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 326 | { | ||
| 327 | GPU_TextureData *data = (GPU_TextureData *)texture->internal; | ||
| 328 | const SDL_Rect *rect; | ||
| 329 | void *pixels; | ||
| 330 | |||
| 331 | rect = &data->locked_rect; | ||
| 332 | pixels = | ||
| 333 | (void *)((Uint8 *)data->pixels + rect->y * data->pitch + | ||
| 334 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 335 | GPU_UpdateTexture(renderer, texture, rect, pixels, data->pitch); | ||
| 336 | } | ||
| 337 | |||
| 338 | static void GPU_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scale_mode) | ||
| 339 | { | ||
| 340 | // nothing to do in this backend. | ||
| 341 | } | ||
| 342 | |||
| 343 | static bool GPU_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 344 | { | ||
| 345 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 346 | |||
| 347 | data->state.render_target = texture; | ||
| 348 | |||
| 349 | return true; | ||
| 350 | } | ||
| 351 | |||
| 352 | static bool GPU_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 353 | { | ||
| 354 | return true; // nothing to do in this backend. | ||
| 355 | } | ||
| 356 | |||
| 357 | static SDL_FColor GetDrawCmdColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 358 | { | ||
| 359 | SDL_FColor color = cmd->data.color.color; | ||
| 360 | |||
| 361 | if (SDL_RenderingLinearSpace(renderer)) { | ||
| 362 | SDL_ConvertToLinear(&color); | ||
| 363 | } | ||
| 364 | |||
| 365 | color.r *= cmd->data.color.color_scale; | ||
| 366 | color.g *= cmd->data.color.color_scale; | ||
| 367 | color.b *= cmd->data.color.color_scale; | ||
| 368 | |||
| 369 | return color; | ||
| 370 | } | ||
| 371 | |||
| 372 | static bool GPU_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 373 | { | ||
| 374 | float *verts = (float *)SDL_AllocateRenderVertices(renderer, count * 2 * sizeof(float), 0, &cmd->data.draw.first); | ||
| 375 | |||
| 376 | if (!verts) { | ||
| 377 | return false; | ||
| 378 | } | ||
| 379 | |||
| 380 | cmd->data.draw.count = count; | ||
| 381 | for (int i = 0; i < count; i++) { | ||
| 382 | *(verts++) = 0.5f + points[i].x; | ||
| 383 | *(verts++) = 0.5f + points[i].y; | ||
| 384 | } | ||
| 385 | |||
| 386 | return true; | ||
| 387 | } | ||
| 388 | |||
| 389 | static bool GPU_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 390 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 391 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 392 | float scale_x, float scale_y) | ||
| 393 | { | ||
| 394 | int i; | ||
| 395 | int count = indices ? num_indices : num_vertices; | ||
| 396 | float *verts; | ||
| 397 | size_t sz = 2 * sizeof(float) + 4 * sizeof(float) + (texture ? 2 : 0) * sizeof(float); | ||
| 398 | const float color_scale = cmd->data.draw.color_scale; | ||
| 399 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 400 | |||
| 401 | verts = (float *)SDL_AllocateRenderVertices(renderer, count * sz, 0, &cmd->data.draw.first); | ||
| 402 | if (!verts) { | ||
| 403 | return false; | ||
| 404 | } | ||
| 405 | |||
| 406 | cmd->data.draw.count = count; | ||
| 407 | size_indices = indices ? size_indices : 0; | ||
| 408 | |||
| 409 | for (i = 0; i < count; i++) { | ||
| 410 | int j; | ||
| 411 | float *xy_; | ||
| 412 | SDL_FColor col_; | ||
| 413 | if (size_indices == 4) { | ||
| 414 | j = ((const Uint32 *)indices)[i]; | ||
| 415 | } else if (size_indices == 2) { | ||
| 416 | j = ((const Uint16 *)indices)[i]; | ||
| 417 | } else if (size_indices == 1) { | ||
| 418 | j = ((const Uint8 *)indices)[i]; | ||
| 419 | } else { | ||
| 420 | j = i; | ||
| 421 | } | ||
| 422 | |||
| 423 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 424 | |||
| 425 | *(verts++) = xy_[0] * scale_x; | ||
| 426 | *(verts++) = xy_[1] * scale_y; | ||
| 427 | |||
| 428 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 429 | if (convert_color) { | ||
| 430 | SDL_ConvertToLinear(&col_); | ||
| 431 | } | ||
| 432 | |||
| 433 | // FIXME: The Vulkan backend doesn't multiply by color_scale. GL does. I'm not sure which one is wrong. | ||
| 434 | // ANSWER: The color scale should be applied in linear space when using the scRGB colorspace. This is done in shaders in the Vulkan backend. | ||
| 435 | *(verts++) = col_.r * color_scale; | ||
| 436 | *(verts++) = col_.g * color_scale; | ||
| 437 | *(verts++) = col_.b * color_scale; | ||
| 438 | *(verts++) = col_.a; | ||
| 439 | |||
| 440 | if (texture) { | ||
| 441 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 442 | *(verts++) = uv_[0] * texture->w; | ||
| 443 | *(verts++) = uv_[1] * texture->h; | ||
| 444 | } | ||
| 445 | } | ||
| 446 | return true; | ||
| 447 | } | ||
| 448 | |||
| 449 | static void GPU_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 450 | { | ||
| 451 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 452 | |||
| 453 | data->state.render_target = NULL; | ||
| 454 | data->state.scissor_enabled = false; | ||
| 455 | } | ||
| 456 | |||
| 457 | static SDL_GPURenderPass *RestartRenderPass(GPU_RenderData *data) | ||
| 458 | { | ||
| 459 | if (data->state.render_pass) { | ||
| 460 | SDL_EndGPURenderPass(data->state.render_pass); | ||
| 461 | } | ||
| 462 | |||
| 463 | data->state.render_pass = SDL_BeginGPURenderPass( | ||
| 464 | data->state.command_buffer, &data->state.color_attachment, 1, NULL); | ||
| 465 | |||
| 466 | // *** FIXME *** | ||
| 467 | // This is busted. We should be able to know which load op to use. | ||
| 468 | // LOAD is incorrect behavior most of the time, unless we had to break a render pass. | ||
| 469 | // -cosmonaut | ||
| 470 | data->state.color_attachment.load_op = SDL_GPU_LOADOP_LOAD; | ||
| 471 | data->state.scissor_was_enabled = false; | ||
| 472 | |||
| 473 | return data->state.render_pass; | ||
| 474 | } | ||
| 475 | |||
| 476 | static void PushUniforms(GPU_RenderData *data, SDL_RenderCommand *cmd) | ||
| 477 | { | ||
| 478 | GPU_ShaderUniformData uniforms; | ||
| 479 | SDL_zero(uniforms); | ||
| 480 | uniforms.mvp.m[0][0] = 2.0f / data->state.viewport.w; | ||
| 481 | uniforms.mvp.m[1][1] = -2.0f / data->state.viewport.h; | ||
| 482 | uniforms.mvp.m[2][2] = 1.0f; | ||
| 483 | uniforms.mvp.m[3][0] = -1.0f; | ||
| 484 | uniforms.mvp.m[3][1] = 1.0f; | ||
| 485 | uniforms.mvp.m[3][3] = 1.0f; | ||
| 486 | |||
| 487 | uniforms.color = data->state.draw_color; | ||
| 488 | |||
| 489 | if (cmd->data.draw.texture) { | ||
| 490 | uniforms.texture_size[0] = cmd->data.draw.texture->w; | ||
| 491 | uniforms.texture_size[1] = cmd->data.draw.texture->h; | ||
| 492 | } | ||
| 493 | |||
| 494 | SDL_PushGPUVertexUniformData(data->state.command_buffer, 0, &uniforms, sizeof(uniforms)); | ||
| 495 | } | ||
| 496 | |||
| 497 | static SDL_GPUSampler **SamplerPointer( | ||
| 498 | GPU_RenderData *data, SDL_TextureAddressMode address_mode, SDL_ScaleMode scale_mode) | ||
| 499 | { | ||
| 500 | return &data->samplers[scale_mode][address_mode - 1]; | ||
| 501 | } | ||
| 502 | |||
| 503 | static void SetViewportAndScissor(GPU_RenderData *data) | ||
| 504 | { | ||
| 505 | SDL_SetGPUViewport(data->state.render_pass, &data->state.viewport); | ||
| 506 | |||
| 507 | if (data->state.scissor_enabled) { | ||
| 508 | SDL_SetGPUScissor(data->state.render_pass, &data->state.scissor); | ||
| 509 | data->state.scissor_was_enabled = true; | ||
| 510 | } else if (data->state.scissor_was_enabled) { | ||
| 511 | SDL_Rect r; | ||
| 512 | r.x = (int)data->state.viewport.x; | ||
| 513 | r.y = (int)data->state.viewport.y; | ||
| 514 | r.w = (int)data->state.viewport.w; | ||
| 515 | r.h = (int)data->state.viewport.h; | ||
| 516 | SDL_SetGPUScissor(data->state.render_pass, &r); | ||
| 517 | data->state.scissor_was_enabled = false; | ||
| 518 | } | ||
| 519 | } | ||
| 520 | |||
| 521 | static void Draw( | ||
| 522 | GPU_RenderData *data, SDL_RenderCommand *cmd, | ||
| 523 | Uint32 num_verts, | ||
| 524 | Uint32 offset, | ||
| 525 | SDL_GPUPrimitiveType prim) | ||
| 526 | { | ||
| 527 | if (!data->state.render_pass || data->state.color_attachment.load_op == SDL_GPU_LOADOP_CLEAR) { | ||
| 528 | RestartRenderPass(data); | ||
| 529 | } | ||
| 530 | |||
| 531 | GPU_VertexShaderID v_shader; | ||
| 532 | GPU_FragmentShaderID f_shader; | ||
| 533 | SDL_GPURenderPass *pass = data->state.render_pass; | ||
| 534 | GPU_TextureData *tdata = NULL; | ||
| 535 | |||
| 536 | if (cmd->data.draw.texture) { | ||
| 537 | tdata = (GPU_TextureData *)cmd->data.draw.texture->internal; | ||
| 538 | } | ||
| 539 | |||
| 540 | if (prim == SDL_GPU_PRIMITIVETYPE_TRIANGLELIST) { | ||
| 541 | if (cmd->data.draw.texture) { | ||
| 542 | v_shader = VERT_SHADER_TRI_TEXTURE; | ||
| 543 | f_shader = tdata->shader; | ||
| 544 | } else { | ||
| 545 | v_shader = VERT_SHADER_TRI_COLOR; | ||
| 546 | f_shader = FRAG_SHADER_COLOR; | ||
| 547 | } | ||
| 548 | } else { | ||
| 549 | v_shader = VERT_SHADER_LINEPOINT; | ||
| 550 | f_shader = FRAG_SHADER_COLOR; | ||
| 551 | } | ||
| 552 | |||
| 553 | GPU_PipelineParameters pipe_params; | ||
| 554 | SDL_zero(pipe_params); | ||
| 555 | pipe_params.blend_mode = cmd->data.draw.blend; | ||
| 556 | pipe_params.vert_shader = v_shader; | ||
| 557 | pipe_params.frag_shader = f_shader; | ||
| 558 | pipe_params.primitive_type = prim; | ||
| 559 | |||
| 560 | if (data->state.render_target) { | ||
| 561 | pipe_params.attachment_format = ((GPU_TextureData *)data->state.render_target->internal)->format; | ||
| 562 | } else { | ||
| 563 | pipe_params.attachment_format = data->backbuffer.format; | ||
| 564 | } | ||
| 565 | |||
| 566 | SDL_GPUGraphicsPipeline *pipe = GPU_GetPipeline(&data->pipeline_cache, &data->shaders, data->device, &pipe_params); | ||
| 567 | |||
| 568 | if (!pipe) { | ||
| 569 | return; | ||
| 570 | } | ||
| 571 | |||
| 572 | SetViewportAndScissor(data); | ||
| 573 | SDL_BindGPUGraphicsPipeline(data->state.render_pass, pipe); | ||
| 574 | |||
| 575 | if (tdata) { | ||
| 576 | SDL_GPUTextureSamplerBinding sampler_bind; | ||
| 577 | SDL_zero(sampler_bind); | ||
| 578 | sampler_bind.sampler = *SamplerPointer(data, cmd->data.draw.texture_address_mode, cmd->data.draw.texture->scaleMode); | ||
| 579 | sampler_bind.texture = tdata->texture; | ||
| 580 | SDL_BindGPUFragmentSamplers(pass, 0, &sampler_bind, 1); | ||
| 581 | } | ||
| 582 | |||
| 583 | SDL_GPUBufferBinding buffer_bind; | ||
| 584 | SDL_zero(buffer_bind); | ||
| 585 | buffer_bind.buffer = data->vertices.buffer; | ||
| 586 | buffer_bind.offset = offset; | ||
| 587 | |||
| 588 | SDL_BindGPUVertexBuffers(pass, 0, &buffer_bind, 1); | ||
| 589 | PushUniforms(data, cmd); | ||
| 590 | SDL_DrawGPUPrimitives(data->state.render_pass, num_verts, 1, 0, 0); | ||
| 591 | } | ||
| 592 | |||
| 593 | static void ReleaseVertexBuffer(GPU_RenderData *data) | ||
| 594 | { | ||
| 595 | if (data->vertices.buffer) { | ||
| 596 | SDL_ReleaseGPUBuffer(data->device, data->vertices.buffer); | ||
| 597 | } | ||
| 598 | |||
| 599 | if (data->vertices.transfer_buf) { | ||
| 600 | SDL_ReleaseGPUTransferBuffer(data->device, data->vertices.transfer_buf); | ||
| 601 | } | ||
| 602 | |||
| 603 | data->vertices.buffer_size = 0; | ||
| 604 | } | ||
| 605 | |||
| 606 | static bool InitVertexBuffer(GPU_RenderData *data, Uint32 size) | ||
| 607 | { | ||
| 608 | SDL_GPUBufferCreateInfo bci; | ||
| 609 | SDL_zero(bci); | ||
| 610 | bci.size = size; | ||
| 611 | bci.usage = SDL_GPU_BUFFERUSAGE_VERTEX; | ||
| 612 | |||
| 613 | data->vertices.buffer = SDL_CreateGPUBuffer(data->device, &bci); | ||
| 614 | |||
| 615 | if (!data->vertices.buffer) { | ||
| 616 | return false; | ||
| 617 | } | ||
| 618 | |||
| 619 | SDL_GPUTransferBufferCreateInfo tbci; | ||
| 620 | SDL_zero(tbci); | ||
| 621 | tbci.size = size; | ||
| 622 | tbci.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD; | ||
| 623 | |||
| 624 | data->vertices.transfer_buf = SDL_CreateGPUTransferBuffer(data->device, &tbci); | ||
| 625 | |||
| 626 | if (!data->vertices.transfer_buf) { | ||
| 627 | return false; | ||
| 628 | } | ||
| 629 | |||
| 630 | return true; | ||
| 631 | } | ||
| 632 | |||
| 633 | static bool UploadVertices(GPU_RenderData *data, void *vertices, size_t vertsize) | ||
| 634 | { | ||
| 635 | if (vertsize == 0) { | ||
| 636 | return true; | ||
| 637 | } | ||
| 638 | |||
| 639 | if (vertsize > data->vertices.buffer_size) { | ||
| 640 | ReleaseVertexBuffer(data); | ||
| 641 | if (!InitVertexBuffer(data, (Uint32)vertsize)) { | ||
| 642 | return false; | ||
| 643 | } | ||
| 644 | } | ||
| 645 | |||
| 646 | void *staging_buf = SDL_MapGPUTransferBuffer(data->device, data->vertices.transfer_buf, true); | ||
| 647 | SDL_memcpy(staging_buf, vertices, vertsize); | ||
| 648 | SDL_UnmapGPUTransferBuffer(data->device, data->vertices.transfer_buf); | ||
| 649 | |||
| 650 | SDL_GPUCopyPass *pass = SDL_BeginGPUCopyPass(data->state.command_buffer); | ||
| 651 | |||
| 652 | if (!pass) { | ||
| 653 | return false; | ||
| 654 | } | ||
| 655 | |||
| 656 | SDL_GPUTransferBufferLocation src; | ||
| 657 | SDL_zero(src); | ||
| 658 | src.transfer_buffer = data->vertices.transfer_buf; | ||
| 659 | |||
| 660 | SDL_GPUBufferRegion dst; | ||
| 661 | SDL_zero(dst); | ||
| 662 | dst.buffer = data->vertices.buffer; | ||
| 663 | dst.size = (Uint32)vertsize; | ||
| 664 | |||
| 665 | SDL_UploadToGPUBuffer(pass, &src, &dst, true); | ||
| 666 | SDL_EndGPUCopyPass(pass); | ||
| 667 | |||
| 668 | return true; | ||
| 669 | } | ||
| 670 | |||
| 671 | // *** FIXME *** | ||
| 672 | // We might be able to run these data uploads on a separate command buffer | ||
| 673 | // which would allow us to avoid breaking render passes. | ||
| 674 | // Honestly I'm a little skeptical of this entire approach, | ||
| 675 | // we already have a command buffer structure | ||
| 676 | // so it feels weird to be deferring the operations manually. | ||
| 677 | // We could also fairly easily run the geometry transformations | ||
| 678 | // on compute shaders instead of the CPU, which would be a HUGE performance win. | ||
| 679 | // -cosmonaut | ||
| 680 | static bool GPU_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 681 | { | ||
| 682 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 683 | |||
| 684 | if (!UploadVertices(data, vertices, vertsize)) { | ||
| 685 | return false; | ||
| 686 | } | ||
| 687 | |||
| 688 | data->state.color_attachment.load_op = SDL_GPU_LOADOP_LOAD; | ||
| 689 | |||
| 690 | if (renderer->target) { | ||
| 691 | GPU_TextureData *tdata = renderer->target->internal; | ||
| 692 | data->state.color_attachment.texture = tdata->texture; | ||
| 693 | } else { | ||
| 694 | data->state.color_attachment.texture = data->backbuffer.texture; | ||
| 695 | } | ||
| 696 | |||
| 697 | if (!data->state.color_attachment.texture) { | ||
| 698 | return SDL_SetError("Render target texture is NULL"); | ||
| 699 | } | ||
| 700 | |||
| 701 | while (cmd) { | ||
| 702 | switch (cmd->command) { | ||
| 703 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 704 | { | ||
| 705 | data->state.draw_color = GetDrawCmdColor(renderer, cmd); | ||
| 706 | break; | ||
| 707 | } | ||
| 708 | |||
| 709 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 710 | { | ||
| 711 | SDL_Rect *viewport = &cmd->data.viewport.rect; | ||
| 712 | data->state.viewport.x = viewport->x; | ||
| 713 | data->state.viewport.y = viewport->y; | ||
| 714 | data->state.viewport.w = viewport->w; | ||
| 715 | data->state.viewport.h = viewport->h; | ||
| 716 | break; | ||
| 717 | } | ||
| 718 | |||
| 719 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 720 | { | ||
| 721 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 722 | data->state.scissor.x = (int)data->state.viewport.x + rect->x; | ||
| 723 | data->state.scissor.y = (int)data->state.viewport.y + rect->y; | ||
| 724 | data->state.scissor.w = rect->w; | ||
| 725 | data->state.scissor.h = rect->h; | ||
| 726 | data->state.scissor_enabled = cmd->data.cliprect.enabled; | ||
| 727 | break; | ||
| 728 | } | ||
| 729 | |||
| 730 | case SDL_RENDERCMD_CLEAR: | ||
| 731 | { | ||
| 732 | data->state.color_attachment.clear_color = GetDrawCmdColor(renderer, cmd); | ||
| 733 | data->state.color_attachment.load_op = SDL_GPU_LOADOP_CLEAR; | ||
| 734 | break; | ||
| 735 | } | ||
| 736 | |||
| 737 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 738 | break; | ||
| 739 | |||
| 740 | case SDL_RENDERCMD_COPY: // unused | ||
| 741 | break; | ||
| 742 | |||
| 743 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 744 | break; | ||
| 745 | |||
| 746 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 747 | { | ||
| 748 | Uint32 count = (Uint32)cmd->data.draw.count; | ||
| 749 | Uint32 offset = (Uint32)cmd->data.draw.first; | ||
| 750 | |||
| 751 | if (count > 2) { | ||
| 752 | // joined lines cannot be grouped | ||
| 753 | Draw(data, cmd, count, offset, SDL_GPU_PRIMITIVETYPE_LINESTRIP); | ||
| 754 | } else { | ||
| 755 | // let's group non joined lines | ||
| 756 | SDL_RenderCommand *finalcmd = cmd; | ||
| 757 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 758 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 759 | |||
| 760 | while (nextcmd) { | ||
| 761 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 762 | if (nextcmdtype != SDL_RENDERCMD_DRAW_LINES) { | ||
| 763 | break; // can't go any further on this draw call, different render command up next. | ||
| 764 | } else if (nextcmd->data.draw.count != 2) { | ||
| 765 | break; // can't go any further on this draw call, those are joined lines | ||
| 766 | } else if (nextcmd->data.draw.blend != thisblend) { | ||
| 767 | break; // can't go any further on this draw call, different blendmode copy up next. | ||
| 768 | } else { | ||
| 769 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 770 | count += (Uint32)nextcmd->data.draw.count; | ||
| 771 | } | ||
| 772 | nextcmd = nextcmd->next; | ||
| 773 | } | ||
| 774 | |||
| 775 | Draw(data, cmd, count, offset, SDL_GPU_PRIMITIVETYPE_LINELIST); | ||
| 776 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 777 | } | ||
| 778 | break; | ||
| 779 | } | ||
| 780 | |||
| 781 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 782 | case SDL_RENDERCMD_GEOMETRY: | ||
| 783 | { | ||
| 784 | /* as long as we have the same copy command in a row, with the | ||
| 785 | same texture, we can combine them all into a single draw call. */ | ||
| 786 | SDL_Texture *thistexture = cmd->data.draw.texture; | ||
| 787 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 788 | const SDL_RenderCommandType thiscmdtype = cmd->command; | ||
| 789 | SDL_RenderCommand *finalcmd = cmd; | ||
| 790 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 791 | Uint32 count = (Uint32)cmd->data.draw.count; | ||
| 792 | Uint32 offset = (Uint32)cmd->data.draw.first; | ||
| 793 | |||
| 794 | while (nextcmd) { | ||
| 795 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 796 | if (nextcmdtype != thiscmdtype) { | ||
| 797 | break; // can't go any further on this draw call, different render command up next. | ||
| 798 | } else if (nextcmd->data.draw.texture != thistexture || nextcmd->data.draw.blend != thisblend) { | ||
| 799 | // FIXME should we check address mode too? | ||
| 800 | break; // can't go any further on this draw call, different texture/blendmode copy up next. | ||
| 801 | } else { | ||
| 802 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 803 | count += (Uint32)nextcmd->data.draw.count; | ||
| 804 | } | ||
| 805 | nextcmd = nextcmd->next; | ||
| 806 | } | ||
| 807 | |||
| 808 | SDL_GPUPrimitiveType prim = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; // SDL_RENDERCMD_GEOMETRY | ||
| 809 | if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS) { | ||
| 810 | prim = SDL_GPU_PRIMITIVETYPE_POINTLIST; | ||
| 811 | } | ||
| 812 | |||
| 813 | Draw(data, cmd, count, offset, prim); | ||
| 814 | |||
| 815 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 816 | break; | ||
| 817 | } | ||
| 818 | |||
| 819 | case SDL_RENDERCMD_NO_OP: | ||
| 820 | break; | ||
| 821 | } | ||
| 822 | |||
| 823 | cmd = cmd->next; | ||
| 824 | } | ||
| 825 | |||
| 826 | if (data->state.color_attachment.load_op == SDL_GPU_LOADOP_CLEAR) { | ||
| 827 | RestartRenderPass(data); | ||
| 828 | } | ||
| 829 | |||
| 830 | if (data->state.render_pass) { | ||
| 831 | SDL_EndGPURenderPass(data->state.render_pass); | ||
| 832 | data->state.render_pass = NULL; | ||
| 833 | } | ||
| 834 | |||
| 835 | return true; | ||
| 836 | } | ||
| 837 | |||
| 838 | static SDL_Surface *GPU_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 839 | { | ||
| 840 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 841 | SDL_GPUTexture *gpu_tex; | ||
| 842 | SDL_PixelFormat pixfmt; | ||
| 843 | |||
| 844 | if (data->state.render_target) { | ||
| 845 | SDL_Texture *texture = data->state.render_target; | ||
| 846 | GPU_TextureData *texdata = texture->internal; | ||
| 847 | gpu_tex = texdata->texture; | ||
| 848 | pixfmt = texture->format; | ||
| 849 | } else { | ||
| 850 | gpu_tex = data->backbuffer.texture; | ||
| 851 | pixfmt = TexFormatToPixFormat(data->backbuffer.format); | ||
| 852 | |||
| 853 | if (pixfmt == SDL_PIXELFORMAT_UNKNOWN) { | ||
| 854 | SDL_SetError("Unsupported backbuffer format"); | ||
| 855 | return NULL; | ||
| 856 | } | ||
| 857 | } | ||
| 858 | |||
| 859 | Uint32 bpp = SDL_BYTESPERPIXEL(pixfmt); | ||
| 860 | size_t row_size, image_size; | ||
| 861 | |||
| 862 | if (!SDL_size_mul_check_overflow(rect->w, bpp, &row_size) || | ||
| 863 | !SDL_size_mul_check_overflow(rect->h, row_size, &image_size)) { | ||
| 864 | SDL_SetError("read size overflow"); | ||
| 865 | return NULL; | ||
| 866 | } | ||
| 867 | |||
| 868 | SDL_Surface *surface = SDL_CreateSurface(rect->w, rect->h, pixfmt); | ||
| 869 | |||
| 870 | if (!surface) { | ||
| 871 | return NULL; | ||
| 872 | } | ||
| 873 | |||
| 874 | SDL_GPUTransferBufferCreateInfo tbci; | ||
| 875 | SDL_zero(tbci); | ||
| 876 | tbci.size = (Uint32)image_size; | ||
| 877 | tbci.usage = SDL_GPU_TRANSFERBUFFERUSAGE_DOWNLOAD; | ||
| 878 | |||
| 879 | SDL_GPUTransferBuffer *tbuf = SDL_CreateGPUTransferBuffer(data->device, &tbci); | ||
| 880 | |||
| 881 | if (!tbuf) { | ||
| 882 | return NULL; | ||
| 883 | } | ||
| 884 | |||
| 885 | SDL_GPUCopyPass *pass = SDL_BeginGPUCopyPass(data->state.command_buffer); | ||
| 886 | |||
| 887 | SDL_GPUTextureRegion src; | ||
| 888 | SDL_zero(src); | ||
| 889 | src.texture = gpu_tex; | ||
| 890 | src.x = rect->x; | ||
| 891 | src.y = rect->y; | ||
| 892 | src.w = rect->w; | ||
| 893 | src.h = rect->h; | ||
| 894 | src.d = 1; | ||
| 895 | |||
| 896 | SDL_GPUTextureTransferInfo dst; | ||
| 897 | SDL_zero(dst); | ||
| 898 | dst.transfer_buffer = tbuf; | ||
| 899 | dst.rows_per_layer = rect->h; | ||
| 900 | dst.pixels_per_row = rect->w; | ||
| 901 | |||
| 902 | SDL_DownloadFromGPUTexture(pass, &src, &dst); | ||
| 903 | SDL_EndGPUCopyPass(pass); | ||
| 904 | |||
| 905 | SDL_GPUFence *fence = SDL_SubmitGPUCommandBufferAndAcquireFence(data->state.command_buffer); | ||
| 906 | SDL_WaitForGPUFences(data->device, true, &fence, 1); | ||
| 907 | SDL_ReleaseGPUFence(data->device, fence); | ||
| 908 | data->state.command_buffer = SDL_AcquireGPUCommandBuffer(data->device); | ||
| 909 | |||
| 910 | void *mapped_tbuf = SDL_MapGPUTransferBuffer(data->device, tbuf, false); | ||
| 911 | |||
| 912 | if ((size_t)surface->pitch == row_size) { | ||
| 913 | SDL_memcpy(surface->pixels, mapped_tbuf, image_size); | ||
| 914 | } else { | ||
| 915 | Uint8 *input = mapped_tbuf; | ||
| 916 | Uint8 *output = surface->pixels; | ||
| 917 | |||
| 918 | for (int row = 0; row < rect->h; ++row) { | ||
| 919 | SDL_memcpy(output, input, row_size); | ||
| 920 | output += surface->pitch; | ||
| 921 | input += row_size; | ||
| 922 | } | ||
| 923 | } | ||
| 924 | |||
| 925 | SDL_UnmapGPUTransferBuffer(data->device, tbuf); | ||
| 926 | SDL_ReleaseGPUTransferBuffer(data->device, tbuf); | ||
| 927 | |||
| 928 | return surface; | ||
| 929 | } | ||
| 930 | |||
| 931 | static bool CreateBackbuffer(GPU_RenderData *data, Uint32 w, Uint32 h, SDL_GPUTextureFormat fmt) | ||
| 932 | { | ||
| 933 | SDL_GPUTextureCreateInfo tci; | ||
| 934 | SDL_zero(tci); | ||
| 935 | tci.width = w; | ||
| 936 | tci.height = h; | ||
| 937 | tci.format = fmt; | ||
| 938 | tci.layer_count_or_depth = 1; | ||
| 939 | tci.num_levels = 1; | ||
| 940 | tci.sample_count = SDL_GPU_SAMPLECOUNT_1; | ||
| 941 | tci.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET | SDL_GPU_TEXTUREUSAGE_SAMPLER; | ||
| 942 | |||
| 943 | data->backbuffer.texture = SDL_CreateGPUTexture(data->device, &tci); | ||
| 944 | data->backbuffer.width = w; | ||
| 945 | data->backbuffer.height = h; | ||
| 946 | data->backbuffer.format = fmt; | ||
| 947 | |||
| 948 | if (!data->backbuffer.texture) { | ||
| 949 | return false; | ||
| 950 | } | ||
| 951 | |||
| 952 | return true; | ||
| 953 | } | ||
| 954 | |||
| 955 | static bool GPU_RenderPresent(SDL_Renderer *renderer) | ||
| 956 | { | ||
| 957 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 958 | |||
| 959 | SDL_GPUTexture *swapchain; | ||
| 960 | Uint32 swapchain_texture_width, swapchain_texture_height; | ||
| 961 | bool result = SDL_WaitAndAcquireGPUSwapchainTexture(data->state.command_buffer, renderer->window, &swapchain, &swapchain_texture_width, &swapchain_texture_height); | ||
| 962 | |||
| 963 | if (!result) { | ||
| 964 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Failed to acquire swapchain texture: %s", SDL_GetError()); | ||
| 965 | } | ||
| 966 | |||
| 967 | if (swapchain != NULL) { | ||
| 968 | SDL_GPUBlitInfo blit_info; | ||
| 969 | SDL_zero(blit_info); | ||
| 970 | |||
| 971 | blit_info.source.texture = data->backbuffer.texture; | ||
| 972 | blit_info.source.w = data->backbuffer.width; | ||
| 973 | blit_info.source.h = data->backbuffer.height; | ||
| 974 | blit_info.destination.texture = swapchain; | ||
| 975 | blit_info.destination.w = swapchain_texture_width; | ||
| 976 | blit_info.destination.h = swapchain_texture_height; | ||
| 977 | blit_info.load_op = SDL_GPU_LOADOP_DONT_CARE; | ||
| 978 | blit_info.filter = SDL_GPU_FILTER_LINEAR; | ||
| 979 | |||
| 980 | SDL_BlitGPUTexture(data->state.command_buffer, &blit_info); | ||
| 981 | |||
| 982 | SDL_SubmitGPUCommandBuffer(data->state.command_buffer); | ||
| 983 | |||
| 984 | if (swapchain_texture_width != data->backbuffer.width || swapchain_texture_height != data->backbuffer.height) { | ||
| 985 | SDL_ReleaseGPUTexture(data->device, data->backbuffer.texture); | ||
| 986 | CreateBackbuffer(data, swapchain_texture_width, swapchain_texture_height, SDL_GetGPUSwapchainTextureFormat(data->device, renderer->window)); | ||
| 987 | } | ||
| 988 | } else { | ||
| 989 | SDL_SubmitGPUCommandBuffer(data->state.command_buffer); | ||
| 990 | } | ||
| 991 | |||
| 992 | data->state.command_buffer = SDL_AcquireGPUCommandBuffer(data->device); | ||
| 993 | |||
| 994 | return true; | ||
| 995 | } | ||
| 996 | |||
| 997 | static void GPU_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 998 | { | ||
| 999 | GPU_RenderData *renderdata = (GPU_RenderData *)renderer->internal; | ||
| 1000 | GPU_TextureData *data = (GPU_TextureData *)texture->internal; | ||
| 1001 | |||
| 1002 | if (renderdata->state.render_target == texture) { | ||
| 1003 | renderdata->state.render_target = NULL; | ||
| 1004 | } | ||
| 1005 | |||
| 1006 | if (!data) { | ||
| 1007 | return; | ||
| 1008 | } | ||
| 1009 | |||
| 1010 | SDL_ReleaseGPUTexture(renderdata->device, data->texture); | ||
| 1011 | SDL_free(data->pixels); | ||
| 1012 | SDL_free(data); | ||
| 1013 | texture->internal = NULL; | ||
| 1014 | } | ||
| 1015 | |||
| 1016 | static void GPU_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1017 | { | ||
| 1018 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 1019 | |||
| 1020 | if (!data) { | ||
| 1021 | return; | ||
| 1022 | } | ||
| 1023 | |||
| 1024 | if (data->state.command_buffer) { | ||
| 1025 | SDL_SubmitGPUCommandBuffer(data->state.command_buffer); | ||
| 1026 | data->state.command_buffer = NULL; | ||
| 1027 | } | ||
| 1028 | |||
| 1029 | for (Uint32 i = 0; i < sizeof(data->samplers) / sizeof(SDL_GPUSampler *); ++i) { | ||
| 1030 | SDL_ReleaseGPUSampler(data->device, ((SDL_GPUSampler **)data->samplers)[i]); | ||
| 1031 | } | ||
| 1032 | |||
| 1033 | if (data->backbuffer.texture) { | ||
| 1034 | SDL_ReleaseGPUTexture(data->device, data->backbuffer.texture); | ||
| 1035 | } | ||
| 1036 | |||
| 1037 | if (renderer->window) { | ||
| 1038 | SDL_ReleaseWindowFromGPUDevice(data->device, renderer->window); | ||
| 1039 | } | ||
| 1040 | |||
| 1041 | ReleaseVertexBuffer(data); | ||
| 1042 | GPU_DestroyPipelineCache(&data->pipeline_cache); | ||
| 1043 | GPU_ReleaseShaders(&data->shaders, data->device); | ||
| 1044 | SDL_DestroyGPUDevice(data->device); | ||
| 1045 | |||
| 1046 | SDL_free(data); | ||
| 1047 | } | ||
| 1048 | |||
| 1049 | static bool ChoosePresentMode(SDL_GPUDevice *device, SDL_Window *window, const int vsync, SDL_GPUPresentMode *out_mode) | ||
| 1050 | { | ||
| 1051 | SDL_GPUPresentMode mode; | ||
| 1052 | |||
| 1053 | switch (vsync) { | ||
| 1054 | case 0: | ||
| 1055 | mode = SDL_GPU_PRESENTMODE_MAILBOX; | ||
| 1056 | |||
| 1057 | if (!SDL_WindowSupportsGPUPresentMode(device, window, mode)) { | ||
| 1058 | mode = SDL_GPU_PRESENTMODE_IMMEDIATE; | ||
| 1059 | |||
| 1060 | if (!SDL_WindowSupportsGPUPresentMode(device, window, mode)) { | ||
| 1061 | mode = SDL_GPU_PRESENTMODE_VSYNC; | ||
| 1062 | } | ||
| 1063 | } | ||
| 1064 | |||
| 1065 | // FIXME should we return an error if both mailbox and immediate fail? | ||
| 1066 | break; | ||
| 1067 | |||
| 1068 | case 1: | ||
| 1069 | mode = SDL_GPU_PRESENTMODE_VSYNC; | ||
| 1070 | break; | ||
| 1071 | |||
| 1072 | default: | ||
| 1073 | return SDL_Unsupported(); | ||
| 1074 | } | ||
| 1075 | |||
| 1076 | *out_mode = mode; | ||
| 1077 | return true; | ||
| 1078 | } | ||
| 1079 | |||
| 1080 | static bool GPU_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 1081 | { | ||
| 1082 | GPU_RenderData *data = (GPU_RenderData *)renderer->internal; | ||
| 1083 | SDL_GPUPresentMode mode = SDL_GPU_PRESENTMODE_VSYNC; | ||
| 1084 | |||
| 1085 | if (!ChoosePresentMode(data->device, renderer->window, vsync, &mode)) { | ||
| 1086 | return false; | ||
| 1087 | } | ||
| 1088 | |||
| 1089 | if (mode != data->swapchain.present_mode) { | ||
| 1090 | // XXX returns bool instead of SDL-style error code | ||
| 1091 | if (SDL_SetGPUSwapchainParameters(data->device, renderer->window, data->swapchain.composition, mode)) { | ||
| 1092 | data->swapchain.present_mode = mode; | ||
| 1093 | return true; | ||
| 1094 | } else { | ||
| 1095 | return false; | ||
| 1096 | } | ||
| 1097 | } | ||
| 1098 | |||
| 1099 | return true; | ||
| 1100 | } | ||
| 1101 | |||
| 1102 | static bool InitSamplers(GPU_RenderData *data) | ||
| 1103 | { | ||
| 1104 | struct | ||
| 1105 | { | ||
| 1106 | struct | ||
| 1107 | { | ||
| 1108 | SDL_TextureAddressMode address_mode; | ||
| 1109 | SDL_ScaleMode scale_mode; | ||
| 1110 | } sdl; | ||
| 1111 | struct | ||
| 1112 | { | ||
| 1113 | SDL_GPUSamplerAddressMode address_mode; | ||
| 1114 | SDL_GPUFilter filter; | ||
| 1115 | SDL_GPUSamplerMipmapMode mipmap_mode; | ||
| 1116 | Uint32 anisotropy; | ||
| 1117 | } gpu; | ||
| 1118 | } configs[] = { | ||
| 1119 | { | ||
| 1120 | { SDL_TEXTURE_ADDRESS_CLAMP, SDL_SCALEMODE_NEAREST }, | ||
| 1121 | { SDL_GPU_SAMPLERADDRESSMODE_REPEAT, SDL_GPU_FILTER_NEAREST, SDL_GPU_SAMPLERMIPMAPMODE_NEAREST, 0 }, | ||
| 1122 | }, | ||
| 1123 | { | ||
| 1124 | { SDL_TEXTURE_ADDRESS_CLAMP, SDL_SCALEMODE_LINEAR }, | ||
| 1125 | { SDL_GPU_SAMPLERADDRESSMODE_REPEAT, SDL_GPU_FILTER_LINEAR, SDL_GPU_SAMPLERMIPMAPMODE_LINEAR, 0 }, | ||
| 1126 | }, | ||
| 1127 | { | ||
| 1128 | { SDL_TEXTURE_ADDRESS_WRAP, SDL_SCALEMODE_NEAREST }, | ||
| 1129 | { SDL_GPU_SAMPLERADDRESSMODE_REPEAT, SDL_GPU_FILTER_NEAREST, SDL_GPU_SAMPLERMIPMAPMODE_NEAREST, 0 }, | ||
| 1130 | }, | ||
| 1131 | { | ||
| 1132 | { SDL_TEXTURE_ADDRESS_WRAP, SDL_SCALEMODE_LINEAR }, | ||
| 1133 | { SDL_GPU_SAMPLERADDRESSMODE_REPEAT, SDL_GPU_FILTER_LINEAR, SDL_GPU_SAMPLERMIPMAPMODE_LINEAR, 0 }, | ||
| 1134 | }, | ||
| 1135 | }; | ||
| 1136 | |||
| 1137 | for (Uint32 i = 0; i < SDL_arraysize(configs); ++i) { | ||
| 1138 | SDL_GPUSamplerCreateInfo sci; | ||
| 1139 | SDL_zero(sci); | ||
| 1140 | sci.max_anisotropy = configs[i].gpu.anisotropy; | ||
| 1141 | sci.enable_anisotropy = configs[i].gpu.anisotropy > 0; | ||
| 1142 | sci.address_mode_u = sci.address_mode_v = sci.address_mode_w = configs[i].gpu.address_mode; | ||
| 1143 | sci.min_filter = sci.mag_filter = configs[i].gpu.filter; | ||
| 1144 | sci.mipmap_mode = configs[i].gpu.mipmap_mode; | ||
| 1145 | |||
| 1146 | SDL_GPUSampler *sampler = SDL_CreateGPUSampler(data->device, &sci); | ||
| 1147 | |||
| 1148 | if (sampler == NULL) { | ||
| 1149 | return false; | ||
| 1150 | } | ||
| 1151 | |||
| 1152 | *SamplerPointer(data, configs[i].sdl.address_mode, configs[i].sdl.scale_mode) = sampler; | ||
| 1153 | } | ||
| 1154 | |||
| 1155 | return true; | ||
| 1156 | } | ||
| 1157 | |||
| 1158 | static bool GPU_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 1159 | { | ||
| 1160 | GPU_RenderData *data = NULL; | ||
| 1161 | |||
| 1162 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 1163 | |||
| 1164 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 1165 | // TODO | ||
| 1166 | return SDL_SetError("Unsupported output colorspace"); | ||
| 1167 | } | ||
| 1168 | |||
| 1169 | data = (GPU_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 1170 | if (!data) { | ||
| 1171 | return false; | ||
| 1172 | } | ||
| 1173 | |||
| 1174 | renderer->SupportsBlendMode = GPU_SupportsBlendMode; | ||
| 1175 | renderer->CreateTexture = GPU_CreateTexture; | ||
| 1176 | renderer->UpdateTexture = GPU_UpdateTexture; | ||
| 1177 | renderer->LockTexture = GPU_LockTexture; | ||
| 1178 | renderer->UnlockTexture = GPU_UnlockTexture; | ||
| 1179 | renderer->SetTextureScaleMode = GPU_SetTextureScaleMode; | ||
| 1180 | renderer->SetRenderTarget = GPU_SetRenderTarget; | ||
| 1181 | renderer->QueueSetViewport = GPU_QueueNoOp; | ||
| 1182 | renderer->QueueSetDrawColor = GPU_QueueNoOp; | ||
| 1183 | renderer->QueueDrawPoints = GPU_QueueDrawPoints; | ||
| 1184 | renderer->QueueDrawLines = GPU_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 1185 | renderer->QueueGeometry = GPU_QueueGeometry; | ||
| 1186 | renderer->InvalidateCachedState = GPU_InvalidateCachedState; | ||
| 1187 | renderer->RunCommandQueue = GPU_RunCommandQueue; | ||
| 1188 | renderer->RenderReadPixels = GPU_RenderReadPixels; | ||
| 1189 | renderer->RenderPresent = GPU_RenderPresent; | ||
| 1190 | renderer->DestroyTexture = GPU_DestroyTexture; | ||
| 1191 | renderer->DestroyRenderer = GPU_DestroyRenderer; | ||
| 1192 | renderer->SetVSync = GPU_SetVSync; | ||
| 1193 | renderer->internal = data; | ||
| 1194 | renderer->window = window; | ||
| 1195 | renderer->name = GPU_RenderDriver.name; | ||
| 1196 | |||
| 1197 | bool debug = SDL_GetBooleanProperty(create_props, SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN, false); | ||
| 1198 | bool lowpower = SDL_GetBooleanProperty(create_props, SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN, false); | ||
| 1199 | |||
| 1200 | // Prefer environment variables/hints if they exist, otherwise defer to properties | ||
| 1201 | debug = SDL_GetHintBoolean(SDL_HINT_RENDER_GPU_DEBUG, debug); | ||
| 1202 | lowpower = SDL_GetHintBoolean(SDL_HINT_RENDER_GPU_LOW_POWER, lowpower); | ||
| 1203 | |||
| 1204 | SDL_SetBooleanProperty(create_props, SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN, debug); | ||
| 1205 | SDL_SetBooleanProperty(create_props, SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN, lowpower); | ||
| 1206 | |||
| 1207 | GPU_FillSupportedShaderFormats(create_props); | ||
| 1208 | data->device = SDL_CreateGPUDeviceWithProperties(create_props); | ||
| 1209 | |||
| 1210 | if (!data->device) { | ||
| 1211 | return false; | ||
| 1212 | } | ||
| 1213 | |||
| 1214 | if (!GPU_InitShaders(&data->shaders, data->device)) { | ||
| 1215 | return false; | ||
| 1216 | } | ||
| 1217 | |||
| 1218 | if (!GPU_InitPipelineCache(&data->pipeline_cache, data->device)) { | ||
| 1219 | return false; | ||
| 1220 | } | ||
| 1221 | |||
| 1222 | // XXX what's a good initial size? | ||
| 1223 | if (!InitVertexBuffer(data, 1 << 16)) { | ||
| 1224 | return false; | ||
| 1225 | } | ||
| 1226 | |||
| 1227 | if (!InitSamplers(data)) { | ||
| 1228 | return false; | ||
| 1229 | } | ||
| 1230 | |||
| 1231 | if (!SDL_ClaimWindowForGPUDevice(data->device, window)) { | ||
| 1232 | return false; | ||
| 1233 | } | ||
| 1234 | |||
| 1235 | data->swapchain.composition = SDL_GPU_SWAPCHAINCOMPOSITION_SDR; | ||
| 1236 | data->swapchain.present_mode = SDL_GPU_PRESENTMODE_VSYNC; | ||
| 1237 | |||
| 1238 | int vsync = (int)SDL_GetNumberProperty(create_props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, 0); | ||
| 1239 | ChoosePresentMode(data->device, window, vsync, &data->swapchain.present_mode); | ||
| 1240 | |||
| 1241 | SDL_SetGPUSwapchainParameters(data->device, window, data->swapchain.composition, data->swapchain.present_mode); | ||
| 1242 | |||
| 1243 | SDL_SetGPUAllowedFramesInFlight(data->device, 1); | ||
| 1244 | |||
| 1245 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32); | ||
| 1246 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32); | ||
| 1247 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32); | ||
| 1248 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32); | ||
| 1249 | |||
| 1250 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384); | ||
| 1251 | |||
| 1252 | data->state.draw_color.r = 1.0f; | ||
| 1253 | data->state.draw_color.g = 1.0f; | ||
| 1254 | data->state.draw_color.b = 1.0f; | ||
| 1255 | data->state.draw_color.a = 1.0f; | ||
| 1256 | data->state.viewport.min_depth = 0; | ||
| 1257 | data->state.viewport.max_depth = 1; | ||
| 1258 | data->state.command_buffer = SDL_AcquireGPUCommandBuffer(data->device); | ||
| 1259 | |||
| 1260 | int w, h; | ||
| 1261 | SDL_GetWindowSizeInPixels(window, &w, &h); | ||
| 1262 | |||
| 1263 | if (!CreateBackbuffer(data, w, h, SDL_GetGPUSwapchainTextureFormat(data->device, window))) { | ||
| 1264 | return false; | ||
| 1265 | } | ||
| 1266 | |||
| 1267 | SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_GPU_DEVICE_POINTER, data->device); | ||
| 1268 | |||
| 1269 | return true; | ||
| 1270 | } | ||
| 1271 | |||
| 1272 | SDL_RenderDriver GPU_RenderDriver = { | ||
| 1273 | GPU_CreateRenderer, "gpu" | ||
| 1274 | }; | ||
| 1275 | |||
| 1276 | #endif // SDL_VIDEO_RENDER_GPU | ||
diff --git a/SDL-3.2.8/src/render/gpu/SDL_shaders_gpu.c b/SDL-3.2.8/src/render/gpu/SDL_shaders_gpu.c new file mode 100644 index 0000000..a56fb0c --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/SDL_shaders_gpu.c | |||
| @@ -0,0 +1,232 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_GPU | ||
| 24 | |||
| 25 | #include "SDL_shaders_gpu.h" | ||
| 26 | |||
| 27 | // SDL_GPU shader implementation | ||
| 28 | |||
| 29 | typedef struct GPU_ShaderModuleSource | ||
| 30 | { | ||
| 31 | const unsigned char *code; | ||
| 32 | unsigned int code_len; | ||
| 33 | SDL_GPUShaderFormat format; | ||
| 34 | } GPU_ShaderModuleSource; | ||
| 35 | |||
| 36 | #if defined(SDL_GPU_VULKAN) && SDL_GPU_VULKAN | ||
| 37 | #define IF_VULKAN(...) __VA_ARGS__ | ||
| 38 | #define HAVE_SPIRV_SHADERS 1 | ||
| 39 | #include "shaders/spir-v.h" | ||
| 40 | #else | ||
| 41 | #define IF_VULKAN(...) | ||
| 42 | #define HAVE_SPIRV_SHADERS 0 | ||
| 43 | #endif | ||
| 44 | |||
| 45 | #ifdef SDL_GPU_D3D12 | ||
| 46 | #define IF_D3D12(...) __VA_ARGS__ | ||
| 47 | #define HAVE_DXIL60_SHADERS 1 | ||
| 48 | #include "shaders/dxil60.h" | ||
| 49 | #else | ||
| 50 | #define IF_D3D12(...) | ||
| 51 | #define HAVE_DXIL60_SHADERS 0 | ||
| 52 | #endif | ||
| 53 | |||
| 54 | #ifdef SDL_GPU_METAL | ||
| 55 | #define IF_METAL(...) __VA_ARGS__ | ||
| 56 | #define HAVE_METAL_SHADERS 1 | ||
| 57 | #include "shaders/metal.h" | ||
| 58 | #else | ||
| 59 | #define IF_METAL(...) | ||
| 60 | #define HAVE_METAL_SHADERS 0 | ||
| 61 | #endif | ||
| 62 | |||
| 63 | typedef struct GPU_ShaderSources | ||
| 64 | { | ||
| 65 | IF_VULKAN(GPU_ShaderModuleSource spirv;) | ||
| 66 | IF_D3D12(GPU_ShaderModuleSource dxil60;) | ||
| 67 | IF_METAL(GPU_ShaderModuleSource msl;) | ||
| 68 | unsigned int num_samplers; | ||
| 69 | unsigned int num_uniform_buffers; | ||
| 70 | } GPU_ShaderSources; | ||
| 71 | |||
| 72 | #define SHADER_SPIRV(code) \ | ||
| 73 | IF_VULKAN(.spirv = { code, sizeof(code), SDL_GPU_SHADERFORMAT_SPIRV }, ) | ||
| 74 | |||
| 75 | #define SHADER_DXIL60(code) \ | ||
| 76 | IF_D3D12(.dxil60 = { code, sizeof(code), SDL_GPU_SHADERFORMAT_DXIL }, ) | ||
| 77 | |||
| 78 | #define SHADER_METAL(code) \ | ||
| 79 | IF_METAL(.msl = { code, sizeof(code), SDL_GPU_SHADERFORMAT_MSL }, ) | ||
| 80 | |||
| 81 | // clang-format off | ||
| 82 | static const GPU_ShaderSources vert_shader_sources[NUM_VERT_SHADERS] = { | ||
| 83 | [VERT_SHADER_LINEPOINT] = { | ||
| 84 | .num_samplers = 0, | ||
| 85 | .num_uniform_buffers = 1, | ||
| 86 | SHADER_SPIRV(linepoint_vert_spv) | ||
| 87 | SHADER_DXIL60(linepoint_vert_sm60_dxil) | ||
| 88 | SHADER_METAL(linepoint_vert_metal) | ||
| 89 | }, | ||
| 90 | [VERT_SHADER_TRI_COLOR] = { | ||
| 91 | .num_samplers = 0, | ||
| 92 | .num_uniform_buffers = 1, | ||
| 93 | SHADER_SPIRV(tri_color_vert_spv) | ||
| 94 | SHADER_DXIL60(tri_color_vert_sm60_dxil) | ||
| 95 | SHADER_METAL(tri_color_vert_metal) | ||
| 96 | }, | ||
| 97 | [VERT_SHADER_TRI_TEXTURE] = { | ||
| 98 | .num_samplers = 0, | ||
| 99 | .num_uniform_buffers = 1, | ||
| 100 | SHADER_SPIRV(tri_texture_vert_spv) | ||
| 101 | SHADER_DXIL60(tri_texture_vert_sm60_dxil) | ||
| 102 | SHADER_METAL(tri_texture_vert_metal) | ||
| 103 | }, | ||
| 104 | }; | ||
| 105 | |||
| 106 | static const GPU_ShaderSources frag_shader_sources[NUM_FRAG_SHADERS] = { | ||
| 107 | [FRAG_SHADER_COLOR] = { | ||
| 108 | .num_samplers = 0, | ||
| 109 | .num_uniform_buffers = 0, | ||
| 110 | SHADER_SPIRV(color_frag_spv) | ||
| 111 | SHADER_DXIL60(color_frag_sm60_dxil) | ||
| 112 | SHADER_METAL(color_frag_metal) | ||
| 113 | }, | ||
| 114 | [FRAG_SHADER_TEXTURE_RGB] = { | ||
| 115 | .num_samplers = 1, | ||
| 116 | .num_uniform_buffers = 0, | ||
| 117 | SHADER_SPIRV(texture_rgb_frag_spv) | ||
| 118 | SHADER_DXIL60(texture_rgb_frag_sm60_dxil) | ||
| 119 | SHADER_METAL(texture_rgb_frag_metal) | ||
| 120 | }, | ||
| 121 | [FRAG_SHADER_TEXTURE_RGBA] = { | ||
| 122 | .num_samplers = 1, | ||
| 123 | .num_uniform_buffers = 0, | ||
| 124 | SHADER_SPIRV(texture_rgba_frag_spv) | ||
| 125 | SHADER_DXIL60(texture_rgba_frag_sm60_dxil) | ||
| 126 | SHADER_METAL(texture_rgba_frag_metal) | ||
| 127 | }, | ||
| 128 | }; | ||
| 129 | // clang-format on | ||
| 130 | |||
| 131 | static SDL_GPUShader *CompileShader(const GPU_ShaderSources *sources, SDL_GPUDevice *device, SDL_GPUShaderStage stage) | ||
| 132 | { | ||
| 133 | const GPU_ShaderModuleSource *sms = NULL; | ||
| 134 | SDL_GPUShaderFormat formats = SDL_GetGPUShaderFormats(device); | ||
| 135 | |||
| 136 | if (formats == SDL_GPU_SHADERFORMAT_INVALID) { | ||
| 137 | // SDL_GetGPUShaderFormats already set the error | ||
| 138 | return NULL; | ||
| 139 | #if HAVE_SPIRV_SHADERS | ||
| 140 | } else if (formats & SDL_GPU_SHADERFORMAT_SPIRV) { | ||
| 141 | sms = &sources->spirv; | ||
| 142 | #endif // HAVE_SPIRV_SHADERS | ||
| 143 | #if HAVE_DXIL60_SHADERS | ||
| 144 | } else if (formats & SDL_GPU_SHADERFORMAT_DXIL) { | ||
| 145 | sms = &sources->dxil60; | ||
| 146 | #endif // HAVE_DXIL60_SHADERS | ||
| 147 | #if HAVE_METAL_SHADERS | ||
| 148 | } else if (formats & SDL_GPU_SHADERFORMAT_MSL) { | ||
| 149 | sms = &sources->msl; | ||
| 150 | #endif // HAVE_METAL_SHADERS | ||
| 151 | } else { | ||
| 152 | SDL_SetError("Unsupported GPU backend"); | ||
| 153 | return NULL; | ||
| 154 | } | ||
| 155 | |||
| 156 | SDL_GPUShaderCreateInfo sci = { 0 }; | ||
| 157 | sci.code = sms->code; | ||
| 158 | sci.code_size = sms->code_len; | ||
| 159 | sci.format = sms->format; | ||
| 160 | // FIXME not sure if this is correct | ||
| 161 | sci.entrypoint = | ||
| 162 | #if HAVE_METAL_SHADERS | ||
| 163 | (sms == &sources->msl) ? "main0" : | ||
| 164 | #endif // HAVE_METAL_SHADERS | ||
| 165 | "main"; | ||
| 166 | sci.num_samplers = sources->num_samplers; | ||
| 167 | sci.num_uniform_buffers = sources->num_uniform_buffers; | ||
| 168 | sci.stage = stage; | ||
| 169 | |||
| 170 | return SDL_CreateGPUShader(device, &sci); | ||
| 171 | } | ||
| 172 | |||
| 173 | bool GPU_InitShaders(GPU_Shaders *shaders, SDL_GPUDevice *device) | ||
| 174 | { | ||
| 175 | for (int i = 0; i < SDL_arraysize(vert_shader_sources); ++i) { | ||
| 176 | shaders->vert_shaders[i] = CompileShader( | ||
| 177 | &vert_shader_sources[i], device, SDL_GPU_SHADERSTAGE_VERTEX); | ||
| 178 | if (shaders->vert_shaders[i] == NULL) { | ||
| 179 | GPU_ReleaseShaders(shaders, device); | ||
| 180 | return false; | ||
| 181 | } | ||
| 182 | } | ||
| 183 | |||
| 184 | for (int i = 0; i < SDL_arraysize(frag_shader_sources); ++i) { | ||
| 185 | shaders->frag_shaders[i] = CompileShader( | ||
| 186 | &frag_shader_sources[i], device, SDL_GPU_SHADERSTAGE_FRAGMENT); | ||
| 187 | if (shaders->frag_shaders[i] == NULL) { | ||
| 188 | GPU_ReleaseShaders(shaders, device); | ||
| 189 | return false; | ||
| 190 | } | ||
| 191 | } | ||
| 192 | |||
| 193 | return true; | ||
| 194 | } | ||
| 195 | |||
| 196 | void GPU_ReleaseShaders(GPU_Shaders *shaders, SDL_GPUDevice *device) | ||
| 197 | { | ||
| 198 | for (int i = 0; i < SDL_arraysize(shaders->vert_shaders); ++i) { | ||
| 199 | SDL_ReleaseGPUShader(device, shaders->vert_shaders[i]); | ||
| 200 | shaders->vert_shaders[i] = NULL; | ||
| 201 | } | ||
| 202 | |||
| 203 | for (int i = 0; i < SDL_arraysize(shaders->frag_shaders); ++i) { | ||
| 204 | SDL_ReleaseGPUShader(device, shaders->frag_shaders[i]); | ||
| 205 | shaders->frag_shaders[i] = NULL; | ||
| 206 | } | ||
| 207 | } | ||
| 208 | |||
| 209 | SDL_GPUShader *GPU_GetVertexShader(GPU_Shaders *shaders, GPU_VertexShaderID id) | ||
| 210 | { | ||
| 211 | SDL_assert((unsigned int)id < SDL_arraysize(shaders->vert_shaders)); | ||
| 212 | SDL_GPUShader *shader = shaders->vert_shaders[id]; | ||
| 213 | SDL_assert(shader != NULL); | ||
| 214 | return shader; | ||
| 215 | } | ||
| 216 | |||
| 217 | SDL_GPUShader *GPU_GetFragmentShader(GPU_Shaders *shaders, GPU_FragmentShaderID id) | ||
| 218 | { | ||
| 219 | SDL_assert((unsigned int)id < SDL_arraysize(shaders->frag_shaders)); | ||
| 220 | SDL_GPUShader *shader = shaders->frag_shaders[id]; | ||
| 221 | SDL_assert(shader != NULL); | ||
| 222 | return shader; | ||
| 223 | } | ||
| 224 | |||
| 225 | void GPU_FillSupportedShaderFormats(SDL_PropertiesID props) | ||
| 226 | { | ||
| 227 | SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN, HAVE_SPIRV_SHADERS); | ||
| 228 | SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN, HAVE_DXIL60_SHADERS); | ||
| 229 | SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN, HAVE_METAL_SHADERS); | ||
| 230 | } | ||
| 231 | |||
| 232 | #endif // SDL_VIDEO_RENDER_GPU | ||
diff --git a/SDL-3.2.8/src/render/gpu/SDL_shaders_gpu.h b/SDL-3.2.8/src/render/gpu/SDL_shaders_gpu.h new file mode 100644 index 0000000..16b5a11 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/SDL_shaders_gpu.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_shaders_gpu_h_ | ||
| 23 | #define SDL_shaders_gpu_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | // SDL_GPU shader implementation | ||
| 28 | |||
| 29 | typedef enum | ||
| 30 | { | ||
| 31 | VERT_SHADER_INVALID = -1, | ||
| 32 | VERT_SHADER_LINEPOINT, | ||
| 33 | VERT_SHADER_TRI_COLOR, | ||
| 34 | VERT_SHADER_TRI_TEXTURE, | ||
| 35 | |||
| 36 | NUM_VERT_SHADERS, | ||
| 37 | } GPU_VertexShaderID; | ||
| 38 | |||
| 39 | typedef enum | ||
| 40 | { | ||
| 41 | FRAG_SHADER_INVALID = -1, | ||
| 42 | FRAG_SHADER_COLOR, | ||
| 43 | FRAG_SHADER_TEXTURE_RGB, | ||
| 44 | FRAG_SHADER_TEXTURE_RGBA, | ||
| 45 | |||
| 46 | NUM_FRAG_SHADERS, | ||
| 47 | } GPU_FragmentShaderID; | ||
| 48 | |||
| 49 | struct GPU_Shaders | ||
| 50 | { | ||
| 51 | SDL_GPUShader *vert_shaders[NUM_VERT_SHADERS]; | ||
| 52 | SDL_GPUShader *frag_shaders[NUM_FRAG_SHADERS]; | ||
| 53 | }; | ||
| 54 | |||
| 55 | typedef struct GPU_Shaders GPU_Shaders; | ||
| 56 | |||
| 57 | void GPU_FillSupportedShaderFormats(SDL_PropertiesID props); | ||
| 58 | extern bool GPU_InitShaders(GPU_Shaders *shaders, SDL_GPUDevice *device); | ||
| 59 | extern void GPU_ReleaseShaders(GPU_Shaders *shaders, SDL_GPUDevice *device); | ||
| 60 | extern SDL_GPUShader *GPU_GetVertexShader(GPU_Shaders *shaders, GPU_VertexShaderID id); | ||
| 61 | extern SDL_GPUShader *GPU_GetFragmentShader(GPU_Shaders *shaders, GPU_FragmentShaderID id); | ||
| 62 | |||
| 63 | #endif // SDL_shaders_gpu_h_ | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/.gitattributes b/SDL-3.2.8/src/render/gpu/shaders/.gitattributes new file mode 100644 index 0000000..4689bbb --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/.gitattributes | |||
| @@ -0,0 +1 @@ | |||
| *.h linguist-generated | |||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/.gitignore b/SDL-3.2.8/src/render/gpu/shaders/.gitignore new file mode 100644 index 0000000..2741428 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/.gitignore | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | *.hlsl | ||
| 2 | *.metal | ||
| 3 | *.spv | ||
| 4 | *.tmp.h | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh b/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh new file mode 100755 index 0000000..9b019e5 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh | |||
| @@ -0,0 +1,106 @@ | |||
| 1 | #!/usr/bin/env bash | ||
| 2 | |||
| 3 | set -e | ||
| 4 | |||
| 5 | # NOTE: fxc is tested on Linux with https://github.com/mozilla/fxc2 | ||
| 6 | |||
| 7 | which fxc &>/dev/null && HAVE_FXC=1 || HAVE_FXC=0 | ||
| 8 | which dxc &>/dev/null && HAVE_DXC=1 || HAVE_DXC=0 | ||
| 9 | which spirv-cross &>/dev/null && HAVE_SPIRV_CROSS=1 || HAVE_SPIRV_CROSS=0 | ||
| 10 | |||
| 11 | [ "$HAVE_FXC" != 0 ] || echo "fxc not in PATH; D3D11 shaders will not be rebuilt" | ||
| 12 | [ "$HAVE_DXC" != 0 ] || echo "dxc not in PATH; D3D12 shaders will not be rebuilt" | ||
| 13 | [ "$HAVE_SPIRV_CROSS" != 0 ] || echo "spirv-cross not in PATH; D3D11, D3D12, Metal shaders will not be rebuilt" | ||
| 14 | |||
| 15 | USE_FXC=${USE_FXC:-$HAVE_FXC} | ||
| 16 | USE_DXC=${USE_DXC:-$HAVE_DXC} | ||
| 17 | USE_SPIRV_CROSS=${USE_SPIRV_CROSS:-$HAVE_SPIRV_CROSS} | ||
| 18 | |||
| 19 | spirv_bundle="spir-v.h" | ||
| 20 | dxbc50_bundle="dxbc50.h" | ||
| 21 | dxil60_bundle="dxil60.h" | ||
| 22 | metal_bundle="metal.h" | ||
| 23 | |||
| 24 | rm -f "$spirv_bundle" | ||
| 25 | [ "$USE_SPIRV_CROSS" != 0 ] && rm -f "$metal_bundle" | ||
| 26 | [ "$USE_SPIRV_CROSS" != 0 ] && [ "$USE_FXC" != 0 ] && rm -f "$dxbc50_bundle" | ||
| 27 | [ "$USE_SPIRV_CROSS" != 0 ] && [ "$USE_DXC" != 0 ] && rm -f "$dxil60_bundle" | ||
| 28 | |||
| 29 | make-header() { | ||
| 30 | xxd -i "$1" | sed \ | ||
| 31 | -e 's/^unsigned /const unsigned /g' \ | ||
| 32 | -e 's,^const,static const,' \ | ||
| 33 | > "$1.h" | ||
| 34 | } | ||
| 35 | |||
| 36 | compile-hlsl-dxbc() { | ||
| 37 | local src="$1" | ||
| 38 | local profile="$2" | ||
| 39 | local output_basename="$3" | ||
| 40 | local var_name="$(echo "$output_basename" | sed -e 's/\./_/g')" | ||
| 41 | |||
| 42 | fxc "$src" /E main /T $2 /Fh "$output_basename.tmp.h" || exit $? | ||
| 43 | sed \ | ||
| 44 | -e "s/g_main/$var_name/;s/\r//g" \ | ||
| 45 | -e 's,^const,static const,' \ | ||
| 46 | -e 's,const unsigned,const signed,' \ | ||
| 47 | < "$output_basename.tmp.h" \ | ||
| 48 | > "$output_basename.h" | ||
| 49 | rm -f "$output_basename.tmp.h" | ||
| 50 | } | ||
| 51 | |||
| 52 | compile-hlsl-dxil() { | ||
| 53 | local src="$1" | ||
| 54 | local profile="$2" | ||
| 55 | local output_basename="$3" | ||
| 56 | local var_name="$(echo "$output_basename" | sed -e 's/\./_/g')" | ||
| 57 | |||
| 58 | dxc "$src" -E main -T $2 -Fh "$output_basename.tmp.h" -O3 || exit $? | ||
| 59 | sed \ | ||
| 60 | -e "s/g_main/$var_name/;s/\r//g" \ | ||
| 61 | -e 's,^const,static const,' \ | ||
| 62 | < "$output_basename.tmp.h" \ | ||
| 63 | > "$output_basename.h" | ||
| 64 | rm -f "$output_basename.tmp.h" | ||
| 65 | } | ||
| 66 | |||
| 67 | for i in *.vert *.frag; do | ||
| 68 | spv="$i.spv" | ||
| 69 | metal="$i.metal" | ||
| 70 | hlsl50="$i.sm50.hlsl" | ||
| 71 | dxbc50="$i.sm50.dxbc" | ||
| 72 | hlsl60="$i.sm60.hlsl" | ||
| 73 | dxil60="$i.sm60.dxil" | ||
| 74 | |||
| 75 | glslangValidator -g0 -Os "$i" -V -o "$spv" --quiet | ||
| 76 | |||
| 77 | make-header "$spv" | ||
| 78 | echo "#include \"$spv.h\"" >> "$spirv_bundle" | ||
| 79 | |||
| 80 | if [ "$USE_SPIRV_CROSS" = "0" ]; then | ||
| 81 | continue | ||
| 82 | fi | ||
| 83 | |||
| 84 | spirv-cross "$spv" --hlsl --shader-model 50 --hlsl-enable-compat --output "$hlsl50" | ||
| 85 | spirv-cross "$spv" --hlsl --shader-model 60 --hlsl-enable-compat --output "$hlsl60" | ||
| 86 | |||
| 87 | if [ "${i##*.}" == "frag" ]; then | ||
| 88 | hlsl_stage="ps" | ||
| 89 | else | ||
| 90 | hlsl_stage="vs" | ||
| 91 | fi | ||
| 92 | |||
| 93 | if [ "$USE_FXC" != "0" ]; then | ||
| 94 | compile-hlsl-dxbc "$hlsl50" ${hlsl_stage}_5_0 "$dxbc50" | ||
| 95 | echo "#include \"$dxbc50.h\"" >> "$dxbc50_bundle" | ||
| 96 | fi | ||
| 97 | |||
| 98 | if [ "$USE_DXC" != "0" ]; then | ||
| 99 | compile-hlsl-dxil "$hlsl60" ${hlsl_stage}_6_0 "$dxil60" | ||
| 100 | echo "#include \"$dxil60.h\"" >> "$dxil60_bundle" | ||
| 101 | fi | ||
| 102 | |||
| 103 | spirv-cross "$spv" --msl --output "$metal" | ||
| 104 | make-header "$metal" | ||
| 105 | echo "#include \"$metal.h\"" >> "$metal_bundle" | ||
| 106 | done | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/color.frag b/SDL-3.2.8/src/render/gpu/shaders/color.frag new file mode 100644 index 0000000..8ce1e6b --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/color.frag | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #version 450 | ||
| 2 | |||
| 3 | layout(location = 0) in vec4 v_color; | ||
| 4 | |||
| 5 | layout(location = 0) out vec4 o_color; | ||
| 6 | |||
| 7 | void main() { | ||
| 8 | o_color = v_color; | ||
| 9 | } | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/color.frag.metal.h b/SDL-3.2.8/src/render/gpu/shaders/color.frag.metal.h new file mode 100644 index 0000000..a5f9899 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/color.frag.metal.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | static const unsigned char color_frag_metal[] = { | ||
| 2 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, | ||
| 3 | 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, | ||
| 4 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x69, | ||
| 5 | 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a, | ||
| 6 | 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, | ||
| 7 | 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x0a, | ||
| 8 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, | ||
| 9 | 0x5f, 0x6f, 0x75, 0x74, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 10 | 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x39, 0x20, 0x5b, 0x5b, | ||
| 11 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, | ||
| 12 | 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, | ||
| 13 | 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, | ||
| 14 | 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x31, | ||
| 15 | 0x31, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x28, 0x6c, 0x6f, 0x63, | ||
| 16 | 0x6e, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x66, | ||
| 17 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, | ||
| 18 | 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x28, | ||
| 19 | 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, | ||
| 20 | 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, | ||
| 21 | 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, | ||
| 22 | 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, | ||
| 23 | 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, | ||
| 24 | 0x6d, 0x5f, 0x39, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x31, | ||
| 25 | 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, | ||
| 26 | 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a | ||
| 27 | }; | ||
| 28 | static const unsigned int color_frag_metal_len = 298; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/color.frag.sm50.dxbc.h b/SDL-3.2.8/src/render/gpu/shaders/color.frag.sm50.dxbc.h new file mode 100644 index 0000000..ddd8012 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/color.frag.sm50.dxbc.h | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | static const signed char color_frag_sm50_dxbc[] = | ||
| 2 | { | ||
| 3 | 68, 88, 66, 67, 114,-117, | ||
| 4 | -124, 82, -97, 76, -66, -74, | ||
| 5 | 70, 116, 14, -14, 95,-122, | ||
| 6 | 65, 73, 1, 0, 0, 0, | ||
| 7 | -24, 1, 0, 0, 5, 0, | ||
| 8 | 0, 0, 52, 0, 0, 0, | ||
| 9 | -96, 0, 0, 0, -44, 0, | ||
| 10 | 0, 0, 8, 1, 0, 0, | ||
| 11 | 76, 1, 0, 0, 82, 68, | ||
| 12 | 69, 70, 100, 0, 0, 0, | ||
| 13 | 0, 0, 0, 0, 0, 0, | ||
| 14 | 0, 0, 0, 0, 0, 0, | ||
| 15 | 60, 0, 0, 0, 0, 5, | ||
| 16 | -1, -1, 0, 1, 0, 0, | ||
| 17 | 60, 0, 0, 0, 82, 68, | ||
| 18 | 49, 49, 60, 0, 0, 0, | ||
| 19 | 24, 0, 0, 0, 32, 0, | ||
| 20 | 0, 0, 40, 0, 0, 0, | ||
| 21 | 36, 0, 0, 0, 12, 0, | ||
| 22 | 0, 0, 0, 0, 0, 0, | ||
| 23 | 77, 105, 99, 114, 111, 115, | ||
| 24 | 111, 102, 116, 32, 40, 82, | ||
| 25 | 41, 32, 72, 76, 83, 76, | ||
| 26 | 32, 83, 104, 97, 100, 101, | ||
| 27 | 114, 32, 67, 111, 109, 112, | ||
| 28 | 105, 108, 101, 114, 32, 49, | ||
| 29 | 48, 46, 49, 0, 73, 83, | ||
| 30 | 71, 78, 44, 0, 0, 0, | ||
| 31 | 1, 0, 0, 0, 8, 0, | ||
| 32 | 0, 0, 32, 0, 0, 0, | ||
| 33 | 0, 0, 0, 0, 0, 0, | ||
| 34 | 0, 0, 3, 0, 0, 0, | ||
| 35 | 0, 0, 0, 0, 15, 15, | ||
| 36 | 0, 0, 84, 69, 88, 67, | ||
| 37 | 79, 79, 82, 68, 0, -85, | ||
| 38 | -85, -85, 79, 83, 71, 78, | ||
| 39 | 44, 0, 0, 0, 1, 0, | ||
| 40 | 0, 0, 8, 0, 0, 0, | ||
| 41 | 32, 0, 0, 0, 0, 0, | ||
| 42 | 0, 0, 0, 0, 0, 0, | ||
| 43 | 3, 0, 0, 0, 0, 0, | ||
| 44 | 0, 0, 15, 0, 0, 0, | ||
| 45 | 83, 86, 95, 84, 97, 114, | ||
| 46 | 103, 101, 116, 0, -85, -85, | ||
| 47 | 83, 72, 69, 88, 60, 0, | ||
| 48 | 0, 0, 80, 0, 0, 0, | ||
| 49 | 15, 0, 0, 0, 106, 8, | ||
| 50 | 0, 1, 98, 16, 0, 3, | ||
| 51 | -14, 16, 16, 0, 0, 0, | ||
| 52 | 0, 0, 101, 0, 0, 3, | ||
| 53 | -14, 32, 16, 0, 0, 0, | ||
| 54 | 0, 0, 54, 0, 0, 5, | ||
| 55 | -14, 32, 16, 0, 0, 0, | ||
| 56 | 0, 0, 70, 30, 16, 0, | ||
| 57 | 0, 0, 0, 0, 62, 0, | ||
| 58 | 0, 1, 83, 84, 65, 84, | ||
| 59 | -108, 0, 0, 0, 2, 0, | ||
| 60 | 0, 0, 0, 0, 0, 0, | ||
| 61 | 0, 0, 0, 0, 2, 0, | ||
| 62 | 0, 0, 0, 0, 0, 0, | ||
| 63 | 0, 0, 0, 0, 0, 0, | ||
| 64 | 0, 0, 1, 0, 0, 0, | ||
| 65 | 0, 0, 0, 0, 0, 0, | ||
| 66 | 0, 0, 0, 0, 0, 0, | ||
| 67 | 0, 0, 0, 0, 0, 0, | ||
| 68 | 0, 0, 0, 0, 0, 0, | ||
| 69 | 0, 0, 0, 0, 0, 0, | ||
| 70 | 0, 0, 0, 0, 0, 0, | ||
| 71 | 0, 0, 0, 0, 0, 0, | ||
| 72 | 0, 0, 1, 0, 0, 0, | ||
| 73 | 0, 0, 0, 0, 0, 0, | ||
| 74 | 0, 0, 0, 0, 0, 0, | ||
| 75 | 0, 0, 0, 0, 0, 0, | ||
| 76 | 0, 0, 0, 0, 0, 0, | ||
| 77 | 0, 0, 0, 0, 0, 0, | ||
| 78 | 0, 0, 0, 0, 0, 0, | ||
| 79 | 0, 0, 0, 0, 0, 0, | ||
| 80 | 0, 0, 0, 0, 0, 0, | ||
| 81 | 0, 0, 0, 0, 0, 0, | ||
| 82 | 0, 0, 0, 0, 0, 0, | ||
| 83 | 0, 0, 0, 0, 0, 0, | ||
| 84 | 0, 0 | ||
| 85 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/color.frag.sm60.dxil.h b/SDL-3.2.8/src/render/gpu/shaders/color.frag.sm60.dxil.h new file mode 100644 index 0000000..f8d2a1c --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/color.frag.sm60.dxil.h | |||
| @@ -0,0 +1,340 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; TEXCOORD 0 xyzw 0 NONE float xyzw | ||
| 8 | ; | ||
| 9 | ; | ||
| 10 | ; Output signature: | ||
| 11 | ; | ||
| 12 | ; Name Index Mask Register SysValue Format Used | ||
| 13 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 14 | ; SV_Target 0 xyzw 0 TARGET float xyzw | ||
| 15 | ; | ||
| 16 | ; shader hash: 79268435b7929fdbc9f529459f44b878 | ||
| 17 | ; | ||
| 18 | ; Pipeline Runtime Information: | ||
| 19 | ; | ||
| 20 | ; Pixel Shader | ||
| 21 | ; DepthOutput=0 | ||
| 22 | ; SampleFrequency=0 | ||
| 23 | ; | ||
| 24 | ; | ||
| 25 | ; Input signature: | ||
| 26 | ; | ||
| 27 | ; Name Index InterpMode DynIdx | ||
| 28 | ; -------------------- ----- ---------------------- ------ | ||
| 29 | ; TEXCOORD 0 linear | ||
| 30 | ; | ||
| 31 | ; Output signature: | ||
| 32 | ; | ||
| 33 | ; Name Index InterpMode DynIdx | ||
| 34 | ; -------------------- ----- ---------------------- ------ | ||
| 35 | ; SV_Target 0 | ||
| 36 | ; | ||
| 37 | ; Buffer Definitions: | ||
| 38 | ; | ||
| 39 | ; | ||
| 40 | ; Resource Bindings: | ||
| 41 | ; | ||
| 42 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 43 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 44 | ; | ||
| 45 | ; | ||
| 46 | ; ViewId state: | ||
| 47 | ; | ||
| 48 | ; Number of inputs: 4, outputs: 4 | ||
| 49 | ; Outputs dependent on ViewId: { } | ||
| 50 | ; Inputs contributing to computation of Outputs: | ||
| 51 | ; output 0 depends on inputs: { 0 } | ||
| 52 | ; output 1 depends on inputs: { 1 } | ||
| 53 | ; output 2 depends on inputs: { 2 } | ||
| 54 | ; output 3 depends on inputs: { 3 } | ||
| 55 | ; | ||
| 56 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 57 | target triple = "dxil-ms-dx" | ||
| 58 | |||
| 59 | define void @main() { | ||
| 60 | %1 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 61 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 62 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 63 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 64 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %1) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 65 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 66 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 67 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 68 | ret void | ||
| 69 | } | ||
| 70 | |||
| 71 | ; Function Attrs: nounwind readnone | ||
| 72 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 73 | |||
| 74 | ; Function Attrs: nounwind | ||
| 75 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 76 | |||
| 77 | attributes #0 = { nounwind readnone } | ||
| 78 | attributes #1 = { nounwind } | ||
| 79 | |||
| 80 | !llvm.ident = !{!0} | ||
| 81 | !dx.version = !{!1} | ||
| 82 | !dx.valver = !{!2} | ||
| 83 | !dx.shaderModel = !{!3} | ||
| 84 | !dx.viewIdState = !{!4} | ||
| 85 | !dx.entryPoints = !{!5} | ||
| 86 | |||
| 87 | !0 = !{!"dxc(private) 1.8.0.4662 (416fab6b5)"} | ||
| 88 | !1 = !{i32 1, i32 0} | ||
| 89 | !2 = !{i32 1, i32 8} | ||
| 90 | !3 = !{!"ps", i32 6, i32 0} | ||
| 91 | !4 = !{[6 x i32] [i32 4, i32 4, i32 1, i32 2, i32 4, i32 8]} | ||
| 92 | !5 = !{void ()* @main, !"main", !6, null, null} | ||
| 93 | !6 = !{!7, !11, null} | ||
| 94 | !7 = !{!8} | ||
| 95 | !8 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !9, i8 2, i32 1, i8 4, i32 0, i8 0, !10} | ||
| 96 | !9 = !{i32 0} | ||
| 97 | !10 = !{i32 3, i32 15} | ||
| 98 | !11 = !{!12} | ||
| 99 | !12 = !{i32 0, !"SV_Target", i8 9, i8 16, !9, i8 0, i32 1, i8 4, i32 0, i8 0, !10} | ||
| 100 | |||
| 101 | #endif | ||
| 102 | |||
| 103 | static const unsigned char color_frag_sm60_dxil[] = { | ||
| 104 | 0x44, 0x58, 0x42, 0x43, 0x33, 0x91, 0x9f, 0xec, 0x78, 0x7d, 0xbb, 0xfa, | ||
| 105 | 0xeb, 0x8d, 0xfb, 0x1b, 0x79, 0x47, 0x1d, 0xb2, 0x01, 0x00, 0x00, 0x00, | ||
| 106 | 0x0c, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, | ||
| 107 | 0x4c, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, | ||
| 108 | 0x58, 0x01, 0x00, 0x00, 0x10, 0x06, 0x00, 0x00, 0x2c, 0x06, 0x00, 0x00, | ||
| 109 | 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 110 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, | ||
| 111 | 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 112 | 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 113 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, | ||
| 114 | 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, | ||
| 115 | 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, | ||
| 116 | 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 117 | 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 118 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 119 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, | ||
| 120 | 0x74, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0x8c, 0x00, 0x00, 0x00, | ||
| 121 | 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 122 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 123 | 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, | ||
| 124 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 125 | 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 126 | 0x10, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 127 | 0x44, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 128 | 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 129 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, | ||
| 130 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, | ||
| 131 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 132 | 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, | ||
| 133 | 0xb0, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, | ||
| 134 | 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 135 | 0x98, 0x04, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, | ||
| 136 | 0x23, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 137 | 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, | ||
| 138 | 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, | ||
| 139 | 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, | ||
| 140 | 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, | ||
| 141 | 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, | ||
| 142 | 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, | ||
| 143 | 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, | ||
| 144 | 0x06, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, | ||
| 145 | 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 146 | 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 147 | 0x13, 0x82, 0x60, 0x42, 0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, | ||
| 148 | 0x0f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, | ||
| 149 | 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, | ||
| 150 | 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, | ||
| 151 | 0x25, 0x00, 0x8a, 0x19, 0x80, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, | ||
| 152 | 0x31, 0x44, 0x54, 0x44, 0x56, 0x0c, 0x20, 0xa2, 0x1a, 0xc2, 0x81, 0x80, | ||
| 153 | 0x34, 0x20, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, | ||
| 154 | 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, | ||
| 155 | 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, | ||
| 156 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, | ||
| 157 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, | ||
| 158 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 159 | 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 160 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, | ||
| 161 | 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 162 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, | ||
| 163 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 164 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, | ||
| 165 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, | ||
| 166 | 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 167 | 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 168 | 0x00, 0xc8, 0x02, 0x01, 0x0b, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, | ||
| 169 | 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xa2, | ||
| 170 | 0x12, 0x18, 0x01, 0x28, 0x86, 0x32, 0x28, 0x8f, 0x92, 0x28, 0x04, 0xaa, | ||
| 171 | 0x92, 0x18, 0x01, 0x28, 0x82, 0x42, 0x28, 0x10, 0xda, 0xb1, 0x0c, 0x82, | ||
| 172 | 0x08, 0x04, 0x02, 0x01, 0x79, 0x18, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, | ||
| 173 | 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, | ||
| 174 | 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, | ||
| 175 | 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, | ||
| 176 | 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, | ||
| 177 | 0x04, 0x62, 0x98, 0x20, 0x10, 0xc4, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, | ||
| 178 | 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x14, 0x1b, 0x86, 0x03, 0x21, 0x26, | ||
| 179 | 0x08, 0x02, 0xb0, 0x01, 0xd8, 0x30, 0x10, 0xcb, 0xb2, 0x21, 0x60, 0x36, | ||
| 180 | 0x0c, 0x83, 0xd2, 0x4c, 0x10, 0x96, 0x67, 0x43, 0xf0, 0x90, 0x68, 0x0b, | ||
| 181 | 0x4b, 0x73, 0x23, 0x42, 0x55, 0x84, 0x35, 0xf4, 0xf4, 0x24, 0x45, 0x34, | ||
| 182 | 0x41, 0x28, 0x94, 0x09, 0x42, 0xb1, 0x6c, 0x08, 0x88, 0x09, 0x42, 0xc1, | ||
| 183 | 0x4c, 0x10, 0x8a, 0x66, 0x82, 0x40, 0x18, 0x13, 0x04, 0xe2, 0xd8, 0x20, | ||
| 184 | 0x60, 0xd9, 0x86, 0x85, 0x90, 0x26, 0xaa, 0xb2, 0x86, 0x8b, 0xa0, 0xb4, | ||
| 185 | 0x0d, 0xc1, 0xc6, 0x64, 0xca, 0xea, 0x8b, 0x2a, 0x4c, 0xee, 0xac, 0x8c, | ||
| 186 | 0x6e, 0x82, 0x50, 0x38, 0x1b, 0x16, 0xa2, 0x9b, 0xbc, 0x8a, 0x1a, 0x2e, | ||
| 187 | 0x82, 0xd2, 0x36, 0x04, 0xdf, 0x86, 0x81, 0x03, 0x03, 0x60, 0x43, 0xa1, | ||
| 188 | 0x44, 0x61, 0x00, 0x00, 0x2c, 0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x26, 0x08, | ||
| 189 | 0x04, 0x42, 0x63, 0x2e, 0xed, 0xec, 0x8b, 0x8d, 0x6c, 0x82, 0x40, 0x24, | ||
| 190 | 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x36, 0x18, 0x63, 0x40, 0x06, | ||
| 191 | 0x65, 0x60, 0x06, 0x67, 0x60, 0x06, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, | ||
| 192 | 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, | ||
| 193 | 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, | ||
| 194 | 0xcf, 0xc5, 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, | ||
| 195 | 0xc3, 0x73, 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, | ||
| 196 | 0x63, 0x9b, 0x12, 0x20, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, 0xe0, 0xca, | ||
| 197 | 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0xa6, | ||
| 198 | 0x04, 0x4d, 0x1d, 0x32, 0x3c, 0x17, 0xbb, 0xb4, 0xb2, 0xbb, 0x24, 0xb2, | ||
| 199 | 0x29, 0xba, 0x30, 0xba, 0xb2, 0x29, 0xc1, 0x53, 0x87, 0x0c, 0xcf, 0xa5, | ||
| 200 | 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, | ||
| 201 | 0x10, 0x06, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc, 0xe8, 0xca, | ||
| 202 | 0xe4, 0xe6, 0xa6, 0x04, 0x67, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 203 | 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, | ||
| 204 | 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, | ||
| 205 | 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, | ||
| 206 | 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, | ||
| 207 | 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, | ||
| 208 | 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, | ||
| 209 | 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, | ||
| 210 | 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, | ||
| 211 | 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, | ||
| 212 | 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, | ||
| 213 | 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 214 | 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, | ||
| 215 | 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, | ||
| 216 | 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, | ||
| 217 | 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, | ||
| 218 | 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, | ||
| 219 | 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, | ||
| 220 | 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 221 | 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, | ||
| 222 | 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, | ||
| 223 | 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, | ||
| 224 | 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, | ||
| 225 | 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, | ||
| 226 | 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, | ||
| 227 | 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, | ||
| 228 | 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, | ||
| 229 | 0x0b, 0x00, 0x00, 0x00, 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, | ||
| 230 | 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, | ||
| 231 | 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, | ||
| 232 | 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, | ||
| 233 | 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, | ||
| 234 | 0x00, 0x00, 0x00, 0x00, 0x79, 0x26, 0x84, 0x35, 0xb7, 0x92, 0x9f, 0xdb, | ||
| 235 | 0xc9, 0xf5, 0x29, 0x45, 0x9f, 0x44, 0xb8, 0x78, 0x44, 0x58, 0x49, 0x4c, | ||
| 236 | 0xd8, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, | ||
| 237 | 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 238 | 0xc0, 0x04, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, | ||
| 239 | 0x2d, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 240 | 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, | ||
| 241 | 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, | ||
| 242 | 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, | ||
| 243 | 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, | ||
| 244 | 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, | ||
| 245 | 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, | ||
| 246 | 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, | ||
| 247 | 0x06, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, | ||
| 248 | 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 249 | 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 250 | 0x13, 0x82, 0x60, 0x42, 0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, | ||
| 251 | 0x0f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, | ||
| 252 | 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, | ||
| 253 | 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, | ||
| 254 | 0x25, 0x00, 0x8a, 0x19, 0x80, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, | ||
| 255 | 0x31, 0x44, 0x54, 0x44, 0x56, 0x0c, 0x20, 0xa2, 0x1a, 0xc2, 0x81, 0x80, | ||
| 256 | 0x34, 0x20, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, | ||
| 257 | 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, | ||
| 258 | 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, | ||
| 259 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, | ||
| 260 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, | ||
| 261 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 262 | 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 263 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, | ||
| 264 | 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 265 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, | ||
| 266 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 267 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, | ||
| 268 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, | ||
| 269 | 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 270 | 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 271 | 0x00, 0xc8, 0x02, 0x01, 0x0b, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, | ||
| 272 | 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xa2, | ||
| 273 | 0x12, 0x18, 0x01, 0x28, 0x88, 0x62, 0x28, 0x83, 0xf2, 0xa0, 0x2a, 0x89, | ||
| 274 | 0x11, 0x80, 0x22, 0x28, 0x84, 0x02, 0xa1, 0x1d, 0xcb, 0x20, 0x88, 0x40, | ||
| 275 | 0x20, 0x10, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, | ||
| 276 | 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, | ||
| 277 | 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, | ||
| 278 | 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, | ||
| 279 | 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, | ||
| 280 | 0x04, 0x62, 0x98, 0x20, 0x10, 0xc4, 0x06, 0x61, 0x20, 0x26, 0x08, 0x44, | ||
| 281 | 0xb1, 0x41, 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x13, 0x04, 0xc2, 0xd8, 0x30, | ||
| 282 | 0x20, 0x09, 0x31, 0x41, 0x58, 0x9c, 0x0d, 0xc1, 0x32, 0x41, 0x10, 0x00, | ||
| 283 | 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, | ||
| 284 | 0xa4, 0x88, 0x26, 0x08, 0x45, 0x32, 0x41, 0x28, 0x94, 0x0d, 0x01, 0x31, | ||
| 285 | 0x41, 0x28, 0x96, 0x09, 0x42, 0xc1, 0x4c, 0x10, 0x88, 0x63, 0x82, 0x40, | ||
| 286 | 0x20, 0x1b, 0x84, 0xca, 0xda, 0xb0, 0x10, 0x0f, 0x14, 0x49, 0xd3, 0x40, | ||
| 287 | 0x11, 0xd1, 0xb5, 0x21, 0xc0, 0x98, 0x4c, 0x59, 0x7d, 0x51, 0x85, 0xc9, | ||
| 288 | 0x9d, 0x95, 0xd1, 0x4d, 0x10, 0x8a, 0x66, 0xc3, 0x42, 0x68, 0xd0, 0x26, | ||
| 289 | 0x45, 0x03, 0x45, 0x44, 0xd7, 0x86, 0x80, 0xdb, 0x30, 0x64, 0x1d, 0xb0, | ||
| 290 | 0xa1, 0x68, 0x1c, 0x0f, 0x00, 0xaa, 0xb0, 0xb1, 0xd9, 0xb5, 0xb9, 0xa4, | ||
| 291 | 0x91, 0x95, 0xb9, 0xd1, 0x4d, 0x09, 0x82, 0x2a, 0x64, 0x78, 0x2e, 0x76, | ||
| 292 | 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x02, 0xa2, 0x09, 0x19, 0x9e, | ||
| 293 | 0x8b, 0x5d, 0x18, 0x9b, 0x5d, 0x99, 0xdc, 0x94, 0xc0, 0xa8, 0x43, 0x86, | ||
| 294 | 0xe7, 0x32, 0x87, 0x16, 0x46, 0x56, 0x26, 0xd7, 0xf4, 0x46, 0x56, 0xc6, | ||
| 295 | 0x36, 0x25, 0x48, 0xea, 0x90, 0xe1, 0xb9, 0xd8, 0xa5, 0x95, 0xdd, 0x25, | ||
| 296 | 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0x96, 0x3a, 0x64, 0x78, | ||
| 297 | 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, | ||
| 298 | 0x53, 0x02, 0x0f, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, | ||
| 299 | 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, | ||
| 300 | 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, | ||
| 301 | 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, | ||
| 302 | 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, | ||
| 303 | 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, | ||
| 304 | 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, | ||
| 305 | 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, | ||
| 306 | 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, | ||
| 307 | 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, | ||
| 308 | 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, | ||
| 309 | 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, | ||
| 310 | 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, | ||
| 311 | 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, | ||
| 312 | 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, | ||
| 313 | 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, | ||
| 314 | 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, | ||
| 315 | 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, | ||
| 316 | 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, | ||
| 317 | 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, | ||
| 318 | 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, | ||
| 319 | 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, | ||
| 320 | 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, | ||
| 321 | 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, | ||
| 322 | 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, | ||
| 323 | 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, | ||
| 324 | 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 325 | 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, | ||
| 326 | 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, | ||
| 327 | 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x00, | ||
| 328 | 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, | ||
| 329 | 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, | ||
| 330 | 0x03, 0x00, 0x00, 0x00, 0x44, 0x85, 0x30, 0x03, 0x50, 0x0a, 0x54, 0x25, | ||
| 331 | 0x50, 0x06, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x4c, | ||
| 332 | 0x05, 0x04, 0x29, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x94, | ||
| 333 | 0x11, 0x45, 0x43, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x75, | ||
| 334 | 0x48, 0xd2, 0x62, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x61, 0x21, | ||
| 335 | 0xd3, 0x44, 0x1c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x58, 0x07, | ||
| 336 | 0x45, 0x39, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xd6, 0x41, | ||
| 337 | 0x51, 0xc6, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x88, 0x75, 0x50, | ||
| 338 | 0x54, 0x23, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x62, 0x1d, 0x14, | ||
| 339 | 0x55, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 340 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/color.frag.spv.h b/SDL-3.2.8/src/render/gpu/shaders/color.frag.spv.h new file mode 100644 index 0000000..51e02de --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/color.frag.spv.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | static const unsigned char color_frag_spv[] = { | ||
| 2 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, | ||
| 3 | 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, | ||
| 4 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 5 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, | ||
| 6 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 7 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 8 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 9 | 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, | ||
| 10 | 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 11 | 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 12 | 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 13 | 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 14 | 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 15 | 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, | ||
| 16 | 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 17 | 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 18 | 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 19 | 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 20 | 0x20, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 21 | 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 22 | 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, | ||
| 23 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 24 | 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 25 | 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 26 | 0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 27 | 0x0c, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 | ||
| 28 | }; | ||
| 29 | static const unsigned int color_frag_spv_len = 312; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/dxbc50.h b/SDL-3.2.8/src/render/gpu/shaders/dxbc50.h new file mode 100644 index 0000000..1c01126 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/dxbc50.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #include "linepoint.vert.sm50.dxbc.h" | ||
| 2 | #include "tri_color.vert.sm50.dxbc.h" | ||
| 3 | #include "tri_texture.vert.sm50.dxbc.h" | ||
| 4 | #include "color.frag.sm50.dxbc.h" | ||
| 5 | #include "texture_rgba.frag.sm50.dxbc.h" | ||
| 6 | #include "texture_rgb.frag.sm50.dxbc.h" | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/dxil60.h b/SDL-3.2.8/src/render/gpu/shaders/dxil60.h new file mode 100644 index 0000000..88489f9 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/dxil60.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #include "linepoint.vert.sm60.dxil.h" | ||
| 2 | #include "tri_color.vert.sm60.dxil.h" | ||
| 3 | #include "tri_texture.vert.sm60.dxil.h" | ||
| 4 | #include "color.frag.sm60.dxil.h" | ||
| 5 | #include "texture_rgba.frag.sm60.dxil.h" | ||
| 6 | #include "texture_rgb.frag.sm60.dxil.h" | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert new file mode 100644 index 0000000..34596d5 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #version 450 | ||
| 2 | |||
| 3 | layout(location = 0) in vec2 a_position; | ||
| 4 | |||
| 5 | layout(location = 0) out vec4 v_color; | ||
| 6 | |||
| 7 | layout(set = 1, binding = 0) uniform Context { | ||
| 8 | mat4 mvp; | ||
| 9 | vec4 color; | ||
| 10 | vec2 texture_size; /* XXX unused */ | ||
| 11 | } u_context; | ||
| 12 | |||
| 13 | void main() { | ||
| 14 | gl_PointSize = 1.0; /* FIXME: D3D11 pls */ | ||
| 15 | gl_Position = u_context.mvp * vec4(a_position, 0, 1); | ||
| 16 | v_color = u_context.color; | ||
| 17 | } | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.metal.h b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.metal.h new file mode 100644 index 0000000..96b1c37 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.metal.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | static const unsigned char linepoint_vert_metal[] = { | ||
| 2 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, | ||
| 3 | 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, | ||
| 4 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x69, | ||
| 5 | 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a, | ||
| 6 | 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, | ||
| 7 | 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x0a, | ||
| 8 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x5f, 0x32, 0x32, 0x0a, 0x7b, | ||
| 9 | 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, | ||
| 10 | 0x34, 0x20, 0x5f, 0x6d, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 11 | 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x6d, 0x31, 0x3b, 0x0a, 0x20, | ||
| 12 | 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x6d, | ||
| 13 | 0x32, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, | ||
| 14 | 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x0a, | ||
| 15 | 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, | ||
| 16 | 0x20, 0x6d, 0x5f, 0x33, 0x38, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, | ||
| 17 | 0x28, 0x6c, 0x6f, 0x63, 0x6e, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, | ||
| 18 | 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, | ||
| 19 | 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, | ||
| 20 | 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, | ||
| 21 | 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x67, 0x6c, | ||
| 22 | 0x5f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x5b, | ||
| 23 | 0x5b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5d, | ||
| 24 | 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, | ||
| 25 | 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x0a, 0x7b, | ||
| 26 | 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, | ||
| 27 | 0x6d, 0x5f, 0x32, 0x39, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, | ||
| 28 | 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, | ||
| 29 | 0x3b, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x6d, 0x61, | ||
| 30 | 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, | ||
| 31 | 0x30, 0x28, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x20, 0x69, | ||
| 32 | 0x6e, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, | ||
| 33 | 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, | ||
| 34 | 0x20, 0x5f, 0x32, 0x32, 0x26, 0x20, 0x5f, 0x32, 0x34, 0x20, 0x5b, 0x5b, | ||
| 35 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, | ||
| 36 | 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, | ||
| 37 | 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x7b, | ||
| 38 | 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x67, | ||
| 39 | 0x6c, 0x5f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x20, | ||
| 40 | 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, | ||
| 41 | 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, | ||
| 42 | 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x32, 0x34, 0x2e, 0x5f, 0x6d, 0x30, | ||
| 43 | 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x69, 0x6e, | ||
| 44 | 0x2e, 0x6d, 0x5f, 0x32, 0x39, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, | ||
| 45 | 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, | ||
| 46 | 0x74, 0x2e, 0x6d, 0x5f, 0x33, 0x38, 0x20, 0x3d, 0x20, 0x5f, 0x32, 0x34, | ||
| 47 | 0x2e, 0x5f, 0x6d, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, | ||
| 48 | 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, | ||
| 49 | 0x0a | ||
| 50 | }; | ||
| 51 | static const unsigned int linepoint_vert_metal_len = 565; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.sm50.dxbc.h b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.sm50.dxbc.h new file mode 100644 index 0000000..c626676 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.sm50.dxbc.h | |||
| @@ -0,0 +1,172 @@ | |||
| 1 | static const signed char linepoint_vert_sm50_dxbc[] = | ||
| 2 | { | ||
| 3 | 68, 88, 66, 67, 0, 119, | ||
| 4 | 101, -18, 103, 113, 34, 52, | ||
| 5 | -82, 96, 17, 4, -92, 11, | ||
| 6 | -67, 71, 1, 0, 0, 0, | ||
| 7 | -12, 3, 0, 0, 5, 0, | ||
| 8 | 0, 0, 52, 0, 0, 0, | ||
| 9 | -12, 1, 0, 0, 40, 2, | ||
| 10 | 0, 0,-128, 2, 0, 0, | ||
| 11 | 88, 3, 0, 0, 82, 68, | ||
| 12 | 69, 70, -72, 1, 0, 0, | ||
| 13 | 1, 0, 0, 0, 100, 0, | ||
| 14 | 0, 0, 1, 0, 0, 0, | ||
| 15 | 60, 0, 0, 0, 0, 5, | ||
| 16 | -2, -1, 0, 1, 0, 0, | ||
| 17 | -112, 1, 0, 0, 82, 68, | ||
| 18 | 49, 49, 60, 0, 0, 0, | ||
| 19 | 24, 0, 0, 0, 32, 0, | ||
| 20 | 0, 0, 40, 0, 0, 0, | ||
| 21 | 36, 0, 0, 0, 12, 0, | ||
| 22 | 0, 0, 0, 0, 0, 0, | ||
| 23 | 92, 0, 0, 0, 0, 0, | ||
| 24 | 0, 0, 0, 0, 0, 0, | ||
| 25 | 0, 0, 0, 0, 0, 0, | ||
| 26 | 0, 0, 0, 0, 0, 0, | ||
| 27 | 1, 0, 0, 0, 1, 0, | ||
| 28 | 0, 0, 95, 50, 50, 95, | ||
| 29 | 50, 52, 0, -85, 92, 0, | ||
| 30 | 0, 0, 3, 0, 0, 0, | ||
| 31 | 124, 0, 0, 0, 96, 0, | ||
| 32 | 0, 0, 0, 0, 0, 0, | ||
| 33 | 0, 0, 0, 0, -12, 0, | ||
| 34 | 0, 0, 0, 0, 0, 0, | ||
| 35 | 64, 0, 0, 0, 2, 0, | ||
| 36 | 0, 0, 4, 1, 0, 0, | ||
| 37 | 0, 0, 0, 0, -1, -1, | ||
| 38 | -1, -1, 0, 0, 0, 0, | ||
| 39 | -1, -1, -1, -1, 0, 0, | ||
| 40 | 0, 0, 40, 1, 0, 0, | ||
| 41 | 64, 0, 0, 0, 16, 0, | ||
| 42 | 0, 0, 2, 0, 0, 0, | ||
| 43 | 56, 1, 0, 0, 0, 0, | ||
| 44 | 0, 0, -1, -1, -1, -1, | ||
| 45 | 0, 0, 0, 0, -1, -1, | ||
| 46 | -1, -1, 0, 0, 0, 0, | ||
| 47 | 92, 1, 0, 0, 80, 0, | ||
| 48 | 0, 0, 8, 0, 0, 0, | ||
| 49 | 0, 0, 0, 0, 108, 1, | ||
| 50 | 0, 0, 0, 0, 0, 0, | ||
| 51 | -1, -1, -1, -1, 0, 0, | ||
| 52 | 0, 0, -1, -1, -1, -1, | ||
| 53 | 0, 0, 0, 0, 95, 50, | ||
| 54 | 52, 95, 109, 48, 0, 102, | ||
| 55 | 108, 111, 97, 116, 52, 120, | ||
| 56 | 52, 0, 2, 0, 3, 0, | ||
| 57 | 4, 0, 4, 0, 0, 0, | ||
| 58 | 0, 0, 0, 0, 0, 0, | ||
| 59 | 0, 0, 0, 0, 0, 0, | ||
| 60 | 0, 0, 0, 0, 0, 0, | ||
| 61 | 0, 0, 0, 0, -5, 0, | ||
| 62 | 0, 0, 95, 50, 52, 95, | ||
| 63 | 109, 49, 0, 102, 108, 111, | ||
| 64 | 97, 116, 52, 0, -85, -85, | ||
| 65 | 1, 0, 3, 0, 1, 0, | ||
| 66 | 4, 0, 0, 0, 0, 0, | ||
| 67 | 0, 0, 0, 0, 0, 0, | ||
| 68 | 0, 0, 0, 0, 0, 0, | ||
| 69 | 0, 0, 0, 0, 0, 0, | ||
| 70 | 0, 0, 47, 1, 0, 0, | ||
| 71 | 95, 50, 52, 95, 109, 50, | ||
| 72 | 0, 102, 108, 111, 97, 116, | ||
| 73 | 50, 0, -85, -85, 1, 0, | ||
| 74 | 3, 0, 1, 0, 2, 0, | ||
| 75 | 0, 0, 0, 0, 0, 0, | ||
| 76 | 0, 0, 0, 0, 0, 0, | ||
| 77 | 0, 0, 0, 0, 0, 0, | ||
| 78 | 0, 0, 0, 0, 0, 0, | ||
| 79 | 99, 1, 0, 0, 77, 105, | ||
| 80 | 99, 114, 111, 115, 111, 102, | ||
| 81 | 116, 32, 40, 82, 41, 32, | ||
| 82 | 72, 76, 83, 76, 32, 83, | ||
| 83 | 104, 97, 100, 101, 114, 32, | ||
| 84 | 67, 111, 109, 112, 105, 108, | ||
| 85 | 101, 114, 32, 49, 48, 46, | ||
| 86 | 49, 0, 73, 83, 71, 78, | ||
| 87 | 44, 0, 0, 0, 1, 0, | ||
| 88 | 0, 0, 8, 0, 0, 0, | ||
| 89 | 32, 0, 0, 0, 0, 0, | ||
| 90 | 0, 0, 0, 0, 0, 0, | ||
| 91 | 3, 0, 0, 0, 0, 0, | ||
| 92 | 0, 0, 3, 3, 0, 0, | ||
| 93 | 84, 69, 88, 67, 79, 79, | ||
| 94 | 82, 68, 0, -85, -85, -85, | ||
| 95 | 79, 83, 71, 78, 80, 0, | ||
| 96 | 0, 0, 2, 0, 0, 0, | ||
| 97 | 8, 0, 0, 0, 56, 0, | ||
| 98 | 0, 0, 0, 0, 0, 0, | ||
| 99 | 0, 0, 0, 0, 3, 0, | ||
| 100 | 0, 0, 0, 0, 0, 0, | ||
| 101 | 15, 0, 0, 0, 65, 0, | ||
| 102 | 0, 0, 0, 0, 0, 0, | ||
| 103 | 1, 0, 0, 0, 3, 0, | ||
| 104 | 0, 0, 1, 0, 0, 0, | ||
| 105 | 15, 0, 0, 0, 84, 69, | ||
| 106 | 88, 67, 79, 79, 82, 68, | ||
| 107 | 0, 83, 86, 95, 80, 111, | ||
| 108 | 115, 105, 116, 105, 111, 110, | ||
| 109 | 0, -85, -85, -85, 83, 72, | ||
| 110 | 69, 88, -48, 0, 0, 0, | ||
| 111 | 80, 0, 1, 0, 52, 0, | ||
| 112 | 0, 0, 106, 8, 0, 1, | ||
| 113 | 89, 0, 0, 4, 70,-114, | ||
| 114 | 32, 0, 0, 0, 0, 0, | ||
| 115 | 5, 0, 0, 0, 95, 0, | ||
| 116 | 0, 3, 50, 16, 16, 0, | ||
| 117 | 0, 0, 0, 0, 101, 0, | ||
| 118 | 0, 3, -14, 32, 16, 0, | ||
| 119 | 0, 0, 0, 0, 103, 0, | ||
| 120 | 0, 4, -14, 32, 16, 0, | ||
| 121 | 1, 0, 0, 0, 1, 0, | ||
| 122 | 0, 0, 104, 0, 0, 2, | ||
| 123 | 1, 0, 0, 0, 54, 0, | ||
| 124 | 0, 6, -14, 32, 16, 0, | ||
| 125 | 0, 0, 0, 0, 70,-114, | ||
| 126 | 32, 0, 0, 0, 0, 0, | ||
| 127 | 4, 0, 0, 0, 56, 0, | ||
| 128 | 0, 8, -14, 0, 16, 0, | ||
| 129 | 0, 0, 0, 0, 86, 21, | ||
| 130 | 16, 0, 0, 0, 0, 0, | ||
| 131 | 70,-114, 32, 0, 0, 0, | ||
| 132 | 0, 0, 1, 0, 0, 0, | ||
| 133 | 50, 0, 0, 10, -14, 0, | ||
| 134 | 16, 0, 0, 0, 0, 0, | ||
| 135 | 6, 16, 16, 0, 0, 0, | ||
| 136 | 0, 0, 70,-114, 32, 0, | ||
| 137 | 0, 0, 0, 0, 0, 0, | ||
| 138 | 0, 0, 70, 14, 16, 0, | ||
| 139 | 0, 0, 0, 0, 0, 0, | ||
| 140 | 0, 8, -14, 32, 16, 0, | ||
| 141 | 1, 0, 0, 0, 70, 14, | ||
| 142 | 16, 0, 0, 0, 0, 0, | ||
| 143 | 70,-114, 32, 0, 0, 0, | ||
| 144 | 0, 0, 3, 0, 0, 0, | ||
| 145 | 62, 0, 0, 1, 83, 84, | ||
| 146 | 65, 84,-108, 0, 0, 0, | ||
| 147 | 5, 0, 0, 0, 1, 0, | ||
| 148 | 0, 0, 0, 0, 0, 0, | ||
| 149 | 3, 0, 0, 0, 3, 0, | ||
| 150 | 0, 0, 0, 0, 0, 0, | ||
| 151 | 0, 0, 0, 0, 1, 0, | ||
| 152 | 0, 0, 0, 0, 0, 0, | ||
| 153 | 0, 0, 0, 0, 0, 0, | ||
| 154 | 0, 0, 0, 0, 0, 0, | ||
| 155 | 0, 0, 0, 0, 0, 0, | ||
| 156 | 0, 0, 0, 0, 0, 0, | ||
| 157 | 0, 0, 0, 0, 0, 0, | ||
| 158 | 0, 0, 0, 0, 0, 0, | ||
| 159 | 0, 0, 0, 0, 1, 0, | ||
| 160 | 0, 0, 0, 0, 0, 0, | ||
| 161 | 0, 0, 0, 0, 0, 0, | ||
| 162 | 0, 0, 0, 0, 0, 0, | ||
| 163 | 0, 0, 0, 0, 0, 0, | ||
| 164 | 0, 0, 0, 0, 0, 0, | ||
| 165 | 0, 0, 0, 0, 0, 0, | ||
| 166 | 0, 0, 0, 0, 0, 0, | ||
| 167 | 0, 0, 0, 0, 0, 0, | ||
| 168 | 0, 0, 0, 0, 0, 0, | ||
| 169 | 0, 0, 0, 0, 0, 0, | ||
| 170 | 0, 0, 0, 0, 0, 0, | ||
| 171 | 0, 0, 0, 0 | ||
| 172 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.sm60.dxil.h b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.sm60.dxil.h new file mode 100644 index 0000000..8320325 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.sm60.dxil.h | |||
| @@ -0,0 +1,496 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; TEXCOORD 0 xy 0 NONE float xy | ||
| 8 | ; | ||
| 9 | ; | ||
| 10 | ; Output signature: | ||
| 11 | ; | ||
| 12 | ; Name Index Mask Register SysValue Format Used | ||
| 13 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 14 | ; TEXCOORD 0 xyzw 0 NONE float xyzw | ||
| 15 | ; SV_Position 0 xyzw 1 POS float xyzw | ||
| 16 | ; | ||
| 17 | ; shader hash: 28e70f2da15e5a0c84402943a6b12723 | ||
| 18 | ; | ||
| 19 | ; Pipeline Runtime Information: | ||
| 20 | ; | ||
| 21 | ; Vertex Shader | ||
| 22 | ; OutputPositionPresent=1 | ||
| 23 | ; | ||
| 24 | ; | ||
| 25 | ; Input signature: | ||
| 26 | ; | ||
| 27 | ; Name Index InterpMode DynIdx | ||
| 28 | ; -------------------- ----- ---------------------- ------ | ||
| 29 | ; TEXCOORD 0 | ||
| 30 | ; | ||
| 31 | ; Output signature: | ||
| 32 | ; | ||
| 33 | ; Name Index InterpMode DynIdx | ||
| 34 | ; -------------------- ----- ---------------------- ------ | ||
| 35 | ; TEXCOORD 0 linear | ||
| 36 | ; SV_Position 0 noperspective | ||
| 37 | ; | ||
| 38 | ; Buffer Definitions: | ||
| 39 | ; | ||
| 40 | ; cbuffer _22_24 | ||
| 41 | ; { | ||
| 42 | ; | ||
| 43 | ; struct hostlayout._22_24 | ||
| 44 | ; { | ||
| 45 | ; | ||
| 46 | ; row_major float4x4 _24_m0; ; Offset: 0 | ||
| 47 | ; float4 _24_m1; ; Offset: 64 | ||
| 48 | ; float2 _24_m2; ; Offset: 80 | ||
| 49 | ; | ||
| 50 | ; } _22_24; ; Offset: 0 Size: 88 | ||
| 51 | ; | ||
| 52 | ; } | ||
| 53 | ; | ||
| 54 | ; | ||
| 55 | ; Resource Bindings: | ||
| 56 | ; | ||
| 57 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 58 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 59 | ; _22_24 cbuffer NA NA CB0 cb0,space1 1 | ||
| 60 | ; | ||
| 61 | ; | ||
| 62 | ; ViewId state: | ||
| 63 | ; | ||
| 64 | ; Number of inputs: 2, outputs: 8 | ||
| 65 | ; Outputs dependent on ViewId: { } | ||
| 66 | ; Inputs contributing to computation of Outputs: | ||
| 67 | ; output 4 depends on inputs: { 0, 1 } | ||
| 68 | ; output 5 depends on inputs: { 0, 1 } | ||
| 69 | ; output 6 depends on inputs: { 0, 1 } | ||
| 70 | ; output 7 depends on inputs: { 0, 1 } | ||
| 71 | ; | ||
| 72 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 73 | target triple = "dxil-ms-dx" | ||
| 74 | |||
| 75 | %dx.types.Handle = type { i8* } | ||
| 76 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 77 | %hostlayout._22_24 = type { [4 x <4 x float>], <4 x float>, <2 x float> } | ||
| 78 | |||
| 79 | define void @main() { | ||
| 80 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 81 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 82 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 83 | %4 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 84 | %5 = extractvalue %dx.types.CBufRet.f32 %4, 0 | ||
| 85 | %6 = extractvalue %dx.types.CBufRet.f32 %4, 1 | ||
| 86 | %7 = extractvalue %dx.types.CBufRet.f32 %4, 2 | ||
| 87 | %8 = extractvalue %dx.types.CBufRet.f32 %4, 3 | ||
| 88 | %9 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 89 | %10 = extractvalue %dx.types.CBufRet.f32 %9, 0 | ||
| 90 | %11 = extractvalue %dx.types.CBufRet.f32 %9, 1 | ||
| 91 | %12 = extractvalue %dx.types.CBufRet.f32 %9, 2 | ||
| 92 | %13 = extractvalue %dx.types.CBufRet.f32 %9, 3 | ||
| 93 | %14 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 94 | %15 = extractvalue %dx.types.CBufRet.f32 %14, 0 | ||
| 95 | %16 = extractvalue %dx.types.CBufRet.f32 %14, 1 | ||
| 96 | %17 = extractvalue %dx.types.CBufRet.f32 %14, 2 | ||
| 97 | %18 = extractvalue %dx.types.CBufRet.f32 %14, 3 | ||
| 98 | %19 = fmul fast float %5, %2 | ||
| 99 | %20 = call float @dx.op.tertiary.f32(i32 46, float %3, float %10, float %19) ; FMad(a,b,c) | ||
| 100 | %21 = fadd fast float %15, %20 | ||
| 101 | %22 = fmul fast float %6, %2 | ||
| 102 | %23 = call float @dx.op.tertiary.f32(i32 46, float %3, float %11, float %22) ; FMad(a,b,c) | ||
| 103 | %24 = fadd fast float %23, %16 | ||
| 104 | %25 = fmul fast float %7, %2 | ||
| 105 | %26 = call float @dx.op.tertiary.f32(i32 46, float %3, float %12, float %25) ; FMad(a,b,c) | ||
| 106 | %27 = fadd fast float %26, %17 | ||
| 107 | %28 = fmul fast float %8, %2 | ||
| 108 | %29 = call float @dx.op.tertiary.f32(i32 46, float %3, float %13, float %28) ; FMad(a,b,c) | ||
| 109 | %30 = fadd fast float %29, %18 | ||
| 110 | %31 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex) | ||
| 111 | %32 = extractvalue %dx.types.CBufRet.f32 %31, 0 | ||
| 112 | %33 = extractvalue %dx.types.CBufRet.f32 %31, 1 | ||
| 113 | %34 = extractvalue %dx.types.CBufRet.f32 %31, 2 | ||
| 114 | %35 = extractvalue %dx.types.CBufRet.f32 %31, 3 | ||
| 115 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %32) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 116 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %33) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 117 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %34) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 118 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %35) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 119 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %21) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 120 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %24) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 121 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 2, float %27) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 122 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 3, float %30) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 123 | ret void | ||
| 124 | } | ||
| 125 | |||
| 126 | ; Function Attrs: nounwind readnone | ||
| 127 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 128 | |||
| 129 | ; Function Attrs: nounwind | ||
| 130 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 131 | |||
| 132 | ; Function Attrs: nounwind readonly | ||
| 133 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 134 | |||
| 135 | ; Function Attrs: nounwind readnone | ||
| 136 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 137 | |||
| 138 | ; Function Attrs: nounwind readonly | ||
| 139 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 140 | |||
| 141 | attributes #0 = { nounwind readnone } | ||
| 142 | attributes #1 = { nounwind } | ||
| 143 | attributes #2 = { nounwind readonly } | ||
| 144 | |||
| 145 | !llvm.ident = !{!0} | ||
| 146 | !dx.version = !{!1} | ||
| 147 | !dx.valver = !{!2} | ||
| 148 | !dx.shaderModel = !{!3} | ||
| 149 | !dx.resources = !{!4} | ||
| 150 | !dx.viewIdState = !{!7} | ||
| 151 | !dx.entryPoints = !{!8} | ||
| 152 | |||
| 153 | !0 = !{!"dxc(private) 1.8.0.4662 (416fab6b5)"} | ||
| 154 | !1 = !{i32 1, i32 0} | ||
| 155 | !2 = !{i32 1, i32 8} | ||
| 156 | !3 = !{!"vs", i32 6, i32 0} | ||
| 157 | !4 = !{null, null, !5, null} | ||
| 158 | !5 = !{!6} | ||
| 159 | !6 = !{i32 0, %hostlayout._22_24* undef, !"", i32 1, i32 0, i32 1, i32 88, null} | ||
| 160 | !7 = !{[4 x i32] [i32 2, i32 8, i32 240, i32 240]} | ||
| 161 | !8 = !{void ()* @main, !"main", !9, !4, null} | ||
| 162 | !9 = !{!10, !14, null} | ||
| 163 | !10 = !{!11} | ||
| 164 | !11 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 0, i8 0, !13} | ||
| 165 | !12 = !{i32 0} | ||
| 166 | !13 = !{i32 3, i32 3} | ||
| 167 | !14 = !{!15, !17} | ||
| 168 | !15 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 169 | !16 = !{i32 3, i32 15} | ||
| 170 | !17 = !{i32 1, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 1, i8 0, !16} | ||
| 171 | |||
| 172 | #endif | ||
| 173 | |||
| 174 | static const unsigned char linepoint_vert_sm60_dxil[] = { | ||
| 175 | 0x44, 0x58, 0x42, 0x43, 0x07, 0x97, 0x68, 0xde, 0x5f, 0x50, 0x0b, 0x5d, | ||
| 176 | 0x22, 0x1b, 0xe5, 0xb4, 0xe8, 0xdb, 0x02, 0xea, 0x01, 0x00, 0x00, 0x00, | ||
| 177 | 0x04, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, | ||
| 178 | 0x4c, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, | ||
| 179 | 0xb8, 0x01, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x28, 0x08, 0x00, 0x00, | ||
| 180 | 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 181 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, | ||
| 182 | 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 183 | 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 184 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 185 | 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, | ||
| 186 | 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, | ||
| 187 | 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 188 | 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 189 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 190 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, | ||
| 191 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 192 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 193 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x53, 0x56, 0x5f, | ||
| 194 | 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 195 | 0x50, 0x53, 0x56, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, | ||
| 196 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, | ||
| 198 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, | ||
| 199 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 200 | 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 201 | 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 202 | 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 203 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 204 | 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x6d, | ||
| 205 | 0x61, 0x69, 0x6e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 206 | 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 207 | 0x01, 0x00, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 208 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, | ||
| 209 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x44, 0x03, | ||
| 210 | 0x03, 0x04, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, | ||
| 211 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, | ||
| 212 | 0x4c, 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x93, 0x01, 0x00, 0x00, | ||
| 213 | 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 214 | 0x34, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, | ||
| 215 | 0x8a, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 216 | 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, | ||
| 217 | 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, | ||
| 218 | 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, | ||
| 219 | 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, | ||
| 220 | 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, | ||
| 221 | 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, | ||
| 222 | 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, | ||
| 223 | 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, | ||
| 224 | 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 225 | 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, | ||
| 226 | 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, | ||
| 227 | 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, | ||
| 228 | 0x24, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, | ||
| 229 | 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, | ||
| 230 | 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x6c, 0x23, 0x00, | ||
| 231 | 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, | ||
| 232 | 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, | ||
| 233 | 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, | ||
| 234 | 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, | ||
| 235 | 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, | ||
| 236 | 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, | ||
| 237 | 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, | ||
| 238 | 0x43, 0x12, 0xd4, 0x61, 0x04, 0x61, 0xb8, 0xe8, 0x70, 0xa4, 0x69, 0x01, | ||
| 239 | 0x30, 0x87, 0x9a, 0xfc, 0xdf, 0xb6, 0x7f, 0x1b, 0x47, 0x83, 0xad, 0x97, | ||
| 240 | 0x70, 0x12, 0x10, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, | ||
| 241 | 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, | ||
| 242 | 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, | ||
| 243 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, | ||
| 244 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, | ||
| 245 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 246 | 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 247 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, | ||
| 248 | 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 249 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, | ||
| 250 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 251 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, | ||
| 252 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, | ||
| 253 | 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 254 | 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 255 | 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 256 | 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
| 257 | 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, | ||
| 258 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 259 | 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, | ||
| 260 | 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1b, 0x50, | ||
| 261 | 0x04, 0x85, 0x50, 0x06, 0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x1a, 0x05, | ||
| 262 | 0x1a, 0x50, 0x1e, 0x05, 0x51, 0x58, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08, | ||
| 263 | 0x0a, 0xa1, 0x0c, 0x28, 0xd6, 0x00, 0xe1, 0x19, 0x00, 0xca, 0x33, 0x00, | ||
| 264 | 0xa4, 0xc7, 0x22, 0x04, 0x04, 0x3e, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
| 265 | 0x79, 0x18, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, | ||
| 266 | 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, | ||
| 267 | 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, | ||
| 268 | 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, | ||
| 269 | 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, | ||
| 270 | 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0xc1, 0x6e, 0x6e, | ||
| 271 | 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0x19, 0x47, 0xe3, | ||
| 272 | 0x4b, 0x46, 0xe6, 0x4b, 0x86, 0x66, 0x82, 0x40, 0x24, 0x1b, 0x10, 0x42, | ||
| 273 | 0x59, 0x06, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, | ||
| 274 | 0x98, 0x20, 0x60, 0x1b, 0x8d, 0x2f, 0x19, 0x9a, 0xaf, 0x36, 0x98, 0x09, | ||
| 275 | 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30, 0x4d, 0xc3, 0x04, 0x81, | ||
| 276 | 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, 0x09, 0x42, 0xa4, 0x6d, | ||
| 277 | 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e, 0x8c, 0xc6, 0x97, 0x0c, | ||
| 278 | 0xcd, 0x57, 0x5b, 0xcc, 0x04, 0x81, 0x78, 0x26, 0x08, 0x04, 0xb4, 0x41, | ||
| 279 | 0x41, 0xb4, 0x6a, 0xb3, 0xae, 0x0b, 0xe3, 0x26, 0x1a, 0x5f, 0x32, 0x34, | ||
| 280 | 0x5f, 0x6d, 0x32, 0x13, 0x04, 0x22, 0xda, 0x80, 0x20, 0x5e, 0xf5, 0x59, | ||
| 281 | 0x17, 0x27, 0x6d, 0x20, 0x98, 0xac, 0x03, 0x83, 0x0d, 0x03, 0x01, 0x85, | ||
| 282 | 0xc1, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0x82, 0x0c, 0xc8, 0x60, | ||
| 283 | 0x43, 0x50, 0x06, 0x1b, 0x86, 0x61, 0x0c, 0xcc, 0x60, 0x82, 0xa0, 0x75, | ||
| 284 | 0x1b, 0x02, 0x34, 0x20, 0xd1, 0x16, 0x96, 0xe6, 0x46, 0x84, 0xaa, 0x08, | ||
| 285 | 0x6b, 0xe8, 0xe9, 0x49, 0x8a, 0x68, 0x82, 0x50, 0x54, 0x13, 0x84, 0xc2, | ||
| 286 | 0xda, 0x10, 0x10, 0x13, 0x84, 0xe2, 0xda, 0x20, 0x54, 0xd5, 0x86, 0x85, | ||
| 287 | 0x58, 0x03, 0x36, 0x68, 0x03, 0x37, 0x68, 0x83, 0xe1, 0x0d, 0x88, 0x36, | ||
| 288 | 0x80, 0x83, 0x0d, 0x41, 0x1c, 0x4c, 0x10, 0x0a, 0x6c, 0x82, 0x40, 0x48, | ||
| 289 | 0x1b, 0x84, 0x8a, 0x0e, 0x36, 0x2c, 0xc4, 0x1a, 0xb0, 0x41, 0x1b, 0xb8, | ||
| 290 | 0xc1, 0x1b, 0x0c, 0x73, 0x40, 0xb4, 0x41, 0x1d, 0x70, 0x99, 0xb2, 0xfa, | ||
| 291 | 0x82, 0x7a, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x20, 0x14, 0xd9, | ||
| 292 | 0x86, 0x65, 0xb8, 0x03, 0x36, 0xc0, 0x03, 0x37, 0x98, 0x83, 0x61, 0x0e, | ||
| 293 | 0x86, 0x36, 0xa8, 0x83, 0x0d, 0x82, 0x1d, 0xe4, 0xc1, 0x86, 0x41, 0x0e, | ||
| 294 | 0xf4, 0x00, 0xd8, 0x50, 0x8c, 0x81, 0x1a, 0xec, 0xc1, 0x03, 0xd0, 0x30, | ||
| 295 | 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x13, 0x8b, 0x34, 0xb7, | ||
| 296 | 0x39, 0xba, 0xb9, 0x09, 0x02, 0x41, 0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x62, | ||
| 297 | 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, 0x35, 0x47, 0xb7, 0x01, 0xe9, 0x03, | ||
| 298 | 0x3f, 0xf8, 0x03, 0x50, 0x08, 0x05, 0x49, 0x14, 0xfc, 0xa0, 0x0a, 0x1b, | ||
| 299 | 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, | ||
| 300 | 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, | ||
| 301 | 0x20, 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, | ||
| 302 | 0x09, 0x8a, 0x3a, 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, | ||
| 303 | 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x02, 0xa4, 0x0c, 0x19, 0x9e, 0x8b, | ||
| 304 | 0x5c, 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0xc0, 0xa9, | ||
| 305 | 0x44, 0x86, 0xe7, 0x42, 0x97, 0x07, 0x57, 0x16, 0xe4, 0xe6, 0xf6, 0x46, | ||
| 306 | 0x17, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x37, 0x45, 0x08, 0x03, 0x33, 0xa8, | ||
| 307 | 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, 0x17, | ||
| 308 | 0x46, 0x57, 0x36, 0x25, 0x40, 0x83, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, | ||
| 309 | 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x82, 0x3d, | ||
| 310 | 0xe8, 0x42, 0x86, 0xe7, 0x32, 0xf6, 0x56, 0xe7, 0x46, 0x57, 0x26, 0x37, | ||
| 311 | 0x37, 0x25, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 312 | 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, | ||
| 313 | 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, | ||
| 314 | 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, | ||
| 315 | 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, | ||
| 316 | 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, | ||
| 317 | 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, | ||
| 318 | 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, | ||
| 319 | 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, | ||
| 320 | 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, | ||
| 321 | 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, | ||
| 322 | 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 323 | 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, | ||
| 324 | 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, | ||
| 325 | 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, | ||
| 326 | 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, | ||
| 327 | 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, | ||
| 328 | 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, | ||
| 329 | 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 330 | 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, | ||
| 331 | 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, | ||
| 332 | 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, | ||
| 333 | 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, | ||
| 334 | 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, | ||
| 335 | 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, | ||
| 336 | 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, | ||
| 337 | 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, | ||
| 338 | 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, | ||
| 339 | 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, | ||
| 340 | 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, | ||
| 341 | 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, | ||
| 342 | 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, | ||
| 343 | 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, | ||
| 344 | 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, | ||
| 345 | 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, | ||
| 346 | 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, | ||
| 347 | 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xe7, 0x0f, 0x2d, | ||
| 348 | 0xa1, 0x5e, 0x5a, 0x0c, 0x84, 0x40, 0x29, 0x43, 0xa6, 0xb1, 0x27, 0x23, | ||
| 349 | 0x44, 0x58, 0x49, 0x4c, 0xd4, 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, | ||
| 350 | 0xb5, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, | ||
| 351 | 0x10, 0x00, 0x00, 0x00, 0xbc, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, | ||
| 352 | 0x21, 0x0c, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, | ||
| 353 | 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, | ||
| 354 | 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, | ||
| 355 | 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, | ||
| 356 | 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, | ||
| 357 | 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, | ||
| 358 | 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, | ||
| 359 | 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, | ||
| 360 | 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, | ||
| 361 | 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, | ||
| 362 | 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, | ||
| 363 | 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 364 | 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, | ||
| 365 | 0x89, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, | ||
| 366 | 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, | ||
| 367 | 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, | ||
| 368 | 0x10, 0x6c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, | ||
| 369 | 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, | ||
| 370 | 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, | ||
| 371 | 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, | ||
| 372 | 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, | ||
| 373 | 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, | ||
| 374 | 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, | ||
| 375 | 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x61, 0x04, 0x61, 0xb8, 0xe8, | ||
| 376 | 0x70, 0xa4, 0x69, 0x01, 0x30, 0x87, 0x9a, 0xfc, 0xdf, 0xb6, 0x7f, 0x1b, | ||
| 377 | 0x47, 0x83, 0xad, 0x97, 0x70, 0x12, 0x10, 0x00, 0x13, 0x14, 0x72, 0xc0, | ||
| 378 | 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, | ||
| 379 | 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, | ||
| 380 | 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 381 | 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, | ||
| 382 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, | ||
| 383 | 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 384 | 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 385 | 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 386 | 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, | ||
| 387 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, | ||
| 388 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, | ||
| 389 | 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 390 | 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 391 | 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, | ||
| 392 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, | ||
| 393 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, | ||
| 394 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, | ||
| 395 | 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, | ||
| 396 | 0x0d, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, | ||
| 397 | 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, | ||
| 398 | 0x10, 0xc5, 0x50, 0xb0, 0x01, 0x65, 0x50, 0x1e, 0x54, 0x4a, 0x62, 0x04, | ||
| 399 | 0xa0, 0x08, 0x0a, 0xa1, 0x0c, 0x28, 0xcf, 0x00, 0x90, 0x1e, 0x8b, 0x10, | ||
| 400 | 0x10, 0xf8, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 401 | 0x53, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, | ||
| 402 | 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, | ||
| 403 | 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, | ||
| 404 | 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, | ||
| 405 | 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, | ||
| 406 | 0x20, 0x26, 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, 0x73, 0x13, | ||
| 407 | 0x04, 0x22, 0xd9, 0x30, 0x20, 0x09, 0x31, 0x41, 0xc8, 0x24, 0x02, 0x13, | ||
| 408 | 0x04, 0x42, 0xd9, 0x80, 0x10, 0x0b, 0x33, 0x10, 0x43, 0x03, 0x6c, 0x08, | ||
| 409 | 0x9c, 0x0d, 0x04, 0x00, 0x3c, 0xc0, 0x04, 0x41, 0x9b, 0x36, 0x04, 0xd1, | ||
| 410 | 0x04, 0x41, 0x00, 0x48, 0xb4, 0x85, 0xa5, 0xb9, 0x11, 0xa1, 0x2a, 0xc2, | ||
| 411 | 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xcd, 0x04, 0xa1, 0x70, | ||
| 412 | 0x36, 0x04, 0xc4, 0x04, 0xa1, 0x78, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xd0, | ||
| 413 | 0xb4, 0x0d, 0x0b, 0x51, 0x59, 0x17, 0x76, 0x0d, 0x19, 0x71, 0x6d, 0x1b, | ||
| 414 | 0x02, 0x6e, 0x82, 0x50, 0x40, 0x13, 0x04, 0x82, 0xd9, 0x20, 0x68, 0xdf, | ||
| 415 | 0x86, 0x85, 0xa8, 0xac, 0x0b, 0xcb, 0x06, 0x8f, 0xb8, 0xc0, 0x80, 0xcb, | ||
| 416 | 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, | ||
| 417 | 0xa1, 0x88, 0x36, 0x2c, 0x83, 0x18, 0x58, 0x63, 0x80, 0x79, 0x83, 0x37, | ||
| 418 | 0x5c, 0x60, 0xb0, 0x41, 0x08, 0x03, 0x32, 0xd8, 0x30, 0x74, 0x65, 0x00, | ||
| 419 | 0x6c, 0x28, 0x26, 0xca, 0x0c, 0x20, 0xa0, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, | ||
| 420 | 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7, | ||
| 421 | 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90, | ||
| 422 | 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8c, 0x3a, | ||
| 423 | 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, | ||
| 424 | 0x65, 0x6c, 0x53, 0x82, 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, 0xd9, 0xdc, | ||
| 425 | 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0xe0, 0xa9, 0x43, 0x86, 0xe7, | ||
| 426 | 0x62, 0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, 0x17, 0x46, 0x57, 0x36, | ||
| 427 | 0x25, 0x88, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, | ||
| 428 | 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xcc, 0x00, 0x00, 0x00, 0x00, | ||
| 429 | 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, | ||
| 430 | 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, | ||
| 431 | 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, | ||
| 432 | 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, | ||
| 433 | 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, | ||
| 434 | 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, | ||
| 435 | 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, | ||
| 436 | 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, | ||
| 437 | 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, | ||
| 438 | 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, | ||
| 439 | 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, | ||
| 440 | 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, | ||
| 441 | 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, | ||
| 442 | 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, | ||
| 443 | 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, | ||
| 444 | 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, | ||
| 445 | 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, | ||
| 446 | 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, | ||
| 447 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, | ||
| 448 | 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, | ||
| 449 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, | ||
| 450 | 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, | ||
| 451 | 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, | ||
| 452 | 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, | ||
| 453 | 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, | ||
| 454 | 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, | ||
| 455 | 0x71, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, | ||
| 456 | 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, | ||
| 457 | 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, | ||
| 458 | 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, | ||
| 459 | 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, | ||
| 460 | 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, | ||
| 461 | 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, | ||
| 462 | 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, | ||
| 463 | 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, | ||
| 464 | 0x5c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, | ||
| 465 | 0x05, 0x00, 0x00, 0x00, 0x44, 0x4a, 0xa1, 0xec, 0x8a, 0xab, 0x10, 0x66, | ||
| 466 | 0x00, 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 467 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x5d, 0x43, 0x53, 0x55, 0xc1, | ||
| 468 | 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x9c, 0x61, 0x59, 0x4f, 0x31, | ||
| 469 | 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x77, 0x5c, 0x17, 0x61, 0x8c, | ||
| 470 | 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xc3, 0x29, 0x03, 0x36, 0x9a, 0x10, | ||
| 471 | 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, | ||
| 472 | 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x4d, 0x18, 0x3c, 0x88, 0x37, 0x9a, | ||
| 473 | 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, | ||
| 474 | 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x19, 0x50, 0x8d, 0x37, | ||
| 475 | 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, | ||
| 476 | 0xc4, 0x60, 0x4e, 0x24, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, | ||
| 477 | 0xd6, 0x20, 0x8b, 0x94, 0xc0, 0x8c, 0x00, 0x3a, 0x06, 0x51, 0xf2, 0x19, | ||
| 478 | 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x0d, 0x38, 0x8a, 0x09, 0x2c, | ||
| 479 | 0x40, 0xa0, 0x63, 0xd2, 0x25, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, | ||
| 480 | 0x78, 0xe2, 0xe0, 0xbb, 0x9c, 0xc0, 0x02, 0x05, 0x3a, 0x46, 0x69, 0xf2, | ||
| 481 | 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x0e, 0xc4, 0x40, 0x83, | ||
| 482 | 0x02, 0x0b, 0x18, 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x73, | ||
| 483 | 0x07, 0x65, 0xe0, 0x8d, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, | ||
| 484 | 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88, 0x41, 0x02, 0x80, 0x20, | ||
| 485 | 0x18, 0x20, 0x7d, 0xb0, 0x06, 0x78, 0x80, 0x07, 0x71, 0x40, 0x8c, 0x18, | ||
| 486 | 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, 0x07, 0x6b, 0x80, 0x07, 0x78, 0x50, | ||
| 487 | 0x06, 0xc3, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x7d, 0xb0, 0x06, | ||
| 488 | 0x78, 0x80, 0x07, 0x70, 0x20, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, | ||
| 489 | 0xd2, 0x07, 0x6b, 0x80, 0x07, 0x78, 0xe0, 0x06, 0xc1, 0x88, 0x41, 0x02, | ||
| 490 | 0x80, 0x20, 0x18, 0x20, 0x7d, 0xb0, 0x06, 0x79, 0x80, 0x07, 0x71, 0xf0, | ||
| 491 | 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, 0x07, 0x6b, 0x90, 0x07, | ||
| 492 | 0x78, 0x50, 0x06, 0xcc, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x7d, | ||
| 493 | 0xb0, 0x06, 0x79, 0x80, 0x07, 0x70, 0x90, 0x8c, 0x18, 0x24, 0x00, 0x08, | ||
| 494 | 0x82, 0x01, 0xd2, 0x07, 0x6b, 0x90, 0x07, 0x78, 0xe0, 0x06, 0x06, 0x02, | ||
| 495 | 0x00, 0x00, 0x00, 0x00 | ||
| 496 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.spv.h b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.spv.h new file mode 100644 index 0000000..449e8dd --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/linepoint.vert.spv.h | |||
| @@ -0,0 +1,93 @@ | |||
| 1 | static const unsigned char linepoint_vert_spv[] = { | ||
| 2 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, | ||
| 3 | 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, | ||
| 4 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 5 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, | ||
| 6 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 7 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 9 | 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, | ||
| 10 | 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 11 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, | ||
| 12 | 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 13 | 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 14 | 0x02, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 15 | 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 16 | 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, | ||
| 17 | 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, | ||
| 18 | 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 19 | 0x48, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 20 | 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, | ||
| 21 | 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 22 | 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, | ||
| 23 | 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 24 | 0x48, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 25 | 0x23, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, | ||
| 26 | 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 27 | 0x18, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 28 | 0x47, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, | ||
| 29 | 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, | ||
| 30 | 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 31 | 0x26, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 32 | 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, | ||
| 33 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, | ||
| 34 | 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, | ||
| 35 | 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 36 | 0x15, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, | ||
| 37 | 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 38 | 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, | ||
| 39 | 0x0a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 40 | 0x1e, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 41 | 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 42 | 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 43 | 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 44 | 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, | ||
| 45 | 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 46 | 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 47 | 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 48 | 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, | ||
| 49 | 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 50 | 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 51 | 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
| 52 | 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, | ||
| 53 | 0x15, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 54 | 0x1e, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
| 55 | 0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 56 | 0x17, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, | ||
| 57 | 0x3b, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 58 | 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, | ||
| 59 | 0x02, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 60 | 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, | ||
| 61 | 0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, | ||
| 62 | 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 63 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 64 | 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 65 | 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, | ||
| 66 | 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, | ||
| 67 | 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, | ||
| 68 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 69 | 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 70 | 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 71 | 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, | ||
| 72 | 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, | ||
| 73 | 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 74 | 0x13, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
| 75 | 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, | ||
| 76 | 0x15, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, | ||
| 77 | 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, | ||
| 78 | 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, | ||
| 79 | 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 80 | 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 81 | 0x22, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, | ||
| 82 | 0x1f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00, | ||
| 83 | 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, | ||
| 84 | 0x22, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 85 | 0x25, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 86 | 0x3e, 0x00, 0x03, 0x00, 0x25, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, | ||
| 87 | 0x41, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, | ||
| 88 | 0x18, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, | ||
| 89 | 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, | ||
| 90 | 0x3e, 0x00, 0x03, 0x00, 0x26, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, | ||
| 91 | 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 | ||
| 92 | }; | ||
| 93 | static const unsigned int linepoint_vert_spv_len = 1076; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/metal.h b/SDL-3.2.8/src/render/gpu/shaders/metal.h new file mode 100644 index 0000000..1841a69 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/metal.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #include "linepoint.vert.metal.h" | ||
| 2 | #include "tri_color.vert.metal.h" | ||
| 3 | #include "tri_texture.vert.metal.h" | ||
| 4 | #include "color.frag.metal.h" | ||
| 5 | #include "texture_rgba.frag.metal.h" | ||
| 6 | #include "texture_rgb.frag.metal.h" | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/spir-v.h b/SDL-3.2.8/src/render/gpu/shaders/spir-v.h new file mode 100644 index 0000000..85aa3c2 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/spir-v.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #include "linepoint.vert.spv.h" | ||
| 2 | #include "tri_color.vert.spv.h" | ||
| 3 | #include "tri_texture.vert.spv.h" | ||
| 4 | #include "color.frag.spv.h" | ||
| 5 | #include "texture_rgba.frag.spv.h" | ||
| 6 | #include "texture_rgb.frag.spv.h" | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag new file mode 100644 index 0000000..9a9ada8 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #version 450 | ||
| 2 | |||
| 3 | layout(location = 0) in vec4 v_color; | ||
| 4 | layout(location = 1) in vec2 v_uv; | ||
| 5 | |||
| 6 | layout(set = 2, binding = 0) uniform sampler2D u_texture; | ||
| 7 | |||
| 8 | layout(location = 0) out vec4 o_color; | ||
| 9 | |||
| 10 | void main() { | ||
| 11 | o_color = vec4(texture(u_texture, v_uv).rgb, 1) * v_color; | ||
| 12 | } | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.metal.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.metal.h new file mode 100644 index 0000000..fbde876 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.metal.h | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | static const unsigned char texture_rgb_frag_metal[] = { | ||
| 2 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, | ||
| 3 | 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, | ||
| 4 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x69, | ||
| 5 | 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a, | ||
| 6 | 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, | ||
| 7 | 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x0a, | ||
| 8 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, | ||
| 9 | 0x5f, 0x6f, 0x75, 0x74, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 10 | 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x39, 0x20, 0x5b, 0x5b, | ||
| 11 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, | ||
| 12 | 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, | ||
| 13 | 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, | ||
| 14 | 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x32, | ||
| 15 | 0x38, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x28, 0x6c, 0x6f, 0x63, | ||
| 16 | 0x6e, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 17 | 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x6d, 0x5f, 0x31, 0x37, 0x20, 0x5b, | ||
| 18 | 0x5b, 0x75, 0x73, 0x65, 0x72, 0x28, 0x6c, 0x6f, 0x63, 0x6e, 0x31, 0x29, | ||
| 19 | 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x66, 0x72, 0x61, 0x67, | ||
| 20 | 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, | ||
| 21 | 0x75, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x28, 0x6d, 0x61, 0x69, | ||
| 22 | 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x5b, 0x5b, 0x73, | ||
| 23 | 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x74, | ||
| 24 | 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, | ||
| 25 | 0x61, 0x74, 0x3e, 0x20, 0x5f, 0x31, 0x33, 0x20, 0x5b, 0x5b, 0x74, 0x65, | ||
| 26 | 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, | ||
| 27 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x31, 0x33, 0x53, | ||
| 28 | 0x6d, 0x70, 0x6c, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, | ||
| 29 | 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, | ||
| 30 | 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, | ||
| 31 | 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, | ||
| 32 | 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6d, 0x5f, 0x39, 0x20, 0x3d, | ||
| 33 | 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x5f, 0x31, 0x33, 0x2e, | ||
| 34 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x31, 0x33, 0x53, 0x6d, | ||
| 35 | 0x70, 0x6c, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x31, 0x37, | ||
| 36 | 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, | ||
| 37 | 0x2a, 0x20, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x32, 0x38, 0x3b, 0x0a, 0x20, | ||
| 38 | 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, | ||
| 39 | 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a | ||
| 40 | }; | ||
| 41 | static const unsigned int texture_rgb_frag_metal_len = 450; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.sm50.dxbc.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.sm50.dxbc.h new file mode 100644 index 0000000..183103a --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.sm50.dxbc.h | |||
| @@ -0,0 +1,123 @@ | |||
| 1 | static const signed char texture_rgb_frag_sm50_dxbc[] = | ||
| 2 | { | ||
| 3 | 68, 88, 66, 67, -22, -54, | ||
| 4 | -48, 73, -47, -40, -92, -21, | ||
| 5 | -43, -46, 13,-120, -20, 126, | ||
| 6 | 110, 46, 1, 0, 0, 0, | ||
| 7 | -52, 2, 0, 0, 5, 0, | ||
| 8 | 0, 0, 52, 0, 0, 0, | ||
| 9 | -12, 0, 0, 0, 64, 1, | ||
| 10 | 0, 0, 116, 1, 0, 0, | ||
| 11 | 48, 2, 0, 0, 82, 68, | ||
| 12 | 69, 70, -72, 0, 0, 0, | ||
| 13 | 0, 0, 0, 0, 0, 0, | ||
| 14 | 0, 0, 2, 0, 0, 0, | ||
| 15 | 60, 0, 0, 0, 0, 5, | ||
| 16 | -1, -1, 0, 1, 0, 0, | ||
| 17 | -115, 0, 0, 0, 82, 68, | ||
| 18 | 49, 49, 60, 0, 0, 0, | ||
| 19 | 24, 0, 0, 0, 32, 0, | ||
| 20 | 0, 0, 40, 0, 0, 0, | ||
| 21 | 36, 0, 0, 0, 12, 0, | ||
| 22 | 0, 0, 0, 0, 0, 0, | ||
| 23 | 124, 0, 0, 0, 3, 0, | ||
| 24 | 0, 0, 0, 0, 0, 0, | ||
| 25 | 0, 0, 0, 0, 0, 0, | ||
| 26 | 0, 0, 0, 0, 0, 0, | ||
| 27 | 1, 0, 0, 0, 1, 0, | ||
| 28 | 0, 0,-119, 0, 0, 0, | ||
| 29 | 2, 0, 0, 0, 5, 0, | ||
| 30 | 0, 0, 4, 0, 0, 0, | ||
| 31 | -1, -1, -1, -1, 0, 0, | ||
| 32 | 0, 0, 1, 0, 0, 0, | ||
| 33 | 13, 0, 0, 0, 95, 95, | ||
| 34 | 49, 51, 95, 115, 97, 109, | ||
| 35 | 112, 108, 101, 114, 0, 95, | ||
| 36 | 49, 51, 0, 77, 105, 99, | ||
| 37 | 114, 111, 115, 111, 102, 116, | ||
| 38 | 32, 40, 82, 41, 32, 72, | ||
| 39 | 76, 83, 76, 32, 83, 104, | ||
| 40 | 97, 100, 101, 114, 32, 67, | ||
| 41 | 111, 109, 112, 105, 108, 101, | ||
| 42 | 114, 32, 49, 48, 46, 49, | ||
| 43 | 0, -85, -85, -85, 73, 83, | ||
| 44 | 71, 78, 68, 0, 0, 0, | ||
| 45 | 2, 0, 0, 0, 8, 0, | ||
| 46 | 0, 0, 56, 0, 0, 0, | ||
| 47 | 0, 0, 0, 0, 0, 0, | ||
| 48 | 0, 0, 3, 0, 0, 0, | ||
| 49 | 0, 0, 0, 0, 15, 15, | ||
| 50 | 0, 0, 56, 0, 0, 0, | ||
| 51 | 1, 0, 0, 0, 0, 0, | ||
| 52 | 0, 0, 3, 0, 0, 0, | ||
| 53 | 1, 0, 0, 0, 3, 3, | ||
| 54 | 0, 0, 84, 69, 88, 67, | ||
| 55 | 79, 79, 82, 68, 0, -85, | ||
| 56 | -85, -85, 79, 83, 71, 78, | ||
| 57 | 44, 0, 0, 0, 1, 0, | ||
| 58 | 0, 0, 8, 0, 0, 0, | ||
| 59 | 32, 0, 0, 0, 0, 0, | ||
| 60 | 0, 0, 0, 0, 0, 0, | ||
| 61 | 3, 0, 0, 0, 0, 0, | ||
| 62 | 0, 0, 15, 0, 0, 0, | ||
| 63 | 83, 86, 95, 84, 97, 114, | ||
| 64 | 103, 101, 116, 0, -85, -85, | ||
| 65 | 83, 72, 69, 88, -76, 0, | ||
| 66 | 0, 0, 80, 0, 0, 0, | ||
| 67 | 45, 0, 0, 0, 106, 8, | ||
| 68 | 0, 1, 90, 0, 0, 3, | ||
| 69 | 0, 96, 16, 0, 0, 0, | ||
| 70 | 0, 0, 88, 24, 0, 4, | ||
| 71 | 0, 112, 16, 0, 0, 0, | ||
| 72 | 0, 0, 85, 85, 0, 0, | ||
| 73 | 98, 16, 0, 3, -14, 16, | ||
| 74 | 16, 0, 0, 0, 0, 0, | ||
| 75 | 98, 16, 0, 3, 50, 16, | ||
| 76 | 16, 0, 1, 0, 0, 0, | ||
| 77 | 101, 0, 0, 3, -14, 32, | ||
| 78 | 16, 0, 0, 0, 0, 0, | ||
| 79 | 104, 0, 0, 2, 1, 0, | ||
| 80 | 0, 0, 69, 0, 0,-117, | ||
| 81 | -62, 0, 0,-128, 67, 85, | ||
| 82 | 21, 0, 114, 0, 16, 0, | ||
| 83 | 0, 0, 0, 0, 70, 16, | ||
| 84 | 16, 0, 1, 0, 0, 0, | ||
| 85 | 70, 126, 16, 0, 0, 0, | ||
| 86 | 0, 0, 0, 96, 16, 0, | ||
| 87 | 0, 0, 0, 0, 54, 0, | ||
| 88 | 0, 5,-126, 0, 16, 0, | ||
| 89 | 0, 0, 0, 0, 1, 64, | ||
| 90 | 0, 0, 0, 0,-128, 63, | ||
| 91 | 56, 0, 0, 7, -14, 32, | ||
| 92 | 16, 0, 0, 0, 0, 0, | ||
| 93 | 70, 14, 16, 0, 0, 0, | ||
| 94 | 0, 0, 70, 30, 16, 0, | ||
| 95 | 0, 0, 0, 0, 62, 0, | ||
| 96 | 0, 1, 83, 84, 65, 84, | ||
| 97 | -108, 0, 0, 0, 4, 0, | ||
| 98 | 0, 0, 1, 0, 0, 0, | ||
| 99 | 0, 0, 0, 0, 3, 0, | ||
| 100 | 0, 0, 1, 0, 0, 0, | ||
| 101 | 0, 0, 0, 0, 0, 0, | ||
| 102 | 0, 0, 1, 0, 0, 0, | ||
| 103 | 0, 0, 0, 0, 0, 0, | ||
| 104 | 0, 0, 0, 0, 0, 0, | ||
| 105 | 0, 0, 0, 0, 0, 0, | ||
| 106 | 0, 0, 0, 0, 0, 0, | ||
| 107 | 1, 0, 0, 0, 0, 0, | ||
| 108 | 0, 0, 0, 0, 0, 0, | ||
| 109 | 0, 0, 0, 0, 0, 0, | ||
| 110 | 0, 0, 1, 0, 0, 0, | ||
| 111 | 0, 0, 0, 0, 0, 0, | ||
| 112 | 0, 0, 0, 0, 0, 0, | ||
| 113 | 0, 0, 0, 0, 0, 0, | ||
| 114 | 0, 0, 0, 0, 0, 0, | ||
| 115 | 0, 0, 0, 0, 0, 0, | ||
| 116 | 0, 0, 0, 0, 0, 0, | ||
| 117 | 0, 0, 0, 0, 0, 0, | ||
| 118 | 0, 0, 0, 0, 0, 0, | ||
| 119 | 0, 0, 0, 0, 0, 0, | ||
| 120 | 0, 0, 0, 0, 0, 0, | ||
| 121 | 0, 0, 0, 0, 0, 0, | ||
| 122 | 0, 0 | ||
| 123 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.sm60.dxil.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.sm60.dxil.h new file mode 100644 index 0000000..e07e135 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.sm60.dxil.h | |||
| @@ -0,0 +1,465 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; TEXCOORD 0 xyzw 0 NONE float xyzw | ||
| 8 | ; TEXCOORD 1 xy 1 NONE float xy | ||
| 9 | ; | ||
| 10 | ; | ||
| 11 | ; Output signature: | ||
| 12 | ; | ||
| 13 | ; Name Index Mask Register SysValue Format Used | ||
| 14 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 15 | ; SV_Target 0 xyzw 0 TARGET float xyzw | ||
| 16 | ; | ||
| 17 | ; shader hash: 6899b843a76b999aab785570052af6a1 | ||
| 18 | ; | ||
| 19 | ; Pipeline Runtime Information: | ||
| 20 | ; | ||
| 21 | ; Pixel Shader | ||
| 22 | ; DepthOutput=0 | ||
| 23 | ; SampleFrequency=0 | ||
| 24 | ; | ||
| 25 | ; | ||
| 26 | ; Input signature: | ||
| 27 | ; | ||
| 28 | ; Name Index InterpMode DynIdx | ||
| 29 | ; -------------------- ----- ---------------------- ------ | ||
| 30 | ; TEXCOORD 0 linear | ||
| 31 | ; TEXCOORD 1 linear | ||
| 32 | ; | ||
| 33 | ; Output signature: | ||
| 34 | ; | ||
| 35 | ; Name Index InterpMode DynIdx | ||
| 36 | ; -------------------- ----- ---------------------- ------ | ||
| 37 | ; SV_Target 0 | ||
| 38 | ; | ||
| 39 | ; Buffer Definitions: | ||
| 40 | ; | ||
| 41 | ; | ||
| 42 | ; Resource Bindings: | ||
| 43 | ; | ||
| 44 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 45 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 46 | ; __13_sampler sampler NA NA S0 s0,space2 1 | ||
| 47 | ; _13 texture f32 2d T0 t0,space2 1 | ||
| 48 | ; | ||
| 49 | ; | ||
| 50 | ; ViewId state: | ||
| 51 | ; | ||
| 52 | ; Number of inputs: 6, outputs: 4 | ||
| 53 | ; Outputs dependent on ViewId: { } | ||
| 54 | ; Inputs contributing to computation of Outputs: | ||
| 55 | ; output 0 depends on inputs: { 0, 4, 5 } | ||
| 56 | ; output 1 depends on inputs: { 1, 4, 5 } | ||
| 57 | ; output 2 depends on inputs: { 2, 4, 5 } | ||
| 58 | ; output 3 depends on inputs: { 3 } | ||
| 59 | ; | ||
| 60 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 61 | target triple = "dxil-ms-dx" | ||
| 62 | |||
| 63 | %dx.types.Handle = type { i8* } | ||
| 64 | %dx.types.ResRet.f32 = type { float, float, float, float, i32 } | ||
| 65 | %"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" } | ||
| 66 | %"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 } | ||
| 67 | %struct.SamplerState = type { i32 } | ||
| 68 | |||
| 69 | define void @main() { | ||
| 70 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 71 | %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 72 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 73 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 74 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 75 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 76 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 77 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 78 | %9 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %1, %dx.types.Handle %2, float %3, float %4, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 79 | %10 = extractvalue %dx.types.ResRet.f32 %9, 0 | ||
| 80 | %11 = extractvalue %dx.types.ResRet.f32 %9, 1 | ||
| 81 | %12 = extractvalue %dx.types.ResRet.f32 %9, 2 | ||
| 82 | %13 = fmul fast float %10, %5 | ||
| 83 | %14 = fmul fast float %11, %6 | ||
| 84 | %15 = fmul fast float %12, %7 | ||
| 85 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %13) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 86 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %14) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 87 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %15) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 88 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %8) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 89 | ret void | ||
| 90 | } | ||
| 91 | |||
| 92 | ; Function Attrs: nounwind readnone | ||
| 93 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 94 | |||
| 95 | ; Function Attrs: nounwind | ||
| 96 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 97 | |||
| 98 | ; Function Attrs: nounwind readonly | ||
| 99 | declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 | ||
| 100 | |||
| 101 | ; Function Attrs: nounwind readonly | ||
| 102 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 103 | |||
| 104 | attributes #0 = { nounwind readnone } | ||
| 105 | attributes #1 = { nounwind } | ||
| 106 | attributes #2 = { nounwind readonly } | ||
| 107 | |||
| 108 | !llvm.ident = !{!0} | ||
| 109 | !dx.version = !{!1} | ||
| 110 | !dx.valver = !{!2} | ||
| 111 | !dx.shaderModel = !{!3} | ||
| 112 | !dx.resources = !{!4} | ||
| 113 | !dx.viewIdState = !{!10} | ||
| 114 | !dx.entryPoints = !{!11} | ||
| 115 | |||
| 116 | !0 = !{!"dxc(private) 1.8.0.4662 (416fab6b5)"} | ||
| 117 | !1 = !{i32 1, i32 0} | ||
| 118 | !2 = !{i32 1, i32 8} | ||
| 119 | !3 = !{!"ps", i32 6, i32 0} | ||
| 120 | !4 = !{!5, null, null, !8} | ||
| 121 | !5 = !{!6} | ||
| 122 | !6 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 2, i32 0, i32 1, i32 2, i32 0, !7} | ||
| 123 | !7 = !{i32 0, i32 9} | ||
| 124 | !8 = !{!9} | ||
| 125 | !9 = !{i32 0, %struct.SamplerState* undef, !"", i32 2, i32 0, i32 1, i32 0, null} | ||
| 126 | !10 = !{[8 x i32] [i32 6, i32 4, i32 1, i32 2, i32 4, i32 8, i32 7, i32 7]} | ||
| 127 | !11 = !{void ()* @main, !"main", !12, !4, null} | ||
| 128 | !12 = !{!13, !20, null} | ||
| 129 | !13 = !{!14, !17} | ||
| 130 | !14 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !15, i8 2, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 131 | !15 = !{i32 0} | ||
| 132 | !16 = !{i32 3, i32 15} | ||
| 133 | !17 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !18, i8 2, i32 1, i8 2, i32 1, i8 0, !19} | ||
| 134 | !18 = !{i32 1} | ||
| 135 | !19 = !{i32 3, i32 3} | ||
| 136 | !20 = !{!21} | ||
| 137 | !21 = !{i32 0, !"SV_Target", i8 9, i8 16, !15, i8 0, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 138 | |||
| 139 | #endif | ||
| 140 | |||
| 141 | static const unsigned char texture_rgb_frag_sm60_dxil[] = { | ||
| 142 | 0x44, 0x58, 0x42, 0x43, 0x80, 0x0c, 0x49, 0xdc, 0x1e, 0x21, 0x6f, 0xab, | ||
| 143 | 0x8e, 0x0c, 0x74, 0xde, 0x47, 0xb3, 0x50, 0xf3, 0x01, 0x00, 0x00, 0x00, | ||
| 144 | 0x1c, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, | ||
| 145 | 0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, | ||
| 146 | 0xd8, 0x01, 0x00, 0x00, 0x38, 0x08, 0x00, 0x00, 0x54, 0x08, 0x00, 0x00, | ||
| 147 | 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 148 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x54, 0x00, 0x00, 0x00, | ||
| 149 | 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 150 | 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 151 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, | ||
| 152 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, | ||
| 153 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 154 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 155 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, | ||
| 156 | 0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 157 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, | ||
| 158 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 159 | 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 160 | 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x00, | ||
| 161 | 0x50, 0x53, 0x56, 0x30, 0xec, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, | ||
| 162 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 163 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, | ||
| 164 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, | ||
| 165 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 166 | 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 167 | 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 168 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 169 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 170 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 171 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 172 | 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x6d, | ||
| 173 | 0x61, 0x69, 0x6e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 174 | 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 175 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, | ||
| 176 | 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, | ||
| 177 | 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 178 | 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 179 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 180 | 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 181 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x58, 0x06, 0x00, 0x00, | ||
| 182 | 0x60, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, | ||
| 183 | 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, | ||
| 184 | 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, | ||
| 185 | 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 186 | 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, | ||
| 187 | 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, | ||
| 188 | 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, | ||
| 189 | 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, | ||
| 190 | 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, | ||
| 191 | 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, | ||
| 192 | 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 193 | 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, | ||
| 194 | 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, | ||
| 195 | 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, | ||
| 196 | 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, | ||
| 197 | 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, | ||
| 198 | 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, | ||
| 199 | 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, | ||
| 200 | 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, | ||
| 201 | 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, | ||
| 202 | 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f, | ||
| 203 | 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, | ||
| 204 | 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, | ||
| 205 | 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b, | ||
| 206 | 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, 0x14, 0x83, 0x91, 0x42, | ||
| 207 | 0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, 0x33, 0xb5, 0xc1, 0x38, | ||
| 208 | 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, | ||
| 209 | 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, | ||
| 210 | 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, | ||
| 211 | 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, | ||
| 212 | 0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, 0x3c, 0xcc, 0xc3, 0x2f, | ||
| 213 | 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, 0xcc, 0x24, 0x06, 0xe3, | ||
| 214 | 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, | ||
| 215 | 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, | ||
| 216 | 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, | ||
| 217 | 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, | ||
| 218 | 0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, | ||
| 219 | 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0xd0, | ||
| 220 | 0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, | ||
| 221 | 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, | ||
| 222 | 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, | ||
| 223 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, | ||
| 224 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, | ||
| 225 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 226 | 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 227 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, | ||
| 228 | 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 229 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, | ||
| 230 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 231 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, | ||
| 232 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, | ||
| 233 | 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 234 | 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 235 | 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 236 | 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, | ||
| 237 | 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, | ||
| 238 | 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, | ||
| 239 | 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x45, 0x50, 0x12, | ||
| 240 | 0x65, 0x50, 0x1e, 0x85, 0x52, 0x08, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08, | ||
| 241 | 0x0a, 0xa1, 0x40, 0xc8, 0xce, 0x00, 0x10, 0x9e, 0x01, 0xa0, 0x3c, 0x16, | ||
| 242 | 0x62, 0x10, 0x81, 0x40, 0x20, 0xc7, 0x01, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 243 | 0x7b, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, | ||
| 244 | 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, | ||
| 245 | 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, | ||
| 246 | 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, | ||
| 247 | 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, | ||
| 248 | 0x20, 0x36, 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x1c, 0x1b, | ||
| 249 | 0x86, 0x03, 0x21, 0x26, 0x08, 0xd6, 0xc4, 0xe1, 0x2b, 0x66, 0x66, 0x82, | ||
| 250 | 0x40, 0x20, 0x13, 0x04, 0x22, 0xd9, 0x20, 0x10, 0xcd, 0x86, 0x84, 0x50, | ||
| 251 | 0x16, 0x86, 0x18, 0x18, 0xc2, 0xd9, 0x10, 0x3c, 0x13, 0x04, 0x8c, 0x22, | ||
| 252 | 0xf3, 0xf5, 0x15, 0x33, 0xf3, 0x35, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, | ||
| 253 | 0xb7, 0x01, 0x21, 0x22, 0x89, 0x21, 0x06, 0x02, 0xd8, 0x10, 0x4c, 0x1b, | ||
| 254 | 0x08, 0x08, 0x00, 0xa8, 0x09, 0x82, 0x00, 0x6c, 0x00, 0x36, 0x0c, 0xc4, | ||
| 255 | 0x75, 0x6d, 0x08, 0xb0, 0x0d, 0xc3, 0x60, 0x65, 0x13, 0x84, 0xac, 0xda, | ||
| 256 | 0x10, 0x6c, 0x24, 0xda, 0xc2, 0xd2, 0xdc, 0x88, 0x50, 0x15, 0x61, 0x0d, | ||
| 257 | 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x0a, 0x67, 0x82, 0x50, 0x3c, 0x1b, | ||
| 258 | 0x02, 0x62, 0x82, 0x50, 0x40, 0x13, 0x84, 0x22, 0x9a, 0x20, 0x10, 0xca, | ||
| 259 | 0x04, 0x81, 0x58, 0x36, 0x08, 0x64, 0x50, 0x06, 0x1b, 0x16, 0xc2, 0xfb, | ||
| 260 | 0xc0, 0x20, 0x0c, 0xc4, 0x60, 0x18, 0x03, 0x02, 0x0c, 0xcc, 0x60, 0x43, | ||
| 261 | 0x30, 0x6c, 0x10, 0xc8, 0x80, 0x0c, 0x36, 0x2c, 0x83, 0xf7, 0x81, 0x01, | ||
| 262 | 0x1a, 0x88, 0xc1, 0x20, 0x06, 0x03, 0x18, 0xa4, 0xc1, 0x06, 0xe1, 0x0c, | ||
| 263 | 0xd4, 0x80, 0xc9, 0x94, 0xd5, 0x17, 0x55, 0x98, 0xdc, 0x59, 0x19, 0xdd, | ||
| 264 | 0x04, 0xa1, 0x90, 0x36, 0x2c, 0x04, 0x1b, 0x7c, 0x6d, 0x10, 0x06, 0x60, | ||
| 265 | 0x30, 0x8c, 0x01, 0x01, 0x06, 0x66, 0xb0, 0x21, 0x70, 0x83, 0x0d, 0xc3, | ||
| 266 | 0x1a, 0xbc, 0x01, 0xb0, 0xa1, 0xb0, 0x3a, 0x38, 0xa8, 0x00, 0x1a, 0x66, | ||
| 267 | 0x6c, 0x6f, 0x61, 0x74, 0x73, 0x2c, 0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x26, | ||
| 268 | 0x08, 0x04, 0x43, 0x63, 0x2e, 0xed, 0xec, 0x8b, 0x8d, 0x8c, 0xc6, 0x5c, | ||
| 269 | 0xda, 0xd9, 0xd7, 0x1c, 0xdd, 0x04, 0x81, 0x68, 0x88, 0xd0, 0x95, 0xe1, | ||
| 270 | 0x7d, 0xb9, 0xbd, 0xc9, 0xb5, 0x6d, 0x50, 0xe4, 0x80, 0x0c, 0xe6, 0x80, | ||
| 271 | 0x0e, 0xea, 0x00, 0xb1, 0x83, 0x3b, 0xc0, 0x83, 0xa1, 0x0a, 0x1b, 0x9b, | ||
| 272 | 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, | ||
| 273 | 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, | ||
| 274 | 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, | ||
| 275 | 0x8a, 0x3a, 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, | ||
| 276 | 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x02, 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, | ||
| 277 | 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0x80, 0xaa, 0x44, | ||
| 278 | 0x86, 0xe7, 0x42, 0x97, 0x07, 0x57, 0x16, 0xe4, 0xe6, 0xf6, 0x46, 0x17, | ||
| 279 | 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x37, 0x25, 0xc8, 0xea, 0x90, 0xe1, 0xb9, | ||
| 280 | 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, | ||
| 281 | 0x09, 0xb6, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, | ||
| 282 | 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x38, 0xe8, 0x42, 0x86, 0xe7, | ||
| 283 | 0x32, 0xf6, 0x56, 0xe7, 0x46, 0x57, 0x26, 0x37, 0x37, 0x25, 0xc0, 0x03, | ||
| 284 | 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, | ||
| 285 | 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, | ||
| 286 | 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, | ||
| 287 | 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, | ||
| 288 | 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, | ||
| 289 | 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, | ||
| 290 | 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, | ||
| 291 | 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, | ||
| 292 | 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, | ||
| 293 | 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, | ||
| 294 | 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, | ||
| 295 | 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, | ||
| 296 | 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, | ||
| 297 | 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, | ||
| 298 | 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, | ||
| 299 | 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, | ||
| 300 | 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, | ||
| 301 | 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, | ||
| 302 | 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, | ||
| 303 | 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, | ||
| 304 | 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, | ||
| 305 | 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, | ||
| 306 | 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, | ||
| 307 | 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, | ||
| 308 | 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, | ||
| 309 | 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, | ||
| 310 | 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 311 | 0x46, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, | ||
| 312 | 0x40, 0x33, 0x2c, 0x84, 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, | ||
| 313 | 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0xdb, 0x00, 0x34, 0x5c, | ||
| 314 | 0xbe, 0xf3, 0xf8, 0x12, 0xc0, 0x3c, 0x0b, 0xe1, 0x17, 0xb7, 0x6d, 0x02, | ||
| 315 | 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, | ||
| 316 | 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, | ||
| 317 | 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, | ||
| 318 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x99, 0xb8, 0x43, 0xa7, 0x6b, 0x99, 0x9a, | ||
| 319 | 0xab, 0x78, 0x55, 0x70, 0x05, 0x2a, 0xf6, 0xa1, 0x44, 0x58, 0x49, 0x4c, | ||
| 320 | 0xc0, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, | ||
| 321 | 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 322 | 0xa8, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, | ||
| 323 | 0xa7, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 324 | 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, | ||
| 325 | 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, | ||
| 326 | 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, | ||
| 327 | 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, | ||
| 328 | 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, | ||
| 329 | 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, | ||
| 330 | 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, | ||
| 331 | 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, | ||
| 332 | 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 333 | 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, | ||
| 334 | 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, | ||
| 335 | 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, | ||
| 336 | 0x43, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, | ||
| 337 | 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, | ||
| 338 | 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, | ||
| 339 | 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, | ||
| 340 | 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, | ||
| 341 | 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, | ||
| 342 | 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, | ||
| 343 | 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, | ||
| 344 | 0x18, 0x45, 0x18, 0x1b, 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, | ||
| 345 | 0x14, 0x83, 0x91, 0x42, 0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, | ||
| 346 | 0x33, 0xb5, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, | ||
| 347 | 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, | ||
| 348 | 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, | ||
| 349 | 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, | ||
| 350 | 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, | ||
| 351 | 0x3c, 0xcc, 0xc3, 0x2f, 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, | ||
| 352 | 0xcc, 0x24, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, | ||
| 353 | 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, | ||
| 354 | 0xa4, 0xc0, 0x07, 0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, | ||
| 355 | 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, | ||
| 356 | 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, | ||
| 357 | 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, | ||
| 358 | 0x44, 0xa0, 0x80, 0xd0, 0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, | ||
| 359 | 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, | ||
| 360 | 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, | ||
| 361 | 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 362 | 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, | ||
| 363 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, | ||
| 364 | 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 365 | 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 366 | 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 367 | 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, | ||
| 368 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, | ||
| 369 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, | ||
| 370 | 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 371 | 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 372 | 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, | ||
| 373 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, | ||
| 374 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, | ||
| 375 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, | ||
| 376 | 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, | ||
| 377 | 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, | ||
| 378 | 0x10, 0xc5, 0x50, 0x04, 0x25, 0x51, 0x06, 0xe5, 0x41, 0xa5, 0x24, 0x46, | ||
| 379 | 0x00, 0x8a, 0xa0, 0x10, 0x0a, 0x84, 0xec, 0x0c, 0x00, 0xe1, 0x19, 0x00, | ||
| 380 | 0xca, 0x63, 0x21, 0x06, 0x11, 0x08, 0x04, 0x72, 0x1c, 0x00, 0x00, 0x00, | ||
| 381 | 0x79, 0x18, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, | ||
| 382 | 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, | ||
| 383 | 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, | ||
| 384 | 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, | ||
| 385 | 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, | ||
| 386 | 0x10, 0xc6, 0x06, 0x61, 0x20, 0x26, 0x08, 0xc4, 0xb1, 0x41, 0x18, 0x0c, | ||
| 387 | 0x0a, 0x70, 0x73, 0x13, 0x04, 0x02, 0xd9, 0x30, 0x20, 0x09, 0x31, 0x41, | ||
| 388 | 0xb0, 0x24, 0x02, 0x13, 0x04, 0x22, 0x99, 0x20, 0x10, 0xca, 0x06, 0x81, | ||
| 389 | 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x34, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, | ||
| 390 | 0x9a, 0x20, 0x60, 0xd3, 0x06, 0x84, 0x90, 0x98, 0x86, 0x18, 0x08, 0x60, | ||
| 391 | 0x43, 0x30, 0x6d, 0x20, 0x22, 0x00, 0xa0, 0x26, 0x08, 0x19, 0xb5, 0x21, | ||
| 392 | 0xb0, 0x26, 0x08, 0x02, 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0x08, 0x55, | ||
| 393 | 0x11, 0xd6, 0xd0, 0xd3, 0x93, 0x14, 0xd1, 0x04, 0xa1, 0x68, 0x26, 0x08, | ||
| 394 | 0x85, 0xb3, 0x21, 0x20, 0x26, 0x08, 0xc5, 0x33, 0x41, 0x28, 0xa0, 0x09, | ||
| 395 | 0x02, 0xb1, 0x4c, 0x10, 0x08, 0x66, 0x83, 0x00, 0x06, 0x61, 0xb0, 0x61, | ||
| 396 | 0x21, 0xb4, 0x8d, 0xeb, 0xbc, 0xe1, 0x23, 0x38, 0x31, 0xd8, 0x10, 0x0c, | ||
| 397 | 0x1b, 0x04, 0x30, 0x00, 0x83, 0x0d, 0xcb, 0xa0, 0x6d, 0x1c, 0x19, 0x78, | ||
| 398 | 0x83, 0x37, 0x70, 0x65, 0xb0, 0x41, 0x18, 0x03, 0x33, 0x60, 0x32, 0x65, | ||
| 399 | 0xf5, 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xa2, 0x0d, | ||
| 400 | 0x0b, 0x81, 0x06, 0x5b, 0x1a, 0x74, 0xdc, 0xf0, 0x11, 0x9c, 0x18, 0x6c, | ||
| 401 | 0x08, 0xd4, 0x60, 0xc3, 0x70, 0x06, 0x6b, 0x00, 0x6c, 0x28, 0xb0, 0x8c, | ||
| 402 | 0x0d, 0x2a, 0xa0, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, | ||
| 403 | 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, | ||
| 404 | 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, | ||
| 405 | 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8c, 0x3a, 0x64, 0x78, 0x2e, 0x73, | ||
| 406 | 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x82, | ||
| 407 | 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, | ||
| 408 | 0xd9, 0xdc, 0x94, 0x80, 0xaa, 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, | ||
| 409 | 0x97, 0x44, 0x36, 0x45, 0x17, 0x46, 0x57, 0x36, 0x25, 0xb0, 0xea, 0x90, | ||
| 410 | 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, | ||
| 411 | 0xcd, 0x4d, 0x09, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 412 | 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, | ||
| 413 | 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, | ||
| 414 | 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, | ||
| 415 | 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, | ||
| 416 | 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, | ||
| 417 | 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, | ||
| 418 | 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, | ||
| 419 | 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, | ||
| 420 | 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, | ||
| 421 | 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, | ||
| 422 | 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 423 | 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, | ||
| 424 | 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, | ||
| 425 | 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, | ||
| 426 | 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, | ||
| 427 | 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, | ||
| 428 | 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, | ||
| 429 | 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 430 | 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, | ||
| 431 | 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, | ||
| 432 | 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, | ||
| 433 | 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, | ||
| 434 | 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, | ||
| 435 | 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, | ||
| 436 | 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, | ||
| 437 | 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, | ||
| 438 | 0x12, 0x00, 0x00, 0x00, 0x46, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, | ||
| 439 | 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, 0x05, 0x4c, 0xc3, 0xe5, | ||
| 440 | 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, | ||
| 441 | 0xdb, 0x00, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x12, 0xc0, 0x3c, 0x0b, 0xe1, | ||
| 442 | 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, | ||
| 443 | 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, | ||
| 444 | 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, | ||
| 445 | 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 446 | 0xf4, 0x46, 0x00, 0x88, 0xcc, 0x00, 0x14, 0x42, 0x29, 0x94, 0x5c, 0xe1, | ||
| 447 | 0x51, 0x29, 0x83, 0x12, 0xa0, 0x31, 0x03, 0x00, 0x23, 0x06, 0x09, 0x00, | ||
| 448 | 0x82, 0x60, 0x00, 0x69, 0x05, 0x84, 0x61, 0xc9, 0x88, 0x41, 0x02, 0x80, | ||
| 449 | 0x20, 0x18, 0x40, 0x9b, 0x41, 0x64, 0x99, 0x32, 0x62, 0x90, 0x00, 0x20, | ||
| 450 | 0x08, 0x06, 0xc6, 0x97, 0x6c, 0x9a, 0xa4, 0x8c, 0x18, 0x24, 0x00, 0x08, | ||
| 451 | 0x82, 0x81, 0x01, 0x06, 0x0a, 0xb7, 0x15, 0xcb, 0x88, 0x41, 0x02, 0x80, | ||
| 452 | 0x20, 0x18, 0x18, 0x61, 0xb0, 0x70, 0x1c, 0xc5, 0x8c, 0x18, 0x24, 0x00, | ||
| 453 | 0x08, 0x82, 0x81, 0x21, 0x06, 0x4c, 0xd7, 0x1d, 0xcd, 0x88, 0x41, 0x02, | ||
| 454 | 0x80, 0x20, 0x18, 0x18, 0x63, 0xd0, 0x78, 0x5e, 0xe5, 0x8c, 0x18, 0x24, | ||
| 455 | 0x00, 0x08, 0x82, 0x81, 0x41, 0x06, 0xce, 0xf7, 0x29, 0xcf, 0x88, 0xc1, | ||
| 456 | 0x03, 0x80, 0x20, 0x18, 0x34, 0x63, 0xc0, 0x20, 0x87, 0x51, 0x24, 0x09, | ||
| 457 | 0x18, 0x80, 0x01, 0x94, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 458 | 0x26, 0x0c, 0x82, 0x0d, 0x88, 0x7c, 0x6c, 0x40, 0xe4, 0x63, 0x03, 0x22, | ||
| 459 | 0x9f, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xd6, 0xa0, 0x3a, 0x83, | ||
| 460 | 0x33, 0xf8, 0x86, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xd6, 0xa0, | ||
| 461 | 0x3a, 0x83, 0x33, 0x88, 0x84, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, | ||
| 462 | 0xd6, 0xa0, 0x3a, 0x83, 0x33, 0xf0, 0x82, 0x11, 0x83, 0x04, 0x00, 0x41, | ||
| 463 | 0x30, 0x40, 0xd6, 0xa0, 0x3a, 0x83, 0x33, 0x90, 0x10, 0x04, 0x00, 0x00, | ||
| 464 | 0x00, 0x00, 0x00, 0x00 | ||
| 465 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.spv.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.spv.h new file mode 100644 index 0000000..3ba7d55 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgb.frag.spv.h | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | static const unsigned char texture_rgb_frag_spv[] = { | ||
| 2 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, | ||
| 3 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, | ||
| 4 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 5 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, | ||
| 6 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 7 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 8 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 9 | 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, | ||
| 10 | 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 11 | 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 12 | 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, | ||
| 13 | 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 14 | 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 15 | 0x47, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 16 | 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, | ||
| 17 | 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, | ||
| 18 | 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 19 | 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 20 | 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 21 | 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 22 | 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 23 | 0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 24 | 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 25 | 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 27 | 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 28 | 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 29 | 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 30 | 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 31 | 0x17, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 32 | 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 33 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 34 | 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 35 | 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, | ||
| 36 | 0x00, 0x00, 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, | ||
| 37 | 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 38 | 0x1b, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 39 | 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 40 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, | ||
| 41 | 0x05, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 42 | 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, | ||
| 43 | 0x0f, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 44 | 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 45 | 0x0e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, | ||
| 46 | 0x06, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 47 | 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 48 | 0x18, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 49 | 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, | ||
| 50 | 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, | ||
| 51 | 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, | ||
| 52 | 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, | ||
| 53 | 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, | ||
| 54 | 0x1c, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 55 | 0x1e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, | ||
| 56 | 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 57 | 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 | ||
| 58 | }; | ||
| 59 | static const unsigned int texture_rgb_frag_spv_len = 668; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag new file mode 100644 index 0000000..05fd18c --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #version 450 | ||
| 2 | |||
| 3 | layout(location = 0) in vec4 v_color; | ||
| 4 | layout(location = 1) in vec2 v_uv; | ||
| 5 | |||
| 6 | layout(set = 2, binding = 0) uniform sampler2D u_texture; | ||
| 7 | |||
| 8 | layout(location = 0) out vec4 o_color; | ||
| 9 | |||
| 10 | void main() { | ||
| 11 | o_color = texture(u_texture, v_uv) * v_color; | ||
| 12 | } | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.metal.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.metal.h new file mode 100644 index 0000000..9c8f150 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.metal.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | static const unsigned char texture_rgba_frag_metal[] = { | ||
| 2 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, | ||
| 3 | 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, | ||
| 4 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x69, | ||
| 5 | 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a, | ||
| 6 | 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, | ||
| 7 | 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x0a, | ||
| 8 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, | ||
| 9 | 0x5f, 0x6f, 0x75, 0x74, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 10 | 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x39, 0x20, 0x5b, 0x5b, | ||
| 11 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, | ||
| 12 | 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, | ||
| 13 | 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, | ||
| 14 | 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x32, | ||
| 15 | 0x31, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x28, 0x6c, 0x6f, 0x63, | ||
| 16 | 0x6e, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 17 | 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x6d, 0x5f, 0x31, 0x37, 0x20, 0x5b, | ||
| 18 | 0x5b, 0x75, 0x73, 0x65, 0x72, 0x28, 0x6c, 0x6f, 0x63, 0x6e, 0x31, 0x29, | ||
| 19 | 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x66, 0x72, 0x61, 0x67, | ||
| 20 | 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, | ||
| 21 | 0x75, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x28, 0x6d, 0x61, 0x69, | ||
| 22 | 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x5b, 0x5b, 0x73, | ||
| 23 | 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x74, | ||
| 24 | 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, | ||
| 25 | 0x61, 0x74, 0x3e, 0x20, 0x5f, 0x31, 0x33, 0x20, 0x5b, 0x5b, 0x74, 0x65, | ||
| 26 | 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, | ||
| 27 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x31, 0x33, 0x53, | ||
| 28 | 0x6d, 0x70, 0x6c, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, | ||
| 29 | 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, | ||
| 30 | 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, | ||
| 31 | 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, | ||
| 32 | 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6d, 0x5f, 0x39, 0x20, 0x3d, | ||
| 33 | 0x20, 0x5f, 0x31, 0x33, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, | ||
| 34 | 0x5f, 0x31, 0x33, 0x53, 0x6d, 0x70, 0x6c, 0x72, 0x2c, 0x20, 0x69, 0x6e, | ||
| 35 | 0x2e, 0x6d, 0x5f, 0x31, 0x37, 0x29, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x2e, | ||
| 36 | 0x6d, 0x5f, 0x32, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, | ||
| 37 | 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, | ||
| 38 | 0x0a | ||
| 39 | }; | ||
| 40 | static const unsigned int texture_rgba_frag_metal_len = 433; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.sm50.dxbc.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.sm50.dxbc.h new file mode 100644 index 0000000..d240991 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.sm50.dxbc.h | |||
| @@ -0,0 +1,120 @@ | |||
| 1 | static const signed char texture_rgba_frag_sm50_dxbc[] = | ||
| 2 | { | ||
| 3 | 68, 88, 66, 67, -83, 124, | ||
| 4 | -3, -84,-102, 126, 29, -62, | ||
| 5 | -107, 79, -74, 72, -7, 33, | ||
| 6 | 124,-103, 1, 0, 0, 0, | ||
| 7 | -72, 2, 0, 0, 5, 0, | ||
| 8 | 0, 0, 52, 0, 0, 0, | ||
| 9 | -12, 0, 0, 0, 64, 1, | ||
| 10 | 0, 0, 116, 1, 0, 0, | ||
| 11 | 28, 2, 0, 0, 82, 68, | ||
| 12 | 69, 70, -72, 0, 0, 0, | ||
| 13 | 0, 0, 0, 0, 0, 0, | ||
| 14 | 0, 0, 2, 0, 0, 0, | ||
| 15 | 60, 0, 0, 0, 0, 5, | ||
| 16 | -1, -1, 0, 1, 0, 0, | ||
| 17 | -115, 0, 0, 0, 82, 68, | ||
| 18 | 49, 49, 60, 0, 0, 0, | ||
| 19 | 24, 0, 0, 0, 32, 0, | ||
| 20 | 0, 0, 40, 0, 0, 0, | ||
| 21 | 36, 0, 0, 0, 12, 0, | ||
| 22 | 0, 0, 0, 0, 0, 0, | ||
| 23 | 124, 0, 0, 0, 3, 0, | ||
| 24 | 0, 0, 0, 0, 0, 0, | ||
| 25 | 0, 0, 0, 0, 0, 0, | ||
| 26 | 0, 0, 0, 0, 0, 0, | ||
| 27 | 1, 0, 0, 0, 1, 0, | ||
| 28 | 0, 0,-119, 0, 0, 0, | ||
| 29 | 2, 0, 0, 0, 5, 0, | ||
| 30 | 0, 0, 4, 0, 0, 0, | ||
| 31 | -1, -1, -1, -1, 0, 0, | ||
| 32 | 0, 0, 1, 0, 0, 0, | ||
| 33 | 13, 0, 0, 0, 95, 95, | ||
| 34 | 49, 51, 95, 115, 97, 109, | ||
| 35 | 112, 108, 101, 114, 0, 95, | ||
| 36 | 49, 51, 0, 77, 105, 99, | ||
| 37 | 114, 111, 115, 111, 102, 116, | ||
| 38 | 32, 40, 82, 41, 32, 72, | ||
| 39 | 76, 83, 76, 32, 83, 104, | ||
| 40 | 97, 100, 101, 114, 32, 67, | ||
| 41 | 111, 109, 112, 105, 108, 101, | ||
| 42 | 114, 32, 49, 48, 46, 49, | ||
| 43 | 0, -85, -85, -85, 73, 83, | ||
| 44 | 71, 78, 68, 0, 0, 0, | ||
| 45 | 2, 0, 0, 0, 8, 0, | ||
| 46 | 0, 0, 56, 0, 0, 0, | ||
| 47 | 0, 0, 0, 0, 0, 0, | ||
| 48 | 0, 0, 3, 0, 0, 0, | ||
| 49 | 0, 0, 0, 0, 15, 15, | ||
| 50 | 0, 0, 56, 0, 0, 0, | ||
| 51 | 1, 0, 0, 0, 0, 0, | ||
| 52 | 0, 0, 3, 0, 0, 0, | ||
| 53 | 1, 0, 0, 0, 3, 3, | ||
| 54 | 0, 0, 84, 69, 88, 67, | ||
| 55 | 79, 79, 82, 68, 0, -85, | ||
| 56 | -85, -85, 79, 83, 71, 78, | ||
| 57 | 44, 0, 0, 0, 1, 0, | ||
| 58 | 0, 0, 8, 0, 0, 0, | ||
| 59 | 32, 0, 0, 0, 0, 0, | ||
| 60 | 0, 0, 0, 0, 0, 0, | ||
| 61 | 3, 0, 0, 0, 0, 0, | ||
| 62 | 0, 0, 15, 0, 0, 0, | ||
| 63 | 83, 86, 95, 84, 97, 114, | ||
| 64 | 103, 101, 116, 0, -85, -85, | ||
| 65 | 83, 72, 69, 88, -96, 0, | ||
| 66 | 0, 0, 80, 0, 0, 0, | ||
| 67 | 40, 0, 0, 0, 106, 8, | ||
| 68 | 0, 1, 90, 0, 0, 3, | ||
| 69 | 0, 96, 16, 0, 0, 0, | ||
| 70 | 0, 0, 88, 24, 0, 4, | ||
| 71 | 0, 112, 16, 0, 0, 0, | ||
| 72 | 0, 0, 85, 85, 0, 0, | ||
| 73 | 98, 16, 0, 3, -14, 16, | ||
| 74 | 16, 0, 0, 0, 0, 0, | ||
| 75 | 98, 16, 0, 3, 50, 16, | ||
| 76 | 16, 0, 1, 0, 0, 0, | ||
| 77 | 101, 0, 0, 3, -14, 32, | ||
| 78 | 16, 0, 0, 0, 0, 0, | ||
| 79 | 104, 0, 0, 2, 1, 0, | ||
| 80 | 0, 0, 69, 0, 0,-117, | ||
| 81 | -62, 0, 0,-128, 67, 85, | ||
| 82 | 21, 0, -14, 0, 16, 0, | ||
| 83 | 0, 0, 0, 0, 70, 16, | ||
| 84 | 16, 0, 1, 0, 0, 0, | ||
| 85 | 70, 126, 16, 0, 0, 0, | ||
| 86 | 0, 0, 0, 96, 16, 0, | ||
| 87 | 0, 0, 0, 0, 56, 0, | ||
| 88 | 0, 7, -14, 32, 16, 0, | ||
| 89 | 0, 0, 0, 0, 70, 14, | ||
| 90 | 16, 0, 0, 0, 0, 0, | ||
| 91 | 70, 30, 16, 0, 0, 0, | ||
| 92 | 0, 0, 62, 0, 0, 1, | ||
| 93 | 83, 84, 65, 84,-108, 0, | ||
| 94 | 0, 0, 3, 0, 0, 0, | ||
| 95 | 1, 0, 0, 0, 0, 0, | ||
| 96 | 0, 0, 3, 0, 0, 0, | ||
| 97 | 1, 0, 0, 0, 0, 0, | ||
| 98 | 0, 0, 0, 0, 0, 0, | ||
| 99 | 1, 0, 0, 0, 0, 0, | ||
| 100 | 0, 0, 0, 0, 0, 0, | ||
| 101 | 0, 0, 0, 0, 0, 0, | ||
| 102 | 0, 0, 0, 0, 0, 0, | ||
| 103 | 0, 0, 0, 0, 1, 0, | ||
| 104 | 0, 0, 0, 0, 0, 0, | ||
| 105 | 0, 0, 0, 0, 0, 0, | ||
| 106 | 0, 0, 0, 0, 0, 0, | ||
| 107 | 0, 0, 0, 0, 0, 0, | ||
| 108 | 0, 0, 0, 0, 0, 0, | ||
| 109 | 0, 0, 0, 0, 0, 0, | ||
| 110 | 0, 0, 0, 0, 0, 0, | ||
| 111 | 0, 0, 0, 0, 0, 0, | ||
| 112 | 0, 0, 0, 0, 0, 0, | ||
| 113 | 0, 0, 0, 0, 0, 0, | ||
| 114 | 0, 0, 0, 0, 0, 0, | ||
| 115 | 0, 0, 0, 0, 0, 0, | ||
| 116 | 0, 0, 0, 0, 0, 0, | ||
| 117 | 0, 0, 0, 0, 0, 0, | ||
| 118 | 0, 0, 0, 0, 0, 0 | ||
| 119 | |||
| 120 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.sm60.dxil.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.sm60.dxil.h new file mode 100644 index 0000000..eba7080 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.sm60.dxil.h | |||
| @@ -0,0 +1,467 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; TEXCOORD 0 xyzw 0 NONE float xyzw | ||
| 8 | ; TEXCOORD 1 xy 1 NONE float xy | ||
| 9 | ; | ||
| 10 | ; | ||
| 11 | ; Output signature: | ||
| 12 | ; | ||
| 13 | ; Name Index Mask Register SysValue Format Used | ||
| 14 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 15 | ; SV_Target 0 xyzw 0 TARGET float xyzw | ||
| 16 | ; | ||
| 17 | ; shader hash: ab99026f3068b3314341ba15eaf626a8 | ||
| 18 | ; | ||
| 19 | ; Pipeline Runtime Information: | ||
| 20 | ; | ||
| 21 | ; Pixel Shader | ||
| 22 | ; DepthOutput=0 | ||
| 23 | ; SampleFrequency=0 | ||
| 24 | ; | ||
| 25 | ; | ||
| 26 | ; Input signature: | ||
| 27 | ; | ||
| 28 | ; Name Index InterpMode DynIdx | ||
| 29 | ; -------------------- ----- ---------------------- ------ | ||
| 30 | ; TEXCOORD 0 linear | ||
| 31 | ; TEXCOORD 1 linear | ||
| 32 | ; | ||
| 33 | ; Output signature: | ||
| 34 | ; | ||
| 35 | ; Name Index InterpMode DynIdx | ||
| 36 | ; -------------------- ----- ---------------------- ------ | ||
| 37 | ; SV_Target 0 | ||
| 38 | ; | ||
| 39 | ; Buffer Definitions: | ||
| 40 | ; | ||
| 41 | ; | ||
| 42 | ; Resource Bindings: | ||
| 43 | ; | ||
| 44 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 45 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 46 | ; __13_sampler sampler NA NA S0 s0,space2 1 | ||
| 47 | ; _13 texture f32 2d T0 t0,space2 1 | ||
| 48 | ; | ||
| 49 | ; | ||
| 50 | ; ViewId state: | ||
| 51 | ; | ||
| 52 | ; Number of inputs: 6, outputs: 4 | ||
| 53 | ; Outputs dependent on ViewId: { } | ||
| 54 | ; Inputs contributing to computation of Outputs: | ||
| 55 | ; output 0 depends on inputs: { 0, 4, 5 } | ||
| 56 | ; output 1 depends on inputs: { 1, 4, 5 } | ||
| 57 | ; output 2 depends on inputs: { 2, 4, 5 } | ||
| 58 | ; output 3 depends on inputs: { 3, 4, 5 } | ||
| 59 | ; | ||
| 60 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 61 | target triple = "dxil-ms-dx" | ||
| 62 | |||
| 63 | %dx.types.Handle = type { i8* } | ||
| 64 | %dx.types.ResRet.f32 = type { float, float, float, float, i32 } | ||
| 65 | %"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" } | ||
| 66 | %"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 } | ||
| 67 | %struct.SamplerState = type { i32 } | ||
| 68 | |||
| 69 | define void @main() { | ||
| 70 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 71 | %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 72 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 73 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 74 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 75 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 76 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 77 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 78 | %9 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %1, %dx.types.Handle %2, float %3, float %4, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp) | ||
| 79 | %10 = extractvalue %dx.types.ResRet.f32 %9, 0 | ||
| 80 | %11 = extractvalue %dx.types.ResRet.f32 %9, 1 | ||
| 81 | %12 = extractvalue %dx.types.ResRet.f32 %9, 2 | ||
| 82 | %13 = extractvalue %dx.types.ResRet.f32 %9, 3 | ||
| 83 | %14 = fmul fast float %10, %5 | ||
| 84 | %15 = fmul fast float %11, %6 | ||
| 85 | %16 = fmul fast float %12, %7 | ||
| 86 | %17 = fmul fast float %13, %8 | ||
| 87 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %14) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 88 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %15) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 89 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %16) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 90 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %17) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 91 | ret void | ||
| 92 | } | ||
| 93 | |||
| 94 | ; Function Attrs: nounwind readnone | ||
| 95 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 96 | |||
| 97 | ; Function Attrs: nounwind | ||
| 98 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 99 | |||
| 100 | ; Function Attrs: nounwind readonly | ||
| 101 | declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 | ||
| 102 | |||
| 103 | ; Function Attrs: nounwind readonly | ||
| 104 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 105 | |||
| 106 | attributes #0 = { nounwind readnone } | ||
| 107 | attributes #1 = { nounwind } | ||
| 108 | attributes #2 = { nounwind readonly } | ||
| 109 | |||
| 110 | !llvm.ident = !{!0} | ||
| 111 | !dx.version = !{!1} | ||
| 112 | !dx.valver = !{!2} | ||
| 113 | !dx.shaderModel = !{!3} | ||
| 114 | !dx.resources = !{!4} | ||
| 115 | !dx.viewIdState = !{!10} | ||
| 116 | !dx.entryPoints = !{!11} | ||
| 117 | |||
| 118 | !0 = !{!"dxc(private) 1.8.0.4662 (416fab6b5)"} | ||
| 119 | !1 = !{i32 1, i32 0} | ||
| 120 | !2 = !{i32 1, i32 8} | ||
| 121 | !3 = !{!"ps", i32 6, i32 0} | ||
| 122 | !4 = !{!5, null, null, !8} | ||
| 123 | !5 = !{!6} | ||
| 124 | !6 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 2, i32 0, i32 1, i32 2, i32 0, !7} | ||
| 125 | !7 = !{i32 0, i32 9} | ||
| 126 | !8 = !{!9} | ||
| 127 | !9 = !{i32 0, %struct.SamplerState* undef, !"", i32 2, i32 0, i32 1, i32 0, null} | ||
| 128 | !10 = !{[8 x i32] [i32 6, i32 4, i32 1, i32 2, i32 4, i32 8, i32 15, i32 15]} | ||
| 129 | !11 = !{void ()* @main, !"main", !12, !4, null} | ||
| 130 | !12 = !{!13, !20, null} | ||
| 131 | !13 = !{!14, !17} | ||
| 132 | !14 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !15, i8 2, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 133 | !15 = !{i32 0} | ||
| 134 | !16 = !{i32 3, i32 15} | ||
| 135 | !17 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !18, i8 2, i32 1, i8 2, i32 1, i8 0, !19} | ||
| 136 | !18 = !{i32 1} | ||
| 137 | !19 = !{i32 3, i32 3} | ||
| 138 | !20 = !{!21} | ||
| 139 | !21 = !{i32 0, !"SV_Target", i8 9, i8 16, !15, i8 0, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 140 | |||
| 141 | #endif | ||
| 142 | |||
| 143 | static const unsigned char texture_rgba_frag_sm60_dxil[] = { | ||
| 144 | 0x44, 0x58, 0x42, 0x43, 0x5c, 0x82, 0x6d, 0x45, 0x43, 0x35, 0xdf, 0xf5, | ||
| 145 | 0xad, 0xf7, 0x1b, 0x5e, 0xc0, 0x65, 0x38, 0x3f, 0x01, 0x00, 0x00, 0x00, | ||
| 146 | 0x24, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, | ||
| 147 | 0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, | ||
| 148 | 0xd8, 0x01, 0x00, 0x00, 0x38, 0x08, 0x00, 0x00, 0x54, 0x08, 0x00, 0x00, | ||
| 149 | 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 150 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x54, 0x00, 0x00, 0x00, | ||
| 151 | 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 152 | 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 153 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, | ||
| 154 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, | ||
| 155 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 156 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 157 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, | ||
| 158 | 0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 159 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, | ||
| 160 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 161 | 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 162 | 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x00, | ||
| 163 | 0x50, 0x53, 0x56, 0x30, 0xec, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, | ||
| 164 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 165 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, | ||
| 166 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, | ||
| 167 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 168 | 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 169 | 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 170 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 171 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 172 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 173 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 174 | 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x6d, | ||
| 175 | 0x61, 0x69, 0x6e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 176 | 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 177 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, | ||
| 178 | 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, | ||
| 179 | 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 180 | 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 181 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 182 | 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 183 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x58, 0x06, 0x00, 0x00, | ||
| 184 | 0x60, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, | ||
| 185 | 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, | ||
| 186 | 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, | ||
| 187 | 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 188 | 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, | ||
| 189 | 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, | ||
| 190 | 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, | ||
| 191 | 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, | ||
| 192 | 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, | ||
| 193 | 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, | ||
| 194 | 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 195 | 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, | ||
| 196 | 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, | ||
| 197 | 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, | ||
| 198 | 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, | ||
| 199 | 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, | ||
| 200 | 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, | ||
| 201 | 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, | ||
| 202 | 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, | ||
| 203 | 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, | ||
| 204 | 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f, | ||
| 205 | 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, | ||
| 206 | 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, | ||
| 207 | 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b, | ||
| 208 | 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, 0x14, 0x83, 0x91, 0x42, | ||
| 209 | 0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, 0x33, 0xb5, 0xc1, 0x38, | ||
| 210 | 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, | ||
| 211 | 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, | ||
| 212 | 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, | ||
| 213 | 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, | ||
| 214 | 0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, 0x3c, 0xcc, 0xc3, 0x2f, | ||
| 215 | 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, 0xcc, 0x24, 0x06, 0xe3, | ||
| 216 | 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, | ||
| 217 | 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, | ||
| 218 | 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, | ||
| 219 | 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, | ||
| 220 | 0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, | ||
| 221 | 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0xd0, | ||
| 222 | 0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, | ||
| 223 | 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, | ||
| 224 | 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, | ||
| 225 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, | ||
| 226 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, | ||
| 227 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 228 | 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, | ||
| 229 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, | ||
| 230 | 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 231 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, | ||
| 232 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 233 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, | ||
| 234 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, | ||
| 235 | 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 236 | 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 237 | 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 238 | 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, | ||
| 239 | 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, | ||
| 240 | 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, | ||
| 241 | 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x45, 0x50, 0x12, | ||
| 242 | 0x65, 0x50, 0x1e, 0x85, 0x50, 0x2c, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08, | ||
| 243 | 0x0a, 0xa1, 0x40, 0xc8, 0xce, 0x00, 0x10, 0x9e, 0x01, 0xa0, 0x3c, 0x16, | ||
| 244 | 0x62, 0x10, 0x81, 0x40, 0x20, 0xcf, 0x03, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 245 | 0x7b, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, | ||
| 246 | 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, | ||
| 247 | 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, | ||
| 248 | 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, | ||
| 249 | 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, | ||
| 250 | 0x20, 0x36, 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x1c, 0x1b, | ||
| 251 | 0x86, 0x03, 0x21, 0x26, 0x08, 0xd6, 0xc4, 0xe1, 0x2b, 0x66, 0x66, 0x82, | ||
| 252 | 0x40, 0x20, 0x13, 0x04, 0x22, 0xd9, 0x20, 0x10, 0xcd, 0x86, 0x84, 0x50, | ||
| 253 | 0x16, 0x86, 0x18, 0x18, 0xc2, 0xd9, 0x10, 0x3c, 0x13, 0x04, 0x8c, 0x22, | ||
| 254 | 0xf3, 0xf5, 0x15, 0x33, 0xf3, 0x35, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, | ||
| 255 | 0xb7, 0x01, 0x21, 0x22, 0x89, 0x21, 0x06, 0x02, 0xd8, 0x10, 0x4c, 0x1b, | ||
| 256 | 0x08, 0x08, 0x00, 0xa8, 0x09, 0x82, 0x00, 0x6c, 0x00, 0x36, 0x0c, 0xc4, | ||
| 257 | 0x75, 0x6d, 0x08, 0xb0, 0x0d, 0xc3, 0x60, 0x65, 0x13, 0x84, 0xac, 0xda, | ||
| 258 | 0x10, 0x6c, 0x24, 0xda, 0xc2, 0xd2, 0xdc, 0x88, 0x50, 0x15, 0x61, 0x0d, | ||
| 259 | 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x0a, 0x67, 0x82, 0x50, 0x3c, 0x1b, | ||
| 260 | 0x02, 0x62, 0x82, 0x50, 0x40, 0x13, 0x84, 0x22, 0x9a, 0x20, 0x10, 0xca, | ||
| 261 | 0x04, 0x81, 0x58, 0x36, 0x08, 0x64, 0x50, 0x06, 0x1b, 0x16, 0xc2, 0xfb, | ||
| 262 | 0xc0, 0x20, 0x0c, 0xc4, 0x60, 0x18, 0x03, 0x02, 0x0c, 0xcc, 0x60, 0x43, | ||
| 263 | 0x30, 0x6c, 0x10, 0xc8, 0x80, 0x0c, 0x36, 0x2c, 0x83, 0xf7, 0x81, 0x01, | ||
| 264 | 0x1a, 0x88, 0xc1, 0x20, 0x06, 0x03, 0x18, 0xa4, 0xc1, 0x06, 0xe1, 0x0c, | ||
| 265 | 0xd4, 0x80, 0xc9, 0x94, 0xd5, 0x17, 0x55, 0x98, 0xdc, 0x59, 0x19, 0xdd, | ||
| 266 | 0x04, 0xa1, 0x90, 0x36, 0x2c, 0x04, 0x1b, 0x7c, 0x6d, 0x10, 0x06, 0x60, | ||
| 267 | 0x30, 0x8c, 0x01, 0x01, 0x06, 0x66, 0xb0, 0x21, 0x70, 0x83, 0x0d, 0xc3, | ||
| 268 | 0x1a, 0xbc, 0x01, 0xb0, 0xa1, 0xb0, 0x3a, 0x38, 0xa8, 0x00, 0x1a, 0x66, | ||
| 269 | 0x6c, 0x6f, 0x61, 0x74, 0x73, 0x13, 0x04, 0x82, 0x61, 0x91, 0xe6, 0x36, | ||
| 270 | 0x47, 0x37, 0x37, 0x41, 0x20, 0x1a, 0x1a, 0x73, 0x69, 0x67, 0x5f, 0x6c, | ||
| 271 | 0x64, 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x88, 0xd0, 0x95, 0xe1, | ||
| 272 | 0x7d, 0xb9, 0xbd, 0xc9, 0xb5, 0x6d, 0x50, 0xe4, 0x60, 0x0e, 0xe8, 0xa0, | ||
| 273 | 0x0e, 0xec, 0x00, 0xb9, 0x83, 0x39, 0xc0, 0x83, 0xa1, 0x0a, 0x1b, 0x9b, | ||
| 274 | 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, | ||
| 275 | 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, | ||
| 276 | 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, | ||
| 277 | 0x8a, 0x3a, 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, | ||
| 278 | 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x02, 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, | ||
| 279 | 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0x80, 0xaa, 0x44, | ||
| 280 | 0x86, 0xe7, 0x42, 0x97, 0x07, 0x57, 0x16, 0xe4, 0xe6, 0xf6, 0x46, 0x17, | ||
| 281 | 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x37, 0x25, 0xc8, 0xea, 0x90, 0xe1, 0xb9, | ||
| 282 | 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, | ||
| 283 | 0x09, 0xb6, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, | ||
| 284 | 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x38, 0xe8, 0x42, 0x86, 0xe7, | ||
| 285 | 0x32, 0xf6, 0x56, 0xe7, 0x46, 0x57, 0x26, 0x37, 0x37, 0x25, 0xc0, 0x03, | ||
| 286 | 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, | ||
| 287 | 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, | ||
| 288 | 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, | ||
| 289 | 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, | ||
| 290 | 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, | ||
| 291 | 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, | ||
| 292 | 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, | ||
| 293 | 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, | ||
| 294 | 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, | ||
| 295 | 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, | ||
| 296 | 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, | ||
| 297 | 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, | ||
| 298 | 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, | ||
| 299 | 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, | ||
| 300 | 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, | ||
| 301 | 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, | ||
| 302 | 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, | ||
| 303 | 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, | ||
| 304 | 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, | ||
| 305 | 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, | ||
| 306 | 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, | ||
| 307 | 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, | ||
| 308 | 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, | ||
| 309 | 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, | ||
| 310 | 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, | ||
| 311 | 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, | ||
| 312 | 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 313 | 0x46, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, | ||
| 314 | 0x40, 0x33, 0x2c, 0x84, 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, | ||
| 315 | 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0xdb, 0x00, 0x34, 0x5c, | ||
| 316 | 0xbe, 0xf3, 0xf8, 0x12, 0xc0, 0x3c, 0x0b, 0xe1, 0x17, 0xb7, 0x6d, 0x02, | ||
| 317 | 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, | ||
| 318 | 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, | ||
| 319 | 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, | ||
| 320 | 0x00, 0x00, 0x00, 0x00, 0xab, 0x99, 0x02, 0x6f, 0x30, 0x68, 0xb3, 0x31, | ||
| 321 | 0x43, 0x41, 0xba, 0x15, 0xea, 0xf6, 0x26, 0xa8, 0x44, 0x58, 0x49, 0x4c, | ||
| 322 | 0xc8, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xb2, 0x01, 0x00, 0x00, | ||
| 323 | 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 324 | 0xb0, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, | ||
| 325 | 0xa9, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 326 | 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, | ||
| 327 | 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, | ||
| 328 | 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, | ||
| 329 | 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, | ||
| 330 | 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, | ||
| 331 | 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, | ||
| 332 | 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, | ||
| 333 | 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, | ||
| 334 | 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 335 | 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, | ||
| 336 | 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, | ||
| 337 | 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, | ||
| 338 | 0x43, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, | ||
| 339 | 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, | ||
| 340 | 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, | ||
| 341 | 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, | ||
| 342 | 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, | ||
| 343 | 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, | ||
| 344 | 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, | ||
| 345 | 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, | ||
| 346 | 0x18, 0x45, 0x18, 0x1b, 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, | ||
| 347 | 0x14, 0x83, 0x91, 0x42, 0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, | ||
| 348 | 0x33, 0xb5, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, | ||
| 349 | 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, | ||
| 350 | 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, | ||
| 351 | 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, | ||
| 352 | 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, | ||
| 353 | 0x3c, 0xcc, 0xc3, 0x2f, 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, | ||
| 354 | 0xcc, 0x24, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, | ||
| 355 | 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, | ||
| 356 | 0xa4, 0xc0, 0x07, 0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, | ||
| 357 | 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, | ||
| 358 | 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, | ||
| 359 | 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, | ||
| 360 | 0x44, 0xa0, 0x80, 0xd0, 0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, | ||
| 361 | 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, | ||
| 362 | 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, | ||
| 363 | 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 364 | 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, | ||
| 365 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, | ||
| 366 | 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 367 | 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 368 | 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 369 | 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, | ||
| 370 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, | ||
| 371 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, | ||
| 372 | 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 373 | 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 374 | 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, | ||
| 375 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, | ||
| 376 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, | ||
| 377 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, | ||
| 378 | 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, | ||
| 379 | 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, | ||
| 380 | 0x10, 0xc5, 0x50, 0x04, 0x25, 0x51, 0x06, 0xe5, 0x41, 0xa5, 0x24, 0x46, | ||
| 381 | 0x00, 0x8a, 0xa0, 0x10, 0x0a, 0x84, 0xec, 0x0c, 0x00, 0xe1, 0x19, 0x00, | ||
| 382 | 0xca, 0x63, 0x21, 0x06, 0x11, 0x08, 0x04, 0xf2, 0x3c, 0x00, 0x00, 0x00, | ||
| 383 | 0x79, 0x18, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, | ||
| 384 | 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, | ||
| 385 | 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, | ||
| 386 | 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, | ||
| 387 | 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, | ||
| 388 | 0x10, 0xc6, 0x06, 0x61, 0x20, 0x26, 0x08, 0xc4, 0xb1, 0x41, 0x18, 0x0c, | ||
| 389 | 0x0a, 0x70, 0x73, 0x13, 0x04, 0x02, 0xd9, 0x30, 0x20, 0x09, 0x31, 0x41, | ||
| 390 | 0xb0, 0x24, 0x02, 0x13, 0x04, 0x22, 0x99, 0x20, 0x10, 0xca, 0x06, 0x81, | ||
| 391 | 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x34, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, | ||
| 392 | 0x9a, 0x20, 0x60, 0xd3, 0x06, 0x84, 0x90, 0x98, 0x86, 0x18, 0x08, 0x60, | ||
| 393 | 0x43, 0x30, 0x6d, 0x20, 0x22, 0x00, 0xa0, 0x26, 0x08, 0x19, 0xb5, 0x21, | ||
| 394 | 0xb0, 0x26, 0x08, 0x02, 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0x08, 0x55, | ||
| 395 | 0x11, 0xd6, 0xd0, 0xd3, 0x93, 0x14, 0xd1, 0x04, 0xa1, 0x68, 0x26, 0x08, | ||
| 396 | 0x85, 0xb3, 0x21, 0x20, 0x26, 0x08, 0xc5, 0x33, 0x41, 0x28, 0xa0, 0x09, | ||
| 397 | 0x02, 0xb1, 0x4c, 0x10, 0x08, 0x66, 0x83, 0x00, 0x06, 0x61, 0xb0, 0x61, | ||
| 398 | 0x21, 0xb4, 0x8d, 0xeb, 0xbc, 0xe1, 0x23, 0x38, 0x31, 0xd8, 0x10, 0x0c, | ||
| 399 | 0x1b, 0x04, 0x30, 0x00, 0x83, 0x0d, 0xcb, 0xa0, 0x6d, 0x1c, 0x19, 0x78, | ||
| 400 | 0x83, 0x37, 0x70, 0x65, 0xb0, 0x41, 0x18, 0x03, 0x33, 0x60, 0x32, 0x65, | ||
| 401 | 0xf5, 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xa2, 0x0d, | ||
| 402 | 0x0b, 0x81, 0x06, 0x5b, 0x1a, 0x74, 0xdc, 0xf0, 0x11, 0x9c, 0x18, 0x6c, | ||
| 403 | 0x08, 0xd4, 0x60, 0xc3, 0x70, 0x06, 0x6b, 0x00, 0x6c, 0x28, 0xb0, 0x8c, | ||
| 404 | 0x0d, 0x2a, 0xa0, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, | ||
| 405 | 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, | ||
| 406 | 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, | ||
| 407 | 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8c, 0x3a, 0x64, 0x78, 0x2e, 0x73, | ||
| 408 | 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x82, | ||
| 409 | 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, | ||
| 410 | 0xd9, 0xdc, 0x94, 0x80, 0xaa, 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, | ||
| 411 | 0x97, 0x44, 0x36, 0x45, 0x17, 0x46, 0x57, 0x36, 0x25, 0xb0, 0xea, 0x90, | ||
| 412 | 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, | ||
| 413 | 0xcd, 0x4d, 0x09, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 414 | 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, | ||
| 415 | 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, | ||
| 416 | 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, | ||
| 417 | 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, | ||
| 418 | 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, | ||
| 419 | 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, | ||
| 420 | 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, | ||
| 421 | 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, | ||
| 422 | 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, | ||
| 423 | 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, | ||
| 424 | 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 425 | 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, | ||
| 426 | 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, | ||
| 427 | 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, | ||
| 428 | 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, | ||
| 429 | 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, | ||
| 430 | 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, | ||
| 431 | 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 432 | 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, | ||
| 433 | 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, | ||
| 434 | 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, | ||
| 435 | 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, | ||
| 436 | 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, | ||
| 437 | 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, | ||
| 438 | 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, | ||
| 439 | 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, | ||
| 440 | 0x12, 0x00, 0x00, 0x00, 0x46, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, | ||
| 441 | 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, 0x05, 0x4c, 0xc3, 0xe5, | ||
| 442 | 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, | ||
| 443 | 0xdb, 0x00, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x12, 0xc0, 0x3c, 0x0b, 0xe1, | ||
| 444 | 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, | ||
| 445 | 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, | ||
| 446 | 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, | ||
| 447 | 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 448 | 0xf4, 0x46, 0x00, 0x88, 0xcc, 0x00, 0x14, 0x42, 0x29, 0x94, 0x5c, 0xe1, | ||
| 449 | 0x51, 0x29, 0x83, 0x12, 0xa0, 0x31, 0x03, 0x00, 0x23, 0x06, 0x09, 0x00, | ||
| 450 | 0x82, 0x60, 0x00, 0x69, 0x05, 0x84, 0x61, 0xc9, 0x88, 0x41, 0x02, 0x80, | ||
| 451 | 0x20, 0x18, 0x40, 0x9b, 0x41, 0x64, 0x99, 0x32, 0x62, 0x90, 0x00, 0x20, | ||
| 452 | 0x08, 0x06, 0xc6, 0x97, 0x6c, 0x9a, 0xa4, 0x8c, 0x18, 0x24, 0x00, 0x08, | ||
| 453 | 0x82, 0x81, 0x01, 0x06, 0x0a, 0xb7, 0x15, 0xcb, 0x88, 0x41, 0x02, 0x80, | ||
| 454 | 0x20, 0x18, 0x18, 0x61, 0xb0, 0x70, 0x1c, 0xc5, 0x8c, 0x18, 0x24, 0x00, | ||
| 455 | 0x08, 0x82, 0x81, 0x21, 0x06, 0x4c, 0xd7, 0x1d, 0xcd, 0x88, 0x41, 0x02, | ||
| 456 | 0x80, 0x20, 0x18, 0x18, 0x63, 0xd0, 0x78, 0x5e, 0xe5, 0x8c, 0x18, 0x24, | ||
| 457 | 0x00, 0x08, 0x82, 0x81, 0x41, 0x06, 0xce, 0xf7, 0x29, 0xcf, 0x88, 0xc1, | ||
| 458 | 0x03, 0x80, 0x20, 0x18, 0x34, 0x63, 0xc0, 0x20, 0x87, 0x51, 0x24, 0x09, | ||
| 459 | 0x18, 0x80, 0x01, 0x94, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, | ||
| 460 | 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x18, 0x91, 0xc8, 0xc7, 0x88, 0x44, | ||
| 461 | 0x3e, 0x46, 0x24, 0xf2, 0x31, 0x22, 0x91, 0xcf, 0x88, 0x41, 0x02, 0x80, | ||
| 462 | 0x20, 0x18, 0x20, 0x6d, 0x70, 0xa5, 0x41, 0x1a, 0x84, 0x01, 0x31, 0x62, | ||
| 463 | 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x1b, 0x5c, 0x69, 0x90, 0x06, 0xd3, | ||
| 464 | 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x1b, 0x5c, 0x69, 0x90, | ||
| 465 | 0x06, 0x60, 0x20, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, 0x06, | ||
| 466 | 0x57, 0x1a, 0xa4, 0x01, 0x15, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 467 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.spv.h b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.spv.h new file mode 100644 index 0000000..1210023 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/texture_rgba.frag.spv.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | static const unsigned char texture_rgba_frag_spv[] = { | ||
| 2 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, | ||
| 3 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, | ||
| 4 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 5 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, | ||
| 6 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 7 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 8 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 9 | 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, | ||
| 10 | 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 11 | 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 12 | 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, | ||
| 13 | 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 14 | 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 15 | 0x47, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 16 | 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, | ||
| 17 | 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, | ||
| 18 | 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 19 | 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 20 | 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 21 | 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 22 | 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 23 | 0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 24 | 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 25 | 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 27 | 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 28 | 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 29 | 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 30 | 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 31 | 0x17, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 32 | 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 33 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 34 | 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 35 | 0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 36 | 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
| 37 | 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, | ||
| 38 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 39 | 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 40 | 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, | ||
| 41 | 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 42 | 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, | ||
| 43 | 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, | ||
| 44 | 0x12, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 45 | 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, | ||
| 46 | 0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 47 | 0x16, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 48 | 0x17, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 | ||
| 49 | }; | ||
| 50 | static const unsigned int texture_rgba_frag_spv_len = 564; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert new file mode 100644 index 0000000..d9ad22e --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #version 450 | ||
| 2 | |||
| 3 | layout(location = 0) in vec2 a_position; | ||
| 4 | layout(location = 1) in vec4 a_color; | ||
| 5 | |||
| 6 | layout(location = 0) out vec4 v_color; | ||
| 7 | |||
| 8 | layout(set = 1, binding = 0) uniform Context { | ||
| 9 | mat4 mvp; | ||
| 10 | vec4 color; /* XXX unused */ | ||
| 11 | vec2 texture_size; /* XXX unused */ | ||
| 12 | } u_context; | ||
| 13 | |||
| 14 | void main() { | ||
| 15 | gl_Position = u_context.mvp * vec4(a_position, 0, 1); | ||
| 16 | v_color = a_color; | ||
| 17 | } | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.metal.h b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.metal.h new file mode 100644 index 0000000..b2993e5 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.metal.h | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | static const unsigned char tri_color_vert_metal[] = { | ||
| 2 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, | ||
| 3 | 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, | ||
| 4 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x69, | ||
| 5 | 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a, | ||
| 6 | 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, | ||
| 7 | 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x0a, | ||
| 8 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x5f, 0x31, 0x38, 0x0a, 0x7b, | ||
| 9 | 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, | ||
| 10 | 0x34, 0x20, 0x5f, 0x6d, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 11 | 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x6d, 0x31, 0x3b, 0x0a, 0x20, | ||
| 12 | 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x6d, | ||
| 13 | 0x32, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, | ||
| 14 | 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x0a, | ||
| 15 | 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, | ||
| 16 | 0x20, 0x6d, 0x5f, 0x33, 0x35, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, | ||
| 17 | 0x28, 0x6c, 0x6f, 0x63, 0x6e, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, | ||
| 18 | 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, | ||
| 19 | 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, | ||
| 20 | 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, | ||
| 21 | 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, | ||
| 22 | 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, | ||
| 23 | 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x6d, 0x5f, 0x32, | ||
| 24 | 0x35, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, | ||
| 25 | 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, | ||
| 26 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x33, 0x37, 0x20, | ||
| 27 | 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, | ||
| 28 | 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x76, 0x65, | ||
| 29 | 0x72, 0x74, 0x65, 0x78, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, | ||
| 30 | 0x75, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x28, 0x6d, 0x61, 0x69, | ||
| 31 | 0x6e, 0x30, 0x5f, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x5b, 0x5b, 0x73, | ||
| 32 | 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, | ||
| 33 | 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x5f, 0x31, 0x38, 0x26, | ||
| 34 | 0x20, 0x5f, 0x32, 0x30, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, | ||
| 35 | 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, | ||
| 36 | 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, | ||
| 37 | 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, | ||
| 38 | 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, | ||
| 39 | 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x32, 0x30, 0x2e, | ||
| 40 | 0x5f, 0x6d, 0x30, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, | ||
| 41 | 0x28, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x32, 0x35, 0x2c, 0x20, 0x30, 0x2e, | ||
| 42 | 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, | ||
| 43 | 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6d, 0x5f, 0x33, 0x35, 0x20, 0x3d, 0x20, | ||
| 44 | 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x33, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, | ||
| 45 | 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x3b, | ||
| 46 | 0x0a, 0x7d, 0x0a, 0x0a | ||
| 47 | }; | ||
| 48 | static const unsigned int tri_color_vert_metal_len = 532; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.sm50.dxbc.h b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.sm50.dxbc.h new file mode 100644 index 0000000..0819d8a --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.sm50.dxbc.h | |||
| @@ -0,0 +1,178 @@ | |||
| 1 | static const signed char tri_color_vert_sm50_dxbc[] = | ||
| 2 | { | ||
| 3 | 68, 88, 66, 67, -99, -1, | ||
| 4 | -83, -50, 75, -96, -1, 28, | ||
| 5 | -104, -33, 121, 1,-117, -87, | ||
| 6 | -7,-107, 1, 0, 0, 0, | ||
| 7 | 20, 4, 0, 0, 5, 0, | ||
| 8 | 0, 0, 52, 0, 0, 0, | ||
| 9 | -12, 1, 0, 0, 64, 2, | ||
| 10 | 0, 0,-104, 2, 0, 0, | ||
| 11 | 120, 3, 0, 0, 82, 68, | ||
| 12 | 69, 70, -72, 1, 0, 0, | ||
| 13 | 1, 0, 0, 0, 100, 0, | ||
| 14 | 0, 0, 1, 0, 0, 0, | ||
| 15 | 60, 0, 0, 0, 0, 5, | ||
| 16 | -2, -1, 0, 1, 0, 0, | ||
| 17 | -112, 1, 0, 0, 82, 68, | ||
| 18 | 49, 49, 60, 0, 0, 0, | ||
| 19 | 24, 0, 0, 0, 32, 0, | ||
| 20 | 0, 0, 40, 0, 0, 0, | ||
| 21 | 36, 0, 0, 0, 12, 0, | ||
| 22 | 0, 0, 0, 0, 0, 0, | ||
| 23 | 92, 0, 0, 0, 0, 0, | ||
| 24 | 0, 0, 0, 0, 0, 0, | ||
| 25 | 0, 0, 0, 0, 0, 0, | ||
| 26 | 0, 0, 0, 0, 0, 0, | ||
| 27 | 1, 0, 0, 0, 1, 0, | ||
| 28 | 0, 0, 95, 49, 56, 95, | ||
| 29 | 50, 48, 0, -85, 92, 0, | ||
| 30 | 0, 0, 3, 0, 0, 0, | ||
| 31 | 124, 0, 0, 0, 96, 0, | ||
| 32 | 0, 0, 0, 0, 0, 0, | ||
| 33 | 0, 0, 0, 0, -12, 0, | ||
| 34 | 0, 0, 0, 0, 0, 0, | ||
| 35 | 64, 0, 0, 0, 2, 0, | ||
| 36 | 0, 0, 4, 1, 0, 0, | ||
| 37 | 0, 0, 0, 0, -1, -1, | ||
| 38 | -1, -1, 0, 0, 0, 0, | ||
| 39 | -1, -1, -1, -1, 0, 0, | ||
| 40 | 0, 0, 40, 1, 0, 0, | ||
| 41 | 64, 0, 0, 0, 16, 0, | ||
| 42 | 0, 0, 0, 0, 0, 0, | ||
| 43 | 56, 1, 0, 0, 0, 0, | ||
| 44 | 0, 0, -1, -1, -1, -1, | ||
| 45 | 0, 0, 0, 0, -1, -1, | ||
| 46 | -1, -1, 0, 0, 0, 0, | ||
| 47 | 92, 1, 0, 0, 80, 0, | ||
| 48 | 0, 0, 8, 0, 0, 0, | ||
| 49 | 0, 0, 0, 0, 108, 1, | ||
| 50 | 0, 0, 0, 0, 0, 0, | ||
| 51 | -1, -1, -1, -1, 0, 0, | ||
| 52 | 0, 0, -1, -1, -1, -1, | ||
| 53 | 0, 0, 0, 0, 95, 50, | ||
| 54 | 48, 95, 109, 48, 0, 102, | ||
| 55 | 108, 111, 97, 116, 52, 120, | ||
| 56 | 52, 0, 2, 0, 3, 0, | ||
| 57 | 4, 0, 4, 0, 0, 0, | ||
| 58 | 0, 0, 0, 0, 0, 0, | ||
| 59 | 0, 0, 0, 0, 0, 0, | ||
| 60 | 0, 0, 0, 0, 0, 0, | ||
| 61 | 0, 0, 0, 0, -5, 0, | ||
| 62 | 0, 0, 95, 50, 48, 95, | ||
| 63 | 109, 49, 0, 102, 108, 111, | ||
| 64 | 97, 116, 52, 0, -85, -85, | ||
| 65 | 1, 0, 3, 0, 1, 0, | ||
| 66 | 4, 0, 0, 0, 0, 0, | ||
| 67 | 0, 0, 0, 0, 0, 0, | ||
| 68 | 0, 0, 0, 0, 0, 0, | ||
| 69 | 0, 0, 0, 0, 0, 0, | ||
| 70 | 0, 0, 47, 1, 0, 0, | ||
| 71 | 95, 50, 48, 95, 109, 50, | ||
| 72 | 0, 102, 108, 111, 97, 116, | ||
| 73 | 50, 0, -85, -85, 1, 0, | ||
| 74 | 3, 0, 1, 0, 2, 0, | ||
| 75 | 0, 0, 0, 0, 0, 0, | ||
| 76 | 0, 0, 0, 0, 0, 0, | ||
| 77 | 0, 0, 0, 0, 0, 0, | ||
| 78 | 0, 0, 0, 0, 0, 0, | ||
| 79 | 99, 1, 0, 0, 77, 105, | ||
| 80 | 99, 114, 111, 115, 111, 102, | ||
| 81 | 116, 32, 40, 82, 41, 32, | ||
| 82 | 72, 76, 83, 76, 32, 83, | ||
| 83 | 104, 97, 100, 101, 114, 32, | ||
| 84 | 67, 111, 109, 112, 105, 108, | ||
| 85 | 101, 114, 32, 49, 48, 46, | ||
| 86 | 49, 0, 73, 83, 71, 78, | ||
| 87 | 68, 0, 0, 0, 2, 0, | ||
| 88 | 0, 0, 8, 0, 0, 0, | ||
| 89 | 56, 0, 0, 0, 0, 0, | ||
| 90 | 0, 0, 0, 0, 0, 0, | ||
| 91 | 3, 0, 0, 0, 0, 0, | ||
| 92 | 0, 0, 3, 3, 0, 0, | ||
| 93 | 56, 0, 0, 0, 1, 0, | ||
| 94 | 0, 0, 0, 0, 0, 0, | ||
| 95 | 3, 0, 0, 0, 1, 0, | ||
| 96 | 0, 0, 15, 15, 0, 0, | ||
| 97 | 84, 69, 88, 67, 79, 79, | ||
| 98 | 82, 68, 0, -85, -85, -85, | ||
| 99 | 79, 83, 71, 78, 80, 0, | ||
| 100 | 0, 0, 2, 0, 0, 0, | ||
| 101 | 8, 0, 0, 0, 56, 0, | ||
| 102 | 0, 0, 0, 0, 0, 0, | ||
| 103 | 0, 0, 0, 0, 3, 0, | ||
| 104 | 0, 0, 0, 0, 0, 0, | ||
| 105 | 15, 0, 0, 0, 65, 0, | ||
| 106 | 0, 0, 0, 0, 0, 0, | ||
| 107 | 1, 0, 0, 0, 3, 0, | ||
| 108 | 0, 0, 1, 0, 0, 0, | ||
| 109 | 15, 0, 0, 0, 84, 69, | ||
| 110 | 88, 67, 79, 79, 82, 68, | ||
| 111 | 0, 83, 86, 95, 80, 111, | ||
| 112 | 115, 105, 116, 105, 111, 110, | ||
| 113 | 0, -85, -85, -85, 83, 72, | ||
| 114 | 69, 88, -40, 0, 0, 0, | ||
| 115 | 80, 0, 1, 0, 54, 0, | ||
| 116 | 0, 0, 106, 8, 0, 1, | ||
| 117 | 89, 0, 0, 4, 70,-114, | ||
| 118 | 32, 0, 0, 0, 0, 0, | ||
| 119 | 4, 0, 0, 0, 95, 0, | ||
| 120 | 0, 3, 50, 16, 16, 0, | ||
| 121 | 0, 0, 0, 0, 95, 0, | ||
| 122 | 0, 3, -14, 16, 16, 0, | ||
| 123 | 1, 0, 0, 0, 101, 0, | ||
| 124 | 0, 3, -14, 32, 16, 0, | ||
| 125 | 0, 0, 0, 0, 103, 0, | ||
| 126 | 0, 4, -14, 32, 16, 0, | ||
| 127 | 1, 0, 0, 0, 1, 0, | ||
| 128 | 0, 0, 104, 0, 0, 2, | ||
| 129 | 1, 0, 0, 0, 54, 0, | ||
| 130 | 0, 5, -14, 32, 16, 0, | ||
| 131 | 0, 0, 0, 0, 70, 30, | ||
| 132 | 16, 0, 1, 0, 0, 0, | ||
| 133 | 56, 0, 0, 8, -14, 0, | ||
| 134 | 16, 0, 0, 0, 0, 0, | ||
| 135 | 86, 21, 16, 0, 0, 0, | ||
| 136 | 0, 0, 70,-114, 32, 0, | ||
| 137 | 0, 0, 0, 0, 1, 0, | ||
| 138 | 0, 0, 50, 0, 0, 10, | ||
| 139 | -14, 0, 16, 0, 0, 0, | ||
| 140 | 0, 0, 6, 16, 16, 0, | ||
| 141 | 0, 0, 0, 0, 70,-114, | ||
| 142 | 32, 0, 0, 0, 0, 0, | ||
| 143 | 0, 0, 0, 0, 70, 14, | ||
| 144 | 16, 0, 0, 0, 0, 0, | ||
| 145 | 0, 0, 0, 8, -14, 32, | ||
| 146 | 16, 0, 1, 0, 0, 0, | ||
| 147 | 70, 14, 16, 0, 0, 0, | ||
| 148 | 0, 0, 70,-114, 32, 0, | ||
| 149 | 0, 0, 0, 0, 3, 0, | ||
| 150 | 0, 0, 62, 0, 0, 1, | ||
| 151 | 83, 84, 65, 84,-108, 0, | ||
| 152 | 0, 0, 5, 0, 0, 0, | ||
| 153 | 1, 0, 0, 0, 0, 0, | ||
| 154 | 0, 0, 4, 0, 0, 0, | ||
| 155 | 3, 0, 0, 0, 0, 0, | ||
| 156 | 0, 0, 0, 0, 0, 0, | ||
| 157 | 1, 0, 0, 0, 0, 0, | ||
| 158 | 0, 0, 0, 0, 0, 0, | ||
| 159 | 0, 0, 0, 0, 0, 0, | ||
| 160 | 0, 0, 0, 0, 0, 0, | ||
| 161 | 0, 0, 0, 0, 0, 0, | ||
| 162 | 0, 0, 0, 0, 0, 0, | ||
| 163 | 0, 0, 0, 0, 0, 0, | ||
| 164 | 0, 0, 0, 0, 0, 0, | ||
| 165 | 1, 0, 0, 0, 0, 0, | ||
| 166 | 0, 0, 0, 0, 0, 0, | ||
| 167 | 0, 0, 0, 0, 0, 0, | ||
| 168 | 0, 0, 0, 0, 0, 0, | ||
| 169 | 0, 0, 0, 0, 0, 0, | ||
| 170 | 0, 0, 0, 0, 0, 0, | ||
| 171 | 0, 0, 0, 0, 0, 0, | ||
| 172 | 0, 0, 0, 0, 0, 0, | ||
| 173 | 0, 0, 0, 0, 0, 0, | ||
| 174 | 0, 0, 0, 0, 0, 0, | ||
| 175 | 0, 0, 0, 0, 0, 0, | ||
| 176 | 0, 0, 0, 0, 0, 0 | ||
| 177 | |||
| 178 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.sm60.dxil.h b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.sm60.dxil.h new file mode 100644 index 0000000..0bb9325 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.sm60.dxil.h | |||
| @@ -0,0 +1,515 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; TEXCOORD 0 xy 0 NONE float xy | ||
| 8 | ; TEXCOORD 1 xyzw 1 NONE float xyzw | ||
| 9 | ; | ||
| 10 | ; | ||
| 11 | ; Output signature: | ||
| 12 | ; | ||
| 13 | ; Name Index Mask Register SysValue Format Used | ||
| 14 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 15 | ; TEXCOORD 0 xyzw 0 NONE float xyzw | ||
| 16 | ; SV_Position 0 xyzw 1 POS float xyzw | ||
| 17 | ; | ||
| 18 | ; shader hash: f13b1cc9b87e560da744659dd5d39dcb | ||
| 19 | ; | ||
| 20 | ; Pipeline Runtime Information: | ||
| 21 | ; | ||
| 22 | ; Vertex Shader | ||
| 23 | ; OutputPositionPresent=1 | ||
| 24 | ; | ||
| 25 | ; | ||
| 26 | ; Input signature: | ||
| 27 | ; | ||
| 28 | ; Name Index InterpMode DynIdx | ||
| 29 | ; -------------------- ----- ---------------------- ------ | ||
| 30 | ; TEXCOORD 0 | ||
| 31 | ; TEXCOORD 1 | ||
| 32 | ; | ||
| 33 | ; Output signature: | ||
| 34 | ; | ||
| 35 | ; Name Index InterpMode DynIdx | ||
| 36 | ; -------------------- ----- ---------------------- ------ | ||
| 37 | ; TEXCOORD 0 linear | ||
| 38 | ; SV_Position 0 noperspective | ||
| 39 | ; | ||
| 40 | ; Buffer Definitions: | ||
| 41 | ; | ||
| 42 | ; cbuffer _18_20 | ||
| 43 | ; { | ||
| 44 | ; | ||
| 45 | ; struct hostlayout._18_20 | ||
| 46 | ; { | ||
| 47 | ; | ||
| 48 | ; row_major float4x4 _20_m0; ; Offset: 0 | ||
| 49 | ; float4 _20_m1; ; Offset: 64 | ||
| 50 | ; float2 _20_m2; ; Offset: 80 | ||
| 51 | ; | ||
| 52 | ; } _18_20; ; Offset: 0 Size: 88 | ||
| 53 | ; | ||
| 54 | ; } | ||
| 55 | ; | ||
| 56 | ; | ||
| 57 | ; Resource Bindings: | ||
| 58 | ; | ||
| 59 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 60 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 61 | ; _18_20 cbuffer NA NA CB0 cb0,space1 1 | ||
| 62 | ; | ||
| 63 | ; | ||
| 64 | ; ViewId state: | ||
| 65 | ; | ||
| 66 | ; Number of inputs: 8, outputs: 8 | ||
| 67 | ; Outputs dependent on ViewId: { } | ||
| 68 | ; Inputs contributing to computation of Outputs: | ||
| 69 | ; output 0 depends on inputs: { 4 } | ||
| 70 | ; output 1 depends on inputs: { 5 } | ||
| 71 | ; output 2 depends on inputs: { 6 } | ||
| 72 | ; output 3 depends on inputs: { 7 } | ||
| 73 | ; output 4 depends on inputs: { 0, 1 } | ||
| 74 | ; output 5 depends on inputs: { 0, 1 } | ||
| 75 | ; output 6 depends on inputs: { 0, 1 } | ||
| 76 | ; output 7 depends on inputs: { 0, 1 } | ||
| 77 | ; | ||
| 78 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 79 | target triple = "dxil-ms-dx" | ||
| 80 | |||
| 81 | %dx.types.Handle = type { i8* } | ||
| 82 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 83 | %hostlayout._18_20 = type { [4 x <4 x float>], <4 x float>, <2 x float> } | ||
| 84 | |||
| 85 | define void @main() { | ||
| 86 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 87 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 88 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 89 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 90 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 91 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 92 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 93 | %8 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 94 | %9 = extractvalue %dx.types.CBufRet.f32 %8, 0 | ||
| 95 | %10 = extractvalue %dx.types.CBufRet.f32 %8, 1 | ||
| 96 | %11 = extractvalue %dx.types.CBufRet.f32 %8, 2 | ||
| 97 | %12 = extractvalue %dx.types.CBufRet.f32 %8, 3 | ||
| 98 | %13 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 99 | %14 = extractvalue %dx.types.CBufRet.f32 %13, 0 | ||
| 100 | %15 = extractvalue %dx.types.CBufRet.f32 %13, 1 | ||
| 101 | %16 = extractvalue %dx.types.CBufRet.f32 %13, 2 | ||
| 102 | %17 = extractvalue %dx.types.CBufRet.f32 %13, 3 | ||
| 103 | %18 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 104 | %19 = extractvalue %dx.types.CBufRet.f32 %18, 0 | ||
| 105 | %20 = extractvalue %dx.types.CBufRet.f32 %18, 1 | ||
| 106 | %21 = extractvalue %dx.types.CBufRet.f32 %18, 2 | ||
| 107 | %22 = extractvalue %dx.types.CBufRet.f32 %18, 3 | ||
| 108 | %23 = fmul fast float %9, %6 | ||
| 109 | %24 = call float @dx.op.tertiary.f32(i32 46, float %7, float %14, float %23) ; FMad(a,b,c) | ||
| 110 | %25 = fadd fast float %19, %24 | ||
| 111 | %26 = fmul fast float %10, %6 | ||
| 112 | %27 = call float @dx.op.tertiary.f32(i32 46, float %7, float %15, float %26) ; FMad(a,b,c) | ||
| 113 | %28 = fadd fast float %27, %20 | ||
| 114 | %29 = fmul fast float %11, %6 | ||
| 115 | %30 = call float @dx.op.tertiary.f32(i32 46, float %7, float %16, float %29) ; FMad(a,b,c) | ||
| 116 | %31 = fadd fast float %30, %21 | ||
| 117 | %32 = fmul fast float %12, %6 | ||
| 118 | %33 = call float @dx.op.tertiary.f32(i32 46, float %7, float %17, float %32) ; FMad(a,b,c) | ||
| 119 | %34 = fadd fast float %33, %22 | ||
| 120 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 121 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 122 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 123 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 124 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %25) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 125 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %28) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 126 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 2, float %31) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 127 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 3, float %34) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 128 | ret void | ||
| 129 | } | ||
| 130 | |||
| 131 | ; Function Attrs: nounwind readnone | ||
| 132 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 133 | |||
| 134 | ; Function Attrs: nounwind | ||
| 135 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 136 | |||
| 137 | ; Function Attrs: nounwind readonly | ||
| 138 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 139 | |||
| 140 | ; Function Attrs: nounwind readnone | ||
| 141 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 142 | |||
| 143 | ; Function Attrs: nounwind readonly | ||
| 144 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 145 | |||
| 146 | attributes #0 = { nounwind readnone } | ||
| 147 | attributes #1 = { nounwind } | ||
| 148 | attributes #2 = { nounwind readonly } | ||
| 149 | |||
| 150 | !llvm.ident = !{!0} | ||
| 151 | !dx.version = !{!1} | ||
| 152 | !dx.valver = !{!2} | ||
| 153 | !dx.shaderModel = !{!3} | ||
| 154 | !dx.resources = !{!4} | ||
| 155 | !dx.viewIdState = !{!7} | ||
| 156 | !dx.entryPoints = !{!8} | ||
| 157 | |||
| 158 | !0 = !{!"dxc(private) 1.8.0.4662 (416fab6b5)"} | ||
| 159 | !1 = !{i32 1, i32 0} | ||
| 160 | !2 = !{i32 1, i32 8} | ||
| 161 | !3 = !{!"vs", i32 6, i32 0} | ||
| 162 | !4 = !{null, null, !5, null} | ||
| 163 | !5 = !{!6} | ||
| 164 | !6 = !{i32 0, %hostlayout._18_20* undef, !"", i32 1, i32 0, i32 1, i32 88, null} | ||
| 165 | !7 = !{[10 x i32] [i32 8, i32 8, i32 240, i32 240, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]} | ||
| 166 | !8 = !{void ()* @main, !"main", !9, !4, null} | ||
| 167 | !9 = !{!10, !17, null} | ||
| 168 | !10 = !{!11, !14} | ||
| 169 | !11 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 0, i8 0, !13} | ||
| 170 | !12 = !{i32 0} | ||
| 171 | !13 = !{i32 3, i32 3} | ||
| 172 | !14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !15, i8 0, i32 1, i8 4, i32 1, i8 0, !16} | ||
| 173 | !15 = !{i32 1} | ||
| 174 | !16 = !{i32 3, i32 15} | ||
| 175 | !17 = !{!18, !19} | ||
| 176 | !18 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 177 | !19 = !{i32 1, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 1, i8 0, !16} | ||
| 178 | |||
| 179 | #endif | ||
| 180 | |||
| 181 | static const unsigned char tri_color_vert_sm60_dxil[] = { | ||
| 182 | 0x44, 0x58, 0x42, 0x43, 0xeb, 0x11, 0xa0, 0x76, 0xea, 0x69, 0xbc, 0x28, | ||
| 183 | 0xcd, 0xbc, 0x0c, 0xab, 0x14, 0x5d, 0xfa, 0x53, 0x01, 0x00, 0x00, 0x00, | ||
| 184 | 0x98, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, | ||
| 185 | 0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, | ||
| 186 | 0x08, 0x02, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, 0x8c, 0x08, 0x00, 0x00, | ||
| 187 | 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 188 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x54, 0x00, 0x00, 0x00, | ||
| 189 | 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 190 | 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 191 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, | ||
| 193 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 194 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 195 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, | ||
| 196 | 0x4f, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 197 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, | ||
| 198 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 199 | 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 200 | 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 201 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 202 | 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, | ||
| 203 | 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, | ||
| 204 | 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, | ||
| 205 | 0xf0, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 206 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 207 | 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, | ||
| 208 | 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 209 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, | ||
| 210 | 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 211 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 212 | 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 213 | 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, 0x45, | ||
| 214 | 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, | ||
| 215 | 0x4f, 0x52, 0x44, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 216 | 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 217 | 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 218 | 0x01, 0x00, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 219 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 220 | 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, | ||
| 221 | 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 222 | 0x01, 0x01, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, | ||
| 223 | 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 224 | 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 225 | 0x08, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x60, 0x06, 0x00, 0x00, | ||
| 226 | 0x60, 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, | ||
| 227 | 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x06, 0x00, 0x00, | ||
| 228 | 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, | ||
| 229 | 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 230 | 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, | ||
| 231 | 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, | ||
| 232 | 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, | ||
| 233 | 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, | ||
| 234 | 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, | ||
| 235 | 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, | ||
| 236 | 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 237 | 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, | ||
| 238 | 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, | ||
| 239 | 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, | ||
| 240 | 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, | ||
| 241 | 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 242 | 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, | ||
| 243 | 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, | ||
| 244 | 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x6c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, | ||
| 245 | 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, | ||
| 246 | 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, | ||
| 247 | 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, | ||
| 248 | 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, | ||
| 249 | 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, | ||
| 250 | 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, | ||
| 251 | 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x61, | ||
| 252 | 0x04, 0x61, 0xb8, 0xe8, 0x70, 0xa4, 0x69, 0x01, 0x30, 0x87, 0x9a, 0xfc, | ||
| 253 | 0xbf, 0xe6, 0x7f, 0x9b, 0x46, 0x83, 0xad, 0x97, 0x70, 0x2a, 0x10, 0x00, | ||
| 254 | 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, | ||
| 255 | 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, | ||
| 256 | 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 257 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 258 | 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 259 | 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, | ||
| 260 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, | ||
| 261 | 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, | ||
| 262 | 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, | ||
| 263 | 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 264 | 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, | ||
| 265 | 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, | ||
| 266 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, | ||
| 267 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, | ||
| 268 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, | ||
| 269 | 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, | ||
| 270 | 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, | ||
| 271 | 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 272 | 0x40, 0x16, 0x08, 0x00, 0x13, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, | ||
| 273 | 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, | ||
| 274 | 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1b, 0x50, 0x04, 0x85, 0x50, 0x06, | ||
| 275 | 0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x1a, 0x05, 0x1a, 0x50, 0x1e, 0x05, | ||
| 276 | 0x51, 0x56, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08, 0x0a, 0xa1, 0x0c, 0x28, | ||
| 277 | 0xd6, 0x00, 0xe1, 0x19, 0x00, 0xca, 0x33, 0x00, 0xa4, 0xc7, 0x52, 0x10, | ||
| 278 | 0x04, 0x3e, 0xe0, 0x03, 0x00, 0x02, 0x81, 0x40, 0x00, 0x00, 0x00, 0x00, | ||
| 279 | 0x79, 0x18, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, | ||
| 280 | 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, | ||
| 281 | 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, | ||
| 282 | 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, | ||
| 283 | 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, | ||
| 284 | 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0xc1, 0x6e, 0x6e, | ||
| 285 | 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0x19, 0x47, 0xe3, | ||
| 286 | 0x2b, 0x06, 0xe7, 0x4b, 0x06, 0x66, 0x82, 0x40, 0x24, 0x1b, 0x10, 0x42, | ||
| 287 | 0x59, 0x06, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, | ||
| 288 | 0x98, 0x20, 0x60, 0x1b, 0x8d, 0x2f, 0x19, 0x98, 0xaf, 0x36, 0x98, 0x09, | ||
| 289 | 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30, 0x4d, 0xc3, 0x04, 0x81, | ||
| 290 | 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, 0x09, 0x42, 0xa4, 0x6d, | ||
| 291 | 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e, 0x8c, 0xc6, 0x97, 0x0c, | ||
| 292 | 0xcc, 0x57, 0x5b, 0xcc, 0x04, 0x81, 0x78, 0x26, 0x08, 0x04, 0xb4, 0x01, | ||
| 293 | 0x41, 0xb4, 0x6a, 0xb3, 0x2e, 0x6e, 0xa2, 0xf1, 0x25, 0x03, 0xf3, 0xd5, | ||
| 294 | 0x26, 0x33, 0x41, 0x20, 0xa2, 0x0d, 0x08, 0xe2, 0x55, 0x9f, 0x75, 0x71, | ||
| 295 | 0xd2, 0x06, 0x82, 0xc9, 0x3a, 0x30, 0xd8, 0x30, 0x10, 0x50, 0x18, 0x4c, | ||
| 296 | 0x10, 0x04, 0x60, 0x03, 0xb0, 0x61, 0x20, 0xc8, 0x80, 0x0c, 0x36, 0x04, | ||
| 297 | 0x65, 0xb0, 0x61, 0x18, 0xc6, 0xc0, 0x0c, 0x26, 0x08, 0x5a, 0xb7, 0x21, | ||
| 298 | 0x40, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0xa8, 0x8a, 0xb0, 0x86, | ||
| 299 | 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0x35, 0x41, 0x28, 0xac, 0x0d, | ||
| 300 | 0x01, 0x31, 0x41, 0x28, 0xae, 0x0d, 0x42, 0x55, 0x6d, 0x58, 0x88, 0x35, | ||
| 301 | 0x60, 0x83, 0x36, 0x70, 0x83, 0x36, 0x18, 0xde, 0x80, 0x68, 0x03, 0x38, | ||
| 302 | 0xd8, 0x10, 0x0c, 0x13, 0x84, 0x02, 0x9b, 0x20, 0x10, 0xd2, 0x06, 0xa1, | ||
| 303 | 0xa2, 0x83, 0x0d, 0xcb, 0xb0, 0x06, 0x6c, 0xd0, 0x06, 0x72, 0xd0, 0x06, | ||
| 304 | 0xc3, 0x1c, 0x0c, 0x6d, 0x50, 0x07, 0x1b, 0x84, 0x38, 0xb0, 0x83, 0x0d, | ||
| 305 | 0x0b, 0xb1, 0x06, 0x6c, 0xd0, 0x06, 0x6e, 0xf0, 0x06, 0xc3, 0x1c, 0x10, | ||
| 306 | 0x6d, 0x50, 0x07, 0x5c, 0xa6, 0xac, 0xbe, 0xa0, 0xde, 0xe6, 0xd2, 0xe8, | ||
| 307 | 0xd2, 0xde, 0xdc, 0x26, 0x08, 0x45, 0xb6, 0x61, 0x19, 0xf2, 0x80, 0x0d, | ||
| 308 | 0xf4, 0xc0, 0x0d, 0xe6, 0x60, 0x98, 0x83, 0xa1, 0x0d, 0xea, 0x60, 0x83, | ||
| 309 | 0x80, 0x07, 0x7b, 0xb0, 0x61, 0xb8, 0x03, 0x3e, 0x00, 0x36, 0x14, 0x63, | ||
| 310 | 0xa0, 0x06, 0x7d, 0xf0, 0x00, 0x34, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0xe6, | ||
| 311 | 0x26, 0x08, 0xc4, 0xc4, 0x22, 0xcd, 0x6d, 0x8e, 0x6e, 0x6e, 0x82, 0x40, | ||
| 312 | 0x50, 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xd8, 0xc8, 0x68, 0xcc, 0xa5, 0x9d, | ||
| 313 | 0x7d, 0xcd, 0xd1, 0x6d, 0x40, 0xfe, 0x00, 0x14, 0x42, 0x41, 0x14, 0x46, | ||
| 314 | 0x01, 0x21, 0x05, 0x50, 0xa8, 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, 0x46, | ||
| 315 | 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, | ||
| 316 | 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, | ||
| 317 | 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x82, 0xa2, 0x0e, 0x19, 0x9e, | ||
| 318 | 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, 0xdb, | ||
| 319 | 0x94, 0x00, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, | ||
| 320 | 0x37, 0x56, 0x36, 0x37, 0x25, 0x70, 0x2a, 0x91, 0xe1, 0xb9, 0xd0, 0xe5, | ||
| 321 | 0xc1, 0x95, 0x05, 0xb9, 0xb9, 0xbd, 0xd1, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, | ||
| 322 | 0xcd, 0x4d, 0x11, 0xc2, 0xc0, 0x0c, 0xea, 0x90, 0xe1, 0xb9, 0xd8, 0xa5, | ||
| 323 | 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0xd0, | ||
| 324 | 0xa0, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, | ||
| 325 | 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0xa0, 0x0f, 0xba, 0x90, 0xe1, 0xb9, 0x8c, | ||
| 326 | 0xbd, 0xd5, 0xb9, 0xd1, 0x95, 0xc9, 0xcd, 0x4d, 0x09, 0x48, 0x01, 0x00, | ||
| 327 | 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, | ||
| 328 | 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, | ||
| 329 | 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, | ||
| 330 | 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, | ||
| 331 | 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, | ||
| 332 | 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, | ||
| 333 | 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, | ||
| 334 | 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, | ||
| 335 | 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, | ||
| 336 | 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, | ||
| 337 | 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, | ||
| 338 | 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, | ||
| 339 | 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, | ||
| 340 | 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, | ||
| 341 | 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, | ||
| 342 | 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, | ||
| 343 | 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, | ||
| 344 | 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, | ||
| 345 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, | ||
| 346 | 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, | ||
| 347 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, | ||
| 348 | 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, | ||
| 349 | 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, | ||
| 350 | 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, | ||
| 351 | 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, | ||
| 352 | 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, | ||
| 353 | 0x71, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, | ||
| 354 | 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, | ||
| 355 | 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, | ||
| 356 | 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, | ||
| 357 | 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, | ||
| 358 | 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, | ||
| 359 | 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, | ||
| 360 | 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, | ||
| 361 | 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 362 | 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 363 | 0xf1, 0x3b, 0x1c, 0xc9, 0xb8, 0x7e, 0x56, 0x0d, 0xa7, 0x44, 0x65, 0x9d, | ||
| 364 | 0xd5, 0xd3, 0x9d, 0xcb, 0x44, 0x58, 0x49, 0x4c, 0x04, 0x07, 0x00, 0x00, | ||
| 365 | 0x60, 0x00, 0x01, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, | ||
| 366 | 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xec, 0x06, 0x00, 0x00, | ||
| 367 | 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, | ||
| 368 | 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 369 | 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, | ||
| 370 | 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, | ||
| 371 | 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, | ||
| 372 | 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, | ||
| 373 | 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, | ||
| 374 | 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, | ||
| 375 | 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 376 | 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, | ||
| 377 | 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, | ||
| 378 | 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, | ||
| 379 | 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, | ||
| 380 | 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 381 | 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, | ||
| 382 | 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, | ||
| 383 | 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x6c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, | ||
| 384 | 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, | ||
| 385 | 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, | ||
| 386 | 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, | ||
| 387 | 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, | ||
| 388 | 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, | ||
| 389 | 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, | ||
| 390 | 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x61, | ||
| 391 | 0x04, 0x61, 0xb8, 0xe8, 0x70, 0xa4, 0x69, 0x01, 0x30, 0x87, 0x9a, 0xfc, | ||
| 392 | 0xbf, 0xe6, 0x7f, 0x9b, 0x46, 0x83, 0xad, 0x97, 0x70, 0x2a, 0x10, 0x00, | ||
| 393 | 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, | ||
| 394 | 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, | ||
| 395 | 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 396 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 397 | 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 398 | 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, | ||
| 399 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, | ||
| 400 | 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, | ||
| 401 | 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, | ||
| 402 | 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 403 | 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, | ||
| 404 | 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, | ||
| 405 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, | ||
| 406 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, | ||
| 407 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, | ||
| 408 | 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, | ||
| 409 | 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, | ||
| 410 | 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 411 | 0x40, 0x16, 0x08, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, | ||
| 412 | 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, | ||
| 413 | 0x25, 0x30, 0x02, 0x50, 0x10, 0xc5, 0x50, 0xb0, 0x01, 0x65, 0x50, 0x1e, | ||
| 414 | 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08, 0x0a, 0xa1, 0x0c, 0x28, 0xcf, 0x00, | ||
| 415 | 0x90, 0x1e, 0x4b, 0x41, 0x10, 0xf8, 0x80, 0x0f, 0x00, 0x08, 0x04, 0x02, | ||
| 416 | 0x01, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, | ||
| 417 | 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, | ||
| 418 | 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, | ||
| 419 | 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, | ||
| 420 | 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, | ||
| 421 | 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, | ||
| 422 | 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, 0x73, 0x13, 0x04, 0x22, 0xd9, 0x30, | ||
| 423 | 0x20, 0x09, 0x31, 0x41, 0xc8, 0x24, 0x02, 0x13, 0x04, 0x42, 0xd9, 0x80, | ||
| 424 | 0x10, 0x0b, 0x33, 0x10, 0x43, 0x03, 0x6c, 0x08, 0x9c, 0x0d, 0x04, 0x00, | ||
| 425 | 0x3c, 0xc0, 0x04, 0x41, 0x9b, 0x36, 0x04, 0xd1, 0x04, 0x41, 0x00, 0x48, | ||
| 426 | 0xb4, 0x85, 0xa5, 0xb9, 0x11, 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, | ||
| 427 | 0x22, 0x9a, 0x20, 0x14, 0xcd, 0x04, 0xa1, 0x70, 0x36, 0x04, 0xc4, 0x04, | ||
| 428 | 0xa1, 0x78, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xd0, 0xb4, 0x0d, 0x0b, 0x51, | ||
| 429 | 0x59, 0x17, 0x76, 0x0d, 0x19, 0x71, 0x6d, 0x1b, 0x82, 0x61, 0x82, 0x50, | ||
| 430 | 0x40, 0x13, 0x04, 0x82, 0xd9, 0x20, 0x68, 0xdf, 0x86, 0x65, 0xa8, 0xac, | ||
| 431 | 0xab, 0xbb, 0x06, 0x6f, 0xb8, 0xc0, 0x60, 0x83, 0xc0, 0x85, 0xc1, 0x86, | ||
| 432 | 0x85, 0xa8, 0xac, 0x0b, 0xcb, 0x06, 0x8f, 0xb8, 0xc0, 0x80, 0xcb, 0x94, | ||
| 433 | 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, 0xa1, | ||
| 434 | 0x88, 0x36, 0x2c, 0x03, 0x19, 0x58, 0x65, 0x80, 0x79, 0x83, 0x37, 0x5c, | ||
| 435 | 0x60, 0xb0, 0x41, 0x18, 0x03, 0x33, 0xd8, 0x30, 0x88, 0xc1, 0x19, 0x00, | ||
| 436 | 0x1b, 0x8a, 0x89, 0x42, 0x03, 0x08, 0xa8, 0xc2, 0xc6, 0x66, 0xd7, 0xe6, | ||
| 437 | 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, | ||
| 438 | 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, | ||
| 439 | 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x02, 0xa3, 0x0e, | ||
| 440 | 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b, 0x59, | ||
| 441 | 0x19, 0xdb, 0x94, 0x20, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, | ||
| 442 | 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0x78, 0xea, 0x90, 0xe1, 0xb9, | ||
| 443 | 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, | ||
| 444 | 0x09, 0xa2, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, | ||
| 445 | 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x34, 0x00, 0x00, 0x00, 0x00, | ||
| 446 | 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, | ||
| 447 | 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, | ||
| 448 | 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, | ||
| 449 | 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, | ||
| 450 | 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, | ||
| 451 | 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, | ||
| 452 | 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, | ||
| 453 | 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, | ||
| 454 | 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, | ||
| 455 | 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, | ||
| 456 | 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, | ||
| 457 | 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, | ||
| 458 | 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, | ||
| 459 | 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, | ||
| 460 | 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, | ||
| 461 | 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, | ||
| 462 | 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, | ||
| 463 | 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, | ||
| 464 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, | ||
| 465 | 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, | ||
| 466 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, | ||
| 467 | 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, | ||
| 468 | 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, | ||
| 469 | 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, | ||
| 470 | 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, | ||
| 471 | 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, | ||
| 472 | 0x71, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, | ||
| 473 | 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, | ||
| 474 | 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, | ||
| 475 | 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, | ||
| 476 | 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, | ||
| 477 | 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, | ||
| 478 | 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, | ||
| 479 | 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, | ||
| 480 | 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, | ||
| 481 | 0x63, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, | ||
| 482 | 0x05, 0x00, 0x00, 0x00, 0x44, 0x4a, 0xa1, 0x10, 0x66, 0x00, 0x8a, 0xab, | ||
| 483 | 0xec, 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 484 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x5d, 0x43, 0x53, 0x55, 0xc1, | ||
| 485 | 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x1c, 0x72, 0x59, 0xcf, 0x31, | ||
| 486 | 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x97, 0x60, 0x17, 0x81, 0x8c, | ||
| 487 | 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xe1, 0x29, 0x19, 0x06, 0x25, 0x23, | ||
| 488 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x7c, 0x8b, 0x96, 0x3d, 0xca, 0x88, | ||
| 489 | 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x60, 0xc0, 0x68, 0xda, 0xb4, 0x8c, | ||
| 490 | 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x11, 0x06, 0xcd, 0xb6, 0x21, 0xcc, | ||
| 491 | 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x60, 0xb0, 0x1c, 0xdc, 0x68, | ||
| 492 | 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, | ||
| 493 | 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x65, 0x00, 0x31, 0x62, | ||
| 494 | 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, | ||
| 495 | 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x1a, 0x54, | ||
| 496 | 0x91, 0x18, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, | ||
| 497 | 0xc2, 0x68, 0x02, 0x31, 0x98, 0x13, 0xc9, 0x67, 0xc4, 0x00, 0x01, 0x40, | ||
| 498 | 0x10, 0x0c, 0x9e, 0x37, 0xe0, 0x22, 0x25, 0x30, 0x23, 0x80, 0x8e, 0x41, | ||
| 499 | 0x94, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0xe0, 0x91, 0x83, 0x8f, | ||
| 500 | 0x62, 0x02, 0x0b, 0x10, 0xe8, 0x98, 0x74, 0xc9, 0x67, 0xc4, 0x00, 0x01, | ||
| 501 | 0x40, 0x10, 0x0c, 0x9e, 0x3a, 0x10, 0x83, 0xcb, 0x09, 0x2c, 0x50, 0xa0, | ||
| 502 | 0x63, 0x94, 0x26, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xf0, | ||
| 503 | 0xa0, 0x0c, 0x34, 0x28, 0xb0, 0x80, 0x81, 0xce, 0x88, 0x41, 0x02, 0x80, | ||
| 504 | 0x20, 0x18, 0x20, 0x7c, 0xa0, 0x06, 0x77, 0x70, 0x07, 0x70, 0x10, 0x06, | ||
| 505 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xf0, 0x81, 0x1a, 0xdc, 0xc1, | ||
| 506 | 0x1d, 0x90, 0x01, 0x18, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xc2, | ||
| 507 | 0x07, 0x6a, 0x70, 0x07, 0x77, 0xf0, 0x06, 0xdf, 0x88, 0x41, 0x02, 0x80, | ||
| 508 | 0x20, 0x18, 0x20, 0x7c, 0xa0, 0x06, 0x77, 0x70, 0x07, 0x6d, 0xe0, 0x8d, | ||
| 509 | 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xc2, 0x07, 0x6a, 0x80, 0x07, 0x77, | ||
| 510 | 0x00, 0x07, 0xca, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x7c, 0xa0, | ||
| 511 | 0x06, 0x78, 0x70, 0x07, 0x64, 0x70, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, | ||
| 512 | 0x01, 0xc2, 0x07, 0x6a, 0x80, 0x07, 0x77, 0xf0, 0x06, 0xc4, 0x88, 0x41, | ||
| 513 | 0x02, 0x80, 0x20, 0x18, 0x20, 0x7c, 0xa0, 0x06, 0x78, 0x70, 0x07, 0x6d, | ||
| 514 | 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 515 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.spv.h b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.spv.h new file mode 100644 index 0000000..6570ab4 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_color.vert.spv.h | |||
| @@ -0,0 +1,89 @@ | |||
| 1 | static const unsigned char tri_color_vert_spv[] = { | ||
| 2 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, | ||
| 3 | 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, | ||
| 4 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 5 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, | ||
| 6 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 7 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 9 | 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, | ||
| 10 | 0x25, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 11 | 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 12 | 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 13 | 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, | ||
| 14 | 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 15 | 0x03, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 16 | 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 17 | 0x47, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 18 | 0x48, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 19 | 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 20 | 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 21 | 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 22 | 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, | ||
| 23 | 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, | ||
| 24 | 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 25 | 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, | ||
| 26 | 0x47, 0x00, 0x03, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 27 | 0x47, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, | ||
| 28 | 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
| 29 | 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 30 | 0x19, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 31 | 0x47, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 32 | 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, | ||
| 33 | 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, | ||
| 34 | 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 35 | 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 36 | 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 37 | 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, | ||
| 38 | 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 39 | 0x2b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 40 | 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 41 | 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, | ||
| 42 | 0x0b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 43 | 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 44 | 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 45 | 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, | ||
| 46 | 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, | ||
| 47 | 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, | ||
| 48 | 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 49 | 0x18, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 50 | 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 51 | 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, | ||
| 52 | 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 53 | 0x11, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 54 | 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 55 | 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 56 | 0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 57 | 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 58 | 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 59 | 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 60 | 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, | ||
| 61 | 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 62 | 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, | ||
| 63 | 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 64 | 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, | ||
| 65 | 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 66 | 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 67 | 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 68 | 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 69 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, | ||
| 70 | 0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, | ||
| 71 | 0x16, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 72 | 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, | ||
| 73 | 0x16, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 74 | 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, | ||
| 75 | 0x06, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, | ||
| 76 | 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 77 | 0x1e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 78 | 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, | ||
| 79 | 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, | ||
| 80 | 0x1c, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 81 | 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, | ||
| 82 | 0x41, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, | ||
| 83 | 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, | ||
| 84 | 0x22, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, | ||
| 85 | 0x07, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, | ||
| 86 | 0x3e, 0x00, 0x03, 0x00, 0x23, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, | ||
| 87 | 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 | ||
| 88 | }; | ||
| 89 | static const unsigned int tri_color_vert_spv_len = 1028; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert new file mode 100644 index 0000000..bdf4366 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | #version 450 | ||
| 2 | |||
| 3 | layout(location = 0) in vec2 a_position; | ||
| 4 | layout(location = 1) in vec4 a_color; | ||
| 5 | layout(location = 2) in vec2 a_uv; | ||
| 6 | |||
| 7 | layout(location = 0) out vec4 v_color; | ||
| 8 | layout(location = 1) out vec2 v_uv; | ||
| 9 | |||
| 10 | layout(set = 1, binding = 0) uniform Context { | ||
| 11 | mat4 mvp; | ||
| 12 | vec4 color; /* XXX unused */ | ||
| 13 | vec2 texture_size; | ||
| 14 | } u_context; | ||
| 15 | |||
| 16 | void main() { | ||
| 17 | gl_Position = u_context.mvp * vec4(a_position, 0, 1); | ||
| 18 | v_color = a_color; | ||
| 19 | v_uv = a_uv / u_context.texture_size; | ||
| 20 | } | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.metal.h b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.metal.h new file mode 100644 index 0000000..a5019fc --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.metal.h | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | static const unsigned char tri_texture_vert_metal[] = { | ||
| 2 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, | ||
| 3 | 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, | ||
| 4 | 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x69, | ||
| 5 | 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a, | ||
| 6 | 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, | ||
| 7 | 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x0a, | ||
| 8 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x5f, 0x31, 0x38, 0x0a, 0x7b, | ||
| 9 | 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, | ||
| 10 | 0x34, 0x20, 0x5f, 0x6d, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 11 | 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x6d, 0x31, 0x3b, 0x0a, 0x20, | ||
| 12 | 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x6d, | ||
| 13 | 0x32, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, | ||
| 14 | 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x0a, | ||
| 15 | 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, | ||
| 16 | 0x20, 0x6d, 0x5f, 0x33, 0x35, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, | ||
| 17 | 0x28, 0x6c, 0x6f, 0x63, 0x6e, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, | ||
| 18 | 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x6d, 0x5f, | ||
| 19 | 0x34, 0x30, 0x20, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x28, 0x6c, 0x6f, | ||
| 20 | 0x63, 0x6e, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, | ||
| 21 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, | ||
| 22 | 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, | ||
| 23 | 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, | ||
| 24 | 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, | ||
| 25 | 0x30, 0x5f, 0x69, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, | ||
| 26 | 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x6d, 0x5f, 0x32, 0x35, 0x20, 0x5b, | ||
| 27 | 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, | ||
| 28 | 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, | ||
| 29 | 0x61, 0x74, 0x34, 0x20, 0x6d, 0x5f, 0x33, 0x37, 0x20, 0x5b, 0x5b, 0x61, | ||
| 30 | 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, | ||
| 31 | 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 32 | 0x32, 0x20, 0x6d, 0x5f, 0x34, 0x31, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, | ||
| 33 | 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, | ||
| 34 | 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, | ||
| 35 | 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, | ||
| 36 | 0x69, 0x6e, 0x30, 0x28, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x69, 0x6e, | ||
| 37 | 0x20, 0x69, 0x6e, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, | ||
| 38 | 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, | ||
| 39 | 0x6e, 0x74, 0x20, 0x5f, 0x31, 0x38, 0x26, 0x20, 0x5f, 0x32, 0x30, 0x20, | ||
| 40 | 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, | ||
| 41 | 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, | ||
| 42 | 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, | ||
| 43 | 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, | ||
| 44 | 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, | ||
| 45 | 0x20, 0x3d, 0x20, 0x5f, 0x32, 0x30, 0x2e, 0x5f, 0x6d, 0x30, 0x20, 0x2a, | ||
| 46 | 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x69, 0x6e, 0x2e, 0x6d, | ||
| 47 | 0x5f, 0x32, 0x35, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, | ||
| 48 | 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, | ||
| 49 | 0x6d, 0x5f, 0x33, 0x35, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, | ||
| 50 | 0x33, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, | ||
| 51 | 0x6d, 0x5f, 0x34, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, | ||
| 52 | 0x34, 0x31, 0x20, 0x2f, 0x20, 0x5f, 0x32, 0x30, 0x2e, 0x5f, 0x6d, 0x32, | ||
| 53 | 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, | ||
| 54 | 0x20, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a | ||
| 55 | }; | ||
| 56 | static const unsigned int tri_texture_vert_metal_len = 633; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.sm50.dxbc.h b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.sm50.dxbc.h new file mode 100644 index 0000000..f34d45d --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.sm50.dxbc.h | |||
| @@ -0,0 +1,195 @@ | |||
| 1 | static const signed char tri_texture_vert_sm50_dxbc[] = | ||
| 2 | { | ||
| 3 | 68, 88, 66, 67, 108, 113, | ||
| 4 | -108, 81, -2, 27, 41, 94, | ||
| 5 | -47, 10, -97, -76, -86, -88, | ||
| 6 | -2, 29, 1, 0, 0, 0, | ||
| 7 | 124, 4, 0, 0, 5, 0, | ||
| 8 | 0, 0, 52, 0, 0, 0, | ||
| 9 | -12, 1, 0, 0, 88, 2, | ||
| 10 | 0, 0, -56, 2, 0, 0, | ||
| 11 | -32, 3, 0, 0, 82, 68, | ||
| 12 | 69, 70, -72, 1, 0, 0, | ||
| 13 | 1, 0, 0, 0, 100, 0, | ||
| 14 | 0, 0, 1, 0, 0, 0, | ||
| 15 | 60, 0, 0, 0, 0, 5, | ||
| 16 | -2, -1, 0, 1, 0, 0, | ||
| 17 | -112, 1, 0, 0, 82, 68, | ||
| 18 | 49, 49, 60, 0, 0, 0, | ||
| 19 | 24, 0, 0, 0, 32, 0, | ||
| 20 | 0, 0, 40, 0, 0, 0, | ||
| 21 | 36, 0, 0, 0, 12, 0, | ||
| 22 | 0, 0, 0, 0, 0, 0, | ||
| 23 | 92, 0, 0, 0, 0, 0, | ||
| 24 | 0, 0, 0, 0, 0, 0, | ||
| 25 | 0, 0, 0, 0, 0, 0, | ||
| 26 | 0, 0, 0, 0, 0, 0, | ||
| 27 | 1, 0, 0, 0, 1, 0, | ||
| 28 | 0, 0, 95, 49, 56, 95, | ||
| 29 | 50, 48, 0, -85, 92, 0, | ||
| 30 | 0, 0, 3, 0, 0, 0, | ||
| 31 | 124, 0, 0, 0, 96, 0, | ||
| 32 | 0, 0, 0, 0, 0, 0, | ||
| 33 | 0, 0, 0, 0, -12, 0, | ||
| 34 | 0, 0, 0, 0, 0, 0, | ||
| 35 | 64, 0, 0, 0, 2, 0, | ||
| 36 | 0, 0, 4, 1, 0, 0, | ||
| 37 | 0, 0, 0, 0, -1, -1, | ||
| 38 | -1, -1, 0, 0, 0, 0, | ||
| 39 | -1, -1, -1, -1, 0, 0, | ||
| 40 | 0, 0, 40, 1, 0, 0, | ||
| 41 | 64, 0, 0, 0, 16, 0, | ||
| 42 | 0, 0, 0, 0, 0, 0, | ||
| 43 | 56, 1, 0, 0, 0, 0, | ||
| 44 | 0, 0, -1, -1, -1, -1, | ||
| 45 | 0, 0, 0, 0, -1, -1, | ||
| 46 | -1, -1, 0, 0, 0, 0, | ||
| 47 | 92, 1, 0, 0, 80, 0, | ||
| 48 | 0, 0, 8, 0, 0, 0, | ||
| 49 | 2, 0, 0, 0, 108, 1, | ||
| 50 | 0, 0, 0, 0, 0, 0, | ||
| 51 | -1, -1, -1, -1, 0, 0, | ||
| 52 | 0, 0, -1, -1, -1, -1, | ||
| 53 | 0, 0, 0, 0, 95, 50, | ||
| 54 | 48, 95, 109, 48, 0, 102, | ||
| 55 | 108, 111, 97, 116, 52, 120, | ||
| 56 | 52, 0, 2, 0, 3, 0, | ||
| 57 | 4, 0, 4, 0, 0, 0, | ||
| 58 | 0, 0, 0, 0, 0, 0, | ||
| 59 | 0, 0, 0, 0, 0, 0, | ||
| 60 | 0, 0, 0, 0, 0, 0, | ||
| 61 | 0, 0, 0, 0, -5, 0, | ||
| 62 | 0, 0, 95, 50, 48, 95, | ||
| 63 | 109, 49, 0, 102, 108, 111, | ||
| 64 | 97, 116, 52, 0, -85, -85, | ||
| 65 | 1, 0, 3, 0, 1, 0, | ||
| 66 | 4, 0, 0, 0, 0, 0, | ||
| 67 | 0, 0, 0, 0, 0, 0, | ||
| 68 | 0, 0, 0, 0, 0, 0, | ||
| 69 | 0, 0, 0, 0, 0, 0, | ||
| 70 | 0, 0, 47, 1, 0, 0, | ||
| 71 | 95, 50, 48, 95, 109, 50, | ||
| 72 | 0, 102, 108, 111, 97, 116, | ||
| 73 | 50, 0, -85, -85, 1, 0, | ||
| 74 | 3, 0, 1, 0, 2, 0, | ||
| 75 | 0, 0, 0, 0, 0, 0, | ||
| 76 | 0, 0, 0, 0, 0, 0, | ||
| 77 | 0, 0, 0, 0, 0, 0, | ||
| 78 | 0, 0, 0, 0, 0, 0, | ||
| 79 | 99, 1, 0, 0, 77, 105, | ||
| 80 | 99, 114, 111, 115, 111, 102, | ||
| 81 | 116, 32, 40, 82, 41, 32, | ||
| 82 | 72, 76, 83, 76, 32, 83, | ||
| 83 | 104, 97, 100, 101, 114, 32, | ||
| 84 | 67, 111, 109, 112, 105, 108, | ||
| 85 | 101, 114, 32, 49, 48, 46, | ||
| 86 | 49, 0, 73, 83, 71, 78, | ||
| 87 | 92, 0, 0, 0, 3, 0, | ||
| 88 | 0, 0, 8, 0, 0, 0, | ||
| 89 | 80, 0, 0, 0, 0, 0, | ||
| 90 | 0, 0, 0, 0, 0, 0, | ||
| 91 | 3, 0, 0, 0, 0, 0, | ||
| 92 | 0, 0, 3, 3, 0, 0, | ||
| 93 | 80, 0, 0, 0, 1, 0, | ||
| 94 | 0, 0, 0, 0, 0, 0, | ||
| 95 | 3, 0, 0, 0, 1, 0, | ||
| 96 | 0, 0, 15, 15, 0, 0, | ||
| 97 | 80, 0, 0, 0, 2, 0, | ||
| 98 | 0, 0, 0, 0, 0, 0, | ||
| 99 | 3, 0, 0, 0, 2, 0, | ||
| 100 | 0, 0, 3, 3, 0, 0, | ||
| 101 | 84, 69, 88, 67, 79, 79, | ||
| 102 | 82, 68, 0, -85, -85, -85, | ||
| 103 | 79, 83, 71, 78, 104, 0, | ||
| 104 | 0, 0, 3, 0, 0, 0, | ||
| 105 | 8, 0, 0, 0, 80, 0, | ||
| 106 | 0, 0, 0, 0, 0, 0, | ||
| 107 | 0, 0, 0, 0, 3, 0, | ||
| 108 | 0, 0, 0, 0, 0, 0, | ||
| 109 | 15, 0, 0, 0, 80, 0, | ||
| 110 | 0, 0, 1, 0, 0, 0, | ||
| 111 | 0, 0, 0, 0, 3, 0, | ||
| 112 | 0, 0, 1, 0, 0, 0, | ||
| 113 | 3, 12, 0, 0, 89, 0, | ||
| 114 | 0, 0, 0, 0, 0, 0, | ||
| 115 | 1, 0, 0, 0, 3, 0, | ||
| 116 | 0, 0, 2, 0, 0, 0, | ||
| 117 | 15, 0, 0, 0, 84, 69, | ||
| 118 | 88, 67, 79, 79, 82, 68, | ||
| 119 | 0, 83, 86, 95, 80, 111, | ||
| 120 | 115, 105, 116, 105, 111, 110, | ||
| 121 | 0, -85, -85, -85, 83, 72, | ||
| 122 | 69, 88, 16, 1, 0, 0, | ||
| 123 | 80, 0, 1, 0, 68, 0, | ||
| 124 | 0, 0, 106, 8, 0, 1, | ||
| 125 | 89, 0, 0, 4, 70,-114, | ||
| 126 | 32, 0, 0, 0, 0, 0, | ||
| 127 | 6, 0, 0, 0, 95, 0, | ||
| 128 | 0, 3, 50, 16, 16, 0, | ||
| 129 | 0, 0, 0, 0, 95, 0, | ||
| 130 | 0, 3, -14, 16, 16, 0, | ||
| 131 | 1, 0, 0, 0, 95, 0, | ||
| 132 | 0, 3, 50, 16, 16, 0, | ||
| 133 | 2, 0, 0, 0, 101, 0, | ||
| 134 | 0, 3, -14, 32, 16, 0, | ||
| 135 | 0, 0, 0, 0, 101, 0, | ||
| 136 | 0, 3, 50, 32, 16, 0, | ||
| 137 | 1, 0, 0, 0, 103, 0, | ||
| 138 | 0, 4, -14, 32, 16, 0, | ||
| 139 | 2, 0, 0, 0, 1, 0, | ||
| 140 | 0, 0, 104, 0, 0, 2, | ||
| 141 | 1, 0, 0, 0, 54, 0, | ||
| 142 | 0, 5, -14, 32, 16, 0, | ||
| 143 | 0, 0, 0, 0, 70, 30, | ||
| 144 | 16, 0, 1, 0, 0, 0, | ||
| 145 | 14, 0, 0, 8, 50, 32, | ||
| 146 | 16, 0, 1, 0, 0, 0, | ||
| 147 | 70, 16, 16, 0, 2, 0, | ||
| 148 | 0, 0, 70,-128, 32, 0, | ||
| 149 | 0, 0, 0, 0, 5, 0, | ||
| 150 | 0, 0, 56, 0, 0, 8, | ||
| 151 | -14, 0, 16, 0, 0, 0, | ||
| 152 | 0, 0, 86, 21, 16, 0, | ||
| 153 | 0, 0, 0, 0, 70,-114, | ||
| 154 | 32, 0, 0, 0, 0, 0, | ||
| 155 | 1, 0, 0, 0, 50, 0, | ||
| 156 | 0, 10, -14, 0, 16, 0, | ||
| 157 | 0, 0, 0, 0, 6, 16, | ||
| 158 | 16, 0, 0, 0, 0, 0, | ||
| 159 | 70,-114, 32, 0, 0, 0, | ||
| 160 | 0, 0, 0, 0, 0, 0, | ||
| 161 | 70, 14, 16, 0, 0, 0, | ||
| 162 | 0, 0, 0, 0, 0, 8, | ||
| 163 | -14, 32, 16, 0, 2, 0, | ||
| 164 | 0, 0, 70, 14, 16, 0, | ||
| 165 | 0, 0, 0, 0, 70,-114, | ||
| 166 | 32, 0, 0, 0, 0, 0, | ||
| 167 | 3, 0, 0, 0, 62, 0, | ||
| 168 | 0, 1, 83, 84, 65, 84, | ||
| 169 | -108, 0, 0, 0, 6, 0, | ||
| 170 | 0, 0, 1, 0, 0, 0, | ||
| 171 | 0, 0, 0, 0, 6, 0, | ||
| 172 | 0, 0, 4, 0, 0, 0, | ||
| 173 | 0, 0, 0, 0, 0, 0, | ||
| 174 | 0, 0, 1, 0, 0, 0, | ||
| 175 | 0, 0, 0, 0, 0, 0, | ||
| 176 | 0, 0, 0, 0, 0, 0, | ||
| 177 | 0, 0, 0, 0, 0, 0, | ||
| 178 | 0, 0, 0, 0, 0, 0, | ||
| 179 | 0, 0, 0, 0, 0, 0, | ||
| 180 | 0, 0, 0, 0, 0, 0, | ||
| 181 | 0, 0, 0, 0, 0, 0, | ||
| 182 | 0, 0, 1, 0, 0, 0, | ||
| 183 | 0, 0, 0, 0, 0, 0, | ||
| 184 | 0, 0, 0, 0, 0, 0, | ||
| 185 | 0, 0, 0, 0, 0, 0, | ||
| 186 | 0, 0, 0, 0, 0, 0, | ||
| 187 | 0, 0, 0, 0, 0, 0, | ||
| 188 | 0, 0, 0, 0, 0, 0, | ||
| 189 | 0, 0, 0, 0, 0, 0, | ||
| 190 | 0, 0, 0, 0, 0, 0, | ||
| 191 | 0, 0, 0, 0, 0, 0, | ||
| 192 | 0, 0, 0, 0, 0, 0, | ||
| 193 | 0, 0, 0, 0, 0, 0, | ||
| 194 | 0, 0 | ||
| 195 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.sm60.dxil.h b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.sm60.dxil.h new file mode 100644 index 0000000..4324106 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.sm60.dxil.h | |||
| @@ -0,0 +1,558 @@ | |||
| 1 | #if 0 | ||
| 2 | ; | ||
| 3 | ; Input signature: | ||
| 4 | ; | ||
| 5 | ; Name Index Mask Register SysValue Format Used | ||
| 6 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 7 | ; TEXCOORD 0 xy 0 NONE float xy | ||
| 8 | ; TEXCOORD 1 xyzw 1 NONE float xyzw | ||
| 9 | ; TEXCOORD 2 xy 2 NONE float xy | ||
| 10 | ; | ||
| 11 | ; | ||
| 12 | ; Output signature: | ||
| 13 | ; | ||
| 14 | ; Name Index Mask Register SysValue Format Used | ||
| 15 | ; -------------------- ----- ------ -------- -------- ------- ------ | ||
| 16 | ; TEXCOORD 0 xyzw 0 NONE float xyzw | ||
| 17 | ; TEXCOORD 1 xy 1 NONE float xy | ||
| 18 | ; SV_Position 0 xyzw 2 POS float xyzw | ||
| 19 | ; | ||
| 20 | ; shader hash: c10d07e0100207069cb29b72a35d05b6 | ||
| 21 | ; | ||
| 22 | ; Pipeline Runtime Information: | ||
| 23 | ; | ||
| 24 | ; Vertex Shader | ||
| 25 | ; OutputPositionPresent=1 | ||
| 26 | ; | ||
| 27 | ; | ||
| 28 | ; Input signature: | ||
| 29 | ; | ||
| 30 | ; Name Index InterpMode DynIdx | ||
| 31 | ; -------------------- ----- ---------------------- ------ | ||
| 32 | ; TEXCOORD 0 | ||
| 33 | ; TEXCOORD 1 | ||
| 34 | ; TEXCOORD 2 | ||
| 35 | ; | ||
| 36 | ; Output signature: | ||
| 37 | ; | ||
| 38 | ; Name Index InterpMode DynIdx | ||
| 39 | ; -------------------- ----- ---------------------- ------ | ||
| 40 | ; TEXCOORD 0 linear | ||
| 41 | ; TEXCOORD 1 linear | ||
| 42 | ; SV_Position 0 noperspective | ||
| 43 | ; | ||
| 44 | ; Buffer Definitions: | ||
| 45 | ; | ||
| 46 | ; cbuffer _18_20 | ||
| 47 | ; { | ||
| 48 | ; | ||
| 49 | ; struct hostlayout._18_20 | ||
| 50 | ; { | ||
| 51 | ; | ||
| 52 | ; row_major float4x4 _20_m0; ; Offset: 0 | ||
| 53 | ; float4 _20_m1; ; Offset: 64 | ||
| 54 | ; float2 _20_m2; ; Offset: 80 | ||
| 55 | ; | ||
| 56 | ; } _18_20; ; Offset: 0 Size: 88 | ||
| 57 | ; | ||
| 58 | ; } | ||
| 59 | ; | ||
| 60 | ; | ||
| 61 | ; Resource Bindings: | ||
| 62 | ; | ||
| 63 | ; Name Type Format Dim ID HLSL Bind Count | ||
| 64 | ; ------------------------------ ---------- ------- ----------- ------- -------------- ------ | ||
| 65 | ; _18_20 cbuffer NA NA CB0 cb0,space1 1 | ||
| 66 | ; | ||
| 67 | ; | ||
| 68 | ; ViewId state: | ||
| 69 | ; | ||
| 70 | ; Number of inputs: 10, outputs: 12 | ||
| 71 | ; Outputs dependent on ViewId: { } | ||
| 72 | ; Inputs contributing to computation of Outputs: | ||
| 73 | ; output 0 depends on inputs: { 4 } | ||
| 74 | ; output 1 depends on inputs: { 5 } | ||
| 75 | ; output 2 depends on inputs: { 6 } | ||
| 76 | ; output 3 depends on inputs: { 7 } | ||
| 77 | ; output 4 depends on inputs: { 8 } | ||
| 78 | ; output 5 depends on inputs: { 9 } | ||
| 79 | ; output 8 depends on inputs: { 0, 1 } | ||
| 80 | ; output 9 depends on inputs: { 0, 1 } | ||
| 81 | ; output 10 depends on inputs: { 0, 1 } | ||
| 82 | ; output 11 depends on inputs: { 0, 1 } | ||
| 83 | ; | ||
| 84 | target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" | ||
| 85 | target triple = "dxil-ms-dx" | ||
| 86 | |||
| 87 | %dx.types.Handle = type { i8* } | ||
| 88 | %dx.types.CBufRet.f32 = type { float, float, float, float } | ||
| 89 | %hostlayout._18_20 = type { [4 x <4 x float>], <4 x float>, <2 x float> } | ||
| 90 | |||
| 91 | define void @main() { | ||
| 92 | %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) | ||
| 93 | %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 94 | %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 95 | %4 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 96 | %5 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 97 | %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 98 | %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 99 | %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 100 | %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) | ||
| 101 | %10 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex) | ||
| 102 | %11 = extractvalue %dx.types.CBufRet.f32 %10, 0 | ||
| 103 | %12 = extractvalue %dx.types.CBufRet.f32 %10, 1 | ||
| 104 | %13 = extractvalue %dx.types.CBufRet.f32 %10, 2 | ||
| 105 | %14 = extractvalue %dx.types.CBufRet.f32 %10, 3 | ||
| 106 | %15 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex) | ||
| 107 | %16 = extractvalue %dx.types.CBufRet.f32 %15, 0 | ||
| 108 | %17 = extractvalue %dx.types.CBufRet.f32 %15, 1 | ||
| 109 | %18 = extractvalue %dx.types.CBufRet.f32 %15, 2 | ||
| 110 | %19 = extractvalue %dx.types.CBufRet.f32 %15, 3 | ||
| 111 | %20 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex) | ||
| 112 | %21 = extractvalue %dx.types.CBufRet.f32 %20, 0 | ||
| 113 | %22 = extractvalue %dx.types.CBufRet.f32 %20, 1 | ||
| 114 | %23 = extractvalue %dx.types.CBufRet.f32 %20, 2 | ||
| 115 | %24 = extractvalue %dx.types.CBufRet.f32 %20, 3 | ||
| 116 | %25 = fmul fast float %11, %8 | ||
| 117 | %26 = call float @dx.op.tertiary.f32(i32 46, float %9, float %16, float %25) ; FMad(a,b,c) | ||
| 118 | %27 = fadd fast float %21, %26 | ||
| 119 | %28 = fmul fast float %12, %8 | ||
| 120 | %29 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %28) ; FMad(a,b,c) | ||
| 121 | %30 = fadd fast float %29, %22 | ||
| 122 | %31 = fmul fast float %13, %8 | ||
| 123 | %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %31) ; FMad(a,b,c) | ||
| 124 | %33 = fadd fast float %32, %23 | ||
| 125 | %34 = fmul fast float %14, %8 | ||
| 126 | %35 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %34) ; FMad(a,b,c) | ||
| 127 | %36 = fadd fast float %35, %24 | ||
| 128 | %37 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex) | ||
| 129 | %38 = extractvalue %dx.types.CBufRet.f32 %37, 0 | ||
| 130 | %39 = extractvalue %dx.types.CBufRet.f32 %37, 1 | ||
| 131 | %40 = fdiv fast float %2, %38 | ||
| 132 | %41 = fdiv fast float %3, %39 | ||
| 133 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 134 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 135 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 136 | call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 137 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %40) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 138 | call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %41) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 139 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %27) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 140 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %30) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 141 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %33) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 142 | call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %36) ; StoreOutput(outputSigId,rowIndex,colIndex,value) | ||
| 143 | ret void | ||
| 144 | } | ||
| 145 | |||
| 146 | ; Function Attrs: nounwind readnone | ||
| 147 | declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 | ||
| 148 | |||
| 149 | ; Function Attrs: nounwind | ||
| 150 | declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 | ||
| 151 | |||
| 152 | ; Function Attrs: nounwind readonly | ||
| 153 | declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 | ||
| 154 | |||
| 155 | ; Function Attrs: nounwind readnone | ||
| 156 | declare float @dx.op.tertiary.f32(i32, float, float, float) #0 | ||
| 157 | |||
| 158 | ; Function Attrs: nounwind readonly | ||
| 159 | declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 | ||
| 160 | |||
| 161 | attributes #0 = { nounwind readnone } | ||
| 162 | attributes #1 = { nounwind } | ||
| 163 | attributes #2 = { nounwind readonly } | ||
| 164 | |||
| 165 | !llvm.ident = !{!0} | ||
| 166 | !dx.version = !{!1} | ||
| 167 | !dx.valver = !{!2} | ||
| 168 | !dx.shaderModel = !{!3} | ||
| 169 | !dx.resources = !{!4} | ||
| 170 | !dx.viewIdState = !{!7} | ||
| 171 | !dx.entryPoints = !{!8} | ||
| 172 | |||
| 173 | !0 = !{!"dxc(private) 1.8.0.4662 (416fab6b5)"} | ||
| 174 | !1 = !{i32 1, i32 0} | ||
| 175 | !2 = !{i32 1, i32 8} | ||
| 176 | !3 = !{!"vs", i32 6, i32 0} | ||
| 177 | !4 = !{null, null, !5, null} | ||
| 178 | !5 = !{!6} | ||
| 179 | !6 = !{i32 0, %hostlayout._18_20* undef, !"", i32 1, i32 0, i32 1, i32 88, null} | ||
| 180 | !7 = !{[12 x i32] [i32 10, i32 12, i32 3840, i32 3840, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8, i32 16, i32 32]} | ||
| 181 | !8 = !{void ()* @main, !"main", !9, !4, null} | ||
| 182 | !9 = !{!10, !19, null} | ||
| 183 | !10 = !{!11, !14, !17} | ||
| 184 | !11 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 0, i8 0, !13} | ||
| 185 | !12 = !{i32 0} | ||
| 186 | !13 = !{i32 3, i32 3} | ||
| 187 | !14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !15, i8 0, i32 1, i8 4, i32 1, i8 0, !16} | ||
| 188 | !15 = !{i32 1} | ||
| 189 | !16 = !{i32 3, i32 15} | ||
| 190 | !17 = !{i32 2, !"TEXCOORD", i8 9, i8 0, !18, i8 0, i32 1, i8 2, i32 2, i8 0, !13} | ||
| 191 | !18 = !{i32 2} | ||
| 192 | !19 = !{!20, !21, !22} | ||
| 193 | !20 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 0, i8 0, !16} | ||
| 194 | !21 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !15, i8 2, i32 1, i8 2, i32 1, i8 0, !13} | ||
| 195 | !22 = !{i32 2, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 2, i8 0, !16} | ||
| 196 | |||
| 197 | #endif | ||
| 198 | |||
| 199 | static const unsigned char tri_texture_vert_sm60_dxil[] = { | ||
| 200 | 0x44, 0x58, 0x42, 0x43, 0x1d, 0x39, 0x3a, 0xc6, 0x32, 0xb6, 0x8e, 0x58, | ||
| 201 | 0x41, 0xa6, 0x3b, 0x02, 0xc5, 0x3c, 0xcc, 0x94, 0x01, 0x00, 0x00, 0x00, | ||
| 202 | 0xc8, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, | ||
| 203 | 0x4c, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, | ||
| 204 | 0x8c, 0x02, 0x00, 0x00, 0x24, 0x09, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, | ||
| 205 | 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 206 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x74, 0x00, 0x00, 0x00, | ||
| 207 | 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 208 | 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 209 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, | ||
| 210 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
| 211 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 212 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 213 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 214 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 215 | 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, | ||
| 216 | 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, | ||
| 217 | 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 218 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 219 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 220 | 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 221 | 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 222 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, | ||
| 223 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, | ||
| 224 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 225 | 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 226 | 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x53, 0x56, 0x5f, | ||
| 227 | 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 228 | 0x50, 0x53, 0x56, 0x30, 0x34, 0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, | ||
| 229 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 230 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, | ||
| 231 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, | ||
| 232 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 233 | 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 234 | 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 235 | 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 236 | 0x34, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 237 | 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, | ||
| 238 | 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, | ||
| 239 | 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, | ||
| 240 | 0x44, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 241 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 242 | 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 243 | 0x01, 0x00, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 244 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 245 | 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x42, 0x00, | ||
| 246 | 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 247 | 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, | ||
| 248 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, | ||
| 249 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x03, | ||
| 250 | 0x03, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, | ||
| 251 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 252 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 253 | 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 254 | 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x90, 0x06, 0x00, 0x00, | ||
| 255 | 0x60, 0x00, 0x01, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, | ||
| 256 | 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x78, 0x06, 0x00, 0x00, | ||
| 257 | 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x00, | ||
| 258 | 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 259 | 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, | ||
| 260 | 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, | ||
| 261 | 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, | ||
| 262 | 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, | ||
| 263 | 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, | ||
| 264 | 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, | ||
| 265 | 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 266 | 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, | ||
| 267 | 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, | ||
| 268 | 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, | ||
| 269 | 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, | ||
| 270 | 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 271 | 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, | ||
| 272 | 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, | ||
| 273 | 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x6c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, | ||
| 274 | 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, | ||
| 275 | 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, | ||
| 276 | 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, | ||
| 277 | 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, | ||
| 278 | 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, | ||
| 279 | 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, | ||
| 280 | 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x61, | ||
| 281 | 0x04, 0x61, 0xb8, 0xe8, 0x70, 0xa4, 0x69, 0x01, 0x30, 0x87, 0x9a, 0xfc, | ||
| 282 | 0xbf, 0xe6, 0x7f, 0x9b, 0x46, 0x83, 0xad, 0x97, 0x70, 0x32, 0x10, 0x00, | ||
| 283 | 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, | ||
| 284 | 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, | ||
| 285 | 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 286 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 287 | 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 288 | 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, | ||
| 289 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, | ||
| 290 | 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, | ||
| 291 | 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, | ||
| 292 | 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 293 | 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, | ||
| 294 | 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, | ||
| 295 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, | ||
| 296 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, | ||
| 297 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, | ||
| 298 | 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, | ||
| 299 | 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, | ||
| 300 | 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 301 | 0x40, 0x16, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, | ||
| 302 | 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, | ||
| 303 | 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1b, 0x50, 0x04, 0x85, 0x50, 0x06, | ||
| 304 | 0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x1a, 0x05, 0x1a, 0x50, 0x1e, 0x45, | ||
| 305 | 0x51, 0x68, 0x05, 0x41, 0xa5, 0x24, 0x46, 0x00, 0x8a, 0xa0, 0x10, 0xca, | ||
| 306 | 0x80, 0x62, 0x0d, 0x10, 0x9e, 0x01, 0xa0, 0x3c, 0x03, 0x40, 0x7a, 0x2c, | ||
| 307 | 0x46, 0x61, 0x40, 0x7c, 0x00, 0xf1, 0x01, 0x00, 0x02, 0x81, 0x40, 0x20, | ||
| 308 | 0x30, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, | ||
| 309 | 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, | ||
| 310 | 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, | ||
| 311 | 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, | ||
| 312 | 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, | ||
| 313 | 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, | ||
| 314 | 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, | ||
| 315 | 0x08, 0x59, 0x47, 0xe3, 0x2b, 0x06, 0xe7, 0x4b, 0x06, 0x66, 0x82, 0x40, | ||
| 316 | 0x24, 0x1b, 0x10, 0x42, 0x59, 0x06, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, | ||
| 317 | 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x60, 0x1c, 0x8d, 0x2f, 0x19, 0x98, | ||
| 318 | 0xaf, 0x36, 0x98, 0x09, 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30, | ||
| 319 | 0x4d, 0xc3, 0x04, 0x81, 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, | ||
| 320 | 0x09, 0x42, 0xb4, 0x6d, 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e, | ||
| 321 | 0x8c, 0xc6, 0x97, 0x0c, 0xcc, 0x57, 0x5b, 0xcc, 0x04, 0x81, 0x78, 0x26, | ||
| 322 | 0x08, 0x04, 0xb4, 0x01, 0x41, 0xb4, 0x6a, 0xb3, 0x2e, 0x6e, 0xa2, 0xf1, | ||
| 323 | 0x25, 0x03, 0xf3, 0xd5, 0x26, 0x33, 0x41, 0x20, 0xa2, 0x0d, 0x0a, 0xe2, | ||
| 324 | 0x55, 0x9f, 0x75, 0x5d, 0x18, 0x27, 0x6d, 0x20, 0x98, 0xac, 0x03, 0x83, | ||
| 325 | 0x0d, 0x03, 0x01, 0x85, 0xc1, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, | ||
| 326 | 0x82, 0x0c, 0xc8, 0x60, 0x43, 0x50, 0x06, 0x1b, 0x86, 0x61, 0x0c, 0xcc, | ||
| 327 | 0x60, 0x82, 0xa0, 0x79, 0x1b, 0x02, 0x34, 0x20, 0xd1, 0x16, 0x96, 0xe6, | ||
| 328 | 0x46, 0x84, 0xaa, 0x08, 0x6b, 0xe8, 0xe9, 0x49, 0x8a, 0x68, 0x82, 0x50, | ||
| 329 | 0x58, 0x13, 0x84, 0xe2, 0xda, 0x10, 0x10, 0x13, 0x84, 0x02, 0xdb, 0x20, | ||
| 330 | 0x54, 0xd5, 0x86, 0x85, 0x58, 0x03, 0x36, 0x68, 0x03, 0x37, 0x68, 0x83, | ||
| 331 | 0xe1, 0x0d, 0x88, 0x36, 0x80, 0x83, 0x0d, 0xc1, 0x30, 0x41, 0x28, 0xb2, | ||
| 332 | 0x09, 0x02, 0x21, 0x6d, 0x10, 0x2a, 0x3a, 0xd8, 0xb0, 0x0c, 0x6b, 0xc0, | ||
| 333 | 0x06, 0x6d, 0x20, 0x07, 0x6d, 0x30, 0xcc, 0xc1, 0xd0, 0x06, 0x75, 0xb0, | ||
| 334 | 0x21, 0x90, 0x36, 0x2c, 0xd2, 0x1a, 0xb0, 0x41, 0x1b, 0xdc, 0x41, 0x1b, | ||
| 335 | 0x0c, 0x6f, 0x20, 0xb5, 0x01, 0x1c, 0x6c, 0x18, 0xe2, 0xc0, 0x0e, 0xf0, | ||
| 336 | 0x60, 0xc3, 0x42, 0xac, 0x01, 0x1b, 0xb4, 0x81, 0x1b, 0xbc, 0xc1, 0x30, | ||
| 337 | 0x07, 0x44, 0x1b, 0xd4, 0xc1, 0x86, 0x65, 0x58, 0x03, 0x36, 0x68, 0x03, | ||
| 338 | 0x39, 0x78, 0x83, 0xe1, 0x0d, 0x86, 0x36, 0x80, 0x03, 0x2e, 0x53, 0x56, | ||
| 339 | 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x84, 0x42, | ||
| 340 | 0xdb, 0xb0, 0x48, 0x7c, 0xc0, 0x06, 0x7d, 0xe0, 0x06, 0x73, 0x30, 0xcc, | ||
| 341 | 0x81, 0xd4, 0x06, 0x75, 0xb0, 0x61, 0xd0, 0x83, 0x3d, 0xf0, 0x83, 0x0d, | ||
| 342 | 0x43, 0x1e, 0xfc, 0x01, 0xb0, 0xa1, 0x18, 0x03, 0x35, 0x00, 0x85, 0x07, | ||
| 343 | 0xa0, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x37, 0x41, 0x20, 0x26, 0x16, | ||
| 344 | 0x69, 0x6e, 0x73, 0x74, 0x73, 0x13, 0x04, 0x82, 0xa2, 0x31, 0x97, 0x76, | ||
| 345 | 0xf6, 0xc5, 0x46, 0x36, 0x41, 0x20, 0x2a, 0x1a, 0x73, 0x69, 0x67, 0x5f, | ||
| 346 | 0x73, 0x74, 0x1b, 0x10, 0x51, 0x18, 0x05, 0x52, 0x28, 0x05, 0x53, 0x38, | ||
| 347 | 0x05, 0x54, 0x18, 0x85, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64, | ||
| 348 | 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, | ||
| 349 | 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, | ||
| 350 | 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x28, 0xea, 0x90, 0xe1, 0xb9, | ||
| 351 | 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d, | ||
| 352 | 0x09, 0x90, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, | ||
| 353 | 0x63, 0x65, 0x73, 0x53, 0x02, 0xa7, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, | ||
| 354 | 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, | ||
| 355 | 0xdc, 0x14, 0x21, 0x0c, 0xcc, 0xa0, 0x0e, 0x19, 0x9e, 0x8b, 0x5d, 0x5a, | ||
| 356 | 0xd9, 0x5d, 0x12, 0xd9, 0x14, 0x5d, 0x18, 0x5d, 0xd9, 0x94, 0x00, 0x0d, | ||
| 357 | 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, | ||
| 358 | 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0x40, 0xa1, 0x0b, 0x19, 0x9e, 0xcb, 0xd8, | ||
| 359 | 0x5b, 0x9d, 0x1b, 0x5d, 0x99, 0xdc, 0xdc, 0x94, 0x00, 0x15, 0x00, 0x00, | ||
| 360 | 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, | ||
| 361 | 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, | ||
| 362 | 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, | ||
| 363 | 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, | ||
| 364 | 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, | ||
| 365 | 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, | ||
| 366 | 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, | ||
| 367 | 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, | ||
| 368 | 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, | ||
| 369 | 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, | ||
| 370 | 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, | ||
| 371 | 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, | ||
| 372 | 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, | ||
| 373 | 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, | ||
| 374 | 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, | ||
| 375 | 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, | ||
| 376 | 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, | ||
| 377 | 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, | ||
| 378 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, | ||
| 379 | 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, | ||
| 380 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, | ||
| 381 | 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, | ||
| 382 | 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, | ||
| 383 | 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, | ||
| 384 | 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, | ||
| 385 | 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, | ||
| 386 | 0x71, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, | ||
| 387 | 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, | ||
| 388 | 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, | ||
| 389 | 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, | ||
| 390 | 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, | ||
| 391 | 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, | ||
| 392 | 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, | ||
| 393 | 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, | ||
| 394 | 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 395 | 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 396 | 0xc1, 0x0d, 0x07, 0xe0, 0x10, 0x02, 0x07, 0x06, 0x9c, 0xb2, 0x9b, 0x72, | ||
| 397 | 0xa3, 0x5d, 0x05, 0xb6, 0x44, 0x58, 0x49, 0x4c, 0x80, 0x07, 0x00, 0x00, | ||
| 398 | 0x60, 0x00, 0x01, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, | ||
| 399 | 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x68, 0x07, 0x00, 0x00, | ||
| 400 | 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xd7, 0x01, 0x00, 0x00, | ||
| 401 | 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, | ||
| 402 | 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, | ||
| 403 | 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, | ||
| 404 | 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, | ||
| 405 | 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, | ||
| 406 | 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, | ||
| 407 | 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, | ||
| 408 | 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 409 | 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, | ||
| 410 | 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, | ||
| 411 | 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, | ||
| 412 | 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, | ||
| 413 | 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, | ||
| 414 | 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, | ||
| 415 | 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, | ||
| 416 | 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x6c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, | ||
| 417 | 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, | ||
| 418 | 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, | ||
| 419 | 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, | ||
| 420 | 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, | ||
| 421 | 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, | ||
| 422 | 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, | ||
| 423 | 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x61, | ||
| 424 | 0x04, 0x61, 0xb8, 0xe8, 0x70, 0xa4, 0x69, 0x01, 0x30, 0x87, 0x9a, 0xfc, | ||
| 425 | 0xbf, 0xe6, 0x7f, 0x9b, 0x46, 0x83, 0xad, 0x97, 0x70, 0x32, 0x10, 0x00, | ||
| 426 | 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, | ||
| 427 | 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, | ||
| 428 | 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 429 | 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 430 | 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, | ||
| 431 | 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, | ||
| 432 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, | ||
| 433 | 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, | ||
| 434 | 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, | ||
| 435 | 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 436 | 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, | ||
| 437 | 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, | ||
| 438 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, | ||
| 439 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, | ||
| 440 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, | ||
| 441 | 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, | ||
| 442 | 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, | ||
| 443 | 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 444 | 0x40, 0x16, 0x08, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, | ||
| 445 | 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, | ||
| 446 | 0x25, 0x30, 0x02, 0x50, 0x10, 0xc5, 0x50, 0xb0, 0x01, 0x65, 0x50, 0x1e, | ||
| 447 | 0x45, 0x40, 0xa5, 0x24, 0x46, 0x00, 0x8a, 0xa0, 0x10, 0xca, 0x80, 0xf2, | ||
| 448 | 0x0c, 0x00, 0xe9, 0xb1, 0x18, 0x85, 0x01, 0xf1, 0x01, 0xc4, 0x07, 0x00, | ||
| 449 | 0x08, 0x04, 0x02, 0x81, 0xc0, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, | ||
| 450 | 0x5f, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, | ||
| 451 | 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, | ||
| 452 | 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, | ||
| 453 | 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, | ||
| 454 | 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, | ||
| 455 | 0x20, 0x26, 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, 0x73, 0x13, | ||
| 456 | 0x04, 0x22, 0xd9, 0x30, 0x20, 0x09, 0x31, 0x41, 0xc8, 0x26, 0x02, 0x13, | ||
| 457 | 0x04, 0x42, 0xd9, 0x80, 0x10, 0x0b, 0x33, 0x10, 0x43, 0x03, 0x6c, 0x08, | ||
| 458 | 0x9c, 0x0d, 0x04, 0x00, 0x3c, 0xc0, 0x04, 0x41, 0xa3, 0x36, 0x04, 0xd1, | ||
| 459 | 0x04, 0x41, 0x00, 0x48, 0xb4, 0x85, 0xa5, 0xb9, 0x11, 0xa1, 0x2a, 0xc2, | ||
| 460 | 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xce, 0x04, 0xa1, 0x78, | ||
| 461 | 0x36, 0x04, 0xc4, 0x04, 0xa1, 0x80, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xd0, | ||
| 462 | 0xb4, 0x0d, 0x0b, 0x51, 0x59, 0x17, 0x76, 0x0d, 0x19, 0x71, 0x6d, 0x1b, | ||
| 463 | 0x82, 0x61, 0x82, 0x50, 0x44, 0x13, 0x04, 0x82, 0xd9, 0x20, 0x68, 0xdf, | ||
| 464 | 0x86, 0x65, 0xa8, 0xac, 0xab, 0xbb, 0x06, 0x6f, 0xb8, 0xc0, 0x60, 0x82, | ||
| 465 | 0x40, 0x34, 0x1b, 0x02, 0x31, 0xd8, 0xb0, 0x88, 0x41, 0x65, 0x5d, 0x63, | ||
| 466 | 0x70, 0x0d, 0x99, 0x18, 0x5c, 0xdb, 0x86, 0x81, 0x0b, 0x03, 0x32, 0xd8, | ||
| 467 | 0xb0, 0x10, 0x95, 0x75, 0x61, 0xd9, 0xe0, 0x11, 0x17, 0x18, 0x6c, 0x58, | ||
| 468 | 0x86, 0xca, 0xba, 0xba, 0x6c, 0xc8, 0x86, 0x6b, 0xe3, 0x32, 0x65, 0xf5, | ||
| 469 | 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x41, 0x28, 0xa4, | ||
| 470 | 0x0d, 0x8b, 0x18, 0xa0, 0x81, 0x95, 0x06, 0x98, 0x37, 0x78, 0x62, 0x70, | ||
| 471 | 0x81, 0xc1, 0x86, 0xc1, 0x0c, 0xce, 0x40, 0x0d, 0x36, 0x0c, 0x65, 0xb0, | ||
| 472 | 0x06, 0xc0, 0x86, 0x62, 0xa2, 0xd8, 0x00, 0x02, 0xaa, 0xb0, 0xb1, 0xd9, | ||
| 473 | 0xb5, 0xb9, 0xa4, 0x91, 0x95, 0xb9, 0xd1, 0x4d, 0x09, 0x82, 0x2a, 0x64, | ||
| 474 | 0x78, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x02, 0xa2, | ||
| 475 | 0x09, 0x19, 0x9e, 0x8b, 0x5d, 0x18, 0x9b, 0x5d, 0x99, 0xdc, 0x94, 0xc0, | ||
| 476 | 0xa8, 0x43, 0x86, 0xe7, 0x32, 0x87, 0x16, 0x46, 0x56, 0x26, 0xd7, 0xf4, | ||
| 477 | 0x46, 0x56, 0xc6, 0x36, 0x25, 0x48, 0xca, 0x90, 0xe1, 0xb9, 0xc8, 0x95, | ||
| 478 | 0xcd, 0xbd, 0xd5, 0xc9, 0x8d, 0x95, 0xcd, 0x4d, 0x09, 0x9e, 0x3a, 0x64, | ||
| 479 | 0x78, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x53, 0x74, 0x61, 0x74, | ||
| 480 | 0x65, 0x53, 0x82, 0xa8, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, | ||
| 481 | 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0x80, 0x0d, 0x00, 0x00, | ||
| 482 | 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, | ||
| 483 | 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, | ||
| 484 | 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, | ||
| 485 | 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, | ||
| 486 | 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, | ||
| 487 | 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, | ||
| 488 | 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, | ||
| 489 | 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, | ||
| 490 | 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, | ||
| 491 | 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, | ||
| 492 | 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, | ||
| 493 | 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, | ||
| 494 | 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, | ||
| 495 | 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, | ||
| 496 | 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, | ||
| 497 | 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, | ||
| 498 | 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, | ||
| 499 | 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, | ||
| 500 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, | ||
| 501 | 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, | ||
| 502 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, | ||
| 503 | 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, | ||
| 504 | 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, | ||
| 505 | 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, | ||
| 506 | 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, | ||
| 507 | 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, | ||
| 508 | 0x71, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, | ||
| 509 | 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, | ||
| 510 | 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, | ||
| 511 | 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, | ||
| 512 | 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, | ||
| 513 | 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, | ||
| 514 | 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, | ||
| 515 | 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, | ||
| 516 | 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, | ||
| 517 | 0x79, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, | ||
| 518 | 0x05, 0x00, 0x00, 0x00, 0x44, 0x4a, 0xa1, 0x10, 0x66, 0x00, 0xca, 0xae, | ||
| 519 | 0xb8, 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 520 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x61, 0x43, 0x63, 0x59, 0xc1, | ||
| 521 | 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x1d, 0x12, 0x5d, 0xcf, 0x31, | ||
| 522 | 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x97, 0x48, 0x18, 0x81, 0x8c, | ||
| 523 | 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xf1, 0x29, 0x5a, 0x16, 0x25, 0x23, | ||
| 524 | 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x80, 0xc1, 0xb2, 0x69, 0x86, 0x32, | ||
| 525 | 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x18, 0x30, 0xdc, 0x26, 0x2d, | ||
| 526 | 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x88, 0x41, 0xd3, 0x71, 0x11, | ||
| 527 | 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x18, 0x38, 0x5d, 0x57, | ||
| 528 | 0x35, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x90, 0xc1, 0xe3, 0x79, | ||
| 529 | 0x8a, 0x33, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0xcd, 0x18, 0x38, 0xc9, | ||
| 530 | 0x37, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, | ||
| 531 | 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x0d, 0x1a, 0x4c, | ||
| 532 | 0x4e, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, | ||
| 533 | 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xd3, | ||
| 534 | 0x06, 0xd8, 0x54, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, | ||
| 535 | 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0xe6, 0x44, 0xf2, 0x19, 0x31, 0x40, | ||
| 536 | 0x00, 0x10, 0x04, 0x83, 0x47, 0x0e, 0xba, 0x48, 0x09, 0xcc, 0x08, 0xa0, | ||
| 537 | 0x63, 0x10, 0x25, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xea, | ||
| 538 | 0x00, 0x0c, 0x28, 0x26, 0xb0, 0x00, 0x81, 0x8e, 0x49, 0x97, 0x7c, 0x46, | ||
| 539 | 0x0c, 0x10, 0x00, 0x04, 0xc1, 0xe0, 0xc1, 0x83, 0x31, 0xb8, 0x9c, 0xc0, | ||
| 540 | 0x02, 0x05, 0x3a, 0x46, 0x69, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, | ||
| 541 | 0x83, 0x67, 0x0f, 0xcc, 0x40, 0x83, 0x02, 0x0b, 0x18, 0xe8, 0x8c, 0x18, | ||
| 542 | 0x1c, 0x00, 0x08, 0x82, 0x41, 0xe3, 0x07, 0x69, 0x40, 0x06, 0x6c, 0x30, | ||
| 543 | 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x60, 0x66, 0x20, 0xd0, 0xc7, 0xcc, | ||
| 544 | 0x40, 0xa0, 0xcf, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xa4, 0x10, | ||
| 545 | 0x07, 0x7f, 0xf0, 0x07, 0x77, 0x60, 0x06, 0x23, 0x06, 0x09, 0x00, 0x82, | ||
| 546 | 0x60, 0x80, 0x90, 0x42, 0x1c, 0xfc, 0xc1, 0x1f, 0xac, 0x41, 0x19, 0x8c, | ||
| 547 | 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x42, 0x0a, 0x71, 0xf0, 0x07, 0x7f, | ||
| 548 | 0x60, 0x07, 0x64, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0x29, | ||
| 549 | 0xc4, 0xc1, 0x1f, 0xfc, 0x01, 0x1d, 0x8c, 0xc1, 0x88, 0x41, 0x02, 0x80, | ||
| 550 | 0x20, 0x18, 0x20, 0xa4, 0x10, 0x07, 0xa0, 0xf0, 0x07, 0x77, 0x20, 0x8c, | ||
| 551 | 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x42, 0x0a, 0x71, 0x00, 0x0a, 0x7f, | ||
| 552 | 0xb0, 0x06, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xa4, 0x10, | ||
| 553 | 0x07, 0x79, 0xf0, 0x07, 0x77, 0xf0, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, | ||
| 554 | 0x01, 0x42, 0x0a, 0x71, 0x90, 0x07, 0x7f, 0xb0, 0x06, 0xcc, 0x88, 0x41, | ||
| 555 | 0x02, 0x80, 0x20, 0x18, 0x20, 0xa4, 0x10, 0x07, 0x79, 0xf0, 0x07, 0x76, | ||
| 556 | 0x90, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x42, 0x0a, 0x71, 0x90, | ||
| 557 | 0x07, 0x7f, 0x40, 0x07, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 558 | }; | ||
diff --git a/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.spv.h b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.spv.h new file mode 100644 index 0000000..862dc79 --- /dev/null +++ b/SDL-3.2.8/src/render/gpu/shaders/tri_texture.vert.spv.h | |||
| @@ -0,0 +1,106 @@ | |||
| 1 | static const unsigned char tri_texture_vert_spv[] = { | ||
| 2 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, | ||
| 3 | 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, | ||
| 4 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 5 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, | ||
| 6 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 7 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, | ||
| 9 | 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, | ||
| 10 | 0x25, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, | ||
| 11 | 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 12 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, | ||
| 13 | 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 14 | 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
| 15 | 0x02, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 16 | 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 17 | 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, | ||
| 18 | 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, | ||
| 19 | 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 20 | 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 21 | 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, | ||
| 22 | 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 23 | 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 24 | 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 25 | 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 26 | 0x23, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, | ||
| 27 | 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 28 | 0x14, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 29 | 0x47, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, | ||
| 30 | 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, | ||
| 31 | 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 32 | 0x23, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 33 | 0x47, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, | ||
| 34 | 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, | ||
| 35 | 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, | ||
| 36 | 0x29, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 37 | 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, | ||
| 38 | 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, | ||
| 39 | 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, | ||
| 40 | 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 41 | 0x15, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, | ||
| 42 | 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 43 | 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, | ||
| 44 | 0x0a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 45 | 0x1e, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 46 | 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 47 | 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 48 | 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 49 | 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, | ||
| 50 | 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 51 | 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 52 | 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 53 | 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, | ||
| 54 | 0x11, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 55 | 0x1e, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 56 | 0x07, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 57 | 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 58 | 0x3b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
| 59 | 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, | ||
| 60 | 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 61 | 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 62 | 0x3b, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, | ||
| 63 | 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 64 | 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, | ||
| 65 | 0x06, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, | ||
| 66 | 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 67 | 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, | ||
| 68 | 0x23, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 69 | 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 70 | 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, | ||
| 71 | 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, | ||
| 72 | 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, | ||
| 73 | 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 74 | 0x3b, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, | ||
| 75 | 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, | ||
| 76 | 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, | ||
| 77 | 0x2c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 78 | 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 79 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, | ||
| 80 | 0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, | ||
| 81 | 0x16, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, | ||
| 82 | 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, | ||
| 83 | 0x16, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 84 | 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, | ||
| 85 | 0x06, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, | ||
| 86 | 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
| 87 | 0x1e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 88 | 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, | ||
| 89 | 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, | ||
| 90 | 0x1c, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
| 91 | 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, | ||
| 92 | 0x41, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, | ||
| 93 | 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, | ||
| 94 | 0x22, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, | ||
| 95 | 0x07, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, | ||
| 96 | 0x3e, 0x00, 0x03, 0x00, 0x23, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, | ||
| 97 | 0x3d, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, | ||
| 98 | 0x29, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x00, 0x00, | ||
| 99 | 0x2d, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, | ||
| 100 | 0x3d, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, | ||
| 101 | 0x2d, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, | ||
| 102 | 0x2f, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, | ||
| 103 | 0x3e, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, | ||
| 104 | 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 | ||
| 105 | }; | ||
| 106 | static const unsigned int tri_texture_vert_spv_len = 1232; | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_render_metal.m b/SDL-3.2.8/src/render/metal/SDL_render_metal.m new file mode 100644 index 0000000..63d9770 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_render_metal.m | |||
| @@ -0,0 +1,2196 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_METAL | ||
| 24 | |||
| 25 | #include "../SDL_sysrender.h" | ||
| 26 | #include "../../video/SDL_pixels_c.h" | ||
| 27 | |||
| 28 | #import <CoreVideo/CoreVideo.h> | ||
| 29 | #import <Metal/Metal.h> | ||
| 30 | #import <QuartzCore/CAMetalLayer.h> | ||
| 31 | |||
| 32 | #ifdef SDL_VIDEO_DRIVER_COCOA | ||
| 33 | #import <AppKit/NSWindow.h> | ||
| 34 | #import <AppKit/NSView.h> | ||
| 35 | #endif | ||
| 36 | #ifdef SDL_VIDEO_DRIVER_UIKIT | ||
| 37 | #import <UIKit/UIKit.h> | ||
| 38 | #endif | ||
| 39 | |||
| 40 | // Regenerate these with build-metal-shaders.sh | ||
| 41 | #ifdef SDL_PLATFORM_MACOS | ||
| 42 | #include "SDL_shaders_metal_macos.h" | ||
| 43 | #elif defined(SDL_PLATFORM_TVOS) | ||
| 44 | #if TARGET_OS_SIMULATOR | ||
| 45 | #include "SDL_shaders_metal_tvsimulator.h" | ||
| 46 | #else | ||
| 47 | #include "SDL_shaders_metal_tvos.h" | ||
| 48 | #endif | ||
| 49 | #else | ||
| 50 | #if TARGET_OS_SIMULATOR | ||
| 51 | #include "SDL_shaders_metal_iphonesimulator.h" | ||
| 52 | #else | ||
| 53 | #include "SDL_shaders_metal_ios.h" | ||
| 54 | #endif | ||
| 55 | #endif | ||
| 56 | |||
| 57 | // Apple Metal renderer implementation | ||
| 58 | |||
| 59 | // macOS requires constants in a buffer to have a 256 byte alignment. | ||
| 60 | // Use native type alignments from https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf | ||
| 61 | #if defined(SDL_PLATFORM_MACOS) || TARGET_OS_SIMULATOR || TARGET_OS_MACCATALYST | ||
| 62 | #define CONSTANT_ALIGN(x) (256) | ||
| 63 | #else | ||
| 64 | #define CONSTANT_ALIGN(x) (x < 4 ? 4 : x) | ||
| 65 | #endif | ||
| 66 | |||
| 67 | #define DEVICE_ALIGN(x) (x < 4 ? 4 : x) | ||
| 68 | |||
| 69 | #define ALIGN_CONSTANTS(align, size) ((size + CONSTANT_ALIGN(align) - 1) & (~(CONSTANT_ALIGN(align) - 1))) | ||
| 70 | |||
| 71 | static const size_t CONSTANTS_OFFSET_INVALID = 0xFFFFFFFF; | ||
| 72 | static const size_t CONSTANTS_OFFSET_IDENTITY = 0; | ||
| 73 | static const size_t CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_IDENTITY + sizeof(float) * 16); | ||
| 74 | static const size_t CONSTANTS_OFFSET_DECODE_BT601_LIMITED = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM + sizeof(float) * 16); | ||
| 75 | static const size_t CONSTANTS_OFFSET_DECODE_BT601_FULL = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_BT601_LIMITED + sizeof(float) * 4 * 4); | ||
| 76 | static const size_t CONSTANTS_OFFSET_DECODE_BT709_LIMITED = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_BT601_FULL + sizeof(float) * 4 * 4); | ||
| 77 | static const size_t CONSTANTS_OFFSET_DECODE_BT709_FULL = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_BT709_LIMITED + sizeof(float) * 4 * 4); | ||
| 78 | static const size_t CONSTANTS_OFFSET_DECODE_BT2020_LIMITED = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_BT709_FULL + sizeof(float) * 4 * 4); | ||
| 79 | static const size_t CONSTANTS_OFFSET_DECODE_BT2020_FULL = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_BT2020_LIMITED + sizeof(float) * 4 * 4); | ||
| 80 | static const size_t CONSTANTS_LENGTH = CONSTANTS_OFFSET_DECODE_BT2020_FULL + sizeof(float) * 4 * 4; | ||
| 81 | |||
| 82 | // Sampler types | ||
| 83 | typedef enum | ||
| 84 | { | ||
| 85 | SDL_METAL_SAMPLER_NEAREST_CLAMP, | ||
| 86 | SDL_METAL_SAMPLER_NEAREST_WRAP, | ||
| 87 | SDL_METAL_SAMPLER_LINEAR_CLAMP, | ||
| 88 | SDL_METAL_SAMPLER_LINEAR_WRAP, | ||
| 89 | SDL_NUM_METAL_SAMPLERS | ||
| 90 | } SDL_METAL_sampler_type; | ||
| 91 | |||
| 92 | typedef enum SDL_MetalVertexFunction | ||
| 93 | { | ||
| 94 | SDL_METAL_VERTEX_SOLID, | ||
| 95 | SDL_METAL_VERTEX_COPY, | ||
| 96 | } SDL_MetalVertexFunction; | ||
| 97 | |||
| 98 | typedef enum SDL_MetalFragmentFunction | ||
| 99 | { | ||
| 100 | SDL_METAL_FRAGMENT_SOLID = 0, | ||
| 101 | SDL_METAL_FRAGMENT_COPY, | ||
| 102 | SDL_METAL_FRAGMENT_YUV, | ||
| 103 | SDL_METAL_FRAGMENT_NV12, | ||
| 104 | SDL_METAL_FRAGMENT_COUNT, | ||
| 105 | } SDL_MetalFragmentFunction; | ||
| 106 | |||
| 107 | typedef struct METAL_PipelineState | ||
| 108 | { | ||
| 109 | SDL_BlendMode blendMode; | ||
| 110 | void *pipe; | ||
| 111 | } METAL_PipelineState; | ||
| 112 | |||
| 113 | typedef struct METAL_PipelineCache | ||
| 114 | { | ||
| 115 | METAL_PipelineState *states; | ||
| 116 | int count; | ||
| 117 | SDL_MetalVertexFunction vertexFunction; | ||
| 118 | SDL_MetalFragmentFunction fragmentFunction; | ||
| 119 | MTLPixelFormat renderTargetFormat; | ||
| 120 | const char *label; | ||
| 121 | } METAL_PipelineCache; | ||
| 122 | |||
| 123 | /* Each shader combination used by drawing functions has a separate pipeline | ||
| 124 | * cache, and we have a separate list of caches for each render target pixel | ||
| 125 | * format. This is more efficient than iterating over a global cache to find | ||
| 126 | * the pipeline based on the specified shader combination and RT pixel format, | ||
| 127 | * since we know what the RT pixel format is when we set the render target, and | ||
| 128 | * we know what the shader combination is inside each drawing function's code. */ | ||
| 129 | typedef struct METAL_ShaderPipelines | ||
| 130 | { | ||
| 131 | MTLPixelFormat renderTargetFormat; | ||
| 132 | METAL_PipelineCache caches[SDL_METAL_FRAGMENT_COUNT]; | ||
| 133 | } METAL_ShaderPipelines; | ||
| 134 | |||
| 135 | @interface SDL3METAL_RenderData : NSObject | ||
| 136 | @property(nonatomic, retain) id<MTLDevice> mtldevice; | ||
| 137 | @property(nonatomic, retain) id<MTLCommandQueue> mtlcmdqueue; | ||
| 138 | @property(nonatomic, retain) id<MTLCommandBuffer> mtlcmdbuffer; | ||
| 139 | @property(nonatomic, retain) id<MTLRenderCommandEncoder> mtlcmdencoder; | ||
| 140 | @property(nonatomic, retain) id<MTLLibrary> mtllibrary; | ||
| 141 | @property(nonatomic, retain) id<CAMetalDrawable> mtlbackbuffer; | ||
| 142 | @property(nonatomic, retain) NSMutableArray<id<MTLSamplerState>> *mtlsamplers; | ||
| 143 | @property(nonatomic, retain) id<MTLBuffer> mtlbufconstants; | ||
| 144 | @property(nonatomic, retain) id<MTLBuffer> mtlbufquadindices; | ||
| 145 | @property(nonatomic, assign) SDL_MetalView mtlview; | ||
| 146 | @property(nonatomic, retain) CAMetalLayer *mtllayer; | ||
| 147 | @property(nonatomic, retain) MTLRenderPassDescriptor *mtlpassdesc; | ||
| 148 | @property(nonatomic, assign) METAL_ShaderPipelines *activepipelines; | ||
| 149 | @property(nonatomic, assign) METAL_ShaderPipelines *allpipelines; | ||
| 150 | @property(nonatomic, assign) int pipelinescount; | ||
| 151 | @end | ||
| 152 | |||
| 153 | @implementation SDL3METAL_RenderData | ||
| 154 | @end | ||
| 155 | |||
| 156 | @interface SDL3METAL_TextureData : NSObject | ||
| 157 | @property(nonatomic, retain) id<MTLTexture> mtltexture; | ||
| 158 | @property(nonatomic, retain) id<MTLTexture> mtltextureUv; | ||
| 159 | @property(nonatomic, assign) SDL_MetalFragmentFunction fragmentFunction; | ||
| 160 | #ifdef SDL_HAVE_YUV | ||
| 161 | @property(nonatomic, assign) BOOL yuv; | ||
| 162 | @property(nonatomic, assign) BOOL nv12; | ||
| 163 | @property(nonatomic, assign) size_t conversionBufferOffset; | ||
| 164 | #endif | ||
| 165 | @property(nonatomic, assign) BOOL hasdata; | ||
| 166 | @property(nonatomic, retain) id<MTLBuffer> lockedbuffer; | ||
| 167 | @property(nonatomic, assign) SDL_Rect lockedrect; | ||
| 168 | @end | ||
| 169 | |||
| 170 | @implementation SDL3METAL_TextureData | ||
| 171 | @end | ||
| 172 | |||
| 173 | static const MTLBlendOperation invalidBlendOperation = (MTLBlendOperation)0xFFFFFFFF; | ||
| 174 | static const MTLBlendFactor invalidBlendFactor = (MTLBlendFactor)0xFFFFFFFF; | ||
| 175 | |||
| 176 | static MTLBlendOperation GetBlendOperation(SDL_BlendOperation operation) | ||
| 177 | { | ||
| 178 | switch (operation) { | ||
| 179 | case SDL_BLENDOPERATION_ADD: | ||
| 180 | return MTLBlendOperationAdd; | ||
| 181 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 182 | return MTLBlendOperationSubtract; | ||
| 183 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 184 | return MTLBlendOperationReverseSubtract; | ||
| 185 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 186 | return MTLBlendOperationMin; | ||
| 187 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 188 | return MTLBlendOperationMax; | ||
| 189 | default: | ||
| 190 | return invalidBlendOperation; | ||
| 191 | } | ||
| 192 | } | ||
| 193 | |||
| 194 | static MTLBlendFactor GetBlendFactor(SDL_BlendFactor factor) | ||
| 195 | { | ||
| 196 | switch (factor) { | ||
| 197 | case SDL_BLENDFACTOR_ZERO: | ||
| 198 | return MTLBlendFactorZero; | ||
| 199 | case SDL_BLENDFACTOR_ONE: | ||
| 200 | return MTLBlendFactorOne; | ||
| 201 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 202 | return MTLBlendFactorSourceColor; | ||
| 203 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 204 | return MTLBlendFactorOneMinusSourceColor; | ||
| 205 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 206 | return MTLBlendFactorSourceAlpha; | ||
| 207 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 208 | return MTLBlendFactorOneMinusSourceAlpha; | ||
| 209 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 210 | return MTLBlendFactorDestinationColor; | ||
| 211 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 212 | return MTLBlendFactorOneMinusDestinationColor; | ||
| 213 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 214 | return MTLBlendFactorDestinationAlpha; | ||
| 215 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 216 | return MTLBlendFactorOneMinusDestinationAlpha; | ||
| 217 | default: | ||
| 218 | return invalidBlendFactor; | ||
| 219 | } | ||
| 220 | } | ||
| 221 | |||
| 222 | static NSString *GetVertexFunctionName(SDL_MetalVertexFunction function) | ||
| 223 | { | ||
| 224 | switch (function) { | ||
| 225 | case SDL_METAL_VERTEX_SOLID: | ||
| 226 | return @"SDL_Solid_vertex"; | ||
| 227 | case SDL_METAL_VERTEX_COPY: | ||
| 228 | return @"SDL_Copy_vertex"; | ||
| 229 | default: | ||
| 230 | return nil; | ||
| 231 | } | ||
| 232 | } | ||
| 233 | |||
| 234 | static NSString *GetFragmentFunctionName(SDL_MetalFragmentFunction function) | ||
| 235 | { | ||
| 236 | switch (function) { | ||
| 237 | case SDL_METAL_FRAGMENT_SOLID: | ||
| 238 | return @"SDL_Solid_fragment"; | ||
| 239 | case SDL_METAL_FRAGMENT_COPY: | ||
| 240 | return @"SDL_Copy_fragment"; | ||
| 241 | case SDL_METAL_FRAGMENT_YUV: | ||
| 242 | return @"SDL_YUV_fragment"; | ||
| 243 | case SDL_METAL_FRAGMENT_NV12: | ||
| 244 | return @"SDL_NV12_fragment"; | ||
| 245 | default: | ||
| 246 | return nil; | ||
| 247 | } | ||
| 248 | } | ||
| 249 | |||
| 250 | static id<MTLRenderPipelineState> MakePipelineState(SDL3METAL_RenderData *data, METAL_PipelineCache *cache, | ||
| 251 | NSString *blendlabel, SDL_BlendMode blendmode) | ||
| 252 | { | ||
| 253 | MTLRenderPipelineDescriptor *mtlpipedesc; | ||
| 254 | MTLVertexDescriptor *vertdesc; | ||
| 255 | MTLRenderPipelineColorAttachmentDescriptor *rtdesc; | ||
| 256 | NSError *err = nil; | ||
| 257 | id<MTLRenderPipelineState> state; | ||
| 258 | METAL_PipelineState pipeline; | ||
| 259 | METAL_PipelineState *states; | ||
| 260 | |||
| 261 | id<MTLFunction> mtlvertfn = [data.mtllibrary newFunctionWithName:GetVertexFunctionName(cache->vertexFunction)]; | ||
| 262 | id<MTLFunction> mtlfragfn = [data.mtllibrary newFunctionWithName:GetFragmentFunctionName(cache->fragmentFunction)]; | ||
| 263 | SDL_assert(mtlvertfn != nil); | ||
| 264 | SDL_assert(mtlfragfn != nil); | ||
| 265 | |||
| 266 | mtlpipedesc = [[MTLRenderPipelineDescriptor alloc] init]; | ||
| 267 | mtlpipedesc.vertexFunction = mtlvertfn; | ||
| 268 | mtlpipedesc.fragmentFunction = mtlfragfn; | ||
| 269 | |||
| 270 | vertdesc = [MTLVertexDescriptor vertexDescriptor]; | ||
| 271 | |||
| 272 | switch (cache->vertexFunction) { | ||
| 273 | case SDL_METAL_VERTEX_SOLID: | ||
| 274 | // position (float2), color (float4) | ||
| 275 | vertdesc.layouts[0].stride = sizeof(float) * 2 + sizeof(float) * 4; | ||
| 276 | vertdesc.layouts[0].stepFunction = MTLVertexStepFunctionPerVertex; | ||
| 277 | |||
| 278 | vertdesc.attributes[0].format = MTLVertexFormatFloat2; | ||
| 279 | vertdesc.attributes[0].offset = 0; | ||
| 280 | vertdesc.attributes[0].bufferIndex = 0; | ||
| 281 | |||
| 282 | vertdesc.attributes[1].format = MTLVertexFormatFloat4; | ||
| 283 | vertdesc.attributes[1].offset = sizeof(float) * 2; | ||
| 284 | vertdesc.attributes[1].bufferIndex = 0; | ||
| 285 | |||
| 286 | break; | ||
| 287 | case SDL_METAL_VERTEX_COPY: | ||
| 288 | // position (float2), color (float4), texcoord (float2) | ||
| 289 | vertdesc.layouts[0].stride = sizeof(float) * 2 + sizeof(float) * 4 + sizeof(float) * 2; | ||
| 290 | vertdesc.layouts[0].stepFunction = MTLVertexStepFunctionPerVertex; | ||
| 291 | |||
| 292 | vertdesc.attributes[0].format = MTLVertexFormatFloat2; | ||
| 293 | vertdesc.attributes[0].offset = 0; | ||
| 294 | vertdesc.attributes[0].bufferIndex = 0; | ||
| 295 | |||
| 296 | vertdesc.attributes[1].format = MTLVertexFormatFloat4; | ||
| 297 | vertdesc.attributes[1].offset = sizeof(float) * 2; | ||
| 298 | vertdesc.attributes[1].bufferIndex = 0; | ||
| 299 | |||
| 300 | vertdesc.attributes[2].format = MTLVertexFormatFloat2; | ||
| 301 | vertdesc.attributes[2].offset = sizeof(float) * 2 + sizeof(float) * 4; | ||
| 302 | vertdesc.attributes[2].bufferIndex = 0; | ||
| 303 | break; | ||
| 304 | } | ||
| 305 | |||
| 306 | mtlpipedesc.vertexDescriptor = vertdesc; | ||
| 307 | |||
| 308 | rtdesc = mtlpipedesc.colorAttachments[0]; | ||
| 309 | rtdesc.pixelFormat = cache->renderTargetFormat; | ||
| 310 | |||
| 311 | if (blendmode != SDL_BLENDMODE_NONE) { | ||
| 312 | rtdesc.blendingEnabled = YES; | ||
| 313 | rtdesc.sourceRGBBlendFactor = GetBlendFactor(SDL_GetBlendModeSrcColorFactor(blendmode)); | ||
| 314 | rtdesc.destinationRGBBlendFactor = GetBlendFactor(SDL_GetBlendModeDstColorFactor(blendmode)); | ||
| 315 | rtdesc.rgbBlendOperation = GetBlendOperation(SDL_GetBlendModeColorOperation(blendmode)); | ||
| 316 | rtdesc.sourceAlphaBlendFactor = GetBlendFactor(SDL_GetBlendModeSrcAlphaFactor(blendmode)); | ||
| 317 | rtdesc.destinationAlphaBlendFactor = GetBlendFactor(SDL_GetBlendModeDstAlphaFactor(blendmode)); | ||
| 318 | rtdesc.alphaBlendOperation = GetBlendOperation(SDL_GetBlendModeAlphaOperation(blendmode)); | ||
| 319 | } else { | ||
| 320 | rtdesc.blendingEnabled = NO; | ||
| 321 | } | ||
| 322 | |||
| 323 | mtlpipedesc.label = [@(cache->label) stringByAppendingString:blendlabel]; | ||
| 324 | |||
| 325 | state = [data.mtldevice newRenderPipelineStateWithDescriptor:mtlpipedesc error:&err]; | ||
| 326 | SDL_assert(err == nil); | ||
| 327 | |||
| 328 | pipeline.blendMode = blendmode; | ||
| 329 | pipeline.pipe = (void *)CFBridgingRetain(state); | ||
| 330 | |||
| 331 | states = SDL_realloc(cache->states, (cache->count + 1) * sizeof(pipeline)); | ||
| 332 | |||
| 333 | if (states) { | ||
| 334 | states[cache->count++] = pipeline; | ||
| 335 | cache->states = states; | ||
| 336 | return (__bridge id<MTLRenderPipelineState>)pipeline.pipe; | ||
| 337 | } else { | ||
| 338 | CFBridgingRelease(pipeline.pipe); | ||
| 339 | return NULL; | ||
| 340 | } | ||
| 341 | } | ||
| 342 | |||
| 343 | static void MakePipelineCache(SDL3METAL_RenderData *data, METAL_PipelineCache *cache, const char *label, | ||
| 344 | MTLPixelFormat rtformat, SDL_MetalVertexFunction vertfn, SDL_MetalFragmentFunction fragfn) | ||
| 345 | { | ||
| 346 | SDL_zerop(cache); | ||
| 347 | |||
| 348 | cache->vertexFunction = vertfn; | ||
| 349 | cache->fragmentFunction = fragfn; | ||
| 350 | cache->renderTargetFormat = rtformat; | ||
| 351 | cache->label = label; | ||
| 352 | |||
| 353 | /* Create pipeline states for the default blend modes. Custom blend modes | ||
| 354 | * will be added to the cache on-demand. */ | ||
| 355 | MakePipelineState(data, cache, @" (blend=none)", SDL_BLENDMODE_NONE); | ||
| 356 | MakePipelineState(data, cache, @" (blend=blend)", SDL_BLENDMODE_BLEND); | ||
| 357 | MakePipelineState(data, cache, @" (blend=add)", SDL_BLENDMODE_ADD); | ||
| 358 | MakePipelineState(data, cache, @" (blend=mod)", SDL_BLENDMODE_MOD); | ||
| 359 | MakePipelineState(data, cache, @" (blend=mul)", SDL_BLENDMODE_MUL); | ||
| 360 | } | ||
| 361 | |||
| 362 | static void DestroyPipelineCache(METAL_PipelineCache *cache) | ||
| 363 | { | ||
| 364 | if (cache != NULL) { | ||
| 365 | for (int i = 0; i < cache->count; i++) { | ||
| 366 | CFBridgingRelease(cache->states[i].pipe); | ||
| 367 | } | ||
| 368 | |||
| 369 | SDL_free(cache->states); | ||
| 370 | } | ||
| 371 | } | ||
| 372 | |||
| 373 | void MakeShaderPipelines(SDL3METAL_RenderData *data, METAL_ShaderPipelines *pipelines, MTLPixelFormat rtformat) | ||
| 374 | { | ||
| 375 | SDL_zerop(pipelines); | ||
| 376 | |||
| 377 | pipelines->renderTargetFormat = rtformat; | ||
| 378 | |||
| 379 | MakePipelineCache(data, &pipelines->caches[SDL_METAL_FRAGMENT_SOLID], "SDL primitives pipeline", rtformat, SDL_METAL_VERTEX_SOLID, SDL_METAL_FRAGMENT_SOLID); | ||
| 380 | MakePipelineCache(data, &pipelines->caches[SDL_METAL_FRAGMENT_COPY], "SDL copy pipeline", rtformat, SDL_METAL_VERTEX_COPY, SDL_METAL_FRAGMENT_COPY); | ||
| 381 | MakePipelineCache(data, &pipelines->caches[SDL_METAL_FRAGMENT_YUV], "SDL YUV pipeline", rtformat, SDL_METAL_VERTEX_COPY, SDL_METAL_FRAGMENT_YUV); | ||
| 382 | MakePipelineCache(data, &pipelines->caches[SDL_METAL_FRAGMENT_NV12], "SDL NV12 pipeline", rtformat, SDL_METAL_VERTEX_COPY, SDL_METAL_FRAGMENT_NV12); | ||
| 383 | } | ||
| 384 | |||
| 385 | static METAL_ShaderPipelines *ChooseShaderPipelines(SDL3METAL_RenderData *data, MTLPixelFormat rtformat) | ||
| 386 | { | ||
| 387 | METAL_ShaderPipelines *allpipelines = data.allpipelines; | ||
| 388 | int count = data.pipelinescount; | ||
| 389 | |||
| 390 | for (int i = 0; i < count; i++) { | ||
| 391 | if (allpipelines[i].renderTargetFormat == rtformat) { | ||
| 392 | return &allpipelines[i]; | ||
| 393 | } | ||
| 394 | } | ||
| 395 | |||
| 396 | allpipelines = SDL_realloc(allpipelines, (count + 1) * sizeof(METAL_ShaderPipelines)); | ||
| 397 | |||
| 398 | if (allpipelines == NULL) { | ||
| 399 | return NULL; | ||
| 400 | } | ||
| 401 | |||
| 402 | MakeShaderPipelines(data, &allpipelines[count], rtformat); | ||
| 403 | |||
| 404 | data.allpipelines = allpipelines; | ||
| 405 | data.pipelinescount = count + 1; | ||
| 406 | |||
| 407 | return &data.allpipelines[count]; | ||
| 408 | } | ||
| 409 | |||
| 410 | static void DestroyAllPipelines(METAL_ShaderPipelines *allpipelines, int count) | ||
| 411 | { | ||
| 412 | if (allpipelines != NULL) { | ||
| 413 | for (int i = 0; i < count; i++) { | ||
| 414 | for (int cache = 0; cache < SDL_METAL_FRAGMENT_COUNT; cache++) { | ||
| 415 | DestroyPipelineCache(&allpipelines[i].caches[cache]); | ||
| 416 | } | ||
| 417 | } | ||
| 418 | |||
| 419 | SDL_free(allpipelines); | ||
| 420 | } | ||
| 421 | } | ||
| 422 | |||
| 423 | static inline id<MTLRenderPipelineState> ChoosePipelineState(SDL3METAL_RenderData *data, METAL_ShaderPipelines *pipelines, SDL_MetalFragmentFunction fragfn, SDL_BlendMode blendmode) | ||
| 424 | { | ||
| 425 | METAL_PipelineCache *cache = &pipelines->caches[fragfn]; | ||
| 426 | |||
| 427 | for (int i = 0; i < cache->count; i++) { | ||
| 428 | if (cache->states[i].blendMode == blendmode) { | ||
| 429 | return (__bridge id<MTLRenderPipelineState>)cache->states[i].pipe; | ||
| 430 | } | ||
| 431 | } | ||
| 432 | |||
| 433 | return MakePipelineState(data, cache, [NSString stringWithFormat:@" (blend=custom 0x%x)", blendmode], blendmode); | ||
| 434 | } | ||
| 435 | |||
| 436 | static bool METAL_ActivateRenderCommandEncoder(SDL_Renderer *renderer, MTLLoadAction load, MTLClearColor *clear_color, id<MTLBuffer> vertex_buffer) | ||
| 437 | { | ||
| 438 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 439 | |||
| 440 | /* Our SetRenderTarget just signals that the next render operation should | ||
| 441 | * set up a new render pass. This is where that work happens. */ | ||
| 442 | if (data.mtlcmdencoder == nil) { | ||
| 443 | id<MTLTexture> mtltexture = nil; | ||
| 444 | |||
| 445 | if (renderer->target != NULL) { | ||
| 446 | SDL3METAL_TextureData *texdata = (__bridge SDL3METAL_TextureData *)renderer->target->internal; | ||
| 447 | mtltexture = texdata.mtltexture; | ||
| 448 | } else { | ||
| 449 | if (data.mtlbackbuffer == nil) { | ||
| 450 | /* The backbuffer's contents aren't guaranteed to persist after | ||
| 451 | * presenting, so we can leave it undefined when loading it. */ | ||
| 452 | data.mtlbackbuffer = [data.mtllayer nextDrawable]; | ||
| 453 | if (load == MTLLoadActionLoad) { | ||
| 454 | load = MTLLoadActionDontCare; | ||
| 455 | } | ||
| 456 | } | ||
| 457 | if (data.mtlbackbuffer != nil) { | ||
| 458 | mtltexture = data.mtlbackbuffer.texture; | ||
| 459 | } | ||
| 460 | } | ||
| 461 | |||
| 462 | /* mtltexture can be nil here if macOS refused to give us a drawable, | ||
| 463 | which apparently can happen for minimized windows, etc. */ | ||
| 464 | if (mtltexture == nil) { | ||
| 465 | return false; | ||
| 466 | } | ||
| 467 | |||
| 468 | if (load == MTLLoadActionClear) { | ||
| 469 | SDL_assert(clear_color != NULL); | ||
| 470 | data.mtlpassdesc.colorAttachments[0].clearColor = *clear_color; | ||
| 471 | } | ||
| 472 | |||
| 473 | data.mtlpassdesc.colorAttachments[0].loadAction = load; | ||
| 474 | data.mtlpassdesc.colorAttachments[0].texture = mtltexture; | ||
| 475 | |||
| 476 | data.mtlcmdbuffer = [data.mtlcmdqueue commandBuffer]; | ||
| 477 | data.mtlcmdencoder = [data.mtlcmdbuffer renderCommandEncoderWithDescriptor:data.mtlpassdesc]; | ||
| 478 | |||
| 479 | if (data.mtlbackbuffer != nil && mtltexture == data.mtlbackbuffer.texture) { | ||
| 480 | data.mtlcmdencoder.label = @"SDL metal renderer backbuffer"; | ||
| 481 | } else { | ||
| 482 | data.mtlcmdencoder.label = @"SDL metal renderer render target"; | ||
| 483 | } | ||
| 484 | |||
| 485 | /* Set up buffer bindings for positions, texcoords, and color once here, | ||
| 486 | * the offsets are adjusted in the code that uses them. */ | ||
| 487 | if (vertex_buffer != nil) { | ||
| 488 | [data.mtlcmdencoder setVertexBuffer:vertex_buffer offset:0 atIndex:0]; | ||
| 489 | [data.mtlcmdencoder setFragmentBuffer:vertex_buffer offset:0 atIndex:0]; | ||
| 490 | } | ||
| 491 | |||
| 492 | data.activepipelines = ChooseShaderPipelines(data, mtltexture.pixelFormat); | ||
| 493 | |||
| 494 | // make sure this has a definite place in the queue. This way it will | ||
| 495 | // execute reliably whether the app tries to make its own command buffers | ||
| 496 | // or whatever. This means we can _always_ batch rendering commands! | ||
| 497 | [data.mtlcmdbuffer enqueue]; | ||
| 498 | } | ||
| 499 | |||
| 500 | return true; | ||
| 501 | } | ||
| 502 | |||
| 503 | static void METAL_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 504 | { | ||
| 505 | } | ||
| 506 | |||
| 507 | static bool METAL_GetOutputSize(SDL_Renderer *renderer, int *w, int *h) | ||
| 508 | { | ||
| 509 | @autoreleasepool { | ||
| 510 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 511 | if (w) { | ||
| 512 | *w = (int)data.mtllayer.drawableSize.width; | ||
| 513 | } | ||
| 514 | if (h) { | ||
| 515 | *h = (int)data.mtllayer.drawableSize.height; | ||
| 516 | } | ||
| 517 | return true; | ||
| 518 | } | ||
| 519 | } | ||
| 520 | |||
| 521 | static bool METAL_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 522 | { | ||
| 523 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 524 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 525 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 526 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 527 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 528 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 529 | |||
| 530 | if (GetBlendFactor(srcColorFactor) == invalidBlendFactor || | ||
| 531 | GetBlendFactor(srcAlphaFactor) == invalidBlendFactor || | ||
| 532 | GetBlendOperation(colorOperation) == invalidBlendOperation || | ||
| 533 | GetBlendFactor(dstColorFactor) == invalidBlendFactor || | ||
| 534 | GetBlendFactor(dstAlphaFactor) == invalidBlendFactor || | ||
| 535 | GetBlendOperation(alphaOperation) == invalidBlendOperation) { | ||
| 536 | return false; | ||
| 537 | } | ||
| 538 | return true; | ||
| 539 | } | ||
| 540 | |||
| 541 | size_t GetBT601ConversionMatrix(SDL_Colorspace colorspace) | ||
| 542 | { | ||
| 543 | switch (SDL_COLORSPACERANGE(colorspace)) { | ||
| 544 | case SDL_COLOR_RANGE_LIMITED: | ||
| 545 | case SDL_COLOR_RANGE_UNKNOWN: | ||
| 546 | return CONSTANTS_OFFSET_DECODE_BT601_LIMITED; | ||
| 547 | case SDL_COLOR_RANGE_FULL: | ||
| 548 | return CONSTANTS_OFFSET_DECODE_BT601_FULL; | ||
| 549 | default: | ||
| 550 | break; | ||
| 551 | } | ||
| 552 | return 0; | ||
| 553 | } | ||
| 554 | |||
| 555 | size_t GetBT709ConversionMatrix(SDL_Colorspace colorspace) | ||
| 556 | { | ||
| 557 | switch (SDL_COLORSPACERANGE(colorspace)) { | ||
| 558 | case SDL_COLOR_RANGE_LIMITED: | ||
| 559 | case SDL_COLOR_RANGE_UNKNOWN: | ||
| 560 | return CONSTANTS_OFFSET_DECODE_BT709_LIMITED; | ||
| 561 | case SDL_COLOR_RANGE_FULL: | ||
| 562 | return CONSTANTS_OFFSET_DECODE_BT709_FULL; | ||
| 563 | default: | ||
| 564 | break; | ||
| 565 | } | ||
| 566 | return 0; | ||
| 567 | } | ||
| 568 | |||
| 569 | size_t GetBT2020ConversionMatrix(SDL_Colorspace colorspace) | ||
| 570 | { | ||
| 571 | switch (SDL_COLORSPACERANGE(colorspace)) { | ||
| 572 | case SDL_COLOR_RANGE_LIMITED: | ||
| 573 | case SDL_COLOR_RANGE_UNKNOWN: | ||
| 574 | return CONSTANTS_OFFSET_DECODE_BT2020_LIMITED; | ||
| 575 | case SDL_COLOR_RANGE_FULL: | ||
| 576 | return CONSTANTS_OFFSET_DECODE_BT2020_FULL; | ||
| 577 | default: | ||
| 578 | break; | ||
| 579 | } | ||
| 580 | return 0; | ||
| 581 | } | ||
| 582 | |||
| 583 | size_t GetYCbCRtoRGBConversionMatrix(SDL_Colorspace colorspace, int w, int h, int bits_per_pixel) | ||
| 584 | { | ||
| 585 | const int YUV_SD_THRESHOLD = 576; | ||
| 586 | |||
| 587 | switch (SDL_COLORSPACEMATRIX(colorspace)) { | ||
| 588 | case SDL_MATRIX_COEFFICIENTS_BT470BG: | ||
| 589 | case SDL_MATRIX_COEFFICIENTS_BT601: | ||
| 590 | return GetBT601ConversionMatrix(colorspace); | ||
| 591 | |||
| 592 | case SDL_MATRIX_COEFFICIENTS_BT709: | ||
| 593 | return GetBT709ConversionMatrix(colorspace); | ||
| 594 | |||
| 595 | case SDL_MATRIX_COEFFICIENTS_BT2020_NCL: | ||
| 596 | return GetBT2020ConversionMatrix(colorspace); | ||
| 597 | |||
| 598 | case SDL_MATRIX_COEFFICIENTS_UNSPECIFIED: | ||
| 599 | switch (bits_per_pixel) { | ||
| 600 | case 8: | ||
| 601 | if (h <= YUV_SD_THRESHOLD) { | ||
| 602 | return GetBT601ConversionMatrix(colorspace); | ||
| 603 | } else { | ||
| 604 | return GetBT709ConversionMatrix(colorspace); | ||
| 605 | } | ||
| 606 | case 10: | ||
| 607 | case 16: | ||
| 608 | return GetBT2020ConversionMatrix(colorspace); | ||
| 609 | default: | ||
| 610 | break; | ||
| 611 | } | ||
| 612 | break; | ||
| 613 | default: | ||
| 614 | break; | ||
| 615 | } | ||
| 616 | return 0; | ||
| 617 | } | ||
| 618 | |||
| 619 | static bool METAL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 620 | { | ||
| 621 | @autoreleasepool { | ||
| 622 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 623 | MTLPixelFormat pixfmt; | ||
| 624 | MTLTextureDescriptor *mtltexdesc; | ||
| 625 | id<MTLTexture> mtltexture = nil, mtltextureUv = nil; | ||
| 626 | SDL3METAL_TextureData *texturedata; | ||
| 627 | CVPixelBufferRef pixelbuffer = nil; | ||
| 628 | IOSurfaceRef surface = nil; | ||
| 629 | |||
| 630 | pixelbuffer = SDL_GetPointerProperty(create_props, SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER, nil); | ||
| 631 | if (pixelbuffer) { | ||
| 632 | surface = CVPixelBufferGetIOSurface(pixelbuffer); | ||
| 633 | if (!surface) { | ||
| 634 | return SDL_SetError("CVPixelBufferGetIOSurface() failed"); | ||
| 635 | } | ||
| 636 | } | ||
| 637 | |||
| 638 | switch (texture->format) { | ||
| 639 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 640 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 641 | pixfmt = MTLPixelFormatRGBA8Unorm_sRGB; | ||
| 642 | } else { | ||
| 643 | pixfmt = MTLPixelFormatRGBA8Unorm; | ||
| 644 | } | ||
| 645 | break; | ||
| 646 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 647 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 648 | pixfmt = MTLPixelFormatBGRA8Unorm_sRGB; | ||
| 649 | } else { | ||
| 650 | pixfmt = MTLPixelFormatBGRA8Unorm; | ||
| 651 | } | ||
| 652 | break; | ||
| 653 | case SDL_PIXELFORMAT_ABGR2101010: | ||
| 654 | pixfmt = MTLPixelFormatRGB10A2Unorm; | ||
| 655 | break; | ||
| 656 | case SDL_PIXELFORMAT_IYUV: | ||
| 657 | case SDL_PIXELFORMAT_YV12: | ||
| 658 | case SDL_PIXELFORMAT_NV12: | ||
| 659 | case SDL_PIXELFORMAT_NV21: | ||
| 660 | pixfmt = MTLPixelFormatR8Unorm; | ||
| 661 | break; | ||
| 662 | case SDL_PIXELFORMAT_P010: | ||
| 663 | pixfmt = MTLPixelFormatR16Unorm; | ||
| 664 | break; | ||
| 665 | case SDL_PIXELFORMAT_RGBA64_FLOAT: | ||
| 666 | pixfmt = MTLPixelFormatRGBA16Float; | ||
| 667 | break; | ||
| 668 | case SDL_PIXELFORMAT_RGBA128_FLOAT: | ||
| 669 | pixfmt = MTLPixelFormatRGBA32Float; | ||
| 670 | break; | ||
| 671 | default: | ||
| 672 | return SDL_SetError("Texture format %s not supported by Metal", SDL_GetPixelFormatName(texture->format)); | ||
| 673 | } | ||
| 674 | |||
| 675 | mtltexdesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:pixfmt | ||
| 676 | width:(NSUInteger)texture->w | ||
| 677 | height:(NSUInteger)texture->h | ||
| 678 | mipmapped:NO]; | ||
| 679 | |||
| 680 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 681 | mtltexdesc.usage = MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget; | ||
| 682 | } else { | ||
| 683 | mtltexdesc.usage = MTLTextureUsageShaderRead; | ||
| 684 | } | ||
| 685 | |||
| 686 | if (surface) { | ||
| 687 | mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc iosurface:surface plane:0]; | ||
| 688 | } else { | ||
| 689 | mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc]; | ||
| 690 | } | ||
| 691 | if (mtltexture == nil) { | ||
| 692 | return SDL_SetError("Texture allocation failed"); | ||
| 693 | } | ||
| 694 | |||
| 695 | mtltextureUv = nil; | ||
| 696 | #ifdef SDL_HAVE_YUV | ||
| 697 | BOOL yuv = (texture->format == SDL_PIXELFORMAT_IYUV || texture->format == SDL_PIXELFORMAT_YV12); | ||
| 698 | BOOL nv12 = (texture->format == SDL_PIXELFORMAT_NV12 || texture->format == SDL_PIXELFORMAT_NV21 || texture->format == SDL_PIXELFORMAT_P010); | ||
| 699 | |||
| 700 | if (yuv) { | ||
| 701 | mtltexdesc.pixelFormat = MTLPixelFormatR8Unorm; | ||
| 702 | mtltexdesc.width = (texture->w + 1) / 2; | ||
| 703 | mtltexdesc.height = (texture->h + 1) / 2; | ||
| 704 | mtltexdesc.textureType = MTLTextureType2DArray; | ||
| 705 | mtltexdesc.arrayLength = 2; | ||
| 706 | } else if (texture->format == SDL_PIXELFORMAT_P010) { | ||
| 707 | mtltexdesc.pixelFormat = MTLPixelFormatRG16Unorm; | ||
| 708 | mtltexdesc.width = (texture->w + 1) / 2; | ||
| 709 | mtltexdesc.height = (texture->h + 1) / 2; | ||
| 710 | } else if (nv12) { | ||
| 711 | mtltexdesc.pixelFormat = MTLPixelFormatRG8Unorm; | ||
| 712 | mtltexdesc.width = (texture->w + 1) / 2; | ||
| 713 | mtltexdesc.height = (texture->h + 1) / 2; | ||
| 714 | } | ||
| 715 | |||
| 716 | if (yuv || nv12) { | ||
| 717 | if (surface) { | ||
| 718 | mtltextureUv = [data.mtldevice newTextureWithDescriptor:mtltexdesc iosurface:surface plane:1]; | ||
| 719 | } else { | ||
| 720 | mtltextureUv = [data.mtldevice newTextureWithDescriptor:mtltexdesc]; | ||
| 721 | } | ||
| 722 | if (mtltextureUv == nil) { | ||
| 723 | return SDL_SetError("Texture allocation failed"); | ||
| 724 | } | ||
| 725 | } | ||
| 726 | #endif // SDL_HAVE_YUV | ||
| 727 | texturedata = [[SDL3METAL_TextureData alloc] init]; | ||
| 728 | #ifdef SDL_HAVE_YUV | ||
| 729 | if (yuv) { | ||
| 730 | texturedata.fragmentFunction = SDL_METAL_FRAGMENT_YUV; | ||
| 731 | } else if (nv12) { | ||
| 732 | texturedata.fragmentFunction = SDL_METAL_FRAGMENT_NV12; | ||
| 733 | } else | ||
| 734 | #endif | ||
| 735 | { | ||
| 736 | texturedata.fragmentFunction = SDL_METAL_FRAGMENT_COPY; | ||
| 737 | } | ||
| 738 | texturedata.mtltexture = mtltexture; | ||
| 739 | texturedata.mtltextureUv = mtltextureUv; | ||
| 740 | #ifdef SDL_HAVE_YUV | ||
| 741 | texturedata.yuv = yuv; | ||
| 742 | texturedata.nv12 = nv12; | ||
| 743 | if (yuv || nv12) { | ||
| 744 | size_t offset = GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8); | ||
| 745 | if (offset == 0) { | ||
| 746 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 747 | } | ||
| 748 | texturedata.conversionBufferOffset = offset; | ||
| 749 | } | ||
| 750 | #endif | ||
| 751 | texture->internal = (void *)CFBridgingRetain(texturedata); | ||
| 752 | |||
| 753 | return true; | ||
| 754 | } | ||
| 755 | } | ||
| 756 | |||
| 757 | static void METAL_UploadTextureData(id<MTLTexture> texture, SDL_Rect rect, int slice, | ||
| 758 | const void *pixels, int pitch) | ||
| 759 | { | ||
| 760 | [texture replaceRegion:MTLRegionMake2D(rect.x, rect.y, rect.w, rect.h) | ||
| 761 | mipmapLevel:0 | ||
| 762 | slice:slice | ||
| 763 | withBytes:pixels | ||
| 764 | bytesPerRow:pitch | ||
| 765 | bytesPerImage:0]; | ||
| 766 | } | ||
| 767 | |||
| 768 | static MTLStorageMode METAL_GetStorageMode(id<MTLResource> resource) | ||
| 769 | { | ||
| 770 | return resource.storageMode; | ||
| 771 | } | ||
| 772 | |||
| 773 | static bool METAL_UpdateTextureInternal(SDL_Renderer *renderer, SDL3METAL_TextureData *texturedata, | ||
| 774 | id<MTLTexture> texture, SDL_Rect rect, int slice, | ||
| 775 | const void *pixels, int pitch) | ||
| 776 | { | ||
| 777 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 778 | SDL_Rect stagingrect = { 0, 0, rect.w, rect.h }; | ||
| 779 | MTLTextureDescriptor *desc; | ||
| 780 | id<MTLTexture> stagingtex; | ||
| 781 | id<MTLBlitCommandEncoder> blitcmd; | ||
| 782 | |||
| 783 | /* If the texture is managed or shared and this is the first upload, we can | ||
| 784 | * use replaceRegion to upload to it directly. Otherwise we upload the data | ||
| 785 | * to a staging texture and copy that over. */ | ||
| 786 | if (!texturedata.hasdata && METAL_GetStorageMode(texture) != MTLStorageModePrivate) { | ||
| 787 | METAL_UploadTextureData(texture, rect, slice, pixels, pitch); | ||
| 788 | return true; | ||
| 789 | } | ||
| 790 | |||
| 791 | desc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:texture.pixelFormat | ||
| 792 | width:rect.w | ||
| 793 | height:rect.h | ||
| 794 | mipmapped:NO]; | ||
| 795 | |||
| 796 | if (desc == nil) { | ||
| 797 | return SDL_OutOfMemory(); | ||
| 798 | } | ||
| 799 | |||
| 800 | /* TODO: We could have a pool of textures or a MTLHeap we allocate from, | ||
| 801 | * and release a staging texture back to the pool in the command buffer's | ||
| 802 | * completion handler. */ | ||
| 803 | stagingtex = [data.mtldevice newTextureWithDescriptor:desc]; | ||
| 804 | if (stagingtex == nil) { | ||
| 805 | return SDL_OutOfMemory(); | ||
| 806 | } | ||
| 807 | |||
| 808 | METAL_UploadTextureData(stagingtex, stagingrect, 0, pixels, pitch); | ||
| 809 | |||
| 810 | if (data.mtlcmdencoder != nil) { | ||
| 811 | [data.mtlcmdencoder endEncoding]; | ||
| 812 | data.mtlcmdencoder = nil; | ||
| 813 | } | ||
| 814 | |||
| 815 | if (data.mtlcmdbuffer == nil) { | ||
| 816 | data.mtlcmdbuffer = [data.mtlcmdqueue commandBuffer]; | ||
| 817 | } | ||
| 818 | |||
| 819 | blitcmd = [data.mtlcmdbuffer blitCommandEncoder]; | ||
| 820 | |||
| 821 | [blitcmd copyFromTexture:stagingtex | ||
| 822 | sourceSlice:0 | ||
| 823 | sourceLevel:0 | ||
| 824 | sourceOrigin:MTLOriginMake(0, 0, 0) | ||
| 825 | sourceSize:MTLSizeMake(rect.w, rect.h, 1) | ||
| 826 | toTexture:texture | ||
| 827 | destinationSlice:slice | ||
| 828 | destinationLevel:0 | ||
| 829 | destinationOrigin:MTLOriginMake(rect.x, rect.y, 0)]; | ||
| 830 | |||
| 831 | [blitcmd endEncoding]; | ||
| 832 | |||
| 833 | /* TODO: This isn't very efficient for the YUV formats, which call | ||
| 834 | * UpdateTextureInternal multiple times in a row. */ | ||
| 835 | [data.mtlcmdbuffer commit]; | ||
| 836 | data.mtlcmdbuffer = nil; | ||
| 837 | |||
| 838 | return true; | ||
| 839 | } | ||
| 840 | |||
| 841 | static bool METAL_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 842 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 843 | { | ||
| 844 | @autoreleasepool { | ||
| 845 | SDL3METAL_TextureData *texturedata = (__bridge SDL3METAL_TextureData *)texture->internal; | ||
| 846 | |||
| 847 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltexture, *rect, 0, pixels, pitch)) { | ||
| 848 | return false; | ||
| 849 | } | ||
| 850 | #ifdef SDL_HAVE_YUV | ||
| 851 | if (texturedata.yuv) { | ||
| 852 | int Uslice = texture->format == SDL_PIXELFORMAT_YV12 ? 1 : 0; | ||
| 853 | int Vslice = texture->format == SDL_PIXELFORMAT_YV12 ? 0 : 1; | ||
| 854 | int UVpitch = (pitch + 1) / 2; | ||
| 855 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 856 | |||
| 857 | // Skip to the correct offset into the next texture | ||
| 858 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 859 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltextureUv, UVrect, Uslice, pixels, UVpitch)) { | ||
| 860 | return false; | ||
| 861 | } | ||
| 862 | |||
| 863 | // Skip to the correct offset into the next texture | ||
| 864 | pixels = (const void *)((const Uint8 *)pixels + UVrect.h * UVpitch); | ||
| 865 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltextureUv, UVrect, Vslice, pixels, UVpitch)) { | ||
| 866 | return false; | ||
| 867 | } | ||
| 868 | } | ||
| 869 | |||
| 870 | if (texturedata.nv12) { | ||
| 871 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 872 | int UVpitch = 2 * ((pitch + 1) / 2); | ||
| 873 | |||
| 874 | // Skip to the correct offset into the next texture | ||
| 875 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 876 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltextureUv, UVrect, 0, pixels, UVpitch)) { | ||
| 877 | return false; | ||
| 878 | } | ||
| 879 | } | ||
| 880 | #endif | ||
| 881 | texturedata.hasdata = YES; | ||
| 882 | |||
| 883 | return true; | ||
| 884 | } | ||
| 885 | } | ||
| 886 | |||
| 887 | #ifdef SDL_HAVE_YUV | ||
| 888 | static bool METAL_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 889 | const SDL_Rect *rect, | ||
| 890 | const Uint8 *Yplane, int Ypitch, | ||
| 891 | const Uint8 *Uplane, int Upitch, | ||
| 892 | const Uint8 *Vplane, int Vpitch) | ||
| 893 | { | ||
| 894 | @autoreleasepool { | ||
| 895 | SDL3METAL_TextureData *texturedata = (__bridge SDL3METAL_TextureData *)texture->internal; | ||
| 896 | const int Uslice = 0; | ||
| 897 | const int Vslice = 1; | ||
| 898 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 899 | |||
| 900 | // Bail out if we're supposed to update an empty rectangle | ||
| 901 | if (rect->w <= 0 || rect->h <= 0) { | ||
| 902 | return true; | ||
| 903 | } | ||
| 904 | |||
| 905 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltexture, *rect, 0, Yplane, Ypitch)) { | ||
| 906 | return false; | ||
| 907 | } | ||
| 908 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltextureUv, UVrect, Uslice, Uplane, Upitch)) { | ||
| 909 | return false; | ||
| 910 | } | ||
| 911 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltextureUv, UVrect, Vslice, Vplane, Vpitch)) { | ||
| 912 | return false; | ||
| 913 | } | ||
| 914 | |||
| 915 | texturedata.hasdata = YES; | ||
| 916 | |||
| 917 | return true; | ||
| 918 | } | ||
| 919 | } | ||
| 920 | |||
| 921 | static bool METAL_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 922 | const SDL_Rect *rect, | ||
| 923 | const Uint8 *Yplane, int Ypitch, | ||
| 924 | const Uint8 *UVplane, int UVpitch) | ||
| 925 | { | ||
| 926 | @autoreleasepool { | ||
| 927 | SDL3METAL_TextureData *texturedata = (__bridge SDL3METAL_TextureData *)texture->internal; | ||
| 928 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 929 | |||
| 930 | // Bail out if we're supposed to update an empty rectangle | ||
| 931 | if (rect->w <= 0 || rect->h <= 0) { | ||
| 932 | return true; | ||
| 933 | } | ||
| 934 | |||
| 935 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltexture, *rect, 0, Yplane, Ypitch)) { | ||
| 936 | return false; | ||
| 937 | } | ||
| 938 | |||
| 939 | if (!METAL_UpdateTextureInternal(renderer, texturedata, texturedata.mtltextureUv, UVrect, 0, UVplane, UVpitch)) { | ||
| 940 | return false; | ||
| 941 | } | ||
| 942 | |||
| 943 | texturedata.hasdata = YES; | ||
| 944 | |||
| 945 | return true; | ||
| 946 | } | ||
| 947 | } | ||
| 948 | #endif | ||
| 949 | |||
| 950 | static bool METAL_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 951 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 952 | { | ||
| 953 | @autoreleasepool { | ||
| 954 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 955 | SDL3METAL_TextureData *texturedata = (__bridge SDL3METAL_TextureData *)texture->internal; | ||
| 956 | int buffersize = 0; | ||
| 957 | id<MTLBuffer> lockedbuffer = nil; | ||
| 958 | |||
| 959 | if (rect->w <= 0 || rect->h <= 0) { | ||
| 960 | return SDL_SetError("Invalid rectangle dimensions for LockTexture."); | ||
| 961 | } | ||
| 962 | |||
| 963 | *pitch = SDL_BYTESPERPIXEL(texture->format) * rect->w; | ||
| 964 | #ifdef SDL_HAVE_YUV | ||
| 965 | if (texturedata.yuv || texturedata.nv12) { | ||
| 966 | buffersize = ((*pitch) * rect->h) + (2 * (*pitch + 1) / 2) * ((rect->h + 1) / 2); | ||
| 967 | } else | ||
| 968 | #endif | ||
| 969 | { | ||
| 970 | buffersize = (*pitch) * rect->h; | ||
| 971 | } | ||
| 972 | |||
| 973 | lockedbuffer = [data.mtldevice newBufferWithLength:buffersize options:MTLResourceStorageModeShared]; | ||
| 974 | if (lockedbuffer == nil) { | ||
| 975 | return SDL_OutOfMemory(); | ||
| 976 | } | ||
| 977 | |||
| 978 | texturedata.lockedrect = *rect; | ||
| 979 | texturedata.lockedbuffer = lockedbuffer; | ||
| 980 | *pixels = [lockedbuffer contents]; | ||
| 981 | |||
| 982 | return true; | ||
| 983 | } | ||
| 984 | } | ||
| 985 | |||
| 986 | static void METAL_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 987 | { | ||
| 988 | @autoreleasepool { | ||
| 989 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 990 | SDL3METAL_TextureData *texturedata = (__bridge SDL3METAL_TextureData *)texture->internal; | ||
| 991 | id<MTLBlitCommandEncoder> blitcmd; | ||
| 992 | SDL_Rect rect = texturedata.lockedrect; | ||
| 993 | int pitch = SDL_BYTESPERPIXEL(texture->format) * rect.w; | ||
| 994 | #ifdef SDL_HAVE_YUV | ||
| 995 | SDL_Rect UVrect = { rect.x / 2, rect.y / 2, (rect.w + 1) / 2, (rect.h + 1) / 2 }; | ||
| 996 | #endif | ||
| 997 | |||
| 998 | if (texturedata.lockedbuffer == nil) { | ||
| 999 | return; | ||
| 1000 | } | ||
| 1001 | |||
| 1002 | if (data.mtlcmdencoder != nil) { | ||
| 1003 | [data.mtlcmdencoder endEncoding]; | ||
| 1004 | data.mtlcmdencoder = nil; | ||
| 1005 | } | ||
| 1006 | |||
| 1007 | if (data.mtlcmdbuffer == nil) { | ||
| 1008 | data.mtlcmdbuffer = [data.mtlcmdqueue commandBuffer]; | ||
| 1009 | } | ||
| 1010 | |||
| 1011 | blitcmd = [data.mtlcmdbuffer blitCommandEncoder]; | ||
| 1012 | |||
| 1013 | [blitcmd copyFromBuffer:texturedata.lockedbuffer | ||
| 1014 | sourceOffset:0 | ||
| 1015 | sourceBytesPerRow:pitch | ||
| 1016 | sourceBytesPerImage:0 | ||
| 1017 | sourceSize:MTLSizeMake(rect.w, rect.h, 1) | ||
| 1018 | toTexture:texturedata.mtltexture | ||
| 1019 | destinationSlice:0 | ||
| 1020 | destinationLevel:0 | ||
| 1021 | destinationOrigin:MTLOriginMake(rect.x, rect.y, 0)]; | ||
| 1022 | #ifdef SDL_HAVE_YUV | ||
| 1023 | if (texturedata.yuv) { | ||
| 1024 | int Uslice = texture->format == SDL_PIXELFORMAT_YV12 ? 1 : 0; | ||
| 1025 | int Vslice = texture->format == SDL_PIXELFORMAT_YV12 ? 0 : 1; | ||
| 1026 | int UVpitch = (pitch + 1) / 2; | ||
| 1027 | |||
| 1028 | [blitcmd copyFromBuffer:texturedata.lockedbuffer | ||
| 1029 | sourceOffset:rect.h * pitch | ||
| 1030 | sourceBytesPerRow:UVpitch | ||
| 1031 | sourceBytesPerImage:UVpitch * UVrect.h | ||
| 1032 | sourceSize:MTLSizeMake(UVrect.w, UVrect.h, 1) | ||
| 1033 | toTexture:texturedata.mtltextureUv | ||
| 1034 | destinationSlice:Uslice | ||
| 1035 | destinationLevel:0 | ||
| 1036 | destinationOrigin:MTLOriginMake(UVrect.x, UVrect.y, 0)]; | ||
| 1037 | |||
| 1038 | [blitcmd copyFromBuffer:texturedata.lockedbuffer | ||
| 1039 | sourceOffset:(rect.h * pitch) + UVrect.h * UVpitch | ||
| 1040 | sourceBytesPerRow:UVpitch | ||
| 1041 | sourceBytesPerImage:UVpitch * UVrect.h | ||
| 1042 | sourceSize:MTLSizeMake(UVrect.w, UVrect.h, 1) | ||
| 1043 | toTexture:texturedata.mtltextureUv | ||
| 1044 | destinationSlice:Vslice | ||
| 1045 | destinationLevel:0 | ||
| 1046 | destinationOrigin:MTLOriginMake(UVrect.x, UVrect.y, 0)]; | ||
| 1047 | } | ||
| 1048 | |||
| 1049 | if (texturedata.nv12) { | ||
| 1050 | int UVpitch = 2 * ((pitch + 1) / 2); | ||
| 1051 | |||
| 1052 | [blitcmd copyFromBuffer:texturedata.lockedbuffer | ||
| 1053 | sourceOffset:rect.h * pitch | ||
| 1054 | sourceBytesPerRow:UVpitch | ||
| 1055 | sourceBytesPerImage:0 | ||
| 1056 | sourceSize:MTLSizeMake(UVrect.w, UVrect.h, 1) | ||
| 1057 | toTexture:texturedata.mtltextureUv | ||
| 1058 | destinationSlice:0 | ||
| 1059 | destinationLevel:0 | ||
| 1060 | destinationOrigin:MTLOriginMake(UVrect.x, UVrect.y, 0)]; | ||
| 1061 | } | ||
| 1062 | #endif | ||
| 1063 | [blitcmd endEncoding]; | ||
| 1064 | |||
| 1065 | [data.mtlcmdbuffer commit]; | ||
| 1066 | data.mtlcmdbuffer = nil; | ||
| 1067 | |||
| 1068 | texturedata.lockedbuffer = nil; // Retained property, so it calls release. | ||
| 1069 | texturedata.hasdata = YES; | ||
| 1070 | } | ||
| 1071 | } | ||
| 1072 | |||
| 1073 | static void METAL_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 1074 | { | ||
| 1075 | } | ||
| 1076 | |||
| 1077 | static bool METAL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1078 | { | ||
| 1079 | @autoreleasepool { | ||
| 1080 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1081 | |||
| 1082 | if (data.mtlcmdencoder) { | ||
| 1083 | /* End encoding for the previous render target so we can set up a new | ||
| 1084 | * render pass for this one. */ | ||
| 1085 | [data.mtlcmdencoder endEncoding]; | ||
| 1086 | [data.mtlcmdbuffer commit]; | ||
| 1087 | |||
| 1088 | data.mtlcmdencoder = nil; | ||
| 1089 | data.mtlcmdbuffer = nil; | ||
| 1090 | } | ||
| 1091 | |||
| 1092 | /* We don't begin a new render pass right away - we delay it until an actual | ||
| 1093 | * draw or clear happens. That way we can use hardware clears when possible, | ||
| 1094 | * which are only available when beginning a new render pass. */ | ||
| 1095 | return true; | ||
| 1096 | } | ||
| 1097 | } | ||
| 1098 | |||
| 1099 | static bool METAL_QueueSetViewport(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 1100 | { | ||
| 1101 | float projection[4][4]; // Prepare an orthographic projection | ||
| 1102 | const int w = cmd->data.viewport.rect.w; | ||
| 1103 | const int h = cmd->data.viewport.rect.h; | ||
| 1104 | const size_t matrixlen = sizeof(projection); | ||
| 1105 | float *matrix = (float *)SDL_AllocateRenderVertices(renderer, matrixlen, CONSTANT_ALIGN(16), &cmd->data.viewport.first); | ||
| 1106 | if (!matrix) { | ||
| 1107 | return false; | ||
| 1108 | } | ||
| 1109 | |||
| 1110 | SDL_memset(projection, '\0', matrixlen); | ||
| 1111 | if (w && h) { | ||
| 1112 | projection[0][0] = 2.0f / w; | ||
| 1113 | projection[1][1] = -2.0f / h; | ||
| 1114 | projection[3][0] = -1.0f; | ||
| 1115 | projection[3][1] = 1.0f; | ||
| 1116 | projection[3][3] = 1.0f; | ||
| 1117 | } | ||
| 1118 | SDL_memcpy(matrix, projection, matrixlen); | ||
| 1119 | |||
| 1120 | return true; | ||
| 1121 | } | ||
| 1122 | |||
| 1123 | static bool METAL_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 1124 | { | ||
| 1125 | return true; // nothing to do in this backend. | ||
| 1126 | } | ||
| 1127 | |||
| 1128 | static bool METAL_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 1129 | { | ||
| 1130 | SDL_FColor color = cmd->data.draw.color; | ||
| 1131 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 1132 | |||
| 1133 | const size_t vertlen = (2 * sizeof(float) + 4 * sizeof(float)) * count; | ||
| 1134 | float *verts = (float *)SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first); | ||
| 1135 | if (!verts) { | ||
| 1136 | return false; | ||
| 1137 | } | ||
| 1138 | cmd->data.draw.count = count; | ||
| 1139 | |||
| 1140 | if (convert_color) { | ||
| 1141 | SDL_ConvertToLinear(&color); | ||
| 1142 | } | ||
| 1143 | |||
| 1144 | for (int i = 0; i < count; i++, points++) { | ||
| 1145 | *(verts++) = points->x; | ||
| 1146 | *(verts++) = points->y; | ||
| 1147 | *(verts++) = color.r; | ||
| 1148 | *(verts++) = color.g; | ||
| 1149 | *(verts++) = color.b; | ||
| 1150 | *(verts++) = color.a; | ||
| 1151 | } | ||
| 1152 | return true; | ||
| 1153 | } | ||
| 1154 | |||
| 1155 | static bool METAL_QueueDrawLines(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 1156 | { | ||
| 1157 | SDL_FColor color = cmd->data.draw.color; | ||
| 1158 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 1159 | size_t vertlen; | ||
| 1160 | float *verts; | ||
| 1161 | |||
| 1162 | SDL_assert(count >= 2); // should have been checked at the higher level. | ||
| 1163 | |||
| 1164 | vertlen = (2 * sizeof(float) + 4 * sizeof(float)) * count; | ||
| 1165 | verts = (float *)SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first); | ||
| 1166 | if (!verts) { | ||
| 1167 | return false; | ||
| 1168 | } | ||
| 1169 | cmd->data.draw.count = count; | ||
| 1170 | |||
| 1171 | if (convert_color) { | ||
| 1172 | SDL_ConvertToLinear(&color); | ||
| 1173 | } | ||
| 1174 | |||
| 1175 | for (int i = 0; i < count; i++, points++) { | ||
| 1176 | *(verts++) = points->x; | ||
| 1177 | *(verts++) = points->y; | ||
| 1178 | *(verts++) = color.r; | ||
| 1179 | *(verts++) = color.g; | ||
| 1180 | *(verts++) = color.b; | ||
| 1181 | *(verts++) = color.a; | ||
| 1182 | } | ||
| 1183 | |||
| 1184 | /* If the line segment is completely horizontal or vertical, | ||
| 1185 | make it one pixel longer, to satisfy the diamond-exit rule. | ||
| 1186 | We should probably do this for diagonal lines too, but we'd have to | ||
| 1187 | do some trigonometry to figure out the correct pixel and generally | ||
| 1188 | when we have problems with pixel perfection, it's for straight lines | ||
| 1189 | that are missing a pixel that frames something and not arbitrary | ||
| 1190 | angles. Maybe !!! FIXME for later, though. */ | ||
| 1191 | |||
| 1192 | points -= 2; // update the last line. | ||
| 1193 | verts -= 2 + 1; | ||
| 1194 | |||
| 1195 | { | ||
| 1196 | const float xstart = points[0].x; | ||
| 1197 | const float ystart = points[0].y; | ||
| 1198 | const float xend = points[1].x; | ||
| 1199 | const float yend = points[1].y; | ||
| 1200 | |||
| 1201 | if (ystart == yend) { // horizontal line | ||
| 1202 | verts[0] += (xend > xstart) ? 1.0f : -1.0f; | ||
| 1203 | } else if (xstart == xend) { // vertical line | ||
| 1204 | verts[1] += (yend > ystart) ? 1.0f : -1.0f; | ||
| 1205 | } | ||
| 1206 | } | ||
| 1207 | |||
| 1208 | return true; | ||
| 1209 | } | ||
| 1210 | |||
| 1211 | static bool METAL_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 1212 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 1213 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 1214 | float scale_x, float scale_y) | ||
| 1215 | { | ||
| 1216 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 1217 | int count = indices ? num_indices : num_vertices; | ||
| 1218 | const size_t vertlen = (2 * sizeof(float) + 4 * sizeof(float) + (texture ? 2 : 0) * sizeof(float)) * count; | ||
| 1219 | float *verts = (float *)SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first); | ||
| 1220 | if (!verts) { | ||
| 1221 | return false; | ||
| 1222 | } | ||
| 1223 | |||
| 1224 | cmd->data.draw.count = count; | ||
| 1225 | size_indices = indices ? size_indices : 0; | ||
| 1226 | |||
| 1227 | for (int i = 0; i < count; i++) { | ||
| 1228 | int j; | ||
| 1229 | float *xy_; | ||
| 1230 | SDL_FColor col_; | ||
| 1231 | if (size_indices == 4) { | ||
| 1232 | j = ((const Uint32 *)indices)[i]; | ||
| 1233 | } else if (size_indices == 2) { | ||
| 1234 | j = ((const Uint16 *)indices)[i]; | ||
| 1235 | } else if (size_indices == 1) { | ||
| 1236 | j = ((const Uint8 *)indices)[i]; | ||
| 1237 | } else { | ||
| 1238 | j = i; | ||
| 1239 | } | ||
| 1240 | |||
| 1241 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 1242 | |||
| 1243 | *(verts++) = xy_[0] * scale_x; | ||
| 1244 | *(verts++) = xy_[1] * scale_y; | ||
| 1245 | |||
| 1246 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 1247 | |||
| 1248 | if (convert_color) { | ||
| 1249 | SDL_ConvertToLinear(&col_); | ||
| 1250 | } | ||
| 1251 | |||
| 1252 | *(verts++) = col_.r; | ||
| 1253 | *(verts++) = col_.g; | ||
| 1254 | *(verts++) = col_.b; | ||
| 1255 | *(verts++) = col_.a; | ||
| 1256 | |||
| 1257 | if (texture) { | ||
| 1258 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 1259 | *(verts++) = uv_[0]; | ||
| 1260 | *(verts++) = uv_[1]; | ||
| 1261 | } | ||
| 1262 | } | ||
| 1263 | |||
| 1264 | return true; | ||
| 1265 | } | ||
| 1266 | |||
| 1267 | // These should mirror the definitions in SDL_shaders_metal.metal | ||
| 1268 | //static const float TONEMAP_NONE = 0; | ||
| 1269 | //static const float TONEMAP_LINEAR = 1; | ||
| 1270 | static const float TONEMAP_CHROME = 2; | ||
| 1271 | |||
| 1272 | //static const float TEXTURETYPE_NONE = 0; | ||
| 1273 | static const float TEXTURETYPE_RGB = 1; | ||
| 1274 | static const float TEXTURETYPE_NV12 = 2; | ||
| 1275 | static const float TEXTURETYPE_NV21 = 3; | ||
| 1276 | static const float TEXTURETYPE_YUV = 4; | ||
| 1277 | |||
| 1278 | //static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 1279 | static const float INPUTTYPE_SRGB = 1; | ||
| 1280 | static const float INPUTTYPE_SCRGB = 2; | ||
| 1281 | static const float INPUTTYPE_HDR10 = 3; | ||
| 1282 | |||
| 1283 | typedef struct | ||
| 1284 | { | ||
| 1285 | float scRGB_output; | ||
| 1286 | float texture_type; | ||
| 1287 | float input_type; | ||
| 1288 | float color_scale; | ||
| 1289 | |||
| 1290 | float tonemap_method; | ||
| 1291 | float tonemap_factor1; | ||
| 1292 | float tonemap_factor2; | ||
| 1293 | float sdr_white_point; | ||
| 1294 | } PixelShaderConstants; | ||
| 1295 | |||
| 1296 | typedef struct | ||
| 1297 | { | ||
| 1298 | __unsafe_unretained id<MTLRenderPipelineState> pipeline; | ||
| 1299 | __unsafe_unretained id<MTLBuffer> vertex_buffer; | ||
| 1300 | size_t constants_offset; | ||
| 1301 | SDL_Texture *texture; | ||
| 1302 | bool cliprect_dirty; | ||
| 1303 | bool cliprect_enabled; | ||
| 1304 | SDL_Rect cliprect; | ||
| 1305 | bool viewport_dirty; | ||
| 1306 | SDL_Rect viewport; | ||
| 1307 | size_t projection_offset; | ||
| 1308 | bool shader_constants_dirty; | ||
| 1309 | PixelShaderConstants shader_constants; | ||
| 1310 | } METAL_DrawStateCache; | ||
| 1311 | |||
| 1312 | static void SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const SDL_Texture *texture, PixelShaderConstants *constants) | ||
| 1313 | { | ||
| 1314 | float output_headroom; | ||
| 1315 | |||
| 1316 | SDL_zerop(constants); | ||
| 1317 | |||
| 1318 | constants->scRGB_output = (float)SDL_RenderingLinearSpace(renderer); | ||
| 1319 | constants->color_scale = cmd->data.draw.color_scale; | ||
| 1320 | |||
| 1321 | if (texture) { | ||
| 1322 | switch (texture->format) { | ||
| 1323 | case SDL_PIXELFORMAT_YV12: | ||
| 1324 | case SDL_PIXELFORMAT_IYUV: | ||
| 1325 | constants->texture_type = TEXTURETYPE_YUV; | ||
| 1326 | break; | ||
| 1327 | case SDL_PIXELFORMAT_NV12: | ||
| 1328 | constants->texture_type = TEXTURETYPE_NV12; | ||
| 1329 | break; | ||
| 1330 | case SDL_PIXELFORMAT_NV21: | ||
| 1331 | constants->texture_type = TEXTURETYPE_NV21; | ||
| 1332 | break; | ||
| 1333 | case SDL_PIXELFORMAT_P010: | ||
| 1334 | constants->texture_type = TEXTURETYPE_NV12; | ||
| 1335 | break; | ||
| 1336 | default: | ||
| 1337 | constants->texture_type = TEXTURETYPE_RGB; | ||
| 1338 | } | ||
| 1339 | |||
| 1340 | switch (SDL_COLORSPACETRANSFER(texture->colorspace)) { | ||
| 1341 | case SDL_TRANSFER_CHARACTERISTICS_LINEAR: | ||
| 1342 | constants->input_type = INPUTTYPE_SCRGB; | ||
| 1343 | break; | ||
| 1344 | case SDL_TRANSFER_CHARACTERISTICS_PQ: | ||
| 1345 | constants->input_type = INPUTTYPE_HDR10; | ||
| 1346 | break; | ||
| 1347 | default: | ||
| 1348 | constants->input_type = INPUTTYPE_SRGB; | ||
| 1349 | break; | ||
| 1350 | } | ||
| 1351 | |||
| 1352 | constants->sdr_white_point = texture->SDR_white_point; | ||
| 1353 | |||
| 1354 | if (renderer->target) { | ||
| 1355 | output_headroom = renderer->target->HDR_headroom; | ||
| 1356 | } else { | ||
| 1357 | output_headroom = renderer->HDR_headroom; | ||
| 1358 | } | ||
| 1359 | |||
| 1360 | if (texture->HDR_headroom > output_headroom) { | ||
| 1361 | constants->tonemap_method = TONEMAP_CHROME; | ||
| 1362 | constants->tonemap_factor1 = (output_headroom / (texture->HDR_headroom * texture->HDR_headroom)); | ||
| 1363 | constants->tonemap_factor2 = (1.0f / output_headroom); | ||
| 1364 | } | ||
| 1365 | } | ||
| 1366 | } | ||
| 1367 | |||
| 1368 | static bool SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const SDL_MetalFragmentFunction shader, PixelShaderConstants *shader_constants, const size_t constants_offset, id<MTLBuffer> mtlbufvertex, METAL_DrawStateCache *statecache) | ||
| 1369 | { | ||
| 1370 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1371 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 1372 | size_t first = cmd->data.draw.first; | ||
| 1373 | id<MTLRenderPipelineState> newpipeline; | ||
| 1374 | PixelShaderConstants solid_constants; | ||
| 1375 | |||
| 1376 | if (!METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, statecache->vertex_buffer)) { | ||
| 1377 | return false; | ||
| 1378 | } | ||
| 1379 | |||
| 1380 | if (statecache->viewport_dirty) { | ||
| 1381 | MTLViewport viewport; | ||
| 1382 | viewport.originX = statecache->viewport.x; | ||
| 1383 | viewport.originY = statecache->viewport.y; | ||
| 1384 | viewport.width = statecache->viewport.w; | ||
| 1385 | viewport.height = statecache->viewport.h; | ||
| 1386 | viewport.znear = 0.0; | ||
| 1387 | viewport.zfar = 1.0; | ||
| 1388 | [data.mtlcmdencoder setViewport:viewport]; | ||
| 1389 | [data.mtlcmdencoder setVertexBuffer:mtlbufvertex offset:statecache->projection_offset atIndex:2]; // projection | ||
| 1390 | statecache->viewport_dirty = false; | ||
| 1391 | } | ||
| 1392 | |||
| 1393 | if (statecache->cliprect_dirty) { | ||
| 1394 | SDL_Rect output; | ||
| 1395 | SDL_Rect clip; | ||
| 1396 | if (statecache->cliprect_enabled) { | ||
| 1397 | clip = statecache->cliprect; | ||
| 1398 | clip.x += statecache->viewport.x; | ||
| 1399 | clip.y += statecache->viewport.y; | ||
| 1400 | } else { | ||
| 1401 | clip = statecache->viewport; | ||
| 1402 | } | ||
| 1403 | |||
| 1404 | // Set Scissor Rect Validation: w/h must be <= render pass | ||
| 1405 | SDL_zero(output); | ||
| 1406 | |||
| 1407 | if (renderer->target) { | ||
| 1408 | output.w = renderer->target->w; | ||
| 1409 | output.h = renderer->target->h; | ||
| 1410 | } else { | ||
| 1411 | METAL_GetOutputSize(renderer, &output.w, &output.h); | ||
| 1412 | } | ||
| 1413 | |||
| 1414 | if (SDL_GetRectIntersection(&output, &clip, &clip)) { | ||
| 1415 | MTLScissorRect mtlrect; | ||
| 1416 | mtlrect.x = clip.x; | ||
| 1417 | mtlrect.y = clip.y; | ||
| 1418 | mtlrect.width = clip.w; | ||
| 1419 | mtlrect.height = clip.h; | ||
| 1420 | [data.mtlcmdencoder setScissorRect:mtlrect]; | ||
| 1421 | } | ||
| 1422 | |||
| 1423 | statecache->cliprect_dirty = false; | ||
| 1424 | } | ||
| 1425 | |||
| 1426 | newpipeline = ChoosePipelineState(data, data.activepipelines, shader, blend); | ||
| 1427 | if (newpipeline != statecache->pipeline) { | ||
| 1428 | [data.mtlcmdencoder setRenderPipelineState:newpipeline]; | ||
| 1429 | statecache->pipeline = newpipeline; | ||
| 1430 | } | ||
| 1431 | |||
| 1432 | if (!shader_constants) { | ||
| 1433 | SetupShaderConstants(renderer, cmd, NULL, &solid_constants); | ||
| 1434 | shader_constants = &solid_constants; | ||
| 1435 | } | ||
| 1436 | |||
| 1437 | if (statecache->shader_constants_dirty || | ||
| 1438 | SDL_memcmp(shader_constants, &statecache->shader_constants, sizeof(*shader_constants)) != 0) { | ||
| 1439 | id<MTLBuffer> mtlbufconstants = [data.mtldevice newBufferWithLength:sizeof(*shader_constants) options:MTLResourceStorageModeShared]; | ||
| 1440 | mtlbufconstants.label = @"SDL shader constants data"; | ||
| 1441 | SDL_memcpy([mtlbufconstants contents], shader_constants, sizeof(*shader_constants)); | ||
| 1442 | [data.mtlcmdencoder setFragmentBuffer:mtlbufconstants offset:0 atIndex:0]; | ||
| 1443 | |||
| 1444 | SDL_memcpy(&statecache->shader_constants, shader_constants, sizeof(*shader_constants)); | ||
| 1445 | statecache->shader_constants_dirty = false; | ||
| 1446 | } | ||
| 1447 | |||
| 1448 | if (constants_offset != statecache->constants_offset) { | ||
| 1449 | if (constants_offset != CONSTANTS_OFFSET_INVALID) { | ||
| 1450 | [data.mtlcmdencoder setVertexBuffer:data.mtlbufconstants offset:constants_offset atIndex:3]; | ||
| 1451 | } | ||
| 1452 | statecache->constants_offset = constants_offset; | ||
| 1453 | } | ||
| 1454 | |||
| 1455 | [data.mtlcmdencoder setVertexBufferOffset:first atIndex:0]; // position/texcoords | ||
| 1456 | return true; | ||
| 1457 | } | ||
| 1458 | |||
| 1459 | static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const size_t constants_offset, | ||
| 1460 | id<MTLBuffer> mtlbufvertex, METAL_DrawStateCache *statecache) | ||
| 1461 | { | ||
| 1462 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1463 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 1464 | SDL3METAL_TextureData *texturedata = (__bridge SDL3METAL_TextureData *)texture->internal; | ||
| 1465 | PixelShaderConstants constants; | ||
| 1466 | |||
| 1467 | SetupShaderConstants(renderer, cmd, texture, &constants); | ||
| 1468 | |||
| 1469 | if (!SetDrawState(renderer, cmd, texturedata.fragmentFunction, &constants, constants_offset, mtlbufvertex, statecache)) { | ||
| 1470 | return false; | ||
| 1471 | } | ||
| 1472 | |||
| 1473 | if (texture != statecache->texture) { | ||
| 1474 | id<MTLSamplerState> mtlsampler; | ||
| 1475 | |||
| 1476 | if (texture->scaleMode == SDL_SCALEMODE_NEAREST) { | ||
| 1477 | switch (cmd->data.draw.texture_address_mode) { | ||
| 1478 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 1479 | mtlsampler = data.mtlsamplers[SDL_METAL_SAMPLER_NEAREST_CLAMP]; | ||
| 1480 | break; | ||
| 1481 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 1482 | mtlsampler = data.mtlsamplers[SDL_METAL_SAMPLER_NEAREST_WRAP]; | ||
| 1483 | break; | ||
| 1484 | default: | ||
| 1485 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 1486 | } | ||
| 1487 | } else { | ||
| 1488 | switch (cmd->data.draw.texture_address_mode) { | ||
| 1489 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 1490 | mtlsampler = data.mtlsamplers[SDL_METAL_SAMPLER_LINEAR_CLAMP]; | ||
| 1491 | break; | ||
| 1492 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 1493 | mtlsampler = data.mtlsamplers[SDL_METAL_SAMPLER_LINEAR_WRAP]; | ||
| 1494 | break; | ||
| 1495 | default: | ||
| 1496 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 1497 | } | ||
| 1498 | } | ||
| 1499 | [data.mtlcmdencoder setFragmentSamplerState:mtlsampler atIndex:0]; | ||
| 1500 | |||
| 1501 | [data.mtlcmdencoder setFragmentTexture:texturedata.mtltexture atIndex:0]; | ||
| 1502 | #ifdef SDL_HAVE_YUV | ||
| 1503 | if (texturedata.yuv || texturedata.nv12) { | ||
| 1504 | [data.mtlcmdencoder setFragmentTexture:texturedata.mtltextureUv atIndex:1]; | ||
| 1505 | [data.mtlcmdencoder setFragmentBuffer:data.mtlbufconstants offset:texturedata.conversionBufferOffset atIndex:1]; | ||
| 1506 | } | ||
| 1507 | #endif | ||
| 1508 | statecache->texture = texture; | ||
| 1509 | } | ||
| 1510 | return true; | ||
| 1511 | } | ||
| 1512 | |||
| 1513 | static void METAL_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 1514 | { | ||
| 1515 | // METAL_DrawStateCache only exists during a run of METAL_RunCommandQueue, so there's nothing to invalidate! | ||
| 1516 | } | ||
| 1517 | |||
| 1518 | static bool METAL_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 1519 | { | ||
| 1520 | @autoreleasepool { | ||
| 1521 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1522 | id<MTLBuffer> mtlbufvertex = nil; | ||
| 1523 | METAL_DrawStateCache statecache; | ||
| 1524 | SDL_zero(statecache); | ||
| 1525 | |||
| 1526 | statecache.pipeline = nil; | ||
| 1527 | statecache.vertex_buffer = nil; | ||
| 1528 | statecache.constants_offset = CONSTANTS_OFFSET_INVALID; | ||
| 1529 | statecache.texture = NULL; | ||
| 1530 | statecache.shader_constants_dirty = true; | ||
| 1531 | statecache.cliprect_dirty = true; | ||
| 1532 | statecache.viewport_dirty = true; | ||
| 1533 | statecache.projection_offset = 0; | ||
| 1534 | |||
| 1535 | // !!! FIXME: have a ring of pre-made MTLBuffers we cycle through? How expensive is creation? | ||
| 1536 | if (vertsize > 0) { | ||
| 1537 | /* We can memcpy to a shared buffer from the CPU and read it from the GPU | ||
| 1538 | * without any extra copying. It's a bit slower on macOS to read shared | ||
| 1539 | * data from the GPU than to read managed/private data, but we avoid the | ||
| 1540 | * cost of copying the data and the code's simpler. Apple's best | ||
| 1541 | * practices guide recommends this approach for streamed vertex data. | ||
| 1542 | */ | ||
| 1543 | mtlbufvertex = [data.mtldevice newBufferWithLength:vertsize options:MTLResourceStorageModeShared]; | ||
| 1544 | mtlbufvertex.label = @"SDL vertex data"; | ||
| 1545 | SDL_memcpy([mtlbufvertex contents], vertices, vertsize); | ||
| 1546 | |||
| 1547 | statecache.vertex_buffer = mtlbufvertex; | ||
| 1548 | } | ||
| 1549 | |||
| 1550 | // If there's a command buffer here unexpectedly (app requested one?). Commit it so we can start fresh. | ||
| 1551 | [data.mtlcmdencoder endEncoding]; | ||
| 1552 | [data.mtlcmdbuffer commit]; | ||
| 1553 | data.mtlcmdencoder = nil; | ||
| 1554 | data.mtlcmdbuffer = nil; | ||
| 1555 | |||
| 1556 | while (cmd) { | ||
| 1557 | switch (cmd->command) { | ||
| 1558 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 1559 | { | ||
| 1560 | SDL_memcpy(&statecache.viewport, &cmd->data.viewport.rect, sizeof(statecache.viewport)); | ||
| 1561 | statecache.projection_offset = cmd->data.viewport.first; | ||
| 1562 | statecache.viewport_dirty = true; | ||
| 1563 | statecache.cliprect_dirty = true; | ||
| 1564 | break; | ||
| 1565 | } | ||
| 1566 | |||
| 1567 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 1568 | { | ||
| 1569 | SDL_memcpy(&statecache.cliprect, &cmd->data.cliprect.rect, sizeof(statecache.cliprect)); | ||
| 1570 | statecache.cliprect_enabled = cmd->data.cliprect.enabled; | ||
| 1571 | statecache.cliprect_dirty = true; | ||
| 1572 | break; | ||
| 1573 | } | ||
| 1574 | |||
| 1575 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 1576 | { | ||
| 1577 | break; | ||
| 1578 | } | ||
| 1579 | |||
| 1580 | case SDL_RENDERCMD_CLEAR: | ||
| 1581 | { | ||
| 1582 | /* If we're already encoding a command buffer, dump it without committing it. We'd just | ||
| 1583 | clear all its work anyhow, and starting a new encoder will let us use a hardware clear | ||
| 1584 | operation via MTLLoadActionClear. */ | ||
| 1585 | if (data.mtlcmdencoder != nil) { | ||
| 1586 | [data.mtlcmdencoder endEncoding]; | ||
| 1587 | |||
| 1588 | // !!! FIXME: have to commit, or an uncommitted but enqueued buffer will prevent the frame from finishing. | ||
| 1589 | [data.mtlcmdbuffer commit]; | ||
| 1590 | data.mtlcmdencoder = nil; | ||
| 1591 | data.mtlcmdbuffer = nil; | ||
| 1592 | } | ||
| 1593 | |||
| 1594 | // force all this state to be reconfigured on next command buffer. | ||
| 1595 | statecache.pipeline = nil; | ||
| 1596 | statecache.constants_offset = CONSTANTS_OFFSET_INVALID; | ||
| 1597 | statecache.texture = NULL; | ||
| 1598 | statecache.shader_constants_dirty = true; | ||
| 1599 | statecache.cliprect_dirty = true; | ||
| 1600 | statecache.viewport_dirty = true; | ||
| 1601 | |||
| 1602 | { | ||
| 1603 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 1604 | SDL_FColor color = cmd->data.color.color; | ||
| 1605 | if (convert_color) { | ||
| 1606 | SDL_ConvertToLinear(&color); | ||
| 1607 | } | ||
| 1608 | color.r *= cmd->data.color.color_scale; | ||
| 1609 | color.g *= cmd->data.color.color_scale; | ||
| 1610 | color.b *= cmd->data.color.color_scale; | ||
| 1611 | MTLClearColor mtlcolor = MTLClearColorMake(color.r, color.g, color.b, color.a); | ||
| 1612 | |||
| 1613 | // get new command encoder, set up with an initial clear operation. | ||
| 1614 | // (this might fail, and future draw operations will notice.) | ||
| 1615 | METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionClear, &mtlcolor, mtlbufvertex); | ||
| 1616 | } | ||
| 1617 | break; | ||
| 1618 | } | ||
| 1619 | |||
| 1620 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 1621 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 1622 | { | ||
| 1623 | const size_t count = cmd->data.draw.count; | ||
| 1624 | const MTLPrimitiveType primtype = (cmd->command == SDL_RENDERCMD_DRAW_POINTS) ? MTLPrimitiveTypePoint : MTLPrimitiveTypeLineStrip; | ||
| 1625 | if (SetDrawState(renderer, cmd, SDL_METAL_FRAGMENT_SOLID, NULL, CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM, mtlbufvertex, &statecache)) { | ||
| 1626 | [data.mtlcmdencoder drawPrimitives:primtype vertexStart:0 vertexCount:count]; | ||
| 1627 | } | ||
| 1628 | break; | ||
| 1629 | } | ||
| 1630 | |||
| 1631 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 1632 | break; | ||
| 1633 | |||
| 1634 | case SDL_RENDERCMD_COPY: // unused | ||
| 1635 | break; | ||
| 1636 | |||
| 1637 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 1638 | break; | ||
| 1639 | |||
| 1640 | case SDL_RENDERCMD_GEOMETRY: | ||
| 1641 | { | ||
| 1642 | const size_t count = cmd->data.draw.count; | ||
| 1643 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 1644 | |||
| 1645 | if (texture) { | ||
| 1646 | if (SetCopyState(renderer, cmd, CONSTANTS_OFFSET_IDENTITY, mtlbufvertex, &statecache)) { | ||
| 1647 | [data.mtlcmdencoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:count]; | ||
| 1648 | } | ||
| 1649 | } else { | ||
| 1650 | if (SetDrawState(renderer, cmd, SDL_METAL_FRAGMENT_SOLID, NULL, CONSTANTS_OFFSET_IDENTITY, mtlbufvertex, &statecache)) { | ||
| 1651 | [data.mtlcmdencoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:count]; | ||
| 1652 | } | ||
| 1653 | } | ||
| 1654 | break; | ||
| 1655 | } | ||
| 1656 | |||
| 1657 | case SDL_RENDERCMD_NO_OP: | ||
| 1658 | break; | ||
| 1659 | } | ||
| 1660 | cmd = cmd->next; | ||
| 1661 | } | ||
| 1662 | |||
| 1663 | return true; | ||
| 1664 | } | ||
| 1665 | } | ||
| 1666 | |||
| 1667 | static SDL_Surface *METAL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 1668 | { | ||
| 1669 | @autoreleasepool { | ||
| 1670 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1671 | id<MTLTexture> mtltexture; | ||
| 1672 | MTLRegion mtlregion; | ||
| 1673 | Uint32 format; | ||
| 1674 | SDL_Surface *surface; | ||
| 1675 | |||
| 1676 | if (!METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, nil)) { | ||
| 1677 | SDL_SetError("Failed to activate render command encoder (is your window in the background?"); | ||
| 1678 | return NULL; | ||
| 1679 | } | ||
| 1680 | |||
| 1681 | [data.mtlcmdencoder endEncoding]; | ||
| 1682 | mtltexture = data.mtlpassdesc.colorAttachments[0].texture; | ||
| 1683 | |||
| 1684 | #ifdef SDL_PLATFORM_MACOS | ||
| 1685 | /* on macOS with managed-storage textures, we need to tell the driver to | ||
| 1686 | * update the CPU-side copy of the texture data. | ||
| 1687 | * NOTE: Currently all of our textures are managed on macOS. We'll need some | ||
| 1688 | * extra copying for any private textures. */ | ||
| 1689 | if (METAL_GetStorageMode(mtltexture) == MTLStorageModeManaged) { | ||
| 1690 | id<MTLBlitCommandEncoder> blit = [data.mtlcmdbuffer blitCommandEncoder]; | ||
| 1691 | [blit synchronizeResource:mtltexture]; | ||
| 1692 | [blit endEncoding]; | ||
| 1693 | } | ||
| 1694 | #endif | ||
| 1695 | |||
| 1696 | /* Commit the current command buffer and wait until it's completed, to make | ||
| 1697 | * sure the GPU has finished rendering to it by the time we read it. */ | ||
| 1698 | [data.mtlcmdbuffer commit]; | ||
| 1699 | [data.mtlcmdbuffer waitUntilCompleted]; | ||
| 1700 | data.mtlcmdencoder = nil; | ||
| 1701 | data.mtlcmdbuffer = nil; | ||
| 1702 | |||
| 1703 | mtlregion = MTLRegionMake2D(rect->x, rect->y, rect->w, rect->h); | ||
| 1704 | |||
| 1705 | switch (mtltexture.pixelFormat) { | ||
| 1706 | case MTLPixelFormatBGRA8Unorm: | ||
| 1707 | case MTLPixelFormatBGRA8Unorm_sRGB: | ||
| 1708 | format = SDL_PIXELFORMAT_ARGB8888; | ||
| 1709 | break; | ||
| 1710 | case MTLPixelFormatRGBA8Unorm: | ||
| 1711 | case MTLPixelFormatRGBA8Unorm_sRGB: | ||
| 1712 | format = SDL_PIXELFORMAT_ABGR8888; | ||
| 1713 | break; | ||
| 1714 | case MTLPixelFormatRGB10A2Unorm: | ||
| 1715 | format = SDL_PIXELFORMAT_ABGR2101010; | ||
| 1716 | break; | ||
| 1717 | case MTLPixelFormatRGBA16Float: | ||
| 1718 | format = SDL_PIXELFORMAT_RGBA64_FLOAT; | ||
| 1719 | break; | ||
| 1720 | default: | ||
| 1721 | SDL_SetError("Unknown framebuffer pixel format"); | ||
| 1722 | return NULL; | ||
| 1723 | } | ||
| 1724 | surface = SDL_CreateSurface(rect->w, rect->h, format); | ||
| 1725 | if (surface) { | ||
| 1726 | [mtltexture getBytes:surface->pixels bytesPerRow:surface->pitch fromRegion:mtlregion mipmapLevel:0]; | ||
| 1727 | } | ||
| 1728 | return surface; | ||
| 1729 | } | ||
| 1730 | } | ||
| 1731 | |||
| 1732 | static bool METAL_RenderPresent(SDL_Renderer *renderer) | ||
| 1733 | { | ||
| 1734 | @autoreleasepool { | ||
| 1735 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1736 | bool ready = true; | ||
| 1737 | |||
| 1738 | // If we don't have a command buffer, we can't present, so activate to get one. | ||
| 1739 | if (data.mtlcmdencoder == nil) { | ||
| 1740 | // We haven't even gotten a backbuffer yet? Load and clear it. Otherwise, load the existing data. | ||
| 1741 | if (data.mtlbackbuffer == nil) { | ||
| 1742 | float alpha = (SDL_GetWindowFlags(renderer->window) & SDL_WINDOW_TRANSPARENT) ? 0.0f : 1.0f; | ||
| 1743 | MTLClearColor color = MTLClearColorMake(0.0f, 0.0f, 0.0f, alpha); | ||
| 1744 | ready = METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionClear, &color, nil); | ||
| 1745 | } else { | ||
| 1746 | ready = METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, nil); | ||
| 1747 | } | ||
| 1748 | } | ||
| 1749 | |||
| 1750 | [data.mtlcmdencoder endEncoding]; | ||
| 1751 | |||
| 1752 | // If we don't have a drawable to present, don't try to present it. | ||
| 1753 | // But we'll still try to commit the command buffer in case it was already enqueued. | ||
| 1754 | if (ready) { | ||
| 1755 | SDL_assert(data.mtlbackbuffer != nil); | ||
| 1756 | [data.mtlcmdbuffer presentDrawable:data.mtlbackbuffer]; | ||
| 1757 | } | ||
| 1758 | |||
| 1759 | [data.mtlcmdbuffer commit]; | ||
| 1760 | |||
| 1761 | data.mtlcmdencoder = nil; | ||
| 1762 | data.mtlcmdbuffer = nil; | ||
| 1763 | data.mtlbackbuffer = nil; | ||
| 1764 | |||
| 1765 | if (renderer->hidden || !ready) { | ||
| 1766 | return false; | ||
| 1767 | } | ||
| 1768 | return true; | ||
| 1769 | } | ||
| 1770 | } | ||
| 1771 | |||
| 1772 | static void METAL_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1773 | { | ||
| 1774 | @autoreleasepool { | ||
| 1775 | CFBridgingRelease(texture->internal); | ||
| 1776 | texture->internal = NULL; | ||
| 1777 | } | ||
| 1778 | } | ||
| 1779 | |||
| 1780 | static void METAL_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1781 | { | ||
| 1782 | @autoreleasepool { | ||
| 1783 | if (renderer->internal) { | ||
| 1784 | SDL3METAL_RenderData *data = CFBridgingRelease(renderer->internal); | ||
| 1785 | |||
| 1786 | if (data.mtlcmdencoder != nil) { | ||
| 1787 | [data.mtlcmdencoder endEncoding]; | ||
| 1788 | } | ||
| 1789 | |||
| 1790 | DestroyAllPipelines(data.allpipelines, data.pipelinescount); | ||
| 1791 | |||
| 1792 | /* Release the metal view instead of destroying it, | ||
| 1793 | in case we want to use it later (recreating the renderer) | ||
| 1794 | */ | ||
| 1795 | // SDL_Metal_DestroyView(data.mtlview); | ||
| 1796 | CFBridgingRelease(data.mtlview); | ||
| 1797 | } | ||
| 1798 | } | ||
| 1799 | } | ||
| 1800 | |||
| 1801 | static void *METAL_GetMetalLayer(SDL_Renderer *renderer) | ||
| 1802 | { | ||
| 1803 | @autoreleasepool { | ||
| 1804 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1805 | return (__bridge void *)data.mtllayer; | ||
| 1806 | } | ||
| 1807 | } | ||
| 1808 | |||
| 1809 | static void *METAL_GetMetalCommandEncoder(SDL_Renderer *renderer) | ||
| 1810 | { | ||
| 1811 | @autoreleasepool { | ||
| 1812 | // note that data.mtlcmdencoder can be nil if METAL_ActivateRenderCommandEncoder fails. | ||
| 1813 | // Before SDL 2.0.18, it might have returned a non-nil encoding that might not have been | ||
| 1814 | // usable for presentation. Check your return values! | ||
| 1815 | SDL3METAL_RenderData *data; | ||
| 1816 | METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, nil); | ||
| 1817 | data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1818 | return (__bridge void *)data.mtlcmdencoder; | ||
| 1819 | } | ||
| 1820 | } | ||
| 1821 | |||
| 1822 | static bool METAL_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 1823 | { | ||
| 1824 | #if defined(SDL_PLATFORM_MACOS) || TARGET_OS_MACCATALYST | ||
| 1825 | SDL3METAL_RenderData *data = (__bridge SDL3METAL_RenderData *)renderer->internal; | ||
| 1826 | switch (vsync) { | ||
| 1827 | case 0: | ||
| 1828 | data.mtllayer.displaySyncEnabled = NO; | ||
| 1829 | break; | ||
| 1830 | case 1: | ||
| 1831 | data.mtllayer.displaySyncEnabled = YES; | ||
| 1832 | break; | ||
| 1833 | default: | ||
| 1834 | return SDL_Unsupported(); | ||
| 1835 | } | ||
| 1836 | return true; | ||
| 1837 | #else | ||
| 1838 | switch (vsync) { | ||
| 1839 | case 1: | ||
| 1840 | return true; | ||
| 1841 | default: | ||
| 1842 | return SDL_Unsupported(); | ||
| 1843 | } | ||
| 1844 | #endif | ||
| 1845 | } | ||
| 1846 | |||
| 1847 | static SDL_MetalView GetWindowView(SDL_Window *window) | ||
| 1848 | { | ||
| 1849 | #ifdef SDL_VIDEO_DRIVER_COCOA | ||
| 1850 | NSWindow *nswindow = (__bridge NSWindow *)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_COCOA_WINDOW_POINTER, NULL); | ||
| 1851 | NSInteger tag = (NSInteger)SDL_GetNumberProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER, 0); | ||
| 1852 | if (nswindow && tag) { | ||
| 1853 | NSView *view = nswindow.contentView; | ||
| 1854 | if (view.subviews.count > 0) { | ||
| 1855 | view = view.subviews[0]; | ||
| 1856 | if (view.tag == tag) { | ||
| 1857 | return (SDL_MetalView)CFBridgingRetain(view); | ||
| 1858 | } | ||
| 1859 | } | ||
| 1860 | } | ||
| 1861 | #endif | ||
| 1862 | |||
| 1863 | #ifdef SDL_VIDEO_DRIVER_UIKIT | ||
| 1864 | UIWindow *uiwindow = (__bridge UIWindow *)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_UIKIT_WINDOW_POINTER, NULL); | ||
| 1865 | NSInteger tag = (NSInteger)SDL_GetNumberProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_UIKIT_METAL_VIEW_TAG_NUMBER, 0); | ||
| 1866 | if (uiwindow && tag) { | ||
| 1867 | UIView *view = uiwindow.rootViewController.view; | ||
| 1868 | if (view.tag == tag) { | ||
| 1869 | return (SDL_MetalView)CFBridgingRetain(view); | ||
| 1870 | } | ||
| 1871 | } | ||
| 1872 | #endif | ||
| 1873 | |||
| 1874 | return nil; | ||
| 1875 | } | ||
| 1876 | |||
| 1877 | static bool METAL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 1878 | { | ||
| 1879 | @autoreleasepool { | ||
| 1880 | SDL3METAL_RenderData *data = NULL; | ||
| 1881 | id<MTLDevice> mtldevice = nil; | ||
| 1882 | SDL_MetalView view = NULL; | ||
| 1883 | CAMetalLayer *layer = nil; | ||
| 1884 | NSError *err = nil; | ||
| 1885 | dispatch_data_t mtllibdata; | ||
| 1886 | char *constantdata; | ||
| 1887 | int maxtexsize, quadcount = UINT16_MAX / 4; | ||
| 1888 | UInt16 *indexdata; | ||
| 1889 | size_t indicessize = sizeof(UInt16) * quadcount * 6; | ||
| 1890 | MTLSamplerDescriptor *samplerdesc; | ||
| 1891 | id<MTLCommandQueue> mtlcmdqueue; | ||
| 1892 | id<MTLLibrary> mtllibrary; | ||
| 1893 | id<MTLBuffer> mtlbufconstantstaging, mtlbufquadindicesstaging, mtlbufconstants, mtlbufquadindices; | ||
| 1894 | id<MTLCommandBuffer> cmdbuffer; | ||
| 1895 | id<MTLBlitCommandEncoder> blitcmd; | ||
| 1896 | bool scRGB_supported = false; | ||
| 1897 | |||
| 1898 | // Note: matrices are column major. | ||
| 1899 | float identitytransform[16] = { | ||
| 1900 | 1.0f, | ||
| 1901 | 0.0f, | ||
| 1902 | 0.0f, | ||
| 1903 | 0.0f, | ||
| 1904 | 0.0f, | ||
| 1905 | 1.0f, | ||
| 1906 | 0.0f, | ||
| 1907 | 0.0f, | ||
| 1908 | 0.0f, | ||
| 1909 | 0.0f, | ||
| 1910 | 1.0f, | ||
| 1911 | 0.0f, | ||
| 1912 | 0.0f, | ||
| 1913 | 0.0f, | ||
| 1914 | 0.0f, | ||
| 1915 | 1.0f, | ||
| 1916 | }; | ||
| 1917 | |||
| 1918 | float halfpixeltransform[16] = { | ||
| 1919 | 1.0f, | ||
| 1920 | 0.0f, | ||
| 1921 | 0.0f, | ||
| 1922 | 0.0f, | ||
| 1923 | 0.0f, | ||
| 1924 | 1.0f, | ||
| 1925 | 0.0f, | ||
| 1926 | 0.0f, | ||
| 1927 | 0.0f, | ||
| 1928 | 0.0f, | ||
| 1929 | 1.0f, | ||
| 1930 | 0.0f, | ||
| 1931 | 0.5f, | ||
| 1932 | 0.5f, | ||
| 1933 | 0.0f, | ||
| 1934 | 1.0f, | ||
| 1935 | }; | ||
| 1936 | |||
| 1937 | const size_t YCbCr_shader_matrix_size = 4 * 4 * sizeof(float); | ||
| 1938 | |||
| 1939 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 1940 | |||
| 1941 | #ifndef SDL_PLATFORM_TVOS | ||
| 1942 | if (@available(macos 10.11, iOS 16.0, *)) { | ||
| 1943 | scRGB_supported = true; | ||
| 1944 | } | ||
| 1945 | #endif | ||
| 1946 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 1947 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR && scRGB_supported) { | ||
| 1948 | // This colorspace is supported | ||
| 1949 | } else { | ||
| 1950 | return SDL_SetError("Unsupported output colorspace"); | ||
| 1951 | } | ||
| 1952 | } | ||
| 1953 | |||
| 1954 | #ifdef SDL_PLATFORM_MACOS | ||
| 1955 | if (SDL_GetHintBoolean(SDL_HINT_RENDER_METAL_PREFER_LOW_POWER_DEVICE, true)) { | ||
| 1956 | NSArray<id<MTLDevice>> *devices = MTLCopyAllDevices(); | ||
| 1957 | |||
| 1958 | for (id<MTLDevice> device in devices) { | ||
| 1959 | if (device.isLowPower) { | ||
| 1960 | mtldevice = device; | ||
| 1961 | break; | ||
| 1962 | } | ||
| 1963 | } | ||
| 1964 | } | ||
| 1965 | #endif | ||
| 1966 | |||
| 1967 | if (mtldevice == nil) { | ||
| 1968 | mtldevice = MTLCreateSystemDefaultDevice(); | ||
| 1969 | } | ||
| 1970 | |||
| 1971 | if (mtldevice == nil) { | ||
| 1972 | return SDL_SetError("Failed to obtain Metal device"); | ||
| 1973 | } | ||
| 1974 | |||
| 1975 | view = GetWindowView(window); | ||
| 1976 | if (view == nil) { | ||
| 1977 | view = SDL_Metal_CreateView(window); | ||
| 1978 | } | ||
| 1979 | |||
| 1980 | if (view == NULL) { | ||
| 1981 | return false; | ||
| 1982 | } | ||
| 1983 | |||
| 1984 | // !!! FIXME: error checking on all of this. | ||
| 1985 | data = [[SDL3METAL_RenderData alloc] init]; | ||
| 1986 | |||
| 1987 | if (data == nil) { | ||
| 1988 | /* Release the metal view instead of destroying it, | ||
| 1989 | in case we want to use it later (recreating the renderer) | ||
| 1990 | */ | ||
| 1991 | // SDL_Metal_DestroyView(view); | ||
| 1992 | CFBridgingRelease(view); | ||
| 1993 | return SDL_SetError("SDL3METAL_RenderData alloc/init failed"); | ||
| 1994 | } | ||
| 1995 | |||
| 1996 | renderer->internal = (void *)CFBridgingRetain(data); | ||
| 1997 | METAL_InvalidateCachedState(renderer); | ||
| 1998 | renderer->window = window; | ||
| 1999 | |||
| 2000 | data.mtlview = view; | ||
| 2001 | |||
| 2002 | #ifdef SDL_PLATFORM_MACOS | ||
| 2003 | layer = (CAMetalLayer *)[(__bridge NSView *)view layer]; | ||
| 2004 | #else | ||
| 2005 | layer = (CAMetalLayer *)[(__bridge UIView *)view layer]; | ||
| 2006 | #endif | ||
| 2007 | |||
| 2008 | #ifndef SDL_PLATFORM_TVOS | ||
| 2009 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 2010 | if (@available(macos 10.11, iOS 16.0, *)) { | ||
| 2011 | layer.wantsExtendedDynamicRangeContent = YES; | ||
| 2012 | } else { | ||
| 2013 | SDL_assert(!"Logic error, scRGB is not actually supported"); | ||
| 2014 | } | ||
| 2015 | layer.pixelFormat = MTLPixelFormatRGBA16Float; | ||
| 2016 | |||
| 2017 | const CFStringRef name = kCGColorSpaceExtendedLinearSRGB; | ||
| 2018 | CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(name); | ||
| 2019 | layer.colorspace = colorspace; | ||
| 2020 | CGColorSpaceRelease(colorspace); | ||
| 2021 | } | ||
| 2022 | #endif // !SDL_PLATFORM_TVOS | ||
| 2023 | |||
| 2024 | layer.device = mtldevice; | ||
| 2025 | |||
| 2026 | // Necessary for RenderReadPixels. | ||
| 2027 | layer.framebufferOnly = NO; | ||
| 2028 | |||
| 2029 | data.mtldevice = layer.device; | ||
| 2030 | data.mtllayer = layer; | ||
| 2031 | mtlcmdqueue = [data.mtldevice newCommandQueue]; | ||
| 2032 | data.mtlcmdqueue = mtlcmdqueue; | ||
| 2033 | data.mtlcmdqueue.label = @"SDL Metal Renderer"; | ||
| 2034 | data.mtlpassdesc = [MTLRenderPassDescriptor renderPassDescriptor]; | ||
| 2035 | |||
| 2036 | // The compiled .metallib is embedded in a static array in a header file | ||
| 2037 | // but the original shader source code is in SDL_shaders_metal.metal. | ||
| 2038 | mtllibdata = dispatch_data_create(sdl_metallib, sdl_metallib_len, dispatch_get_global_queue(0, 0), ^{ | ||
| 2039 | }); | ||
| 2040 | mtllibrary = [data.mtldevice newLibraryWithData:mtllibdata error:&err]; | ||
| 2041 | data.mtllibrary = mtllibrary; | ||
| 2042 | SDL_assert(err == nil); | ||
| 2043 | data.mtllibrary.label = @"SDL Metal renderer shader library"; | ||
| 2044 | |||
| 2045 | // Do some shader pipeline state loading up-front rather than on demand. | ||
| 2046 | data.pipelinescount = 0; | ||
| 2047 | data.allpipelines = NULL; | ||
| 2048 | ChooseShaderPipelines(data, MTLPixelFormatBGRA8Unorm); | ||
| 2049 | |||
| 2050 | static struct | ||
| 2051 | { | ||
| 2052 | MTLSamplerMinMagFilter filter; | ||
| 2053 | MTLSamplerAddressMode address; | ||
| 2054 | } samplerParams[] = { | ||
| 2055 | { MTLSamplerMinMagFilterNearest, MTLSamplerAddressModeClampToEdge }, | ||
| 2056 | { MTLSamplerMinMagFilterNearest, MTLSamplerAddressModeRepeat }, | ||
| 2057 | { MTLSamplerMinMagFilterLinear, MTLSamplerAddressModeClampToEdge }, | ||
| 2058 | { MTLSamplerMinMagFilterLinear, MTLSamplerAddressModeRepeat }, | ||
| 2059 | }; | ||
| 2060 | SDL_COMPILE_TIME_ASSERT(samplerParams_SIZE, SDL_arraysize(samplerParams) == SDL_NUM_METAL_SAMPLERS); | ||
| 2061 | |||
| 2062 | data.mtlsamplers = [[NSMutableArray<id<MTLSamplerState>> alloc] init]; | ||
| 2063 | samplerdesc = [[MTLSamplerDescriptor alloc] init]; | ||
| 2064 | for (int i = 0; i < SDL_arraysize(samplerParams); ++i) { | ||
| 2065 | samplerdesc.minFilter = samplerParams[i].filter; | ||
| 2066 | samplerdesc.magFilter = samplerParams[i].filter; | ||
| 2067 | samplerdesc.sAddressMode = samplerParams[i].address; | ||
| 2068 | samplerdesc.tAddressMode = samplerParams[i].address; | ||
| 2069 | [data.mtlsamplers addObject:[data.mtldevice newSamplerStateWithDescriptor:samplerdesc]]; | ||
| 2070 | } | ||
| 2071 | |||
| 2072 | mtlbufconstantstaging = [data.mtldevice newBufferWithLength:CONSTANTS_LENGTH options:MTLResourceStorageModeShared]; | ||
| 2073 | |||
| 2074 | constantdata = [mtlbufconstantstaging contents]; | ||
| 2075 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_IDENTITY, identitytransform, sizeof(identitytransform)); | ||
| 2076 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM, halfpixeltransform, sizeof(halfpixeltransform)); | ||
| 2077 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_DECODE_BT601_LIMITED, SDL_GetYCbCRtoRGBConversionMatrix(SDL_COLORSPACE_BT601_LIMITED, 0, 0, 8), YCbCr_shader_matrix_size); | ||
| 2078 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_DECODE_BT601_FULL, SDL_GetYCbCRtoRGBConversionMatrix(SDL_COLORSPACE_BT601_FULL, 0, 0, 8), YCbCr_shader_matrix_size); | ||
| 2079 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_DECODE_BT709_LIMITED, SDL_GetYCbCRtoRGBConversionMatrix(SDL_COLORSPACE_BT709_LIMITED, 0, 0, 8), YCbCr_shader_matrix_size); | ||
| 2080 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_DECODE_BT709_FULL, SDL_GetYCbCRtoRGBConversionMatrix(SDL_COLORSPACE_BT709_FULL, 0, 0, 8), YCbCr_shader_matrix_size); | ||
| 2081 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_DECODE_BT2020_LIMITED, SDL_GetYCbCRtoRGBConversionMatrix(SDL_COLORSPACE_BT2020_LIMITED, 0, 0, 10), YCbCr_shader_matrix_size); | ||
| 2082 | SDL_memcpy(constantdata + CONSTANTS_OFFSET_DECODE_BT2020_FULL, SDL_GetYCbCRtoRGBConversionMatrix(SDL_COLORSPACE_BT2020_FULL, 0, 0, 10), YCbCr_shader_matrix_size); | ||
| 2083 | |||
| 2084 | mtlbufquadindicesstaging = [data.mtldevice newBufferWithLength:indicessize options:MTLResourceStorageModeShared]; | ||
| 2085 | |||
| 2086 | /* Quads in the following vertex order (matches the FillRects vertices): | ||
| 2087 | * 1---3 | ||
| 2088 | * | \ | | ||
| 2089 | * 0---2 | ||
| 2090 | */ | ||
| 2091 | indexdata = [mtlbufquadindicesstaging contents]; | ||
| 2092 | for (int i = 0; i < quadcount; i++) { | ||
| 2093 | indexdata[i * 6 + 0] = i * 4 + 0; | ||
| 2094 | indexdata[i * 6 + 1] = i * 4 + 1; | ||
| 2095 | indexdata[i * 6 + 2] = i * 4 + 2; | ||
| 2096 | |||
| 2097 | indexdata[i * 6 + 3] = i * 4 + 2; | ||
| 2098 | indexdata[i * 6 + 4] = i * 4 + 1; | ||
| 2099 | indexdata[i * 6 + 5] = i * 4 + 3; | ||
| 2100 | } | ||
| 2101 | |||
| 2102 | mtlbufconstants = [data.mtldevice newBufferWithLength:CONSTANTS_LENGTH options:MTLResourceStorageModePrivate]; | ||
| 2103 | data.mtlbufconstants = mtlbufconstants; | ||
| 2104 | data.mtlbufconstants.label = @"SDL constant data"; | ||
| 2105 | |||
| 2106 | mtlbufquadindices = [data.mtldevice newBufferWithLength:indicessize options:MTLResourceStorageModePrivate]; | ||
| 2107 | data.mtlbufquadindices = mtlbufquadindices; | ||
| 2108 | data.mtlbufquadindices.label = @"SDL quad index buffer"; | ||
| 2109 | |||
| 2110 | cmdbuffer = [data.mtlcmdqueue commandBuffer]; | ||
| 2111 | blitcmd = [cmdbuffer blitCommandEncoder]; | ||
| 2112 | |||
| 2113 | [blitcmd copyFromBuffer:mtlbufconstantstaging sourceOffset:0 toBuffer:mtlbufconstants destinationOffset:0 size:CONSTANTS_LENGTH]; | ||
| 2114 | [blitcmd copyFromBuffer:mtlbufquadindicesstaging sourceOffset:0 toBuffer:mtlbufquadindices destinationOffset:0 size:indicessize]; | ||
| 2115 | |||
| 2116 | [blitcmd endEncoding]; | ||
| 2117 | [cmdbuffer commit]; | ||
| 2118 | |||
| 2119 | // !!! FIXME: force more clears here so all the drawables are sane to start, and our static buffers are definitely flushed. | ||
| 2120 | |||
| 2121 | renderer->WindowEvent = METAL_WindowEvent; | ||
| 2122 | renderer->GetOutputSize = METAL_GetOutputSize; | ||
| 2123 | renderer->SupportsBlendMode = METAL_SupportsBlendMode; | ||
| 2124 | renderer->CreateTexture = METAL_CreateTexture; | ||
| 2125 | renderer->UpdateTexture = METAL_UpdateTexture; | ||
| 2126 | #ifdef SDL_HAVE_YUV | ||
| 2127 | renderer->UpdateTextureYUV = METAL_UpdateTextureYUV; | ||
| 2128 | renderer->UpdateTextureNV = METAL_UpdateTextureNV; | ||
| 2129 | #endif | ||
| 2130 | renderer->LockTexture = METAL_LockTexture; | ||
| 2131 | renderer->UnlockTexture = METAL_UnlockTexture; | ||
| 2132 | renderer->SetTextureScaleMode = METAL_SetTextureScaleMode; | ||
| 2133 | renderer->SetRenderTarget = METAL_SetRenderTarget; | ||
| 2134 | renderer->QueueSetViewport = METAL_QueueSetViewport; | ||
| 2135 | renderer->QueueSetDrawColor = METAL_QueueNoOp; | ||
| 2136 | renderer->QueueDrawPoints = METAL_QueueDrawPoints; | ||
| 2137 | renderer->QueueDrawLines = METAL_QueueDrawLines; | ||
| 2138 | renderer->QueueGeometry = METAL_QueueGeometry; | ||
| 2139 | renderer->InvalidateCachedState = METAL_InvalidateCachedState; | ||
| 2140 | renderer->RunCommandQueue = METAL_RunCommandQueue; | ||
| 2141 | renderer->RenderReadPixels = METAL_RenderReadPixels; | ||
| 2142 | renderer->RenderPresent = METAL_RenderPresent; | ||
| 2143 | renderer->DestroyTexture = METAL_DestroyTexture; | ||
| 2144 | renderer->DestroyRenderer = METAL_DestroyRenderer; | ||
| 2145 | renderer->SetVSync = METAL_SetVSync; | ||
| 2146 | renderer->GetMetalLayer = METAL_GetMetalLayer; | ||
| 2147 | renderer->GetMetalCommandEncoder = METAL_GetMetalCommandEncoder; | ||
| 2148 | |||
| 2149 | renderer->name = METAL_RenderDriver.name; | ||
| 2150 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 2151 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 2152 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010); | ||
| 2153 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT); | ||
| 2154 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA128_FLOAT); | ||
| 2155 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 2156 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 2157 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 2158 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 2159 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); | ||
| 2160 | |||
| 2161 | #if defined(SDL_PLATFORM_MACOS) || TARGET_OS_MACCATALYST | ||
| 2162 | data.mtllayer.displaySyncEnabled = NO; | ||
| 2163 | #endif | ||
| 2164 | |||
| 2165 | // https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf | ||
| 2166 | maxtexsize = 4096; | ||
| 2167 | #if defined(SDL_PLATFORM_MACOS) || TARGET_OS_MACCATALYST | ||
| 2168 | maxtexsize = 16384; | ||
| 2169 | #elif defined(SDL_PLATFORM_TVOS) | ||
| 2170 | maxtexsize = 8192; | ||
| 2171 | if ([mtldevice supportsFeatureSet:MTLFeatureSet_tvOS_GPUFamily2_v1]) { | ||
| 2172 | maxtexsize = 16384; | ||
| 2173 | } | ||
| 2174 | #else | ||
| 2175 | if ([mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily4_v1]) { | ||
| 2176 | maxtexsize = 16384; | ||
| 2177 | } else if ([mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily3_v1]) { | ||
| 2178 | maxtexsize = 16384; | ||
| 2179 | } else if ([mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily2_v2] || [mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v2]) { | ||
| 2180 | maxtexsize = 8192; | ||
| 2181 | } else { | ||
| 2182 | maxtexsize = 4096; | ||
| 2183 | } | ||
| 2184 | #endif | ||
| 2185 | |||
| 2186 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, maxtexsize); | ||
| 2187 | |||
| 2188 | return true; | ||
| 2189 | } | ||
| 2190 | } | ||
| 2191 | |||
| 2192 | SDL_RenderDriver METAL_RenderDriver = { | ||
| 2193 | METAL_CreateRenderer, "metal" | ||
| 2194 | }; | ||
| 2195 | |||
| 2196 | #endif // SDL_VIDEO_RENDER_METAL | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_shaders_metal.metal b/SDL-3.2.8/src/render/metal/SDL_shaders_metal.metal new file mode 100644 index 0000000..c266670 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_shaders_metal.metal | |||
| @@ -0,0 +1,299 @@ | |||
| 1 | #include <metal_common> | ||
| 2 | #include <metal_texture> | ||
| 3 | #include <metal_matrix> | ||
| 4 | |||
| 5 | using namespace metal; | ||
| 6 | |||
| 7 | // These should mirror the definitions in SDL_render_metal.m | ||
| 8 | #define TONEMAP_NONE 0 | ||
| 9 | #define TONEMAP_LINEAR 1 | ||
| 10 | #define TONEMAP_CHROME 2 | ||
| 11 | |||
| 12 | #define TEXTURETYPE_NONE 0 | ||
| 13 | #define TEXTURETYPE_RGB 1 | ||
| 14 | #define TEXTURETYPE_NV12 2 | ||
| 15 | #define TEXTURETYPE_NV21 3 | ||
| 16 | #define TEXTURETYPE_YUV 4 | ||
| 17 | |||
| 18 | #define INPUTTYPE_UNSPECIFIED 0 | ||
| 19 | #define INPUTTYPE_SRGB 1 | ||
| 20 | #define INPUTTYPE_SCRGB 2 | ||
| 21 | #define INPUTTYPE_HDR10 3 | ||
| 22 | |||
| 23 | struct ShaderConstants | ||
| 24 | { | ||
| 25 | float scRGB_output; | ||
| 26 | float texture_type; | ||
| 27 | float input_type; | ||
| 28 | float color_scale; | ||
| 29 | |||
| 30 | float tonemap_method; | ||
| 31 | float tonemap_factor1; | ||
| 32 | float tonemap_factor2; | ||
| 33 | float sdr_white_point; | ||
| 34 | }; | ||
| 35 | |||
| 36 | struct YUVDecode | ||
| 37 | { | ||
| 38 | float3 offset; | ||
| 39 | float3x3 matrix; | ||
| 40 | }; | ||
| 41 | |||
| 42 | float sRGBtoLinear(float v) | ||
| 43 | { | ||
| 44 | if (v <= 0.04045) { | ||
| 45 | v = (v / 12.92); | ||
| 46 | } else { | ||
| 47 | v = pow(abs(v + 0.055) / 1.055, 2.4); | ||
| 48 | } | ||
| 49 | return v; | ||
| 50 | } | ||
| 51 | |||
| 52 | float sRGBfromLinear(float v) | ||
| 53 | { | ||
| 54 | if (v <= 0.0031308) { | ||
| 55 | v = (v * 12.92); | ||
| 56 | } else { | ||
| 57 | v = (pow(abs(v), 1.0 / 2.4) * 1.055 - 0.055); | ||
| 58 | } | ||
| 59 | return v; | ||
| 60 | } | ||
| 61 | |||
| 62 | float3 PQtoLinear(float3 v, float sdr_white_point) | ||
| 63 | { | ||
| 64 | const float c1 = 0.8359375; | ||
| 65 | const float c2 = 18.8515625; | ||
| 66 | const float c3 = 18.6875; | ||
| 67 | const float oo_m1 = 1.0 / 0.1593017578125; | ||
| 68 | const float oo_m2 = 1.0 / 78.84375; | ||
| 69 | |||
| 70 | float3 num = max(pow(abs(v), oo_m2) - c1, 0.0); | ||
| 71 | float3 den = c2 - c3 * pow(abs(v), oo_m2); | ||
| 72 | return (10000.0 * pow(abs(num / den), oo_m1) / sdr_white_point); | ||
| 73 | } | ||
| 74 | |||
| 75 | float3 ApplyTonemap(float3 v, float input_type, float tonemap_method, float tonemap_factor1, float tonemap_factor2) | ||
| 76 | { | ||
| 77 | const float3x3 mat709to2020 = { | ||
| 78 | { 0.627404, 0.329283, 0.043313 }, | ||
| 79 | { 0.069097, 0.919541, 0.011362 }, | ||
| 80 | { 0.016391, 0.088013, 0.895595 } | ||
| 81 | }; | ||
| 82 | const float3x3 mat2020to709 = { | ||
| 83 | { 1.660496, -0.587656, -0.072840 }, | ||
| 84 | { -0.124547, 1.132895, -0.008348 }, | ||
| 85 | { -0.018154, -0.100597, 1.118751 } | ||
| 86 | }; | ||
| 87 | |||
| 88 | if (tonemap_method == TONEMAP_LINEAR) { | ||
| 89 | v *= tonemap_factor1; | ||
| 90 | } else if (tonemap_method == TONEMAP_CHROME) { | ||
| 91 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 92 | // Convert to BT.2020 colorspace for tone mapping | ||
| 93 | v = v * mat709to2020; | ||
| 94 | } | ||
| 95 | |||
| 96 | float vmax = max(v.r, max(v.g, v.b)); | ||
| 97 | if (vmax > 0.0) { | ||
| 98 | float scale = (1.0 + tonemap_factor1 * vmax) / (1.0 + tonemap_factor2 * vmax); | ||
| 99 | v *= scale; | ||
| 100 | } | ||
| 101 | |||
| 102 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 103 | // Convert to BT.709 colorspace after tone mapping | ||
| 104 | v = v * mat2020to709; | ||
| 105 | } | ||
| 106 | } | ||
| 107 | return v; | ||
| 108 | } | ||
| 109 | |||
| 110 | float4 GetOutputColorSimple(float4 rgba, float color_scale) | ||
| 111 | { | ||
| 112 | float4 output; | ||
| 113 | |||
| 114 | output.rgb = rgba.rgb * color_scale; | ||
| 115 | output.a = rgba.a; | ||
| 116 | |||
| 117 | return output; | ||
| 118 | } | ||
| 119 | |||
| 120 | float3 GetOutputColorFromSRGB(float3 rgb, float scRGB_output, float color_scale) | ||
| 121 | { | ||
| 122 | float3 output; | ||
| 123 | |||
| 124 | if (scRGB_output) { | ||
| 125 | rgb.r = sRGBtoLinear(rgb.r); | ||
| 126 | rgb.g = sRGBtoLinear(rgb.g); | ||
| 127 | rgb.b = sRGBtoLinear(rgb.b); | ||
| 128 | } | ||
| 129 | |||
| 130 | output = rgb * color_scale; | ||
| 131 | |||
| 132 | return output; | ||
| 133 | } | ||
| 134 | |||
| 135 | float3 GetOutputColorFromLinear(float3 rgb, float scRGB_output, float color_scale) | ||
| 136 | { | ||
| 137 | float3 output; | ||
| 138 | |||
| 139 | output = rgb * color_scale; | ||
| 140 | |||
| 141 | if (!scRGB_output) { | ||
| 142 | output.r = sRGBfromLinear(output.r); | ||
| 143 | output.g = sRGBfromLinear(output.g); | ||
| 144 | output.b = sRGBfromLinear(output.b); | ||
| 145 | output = clamp(output, 0.0, 1.0); | ||
| 146 | } | ||
| 147 | |||
| 148 | return output; | ||
| 149 | } | ||
| 150 | |||
| 151 | float4 GetOutputColor(float4 rgba, constant ShaderConstants &c) | ||
| 152 | { | ||
| 153 | const float3x3 mat2020to709 = { | ||
| 154 | { 1.660496, -0.587656, -0.072840 }, | ||
| 155 | { -0.124547, 1.132895, -0.008348 }, | ||
| 156 | { -0.018154, -0.100597, 1.118751 } | ||
| 157 | }; | ||
| 158 | float4 output; | ||
| 159 | |||
| 160 | if (c.input_type == INPUTTYPE_HDR10) { | ||
| 161 | rgba.rgb = PQtoLinear(rgba.rgb, c.sdr_white_point); | ||
| 162 | } | ||
| 163 | |||
| 164 | if (c.tonemap_method != TONEMAP_NONE) { | ||
| 165 | rgba.rgb = ApplyTonemap(rgba.rgb, c.input_type, c.tonemap_method, c.tonemap_factor1, c.tonemap_factor2); | ||
| 166 | } | ||
| 167 | |||
| 168 | if (c.input_type == INPUTTYPE_SRGB) { | ||
| 169 | if (c.texture_type == TEXTURETYPE_RGB) { | ||
| 170 | // The sampler has already converted to linear if necessary | ||
| 171 | output.rgb = rgba.rgb * c.color_scale; | ||
| 172 | } else { | ||
| 173 | output.rgb = GetOutputColorFromSRGB(rgba.rgb, c.scRGB_output, c.color_scale); | ||
| 174 | } | ||
| 175 | } else if (c.input_type == INPUTTYPE_SCRGB) { | ||
| 176 | output.rgb = GetOutputColorFromLinear(rgba.rgb, c.scRGB_output, c.color_scale); | ||
| 177 | } else if (c.input_type == INPUTTYPE_HDR10) { | ||
| 178 | rgba.rgb = rgba.rgb * mat2020to709; | ||
| 179 | output.rgb = GetOutputColorFromLinear(rgba.rgb, c.scRGB_output, c.color_scale); | ||
| 180 | } else { | ||
| 181 | // Unexpected input type, use magenta error color | ||
| 182 | output.rgb = float3(1.0, 0.0, 1.0); | ||
| 183 | } | ||
| 184 | output.a = rgba.a; | ||
| 185 | |||
| 186 | return output; | ||
| 187 | } | ||
| 188 | |||
| 189 | struct SolidVertexInput | ||
| 190 | { | ||
| 191 | float2 position [[attribute(0)]]; | ||
| 192 | float4 color [[attribute(1)]]; | ||
| 193 | }; | ||
| 194 | |||
| 195 | struct SolidVertexOutput | ||
| 196 | { | ||
| 197 | float4 position [[position]]; | ||
| 198 | float4 color; | ||
| 199 | float pointSize [[point_size]]; | ||
| 200 | }; | ||
| 201 | |||
| 202 | vertex SolidVertexOutput SDL_Solid_vertex(SolidVertexInput in [[stage_in]], | ||
| 203 | constant float4x4 &projection [[buffer(2)]], | ||
| 204 | constant float4x4 &transform [[buffer(3)]]) | ||
| 205 | { | ||
| 206 | SolidVertexOutput v; | ||
| 207 | v.position = (projection * transform) * float4(in.position, 0.0f, 1.0f); | ||
| 208 | v.color = in.color; | ||
| 209 | v.pointSize = 1.0f; | ||
| 210 | return v; | ||
| 211 | } | ||
| 212 | |||
| 213 | fragment float4 SDL_Solid_fragment(SolidVertexInput in [[stage_in]], | ||
| 214 | constant ShaderConstants &c [[buffer(0)]]) | ||
| 215 | { | ||
| 216 | return GetOutputColorSimple(1.0, c.color_scale) * in.color; | ||
| 217 | } | ||
| 218 | |||
| 219 | struct CopyVertexInput | ||
| 220 | { | ||
| 221 | float2 position [[attribute(0)]]; | ||
| 222 | float4 color [[attribute(1)]]; | ||
| 223 | float2 texcoord [[attribute(2)]]; | ||
| 224 | }; | ||
| 225 | |||
| 226 | struct CopyVertexOutput | ||
| 227 | { | ||
| 228 | float4 position [[position]]; | ||
| 229 | float4 color; | ||
| 230 | float2 texcoord; | ||
| 231 | }; | ||
| 232 | |||
| 233 | vertex CopyVertexOutput SDL_Copy_vertex(CopyVertexInput in [[stage_in]], | ||
| 234 | constant float4x4 &projection [[buffer(2)]], | ||
| 235 | constant float4x4 &transform [[buffer(3)]]) | ||
| 236 | { | ||
| 237 | CopyVertexOutput v; | ||
| 238 | v.position = (projection * transform) * float4(in.position, 0.0f, 1.0f); | ||
| 239 | v.color = in.color; | ||
| 240 | v.texcoord = in.texcoord; | ||
| 241 | return v; | ||
| 242 | } | ||
| 243 | |||
| 244 | fragment float4 SDL_Copy_fragment(CopyVertexOutput vert [[stage_in]], | ||
| 245 | constant ShaderConstants &c [[buffer(0)]], | ||
| 246 | texture2d<float> tex [[texture(0)]], | ||
| 247 | sampler s [[sampler(0)]]) | ||
| 248 | { | ||
| 249 | float4 rgba = tex.sample(s, vert.texcoord); | ||
| 250 | return GetOutputColor(rgba, c) * vert.color; | ||
| 251 | } | ||
| 252 | |||
| 253 | fragment float4 SDL_YUV_fragment(CopyVertexOutput vert [[stage_in]], | ||
| 254 | constant ShaderConstants &c [[buffer(0)]], | ||
| 255 | constant YUVDecode &decode [[buffer(1)]], | ||
| 256 | texture2d<float> texY [[texture(0)]], | ||
| 257 | texture2d_array<float> texUV [[texture(1)]], | ||
| 258 | sampler s [[sampler(0)]]) | ||
| 259 | { | ||
| 260 | float3 yuv; | ||
| 261 | yuv.x = texY.sample(s, vert.texcoord).r; | ||
| 262 | yuv.y = texUV.sample(s, vert.texcoord, 0).r; | ||
| 263 | yuv.z = texUV.sample(s, vert.texcoord, 1).r; | ||
| 264 | |||
| 265 | float4 rgba; | ||
| 266 | rgba.rgb = (yuv + decode.offset) * decode.matrix; | ||
| 267 | rgba.a = 1.0; | ||
| 268 | |||
| 269 | return GetOutputColor(rgba, c) * vert.color; | ||
| 270 | } | ||
| 271 | |||
| 272 | fragment float4 SDL_NV12_fragment(CopyVertexOutput vert [[stage_in]], | ||
| 273 | constant ShaderConstants &c [[buffer(0)]], | ||
| 274 | constant YUVDecode &decode [[buffer(1)]], | ||
| 275 | texture2d<float> texY [[texture(0)]], | ||
| 276 | texture2d<float> texUV [[texture(1)]], | ||
| 277 | sampler s [[sampler(0)]]) | ||
| 278 | { | ||
| 279 | float4 rgba; | ||
| 280 | if (c.texture_type == TEXTURETYPE_NV12) { | ||
| 281 | float3 yuv; | ||
| 282 | yuv.x = texY.sample(s, vert.texcoord).r; | ||
| 283 | yuv.yz = texUV.sample(s, vert.texcoord).rg; | ||
| 284 | |||
| 285 | rgba.rgb = (yuv + decode.offset) * decode.matrix; | ||
| 286 | } else if (c.texture_type == TEXTURETYPE_NV21) { | ||
| 287 | float3 yuv; | ||
| 288 | yuv.x = texY.sample(s, vert.texcoord).r; | ||
| 289 | yuv.yz = texUV.sample(s, vert.texcoord).gr; | ||
| 290 | |||
| 291 | rgba.rgb = (yuv + decode.offset) * decode.matrix; | ||
| 292 | } else { | ||
| 293 | // Unexpected texture type, use magenta error color | ||
| 294 | rgba.rgb = float3(1.0, 0.0, 1.0); | ||
| 295 | } | ||
| 296 | rgba.a = 1.0; | ||
| 297 | |||
| 298 | return GetOutputColor(rgba, c) * vert.color; | ||
| 299 | } | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_shaders_metal_ios.h b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_ios.h new file mode 100644 index 0000000..5d04118 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_ios.h | |||
| @@ -0,0 +1,2612 @@ | |||
| 1 | const unsigned char sdl_metallib[] = { | ||
| 2 | 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 3 | 0x00, 0x00, 0x00, 0x00, 0x45, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 4 | 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x00, | ||
| 5 | 0x00, 0x00, 0x00, 0x00, 0x2f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 6 | 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x03, 0x00, 0x00, | ||
| 7 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x00, 0x00, | ||
| 9 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, | ||
| 10 | 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, | ||
| 11 | 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, | ||
| 12 | 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, | ||
| 13 | 0x60, 0x7a, 0x81, 0x65, 0xda, 0xf6, 0x14, 0xc4, 0x56, 0x47, 0x0b, 0x7a, | ||
| 14 | 0x77, 0x81, 0xf4, 0xc0, 0x01, 0xee, 0xcd, 0x26, 0x7c, 0x2d, 0x8d, 0x7b, | ||
| 15 | 0x28, 0x66, 0x63, 0x5c, 0x85, 0xe9, 0xdd, 0xb9, 0x4f, 0x46, 0x46, 0x54, | ||
| 16 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 18 | 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, | ||
| 19 | 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, 0x00, | ||
| 20 | 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, | ||
| 21 | 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, 0x59, | ||
| 22 | 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x6e, | ||
| 23 | 0xc3, 0x21, 0x35, 0x82, 0x00, 0x01, 0xe8, 0xa4, 0x27, 0xe1, 0xec, 0x73, | ||
| 24 | 0xf1, 0xe9, 0x58, 0x2e, 0x4a, 0x0d, 0xc0, 0x5a, 0x63, 0x1e, 0x7f, 0x35, | ||
| 25 | 0xf1, 0x6e, 0x35, 0x4e, 0xbf, 0x18, 0xae, 0x4f, 0x46, 0x46, 0x54, 0x18, | ||
| 26 | 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 28 | 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, | ||
| 29 | 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7a, 0x00, 0x00, 0x00, 0x4e, | ||
| 30 | 0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, | ||
| 31 | 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, | ||
| 32 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 33 | 0x00, 0x6a, 0x1d, 0x1d, 0x45, 0x2a, 0x6b, 0x07, 0x82, 0x0a, 0x87, 0xce, | ||
| 34 | 0x97, 0xa1, 0xfe, 0x31, 0x9c, 0x83, 0x91, 0x37, 0x14, 0x18, 0x48, 0x21, | ||
| 35 | 0x09, 0xd8, 0x88, 0xe6, 0x6a, 0xd7, 0xa1, 0x43, 0x12, 0x4f, 0x46, 0x46, | ||
| 36 | 0x54, 0x18, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, | ||
| 37 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x19, 0x00, 0x00, 0x00, | ||
| 38 | 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, | ||
| 39 | 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, 0x00, | ||
| 40 | 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, | ||
| 41 | 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||
| 42 | 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, | ||
| 43 | 0x20, 0x00, 0xc3, 0xd6, 0x7b, 0x88, 0x85, 0xf9, 0x2a, 0x82, 0x3a, 0xbd, | ||
| 44 | 0x11, 0xe6, 0x1e, 0x52, 0xa3, 0x10, 0xbc, 0xf6, 0x87, 0xcf, 0x2b, 0x30, | ||
| 45 | 0xb1, 0x9a, 0xa7, 0x8c, 0xf0, 0x69, 0xee, 0x5a, 0x25, 0x8c, 0x4f, 0x46, | ||
| 46 | 0x46, 0x54, 0x18, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 47 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x25, 0x00, 0x00, | ||
| 48 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, | ||
| 49 | 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x78, 0x00, | ||
| 50 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 51 | 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||
| 52 | 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, | ||
| 53 | 0x20, 0x00, 0x9f, 0x6c, 0xde, 0x3a, 0x59, 0x77, 0x6a, 0xd2, 0x35, 0x5f, | ||
| 54 | 0x27, 0x58, 0x9c, 0x4b, 0xdb, 0x9c, 0x88, 0xf7, 0xdf, 0x70, 0x9e, 0x17, | ||
| 55 | 0x60, 0xc0, 0xe8, 0x92, 0xf3, 0x9d, 0xc8, 0x6a, 0x12, 0x45, 0x4f, 0x46, | ||
| 56 | 0x46, 0x54, 0x18, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 57 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x3e, 0x00, 0x00, | ||
| 58 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, | ||
| 59 | 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, | ||
| 60 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 61 | 0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, | ||
| 62 | 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, | ||
| 63 | 0x48, 0x20, 0x00, 0xa0, 0xfa, 0x0c, 0x39, 0x0e, 0x54, 0xa2, 0xb2, 0x34, | ||
| 64 | 0x03, 0x53, 0x34, 0x18, 0x63, 0x46, 0x2e, 0x1a, 0x02, 0x79, 0x8d, 0x88, | ||
| 65 | 0x29, 0x32, 0xb9, 0xcc, 0xcd, 0x6b, 0xaa, 0xd8, 0x7a, 0x01, 0xd6, 0x4f, | ||
| 66 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 67 | 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x5a, 0x00, | ||
| 68 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, | ||
| 69 | 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x29, | ||
| 70 | 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x15, 0x00, 0x02, 0x00, 0x70, | ||
| 71 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, 0x6f, | ||
| 72 | 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x56, 0x41, 0x54, 0x59, 0x04, 0x00, | ||
| 73 | 0x02, 0x00, 0x04, 0x06, 0x45, 0x4e, 0x44, 0x54, 0x35, 0x00, 0x00, 0x00, | ||
| 74 | 0x56, 0x41, 0x54, 0x54, 0x20, 0x00, 0x03, 0x00, 0x70, 0x6f, 0x73, 0x69, | ||
| 75 | 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 76 | 0x00, 0x01, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, | ||
| 77 | 0x02, 0x80, 0x56, 0x41, 0x54, 0x59, 0x05, 0x00, 0x03, 0x00, 0x04, 0x06, | ||
| 78 | 0x04, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 79 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 80 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 81 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 82 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 83 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 84 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 85 | 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 86 | 0x00, 0xac, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 87 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 88 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 89 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 90 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 91 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 92 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 93 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, | ||
| 94 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 95 | 0x00, 0x79, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 96 | 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, | ||
| 97 | 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, | ||
| 98 | 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, | ||
| 99 | 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 100 | 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, | ||
| 101 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, | ||
| 102 | 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, 0x00, 0x06, 0x77, 0x78, | ||
| 103 | 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, 0xa0, 0x87, 0x74, 0x70, | ||
| 104 | 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, | ||
| 105 | 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, | ||
| 106 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, | ||
| 107 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 108 | 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, | ||
| 109 | 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, | ||
| 110 | 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, | ||
| 111 | 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, | ||
| 112 | 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, | ||
| 113 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 114 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 115 | 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, | ||
| 116 | 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 117 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, | ||
| 118 | 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, | ||
| 119 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 120 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 121 | 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, | ||
| 122 | 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, | ||
| 123 | 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, | ||
| 124 | 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, | ||
| 125 | 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, | ||
| 126 | 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, | ||
| 127 | 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, | ||
| 128 | 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 129 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x6c, 0xc2, 0x00, 0x2c, 0x40, | ||
| 130 | 0x35, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, | ||
| 131 | 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, 0x84, 0x03, | ||
| 132 | 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0x61, 0x1b, 0x08, 0x60, 0x01, | ||
| 133 | 0xaa, 0x21, 0x1c, 0xd2, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, | ||
| 134 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1c, | ||
| 135 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 136 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 137 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 138 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 139 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 140 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x60, 0x87, 0x10, 0xc0, | ||
| 141 | 0x30, 0x82, 0x00, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 142 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 143 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 144 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x52, 0x88, | ||
| 145 | 0x11, 0x8c, 0xa1, 0x33, 0x10, 0x30, 0x47, 0x00, 0x06, 0x29, 0xa0, 0xe6, | ||
| 146 | 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00, | ||
| 147 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 148 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 149 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 150 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 151 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 152 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 153 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 154 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 155 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 156 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 157 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 158 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 159 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 160 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 161 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 162 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 163 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 164 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 165 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 166 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 167 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 168 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 169 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 170 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 171 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 172 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 173 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 174 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 175 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 176 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, | ||
| 177 | 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, | ||
| 178 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, | ||
| 179 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x52, 0x25, 0x30, 0x02, | ||
| 180 | 0x50, 0x80, 0x01, 0x45, 0x50, 0x20, 0x65, 0x50, 0x08, 0x05, 0x41, 0x6c, | ||
| 181 | 0x04, 0x80, 0xd6, 0x58, 0x82, 0x24, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 182 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, | ||
| 183 | 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x86, 0x42, | ||
| 184 | 0x24, 0xc0, 0xa2, 0x50, 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, | ||
| 185 | 0xd3, 0x2b, 0x1b, 0x62, 0x28, 0x41, 0x22, 0x28, 0x07, 0xe3, 0x20, 0x08, | ||
| 186 | 0x0e, 0x8e, 0xad, 0x0c, 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, | ||
| 187 | 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, | ||
| 188 | 0x85, 0x06, 0x86, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, | ||
| 189 | 0xac, 0x65, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, | ||
| 190 | 0x88, 0x90, 0x10, 0x43, 0x0c, 0x25, 0x50, 0x10, 0x45, 0x60, 0xd1, 0x54, | ||
| 191 | 0x46, 0x17, 0xc6, 0x36, 0x04, 0x49, 0x0e, 0x25, 0x50, 0x02, 0x45, 0xe0, | ||
| 192 | 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, | ||
| 193 | 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, | ||
| 194 | 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 195 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 196 | 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, | ||
| 197 | 0x43, 0x84, 0x64, 0x21, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, | ||
| 198 | 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, | ||
| 199 | 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, | ||
| 200 | 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x92, 0x86, 0x4c, 0x58, 0x9a, | ||
| 201 | 0x9c, 0x0b, 0xdc, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0x1b, 0xa3, 0xb0, | ||
| 202 | 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, | ||
| 203 | 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x64, | ||
| 204 | 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xdc, 0xc2, 0xda, 0xca, | ||
| 205 | 0x88, 0xc0, 0xbd, 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x51, 0x92, | ||
| 206 | 0x27, 0x81, 0x92, 0x28, 0x91, 0x92, 0x89, 0x51, 0x58, 0x9a, 0x9c, 0x8b, | ||
| 207 | 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0xde, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, | ||
| 208 | 0x1d, 0xad, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, 0x94, | ||
| 209 | 0x9a, 0xb1, 0x37, 0xb6, 0x37, 0x39, 0x22, 0x3b, 0x9a, 0x2f, 0xb3, 0x14, | ||
| 210 | 0x16, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x43, 0x98, 0xa4, 0x4a, 0xac, 0x04, | ||
| 211 | 0x4a, 0xa2, 0x44, 0x4a, 0x2e, 0x3a, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, | ||
| 212 | 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0xcc, 0xd8, 0xde, | ||
| 213 | 0xc2, 0xe8, 0x98, 0xc0, 0xbd, 0xa5, 0xb9, 0xd1, 0x4d, 0xa5, 0xe9, 0x95, | ||
| 214 | 0x0d, 0x51, 0x92, 0x2c, 0x81, 0x12, 0x2d, 0x91, 0x92, 0x6d, 0x88, 0x91, | ||
| 215 | 0x50, 0x09, 0x96, 0x70, 0x84, 0xc2, 0xd2, 0xe4, 0x5c, 0xec, 0xca, 0xe4, | ||
| 216 | 0xe8, 0xca, 0xf0, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x28, 0x85, 0xa5, | ||
| 217 | 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, | ||
| 218 | 0xb9, 0x91, 0x95, 0xe1, 0xd1, 0x3b, 0x2b, 0x73, 0x2b, 0x93, 0x0b, 0xa3, | ||
| 219 | 0x2b, 0x23, 0x43, 0xf9, 0xfa, 0x0a, 0x4b, 0x93, 0xfb, 0x82, 0x63, 0x0b, | ||
| 220 | 0x1b, 0x2b, 0x43, 0x7b, 0x63, 0x23, 0x2b, 0x93, 0xfb, 0xfa, 0x4a, 0xa1, | ||
| 221 | 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x33, 0x84, 0x52, 0x84, 0xc4, 0x4b, | ||
| 222 | 0x3e, 0x45, 0x50, 0x82, 0x04, 0x0c, 0x12, 0x28, 0x09, 0x83, 0x44, 0x4a, | ||
| 223 | 0xa6, 0x21, 0x94, 0x12, 0x24, 0x5e, 0xf2, 0x29, 0x81, 0x12, 0x24, 0x60, | ||
| 224 | 0x90, 0x40, 0x49, 0x94, 0x48, 0xc9, 0x45, 0x25, 0x2c, 0x4d, 0xce, 0x45, | ||
| 225 | 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, | ||
| 226 | 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x91, 0xb0, | ||
| 227 | 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x46, 0x61, 0x69, 0x72, 0x2e, | ||
| 228 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, | ||
| 229 | 0x65, 0xbc, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, | ||
| 230 | 0xe0, 0xca, 0xbe, 0xc2, 0xd8, 0xd2, 0xce, 0xdc, 0xbe, 0xe6, 0xd2, 0xf4, | ||
| 231 | 0xca, 0x88, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0xe0, 0xd1, 0x50, 0x81, | ||
| 232 | 0x93, 0x7b, 0x53, 0x2b, 0x1b, 0xa3, 0x4b, 0x7b, 0x73, 0x1b, 0x02, 0x06, | ||
| 233 | 0x0a, 0x91, 0x90, 0x41, 0x52, 0x06, 0xca, 0x90, 0x7c, 0x0a, 0xa1, 0x04, | ||
| 234 | 0x89, 0x19, 0x24, 0x67, 0xa0, 0x0c, 0x09, 0x1a, 0x28, 0x45, 0x02, 0x25, | ||
| 235 | 0x69, 0x90, 0x48, 0x89, 0x1a, 0x30, 0xa1, 0x93, 0x0b, 0x73, 0x9b, 0x33, | ||
| 236 | 0x7b, 0x93, 0x6b, 0x1b, 0x02, 0x06, 0x8a, 0x91, 0x90, 0x41, 0x52, 0x06, | ||
| 237 | 0xca, 0x90, 0x7c, 0x8a, 0xa1, 0x04, 0x89, 0x19, 0x24, 0x67, 0xa0, 0x0c, | ||
| 238 | 0x09, 0x1a, 0x28, 0x45, 0x02, 0x25, 0x69, 0x90, 0x48, 0x09, 0x1b, 0x0c, | ||
| 239 | 0x41, 0x12, 0x31, 0x48, 0xc6, 0x20, 0x59, 0x83, 0xa4, 0x0d, 0x86, 0x18, | ||
| 240 | 0x08, 0x90, 0x74, 0x89, 0x1b, 0xf0, 0x79, 0x6b, 0x73, 0x4b, 0x83, 0x7b, | ||
| 241 | 0xa3, 0x2b, 0x73, 0xa3, 0x03, 0x19, 0x43, 0x0b, 0x93, 0xe3, 0x33, 0x95, | ||
| 242 | 0xd6, 0x06, 0xc7, 0x56, 0x06, 0x32, 0xb4, 0xb2, 0x02, 0x42, 0x25, 0x14, | ||
| 243 | 0x14, 0x34, 0x44, 0x48, 0xe2, 0x60, 0x88, 0x91, 0xc0, 0x41, 0x22, 0x07, | ||
| 244 | 0x4c, 0x32, 0xc4, 0x48, 0xe6, 0x20, 0x99, 0x03, 0x26, 0xa1, 0x18, 0x84, | ||
| 245 | 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, | ||
| 246 | 0xc1, 0x95, 0xcd, 0xa1, 0x4c, 0x11, 0x31, 0x7d, 0x4d, 0xbd, 0xb1, 0xa5, | ||
| 247 | 0x91, 0x7d, 0xd9, 0x95, 0xc9, 0xd1, 0x95, 0xe1, 0xa5, 0x0c, 0x21, 0x12, | ||
| 248 | 0x3b, 0x48, 0xea, 0x80, 0x56, 0x58, 0x9a, 0x5c, 0x4b, 0x18, 0x5b, 0x5a, | ||
| 249 | 0xd8, 0x5c, 0xcb, 0xdc, 0xd8, 0x1b, 0x5c, 0x59, 0x4b, 0x98, 0xdc, 0x19, | ||
| 250 | 0xca, 0x4c, 0xca, 0x10, 0x23, 0xc1, 0x83, 0xc4, 0x0e, 0x92, 0x3b, 0x18, | ||
| 251 | 0x22, 0x24, 0x78, 0x40, 0x2b, 0x2c, 0x4d, 0xae, 0x25, 0x8c, 0x2d, 0x2d, | ||
| 252 | 0x6c, 0xae, 0x65, 0x6e, 0xec, 0x0d, 0xae, 0xac, 0x25, 0x4c, 0xee, 0x0c, | ||
| 253 | 0x45, 0x26, 0x65, 0x88, 0x91, 0xec, 0x41, 0x62, 0x07, 0x89, 0x1e, 0x0c, | ||
| 254 | 0x11, 0x92, 0x3d, 0x18, 0x11, 0xb1, 0x03, 0x3b, 0xd8, 0x43, 0x3b, 0xb8, | ||
| 255 | 0x41, 0x3b, 0xbc, 0x03, 0x39, 0xd4, 0x03, 0x3b, 0x94, 0x83, 0x1b, 0x98, | ||
| 256 | 0x03, 0x3b, 0x84, 0xc3, 0x39, 0xcc, 0xc3, 0x14, 0x21, 0x18, 0x46, 0x28, | ||
| 257 | 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 258 | 0xee, 0x40, 0x0f, 0x53, 0x82, 0x62, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, | ||
| 259 | 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, | ||
| 260 | 0x53, 0x02, 0x63, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, | ||
| 261 | 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, | ||
| 262 | 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, | ||
| 263 | 0x40, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, | ||
| 264 | 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, | ||
| 265 | 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x65, 0x50, 0x18, 0x67, | ||
| 266 | 0x84, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, | ||
| 267 | 0xf4, 0x50, 0x0e, 0xf8, 0x30, 0x25, 0x78, 0x03, 0x00, 0x79, 0x18, 0x00, | ||
| 268 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 269 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 270 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 271 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 272 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 273 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 274 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 275 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 276 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 277 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 278 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 279 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 280 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 281 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 282 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 283 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 284 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 285 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 286 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 287 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 288 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 289 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 290 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 291 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 292 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 293 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 294 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 295 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 296 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 297 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 298 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 299 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 300 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 301 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 302 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 303 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 304 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 305 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 306 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 307 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 308 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 309 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 310 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 311 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 312 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 313 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 314 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 315 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 316 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 317 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 318 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 319 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 320 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 321 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 322 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 323 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 324 | 0x00, 0x06, 0x00, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x45, | ||
| 325 | 0x44, 0x13, 0x71, 0x01, 0x00, 0x61, 0x20, 0x00, 0x00, 0x5c, 0x00, 0x00, | ||
| 326 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, | ||
| 327 | 0x00, 0xe4, 0xc6, 0x22, 0x86, 0x61, 0x18, 0xc6, 0x22, 0x04, 0x41, 0x10, | ||
| 328 | 0xc6, 0x22, 0x82, 0x20, 0x08, 0x46, 0x00, 0x88, 0x15, 0x41, 0x09, 0x94, | ||
| 329 | 0x01, 0x8d, 0x19, 0x00, 0x12, 0x33, 0x00, 0x14, 0x66, 0x00, 0x66, 0x00, | ||
| 330 | 0x08, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x00, 0xe3, 0x11, 0x8d, | ||
| 331 | 0x94, 0x49, 0x14, 0x94, 0xf1, 0x08, 0x88, 0xda, 0x28, 0x0a, 0xca, 0x20, | ||
| 332 | 0xc3, 0x70, 0x34, 0x26, 0x04, 0xf2, 0x19, 0x8f, 0xa0, 0xb0, 0xaf, 0xa1, | ||
| 333 | 0xa0, 0x0c, 0x32, 0x1c, 0x8a, 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, | ||
| 334 | 0x8c, 0x47, 0x64, 0x1d, 0x19, 0x4c, 0x14, 0x94, 0x41, 0x06, 0xe6, 0xc1, | ||
| 335 | 0x4c, 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, 0x08, 0x4f, 0x0c, 0xd2, | ||
| 336 | 0xc0, 0xa2, 0xa0, 0x0c, 0x32, 0x44, 0x94, 0x67, 0x42, 0x20, 0x1f, 0x2b, | ||
| 337 | 0x02, 0xf8, 0x8c, 0x47, 0x88, 0xc1, 0x19, 0xb8, 0x01, 0x47, 0x41, 0x19, | ||
| 338 | 0x64, 0x08, 0x34, 0x30, 0xb0, 0xa0, 0x92, 0xcf, 0x20, 0xc3, 0xb0, 0x8d, | ||
| 339 | 0x81, 0x05, 0x93, 0x7c, 0x6c, 0x08, 0xe0, 0x33, 0xc8, 0x60, 0x78, 0x67, | ||
| 340 | 0x60, 0x41, 0x24, 0x1f, 0x1b, 0x02, 0xf8, 0x0c, 0x32, 0x24, 0x61, 0xb0, | ||
| 341 | 0x06, 0x16, 0x3c, 0xf2, 0xb1, 0x21, 0x80, 0xcf, 0x78, 0xc4, 0x1b, 0xd0, | ||
| 342 | 0xc1, 0x1e, 0xa0, 0x01, 0x05, 0x65, 0x90, 0x21, 0x38, 0x83, 0x36, 0xb0, | ||
| 343 | 0x40, 0x0c, 0xe4, 0x33, 0xc8, 0x30, 0xa0, 0x01, 0x1c, 0x58, 0x00, 0x06, | ||
| 344 | 0xf2, 0x19, 0x64, 0x28, 0xd4, 0x60, 0x0e, 0x2c, 0xe8, 0xe4, 0x33, 0xc8, | ||
| 345 | 0x70, 0xb0, 0x81, 0x1d, 0x58, 0xa0, 0xc9, 0x67, 0x90, 0x81, 0x0f, 0xe2, | ||
| 346 | 0xa0, 0x0e, 0x2c, 0x0b, 0xe4, 0x33, 0xc8, 0xe0, 0x07, 0x73, 0x80, 0x07, | ||
| 347 | 0xe6, 0x04, 0xf2, 0xb1, 0x64, 0x80, 0x8f, 0x05, 0x0c, 0x7c, 0x2c, 0x48, | ||
| 348 | 0xe0, 0x63, 0x01, 0x02, 0x1f, 0x0b, 0x0a, 0xf8, 0xcc, 0x36, 0xe4, 0x41, | ||
| 349 | 0x00, 0xcc, 0x36, 0x04, 0xa5, 0x10, 0xcc, 0x36, 0x04, 0x78, 0x20, 0x64, | ||
| 350 | 0x10, 0x10, 0x03, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, | ||
| 351 | 0xa0, 0x83, 0x23, 0x0f, 0x10, 0x3e, 0xd8, 0x72, 0x0c, 0x01, 0x1d, 0x1c, | ||
| 352 | 0x7c, 0x80, 0xe4, 0xc1, 0x96, 0xe3, 0x08, 0xe8, 0xe0, 0xe0, 0x03, 0x24, | ||
| 353 | 0x0f, 0xb6, 0x1c, 0x4c, 0x40, 0x07, 0x07, 0x1f, 0x20, 0x79, 0xb0, 0xe5, | ||
| 354 | 0x88, 0x02, 0x3a, 0x38, 0xf8, 0x00, 0xc9, 0x83, 0x2d, 0x87, 0x15, 0xd0, | ||
| 355 | 0xc1, 0x91, 0x07, 0x08, 0x1f, 0x6c, 0x39, 0xc6, 0x20, 0xa0, 0x83, 0x23, | ||
| 356 | 0x0f, 0x10, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 357 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 358 | 0x00, 0xbc, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 359 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 360 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 361 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 362 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 363 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 364 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 365 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, | ||
| 366 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 367 | 0x00, 0x79, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 368 | 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, | ||
| 369 | 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, | ||
| 370 | 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, | ||
| 371 | 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 372 | 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, | ||
| 373 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, | ||
| 374 | 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, 0x00, 0x06, 0x77, 0x78, | ||
| 375 | 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, 0xa0, 0x87, 0x74, 0x70, | ||
| 376 | 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, | ||
| 377 | 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, | ||
| 378 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, | ||
| 379 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 380 | 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, | ||
| 381 | 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, | ||
| 382 | 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, | ||
| 383 | 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, | ||
| 384 | 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, | ||
| 385 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 386 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 387 | 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, | ||
| 388 | 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 389 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, | ||
| 390 | 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, | ||
| 391 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 392 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 393 | 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, | ||
| 394 | 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, | ||
| 395 | 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, | ||
| 396 | 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, | ||
| 397 | 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, | ||
| 398 | 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, | ||
| 399 | 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, | ||
| 400 | 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 401 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x6c, 0x02, 0x01, 0x2c, 0x40, | ||
| 402 | 0x35, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, | ||
| 403 | 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, 0x84, 0x03, | ||
| 404 | 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0x61, 0x1b, 0x0a, 0x60, 0x01, | ||
| 405 | 0xaa, 0x21, 0x1c, 0xd2, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, | ||
| 406 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1c, | ||
| 407 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 408 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 409 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 410 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 411 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 412 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 413 | 0x76, 0x08, 0x41, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 414 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 415 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 416 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x62, 0x0c, | ||
| 417 | 0x11, 0x84, 0x31, 0x74, 0x06, 0x02, 0xe6, 0x08, 0xc0, 0x20, 0x05, 0xd4, | ||
| 418 | 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x04, 0xc2, 0x30, 0x02, 0xa1, 0x8c, 0x00, | ||
| 419 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 420 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 421 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 422 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 423 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 424 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 425 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 426 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 427 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 428 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 429 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 430 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 431 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 432 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 433 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 434 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 435 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 436 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 437 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 438 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 439 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 440 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 441 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 442 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 443 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 444 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 445 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 446 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 447 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 448 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, | ||
| 449 | 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, | ||
| 450 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, | ||
| 451 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x52, 0x25, 0x50, 0x04, | ||
| 452 | 0x23, 0x00, 0x05, 0x18, 0x50, 0x08, 0x65, 0x50, 0x20, 0x05, 0x41, 0x6c, | ||
| 453 | 0x04, 0x80, 0xd6, 0x58, 0x82, 0x24, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 454 | 0x00, 0x06, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, | ||
| 455 | 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x86, 0x22, | ||
| 456 | 0x24, 0xc0, 0xa2, 0x50, 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, | ||
| 457 | 0xd3, 0x2b, 0x1b, 0x62, 0x28, 0x41, 0x22, 0x28, 0x05, 0xe3, 0x20, 0x08, | ||
| 458 | 0x0e, 0x8e, 0xad, 0x0c, 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, | ||
| 459 | 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, | ||
| 460 | 0x85, 0x06, 0x86, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, | ||
| 461 | 0xac, 0x65, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, | ||
| 462 | 0x88, 0x90, 0x10, 0x43, 0x0c, 0x25, 0x50, 0x10, 0x65, 0x60, 0xd1, 0x54, | ||
| 463 | 0x46, 0x17, 0xc6, 0x36, 0x04, 0x49, 0x0e, 0x25, 0x50, 0x02, 0x65, 0xe0, | ||
| 464 | 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, | ||
| 465 | 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, | ||
| 466 | 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 467 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 468 | 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, | ||
| 469 | 0x43, 0x84, 0x64, 0x21, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, | ||
| 470 | 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, | ||
| 471 | 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, | ||
| 472 | 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x92, 0x86, 0x4c, 0x58, 0x9a, | ||
| 473 | 0x9c, 0x0b, 0xdc, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0x1b, 0xa3, 0xb0, | ||
| 474 | 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, | ||
| 475 | 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x64, | ||
| 476 | 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xdc, 0xc2, 0xda, 0xca, | ||
| 477 | 0x88, 0xc0, 0xbd, 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x51, 0x92, | ||
| 478 | 0x27, 0x81, 0x92, 0x28, 0x91, 0x92, 0x89, 0x51, 0x58, 0x9a, 0x9c, 0x8b, | ||
| 479 | 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0xde, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, | ||
| 480 | 0x1d, 0xad, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, 0x94, | ||
| 481 | 0x9a, 0xb1, 0x37, 0xb6, 0x37, 0x39, 0x22, 0x3b, 0x9a, 0x2f, 0xb3, 0x14, | ||
| 482 | 0x16, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x43, 0x98, 0xa4, 0x4a, 0xac, 0x04, | ||
| 483 | 0x4a, 0xa2, 0x44, 0x4a, 0x2e, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, | ||
| 484 | 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, | ||
| 485 | 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x34, 0xcc, 0xd8, 0xde, 0xc2, | ||
| 486 | 0xe8, 0x64, 0x88, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x0d, | ||
| 487 | 0x61, 0x92, 0x2a, 0xc9, 0x12, 0x28, 0xd1, 0x12, 0x29, 0xd9, 0x86, 0x18, | ||
| 488 | 0x09, 0x95, 0x60, 0x09, 0x47, 0x28, 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, | ||
| 489 | 0x8e, 0xae, 0x0c, 0xef, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0x52, 0x58, | ||
| 490 | 0x9a, 0x9c, 0x0b, 0xdb, 0xdb, 0x58, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0x57, | ||
| 491 | 0x9a, 0x1b, 0x59, 0x19, 0x1e, 0xbd, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, | ||
| 492 | 0xba, 0x32, 0x32, 0x94, 0xaf, 0xaf, 0xb0, 0x34, 0xb9, 0x2f, 0x38, 0xb6, | ||
| 493 | 0xb0, 0xb1, 0x32, 0xb4, 0x37, 0x36, 0xb2, 0x32, 0xb9, 0xaf, 0xaf, 0x94, | ||
| 494 | 0x21, 0x94, 0x32, 0x24, 0x5e, 0xf2, 0x29, 0x83, 0x12, 0x24, 0x60, 0x90, | ||
| 495 | 0x40, 0x89, 0x96, 0x48, 0xc9, 0x34, 0x84, 0x52, 0x82, 0xc4, 0x4b, 0x3e, | ||
| 496 | 0x25, 0x50, 0x82, 0x04, 0x0c, 0x12, 0x28, 0x89, 0x12, 0x29, 0xb9, 0x86, | ||
| 497 | 0x50, 0x8a, 0x90, 0x78, 0xc9, 0xa7, 0x08, 0x4a, 0x90, 0x80, 0x41, 0x02, | ||
| 498 | 0x25, 0x5a, 0x22, 0x25, 0x1b, 0x95, 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a, | ||
| 499 | 0x33, 0xb3, 0x32, 0x39, 0x3e, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, | ||
| 500 | 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x44, 0xc2, 0xd2, 0xe4, | ||
| 501 | 0x5c, 0xe4, 0xca, 0xc2, 0xc8, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, | ||
| 502 | 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1, | ||
| 503 | 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, | ||
| 504 | 0xfb, 0x0a, 0x63, 0x4b, 0x3b, 0x73, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x23, | ||
| 505 | 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x83, 0x47, 0x43, 0x05, 0x4e, 0xee, | ||
| 506 | 0x4d, 0xad, 0x6c, 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x18, 0x28, 0x46, | ||
| 507 | 0x42, 0x06, 0x49, 0x19, 0x28, 0x44, 0xf2, 0x29, 0x82, 0x12, 0x24, 0x66, | ||
| 508 | 0x90, 0x9c, 0x81, 0x42, 0x24, 0x68, 0xa0, 0x1c, 0x09, 0x94, 0xa4, 0x41, | ||
| 509 | 0x22, 0x25, 0x6a, 0xc0, 0x84, 0x4e, 0x2e, 0xcc, 0x6d, 0xce, 0xec, 0x4d, | ||
| 510 | 0xae, 0x6d, 0x08, 0x18, 0x28, 0x45, 0x42, 0x06, 0x49, 0x19, 0x28, 0x44, | ||
| 511 | 0xf2, 0x29, 0x86, 0x12, 0x24, 0x66, 0x90, 0x9c, 0x81, 0x42, 0x24, 0x68, | ||
| 512 | 0xa0, 0x1c, 0x09, 0x94, 0xa4, 0x41, 0x22, 0x25, 0x6c, 0x30, 0x44, 0x49, | ||
| 513 | 0xc2, 0x20, 0x11, 0x83, 0x64, 0x0c, 0x92, 0x35, 0x48, 0xda, 0x60, 0x88, | ||
| 514 | 0x81, 0x00, 0x49, 0x97, 0xb8, 0x01, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, | ||
| 515 | 0x37, 0xba, 0x32, 0x37, 0x3a, 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, | ||
| 516 | 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, | ||
| 517 | 0x41, 0x41, 0x43, 0x84, 0x24, 0x0e, 0x86, 0x18, 0x09, 0x1c, 0x24, 0x72, | ||
| 518 | 0xc0, 0x24, 0x43, 0x8c, 0x64, 0x0e, 0x92, 0x39, 0x60, 0x12, 0x86, 0x41, | ||
| 519 | 0x58, 0x9a, 0x5c, 0x4b, 0x18, 0x5b, 0x5a, 0xd8, 0x5c, 0xcb, 0xdc, 0xd8, | ||
| 520 | 0x1b, 0x5c, 0xd9, 0x1c, 0xca, 0x14, 0x11, 0xd3, 0xd7, 0xd0, 0x1b, 0x5c, | ||
| 521 | 0xde, 0x97, 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0x5e, 0xca, 0x10, 0x22, 0xb1, | ||
| 522 | 0x83, 0xa4, 0x0e, 0x68, 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, | ||
| 523 | 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0x84, 0xc9, 0x9d, 0xa1, | ||
| 524 | 0xd0, 0xa4, 0x0c, 0x31, 0x12, 0x3c, 0x48, 0xec, 0x20, 0xb9, 0x83, 0x21, | ||
| 525 | 0x42, 0x82, 0x07, 0xb4, 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, 0xd2, 0xc2, | ||
| 526 | 0xe6, 0x5a, 0xe6, 0xc6, 0xde, 0xe0, 0xca, 0x5a, 0xc2, 0xe4, 0xce, 0x50, | ||
| 527 | 0x66, 0x52, 0x86, 0x18, 0xc9, 0x1e, 0x24, 0x76, 0x90, 0xe8, 0xc1, 0x10, | ||
| 528 | 0x21, 0xd9, 0x83, 0x11, 0x11, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, | ||
| 529 | 0xb4, 0xc3, 0x3b, 0x90, 0x43, 0x3d, 0xb0, 0x43, 0x39, 0xb8, 0x81, 0x39, | ||
| 530 | 0xb0, 0x43, 0x38, 0x9c, 0xc3, 0x3c, 0x4c, 0x11, 0x82, 0x61, 0x84, 0xc2, | ||
| 531 | 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, | ||
| 532 | 0x0e, 0xf4, 0x30, 0x25, 0x28, 0x46, 0x2c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, | ||
| 533 | 0x06, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, | ||
| 534 | 0x25, 0x30, 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xec, 0x10, | ||
| 535 | 0x0e, 0xee, 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, 0x50, 0x0e, 0xbf, 0x60, | ||
| 536 | 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, | ||
| 537 | 0x64, 0xc4, 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x30, 0x0e, 0xef, 0xd0, | ||
| 538 | 0x0e, 0xf0, 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, 0xf0, 0x0e, 0xf0, 0x40, | ||
| 539 | 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, 0x06, 0x85, 0x71, 0x46, | ||
| 540 | 0x28, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6, 0x50, 0x0e, 0xf2, 0x40, | ||
| 541 | 0x0f, 0xe5, 0x80, 0x0f, 0x53, 0x82, 0x37, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 542 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 543 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 544 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 545 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 546 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 547 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 548 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 549 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 550 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 551 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 552 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 553 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 554 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 555 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 556 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 557 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 558 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 559 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 560 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 561 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 562 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 563 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 564 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 565 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 566 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 567 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 568 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 569 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 570 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 571 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 572 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 573 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 574 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 575 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 576 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 577 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 578 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 579 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 580 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 581 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 582 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 583 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 584 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 585 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 586 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 587 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 588 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 589 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 590 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 591 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 592 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 593 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 594 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 595 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 596 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 597 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 598 | 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x15, 0x11, | ||
| 599 | 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00, | ||
| 600 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 601 | 0x00, 0xe4, 0xc6, 0x22, 0x86, 0x61, 0x18, 0xc6, 0x22, 0x04, 0x41, 0x10, | ||
| 602 | 0xc6, 0x22, 0x82, 0x20, 0x08, 0x46, 0x00, 0x88, 0x95, 0x40, 0x19, 0x14, | ||
| 603 | 0x01, 0x8d, 0x19, 0x00, 0x12, 0x33, 0x00, 0x14, 0x66, 0x00, 0x66, 0x00, | ||
| 604 | 0x00, 0xe3, 0x11, 0x8c, 0x84, 0x49, 0x14, 0x94, 0xf1, 0x88, 0x87, 0xd2, | ||
| 605 | 0x28, 0x0a, 0xca, 0x20, 0xc3, 0x60, 0x30, 0x26, 0x04, 0xf2, 0x19, 0x8f, | ||
| 606 | 0x98, 0x30, 0xaf, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x49, 0x64, 0x42, 0x20, | ||
| 607 | 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x60, 0xdd, 0x18, 0x40, 0x14, 0x94, | ||
| 608 | 0x41, 0x06, 0xc6, 0xb9, 0x4c, 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, | ||
| 609 | 0x88, 0x4e, 0x0c, 0xd0, 0xc0, 0xa2, 0xa0, 0x0c, 0x32, 0x44, 0x53, 0x67, | ||
| 610 | 0x42, 0x20, 0x1f, 0x2b, 0x02, 0xf8, 0x8c, 0x47, 0x84, 0xc1, 0x19, 0xb4, | ||
| 611 | 0x01, 0x47, 0x41, 0x19, 0x64, 0x08, 0xb2, 0xcf, 0x82, 0x4a, 0x3e, 0x83, | ||
| 612 | 0x0c, 0x83, 0x26, 0x06, 0x16, 0x4c, 0xf2, 0xb1, 0x21, 0x80, 0xcf, 0x20, | ||
| 613 | 0x83, 0xd1, 0x99, 0x81, 0x05, 0x91, 0x7c, 0x6c, 0x08, 0xe0, 0x33, 0xc8, | ||
| 614 | 0x90, 0x80, 0x81, 0x1a, 0x58, 0xf0, 0xc8, 0xc7, 0x86, 0x00, 0x3e, 0xe3, | ||
| 615 | 0x11, 0x6e, 0x40, 0x07, 0x7a, 0x80, 0x06, 0x14, 0x94, 0x41, 0x86, 0xc0, | ||
| 616 | 0x0c, 0xd8, 0xc0, 0x02, 0x31, 0x90, 0xcf, 0x20, 0xc3, 0x70, 0x06, 0x6f, | ||
| 617 | 0x60, 0x01, 0x18, 0xc8, 0x67, 0x90, 0xa1, 0x48, 0x03, 0x39, 0xb0, 0xa0, | ||
| 618 | 0x93, 0xcf, 0x20, 0xc3, 0xb1, 0x06, 0x75, 0x60, 0x81, 0x26, 0x9f, 0x41, | ||
| 619 | 0x06, 0x3e, 0x78, 0x03, 0x3a, 0xb0, 0x2c, 0x90, 0xcf, 0x20, 0x83, 0x1f, | ||
| 620 | 0xc4, 0xc1, 0x1d, 0x98, 0x13, 0xc8, 0xc7, 0x92, 0x01, 0x3e, 0x16, 0x30, | ||
| 621 | 0xf0, 0xb1, 0x20, 0x81, 0x8f, 0x05, 0x08, 0x7c, 0x2c, 0x28, 0xe0, 0x33, | ||
| 622 | 0xdb, 0x90, 0x07, 0x01, 0x30, 0xdb, 0x10, 0x94, 0x42, 0x30, 0xdb, 0x10, | ||
| 623 | 0x94, 0x82, 0x90, 0x41, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 624 | 0x00, 0x5b, 0x8e, 0x20, 0xa0, 0x83, 0x23, 0x0f, 0x10, 0x3e, 0xd8, 0x72, | ||
| 625 | 0x0c, 0x01, 0x1d, 0x1c, 0x7c, 0x80, 0xe4, 0xc1, 0x96, 0xe3, 0x08, 0xe8, | ||
| 626 | 0xe0, 0xe0, 0x03, 0x24, 0x0f, 0xb6, 0x1c, 0x4c, 0x40, 0x07, 0x07, 0x1f, | ||
| 627 | 0x20, 0x79, 0xb0, 0xe5, 0x88, 0x02, 0x3a, 0x38, 0xf8, 0x00, 0xc9, 0x83, | ||
| 628 | 0x2d, 0x87, 0x15, 0xd0, 0xc1, 0x91, 0x07, 0x08, 0x1f, 0x6c, 0x39, 0xc6, | ||
| 629 | 0x20, 0xa0, 0x83, 0x23, 0x0f, 0x10, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 630 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 631 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 632 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xfd, 0x02, 0x00, | ||
| 633 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 634 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 635 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 636 | 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, | ||
| 637 | 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, | ||
| 638 | 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, | ||
| 639 | 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, | ||
| 640 | 0x00, 0x51, 0x18, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 641 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x8a, 0x08, 0x07, 0x78, | ||
| 642 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 643 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 644 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 645 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 646 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 647 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 648 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 649 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 650 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 651 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 652 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 653 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 654 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 655 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 656 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 657 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 658 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 659 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 660 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 661 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 662 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 663 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 664 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 665 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 666 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 667 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 668 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 669 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 670 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 671 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 672 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 673 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 674 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x6c, | ||
| 675 | 0xc2, 0x00, 0x2c, 0x40, 0x35, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, | ||
| 676 | 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, | ||
| 677 | 0x43, 0x1b, 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0x00, 0x00, | ||
| 678 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, | ||
| 679 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, | ||
| 680 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, | ||
| 681 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, | ||
| 682 | 0x4c, 0x10, 0x3c, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 683 | 0x67, 0x49, 0x53, 0x44, 0x09, 0x93, 0xcf, 0x1e, 0xc0, 0x40, 0x44, 0x9c, | ||
| 684 | 0xd3, 0x48, 0x13, 0xd0, 0x4c, 0x12, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, | ||
| 685 | 0x11, 0x06, 0xa1, 0x10, 0x21, 0x41, 0x54, 0x03, 0x01, 0x73, 0x04, 0x60, | ||
| 686 | 0x90, 0x02, 0x38, 0x47, 0x00, 0x0a, 0x83, 0x08, 0x80, 0x30, 0x8c, 0x30, | ||
| 687 | 0x00, 0xc3, 0x08, 0x04, 0x32, 0x02, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, | ||
| 688 | 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, | ||
| 689 | 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, | ||
| 690 | 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, 0x0e, 0x6d, 0x00, 0x0f, | ||
| 691 | 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 692 | 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, | ||
| 693 | 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, | ||
| 694 | 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, | ||
| 695 | 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 696 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, | ||
| 697 | 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, | ||
| 698 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 699 | 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 700 | 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, | ||
| 701 | 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0, 0x07, | ||
| 702 | 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30, 0x07, | ||
| 703 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 704 | 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 705 | 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 706 | 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0, 0x07, | ||
| 707 | 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, | ||
| 708 | 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, | ||
| 709 | 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90, 0x07, | ||
| 710 | 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, | ||
| 711 | 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, | ||
| 712 | 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, | ||
| 713 | 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, | ||
| 714 | 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20, 0x07, | ||
| 715 | 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, | ||
| 716 | 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, | ||
| 717 | 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x03, 0x00, 0x80, 0x00, | ||
| 718 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 719 | 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 720 | 0x47, 0xc6, 0x04, 0x43, 0xc2, 0x11, 0x80, 0x42, 0x28, 0x81, 0x22, 0x28, | ||
| 721 | 0x88, 0x02, 0x2a, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0xd2, 0xc2, | ||
| 722 | 0x19, 0x01, 0x28, 0x8c, 0x42, 0x28, 0x88, 0x02, 0x29, 0x94, 0x82, 0xa1, | ||
| 723 | 0x1c, 0x4b, 0x90, 0x04, 0x00, 0x79, 0x18, 0x00, 0x00, 0x27, 0x01, 0x00, | ||
| 724 | 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, | ||
| 725 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x06, 0x42, 0x1c, 0x40, 0x42, 0x51, | ||
| 726 | 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, | ||
| 727 | 0x20, 0xc3, 0x21, 0x20, 0x02, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, | ||
| 728 | 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, | ||
| 729 | 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, | ||
| 730 | 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, | ||
| 731 | 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x70, 0x10, 0x43, | ||
| 732 | 0x0c, 0x64, 0x40, 0x0a, 0x24, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, | ||
| 733 | 0x04, 0x39, 0x0e, 0x64, 0x40, 0x06, 0x24, 0xe0, 0x16, 0x96, 0x26, 0xe7, | ||
| 734 | 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, | ||
| 735 | 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, | ||
| 736 | 0x44, 0x38, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, | ||
| 737 | 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, | ||
| 738 | 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x63, 0x21, | ||
| 739 | 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, | ||
| 740 | 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, | ||
| 741 | 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89, 0xb1, | ||
| 742 | 0x95, 0x0d, 0x11, 0x8e, 0x86, 0x51, 0x58, 0x9a, 0x9c, 0x8b, 0x5c, 0x99, | ||
| 743 | 0x1b, 0x59, 0x99, 0xdc, 0x17, 0x5d, 0x98, 0xdc, 0x59, 0x19, 0x1d, 0xa3, | ||
| 744 | 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, | ||
| 745 | 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, | ||
| 746 | 0x43, 0x90, 0xe3, 0x41, 0x82, 0x03, 0x3a, 0xa2, 0x21, 0xc2, 0x21, 0x51, | ||
| 747 | 0x0a, 0x4b, 0x93, 0x73, 0x31, 0x93, 0x0b, 0x3b, 0x6b, 0x2b, 0x73, 0xa3, | ||
| 748 | 0xfb, 0x4a, 0x73, 0x83, 0xab, 0xa3, 0x63, 0x76, 0x56, 0xe6, 0x56, 0x26, | ||
| 749 | 0x17, 0x46, 0x57, 0x46, 0x86, 0x82, 0x03, 0xf7, 0x36, 0x97, 0x46, 0x97, | ||
| 750 | 0xf6, 0xe6, 0x46, 0x64, 0x27, 0xf3, 0x65, 0x96, 0x42, 0x25, 0x2c, 0x4d, | ||
| 751 | 0xce, 0x65, 0xac, 0xcc, 0x8d, 0xae, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, | ||
| 752 | 0x0b, 0x5c, 0x99, 0xdc, 0x1c, 0x5c, 0xd9, 0x18, 0x5d, 0x9a, 0x5d, 0x19, | ||
| 753 | 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x32, 0x61, 0x69, 0x72, 0x2e, | ||
| 754 | 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, | ||
| 755 | 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x48, 0x48, 0x70, 0x50, 0x47, 0x75, | ||
| 756 | 0x58, 0xc7, 0x75, 0x40, 0x07, 0x76, 0x64, 0x87, 0x46, 0xeb, 0xac, 0xcc, | ||
| 757 | 0xad, 0x4c, 0x2e, 0x8c, 0xae, 0x8c, 0x0c, 0xa5, 0x66, 0xec, 0x8d, 0xed, | ||
| 758 | 0x4d, 0x8e, 0xc8, 0x8e, 0xe6, 0xcb, 0x2c, 0x85, 0xc5, 0xd8, 0x1b, 0xdb, | ||
| 759 | 0x9b, 0xdc, 0x10, 0x09, 0x19, 0x0e, 0xea, 0xe0, 0x0e, 0xeb, 0xb8, 0x0e, | ||
| 760 | 0xe8, 0x88, 0x8e, 0xec, 0xe8, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, | ||
| 761 | 0x99, 0x99, 0x95, 0xc9, 0xf1, 0x09, 0x4b, 0x93, 0x73, 0x11, 0xab, 0x33, | ||
| 762 | 0x33, 0x2b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0xa3, 0x14, 0x96, 0x26, | ||
| 763 | 0xe7, 0xc2, 0xf6, 0x36, 0x16, 0x46, 0x97, 0xf6, 0xe6, 0xf6, 0x95, 0xe6, | ||
| 764 | 0x46, 0x56, 0x86, 0x47, 0x24, 0x2c, 0x4d, 0xce, 0x45, 0xae, 0x2c, 0x8c, | ||
| 765 | 0x8c, 0x54, 0x58, 0x9a, 0x9c, 0xcb, 0x1c, 0x9d, 0x5c, 0xdd, 0x18, 0xdd, | ||
| 766 | 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x9a, 0x9b, 0xd9, 0x1b, 0x0b, 0x33, | ||
| 767 | 0xb6, 0xb7, 0x30, 0x3a, 0x32, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, | ||
| 768 | 0x75, 0x74, 0x70, 0x75, 0x74, 0x64, 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, | ||
| 769 | 0xca, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xa8, 0xa4, 0xb9, 0xc1, 0xd5, 0xd1, | ||
| 770 | 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x71, 0x19, 0x7b, 0x63, 0x7b, 0x93, 0xfb, | ||
| 771 | 0x9a, 0x1b, 0x0b, 0x63, 0x2b, 0xa3, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16, | ||
| 772 | 0x06, 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0xc6, 0x87, 0xee, 0xcd, | ||
| 773 | 0xad, 0xac, 0x2d, 0x0c, 0xee, 0xcb, 0x2c, 0x6c, 0x8c, 0xee, 0x4d, 0x2e, | ||
| 774 | 0x86, 0x0f, 0xdd, 0x9b, 0x5b, 0x59, 0x5b, 0x18, 0xdc, 0x97, 0x59, 0xd8, | ||
| 775 | 0x18, 0xdd, 0x9b, 0x9c, 0x0c, 0x9f, 0x39, 0x32, 0xb9, 0xaf, 0x3b, 0xb4, | ||
| 776 | 0x34, 0xba, 0xb2, 0x2f, 0xb8, 0xb7, 0x34, 0x37, 0xba, 0x21, 0xb0, 0x80, | ||
| 777 | 0x04, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x65, 0x80, 0x08, 0x88, 0x80, | ||
| 778 | 0x04, 0x07, 0x19, 0x1c, 0x66, 0x80, 0x14, 0x88, 0x80, 0x04, 0x07, 0x19, | ||
| 779 | 0x1c, 0x67, 0x80, 0x1c, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x68, 0x80, | ||
| 780 | 0x20, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x69, 0x80, 0x24, 0x88, 0x80, | ||
| 781 | 0x04, 0x07, 0x19, 0x1c, 0x6a, 0x80, 0x28, 0x88, 0x80, 0x04, 0x07, 0x19, | ||
| 782 | 0x1c, 0x6b, 0x80, 0x2c, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x6c, 0xc0, | ||
| 783 | 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, | ||
| 784 | 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, | ||
| 785 | 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, | ||
| 786 | 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x9f, 0x29, 0xb4, 0x30, 0xb2, 0x32, | ||
| 787 | 0xb9, 0xa1, 0x37, 0xb7, 0x39, 0xba, 0x30, 0x37, 0xba, 0x39, 0x06, 0x63, | ||
| 788 | 0x43, 0xc8, 0x00, 0x21, 0x8e, 0xef, 0x00, 0x03, 0xc4, 0x38, 0xc2, 0x00, | ||
| 789 | 0x09, 0x90, 0xe1, 0x10, 0x83, 0x63, 0x0c, 0x8e, 0x36, 0x38, 0xdc, 0x00, | ||
| 790 | 0x31, 0x8e, 0x37, 0x40, 0x84, 0x03, 0x3a, 0xe0, 0xe0, 0xc8, 0x8e, 0x38, | ||
| 791 | 0x18, 0x62, 0x1c, 0xdb, 0xe1, 0x1d, 0x72, 0x30, 0xc4, 0x30, 0x80, 0x63, | ||
| 792 | 0x3a, 0xe6, 0x80, 0xd5, 0x97, 0x16, 0xd5, 0x54, 0x4c, 0xcd, 0x14, 0x5a, | ||
| 793 | 0x18, 0x59, 0x99, 0xdc, 0xd0, 0x9b, 0xdb, 0x1c, 0x5d, 0x98, 0x1b, 0xdd, | ||
| 794 | 0x1c, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, 0x37, 0xba, 0x32, 0x37, 0x3a, | ||
| 795 | 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, | ||
| 796 | 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x43, 0x84, 0xe3, | ||
| 797 | 0x0e, 0x86, 0x18, 0x87, 0x1d, 0x1c, 0x78, 0xa0, 0x34, 0x43, 0x8c, 0x83, | ||
| 798 | 0x0c, 0x8e, 0x3c, 0x50, 0x9a, 0x21, 0x62, 0x70, 0xd4, 0xc1, 0xa1, 0x07, | ||
| 799 | 0x4a, 0x73, 0xe8, 0x81, 0xf2, 0x1c, 0x7a, 0xa0, 0x40, 0x87, 0x1e, 0x28, | ||
| 800 | 0xce, 0xa1, 0x07, 0x4a, 0x74, 0xe8, 0x81, 0x22, 0x1d, 0x7a, 0xa0, 0x4c, | ||
| 801 | 0x87, 0x1e, 0x28, 0xcc, 0x10, 0xe3, 0xd8, 0x83, 0x43, 0x0f, 0x14, 0x87, | ||
| 802 | 0x64, 0x10, 0x96, 0x26, 0xd7, 0x12, 0xc6, 0x96, 0x16, 0x36, 0xd7, 0x32, | ||
| 803 | 0x37, 0xf6, 0x06, 0x57, 0x36, 0x87, 0x32, 0x45, 0xc4, 0xf4, 0x35, 0xf5, | ||
| 804 | 0xc6, 0x96, 0x46, 0xf6, 0x65, 0x26, 0x17, 0x76, 0xd6, 0x56, 0xe6, 0x46, | ||
| 805 | 0x97, 0x32, 0x84, 0x38, 0xfc, 0xe0, 0xe8, 0x03, 0x5a, 0x61, 0x69, 0x72, | ||
| 806 | 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, | ||
| 807 | 0x2d, 0x61, 0x72, 0x67, 0x28, 0x32, 0x29, 0x43, 0x8c, 0x03, 0x14, 0x0e, | ||
| 808 | 0x3f, 0x38, 0xfe, 0x60, 0x88, 0x70, 0x80, 0xc2, 0x88, 0x88, 0x1d, 0xd8, | ||
| 809 | 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8, 0xa1, 0x1e, 0xd8, | ||
| 810 | 0xa1, 0x1c, 0xdc, 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0x61, 0x1e, 0xa6, | ||
| 811 | 0x08, 0xc1, 0x30, 0x42, 0x61, 0x07, 0x76, 0xb0, 0x87, 0x76, 0x70, 0x83, | ||
| 812 | 0x74, 0x20, 0x87, 0x72, 0x70, 0x07, 0x7a, 0x98, 0x12, 0x14, 0x23, 0x96, | ||
| 813 | 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, | ||
| 814 | 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x18, 0x23, 0xa8, 0x70, 0x48, 0x07, | ||
| 815 | 0x79, 0x70, 0x03, 0x76, 0x08, 0x07, 0x77, 0x38, 0x87, 0x7a, 0x08, 0x87, | ||
| 816 | 0x73, 0x28, 0x87, 0x5f, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, | ||
| 817 | 0x77, 0x70, 0x87, 0x29, 0x01, 0x32, 0x62, 0x0a, 0x87, 0x74, 0x90, 0x07, | ||
| 818 | 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x87, | ||
| 819 | 0x5f, 0x78, 0x07, 0x78, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x87, | ||
| 820 | 0x29, 0x83, 0xc2, 0x38, 0x23, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, | ||
| 821 | 0x73, 0x90, 0x87, 0x70, 0x38, 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, | ||
| 822 | 0x29, 0x01, 0x1d, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 823 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 824 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 825 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 826 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 827 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 828 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 829 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 830 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 831 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 832 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 833 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 834 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 835 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 836 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 837 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 838 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 839 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 840 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 841 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 842 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 843 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 844 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 845 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 846 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 847 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 848 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 849 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 850 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 851 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 852 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 853 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 854 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 855 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 856 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 857 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 858 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 859 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 860 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 861 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 862 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 863 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 864 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 865 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 866 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 867 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 868 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 869 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 870 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 871 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 872 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 873 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 874 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 875 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 876 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 877 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 878 | 0x00, 0x71, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x20, 0xb1, | ||
| 879 | 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, | ||
| 880 | 0x13, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 881 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 882 | 0x00, 0xd4, 0x73, 0x10, 0x41, 0x10, 0x68, 0x84, 0x65, 0x30, 0x03, 0x40, | ||
| 883 | 0x3c, 0x03, 0x40, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x00, 0x00, | ||
| 884 | 0x00, 0xe3, 0x0d, 0x06, 0x44, 0x50, 0x30, 0xe6, 0x18, 0x88, 0xc0, 0x1b, | ||
| 885 | 0x64, 0x08, 0x0a, 0x64, 0x8e, 0x21, 0x28, 0x10, 0x0b, 0x18, 0xf9, 0x64, | ||
| 886 | 0x10, 0x10, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x8a, 0x20, | ||
| 887 | 0xe0, 0x83, 0x23, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 888 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 889 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 890 | 0x00, 0x88, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 891 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 892 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 893 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 894 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 895 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 896 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 897 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, | ||
| 898 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 899 | 0x00, 0xef, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 900 | 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, | ||
| 901 | 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, | ||
| 902 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 903 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, | ||
| 904 | 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, | ||
| 905 | 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, | ||
| 906 | 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, | ||
| 907 | 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, | ||
| 908 | 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, | ||
| 909 | 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, | ||
| 910 | 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, | ||
| 911 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 912 | 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, | ||
| 913 | 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, | ||
| 914 | 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 915 | 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 916 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, | ||
| 917 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 918 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 919 | 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, | ||
| 920 | 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, | ||
| 921 | 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, | ||
| 922 | 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, | ||
| 923 | 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, | ||
| 924 | 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, | ||
| 925 | 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, | ||
| 926 | 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 927 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, | ||
| 928 | 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, | ||
| 929 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, | ||
| 930 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, | ||
| 931 | 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 932 | 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, | ||
| 933 | 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0xc3, 0x26, 0x10, 0xc0, | ||
| 934 | 0x02, 0x54, 0x43, 0x38, 0xa4, 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, | ||
| 935 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, | ||
| 936 | 0x38, 0xb0, 0x43, 0x3a, 0x84, 0xc3, 0x3c, 0x00, 0x1b, 0x8c, 0xa1, 0x00, | ||
| 937 | 0x16, 0xa0, 0xda, 0x60, 0x10, 0x06, 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0xf8, | ||
| 938 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0x83, 0x8f, 0x18, 0xff, | ||
| 939 | 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, 0x0f, 0xf0, | ||
| 940 | 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, 0x0e, 0xe3, | ||
| 941 | 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, | ||
| 942 | 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, | ||
| 943 | 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, | ||
| 944 | 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, 0xdc, 0x43, | ||
| 945 | 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x90, 0x07, 0x76, 0x00, 0x0c, 0xee, | ||
| 946 | 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, 0x90, 0x0e, 0xec, 0x40, 0x0f, 0xe9, | ||
| 947 | 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, | ||
| 948 | 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, | ||
| 949 | 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, | ||
| 950 | 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, | ||
| 951 | 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, | ||
| 952 | 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, | ||
| 953 | 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, | ||
| 954 | 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, | ||
| 955 | 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, | ||
| 956 | 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, | ||
| 957 | 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, | ||
| 958 | 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, | ||
| 959 | 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, | ||
| 960 | 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, | ||
| 961 | 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, | ||
| 962 | 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, | ||
| 963 | 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, | ||
| 964 | 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, 0xa4, 0x83, | ||
| 965 | 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, | ||
| 966 | 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, | ||
| 967 | 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, | ||
| 968 | 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, | ||
| 969 | 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, | ||
| 970 | 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, 0x94, 0x43, | ||
| 971 | 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, | ||
| 972 | 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x40, 0x8e, 0xff, 0xff, | ||
| 973 | 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83, 0x81, 0x04, 0xc0, | ||
| 974 | 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0xda, 0x80, 0x28, 0xff, | ||
| 975 | 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, 0x63, 0xf9, | ||
| 976 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0xc3, 0xc4, 0xfc, 0xff, | ||
| 977 | 0xff, 0xff, 0xff, 0x00, 0x28, 0x80, 0x34, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, | ||
| 978 | 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, 0x3d, 0xa4, 0x83, 0x3b, 0xcc, 0x03, | ||
| 979 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, | ||
| 980 | 0x18, 0x88, 0x09, 0x41, 0x31, 0x21, 0x30, 0x26, 0x0c, 0x07, 0x92, 0x4c, | ||
| 981 | 0x18, 0x14, 0x24, 0x99, 0x10, 0x2c, 0x13, 0x02, 0x06, 0x89, 0x20, 0x00, | ||
| 982 | 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, | ||
| 983 | 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, | ||
| 984 | 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x9c, 0xc1, | ||
| 985 | 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, | ||
| 986 | 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, | ||
| 987 | 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, | ||
| 988 | 0x41, 0x38, 0x4a, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, | ||
| 989 | 0x8a, 0x88, 0xdf, 0x1e, 0xfe, 0x69, 0x8c, 0x00, 0x18, 0x44, 0x28, 0x82, | ||
| 990 | 0x8b, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x25, 0x80, 0x79, 0x16, 0x22, | ||
| 991 | 0xfa, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x10, 0xca, 0x11, 0x04, 0x81, | ||
| 992 | 0x40, 0x18, 0x08, 0x25, 0xc3, 0x08, 0x03, 0x50, 0x88, 0x65, 0x59, 0x16, | ||
| 993 | 0x62, 0xca, 0x00, 0x00, 0x00, 0x39, 0x45, 0x00, 0x00, 0x82, 0xca, 0x00, | ||
| 994 | 0x2c, 0x0b, 0x49, 0xc5, 0x58, 0x16, 0x00, 0x00, 0x00, 0xa2, 0xca, 0xb0, | ||
| 995 | 0x2c, 0x0b, 0x59, 0x45, 0x58, 0x16, 0xc2, 0xe6, 0x08, 0x82, 0x39, 0x02, | ||
| 996 | 0x30, 0x18, 0x46, 0x10, 0xb6, 0x82, 0x04, 0x06, 0x22, 0x68, 0x9c, 0x06, | ||
| 997 | 0x50, 0x37, 0x10, 0x90, 0x02, 0xdb, 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x00, | ||
| 998 | 0xc2, 0x14, 0xc0, 0x08, 0xc0, 0x30, 0xc2, 0xb0, 0x0d, 0x23, 0x10, 0x1b, | ||
| 999 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 1000 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 1001 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 1002 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1003 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 1004 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 1005 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 1006 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 1007 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 1008 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 1009 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1010 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1011 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 1012 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 1013 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 1014 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1015 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 1016 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 1017 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 1018 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 1019 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 1020 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 1021 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 1022 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 1023 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 1024 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 1025 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 1026 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 1027 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 1028 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, | ||
| 1029 | 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x4c, 0x03, | ||
| 1030 | 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xe6, 0x01, 0x02, | ||
| 1031 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x13, 0x01, 0x01, 0x20, | ||
| 1032 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0x99, 0x80, 0x00, 0x10, 0x00, | ||
| 1033 | 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x54, 0x08, 0x30, 0x0c, 0x00, 0x00, | ||
| 1034 | 0x00, 0x01, 0x00, 0x0c, 0x61, 0x1e, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 1035 | 0x00, 0x00, 0x86, 0x30, 0x17, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, | ||
| 1036 | 0x00, 0x43, 0x98, 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, | ||
| 1037 | 0x21, 0xcc, 0x05, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, | ||
| 1038 | 0xc6, 0x03, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, | ||
| 1039 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, | ||
| 1040 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xda, 0x46, 0x00, 0x0a, | ||
| 1041 | 0xa1, 0x04, 0x8a, 0xa0, 0x20, 0x0a, 0xa8, 0x0c, 0x0a, 0xa3, 0x40, 0x0a, | ||
| 1042 | 0xa5, 0x60, 0x0a, 0xa7, 0x14, 0x28, 0x2c, 0x9c, 0x11, 0x80, 0x42, 0x28, | ||
| 1043 | 0x88, 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x02, 0xc7, 0x12, 0x24, 0x01, | ||
| 1044 | 0x00, 0x79, 0x18, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 1045 | 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, | ||
| 1046 | 0xb7, 0x21, 0xc6, 0xe6, 0x7c, 0x00, 0x18, 0x80, 0x01, 0x95, 0xbb, 0x31, | ||
| 1047 | 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0xc6, 0xd6, 0x7c, | ||
| 1048 | 0xc2, 0xc6, 0x30, 0x0e, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0xda, 0xca, | ||
| 1049 | 0xe8, 0xc2, 0xd8, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, | ||
| 1050 | 0x66, 0x64, 0x60, 0x64, 0x66, 0x5c, 0x68, 0x60, 0x68, 0x40, 0x50, 0xda, | ||
| 1051 | 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x66, 0x64, 0x60, 0x64, 0x66, | ||
| 1052 | 0x5c, 0x68, 0x60, 0x68, 0x52, 0x86, 0x08, 0x1f, 0x31, 0xc4, 0xd8, 0x9a, | ||
| 1053 | 0xed, 0xd9, 0x16, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xef, | ||
| 1054 | 0xd8, 0x9a, 0xad, 0xd9, 0x16, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, | ||
| 1055 | 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, | ||
| 1056 | 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x2f, | ||
| 1057 | 0x21, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, | ||
| 1058 | 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, | ||
| 1059 | 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xf8, 0x16, 0x92, 0x41, 0x58, | ||
| 1060 | 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, | ||
| 1061 | 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, | ||
| 1062 | 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10, | ||
| 1063 | 0xe1, 0x6b, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0xc8, 0x95, 0xb9, 0x91, 0x95, | ||
| 1064 | 0xc9, 0x7d, 0xd1, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x31, 0x0a, 0x4b, 0x93, | ||
| 1065 | 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x72, 0x0b, | ||
| 1066 | 0x6b, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x33, 0x04, 0xf9, | ||
| 1067 | 0x9e, 0x6d, 0xf9, 0xa0, 0x2f, 0x1a, 0x22, 0x7c, 0x12, 0x99, 0xb0, 0x34, | ||
| 1068 | 0x39, 0x17, 0xb8, 0xb7, 0xb9, 0x34, 0xba, 0xb4, 0x37, 0x37, 0x2a, 0x61, | ||
| 1069 | 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x94, 0xc2, 0xd2, | ||
| 1070 | 0xe4, 0x5c, 0xdc, 0xde, 0xbe, 0xe0, 0xca, 0xe4, 0xe6, 0xe0, 0xca, 0xc6, | ||
| 1071 | 0xe8, 0xd2, 0xec, 0xca, 0xc8, 0x84, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, | ||
| 1072 | 0x7d, 0xb9, 0x85, 0xb5, 0x95, 0x11, 0x81, 0x7b, 0x9b, 0x4b, 0xa3, 0x4b, | ||
| 1073 | 0x7b, 0x73, 0x1b, 0x02, 0x6d, 0xcb, 0x47, 0x7d, 0xd5, 0x67, 0x7d, 0xd0, | ||
| 1074 | 0x17, 0x7d, 0xd7, 0x87, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x31, 0x93, 0x0b, | ||
| 1075 | 0x3b, 0x6b, 0x2b, 0x73, 0xa3, 0xfb, 0x4a, 0x73, 0x83, 0xab, 0xa3, 0xa3, | ||
| 1076 | 0x75, 0x56, 0xe6, 0x56, 0x26, 0x17, 0x46, 0x57, 0x46, 0x86, 0x52, 0x33, | ||
| 1077 | 0xf6, 0xc6, 0xf6, 0x26, 0x47, 0x64, 0x47, 0xf3, 0x65, 0x96, 0xc2, 0x27, | ||
| 1078 | 0x2c, 0x4d, 0xce, 0x05, 0xae, 0x4c, 0x6e, 0x0e, 0xae, 0x6c, 0x8c, 0x2e, | ||
| 1079 | 0xcd, 0xae, 0x8c, 0xc5, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0x10, 0x69, 0x6b, | ||
| 1080 | 0x3e, 0xed, 0xdb, 0xbe, 0xea, 0xe3, 0x3e, 0xe8, 0x8b, 0xbe, 0xeb, 0xeb, | ||
| 1081 | 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, | ||
| 1082 | 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, | ||
| 1083 | 0x99, 0xa5, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x93, 0x21, 0x42, 0x57, | ||
| 1084 | 0x86, 0x37, 0xf6, 0xf6, 0x26, 0x47, 0x36, 0x44, 0xda, 0x9c, 0x4f, 0xfb, | ||
| 1085 | 0xbe, 0xaf, 0xfa, 0xb8, 0x0f, 0xfa, 0xc0, 0xe0, 0xbb, 0xbe, 0x30, 0xa0, | ||
| 1086 | 0x12, 0x96, 0x26, 0xe7, 0x22, 0x56, 0x67, 0x66, 0x56, 0x26, 0xc7, 0x27, | ||
| 1087 | 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0xee, 0x6b, 0x2e, | ||
| 1088 | 0x4d, 0xaf, 0x8c, 0x52, 0x58, 0x9a, 0x9c, 0x0b, 0xdb, 0xdb, 0x58, 0x18, | ||
| 1089 | 0x5d, 0xda, 0x9b, 0xdb, 0x57, 0x9a, 0x1b, 0x59, 0x19, 0x1e, 0x91, 0xb0, | ||
| 1090 | 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x52, 0x61, 0x69, 0x72, 0x2e, | ||
| 1091 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, | ||
| 1092 | 0x69, 0x6e, 0x66, 0x6f, 0x2c, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0xc8, 0xcc, | ||
| 1093 | 0x8d, 0x49, 0x1d, 0x09, 0x7d, 0xbd, 0xd5, 0xd1, 0xc1, 0xd5, 0xd1, 0x91, | ||
| 1094 | 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, | ||
| 1095 | 0xa3, 0x92, 0xe6, 0x06, 0x57, 0x47, 0xf7, 0x45, 0x97, 0x07, 0x57, 0xc6, | ||
| 1096 | 0x65, 0xec, 0x8d, 0xed, 0x4d, 0xee, 0x6b, 0x6e, 0x2c, 0x8c, 0xad, 0x8c, | ||
| 1097 | 0x0e, 0xdd, 0x9b, 0x5b, 0x59, 0x5b, 0x18, 0xdc, 0x57, 0x5b, 0x19, 0x1d, | ||
| 1098 | 0xda, 0x1b, 0x19, 0x1f, 0xba, 0x37, 0xb7, 0xb2, 0xb6, 0x30, 0xb8, 0x2f, | ||
| 1099 | 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x18, 0x3e, 0x74, 0x6f, 0x6e, 0x65, | ||
| 1100 | 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x7c, | ||
| 1101 | 0xe6, 0xc8, 0xe4, 0xbe, 0xee, 0xd0, 0xd2, 0xe8, 0xca, 0xbe, 0xe0, 0xde, | ||
| 1102 | 0xd2, 0xdc, 0xe8, 0x86, 0xc0, 0xc2, 0xb6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, | ||
| 1103 | 0xf0, 0xa5, 0xc1, 0xc6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xa9, 0xc1, | ||
| 1104 | 0xf6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xad, 0xc1, 0x26, 0x6d, 0xcc, | ||
| 1105 | 0xb6, 0x7c, 0x68, 0xf0, 0xb1, 0xc1, 0x36, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, | ||
| 1106 | 0xf0, 0xb5, 0xc1, 0x46, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xb9, 0xc1, | ||
| 1107 | 0x56, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xbd, 0xc1, 0x66, 0x6d, 0xcc, | ||
| 1108 | 0xb6, 0x7c, 0x68, 0xf0, 0xc1, 0x01, 0xa3, 0xb0, 0x34, 0x39, 0x97, 0x30, | ||
| 1109 | 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0xaf, 0xb9, 0x34, 0xbd, 0x32, | ||
| 1110 | 0x5e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, | ||
| 1111 | 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, | ||
| 1112 | 0x7c, 0xa6, 0xd0, 0xc2, 0xc8, 0xca, 0xe4, 0x86, 0xde, 0xdc, 0xe6, 0xe8, | ||
| 1113 | 0xc2, 0xdc, 0xe8, 0xe6, 0x18, 0x8c, 0x0d, 0x21, 0x83, 0x2d, 0xfa, 0xc6, | ||
| 1114 | 0xe0, 0x23, 0x83, 0x0d, 0xfa, 0xca, 0x60, 0x5b, 0xb6, 0xe6, 0x33, 0x83, | ||
| 1115 | 0xef, 0x0c, 0xbe, 0x38, 0xf8, 0xe4, 0x60, 0x83, 0xbe, 0x39, 0xd8, 0x98, | ||
| 1116 | 0x0f, 0xfa, 0xe8, 0xe0, 0xbb, 0xbe, 0x3a, 0xe0, 0x12, 0x96, 0x26, 0xe7, | ||
| 1117 | 0x42, 0x57, 0x86, 0x47, 0x57, 0x27, 0x57, 0x46, 0x25, 0x2c, 0x4d, 0xce, | ||
| 1118 | 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x8c, 0x18, 0x5d, 0x19, 0x1e, 0x5d, | ||
| 1119 | 0x9d, 0x5c, 0x99, 0x0c, 0x19, 0x8f, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0x0b, | ||
| 1120 | 0xc8, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x0f, 0x07, 0xba, 0x32, 0xbc, | ||
| 1121 | 0x21, 0xd4, 0xc6, 0x7c, 0x77, 0xf0, 0x95, 0xc1, 0xb6, 0x6c, 0xcd, 0x87, | ||
| 1122 | 0x07, 0x1f, 0xf4, 0xe5, 0xc1, 0x77, 0x7d, 0x7a, 0xc0, 0x25, 0x2c, 0x4d, | ||
| 1123 | 0xce, 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc7, 0x5c, 0x58, | ||
| 1124 | 0x1b, 0x1c, 0x5b, 0x99, 0x1c, 0x83, 0xb9, 0x21, 0xd2, 0x76, 0x7d, 0x7c, | ||
| 1125 | 0xf0, 0x95, 0xc1, 0xb6, 0x6c, 0xcd, 0x07, 0x7d, 0x7d, 0xf0, 0x5d, 0x9f, | ||
| 1126 | 0x1f, 0x0c, 0x61, 0xbe, 0xec, 0xf3, 0x3e, 0x31, 0xf8, 0xec, 0xe0, 0xdb, | ||
| 1127 | 0x83, 0xef, 0x0f, 0x86, 0x18, 0x0a, 0xf0, 0x4d, 0x1f, 0x28, 0x70, 0x0c, | ||
| 1128 | 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, 0xc6, | ||
| 1129 | 0xde, 0xe0, 0xca, 0xe6, 0x50, 0xa6, 0x88, 0x98, 0xbe, 0x86, 0xde, 0xe0, | ||
| 1130 | 0xf2, 0xbe, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0x52, 0x86, | ||
| 1131 | 0x10, 0xdf, 0x28, 0x7c, 0xa2, 0x40, 0x2c, 0x2c, 0x4d, 0xae, 0x25, 0x8c, | ||
| 1132 | 0x2d, 0x2d, 0x6c, 0xae, 0x65, 0x6e, 0xec, 0x0d, 0xae, 0xac, 0x85, 0xae, | ||
| 1133 | 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x6c, 0x6e, 0x88, 0xf1, 0x95, 0xc2, 0x37, | ||
| 1134 | 0x0a, 0x1f, 0x29, 0x10, 0x0b, 0x4b, 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, | ||
| 1135 | 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, 0x2b, 0x6b, 0x99, 0x0b, 0x6b, 0x83, | ||
| 1136 | 0x63, 0x2b, 0x93, 0x9b, 0x1b, 0x62, 0x7c, 0xa7, 0xf0, 0x8d, 0xc2, 0x67, | ||
| 1137 | 0x0a, 0x43, 0x88, 0xaf, 0x14, 0xbe, 0x53, 0xa0, 0x15, 0x96, 0x26, 0xd7, | ||
| 1138 | 0x12, 0xc6, 0x96, 0x16, 0x36, 0xd7, 0x32, 0x37, 0xf6, 0x06, 0x57, 0xd6, | ||
| 1139 | 0x12, 0x26, 0x77, 0x86, 0x32, 0x93, 0x32, 0xc4, 0xf8, 0x54, 0xe1, 0x1b, | ||
| 1140 | 0x85, 0x2f, 0x15, 0x86, 0x08, 0x9f, 0x2a, 0xb0, 0xfa, 0xd2, 0xa2, 0x9a, | ||
| 1141 | 0x8a, 0xa9, 0x99, 0x42, 0x0b, 0x23, 0x2b, 0x93, 0x1b, 0x7a, 0x73, 0x9b, | ||
| 1142 | 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0xe3, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, | ||
| 1143 | 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, | ||
| 1144 | 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, | ||
| 1145 | 0x28, 0x68, 0x88, 0xf0, 0xb9, 0xc2, 0x10, 0xe3, 0x6b, 0x85, 0xef, 0x15, | ||
| 1146 | 0xc2, 0x20, 0x1b, 0x62, 0x7c, 0x68, 0xf0, 0xc1, 0x42, 0x18, 0x64, 0x43, | ||
| 1147 | 0xc4, 0xe0, 0x63, 0x85, 0x2f, 0x16, 0xc2, 0x20, 0xfb, 0x62, 0x21, 0x0c, | ||
| 1148 | 0xb4, 0x2f, 0x16, 0xc2, 0x60, 0xfb, 0x62, 0x21, 0x0c, 0xb8, 0x2f, 0x16, | ||
| 1149 | 0xc2, 0xa0, 0xfb, 0x62, 0x21, 0x0c, 0xbc, 0x2f, 0x16, 0xc2, 0xe0, 0xfb, | ||
| 1150 | 0x62, 0x21, 0x0c, 0xb0, 0x21, 0xc6, 0x27, 0x0b, 0x5f, 0x2c, 0x84, 0xc1, | ||
| 1151 | 0x36, 0xc4, 0xf8, 0x64, 0xe1, 0x8b, 0x85, 0x30, 0xc0, 0x86, 0x18, 0x9f, | ||
| 1152 | 0x2c, 0x7c, 0xb1, 0x10, 0x06, 0xdd, 0x10, 0xe3, 0x93, 0x85, 0x2f, 0x16, | ||
| 1153 | 0xc2, 0xc0, 0x1b, 0x62, 0x7c, 0xb2, 0xf0, 0xc5, 0x42, 0x18, 0x7c, 0x43, | ||
| 1154 | 0x8c, 0x4f, 0x16, 0xbe, 0x58, 0x08, 0x03, 0x6d, 0x88, 0xf1, 0xc9, 0xc2, | ||
| 1155 | 0x17, 0x0b, 0x61, 0xc0, 0x0d, 0x31, 0x3e, 0x59, 0xf8, 0x62, 0x21, 0x0c, | ||
| 1156 | 0xb2, 0x11, 0x11, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0xb4, 0xc3, | ||
| 1157 | 0x3b, 0x90, 0x43, 0x3d, 0xb0, 0x43, 0x39, 0xb8, 0x81, 0x39, 0xb0, 0x43, | ||
| 1158 | 0x38, 0x9c, 0xc3, 0x3c, 0x4c, 0x11, 0x82, 0x61, 0x84, 0xc2, 0x0e, 0xec, | ||
| 1159 | 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x0e, 0xf4, | ||
| 1160 | 0x30, 0x25, 0x28, 0x46, 0x2c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6, | ||
| 1161 | 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x30, | ||
| 1162 | 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xec, 0x10, 0x0e, 0xee, | ||
| 1163 | 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, 0x50, 0x0e, 0xbf, 0x60, 0x0f, 0xe5, | ||
| 1164 | 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x64, 0xc4, | ||
| 1165 | 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x30, 0x0e, 0xef, 0xd0, 0x0e, 0xf0, | ||
| 1166 | 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, 0xf0, 0x0e, 0xf0, 0x40, 0x0f, 0xe9, | ||
| 1167 | 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, 0x06, 0x85, 0x71, 0x46, 0x30, 0xe1, | ||
| 1168 | 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0x70, 0x0e, 0xed, | ||
| 1169 | 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x50, 0x00, 0x79, 0x18, 0x00, | ||
| 1170 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 1171 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 1172 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 1173 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 1174 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 1175 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 1176 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 1177 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 1178 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 1179 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 1180 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 1181 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 1182 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 1183 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 1184 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 1185 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 1186 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 1187 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 1188 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 1189 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 1190 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 1191 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 1192 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 1193 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 1194 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 1195 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 1196 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 1197 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 1198 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 1199 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 1200 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 1201 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 1202 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 1203 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 1204 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 1205 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 1206 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 1207 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 1208 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 1209 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 1210 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 1211 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 1212 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 1213 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 1214 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 1215 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 1216 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 1217 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 1218 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 1219 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 1220 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 1221 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 1222 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 1223 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 1224 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 1225 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2e, 0x00, 0x00, | ||
| 1226 | 0x00, 0x06, 0x10, 0xb1, 0x5d, 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x45, 0x04, | ||
| 1227 | 0x18, 0x0c, 0xd1, 0x4c, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, 0xb3, | ||
| 1228 | 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, 0x51, | ||
| 1229 | 0x14, 0x46, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, | ||
| 1230 | 0xdb, 0xa6, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, | ||
| 1231 | 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, | ||
| 1232 | 0x08, 0x13, 0x80, 0x44, 0x7e, 0x01, 0x48, 0xd3, 0x5f, 0x00, 0x81, 0xe4, | ||
| 1233 | 0x57, 0x77, 0x71, 0xdb, 0x16, 0x40, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, | ||
| 1234 | 0xfd, 0xc2, 0x02, 0x30, 0x8f, 0x5f, 0xdd, 0xc5, 0x6d, 0x5b, 0xc2, 0x04, | ||
| 1235 | 0x20, 0x91, 0x5f, 0x00, 0xd2, 0xf4, 0x17, 0x0c, 0x70, 0xf9, 0xd5, 0x5d, | ||
| 1236 | 0xdc, 0xb6, 0x09, 0x40, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xff, 0xe3, | ||
| 1237 | 0x58, 0x7e, 0x71, 0xdb, 0x36, 0x10, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, | ||
| 1238 | 0xfd, 0x05, 0x10, 0x48, 0x7e, 0x71, 0xdb, 0x66, 0x10, 0x01, 0x48, 0xe4, | ||
| 1239 | 0x17, 0x80, 0x34, 0xfd, 0x05, 0x03, 0x5c, 0x7e, 0x71, 0xdb, 0x76, 0x20, | ||
| 1240 | 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x8f, 0x63, 0xf9, 0xd5, 0x5d, | ||
| 1241 | 0xdc, 0x36, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x9a, 0x01, 0x00, | ||
| 1242 | 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, 0x00, 0x51, 0x00, 0x00, | ||
| 1243 | 0x00, 0x64, 0x8e, 0x45, 0x00, 0x81, 0x70, 0xcc, 0x41, 0x2c, 0x8d, 0xd3, | ||
| 1244 | 0x06, 0x54, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xdc, 0x08, 0x00, | ||
| 1245 | 0x6d, 0xc5, 0x30, 0x03, 0x50, 0x0e, 0xa4, 0x8d, 0x00, 0xd4, 0x00, 0x01, | ||
| 1246 | 0x63, 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, 0xa0, 0xb3, 0xe6, 0x1c, | ||
| 1247 | 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x09, 0x06, 0x63, 0x04, 0x20, | ||
| 1248 | 0x08, 0x82, 0x20, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, 0x30, 0x03, 0x30, | ||
| 1249 | 0x07, 0x91, 0x0a, 0xaf, 0x90, 0x0a, 0x75, 0x40, 0xcb, 0x0c, 0xc0, 0x08, | ||
| 1250 | 0xc0, 0x0c, 0xc0, 0x58, 0x03, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, | ||
| 1251 | 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x8d, 0x35, 0xb0, 0xed, 0xfc, 0x93, | ||
| 1252 | 0x1e, 0xdb, 0xce, 0x3f, 0xe9, 0xb1, 0xed, 0xfc, 0x93, 0xde, 0x58, 0x03, | ||
| 1253 | 0x08, 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, | ||
| 1254 | 0xc8, 0xd6, 0xbf, 0x30, 0xd6, 0x00, 0x82, 0xe0, 0x9a, 0x83, 0x01, 0x08, | ||
| 1255 | 0x82, 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x8c, 0x35, 0x80, | ||
| 1256 | 0x20, 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, | ||
| 1257 | 0x6d, 0x0e, 0x06, 0x63, 0x0d, 0xeb, 0x88, 0xc7, 0x2c, 0x18, 0xac, 0x23, | ||
| 1258 | 0x1e, 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x58, 0x03, 0x08, | ||
| 1259 | 0xc2, 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, | ||
| 1260 | 0x87, 0x63, 0x30, 0xd6, 0x20, 0xe6, 0x62, 0xda, 0x7f, 0x60, 0xc9, 0xb3, | ||
| 1261 | 0xf1, 0x2f, 0x8c, 0xe9, 0xaa, 0xe6, 0xbe, 0x30, 0xd6, 0xf0, 0xcf, 0xa4, | ||
| 1262 | 0xff, 0xfb, 0x02, 0x5d, 0x83, 0x62, 0xfe, 0xb5, 0x70, 0x1c, 0x83, 0xbe, | ||
| 1263 | 0x30, 0xd6, 0x30, 0xf7, 0x6d, 0x9a, 0xfa, 0x42, 0xeb, 0x86, 0x3c, 0xef, | ||
| 1264 | 0x0b, 0x7c, 0xce, 0xfa, 0xf8, 0x47, 0xc0, 0x18, 0x81, 0xdb, 0xc7, 0xa2, | ||
| 1265 | 0xed, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0x79, 0xaf, | ||
| 1266 | 0xab, 0xec, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0xdb, | ||
| 1267 | 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, 0xf8, 0x37, 0x46, | ||
| 1268 | 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, 0xf6, 0x34, 0x18, | ||
| 1269 | 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
| 1270 | 0x00, 0x23, 0x06, 0x4a, 0x11, 0x98, 0xc2, 0x1a, 0xa8, 0x41, 0x1b, 0x80, | ||
| 1271 | 0x41, 0x19, 0x84, 0x41, 0x30, 0xde, 0xd0, 0x06, 0x78, 0x30, 0x0a, 0x14, | ||
| 1272 | 0x8c, 0xe1, 0x86, 0x00, 0x0c, 0x82, 0x59, 0x86, 0x40, 0x08, 0x06, 0x19, | ||
| 1273 | 0x08, 0x4f, 0x0d, 0xc6, 0x1b, 0xe2, 0x80, 0x0f, 0xce, 0x80, 0x82, 0x31, | ||
| 1274 | 0x62, 0x40, 0x18, 0xc1, 0x2b, 0x0c, 0x23, 0x06, 0x85, 0x11, 0xc4, 0x42, | ||
| 1275 | 0xb0, 0x59, 0xb0, 0xc1, 0x67, 0xc4, 0xa0, 0x30, 0x82, 0x58, 0x08, 0xc0, | ||
| 1276 | 0xc0, 0x06, 0x4e, 0x3e, 0xc6, 0x05, 0xf1, 0xb1, 0x21, 0xa0, 0xcf, 0x88, | ||
| 1277 | 0x01, 0x61, 0x04, 0xb6, 0x10, 0x8c, 0x18, 0x14, 0x46, 0x80, 0x0b, 0x81, | ||
| 1278 | 0x67, 0x81, 0x27, 0x9f, 0x39, 0x06, 0x34, 0x58, 0x6c, 0x61, 0x90, 0x21, | ||
| 1279 | 0x48, 0x83, 0x3c, 0xb0, 0x21, 0xa0, 0xcf, 0x20, 0x43, 0xb0, 0x06, 0x7c, | ||
| 1280 | 0x30, 0xc8, 0x10, 0x54, 0x7e, 0x30, 0x4b, 0x20, 0x0c, 0x54, 0x04, 0x42, | ||
| 1281 | 0xc0, 0x06, 0xc0, 0x78, 0xc3, 0x28, 0xb8, 0xc2, 0x2e, 0x50, 0x30, 0x86, | ||
| 1282 | 0x1b, 0x02, 0xcd, 0x99, 0x65, 0x18, 0x88, 0x60, 0x90, 0x81, 0xa0, 0x03, | ||
| 1283 | 0x50, 0x18, 0x6f, 0x38, 0x05, 0x59, 0xa0, 0x05, 0x0a, 0xc6, 0x78, 0x43, | ||
| 1284 | 0x2a, 0xd0, 0x42, 0x28, 0x50, 0x30, 0x46, 0x0c, 0x90, 0x23, 0x52, 0x87, | ||
| 1285 | 0xa2, 0x3b, 0x86, 0x60, 0x90, 0x21, 0xb8, 0x03, 0x54, 0x18, 0x64, 0x08, | ||
| 1286 | 0x16, 0x55, 0x98, 0x25, 0x20, 0x06, 0x2a, 0x02, 0x61, 0xc0, 0x84, 0xe1, | ||
| 1287 | 0x86, 0x30, 0x50, 0x83, 0x60, 0x96, 0xa1, 0x98, 0x82, 0xf1, 0x06, 0x58, | ||
| 1288 | 0xd8, 0x85, 0x73, 0xa0, 0x60, 0x0c, 0x37, 0x04, 0x6d, 0x10, 0xcc, 0x32, | ||
| 1289 | 0x18, 0x47, 0x30, 0xc8, 0x50, 0x84, 0x42, 0x2b, 0x8c, 0x37, 0xd0, 0xc2, | ||
| 1290 | 0x2f, 0x9c, 0x03, 0x05, 0x63, 0x8e, 0x21, 0x14, 0x82, 0x77, 0x18, 0x64, | ||
| 1291 | 0x08, 0x44, 0x41, 0x16, 0x2c, 0x28, 0xe4, 0x33, 0xc8, 0x10, 0x90, 0x42, | ||
| 1292 | 0x2d, 0xcc, 0x12, 0xb4, 0xc1, 0x78, 0x83, 0x2e, 0x94, 0xc3, 0x3c, 0x50, | ||
| 1293 | 0x30, 0xc6, 0x1b, 0x78, 0xe1, 0x1c, 0xde, 0x81, 0x82, 0x31, 0xc8, 0x00, | ||
| 1294 | 0xb1, 0x82, 0x2e, 0x0c, 0x37, 0x10, 0x74, 0xe0, 0xcc, 0x32, 0x20, 0x52, | ||
| 1295 | 0x30, 0x86, 0x20, 0xe5, 0xc3, 0x70, 0x43, 0xd0, 0x07, 0xca, 0x2c, 0x83, | ||
| 1296 | 0x92, 0x04, 0x26, 0xfc, 0x81, 0x7c, 0x66, 0x09, 0x16, 0x1b, 0x42, 0x01, | ||
| 1297 | 0x3e, 0x23, 0x06, 0x84, 0x11, 0x94, 0x44, 0x60, 0x01, 0x2e, 0xc8, 0x67, | ||
| 1298 | 0xc4, 0xa0, 0x30, 0x02, 0x94, 0x08, 0x70, 0x61, 0x96, 0x60, 0x19, 0xa8, | ||
| 1299 | 0x00, 0x94, 0x44, 0x50, 0xe6, 0x18, 0x6a, 0x21, 0x08, 0x89, 0x31, 0x84, | ||
| 1300 | 0x0d, 0x24, 0x86, 0x1b, 0x02, 0x53, 0x50, 0x66, 0x19, 0x1a, 0x26, 0x30, | ||
| 1301 | 0x01, 0x15, 0xe4, 0x33, 0x4b, 0xe0, 0xd8, 0xa0, 0x0a, 0xf0, 0x19, 0x31, | ||
| 1302 | 0x20, 0x8c, 0xc0, 0x25, 0x02, 0x0b, 0xc2, 0x41, 0x3e, 0x23, 0x06, 0x85, | ||
| 1303 | 0x11, 0xc4, 0x44, 0x10, 0x0e, 0xb3, 0x04, 0xce, 0x40, 0x05, 0xa0, 0x30, | ||
| 1304 | 0x42, 0x33, 0xc7, 0x90, 0x04, 0x28, 0x31, 0x86, 0x40, 0x06, 0x28, 0x31, | ||
| 1305 | 0xdc, 0x10, 0xbc, 0x82, 0x32, 0xcb, 0x00, 0x3d, 0x81, 0x09, 0xb1, 0x20, | ||
| 1306 | 0x9f, 0x59, 0x82, 0xc8, 0x86, 0x59, 0x80, 0xcf, 0x88, 0x01, 0x61, 0x04, | ||
| 1307 | 0x37, 0x11, 0x58, 0xa0, 0x0e, 0xf2, 0x19, 0x31, 0x28, 0x8c, 0x40, 0x27, | ||
| 1308 | 0x02, 0x75, 0x98, 0x25, 0x88, 0x06, 0x2a, 0x00, 0xe5, 0x11, 0xa0, 0x39, | ||
| 1309 | 0x86, 0x24, 0x80, 0x89, 0x59, 0x02, 0x69, 0xa0, 0x22, 0x10, 0x22, 0x3d, | ||
| 1310 | 0x38, 0x06, 0x19, 0x02, 0x75, 0xb0, 0x87, 0x39, 0x06, 0x74, 0x00, 0x03, | ||
| 1311 | 0x9b, 0x18, 0x64, 0x08, 0xd2, 0x21, 0x1f, 0x6c, 0x08, 0xe4, 0x33, 0xc8, | ||
| 1312 | 0x10, 0xac, 0x03, 0x3f, 0xcc, 0x12, 0xb4, 0xc1, 0x70, 0xc3, 0x2c, 0xc4, | ||
| 1313 | 0x43, 0x30, 0xcb, 0x40, 0x81, 0x41, 0x30, 0xc8, 0x40, 0x07, 0xf0, 0xc0, | ||
| 1314 | 0x0f, 0xe3, 0x0d, 0x23, 0xe1, 0x12, 0x3c, 0x41, 0xc1, 0x18, 0x6f, 0x28, | ||
| 1315 | 0x09, 0x98, 0xc0, 0x09, 0x0a, 0xc6, 0x1c, 0x83, 0x3c, 0x04, 0x60, 0x31, | ||
| 1316 | 0xc8, 0x10, 0xcc, 0xc3, 0x48, 0x58, 0x70, 0xc8, 0x67, 0x90, 0x21, 0xa8, | ||
| 1317 | 0x07, 0x93, 0x18, 0x6e, 0x38, 0xc0, 0xc1, 0x99, 0x65, 0xf8, 0xaa, 0x60, | ||
| 1318 | 0x0c, 0x61, 0x28, 0x8b, 0xe1, 0x86, 0x60, 0x1c, 0x94, 0x59, 0x86, 0xcb, | ||
| 1319 | 0x0a, 0x4c, 0x28, 0x07, 0xf9, 0xcc, 0x12, 0x60, 0x23, 0x06, 0x84, 0x11, | ||
| 1320 | 0xc0, 0xc5, 0x30, 0x62, 0x50, 0x18, 0x81, 0x5c, 0x04, 0xe8, 0x60, 0x81, | ||
| 1321 | 0x3a, 0xc8, 0xc7, 0x02, 0x76, 0x80, 0xcf, 0x2c, 0x01, 0x36, 0x50, 0x01, | ||
| 1322 | 0x28, 0x96, 0x70, 0xcd, 0x31, 0xf4, 0x43, 0xd0, 0x16, 0x63, 0x08, 0x0c, | ||
| 1323 | 0x5b, 0x0c, 0x37, 0x04, 0xec, 0xa0, 0xcc, 0x32, 0x68, 0x59, 0x60, 0x82, | ||
| 1324 | 0x3b, 0xc8, 0x67, 0x96, 0x60, 0x1b, 0x31, 0x20, 0x8c, 0x20, 0x2f, 0x86, | ||
| 1325 | 0x11, 0x83, 0xc2, 0x08, 0xf6, 0x22, 0x88, 0x07, 0x0b, 0xe6, 0x41, 0x3e, | ||
| 1326 | 0x16, 0xd4, 0x03, 0x7c, 0x66, 0x09, 0xb6, 0x81, 0x0a, 0x40, 0xc9, 0x04, | ||
| 1327 | 0x6d, 0x8e, 0x21, 0x09, 0xe8, 0x62, 0x0c, 0xa1, 0xa2, 0x8b, 0xe1, 0x86, | ||
| 1328 | 0xa0, 0x1e, 0x94, 0x59, 0x86, 0x8e, 0x0b, 0x4c, 0xb8, 0x07, 0xf9, 0xcc, | ||
| 1329 | 0x12, 0x78, 0x23, 0x06, 0x84, 0x11, 0x88, 0xc6, 0x30, 0x62, 0x50, 0x18, | ||
| 1330 | 0x01, 0x69, 0x04, 0xfa, 0x60, 0x01, 0x3f, 0xc8, 0xc7, 0x02, 0x7f, 0x80, | ||
| 1331 | 0xcf, 0x2c, 0x81, 0x37, 0x50, 0x01, 0x28, 0x9c, 0xd0, 0xcd, 0x31, 0x24, | ||
| 1332 | 0x01, 0x5f, 0x8c, 0x18, 0x18, 0x46, 0xa0, 0x1a, 0x41, 0x4c, 0xbc, 0xc4, | ||
| 1333 | 0x20, 0x43, 0x30, 0x13, 0x64, 0x31, 0x4b, 0xf0, 0x0d, 0x54, 0x04, 0x7e, | ||
| 1334 | 0x40, 0x09, 0xde, 0x20, 0x43, 0x80, 0x13, 0x66, 0x31, 0x4b, 0xd0, 0x06, | ||
| 1335 | 0xb3, 0x0c, 0x61, 0xd0, 0x06, 0xfc, 0x30, 0xc8, 0xd0, 0x0b, 0x39, 0x51, | ||
| 1336 | 0x16, 0x23, 0x06, 0x85, 0x11, 0xb0, 0x46, 0xd0, 0x12, 0x73, 0x0c, 0x36, | ||
| 1337 | 0x11, 0x98, 0xc6, 0x88, 0x41, 0x61, 0x04, 0xae, 0x31, 0xb8, 0xc4, 0x1c, | ||
| 1338 | 0x83, 0x10, 0x98, 0xc6, 0x88, 0x41, 0x61, 0x04, 0xb0, 0x51, 0xbc, 0xc4, | ||
| 1339 | 0x1c, 0x83, 0x10, 0x9c, 0xc6, 0x20, 0x43, 0xd0, 0x13, 0x6e, 0x31, 0xc8, | ||
| 1340 | 0x10, 0x94, 0x03, 0x5c, 0x8c, 0x37, 0xd0, 0xc5, 0x5f, 0xb4, 0x06, 0x05, | ||
| 1341 | 0x63, 0xbc, 0xc1, 0x2e, 0x42, 0x23, 0x35, 0x28, 0x18, 0x73, 0x0c, 0x63, | ||
| 1342 | 0x11, 0xc4, 0xc6, 0x20, 0x43, 0x40, 0x16, 0x74, 0x61, 0x41, 0x22, 0x9f, | ||
| 1343 | 0x41, 0x86, 0xc0, 0x2c, 0xee, 0x62, 0xb8, 0xe1, 0x88, 0x09, 0x67, 0x96, | ||
| 1344 | 0x81, 0x0d, 0xc4, 0x20, 0x18, 0x43, 0x18, 0x6c, 0x63, 0xb8, 0x21, 0xa0, | ||
| 1345 | 0x09, 0x65, 0x96, 0x81, 0x0c, 0xc6, 0x20, 0x30, 0xc1, 0x26, 0xe4, 0x33, | ||
| 1346 | 0x4b, 0x50, 0x06, 0x23, 0x06, 0x84, 0x11, 0x84, 0xc7, 0x30, 0x62, 0x50, | ||
| 1347 | 0x18, 0xc1, 0x78, 0x04, 0x39, 0x61, 0xc1, 0x4e, 0xc8, 0xc7, 0x82, 0x9e, | ||
| 1348 | 0x80, 0xcf, 0x2c, 0x41, 0x19, 0x0c, 0x54, 0x00, 0xca, 0x18, 0x08, 0x64, | ||
| 1349 | 0x30, 0xc7, 0xe0, 0x16, 0x81, 0x6f, 0x8c, 0x21, 0x30, 0xbd, 0x31, 0xdc, | ||
| 1350 | 0x10, 0xf4, 0x84, 0x32, 0xcb, 0x70, 0x06, 0x66, 0x10, 0x98, 0xf0, 0x13, | ||
| 1351 | 0xf2, 0x99, 0x25, 0x40, 0x83, 0x11, 0x03, 0xc2, 0x08, 0xd4, 0x63, 0x18, | ||
| 1352 | 0x31, 0x28, 0x8c, 0x80, 0x3d, 0x02, 0xb1, 0xb0, 0x80, 0x2c, 0xe4, 0x63, | ||
| 1353 | 0x81, 0x59, 0xc0, 0x67, 0x96, 0x00, 0x0d, 0x06, 0x2a, 0x00, 0xc5, 0x0c, | ||
| 1354 | 0x84, 0x33, 0x98, 0x63, 0x48, 0x82, 0xf2, 0x18, 0x43, 0xa8, 0xca, 0x63, | ||
| 1355 | 0xb8, 0x21, 0x30, 0x0b, 0x65, 0x96, 0x41, 0x0d, 0xd2, 0x20, 0x30, 0x01, | ||
| 1356 | 0x2d, 0xe4, 0x33, 0x4b, 0xb0, 0x06, 0x23, 0x06, 0x84, 0x11, 0xcc, 0xc7, | ||
| 1357 | 0x30, 0x62, 0x50, 0x18, 0x41, 0x7d, 0x04, 0x6b, 0x61, 0x41, 0x5b, 0xc8, | ||
| 1358 | 0xc7, 0x82, 0xb7, 0x80, 0xcf, 0x2c, 0xc1, 0x1a, 0x0c, 0x54, 0x00, 0x4a, | ||
| 1359 | 0x1a, 0x08, 0x6a, 0x30, 0xc7, 0x90, 0x04, 0xed, 0x31, 0x62, 0x60, 0x18, | ||
| 1360 | 0xc1, 0x7e, 0x04, 0xa2, 0x01, 0x1a, 0x83, 0x0c, 0x01, 0x69, 0xd4, 0xc6, | ||
| 1361 | 0x2c, 0x01, 0x1b, 0x0c, 0x54, 0x04, 0x7e, 0x10, 0x06, 0xc2, 0x1a, 0x0c, | ||
| 1362 | 0x32, 0x04, 0xa9, 0x71, 0x1b, 0xb3, 0x04, 0x6d, 0x30, 0xd0, 0x12, 0xf0, | ||
| 1363 | 0x88, 0xc1, 0x23, 0x12, 0x8f, 0x7c, 0xb2, 0xc0, 0x06, 0x3c, 0x02, 0x06, | ||
| 1364 | 0x03, 0x2d, 0x01, 0x8a, 0x18, 0x7a, 0x21, 0x99, 0xc3, 0x47, 0xb0, 0x81, | ||
| 1365 | 0xcc, 0x80, 0xc1, 0x20, 0x43, 0x20, 0xec, 0x86, 0x05, 0xe1, 0x21, 0x9f, | ||
| 1366 | 0x0c, 0xc2, 0x81, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd7, 0xd2, 0x07, | ||
| 1367 | 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, 0x50, 0x13, 0xe7, 0x2c, | ||
| 1368 | 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, 0x9b, 0x6d, 0x29, 0x38, | ||
| 1369 | 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, 0x00, 0x03, 0x11, 0x71, | ||
| 1370 | 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, 0x21, 0x13, 0x00, 0x00, | ||
| 1371 | 0x00, 0x01, 0x31, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5b, 0x0a, 0xe0, | ||
| 1372 | 0x40, 0x05, 0x64, 0x15, 0xb6, 0x0c, 0x42, 0x30, 0x0b, 0x5b, 0x86, 0x23, | ||
| 1373 | 0xa0, 0x85, 0x2d, 0x83, 0x16, 0xd4, 0xc2, 0x96, 0xe1, 0x0b, 0x6c, 0x61, | ||
| 1374 | 0xcb, 0x10, 0x06, 0xc1, 0x2d, 0x6c, 0x19, 0xd4, 0x20, 0xc0, 0x85, 0x2d, | ||
| 1375 | 0xc3, 0x1b, 0x04, 0xb9, 0xb0, 0x65, 0xb0, 0x83, 0x40, 0x17, 0xb6, 0x0c, | ||
| 1376 | 0x78, 0x10, 0xe4, 0xc2, 0x96, 0x81, 0x1d, 0x02, 0x5d, 0xd8, 0x32, 0xb8, | ||
| 1377 | 0x43, 0x90, 0x0b, 0x5b, 0x06, 0xb5, 0x08, 0x74, 0x61, 0xcb, 0xc0, 0x16, | ||
| 1378 | 0x41, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1379 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 1380 | 0x00, 0x24, 0x00, 0x00, 0x00, 0x64, 0xce, 0x41, 0x2c, 0x8d, 0x93, 0x06, | ||
| 1381 | 0x54, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xdb, 0x0c, 0x00, 0x05, | ||
| 1382 | 0x33, 0x00, 0xb4, 0xcc, 0x00, 0x8c, 0x35, 0xb0, 0xec, 0x19, 0xca, 0x1f, | ||
| 1383 | 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, 0xde, 0x58, 0x83, 0x5e, | ||
| 1384 | 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, 0xdb, 0xa7, 0xf4, 0xe8, | ||
| 1385 | 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, 0xc2, 0xe8, 0xee, 0xdd, | ||
| 1386 | 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, | ||
| 1387 | 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, | ||
| 1388 | 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, | ||
| 1389 | 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, | ||
| 1390 | 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, 0x33, 0x00, 0x04, 0x8c, | ||
| 1391 | 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, | ||
| 1392 | 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, 0x02, 0x0d, 0x37, 0x50, | ||
| 1393 | 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, 0x43, 0xb5, 0xc1, 0x20, | ||
| 1394 | 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, 0x08, 0xa0, 0x6a, 0x96, | ||
| 1395 | 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, 0x48, 0x82, 0xe1, 0x86, | ||
| 1396 | 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, 0x28, 0x8c, 0x40, 0x0f, | ||
| 1397 | 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xe8, 0x60, 0xc4, 0xa0, 0x30, 0x02, 0x3e, | ||
| 1398 | 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xa0, 0x83, 0x11, 0x83, 0xc2, 0x08, 0xfc, | ||
| 1399 | 0x20, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xa8, 0x83, 0x59, 0x82, 0x62, 0xa0, | ||
| 1400 | 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xf4, 0x60, 0x0c, 0x41, 0xc8, | ||
| 1401 | 0x83, 0x31, 0x84, 0x21, 0x0f, 0x46, 0x0c, 0x0a, 0x23, 0x10, 0x05, 0x21, | ||
| 1402 | 0x18, 0x31, 0x28, 0x8c, 0x60, 0x14, 0x88, 0x60, 0xb8, 0x21, 0xb8, 0x84, | ||
| 1403 | 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, 0x0c, 0x6c, 0x40, 0x03, | ||
| 1404 | 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, 0x8f, 0x05, 0x1a, 0x7c, | ||
| 1405 | 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, 0x29, 0x0c, 0x32, 0x04, | ||
| 1406 | 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, 0x08, 0xd2, 0xc0, 0x0d, | ||
| 1407 | 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, 0xa0, 0x98, 0x65, 0x40, | ||
| 1408 | 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, 0x31, 0x28, 0x8c, 0x60, | ||
| 1409 | 0x16, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0xa0, 0x15, 0x46, 0x0c, 0x0a, | ||
| 1410 | 0x23, 0xa8, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, 0xa0, 0x15, 0x46, 0x0c, | ||
| 1411 | 0x0a, 0x23, 0xb8, 0x85, 0x42, 0x0d, 0xe6, 0x18, 0x84, 0xc0, 0x15, 0x66, | ||
| 1412 | 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, 0x10, 0x04, 0x04, 0x3a, | ||
| 1413 | 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1414 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 1415 | 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1416 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xed, 0x06, 0x00, | ||
| 1417 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1418 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 1419 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 1420 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 1421 | 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, | ||
| 1422 | 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, | ||
| 1423 | 0x88, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, | ||
| 1424 | 0x00, 0x51, 0x18, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, | ||
| 1425 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, | ||
| 1426 | 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, | ||
| 1427 | 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 1428 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, | ||
| 1429 | 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, | ||
| 1430 | 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, | ||
| 1431 | 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, | ||
| 1432 | 0xc0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, | ||
| 1433 | 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, | ||
| 1434 | 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, | ||
| 1435 | 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, | ||
| 1436 | 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1437 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, | ||
| 1438 | 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, | ||
| 1439 | 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, | ||
| 1440 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, | ||
| 1441 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, | ||
| 1442 | 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 1443 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1444 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, | ||
| 1445 | 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, | ||
| 1446 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 1447 | 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, | ||
| 1448 | 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, | ||
| 1449 | 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, | ||
| 1450 | 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, | ||
| 1451 | 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 1452 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, | ||
| 1453 | 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, | ||
| 1454 | 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, | ||
| 1455 | 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, | ||
| 1456 | 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, | ||
| 1457 | 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, | ||
| 1458 | 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, | ||
| 1459 | 0xc3, 0x26, 0x10, 0xc0, 0x02, 0x54, 0x43, 0x38, 0xa4, 0x83, 0x3c, 0xb4, | ||
| 1460 | 0x81, 0x38, 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xb8, | ||
| 1461 | 0xc3, 0x3b, 0xb4, 0x41, 0x38, 0xb0, 0x43, 0x3a, 0x84, 0xc3, 0x3c, 0x00, | ||
| 1462 | 0x1b, 0xb6, 0xa1, 0x00, 0x16, 0xa0, 0x1a, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, | ||
| 1463 | 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, | ||
| 1464 | 0x1d, 0xde, 0xa1, 0x0d, 0xc2, 0x81, 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, | ||
| 1465 | 0xd8, 0x60, 0x10, 0x06, 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0x40, 0x80, 0x05, | ||
| 1466 | 0xa8, 0x36, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x50, | ||
| 1467 | 0x1b, 0x7c, 0xe4, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, | ||
| 1468 | 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, | ||
| 1469 | 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 1470 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1471 | 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, | ||
| 1472 | 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, | ||
| 1473 | 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x3c, | ||
| 1474 | 0xb0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, | ||
| 1475 | 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, | ||
| 1476 | 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, | ||
| 1477 | 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, | ||
| 1478 | 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1479 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, | ||
| 1480 | 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, | ||
| 1481 | 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, | ||
| 1482 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, | ||
| 1483 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, | ||
| 1484 | 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 1485 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1486 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, | ||
| 1487 | 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, | ||
| 1488 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 1489 | 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, | ||
| 1490 | 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, | ||
| 1491 | 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, | ||
| 1492 | 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, | ||
| 1493 | 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 1494 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, | ||
| 1495 | 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, | ||
| 1496 | 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, | ||
| 1497 | 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, | ||
| 1498 | 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, | ||
| 1499 | 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, | ||
| 1500 | 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, | ||
| 1501 | 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x80, 0x04, 0x54, | ||
| 1502 | 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x28, 0x02, 0xb0, 0x00, | ||
| 1503 | 0xd5, 0x06, 0x64, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, | ||
| 1504 | 0xa8, 0x36, 0x18, 0xcc, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x50, | ||
| 1505 | 0x1b, 0xa6, 0xe6, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x01, 0xa4, 0xc1, | ||
| 1506 | 0x1d, 0xde, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xd2, 0x81, 0x1d, 0xe8, 0x21, | ||
| 1507 | 0x1d, 0xdc, 0x61, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 1508 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18, 0x88, 0x62, 0x42, | ||
| 1509 | 0x60, 0x4c, 0x08, 0x8e, 0x09, 0x03, 0x92, 0x28, 0x13, 0x86, 0x25, 0x51, | ||
| 1510 | 0x26, 0x04, 0xcc, 0x84, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, | ||
| 1511 | 0x00, 0x4d, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, | ||
| 1512 | 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, | ||
| 1513 | 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xc8, 0xc1, | ||
| 1514 | 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, | ||
| 1515 | 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, | ||
| 1516 | 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, | ||
| 1517 | 0x41, 0x18, 0x46, 0x18, 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, | ||
| 1518 | 0xe4, 0xa1, 0x1e, 0xc6, 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, | ||
| 1519 | 0xc2, 0x81, 0x1d, 0xf4, 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, | ||
| 1520 | 0xd2, 0x01, 0x1f, 0x50, 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, | ||
| 1521 | 0xec, 0xbe, 0x1d, 0x21, 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, | ||
| 1522 | 0x84, 0xa3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, | ||
| 1523 | 0x88, 0xf8, 0xed, 0xe1, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0x38, | ||
| 1524 | 0x4d, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, | ||
| 1525 | 0xdf, 0x1e, 0x7e, 0x20, 0x8a, 0x00, 0xec, 0x9f, 0xc6, 0x08, 0x80, 0x41, | ||
| 1526 | 0x04, 0x26, 0xb8, 0x48, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, | ||
| 1527 | 0x67, 0x21, 0xa2, 0x7f, 0x1a, 0x23, 0x00, 0x06, 0x11, 0x1c, 0xa1, 0x24, | ||
| 1528 | 0x41, 0x10, 0x08, 0x44, 0xb2, 0x34, 0x0f, 0x41, 0x85, 0x28, 0x8a, 0xa2, | ||
| 1529 | 0x20, 0xa9, 0x0c, 0x00, 0x00, 0x10, 0x55, 0x04, 0x00, 0x20, 0xab, 0x0c, | ||
| 1530 | 0x40, 0x51, 0x10, 0x56, 0x8c, 0xa2, 0x00, 0x00, 0x00, 0x20, 0xad, 0x0c, | ||
| 1531 | 0x45, 0x51, 0x10, 0x57, 0x84, 0xa2, 0x20, 0x6f, 0x8e, 0x00, 0x0c, 0xe6, | ||
| 1532 | 0x08, 0x82, 0x61, 0x04, 0x01, 0x0c, 0x4a, 0x12, 0x34, 0x8f, 0x00, 0x86, | ||
| 1533 | 0x62, 0x08, 0xd0, 0x58, 0x90, 0x60, 0x79, 0x84, 0x50, 0x0c, 0x01, 0x2a, | ||
| 1534 | 0x07, 0x02, 0x52, 0x00, 0x1c, 0x46, 0x18, 0xc0, 0x60, 0x10, 0x21, 0x10, | ||
| 1535 | 0xe6, 0x08, 0x40, 0x61, 0x10, 0xe1, 0x10, 0x06, 0x11, 0x0a, 0x61, 0x10, | ||
| 1536 | 0x01, 0x10, 0xa6, 0x00, 0x46, 0x00, 0x86, 0x11, 0x08, 0x30, 0x00, 0x00, | ||
| 1537 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 1538 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 1539 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 1540 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1541 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 1542 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 1543 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 1544 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 1545 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 1546 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 1547 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1548 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1549 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 1550 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 1551 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 1552 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1553 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 1554 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 1555 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 1556 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 1557 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 1558 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 1559 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 1560 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 1561 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 1562 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 1563 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 1564 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 1565 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 1566 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x98, | ||
| 1567 | 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0xcc, 0x04, | ||
| 1568 | 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xa6, 0x02, 0x02, | ||
| 1569 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x73, 0x01, 0x01, 0x20, | ||
| 1570 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0xc9, 0x80, 0x00, 0x10, 0x00, | ||
| 1571 | 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x6c, 0x08, 0x30, 0x0c, 0x00, 0x00, | ||
| 1572 | 0x00, 0x01, 0x00, 0x0c, 0x61, 0x2a, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 1573 | 0x00, 0x00, 0x86, 0x30, 0x1d, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, | ||
| 1574 | 0x00, 0x43, 0x98, 0x0f, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, | ||
| 1575 | 0x21, 0x4c, 0x07, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, | ||
| 1576 | 0x86, 0x0c, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, | ||
| 1577 | 0x98, 0x01, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x20, | ||
| 1578 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, | ||
| 1579 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x47, 0x00, 0x4a, | ||
| 1580 | 0xa0, 0x10, 0x0a, 0xa4, 0x08, 0x0a, 0xa2, 0x80, 0x0a, 0x30, 0xa0, 0x0c, | ||
| 1581 | 0x0a, 0xa3, 0x50, 0x0a, 0xa6, 0x70, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, | ||
| 1582 | 0x68, 0x2d, 0x9c, 0x11, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x90, 0x42, | ||
| 1583 | 0x29, 0x18, 0x42, 0xc7, 0x12, 0x24, 0x01, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 1584 | 0x00, 0xd9, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, | ||
| 1585 | 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x06, 0x18, | ||
| 1586 | 0x40, 0x67, 0x00, 0xa0, 0x41, 0x19, 0x50, 0xb9, 0x1b, 0x43, 0x0b, 0x93, | ||
| 1587 | 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, 0x80, 0x41, 0x73, 0x06, 0x02, | ||
| 1588 | 0x18, 0x38, 0x8c, 0x83, 0x20, 0x38, 0x38, 0xb6, 0x32, 0x90, 0xb6, 0x32, | ||
| 1589 | 0xba, 0x30, 0x36, 0x10, 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0x37, 0x90, | ||
| 1590 | 0x19, 0x19, 0x18, 0x99, 0x19, 0x17, 0x1a, 0x18, 0x1a, 0x10, 0x94, 0xb6, | ||
| 1591 | 0x32, 0xba, 0x30, 0x36, 0xb3, 0xb2, 0x96, 0x19, 0x19, 0x18, 0x99, 0x19, | ||
| 1592 | 0x17, 0x1a, 0x18, 0x9a, 0x94, 0x21, 0xc2, 0x19, 0x10, 0x43, 0x0c, 0x30, | ||
| 1593 | 0x68, 0xc0, 0x20, 0x02, 0x03, 0x86, 0x45, 0x53, 0x19, 0x5d, 0x18, 0xdb, | ||
| 1594 | 0x10, 0xe4, 0x0c, 0x0e, 0x30, 0x68, 0xc0, 0xa0, 0x01, 0x03, 0x86, 0x5b, | ||
| 1595 | 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x0b, | ||
| 1596 | 0x59, 0x99, 0xdb, 0x9b, 0x5c, 0xdb, 0xdc, 0x17, 0x59, 0xda, 0x5c, 0x98, | ||
| 1597 | 0x18, 0x5b, 0xd9, 0x10, 0xe1, 0x0c, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 1598 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 1599 | 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, | ||
| 1600 | 0x43, 0x84, 0x33, 0x58, 0x48, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, | ||
| 1601 | 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, | ||
| 1602 | 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, | ||
| 1603 | 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x33, 0x68, 0x18, 0x85, | ||
| 1604 | 0xa5, 0xc9, 0xb9, 0xc8, 0x95, 0xb9, 0x91, 0x95, 0xc9, 0x7d, 0xd1, 0x85, | ||
| 1605 | 0xc9, 0x9d, 0x95, 0xd1, 0x31, 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, | ||
| 1606 | 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x72, 0x0b, 0x6b, 0x2b, 0xa3, 0x61, | ||
| 1607 | 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x33, 0x04, 0x39, 0x83, 0x07, 0x0c, 0x98, | ||
| 1608 | 0x33, 0x80, 0xce, 0x20, 0x1a, 0x22, 0x9c, 0x81, 0x44, 0x26, 0x2c, 0x4d, | ||
| 1609 | 0xce, 0x05, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, | ||
| 1610 | 0x9a, 0x9c, 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, | ||
| 1611 | 0x39, 0x17, 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, | ||
| 1612 | 0xba, 0x34, 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, | ||
| 1613 | 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, | ||
| 1614 | 0xde, 0xdc, 0x86, 0x40, 0x60, 0xc0, 0x9c, 0x01, 0x75, 0x06, 0xd5, 0x19, | ||
| 1615 | 0x58, 0x67, 0x00, 0x9d, 0x41, 0x74, 0x06, 0xd7, 0x19, 0x60, 0x94, 0xc2, | ||
| 1616 | 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0xbe, | ||
| 1617 | 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x68, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, | ||
| 1618 | 0xd1, 0x95, 0x91, 0xa1, 0xd4, 0x8c, 0xbd, 0xb1, 0xbd, 0xc9, 0x11, 0xd9, | ||
| 1619 | 0xd1, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93, | ||
| 1620 | 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x63, 0x31, 0xf6, 0xc6, | ||
| 1621 | 0xf6, 0x26, 0x37, 0x44, 0x02, 0x83, 0xe6, 0x0c, 0xb4, 0x33, 0xd8, 0xce, | ||
| 1622 | 0xa0, 0x3a, 0x03, 0xee, 0x0c, 0xa0, 0x33, 0x88, 0xce, 0xe0, 0x3a, 0x83, | ||
| 1623 | 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, | ||
| 1624 | 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, | ||
| 1625 | 0x97, 0x59, 0x0a, 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x22, 0x74, | ||
| 1626 | 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x43, 0x24, 0x30, 0x80, 0xce, | ||
| 1627 | 0x40, 0x3b, 0x83, 0xef, 0x0c, 0xaa, 0x33, 0xe0, 0xce, 0x00, 0x3a, 0x03, | ||
| 1628 | 0x30, 0x38, 0x83, 0xeb, 0x0c, 0xc2, 0x80, 0x4a, 0x58, 0x9a, 0x9c, 0x8b, | ||
| 1629 | 0x58, 0x9d, 0x99, 0x59, 0x99, 0x1c, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb1, | ||
| 1630 | 0x3a, 0x33, 0xb3, 0x32, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0x32, 0x4a, 0x61, | ||
| 1631 | 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, | ||
| 1632 | 0x69, 0x6e, 0x64, 0x65, 0x78, 0x44, 0xc2, 0xd2, 0xe4, 0x5c, 0xe4, 0xca, | ||
| 1633 | 0xc2, 0xc8, 0x48, 0x85, 0xa5, 0xc9, 0xb9, 0xcc, 0xd1, 0xc9, 0xd5, 0x8d, | ||
| 1634 | 0xd1, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0xa5, 0xb9, 0x99, 0xbd, 0xb1, | ||
| 1635 | 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x23, 0x33, 0x37, 0x26, 0x75, 0x24, 0xf4, | ||
| 1636 | 0xf5, 0x56, 0x47, 0x07, 0x57, 0x47, 0x47, 0x86, 0xae, 0x0c, 0x8f, 0xae, | ||
| 1637 | 0x4e, 0xae, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0x8c, 0x4a, 0x9a, 0x1b, 0x5c, | ||
| 1638 | 0x1d, 0xdd, 0x17, 0x5d, 0x1e, 0x5c, 0x19, 0x97, 0xb1, 0x37, 0xb6, 0x37, | ||
| 1639 | 0xb9, 0xaf, 0xb9, 0xb1, 0x30, 0xb6, 0x32, 0x3a, 0x74, 0x6f, 0x6e, 0x65, | ||
| 1640 | 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x7c, 0xe8, | ||
| 1641 | 0xde, 0xdc, 0xca, 0xda, 0xc2, 0xe0, 0xbe, 0xcc, 0xc2, 0xc6, 0xe8, 0xde, | ||
| 1642 | 0xe4, 0x62, 0xf8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0x99, | ||
| 1643 | 0x85, 0x8d, 0xd1, 0xbd, 0xc9, 0xc9, 0xf0, 0x99, 0x23, 0x93, 0xfb, 0xba, | ||
| 1644 | 0x43, 0x4b, 0xa3, 0x2b, 0xfb, 0x82, 0x7b, 0x4b, 0x73, 0xa3, 0x1b, 0x02, | ||
| 1645 | 0x0b, 0x60, 0xc0, 0x80, 0x81, 0x03, 0x06, 0xcc, 0x19, 0xa0, 0xc1, 0x19, | ||
| 1646 | 0xa4, 0x01, 0x18, 0x38, 0x60, 0xe0, 0x80, 0x01, 0x73, 0x06, 0x68, 0x70, | ||
| 1647 | 0x06, 0x6a, 0x00, 0x06, 0x11, 0x18, 0x38, 0x60, 0xc0, 0x9c, 0x01, 0x1a, | ||
| 1648 | 0x9c, 0xc1, 0x1a, 0x80, 0x41, 0x05, 0x06, 0x0e, 0x18, 0x30, 0x67, 0x80, | ||
| 1649 | 0x06, 0x67, 0xc0, 0x06, 0x60, 0xf0, 0x80, 0x81, 0x03, 0x06, 0xcc, 0x19, | ||
| 1650 | 0xa0, 0xc1, 0x19, 0xb4, 0x01, 0x18, 0x58, 0x60, 0xe0, 0x80, 0x01, 0x73, | ||
| 1651 | 0x06, 0x68, 0x70, 0x06, 0x6e, 0x00, 0x06, 0x17, 0x18, 0x38, 0x60, 0xc0, | ||
| 1652 | 0x9c, 0x01, 0x1a, 0x9c, 0xc1, 0x1b, 0x80, 0x01, 0x06, 0x06, 0x0e, 0x18, | ||
| 1653 | 0x30, 0x67, 0x80, 0x06, 0x67, 0x00, 0x07, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, | ||
| 1654 | 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, | ||
| 1655 | 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, | ||
| 1656 | 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, | ||
| 1657 | 0x95, 0xf1, 0x99, 0x42, 0x0b, 0x23, 0x2b, 0x93, 0x1b, 0x7a, 0x73, 0x9b, | ||
| 1658 | 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0x63, 0x30, 0x36, 0x84, 0x0c, 0xc0, 0x80, | ||
| 1659 | 0x3a, 0x83, 0x31, 0x38, 0x03, 0x32, 0x00, 0x03, 0xe9, 0x0c, 0xca, 0x00, | ||
| 1660 | 0x0c, 0x18, 0x30, 0x68, 0xce, 0xc0, 0x0c, 0xce, 0xe0, 0x0c, 0xce, 0x20, | ||
| 1661 | 0x0e, 0xce, 0x40, 0x0e, 0xc0, 0x40, 0x3a, 0x83, 0x39, 0x00, 0x03, 0xe7, | ||
| 1662 | 0x0c, 0xa0, 0x33, 0xa0, 0x83, 0x33, 0xb8, 0xce, 0xa0, 0x0e, 0x68, 0x98, | ||
| 1663 | 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0xd0, 0x78, 0x33, 0x33, 0x9b, 0x2b, 0xa3, | ||
| 1664 | 0x23, 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x83, 0x37, 0x43, 0xa3, 0x2d, | ||
| 1665 | 0x8c, 0x4e, 0x2e, 0x0d, 0x6f, 0x08, 0x05, 0x06, 0x0c, 0x18, 0x3c, 0x60, | ||
| 1666 | 0xc0, 0x9c, 0xc1, 0x1d, 0x9c, 0x01, 0x1e, 0x80, 0xc1, 0x03, 0x06, 0x19, | ||
| 1667 | 0x18, 0x30, 0x67, 0x90, 0x07, 0x67, 0xa0, 0x07, 0x4c, 0xb2, 0xaa, 0xac, | ||
| 1668 | 0x88, 0xca, 0xc6, 0xde, 0xc8, 0xca, 0x68, 0x90, 0x95, 0x8d, 0xbd, 0x91, | ||
| 1669 | 0x95, 0x0d, 0x21, 0x03, 0x30, 0x70, 0xce, 0x60, 0x0c, 0xce, 0x80, 0x0c, | ||
| 1670 | 0xc0, 0x60, 0x3a, 0x83, 0x32, 0x00, 0x83, 0x06, 0x0c, 0x9a, 0x33, 0x30, | ||
| 1671 | 0x83, 0x33, 0x38, 0x83, 0x33, 0xd8, 0x83, 0x33, 0x90, 0x03, 0x30, 0x98, | ||
| 1672 | 0xce, 0x60, 0x0e, 0xc0, 0xe0, 0x39, 0x03, 0xe8, 0x0c, 0xf8, 0xe0, 0x0c, | ||
| 1673 | 0xae, 0x33, 0xe8, 0x03, 0x2e, 0x61, 0x69, 0x72, 0x2e, 0x74, 0x65, 0x78, | ||
| 1674 | 0x74, 0x75, 0x72, 0x65, 0x54, 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, 0xc2, 0xda, | ||
| 1675 | 0xe0, 0xd8, 0xca, 0x88, 0xd1, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xc9, | ||
| 1676 | 0x90, 0xf1, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xb1, 0x80, 0xcc, 0x85, 0xb5, | ||
| 1677 | 0xc1, 0xb1, 0x95, 0xf9, 0x90, 0xa0, 0x2b, 0xc3, 0xcb, 0x1a, 0x42, 0x81, | ||
| 1678 | 0x81, 0x76, 0x06, 0x7f, 0x70, 0x06, 0x65, 0x00, 0x06, 0x0c, 0x18, 0x34, | ||
| 1679 | 0x67, 0x00, 0x0a, 0x67, 0x00, 0x9d, 0x41, 0x28, 0x9c, 0xc1, 0x75, 0x06, | ||
| 1680 | 0xa2, 0x40, 0x8f, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0xec, | ||
| 1681 | 0x2b, 0x4c, 0x4e, 0x2e, 0x2c, 0x8f, 0xc7, 0x8c, 0xed, 0x2d, 0x8c, 0x8e, | ||
| 1682 | 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc, 0x87, 0x05, 0x5d, 0x19, | ||
| 1683 | 0x5e, 0x95, 0xd5, 0x10, 0x0a, 0x0c, 0xb6, 0x33, 0xf8, 0x83, 0x33, 0x28, | ||
| 1684 | 0x03, 0x30, 0x68, 0xc0, 0xa0, 0x39, 0x03, 0x50, 0x38, 0x03, 0xe8, 0x0c, | ||
| 1685 | 0x48, 0xe1, 0x0c, 0xae, 0x33, 0x28, 0x05, 0x2e, 0x61, 0x69, 0x72, 0x2e, | ||
| 1686 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x3c, 0xe6, 0xc2, 0xda, 0xe0, | ||
| 1687 | 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, 0xc0, 0x80, 0x3b, 0x83, 0x53, | ||
| 1688 | 0x38, 0x83, 0x32, 0x00, 0x03, 0x06, 0x0c, 0x9a, 0x33, 0x80, 0xce, 0x00, | ||
| 1689 | 0x15, 0xce, 0xe0, 0x3a, 0x83, 0x54, 0x18, 0x02, 0x9d, 0x41, 0x76, 0x06, | ||
| 1690 | 0xde, 0x19, 0x88, 0xc1, 0x19, 0xd8, 0xc1, 0x19, 0xf8, 0xc1, 0x19, 0x8c, | ||
| 1691 | 0xc2, 0x19, 0x98, 0xc2, 0x19, 0xa8, 0xc2, 0x10, 0x23, 0x02, 0xce, 0x60, | ||
| 1692 | 0x3a, 0x83, 0x55, 0xa0, 0x18, 0x84, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, | ||
| 1693 | 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xcd, 0xa1, 0x4c, 0x11, | ||
| 1694 | 0x31, 0x7d, 0x65, 0x55, 0x59, 0x7d, 0x99, 0xc9, 0x85, 0x9d, 0xb5, 0x95, | ||
| 1695 | 0xb9, 0xd1, 0xa5, 0x0c, 0x21, 0xce, 0xc0, 0x15, 0xce, 0xa0, 0x15, 0x88, | ||
| 1696 | 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, | ||
| 1697 | 0xbd, 0xc1, 0x95, 0xb5, 0xd0, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xcd, | ||
| 1698 | 0x0d, 0x31, 0xce, 0x00, 0x16, 0xce, 0xc0, 0x15, 0xce, 0xe0, 0x15, 0x88, | ||
| 1699 | 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, | ||
| 1700 | 0xbd, 0xc1, 0x95, 0xb5, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0xcd, | ||
| 1701 | 0x0d, 0x31, 0xce, 0x40, 0x16, 0xce, 0xc0, 0x15, 0xce, 0x20, 0x16, 0x86, | ||
| 1702 | 0x10, 0x67, 0x00, 0x0b, 0x67, 0x20, 0x0b, 0xb4, 0xc2, 0xd2, 0xe4, 0x5a, | ||
| 1703 | 0xc2, 0xd8, 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, 0xc6, 0xde, 0xe0, 0xca, 0x5a, | ||
| 1704 | 0xc2, 0xe4, 0xce, 0x50, 0x66, 0x52, 0x86, 0x18, 0x67, 0x50, 0x0b, 0x67, | ||
| 1705 | 0xe0, 0x0a, 0x67, 0x40, 0x0b, 0xb4, 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, | ||
| 1706 | 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, 0xc6, 0xde, 0xe0, 0xca, 0x5a, 0xc2, 0xe4, | ||
| 1707 | 0xce, 0x50, 0x68, 0x52, 0x86, 0x18, 0x67, 0x70, 0x0b, 0x67, 0xe0, 0x0a, | ||
| 1708 | 0x67, 0x60, 0x0b, 0x43, 0x88, 0x33, 0xa8, 0x85, 0x33, 0xb8, 0x85, 0x21, | ||
| 1709 | 0xc2, 0x19, 0xdc, 0xc2, 0x10, 0xe3, 0x0c, 0x6a, 0xe1, 0x0c, 0x60, 0xe1, | ||
| 1710 | 0x0c, 0x64, 0x81, 0xd5, 0x97, 0x16, 0xd5, 0x54, 0x4c, 0xcd, 0x14, 0x5a, | ||
| 1711 | 0x18, 0x59, 0x99, 0xdc, 0xd0, 0x9b, 0xdb, 0x1c, 0x5d, 0x98, 0x1b, 0xdd, | ||
| 1712 | 0x1c, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, 0x37, 0xba, 0x32, 0x37, 0x3a, | ||
| 1713 | 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, | ||
| 1714 | 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x43, 0x84, 0x33, | ||
| 1715 | 0xe8, 0x85, 0x21, 0xc6, 0x19, 0xf0, 0xc2, 0x19, 0xf8, 0xc2, 0x1a, 0x78, | ||
| 1716 | 0x43, 0x8c, 0x33, 0x40, 0x83, 0x33, 0xf8, 0x85, 0x35, 0xf0, 0x86, 0x88, | ||
| 1717 | 0xc1, 0x19, 0xec, 0xc2, 0x19, 0x80, 0xc3, 0x1a, 0x78, 0x67, 0x00, 0x0e, | ||
| 1718 | 0x6b, 0xf0, 0x9d, 0x01, 0x38, 0xac, 0x01, 0x18, 0x9c, 0x01, 0x38, 0xac, | ||
| 1719 | 0x41, 0x18, 0x9c, 0x01, 0x38, 0xac, 0x81, 0x18, 0x9c, 0x01, 0x38, 0xac, | ||
| 1720 | 0xc1, 0x18, 0x9c, 0x01, 0x38, 0xac, 0x01, 0x19, 0x9c, 0x01, 0x38, 0xac, | ||
| 1721 | 0x41, 0x37, 0xc4, 0x38, 0x83, 0x70, 0x38, 0x03, 0x70, 0x58, 0x03, 0x30, | ||
| 1722 | 0x18, 0x62, 0x9c, 0x41, 0x38, 0x9c, 0x01, 0x38, 0xac, 0x41, 0x37, 0xc4, | ||
| 1723 | 0x38, 0x83, 0x70, 0x38, 0x03, 0x70, 0x58, 0x03, 0x31, 0x18, 0x62, 0x9c, | ||
| 1724 | 0x41, 0x38, 0x9c, 0x01, 0x38, 0xac, 0xc1, 0x18, 0x0c, 0x31, 0xce, 0x20, | ||
| 1725 | 0x1c, 0xce, 0x00, 0x1c, 0xd6, 0x80, 0x0c, 0x86, 0x18, 0x67, 0x10, 0x0e, | ||
| 1726 | 0x67, 0x00, 0x0e, 0x6b, 0xf0, 0x0d, 0x31, 0xce, 0x20, 0x1c, 0xce, 0x00, | ||
| 1727 | 0x1c, 0xd6, 0x20, 0x0c, 0x86, 0x18, 0x67, 0x10, 0x0e, 0x67, 0x00, 0x0e, | ||
| 1728 | 0x6b, 0xe0, 0x8d, 0x88, 0xd8, 0x81, 0x1d, 0xec, 0xa1, 0x1d, 0xdc, 0xa0, | ||
| 1729 | 0x1d, 0xde, 0x81, 0x1c, 0xea, 0x81, 0x1d, 0xca, 0xc1, 0x0d, 0xcc, 0x81, | ||
| 1730 | 0x1d, 0xc2, 0xe1, 0x1c, 0xe6, 0x61, 0x8a, 0x10, 0x0c, 0x23, 0x14, 0x76, | ||
| 1731 | 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, | ||
| 1732 | 0xa0, 0x87, 0x29, 0x41, 0x31, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, | ||
| 1733 | 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, | ||
| 1734 | 0x81, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, | ||
| 1735 | 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, | ||
| 1736 | 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x20, | ||
| 1737 | 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, | ||
| 1738 | 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, | ||
| 1739 | 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x32, 0x28, 0x8c, 0x33, 0x82, | ||
| 1740 | 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x07, 0x79, 0x08, 0x87, 0x73, | ||
| 1741 | 0x68, 0x87, 0x72, 0x70, 0x07, 0x7a, 0x98, 0x12, 0xb0, 0x02, 0x00, 0x00, | ||
| 1742 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 1743 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 1744 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 1745 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 1746 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 1747 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 1748 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 1749 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 1750 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 1751 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 1752 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 1753 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 1754 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 1755 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 1756 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 1757 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 1758 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 1759 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 1760 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 1761 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 1762 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 1763 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 1764 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 1765 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 1766 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 1767 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 1768 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 1769 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 1770 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 1771 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 1772 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 1773 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 1774 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 1775 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 1776 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 1777 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 1778 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 1779 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 1780 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 1781 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 1782 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 1783 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 1784 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 1785 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 1786 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 1787 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 1788 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 1789 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 1790 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 1791 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 1792 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 1793 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 1794 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 1795 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 1796 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 1797 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 1798 | 0x00, 0x35, 0x00, 0x00, 0x00, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, | ||
| 1799 | 0xb3, 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, | ||
| 1800 | 0x51, 0x14, 0x96, 0x30, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, | ||
| 1801 | 0x03, 0x5c, 0x7e, 0x75, 0x17, 0xb7, 0x6d, 0x01, 0x14, 0x80, 0x44, 0x7e, | ||
| 1802 | 0x01, 0x48, 0xd3, 0x2f, 0x2c, 0x00, 0xf3, 0xf8, 0xd5, 0x5d, 0xdc, 0xb6, | ||
| 1803 | 0x09, 0x40, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xff, 0xe3, 0x58, 0x7e, | ||
| 1804 | 0x71, 0xdb, 0x36, 0x10, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, | ||
| 1805 | 0x10, 0x48, 0x7e, 0x71, 0xdb, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, 0x80, | ||
| 1806 | 0x34, 0xfd, 0x8f, 0x63, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x29, 0x84, 0x01, | ||
| 1807 | 0x80, 0x44, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0xfc, 0x13, 0x71, 0x4d, 0x54, | ||
| 1808 | 0x44, 0xfc, 0xf6, 0xf0, 0x03, 0x51, 0x04, 0x60, 0x7e, 0x85, 0x17, 0xb7, | ||
| 1809 | 0x6d, 0x04, 0x0d, 0x80, 0x44, 0xfe, 0xe0, 0x4c, 0x7e, 0x75, 0x17, 0xb7, | ||
| 1810 | 0x6d, 0x0b, 0x1b, 0x80, 0x44, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0xfc, 0x13, | ||
| 1811 | 0x71, 0x4d, 0x54, 0x44, 0xfc, 0xf6, 0xe0, 0x57, 0x78, 0x71, 0xdb, 0x86, | ||
| 1812 | 0x30, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, 0x10, 0x48, 0x7e, | ||
| 1813 | 0x75, 0x17, 0xb7, 0x6d, 0x00, 0x10, 0xdb, 0x95, 0xbf, 0xec, 0xbe, 0x7f, | ||
| 1814 | 0x11, 0x01, 0x06, 0x43, 0x34, 0x93, 0x19, 0x44, 0x00, 0x12, 0xf9, 0x05, | ||
| 1815 | 0x20, 0x4d, 0x7f, 0xc1, 0x00, 0x97, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, | ||
| 1816 | 0x00, 0x61, 0x20, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, | ||
| 1817 | 0x10, 0x0b, 0x04, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x14, 0x8f, 0x45, | ||
| 1818 | 0x00, 0x81, 0x70, 0xcc, 0x41, 0x30, 0x0d, 0x84, 0x07, 0xb4, 0x16, 0x41, | ||
| 1819 | 0x09, 0x50, 0x3a, 0xc7, 0xc0, 0xe0, 0x01, 0x1e, 0x8c, 0x00, 0x8c, 0x35, | ||
| 1820 | 0x00, 0x81, 0x40, 0xe2, 0x08, 0x00, 0x85, 0x23, 0x00, 0x35, 0x40, 0xe0, | ||
| 1821 | 0x0c, 0x00, 0x01, 0x63, 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, 0xa0, | ||
| 1822 | 0xb3, 0xe6, 0x1c, 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x09, 0x06, | ||
| 1823 | 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, | ||
| 1824 | 0x30, 0x03, 0x30, 0x07, 0x21, 0x0b, 0xb2, 0x20, 0x0b, 0xb3, 0x30, 0x07, | ||
| 1825 | 0x31, 0x0b, 0xb9, 0x30, 0x0b, 0x7d, 0x40, 0xc5, 0x0c, 0xc0, 0x08, 0xc0, | ||
| 1826 | 0x0c, 0xc0, 0x58, 0x03, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, 0xe2, | ||
| 1827 | 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x8d, 0x35, 0xb0, 0xed, 0xfc, 0x93, 0x1e, | ||
| 1828 | 0xdb, 0xce, 0x3f, 0xe9, 0xb1, 0xed, 0xfc, 0x93, 0xde, 0x58, 0x03, 0x08, | ||
| 1829 | 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, | ||
| 1830 | 0xd6, 0xbf, 0x30, 0xd6, 0x00, 0x82, 0xe0, 0x9a, 0x83, 0x01, 0x08, 0x82, | ||
| 1831 | 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x8c, 0x35, 0x80, 0x20, | ||
| 1832 | 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, | ||
| 1833 | 0x0e, 0x06, 0x63, 0x0d, 0xeb, 0x88, 0xc7, 0x2c, 0x18, 0xac, 0x23, 0x1e, | ||
| 1834 | 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x58, 0x03, 0x08, 0xc2, | ||
| 1835 | 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, | ||
| 1836 | 0x63, 0x30, 0xd6, 0x20, 0xe6, 0x62, 0xda, 0x7f, 0x60, 0xc9, 0xb3, 0xf1, | ||
| 1837 | 0x2f, 0x8c, 0xe9, 0xaa, 0xe6, 0xbe, 0x30, 0xd6, 0xf0, 0xcf, 0xa4, 0xff, | ||
| 1838 | 0xfb, 0x02, 0x5d, 0x83, 0x62, 0xfe, 0xb5, 0x70, 0x1c, 0x83, 0xbe, 0x30, | ||
| 1839 | 0xd6, 0x30, 0xf7, 0x6d, 0x9a, 0xfa, 0x42, 0xeb, 0x86, 0x3c, 0xef, 0x0b, | ||
| 1840 | 0x7c, 0xce, 0xfa, 0xf8, 0x47, 0xc0, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, | ||
| 1841 | 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0x79, 0xaf, 0xab, | ||
| 1842 | 0xec, 0xcd, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, | ||
| 1843 | 0xdb, 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, 0xf8, 0x37, | ||
| 1844 | 0x46, 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, 0xf6, 0x34, | ||
| 1845 | 0x18, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, 0x00, 0x00, | ||
| 1846 | 0x00, 0x23, 0x06, 0x4a, 0x11, 0xbc, 0xc2, 0x1b, 0xb4, 0x81, 0x1c, 0x8c, | ||
| 1847 | 0x41, 0x19, 0x90, 0x41, 0x30, 0x62, 0xb0, 0x14, 0x41, 0x2c, 0xbc, 0x81, | ||
| 1848 | 0x1b, 0xcc, 0xc1, 0x2b, 0x90, 0x81, 0x19, 0x94, 0x81, 0x30, 0x86, 0x10, | ||
| 1849 | 0xc0, 0xc2, 0x20, 0xc3, 0xe0, 0xad, 0xc1, 0x1c, 0x43, 0x20, 0xc4, 0xc2, | ||
| 1850 | 0x88, 0xc1, 0x52, 0x04, 0xb5, 0x30, 0x07, 0x72, 0x70, 0x07, 0xb2, 0x80, | ||
| 1851 | 0x06, 0x6a, 0x90, 0x06, 0xc6, 0x18, 0x42, 0x40, 0x0b, 0x73, 0x0c, 0x43, | ||
| 1852 | 0x10, 0x0b, 0x87, 0x07, 0xea, 0x52, 0x50, 0x06, 0x19, 0x02, 0x33, 0x80, | ||
| 1853 | 0x03, 0x23, 0x02, 0xf8, 0x8c, 0x37, 0xf0, 0x01, 0x2a, 0xe4, 0xc2, 0x05, | ||
| 1854 | 0xea, 0x52, 0x50, 0x06, 0x19, 0x82, 0x35, 0xa8, 0x83, 0x11, 0x83, 0xc2, | ||
| 1855 | 0x08, 0xcc, 0xa1, 0x08, 0xc6, 0x2b, 0x42, 0xa1, 0x15, 0x7c, 0xe1, 0x17, | ||
| 1856 | 0xf4, 0xe0, 0x02, 0x75, 0x29, 0x28, 0x83, 0x0c, 0x01, 0x1c, 0xe8, 0xc1, | ||
| 1857 | 0x88, 0x41, 0x61, 0x04, 0xeb, 0xa0, 0x04, 0xe3, 0x15, 0xa6, 0x20, 0x0b, | ||
| 1858 | 0xe3, 0x40, 0x0e, 0xa0, 0x70, 0x81, 0xba, 0x14, 0x94, 0x41, 0x86, 0xa0, | ||
| 1859 | 0x0e, 0xfe, 0x60, 0xc4, 0xa0, 0x30, 0x02, 0x78, 0x78, 0x82, 0x39, 0x86, | ||
| 1860 | 0x3a, 0x58, 0xd2, 0x61, 0x8e, 0x21, 0x38, 0xd2, 0x61, 0x8e, 0x21, 0x18, | ||
| 1861 | 0xce, 0x61, 0xbc, 0xe1, 0x15, 0x74, 0x01, 0x1d, 0x28, 0x18, 0xc3, 0x0d, | ||
| 1862 | 0xc1, 0x1f, 0x04, 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0x10, 0x7d, 0x70, | ||
| 1863 | 0x0a, 0xe3, 0x0d, 0xb3, 0xe0, 0x0b, 0xe0, 0x40, 0xc1, 0x18, 0x31, 0x20, | ||
| 1864 | 0x8c, 0xc0, 0x1e, 0x86, 0x11, 0x83, 0xc2, 0x08, 0xf0, 0x21, 0xc8, 0x03, | ||
| 1865 | 0x0b, 0xf2, 0x00, 0x3e, 0x23, 0x06, 0x85, 0x11, 0xe0, 0x43, 0xe0, 0x07, | ||
| 1866 | 0x36, 0xe8, 0x81, 0x7c, 0x4c, 0x0f, 0x82, 0xf8, 0xd8, 0x10, 0xd0, 0x67, | ||
| 1867 | 0xc4, 0x80, 0x30, 0x82, 0x7e, 0x08, 0x46, 0x0c, 0x0a, 0x23, 0xf8, 0x87, | ||
| 1868 | 0x80, 0x0f, 0x2c, 0xe0, 0x03, 0xf9, 0xcc, 0x31, 0x98, 0xc2, 0xc2, 0x0f, | ||
| 1869 | 0x83, 0x0c, 0xc1, 0x29, 0xd8, 0x82, 0x0d, 0x01, 0x7d, 0x06, 0x19, 0x82, | ||
| 1870 | 0x54, 0xe0, 0x85, 0x41, 0x86, 0xa0, 0xf2, 0x85, 0x59, 0x02, 0x61, 0xa0, | ||
| 1871 | 0x22, 0x10, 0x02, 0x36, 0x00, 0xc6, 0x1b, 0xca, 0x01, 0x1e, 0x40, 0x82, | ||
| 1872 | 0x82, 0x31, 0xdc, 0x10, 0xdc, 0x81, 0x33, 0xcb, 0x30, 0x10, 0xc1, 0x20, | ||
| 1873 | 0x03, 0x31, 0x0b, 0xbd, 0x30, 0xde, 0x90, 0x0e, 0xf4, 0x80, 0x0f, 0x14, | ||
| 1874 | 0x8c, 0xf1, 0x86, 0x75, 0xb0, 0x87, 0x7c, 0xa0, 0x60, 0x8c, 0x18, 0x20, | ||
| 1875 | 0x47, 0x14, 0x13, 0x45, 0x77, 0x0c, 0xc1, 0x20, 0x43, 0x50, 0x0b, 0xe8, | ||
| 1876 | 0x30, 0xc8, 0x10, 0x2c, 0xea, 0x30, 0x4b, 0x40, 0x0c, 0x54, 0x04, 0xc2, | ||
| 1877 | 0x80, 0x09, 0xc3, 0x0d, 0x61, 0x70, 0x0a, 0xc1, 0x2c, 0x43, 0x31, 0x05, | ||
| 1878 | 0xe3, 0x0d, 0xf2, 0xd0, 0x0f, 0x2e, 0x41, 0xc1, 0x18, 0x6e, 0x08, 0x54, | ||
| 1879 | 0x21, 0x98, 0x65, 0x30, 0x8e, 0x60, 0x90, 0xa1, 0x00, 0x07, 0x75, 0x18, | ||
| 1880 | 0x6f, 0xb0, 0x87, 0x90, 0x58, 0x09, 0x0a, 0xc6, 0x1c, 0xc3, 0x2f, 0x04, | ||
| 1881 | 0x35, 0x31, 0xc8, 0x10, 0x80, 0xc3, 0x3b, 0x58, 0x50, 0xc8, 0x67, 0x90, | ||
| 1882 | 0x21, 0x10, 0x87, 0x7a, 0x98, 0x25, 0x68, 0x83, 0xf1, 0x06, 0x7e, 0x38, | ||
| 1883 | 0x89, 0x9c, 0xa0, 0x60, 0x8c, 0x37, 0xf8, 0x43, 0x4a, 0xcc, 0x04, 0x05, | ||
| 1884 | 0x63, 0x90, 0x01, 0x5a, 0x07, 0x7d, 0x18, 0x6e, 0x20, 0x62, 0xc1, 0x99, | ||
| 1885 | 0x65, 0x40, 0xa4, 0x60, 0x0c, 0x41, 0xfa, 0x89, 0xe1, 0x86, 0x60, 0x17, | ||
| 1886 | 0x94, 0x59, 0x06, 0x25, 0x09, 0x4c, 0xe8, 0x05, 0xf9, 0xcc, 0x12, 0x2c, | ||
| 1887 | 0x36, 0xfc, 0x02, 0x7c, 0x46, 0x0c, 0x08, 0x23, 0x60, 0x8b, 0xc0, 0x82, | ||
| 1888 | 0x7b, 0x90, 0xcf, 0x88, 0x41, 0x61, 0x04, 0x6f, 0x11, 0xdc, 0xc3, 0x2c, | ||
| 1889 | 0xc1, 0x32, 0x50, 0x01, 0x28, 0x89, 0xa0, 0xcc, 0x31, 0xd0, 0x43, 0x70, | ||
| 1890 | 0x16, 0x63, 0x08, 0xdb, 0x59, 0x0c, 0x37, 0x04, 0xe4, 0xa0, 0xcc, 0x32, | ||
| 1891 | 0x34, 0x4c, 0x60, 0x82, 0x39, 0xc8, 0x67, 0x96, 0xc0, 0xb1, 0x01, 0x1d, | ||
| 1892 | 0xe0, 0x33, 0x62, 0x40, 0x18, 0x41, 0x5d, 0x04, 0x16, 0x80, 0x84, 0x7c, | ||
| 1893 | 0x46, 0x0c, 0x0a, 0x23, 0xc0, 0x8b, 0x00, 0x24, 0x66, 0x09, 0x9c, 0x81, | ||
| 1894 | 0x0a, 0x40, 0x61, 0x84, 0x66, 0x8e, 0x21, 0x09, 0xde, 0x62, 0x0c, 0x81, | ||
| 1895 | 0x0c, 0xda, 0x62, 0xb8, 0x21, 0x68, 0x07, 0x65, 0x96, 0x01, 0x7a, 0x02, | ||
| 1896 | 0x13, 0xde, 0x41, 0x3e, 0xb3, 0x04, 0x91, 0x0d, 0xf1, 0x00, 0x9f, 0x11, | ||
| 1897 | 0x03, 0xc2, 0x08, 0xfc, 0x22, 0xb0, 0x20, 0x25, 0xe4, 0x33, 0x62, 0x50, | ||
| 1898 | 0x18, 0x41, 0x68, 0x04, 0x29, 0x31, 0x4b, 0x10, 0x0d, 0x54, 0x00, 0xca, | ||
| 1899 | 0x23, 0x40, 0x73, 0x0c, 0x49, 0x50, 0x17, 0xb3, 0x04, 0xd2, 0x40, 0x45, | ||
| 1900 | 0x20, 0x44, 0x7a, 0x70, 0x0c, 0x32, 0x04, 0x29, 0x31, 0x13, 0x73, 0x0c, | ||
| 1901 | 0x26, 0x01, 0x06, 0x7c, 0x31, 0xc8, 0x10, 0x9c, 0x84, 0x4d, 0xd8, 0x10, | ||
| 1902 | 0xc8, 0x67, 0x90, 0x21, 0x48, 0x09, 0x9e, 0x98, 0x25, 0x68, 0x83, 0xe1, | ||
| 1903 | 0x86, 0x59, 0x80, 0x89, 0x60, 0x96, 0x81, 0x02, 0x83, 0x60, 0x90, 0x81, | ||
| 1904 | 0x0e, 0x5e, 0x22, 0x27, 0xc6, 0x1b, 0xca, 0x02, 0x2e, 0x44, 0x83, 0x82, | ||
| 1905 | 0x31, 0xde, 0x70, 0x16, 0x72, 0xc1, 0x17, 0x14, 0x8c, 0x39, 0x06, 0x98, | ||
| 1906 | 0x08, 0x4c, 0x63, 0x90, 0x21, 0x88, 0x09, 0xb0, 0xb0, 0xe0, 0x90, 0xcf, | ||
| 1907 | 0x20, 0x43, 0x30, 0x13, 0x66, 0x31, 0xdc, 0x70, 0xf4, 0x83, 0x33, 0xcb, | ||
| 1908 | 0xf0, 0x55, 0xc1, 0x18, 0xc2, 0xb0, 0x1a, 0xc3, 0x0d, 0x01, 0x48, 0x28, | ||
| 1909 | 0xb3, 0x0c, 0x97, 0x15, 0x98, 0x20, 0x12, 0xf2, 0x99, 0x25, 0xc0, 0x46, | ||
| 1910 | 0x0c, 0x08, 0x23, 0xb8, 0x8d, 0x61, 0xc4, 0xa0, 0x30, 0x82, 0xdc, 0x08, | ||
| 1911 | 0x4a, 0xc2, 0x82, 0x93, 0x90, 0x8f, 0x05, 0x29, 0x01, 0x9f, 0x59, 0x02, | ||
| 1912 | 0x6c, 0xa0, 0x02, 0x50, 0x2c, 0xe1, 0x9a, 0x63, 0xd8, 0x89, 0x60, 0x36, | ||
| 1913 | 0xc6, 0x10, 0x98, 0xd9, 0x18, 0x6e, 0x08, 0x52, 0x42, 0x99, 0x65, 0xd0, | ||
| 1914 | 0xb2, 0xc0, 0x84, 0x95, 0x90, 0xcf, 0x2c, 0xc1, 0x36, 0x62, 0x40, 0x18, | ||
| 1915 | 0x01, 0x78, 0x0c, 0x23, 0x06, 0x85, 0x11, 0x88, 0x47, 0xe0, 0x12, 0x16, | ||
| 1916 | 0xc0, 0x84, 0x7c, 0x2c, 0x90, 0x09, 0xf8, 0xcc, 0x12, 0x6c, 0x03, 0x15, | ||
| 1917 | 0x80, 0x92, 0x09, 0xda, 0x1c, 0x43, 0x12, 0xec, 0xc6, 0x18, 0x42, 0x95, | ||
| 1918 | 0x1b, 0xc3, 0x0d, 0x81, 0x4c, 0x28, 0xb3, 0x0c, 0x1d, 0x17, 0x98, 0x40, | ||
| 1919 | 0x13, 0xf2, 0x99, 0x25, 0xf0, 0x46, 0x0c, 0x08, 0x23, 0x48, 0x8f, 0x61, | ||
| 1920 | 0xc4, 0xa0, 0x30, 0x82, 0xf5, 0x08, 0x6e, 0xc2, 0x82, 0x9c, 0x90, 0x8f, | ||
| 1921 | 0x05, 0x3b, 0x01, 0x9f, 0x59, 0x02, 0x6f, 0xa0, 0x02, 0x50, 0x38, 0xa1, | ||
| 1922 | 0x9b, 0x63, 0x48, 0x82, 0xf0, 0x18, 0x31, 0x30, 0x8c, 0x20, 0x3e, 0x82, | ||
| 1923 | 0xb7, 0x68, 0x8b, 0x41, 0x86, 0x20, 0x2e, 0x48, 0x63, 0x96, 0xe0, 0x1b, | ||
| 1924 | 0xa8, 0x08, 0xfc, 0x80, 0x12, 0xbc, 0x41, 0x86, 0xe0, 0x2e, 0x4c, 0x63, | ||
| 1925 | 0x96, 0xa0, 0x0d, 0x66, 0x19, 0xc2, 0xa0, 0x0d, 0xf8, 0x61, 0x90, 0xa1, | ||
| 1926 | 0x17, 0xf0, 0x42, 0x34, 0x46, 0x0c, 0x0a, 0x23, 0x98, 0x8f, 0x60, 0x2d, | ||
| 1927 | 0xe6, 0x18, 0xe8, 0x22, 0x60, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0xea, 0x63, | ||
| 1928 | 0x60, 0x8b, 0x39, 0x06, 0x21, 0x68, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0xee, | ||
| 1929 | 0xa3, 0x68, 0x8b, 0x39, 0x06, 0x21, 0x60, 0x8f, 0x41, 0x86, 0x60, 0x2f, | ||
| 1930 | 0x5c, 0x63, 0x90, 0x21, 0x28, 0x07, 0xd8, 0x18, 0x6f, 0xb0, 0x8d, 0xf0, | ||
| 1931 | 0x98, 0x0f, 0x0a, 0xc6, 0x78, 0x03, 0x6e, 0x8c, 0x47, 0x7b, 0x50, 0x30, | ||
| 1932 | 0xe6, 0x18, 0x42, 0x23, 0xb8, 0x8f, 0x41, 0x86, 0x40, 0x34, 0x62, 0xc3, | ||
| 1933 | 0x82, 0x44, 0x3e, 0x83, 0x0c, 0x01, 0x69, 0xdc, 0xc6, 0x70, 0xc3, 0xe1, | ||
| 1934 | 0x16, 0xce, 0x2c, 0x03, 0x1b, 0x88, 0x41, 0x30, 0x86, 0x30, 0xf0, 0xc7, | ||
| 1935 | 0x70, 0x43, 0x10, 0x17, 0xca, 0x2c, 0x03, 0x19, 0x8c, 0x41, 0x60, 0xc2, | ||
| 1936 | 0x5c, 0xc8, 0x67, 0x96, 0xa0, 0x0c, 0x46, 0x0c, 0x08, 0x23, 0x40, 0x91, | ||
| 1937 | 0x61, 0xc4, 0xa0, 0x30, 0x02, 0x15, 0x09, 0xec, 0xc2, 0x02, 0xbc, 0x90, | ||
| 1938 | 0x8f, 0x05, 0x7a, 0x01, 0x9f, 0x59, 0x82, 0x32, 0x18, 0xa8, 0x00, 0x94, | ||
| 1939 | 0x31, 0x10, 0xc8, 0x60, 0x8e, 0x81, 0x35, 0x02, 0x12, 0x19, 0x43, 0x60, | ||
| 1940 | 0x48, 0x64, 0xb8, 0x21, 0xd0, 0x0b, 0x65, 0x96, 0xe1, 0x0c, 0xcc, 0x20, | ||
| 1941 | 0x30, 0x81, 0x2f, 0xe4, 0x33, 0x4b, 0x80, 0x06, 0x23, 0x06, 0x84, 0x11, | ||
| 1942 | 0xc4, 0xc8, 0x30, 0x62, 0x50, 0x18, 0xc1, 0x8c, 0x04, 0x7f, 0x61, 0x41, | ||
| 1943 | 0x68, 0xc8, 0xc7, 0x82, 0xd1, 0x80, 0xcf, 0x2c, 0x01, 0x1a, 0x0c, 0x54, | ||
| 1944 | 0x00, 0x8a, 0x19, 0x08, 0x67, 0x30, 0xc7, 0x90, 0x04, 0x2c, 0x32, 0x86, | ||
| 1945 | 0x50, 0xa9, 0xc8, 0x70, 0x43, 0x30, 0x1a, 0xca, 0x2c, 0x83, 0x1a, 0xa4, | ||
| 1946 | 0x41, 0x60, 0x42, 0x69, 0xc8, 0x67, 0x96, 0x60, 0x0d, 0x46, 0x0c, 0x08, | ||
| 1947 | 0x23, 0xd0, 0x91, 0x61, 0xc4, 0xa0, 0x30, 0x02, 0x1e, 0x09, 0x50, 0xc3, | ||
| 1948 | 0x02, 0xd5, 0x90, 0x8f, 0x05, 0xac, 0x01, 0x9f, 0x59, 0x82, 0x35, 0x18, | ||
| 1949 | 0xa8, 0x00, 0x94, 0x34, 0x10, 0xd4, 0x60, 0x8e, 0x21, 0x09, 0x64, 0x64, | ||
| 1950 | 0xc4, 0xc0, 0x30, 0x02, 0x31, 0x09, 0xc0, 0xc3, 0x37, 0x06, 0x19, 0x02, | ||
| 1951 | 0xf1, 0xa8, 0x8f, 0x59, 0x02, 0x36, 0x18, 0xa8, 0x08, 0xfc, 0x20, 0x0c, | ||
| 1952 | 0x84, 0x35, 0x18, 0x64, 0x08, 0xd0, 0xe3, 0x3e, 0x66, 0x09, 0xda, 0x60, | ||
| 1953 | 0xa0, 0x25, 0xe0, 0x11, 0x83, 0x47, 0x24, 0x1e, 0xf9, 0x64, 0x81, 0x0d, | ||
| 1954 | 0x78, 0x04, 0x0c, 0x06, 0x5a, 0x02, 0x14, 0x31, 0xf4, 0x42, 0x32, 0x87, | ||
| 1955 | 0x8f, 0x60, 0x03, 0xd7, 0x01, 0x83, 0x41, 0x86, 0x40, 0xd8, 0x0f, 0x0b, | ||
| 1956 | 0x46, 0x44, 0x3e, 0x19, 0x84, 0x03, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1957 | 0x00, 0xd7, 0xd2, 0x07, 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, | ||
| 1958 | 0x50, 0x13, 0xe7, 0x2c, 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, | ||
| 1959 | 0x9b, 0x6d, 0x29, 0x38, 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, | ||
| 1960 | 0x00, 0x03, 0x11, 0x71, 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, | ||
| 1961 | 0x21, 0x13, 0x00, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 1962 | 0x00, 0x5b, 0x0a, 0xe0, 0x98, 0x05, 0x04, 0x17, 0xb6, 0x14, 0xc1, 0x31, | ||
| 1963 | 0x0b, 0x08, 0x2e, 0x6c, 0x29, 0x8a, 0x63, 0x16, 0x10, 0x5c, 0xd8, 0x52, | ||
| 1964 | 0x24, 0x47, 0x2e, 0x20, 0xba, 0xb0, 0xa5, 0x70, 0x8e, 0x5c, 0x40, 0x74, | ||
| 1965 | 0x61, 0x4b, 0x31, 0x1d, 0xb9, 0x80, 0xe8, 0xc2, 0x96, 0x02, 0x3b, 0x72, | ||
| 1966 | 0x01, 0xd1, 0x85, 0x2d, 0xc3, 0x17, 0x88, 0xc3, 0x96, 0x81, 0x0c, 0x82, | ||
| 1967 | 0x71, 0xd8, 0x32, 0xdc, 0x41, 0x40, 0x0e, 0x5b, 0x06, 0x3e, 0x08, 0xca, | ||
| 1968 | 0x61, 0xcb, 0xe0, 0x07, 0x81, 0x39, 0x6c, 0x19, 0x4e, 0x21, 0x38, 0x87, | ||
| 1969 | 0x2d, 0x03, 0x2b, 0x04, 0xe8, 0xb0, 0x65, 0x98, 0x85, 0x20, 0x1d, 0xb6, | ||
| 1970 | 0x0c, 0xb5, 0x10, 0xa0, 0xc3, 0x96, 0x21, 0x25, 0x82, 0x74, 0xd8, 0x32, | ||
| 1971 | 0xac, 0x44, 0x80, 0x0e, 0x5b, 0x86, 0xd3, 0x08, 0xd2, 0x61, 0xcb, 0x90, | ||
| 1972 | 0x1a, 0x01, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1973 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 1974 | 0x00, 0x24, 0x00, 0x00, 0x00, 0x14, 0xcf, 0x41, 0x30, 0x0d, 0xe4, 0x06, | ||
| 1975 | 0x94, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xe0, 0x0c, 0x00, 0x05, | ||
| 1976 | 0x33, 0x00, 0x54, 0xcc, 0x00, 0x8c, 0x35, 0xb0, 0xec, 0x19, 0xca, 0x1f, | ||
| 1977 | 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, 0xde, 0x58, 0x83, 0x5e, | ||
| 1978 | 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, 0xdb, 0xa7, 0xf4, 0xe8, | ||
| 1979 | 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, 0xc2, 0xe8, 0xee, 0xdd, | ||
| 1980 | 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, | ||
| 1981 | 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, | ||
| 1982 | 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, | ||
| 1983 | 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, | ||
| 1984 | 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, 0x33, 0x00, 0x04, 0x8c, | ||
| 1985 | 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, | ||
| 1986 | 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, 0x02, 0x0d, 0x37, 0x50, | ||
| 1987 | 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, 0x43, 0xc5, 0xc1, 0x20, | ||
| 1988 | 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, 0x08, 0xa0, 0x6a, 0x96, | ||
| 1989 | 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, 0x48, 0x82, 0xe1, 0x86, | ||
| 1990 | 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, 0x28, 0x8c, 0xe0, 0x0f, | ||
| 1991 | 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xf0, 0x60, 0xc4, 0xa0, 0x30, 0x82, 0x50, | ||
| 1992 | 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xc8, 0x83, 0x11, 0x83, 0xc2, 0x08, 0x46, | ||
| 1993 | 0x21, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xc0, 0x83, 0x59, 0x82, 0x62, 0xa0, | ||
| 1994 | 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xfc, 0x60, 0x0c, 0x41, 0xf0, | ||
| 1995 | 0x83, 0x31, 0x84, 0x81, 0x0f, 0x46, 0x0c, 0x0a, 0x23, 0x38, 0x05, 0x21, | ||
| 1996 | 0x18, 0x31, 0x28, 0x8c, 0x00, 0x15, 0x88, 0x60, 0xb8, 0x21, 0xb8, 0x84, | ||
| 1997 | 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, 0x0c, 0x6c, 0x40, 0x03, | ||
| 1998 | 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, 0x8f, 0x05, 0x1a, 0x7c, | ||
| 1999 | 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, 0x2a, 0x0c, 0x32, 0x04, | ||
| 2000 | 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, 0x08, 0xd2, 0xc0, 0x0d, | ||
| 2001 | 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, 0xa0, 0x98, 0x65, 0x40, | ||
| 2002 | 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, 0x31, 0x28, 0x8c, 0x00, | ||
| 2003 | 0x17, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0x20, 0x16, 0x46, 0x0c, 0x0a, | ||
| 2004 | 0x23, 0xd0, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, 0x40, 0x16, 0x46, 0x0c, | ||
| 2005 | 0x0a, 0x23, 0xe0, 0x85, 0x42, 0x0d, 0xe6, 0x18, 0x84, 0x20, 0x16, 0x66, | ||
| 2006 | 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, 0x10, 0x04, 0x04, 0x3a, | ||
| 2007 | 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2008 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2009 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 2010 | 0x00, 0x1c, 0x1c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 2011 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 2012 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 2013 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 2014 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 2015 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 2016 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 2017 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, | ||
| 2018 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 2019 | 0x00, 0xf7, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 2020 | 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, | ||
| 2021 | 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, | ||
| 2022 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 2023 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, | ||
| 2024 | 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, | ||
| 2025 | 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, | ||
| 2026 | 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, | ||
| 2027 | 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, | ||
| 2028 | 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, | ||
| 2029 | 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, | ||
| 2030 | 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, | ||
| 2031 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 2032 | 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, | ||
| 2033 | 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, | ||
| 2034 | 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 2035 | 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 2036 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, | ||
| 2037 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 2038 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 2039 | 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, | ||
| 2040 | 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, | ||
| 2041 | 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, | ||
| 2042 | 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, | ||
| 2043 | 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, | ||
| 2044 | 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, | ||
| 2045 | 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, | ||
| 2046 | 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 2047 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, | ||
| 2048 | 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, | ||
| 2049 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, | ||
| 2050 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, | ||
| 2051 | 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 2052 | 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, | ||
| 2053 | 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0xc3, 0x26, 0x10, 0xc0, | ||
| 2054 | 0x02, 0x54, 0x43, 0x38, 0xa4, 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, | ||
| 2055 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, | ||
| 2056 | 0x38, 0xb0, 0x43, 0x3a, 0x84, 0xc3, 0x3c, 0x00, 0x1b, 0xb6, 0xa1, 0x00, | ||
| 2057 | 0x16, 0xa0, 0x1a, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, | ||
| 2058 | 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 2059 | 0xc2, 0x81, 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, 0xd8, 0x60, 0x10, 0x08, | ||
| 2060 | 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, | ||
| 2061 | 0x00, 0x6a, 0x83, 0x8f, 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, | ||
| 2062 | 0x50, 0x11, 0xe1, 0x00, 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, | ||
| 2063 | 0x60, 0x0e, 0xf5, 0xe0, 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, | ||
| 2064 | 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, | ||
| 2065 | 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, | ||
| 2066 | 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, | ||
| 2067 | 0x3b, 0xc8, 0x43, 0x1b, 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, | ||
| 2068 | 0x90, 0x07, 0x76, 0x00, 0x0c, 0xee, 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, | ||
| 2069 | 0x90, 0x0e, 0xec, 0x40, 0x0f, 0xe9, 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, | ||
| 2070 | 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, | ||
| 2071 | 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, | ||
| 2072 | 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, | ||
| 2073 | 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, | ||
| 2074 | 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, | ||
| 2075 | 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, | ||
| 2076 | 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, | ||
| 2077 | 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, | ||
| 2078 | 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, | ||
| 2079 | 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, | ||
| 2080 | 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, | ||
| 2081 | 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, | ||
| 2082 | 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, | ||
| 2083 | 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, | ||
| 2084 | 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, | ||
| 2085 | 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, | ||
| 2086 | 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, | ||
| 2087 | 0x38, 0xc0, 0x03, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, | ||
| 2088 | 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, | ||
| 2089 | 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, | ||
| 2090 | 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, | ||
| 2091 | 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, | ||
| 2092 | 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, | ||
| 2093 | 0x3c, 0x84, 0x83, 0x39, 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, | ||
| 2094 | 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, | ||
| 2095 | 0x00, 0x6c, 0x40, 0x8e, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, | ||
| 2096 | 0x80, 0x6a, 0x83, 0x81, 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, | ||
| 2097 | 0x16, 0xa0, 0xda, 0x80, 0x28, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, | ||
| 2098 | 0x20, 0x01, 0xd5, 0x06, 0x63, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, | ||
| 2099 | 0x00, 0x6a, 0xc3, 0xc4, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x80, | ||
| 2100 | 0x34, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, | ||
| 2101 | 0x3d, 0xa4, 0x83, 0x3b, 0xcc, 0x03, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 2102 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, | ||
| 2103 | 0x31, 0x21, 0x30, 0x26, 0x0c, 0x07, 0x92, 0x4c, 0x18, 0x14, 0x24, 0x99, | ||
| 2104 | 0x10, 0x2c, 0x13, 0x02, 0x06, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, | ||
| 2105 | 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, | ||
| 2106 | 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, | ||
| 2107 | 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xb8, 0xc1, 0x0c, 0xc0, 0x30, 0x02, | ||
| 2108 | 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, | ||
| 2109 | 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, | ||
| 2110 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, 0x41, 0x18, 0x46, 0x18, | ||
| 2111 | 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, | ||
| 2112 | 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, | ||
| 2113 | 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, | ||
| 2114 | 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, 0xec, 0xbe, 0x1d, 0x21, | ||
| 2115 | 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, 0x84, 0xa3, 0xa4, 0x29, | ||
| 2116 | 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0xf8, 0xed, 0xe1, | ||
| 2117 | 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0xb8, 0x48, 0x9a, 0x22, 0x4a, | ||
| 2118 | 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, 0x7f, 0x1a, 0x23, 0x00, | ||
| 2119 | 0x06, 0x11, 0x18, 0xa1, 0x24, 0x41, 0x10, 0x08, 0x44, 0xb2, 0x2c, 0x0d, | ||
| 2120 | 0x39, 0x85, 0x28, 0x8a, 0xa2, 0x20, 0xa8, 0x0c, 0x00, 0x00, 0x90, 0x54, | ||
| 2121 | 0x04, 0x00, 0x20, 0xaa, 0x0c, 0x40, 0x51, 0x90, 0x55, 0x8c, 0xa2, 0x00, | ||
| 2122 | 0x00, 0x00, 0x20, 0xac, 0x0c, 0x45, 0x51, 0x90, 0x56, 0x84, 0xa2, 0x20, | ||
| 2123 | 0x6e, 0x8e, 0x20, 0x98, 0x23, 0x00, 0x83, 0x61, 0x04, 0xe1, 0x2b, 0x48, | ||
| 2124 | 0xb0, 0x34, 0x82, 0x07, 0x7a, 0x00, 0x85, 0x03, 0x01, 0x29, 0xf0, 0xcd, | ||
| 2125 | 0x11, 0x80, 0xc2, 0x20, 0x02, 0x20, 0x4c, 0x01, 0x8c, 0x00, 0x0c, 0x23, | ||
| 2126 | 0x0c, 0xdf, 0x20, 0x42, 0x20, 0x0c, 0x22, 0x1c, 0xc2, 0x20, 0x42, 0x21, | ||
| 2127 | 0x0c, 0x23, 0x10, 0x1f, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, | ||
| 2128 | 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, | ||
| 2129 | 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, | ||
| 2130 | 0x83, 0x0d, 0xb7, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, | ||
| 2131 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, | ||
| 2132 | 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, | ||
| 2133 | 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, | ||
| 2134 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, | ||
| 2135 | 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 2136 | 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, | ||
| 2137 | 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 2138 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, | ||
| 2139 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, | ||
| 2140 | 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, | ||
| 2141 | 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, | ||
| 2142 | 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 2143 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, | ||
| 2144 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, | ||
| 2145 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 2146 | 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, | ||
| 2147 | 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, | ||
| 2148 | 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, | ||
| 2149 | 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, | ||
| 2150 | 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, | ||
| 2151 | 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, | ||
| 2152 | 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, | ||
| 2153 | 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, | ||
| 2154 | 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, | ||
| 2155 | 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, | ||
| 2156 | 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, | ||
| 2157 | 0x20, 0x07, 0x43, 0x98, 0x07, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2158 | 0x80, 0x21, 0x4c, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, | ||
| 2159 | 0x10, 0x66, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, | ||
| 2160 | 0x53, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0xb9, | ||
| 2161 | 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x64, 0x08, | ||
| 2162 | 0x30, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x61, 0x26, 0x20, 0x00, | ||
| 2163 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x30, 0x1b, 0x10, 0x00, 0x02, | ||
| 2164 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x98, 0x0e, 0x08, 0x00, 0x01, 0x00, | ||
| 2165 | 0x00, 0x00, 0x00, 0x80, 0x21, 0xcc, 0x06, 0x04, 0x80, 0x00, 0x00, 0x00, | ||
| 2166 | 0x00, 0x00, 0xc0, 0x10, 0x46, 0x0c, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, | ||
| 2167 | 0x00, 0x00, 0xc8, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 2168 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 2169 | 0xfa, 0x46, 0x00, 0x4a, 0xa0, 0x10, 0x0a, 0xa4, 0x08, 0x0a, 0xa2, 0x80, | ||
| 2170 | 0x0a, 0x30, 0xa0, 0x0c, 0x0a, 0xa3, 0x50, 0x0a, 0xa6, 0x70, 0x0a, 0xac, | ||
| 2171 | 0x14, 0x8a, 0xa1, 0x1c, 0xa8, 0x2c, 0x9c, 0x11, 0x80, 0x42, 0x28, 0x88, | ||
| 2172 | 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x22, 0xc7, 0x12, 0x24, 0x01, 0x00, | ||
| 2173 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 2174 | 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, | ||
| 2175 | 0xb7, 0x21, 0xc6, 0xf7, 0x8c, 0x01, 0x40, 0x06, 0x64, 0x40, 0xe5, 0x6e, | ||
| 2176 | 0x0c, 0x2d, 0x4c, 0xee, 0x6b, 0x2e, 0x4d, 0xaf, 0x6c, 0x88, 0xf1, 0x31, | ||
| 2177 | 0x63, 0x20, 0x7c, 0x0d, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0xa4, | ||
| 2178 | 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, | ||
| 2179 | 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, 0x04, | ||
| 2180 | 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, 0x46, | ||
| 2181 | 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x30, 0x06, 0xc4, 0x10, | ||
| 2182 | 0xe3, 0x63, 0x3e, 0xe8, 0x5b, 0x58, 0x34, 0x95, 0xd1, 0x85, 0xb1, 0x0d, | ||
| 2183 | 0x41, 0xc6, 0xe0, 0xf8, 0x98, 0x8f, 0xf9, 0x16, 0x6e, 0x61, 0x69, 0x72, | ||
| 2184 | 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, | ||
| 2185 | 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, | ||
| 2186 | 0x43, 0x84, 0x31, 0x48, 0xc8, 0x85, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, | ||
| 2187 | 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0x85, 0xcd, 0xd1, 0x7d, 0xb5, 0x85, | ||
| 2188 | 0xd1, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xc6, | ||
| 2189 | 0x60, 0x21, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, | ||
| 2190 | 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, | ||
| 2191 | 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, | ||
| 2192 | 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xc6, 0xa0, 0x61, 0x14, 0x96, 0x26, 0xe7, | ||
| 2193 | 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, | ||
| 2194 | 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, | ||
| 2195 | 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, | ||
| 2196 | 0x18, 0x1d, 0xcd, 0x10, 0x64, 0x0c, 0x9e, 0x6f, 0x19, 0x03, 0x68, 0x0c, | ||
| 2197 | 0xa2, 0x21, 0xc2, 0x18, 0x48, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, | ||
| 2198 | 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, | ||
| 2199 | 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, | ||
| 2200 | 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, | ||
| 2201 | 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, | ||
| 2202 | 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, | ||
| 2203 | 0xf4, 0x2d, 0x63, 0x40, 0x8d, 0x41, 0x35, 0x06, 0xd6, 0x18, 0x40, 0x63, | ||
| 2204 | 0x10, 0x8d, 0xc1, 0x35, 0x06, 0x18, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0x33, | ||
| 2205 | 0xb9, 0xb0, 0xb3, 0xb6, 0x32, 0x37, 0xba, 0xaf, 0x34, 0x37, 0xb8, 0x3a, | ||
| 2206 | 0x3a, 0x5a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, | ||
| 2207 | 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, | ||
| 2208 | 0x7c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xca, 0xe4, 0xe6, 0xe0, 0xca, 0xc6, | ||
| 2209 | 0xe8, 0xd2, 0xec, 0xca, 0x58, 0x8c, 0xbd, 0xb1, 0xbd, 0xc9, 0x0d, 0x91, | ||
| 2210 | 0x3e, 0x66, 0x0c, 0xb4, 0x31, 0xd8, 0xc6, 0xa0, 0x1a, 0x03, 0x6e, 0x0c, | ||
| 2211 | 0xa0, 0x31, 0x88, 0xc6, 0xe0, 0x1a, 0x83, 0x8e, 0xd9, 0x59, 0x99, 0x5b, | ||
| 2212 | 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, | ||
| 2213 | 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x0d, 0x33, | ||
| 2214 | 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x22, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 2215 | 0x72, 0x64, 0x43, 0xa4, 0xef, 0x19, 0x03, 0x6d, 0x0c, 0xbe, 0x31, 0xa8, | ||
| 2216 | 0xc6, 0x80, 0x1b, 0x03, 0x68, 0x0c, 0xc0, 0x60, 0x0c, 0xae, 0x31, 0x08, | ||
| 2217 | 0x03, 0x2a, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, | ||
| 2218 | 0x7c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xbe, | ||
| 2219 | 0xe6, 0xd2, 0xf4, 0xca, 0x28, 0x85, 0xa5, 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, | ||
| 2220 | 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, 0xb9, 0x91, 0x95, 0xe1, 0x11, | ||
| 2221 | 0x09, 0x4b, 0x93, 0x73, 0x91, 0x2b, 0x0b, 0x23, 0x23, 0x15, 0x96, 0x26, | ||
| 2222 | 0xe7, 0x32, 0x47, 0x27, 0x57, 0x37, 0x46, 0xf7, 0x45, 0x97, 0x07, 0x57, | ||
| 2223 | 0xf6, 0x95, 0xe6, 0x66, 0xf6, 0xc6, 0xc2, 0x8c, 0xed, 0x2d, 0x8c, 0x8e, | ||
| 2224 | 0xcc, 0xdc, 0x98, 0xd4, 0x91, 0xd0, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, | ||
| 2225 | 0x1d, 0x19, 0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0xb2, 0x2f, 0xba, 0x3c, | ||
| 2226 | 0xb8, 0x32, 0x2a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, | ||
| 2227 | 0x65, 0x5c, 0xc6, 0xde, 0xd8, 0xde, 0xe4, 0xbe, 0xe6, 0xc6, 0xc2, 0xd8, | ||
| 2228 | 0xca, 0xe8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0xb5, 0x95, | ||
| 2229 | 0xd1, 0xa1, 0xbd, 0x91, 0xf1, 0xa1, 0x7b, 0x73, 0x2b, 0x6b, 0x0b, 0x83, | ||
| 2230 | 0xfb, 0x32, 0x0b, 0x1b, 0xa3, 0x7b, 0x93, 0x8b, 0xe1, 0x43, 0xf7, 0xe6, | ||
| 2231 | 0x56, 0xd6, 0x16, 0x06, 0xf7, 0x65, 0x16, 0x36, 0x46, 0xf7, 0x26, 0x27, | ||
| 2232 | 0xc3, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, 0x2d, 0x8d, 0xae, 0xec, 0x0b, | ||
| 2233 | 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x08, 0x2c, 0x7c, 0xcb, 0xd7, 0x7c, 0xcb, | ||
| 2234 | 0x18, 0xa0, 0xc1, 0x18, 0xa4, 0xc1, 0xd7, 0x7c, 0xcd, 0xb7, 0x8c, 0x01, | ||
| 2235 | 0x1a, 0x8c, 0x81, 0x1a, 0x7c, 0xd0, 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, | ||
| 2236 | 0x18, 0xac, 0xc1, 0x47, 0x7d, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x01, | ||
| 2237 | 0x1b, 0x7c, 0xce, 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, 0xb4, 0xc1, | ||
| 2238 | 0x57, 0x7d, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x81, 0x1b, 0x7c, 0xd6, | ||
| 2239 | 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, 0xbc, 0xc1, 0x77, 0x7d, 0xcd, | ||
| 2240 | 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x01, 0x1c, 0x30, 0x0a, 0x4b, 0x93, 0x73, | ||
| 2241 | 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x9a, 0x4b, 0xd3, | ||
| 2242 | 0x2b, 0xe3, 0x15, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0x45, 0x97, | ||
| 2243 | 0x07, 0x57, 0xf6, 0x15, 0xc6, 0x96, 0x76, 0xe6, 0xf6, 0x35, 0x97, 0xa6, | ||
| 2244 | 0x57, 0xc6, 0x67, 0x0a, 0x2d, 0x8c, 0xac, 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, | ||
| 2245 | 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x8e, 0xc1, 0xd8, 0x10, 0x32, 0xf8, 0xa6, | ||
| 2246 | 0x31, 0x18, 0x83, 0x31, 0x20, 0x83, 0x2f, 0x1a, 0x83, 0x32, 0xf8, 0x96, | ||
| 2247 | 0x8f, 0x19, 0x03, 0x33, 0x18, 0x83, 0x33, 0x18, 0x83, 0x38, 0x18, 0x03, | ||
| 2248 | 0x39, 0xf8, 0xa2, 0x31, 0x98, 0x83, 0xaf, 0x19, 0x03, 0x68, 0x0c, 0xe8, | ||
| 2249 | 0x60, 0x0c, 0xae, 0x31, 0xa8, 0x03, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 2250 | 0x33, 0x34, 0xde, 0xcc, 0xcc, 0xe6, 0xca, 0xe8, 0x88, 0x98, 0xb1, 0xbd, | ||
| 2251 | 0x85, 0xd1, 0xcd, 0xe0, 0xcd, 0xd0, 0x68, 0x0b, 0xa3, 0x93, 0x4b, 0xc3, | ||
| 2252 | 0x1b, 0x42, 0x7d, 0xcb, 0xe7, 0x7c, 0xcb, 0x18, 0xdc, 0xc1, 0x18, 0xe0, | ||
| 2253 | 0xc1, 0xe7, 0x7c, 0xd8, 0xb7, 0x8c, 0x41, 0x1e, 0x8c, 0x81, 0x1e, 0x30, | ||
| 2254 | 0xc9, 0xaa, 0xb2, 0x22, 0x2a, 0x1b, 0x7b, 0x23, 0x2b, 0xa3, 0x41, 0x56, | ||
| 2255 | 0x36, 0xf6, 0x46, 0x56, 0x36, 0x84, 0x0c, 0xbe, 0x66, 0x0c, 0xc6, 0x60, | ||
| 2256 | 0x0c, 0xc8, 0xe0, 0x93, 0xc6, 0xa0, 0x0c, 0x3e, 0xe6, 0x63, 0xc6, 0xc0, | ||
| 2257 | 0x0c, 0xc6, 0xe0, 0x0c, 0xc6, 0x60, 0x0f, 0xc6, 0x40, 0x0e, 0x3e, 0x69, | ||
| 2258 | 0x0c, 0xe6, 0xe0, 0x73, 0xc6, 0x00, 0x1a, 0x03, 0x3e, 0x18, 0x83, 0x6b, | ||
| 2259 | 0x0c, 0xfa, 0x80, 0x4b, 0x58, 0x9a, 0x9c, 0x0b, 0x5d, 0x19, 0x1e, 0x5d, | ||
| 2260 | 0x9d, 0x5c, 0x19, 0x95, 0xb0, 0x34, 0x39, 0x97, 0xb9, 0xb0, 0x36, 0x38, | ||
| 2261 | 0xb6, 0x32, 0x62, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, | ||
| 2262 | 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, | ||
| 2263 | 0x6c, 0x65, 0x3e, 0x24, 0xe8, 0xca, 0xf0, 0xb2, 0x86, 0x50, 0x5f, 0x36, | ||
| 2264 | 0x06, 0x7f, 0x30, 0x06, 0x65, 0xf0, 0x2d, 0x1f, 0x33, 0x06, 0xa0, 0x30, | ||
| 2265 | 0x06, 0xd0, 0x18, 0x84, 0xc2, 0x18, 0x5c, 0x63, 0x20, 0x0a, 0x2c, 0xe8, | ||
| 2266 | 0xca, 0xf0, 0xaa, 0xac, 0x86, 0x50, 0x9f, 0x36, 0x06, 0x7f, 0x30, 0x06, | ||
| 2267 | 0x65, 0xf0, 0x31, 0x1f, 0x33, 0x06, 0xa0, 0x30, 0x06, 0xd0, 0x18, 0x84, | ||
| 2268 | 0xc2, 0x18, 0x5c, 0x63, 0x40, 0x0a, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, | ||
| 2269 | 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x78, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, | ||
| 2270 | 0x95, 0xc9, 0x31, 0x98, 0x1b, 0x22, 0x7d, 0xdb, 0x18, 0x98, 0xc2, 0x18, | ||
| 2271 | 0x94, 0xc1, 0xb7, 0x7c, 0xcc, 0x18, 0x40, 0x63, 0x70, 0x0a, 0x63, 0x70, | ||
| 2272 | 0x8d, 0x01, 0x2a, 0x0c, 0x81, 0xc6, 0x20, 0x1b, 0x03, 0x6f, 0x0c, 0xc4, | ||
| 2273 | 0x60, 0x0c, 0xec, 0x60, 0x0c, 0xfc, 0x60, 0x0c, 0x46, 0x61, 0x0c, 0x4a, | ||
| 2274 | 0x61, 0x0c, 0x52, 0x61, 0x88, 0xf1, 0x00, 0x63, 0x30, 0x8d, 0x81, 0x2a, | ||
| 2275 | 0xb0, 0xfa, 0xd2, 0xa2, 0x9a, 0x8a, 0xa9, 0x99, 0x42, 0x0b, 0x23, 0x2b, | ||
| 2276 | 0x93, 0x1b, 0x7a, 0x73, 0x9b, 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0xe3, 0xf3, | ||
| 2277 | 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, | ||
| 2278 | 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, | ||
| 2279 | 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88, 0x30, 0x06, 0xae, 0x30, | ||
| 2280 | 0xc4, 0x18, 0x83, 0x56, 0x18, 0x83, 0x57, 0x28, 0x83, 0x6e, 0x88, 0x31, | ||
| 2281 | 0x06, 0x68, 0x30, 0x06, 0xb0, 0x50, 0x06, 0xdd, 0x10, 0x31, 0x18, 0x03, | ||
| 2282 | 0x56, 0x18, 0x83, 0x58, 0x28, 0x83, 0x6e, 0x0c, 0x62, 0xa1, 0x0c, 0xbc, | ||
| 2283 | 0x31, 0x88, 0x85, 0x32, 0xf8, 0xc6, 0x20, 0x16, 0xca, 0x00, 0x0c, 0xc6, | ||
| 2284 | 0x20, 0x16, 0xca, 0x20, 0x0c, 0xc6, 0x20, 0x16, 0xca, 0x40, 0x0c, 0xc6, | ||
| 2285 | 0x20, 0x16, 0xca, 0x60, 0x0c, 0xc6, 0x20, 0x16, 0xca, 0x80, 0x1b, 0x62, | ||
| 2286 | 0x8c, 0x81, 0x2c, 0x8c, 0x41, 0x2c, 0x94, 0x81, 0xc7, 0x31, 0x08, 0x4b, | ||
| 2287 | 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, | ||
| 2288 | 0x2b, 0x9b, 0x43, 0x99, 0x22, 0x62, 0xfa, 0x72, 0xb2, 0x8a, 0x91, 0xf9, | ||
| 2289 | 0x32, 0x93, 0x0b, 0x3b, 0x6b, 0x2b, 0x73, 0xa3, 0x4b, 0x19, 0x42, 0x8c, | ||
| 2290 | 0x41, 0x2d, 0x8c, 0x01, 0x2d, 0xd0, 0x0a, 0x4b, 0x93, 0x6b, 0x09, 0x63, | ||
| 2291 | 0x4b, 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, 0x2b, 0x6b, 0x09, 0x93, | ||
| 2292 | 0x3b, 0x43, 0x99, 0x49, 0x19, 0x62, 0x8c, 0xc1, 0x2d, 0x8c, 0x41, 0x2d, | ||
| 2293 | 0x8c, 0x81, 0x2d, 0x0c, 0x11, 0xc6, 0xe0, 0x16, 0x68, 0x85, 0xa5, 0xc9, | ||
| 2294 | 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, | ||
| 2295 | 0xb5, 0x84, 0xc9, 0x9d, 0xa1, 0xd0, 0xa4, 0x0c, 0x31, 0xc6, 0x40, 0x17, | ||
| 2296 | 0xc6, 0xa0, 0x16, 0xc6, 0x20, 0x17, 0x88, 0x85, 0xa5, 0xc9, 0xb5, 0x84, | ||
| 2297 | 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0xd0, | ||
| 2298 | 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xcd, 0x0d, 0x31, 0xc6, 0x80, 0x17, | ||
| 2299 | 0xc6, 0xa0, 0x16, 0xc6, 0x60, 0x17, 0x88, 0x85, 0xa5, 0xc9, 0xb5, 0x84, | ||
| 2300 | 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0xcc, | ||
| 2301 | 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0xcd, 0x0d, 0x31, 0xc6, 0xc0, 0x17, | ||
| 2302 | 0xc6, 0xa0, 0x16, 0xc6, 0xa0, 0x17, 0x86, 0x18, 0x63, 0xa0, 0x0b, 0x63, | ||
| 2303 | 0xc0, 0x0b, 0x63, 0xe0, 0x0b, 0x43, 0x88, 0x31, 0xe0, 0x85, 0x31, 0xf0, | ||
| 2304 | 0x85, 0x21, 0xc4, 0x18, 0xdc, 0xc2, 0x18, 0xe8, 0xc2, 0x10, 0x61, 0x0c, | ||
| 2305 | 0x74, 0x61, 0x88, 0x31, 0x06, 0xb7, 0x30, 0x06, 0xbc, 0x30, 0x06, 0xbe, | ||
| 2306 | 0x30, 0xc4, 0x18, 0x03, 0x59, 0x18, 0x83, 0x58, 0x28, 0x83, 0x6f, 0x88, | ||
| 2307 | 0x31, 0x06, 0xb2, 0x30, 0x06, 0xb1, 0x50, 0x06, 0xdc, 0x10, 0x63, 0x0c, | ||
| 2308 | 0x64, 0x61, 0x0c, 0x62, 0xa1, 0x0c, 0xc2, 0x60, 0x88, 0x31, 0x06, 0xb2, | ||
| 2309 | 0x30, 0x06, 0xb1, 0x50, 0x06, 0x62, 0x30, 0xc4, 0x18, 0x03, 0x59, 0x18, | ||
| 2310 | 0x83, 0x58, 0x28, 0x83, 0x31, 0x18, 0x62, 0x8c, 0x81, 0x2c, 0x8c, 0x41, | ||
| 2311 | 0x2c, 0x94, 0x01, 0x18, 0x0c, 0x31, 0xc6, 0x40, 0x16, 0xc6, 0x20, 0x16, | ||
| 2312 | 0xca, 0xa0, 0x1b, 0x11, 0xb1, 0x03, 0x3b, 0xd8, 0x43, 0x3b, 0xb8, 0x41, | ||
| 2313 | 0x3b, 0xbc, 0x03, 0x39, 0xd4, 0x03, 0x3b, 0x94, 0x83, 0x1b, 0x98, 0x03, | ||
| 2314 | 0x3b, 0x84, 0xc3, 0x39, 0xcc, 0xc3, 0x14, 0x21, 0x18, 0x46, 0x28, 0xec, | ||
| 2315 | 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, 0xee, | ||
| 2316 | 0x40, 0x0f, 0x53, 0x82, 0x62, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, | ||
| 2317 | 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, | ||
| 2318 | 0x02, 0x63, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, 0xe1, | ||
| 2319 | 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, 0xf6, | ||
| 2320 | 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x40, | ||
| 2321 | 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, 0xed, | ||
| 2322 | 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, 0xf4, | ||
| 2323 | 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x65, 0x50, 0x18, 0x67, 0x04, | ||
| 2324 | 0x13, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xe7, | ||
| 2325 | 0xd0, 0x0e, 0xe5, 0xe0, 0x0e, 0xf4, 0x30, 0x25, 0x58, 0x05, 0x00, 0x00, | ||
| 2326 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 2327 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 2328 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 2329 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 2330 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 2331 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 2332 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 2333 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 2334 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 2335 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 2336 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 2337 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 2338 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 2339 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 2340 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 2341 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 2342 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 2343 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 2344 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 2345 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 2346 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 2347 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 2348 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 2349 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 2350 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 2351 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 2352 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 2353 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 2354 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 2355 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 2356 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 2357 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 2358 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 2359 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 2360 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 2361 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 2362 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 2363 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 2364 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 2365 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 2366 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 2367 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 2368 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 2369 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 2370 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 2371 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 2372 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 2373 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 2374 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 2375 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 2376 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 2377 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 2378 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 2379 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 2380 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 2381 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 2382 | 0x00, 0x2e, 0x00, 0x00, 0x00, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, | ||
| 2383 | 0xb3, 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, | ||
| 2384 | 0x51, 0x14, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x8f, | ||
| 2385 | 0x63, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x11, 0x34, 0x00, 0x12, 0xf9, 0x83, | ||
| 2386 | 0x33, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x29, 0x6c, 0x00, 0x12, 0xf9, 0x12, | ||
| 2387 | 0xc0, 0x3c, 0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0x83, | ||
| 2388 | 0x5f, 0xe1, 0xc5, 0x6d, 0x1b, 0xc2, 0x04, 0x20, 0x91, 0x5f, 0x00, 0xd2, | ||
| 2389 | 0xf4, 0x17, 0x40, 0x20, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x05, 0x50, 0x00, | ||
| 2390 | 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xbf, 0xb0, 0x00, 0xcc, 0xe3, 0x57, 0x77, | ||
| 2391 | 0x71, 0xdb, 0x96, 0x30, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, | ||
| 2392 | 0x03, 0x5c, 0x7e, 0x75, 0x17, 0xb7, 0x6d, 0x02, 0x10, 0x80, 0x44, 0x7e, | ||
| 2393 | 0x01, 0x48, 0xd3, 0xff, 0x38, 0x96, 0x5f, 0xdc, 0xb6, 0x01, 0x44, 0x6c, | ||
| 2394 | 0x57, 0xfe, 0xe7, 0x5b, 0xdb, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0x93, | ||
| 2395 | 0x0d, 0x44, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0x7f, 0x01, 0x04, 0x92, | ||
| 2396 | 0x5f, 0xdc, 0xb6, 0x19, 0x44, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0x7f, | ||
| 2397 | 0xc1, 0x00, 0x97, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 2398 | 0x00, 0x12, 0x02, 0x00, 0x00, 0x13, 0x04, 0x72, 0x10, 0x0b, 0x04, 0x00, | ||
| 2399 | 0x00, 0x56, 0x00, 0x00, 0x00, 0xd4, 0x8e, 0x45, 0x00, 0x81, 0x70, 0xcc, | ||
| 2400 | 0x41, 0x2c, 0xcc, 0x83, 0x07, 0x94, 0x8e, 0x35, 0x00, 0x03, 0x31, 0xc7, | ||
| 2401 | 0xb0, 0x30, 0x78, 0x30, 0xc7, 0xb0, 0xe0, 0x01, 0x1e, 0x8c, 0x00, 0x8c, | ||
| 2402 | 0x35, 0x00, 0x81, 0x40, 0x65, 0x11, 0x94, 0x00, 0x81, 0x63, 0x09, 0x01, | ||
| 2403 | 0x30, 0x02, 0x40, 0xdf, 0x0c, 0x00, 0x79, 0x23, 0x00, 0x35, 0x40, 0xc0, | ||
| 2404 | 0x0c, 0x00, 0x05, 0x33, 0x00, 0x33, 0x00, 0x73, 0x10, 0xb4, 0xa0, 0x0b, | ||
| 2405 | 0xb4, 0xb0, 0x07, 0x24, 0xcc, 0x00, 0x50, 0x31, 0x03, 0x30, 0x02, 0x30, | ||
| 2406 | 0x03, 0x30, 0xd6, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, | ||
| 2407 | 0x07, 0x82, 0x20, 0x88, 0x7f, 0x63, 0x0d, 0x6c, 0x3b, 0xff, 0xa4, 0xc7, | ||
| 2408 | 0xb6, 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, 0x37, 0xd6, 0x00, 0x82, | ||
| 2409 | 0x20, 0x5b, 0xff, 0x02, 0x08, 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, | ||
| 2410 | 0xf5, 0x2f, 0x8c, 0x35, 0x80, 0x20, 0xb8, 0xe6, 0x60, 0x00, 0x82, 0xe0, | ||
| 2411 | 0x9a, 0x83, 0x01, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x63, 0x0d, 0x20, 0x48, | ||
| 2412 | 0xb7, 0x39, 0x18, 0x80, 0x20, 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, | ||
| 2413 | 0x83, 0xc1, 0x58, 0xc3, 0x3a, 0xe2, 0x31, 0x0b, 0x06, 0xeb, 0x88, 0xc7, | ||
| 2414 | 0x2c, 0x18, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0x30, 0xd6, 0x00, 0x82, 0x30, | ||
| 2415 | 0x1e, 0x8e, 0x01, 0x08, 0xc2, 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, | ||
| 2416 | 0x18, 0x8c, 0x35, 0x88, 0xb9, 0x98, 0xf6, 0x1f, 0x58, 0xf2, 0x6c, 0xfc, | ||
| 2417 | 0x0b, 0x63, 0xba, 0xaa, 0xb9, 0x2f, 0x8c, 0x35, 0xfc, 0x33, 0xe9, 0xff, | ||
| 2418 | 0xbe, 0x40, 0xd7, 0xa0, 0x98, 0x7f, 0x2d, 0x1c, 0xc7, 0xa0, 0x2f, 0x8c, | ||
| 2419 | 0x35, 0xcc, 0x7d, 0x9b, 0xa6, 0xbe, 0xd0, 0xba, 0x21, 0xcf, 0xfb, 0x02, | ||
| 2420 | 0x9f, 0xb3, 0x3e, 0xfe, 0x11, 0x30, 0x46, 0x00, 0x82, 0x20, 0x48, 0x82, | ||
| 2421 | 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x63, 0x04, 0x3a, 0x6b, | ||
| 2422 | 0xce, 0x21, 0x18, 0x8c, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, | ||
| 2423 | 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, | ||
| 2424 | 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, | ||
| 2425 | 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, | ||
| 2426 | 0xf8, 0x37, 0x46, 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, | ||
| 2427 | 0xf6, 0x34, 0x18, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, | ||
| 2428 | 0x00, 0xe3, 0x0d, 0x73, 0xe0, 0x07, 0xaf, 0x40, 0xc1, 0x18, 0x6e, 0x08, | ||
| 2429 | 0x9e, 0x60, 0x96, 0x21, 0x10, 0x82, 0x11, 0x03, 0xa5, 0x08, 0x68, 0x81, | ||
| 2430 | 0x0e, 0xe4, 0xe0, 0x0e, 0xc8, 0xe0, 0x0c, 0xca, 0x80, 0x18, 0x31, 0x50, | ||
| 2431 | 0x8a, 0xa0, 0x16, 0xe8, 0x60, 0x0e, 0xf0, 0xa0, 0x0c, 0xd0, 0xc0, 0x0c, | ||
| 2432 | 0x8a, 0x41, 0x06, 0x61, 0x0c, 0xde, 0x60, 0x90, 0x41, 0x28, 0x83, 0x38, | ||
| 2433 | 0x18, 0x64, 0x10, 0x82, 0x39, 0x38, 0x3d, 0x50, 0x97, 0x82, 0x32, 0xc8, | ||
| 2434 | 0x10, 0xa4, 0x81, 0x1c, 0x18, 0x11, 0xc0, 0x67, 0xbc, 0xc1, 0x0f, 0x54, | ||
| 2435 | 0x61, 0x17, 0x2e, 0x50, 0x97, 0x82, 0x32, 0xc8, 0x10, 0xb8, 0xc1, 0x1d, | ||
| 2436 | 0x8c, 0x18, 0x14, 0x46, 0x70, 0x0e, 0x45, 0x30, 0xc7, 0xf0, 0x06, 0x41, | ||
| 2437 | 0x38, 0x8c, 0x57, 0x90, 0x02, 0x2c, 0x84, 0x83, 0x38, 0xe0, 0xc1, 0x05, | ||
| 2438 | 0xea, 0x52, 0x50, 0x06, 0x19, 0x02, 0x3a, 0xe8, 0x83, 0x11, 0x83, 0xc2, | ||
| 2439 | 0x08, 0xda, 0x61, 0x09, 0xe6, 0x18, 0x8c, 0xc0, 0x1c, 0xc6, 0x2b, 0x54, | ||
| 2440 | 0xc1, 0x16, 0xce, 0x01, 0x1d, 0xfe, 0xe0, 0x02, 0x75, 0x29, 0x28, 0x83, | ||
| 2441 | 0x0c, 0x81, 0x1e, 0x8c, 0xc2, 0x88, 0x41, 0x61, 0x04, 0xf3, 0x10, 0x05, | ||
| 2442 | 0x73, 0x0c, 0x46, 0x90, 0x0e, 0xb3, 0x04, 0xc4, 0x70, 0x43, 0xc7, 0x06, | ||
| 2443 | 0xc1, 0x2c, 0xc3, 0x40, 0x04, 0x23, 0x06, 0x4a, 0x11, 0xc0, 0x03, 0x2c, | ||
| 2444 | 0xb8, 0xc2, 0x2c, 0x80, 0xc2, 0x28, 0x84, 0x02, 0x18, 0x8c, 0x18, 0x28, | ||
| 2445 | 0x45, 0x10, 0x0f, 0xb0, 0xf0, 0x0a, 0xb4, 0x10, 0x0a, 0xa4, 0x20, 0x0a, | ||
| 2446 | 0x61, 0x30, 0xc8, 0x10, 0x80, 0x82, 0x29, 0x0c, 0x32, 0x0c, 0xa0, 0xc0, | ||
| 2447 | 0x0a, 0x83, 0x0c, 0xc2, 0x1f, 0xb8, 0xc2, 0x20, 0x83, 0x10, 0xc0, 0xc2, | ||
| 2448 | 0xdd, 0x82, 0xba, 0x14, 0x94, 0x41, 0x86, 0xc0, 0x14, 0x5e, 0xc1, 0x88, | ||
| 2449 | 0x00, 0x3e, 0xe3, 0x0d, 0xbb, 0x70, 0x0e, 0xf8, 0x70, 0x81, 0xba, 0x14, | ||
| 2450 | 0x94, 0x41, 0x86, 0x60, 0x15, 0x68, 0x61, 0xc4, 0xa0, 0x30, 0x02, 0x92, | ||
| 2451 | 0x28, 0x82, 0x39, 0x06, 0x56, 0x08, 0xfc, 0x61, 0xbc, 0x22, 0x1c, 0xda, | ||
| 2452 | 0xc1, 0x1f, 0xfe, 0xa1, 0x16, 0x2e, 0x50, 0x97, 0x82, 0x32, 0xc8, 0x10, | ||
| 2453 | 0xc4, 0x82, 0x2e, 0x8c, 0x18, 0x14, 0x46, 0xa0, 0x12, 0x4b, 0x30, 0xc7, | ||
| 2454 | 0x60, 0x04, 0x23, 0x31, 0x5e, 0x71, 0x0e, 0xf3, 0x40, 0x12, 0x25, 0xc1, | ||
| 2455 | 0x0b, 0x17, 0xa8, 0x4b, 0x41, 0x19, 0x64, 0x08, 0x6e, 0x01, 0x1c, 0x46, | ||
| 2456 | 0x0c, 0x0a, 0x23, 0x80, 0x89, 0x28, 0x98, 0x63, 0x30, 0x02, 0x93, 0x98, | ||
| 2457 | 0x25, 0x20, 0x06, 0x3a, 0x02, 0x3e, 0x08, 0x84, 0x01, 0x2e, 0x84, 0x39, | ||
| 2458 | 0x86, 0x60, 0x14, 0x48, 0x62, 0xbc, 0x01, 0x1e, 0xf6, 0x21, 0x25, 0x28, | ||
| 2459 | 0x18, 0xc3, 0x0d, 0x41, 0x2b, 0x04, 0xb3, 0x0c, 0x85, 0x11, 0x0c, 0x32, | ||
| 2460 | 0x10, 0xbf, 0x80, 0x0e, 0xe3, 0x0d, 0xf4, 0xf0, 0x0f, 0x21, 0x41, 0xc1, | ||
| 2461 | 0x18, 0x31, 0x20, 0x8c, 0xc0, 0x26, 0x86, 0x11, 0x83, 0xc2, 0x08, 0x70, | ||
| 2462 | 0x22, 0xd8, 0x05, 0x0b, 0x76, 0x01, 0x3e, 0x23, 0x06, 0x85, 0x11, 0xe0, | ||
| 2463 | 0x44, 0x00, 0x0e, 0x36, 0xf0, 0x82, 0x7c, 0x8c, 0x17, 0x82, 0xf8, 0xd8, | ||
| 2464 | 0x10, 0xd0, 0x67, 0xc4, 0x80, 0x30, 0x82, 0x9e, 0x08, 0x46, 0x0c, 0x0a, | ||
| 2465 | 0x23, 0xf8, 0x89, 0xc0, 0x17, 0x2c, 0xf0, 0x05, 0xf9, 0xcc, 0x31, 0xa0, | ||
| 2466 | 0xc3, 0xd2, 0x13, 0x83, 0x0c, 0x41, 0x3a, 0xdc, 0x83, 0x0d, 0x01, 0x7d, | ||
| 2467 | 0x06, 0x19, 0x82, 0x75, 0xe8, 0x87, 0x41, 0x86, 0xa0, 0xfa, 0x87, 0x59, | ||
| 2468 | 0x02, 0x63, 0xa0, 0x22, 0x10, 0x0a, 0x36, 0x20, 0xc6, 0x1b, 0x4c, 0x22, | ||
| 2469 | 0x26, 0xc2, 0x82, 0x82, 0x31, 0xdc, 0x10, 0xd8, 0x82, 0x33, 0xcb, 0x70, | ||
| 2470 | 0x20, 0xc1, 0x20, 0x03, 0x51, 0x0f, 0xfe, 0x30, 0xde, 0xa0, 0x12, 0x35, | ||
| 2471 | 0x91, 0x13, 0x14, 0x8c, 0xf1, 0x06, 0x96, 0xb8, 0x09, 0x9d, 0xa0, 0x60, | ||
| 2472 | 0x8c, 0x18, 0x20, 0x47, 0x14, 0x17, 0x45, 0x77, 0x0c, 0xc1, 0x20, 0x43, | ||
| 2473 | 0x70, 0x0f, 0x29, 0x31, 0xc8, 0x10, 0x2c, 0x2b, 0x31, 0x4b, 0x80, 0x0c, | ||
| 2474 | 0x54, 0x04, 0xc2, 0x81, 0x19, 0xc3, 0x0d, 0x61, 0x60, 0x0e, 0xc1, 0x2c, | ||
| 2475 | 0x43, 0x72, 0x05, 0xe3, 0x0d, 0x33, 0xe1, 0x13, 0x6f, 0x41, 0xc1, 0x18, | ||
| 2476 | 0x6e, 0x08, 0xd2, 0x21, 0x98, 0x65, 0x50, 0x96, 0x60, 0x90, 0xa1, 0x10, | ||
| 2477 | 0x89, 0x95, 0x18, 0x6f, 0xb8, 0x09, 0xb1, 0x60, 0x0b, 0x0a, 0xc6, 0x1c, | ||
| 2478 | 0x43, 0x48, 0x04, 0x76, 0x31, 0xc8, 0x10, 0x88, 0x04, 0x4c, 0x58, 0x50, | ||
| 2479 | 0xc8, 0x67, 0x90, 0x21, 0x20, 0x09, 0x9b, 0x98, 0x25, 0x88, 0x83, 0xf1, | ||
| 2480 | 0x86, 0x9e, 0x40, 0x0b, 0xbd, 0xa0, 0x60, 0x8c, 0x37, 0xfc, 0x84, 0x5a, | ||
| 2481 | 0xd0, 0x05, 0x05, 0x63, 0x90, 0x01, 0x6a, 0x89, 0x9d, 0x18, 0x6e, 0x20, | ||
| 2482 | 0xe0, 0xc1, 0x99, 0x65, 0x60, 0xac, 0x60, 0x0c, 0x41, 0x02, 0x8d, 0xe1, | ||
| 2483 | 0x86, 0x20, 0x1f, 0x94, 0x59, 0x06, 0xa7, 0x09, 0x4c, 0xd8, 0x07, 0xf9, | ||
| 2484 | 0xcc, 0x12, 0x3c, 0x36, 0xf4, 0x03, 0x7c, 0x46, 0x0c, 0x08, 0x23, 0x60, | ||
| 2485 | 0x8d, 0xc0, 0x02, 0x90, 0x90, 0xcf, 0x88, 0x41, 0x61, 0x04, 0xaf, 0x11, | ||
| 2486 | 0x88, 0xc4, 0x2c, 0xc1, 0x33, 0x50, 0x01, 0x28, 0x8d, 0xe0, 0xcc, 0x31, | ||
| 2487 | 0xd8, 0x44, 0x80, 0x1a, 0x63, 0x08, 0x1b, 0x6a, 0x0c, 0x37, 0x04, 0x22, | ||
| 2488 | 0xa1, 0xcc, 0x32, 0x44, 0x50, 0x60, 0x02, 0x49, 0xc8, 0x67, 0x96, 0x40, | ||
| 2489 | 0xb2, 0xc1, 0x24, 0xe0, 0x33, 0x62, 0x40, 0x18, 0x41, 0x6d, 0x04, 0x16, | ||
| 2490 | 0xa4, 0x84, 0x7c, 0x46, 0x0c, 0x0a, 0x23, 0xc0, 0x8d, 0x60, 0x25, 0x66, | ||
| 2491 | 0x09, 0xa4, 0x81, 0x0a, 0x40, 0x81, 0x84, 0x68, 0x8e, 0x21, 0x09, 0x60, | ||
| 2492 | 0x63, 0x0c, 0x81, 0x0c, 0x5c, 0x63, 0xb8, 0x21, 0x58, 0x09, 0x65, 0x96, | ||
| 2493 | 0x81, 0x9a, 0x02, 0x13, 0x5a, 0x42, 0x3e, 0xb3, 0x04, 0x95, 0x0d, 0x2f, | ||
| 2494 | 0x01, 0x9f, 0x11, 0x03, 0xc2, 0x08, 0x7c, 0x23, 0xb0, 0x40, 0x26, 0xe4, | ||
| 2495 | 0x33, 0x62, 0x50, 0x18, 0x41, 0x78, 0x04, 0x34, 0x31, 0x4b, 0x50, 0x0d, | ||
| 2496 | 0x54, 0x00, 0xca, 0x24, 0x50, 0x73, 0x0c, 0x49, 0x60, 0x1b, 0xb3, 0x04, | ||
| 2497 | 0xd6, 0x40, 0x45, 0x20, 0x54, 0x7a, 0xb0, 0x0c, 0x32, 0x04, 0x6b, 0x41, | ||
| 2498 | 0x17, 0x73, 0x0c, 0x68, 0x01, 0x06, 0xbd, 0x31, 0xc8, 0x10, 0xa4, 0xc5, | ||
| 2499 | 0x5d, 0xd8, 0x10, 0xc8, 0x67, 0x90, 0x21, 0x58, 0x8b, 0xbe, 0x98, 0x25, | ||
| 2500 | 0x88, 0x83, 0xe1, 0x86, 0x59, 0xf0, 0x89, 0x60, 0x96, 0x01, 0x23, 0x83, | ||
| 2501 | 0x60, 0x90, 0x81, 0x0e, 0xe2, 0x42, 0x2f, 0xc6, 0x1b, 0x4c, 0x23, 0x36, | ||
| 2502 | 0xc6, 0x83, 0x82, 0x31, 0xde, 0x80, 0x1a, 0xb3, 0xd1, 0x1b, 0x14, 0x8c, | ||
| 2503 | 0x39, 0x06, 0xb9, 0x08, 0xce, 0x63, 0x90, 0x21, 0x98, 0x8b, 0xd0, 0xb0, | ||
| 2504 | 0xe0, 0x90, 0xcf, 0x20, 0x43, 0x50, 0x17, 0xa7, 0x31, 0xdc, 0x70, 0xf0, | ||
| 2505 | 0x84, 0x33, 0xcb, 0x30, 0x06, 0x59, 0x30, 0x86, 0x30, 0xb0, 0xc7, 0x70, | ||
| 2506 | 0x43, 0xf0, 0x13, 0xca, 0x2c, 0xc3, 0xa6, 0x05, 0x26, 0x84, 0x85, 0x7c, | ||
| 2507 | 0x66, 0x09, 0xb8, 0x11, 0x03, 0xc2, 0x08, 0xee, 0x63, 0x18, 0x31, 0x28, | ||
| 2508 | 0x8c, 0x20, 0x3f, 0x02, 0xb2, 0xb0, 0xc0, 0x2c, 0xe4, 0x63, 0x01, 0x5a, | ||
| 2509 | 0xc0, 0x67, 0x96, 0x80, 0x1b, 0xa8, 0x00, 0x14, 0x4d, 0xd8, 0xe6, 0x18, | ||
| 2510 | 0xfa, 0x22, 0xa0, 0x8f, 0x31, 0x04, 0x86, 0x3e, 0x86, 0x1b, 0x02, 0xb4, | ||
| 2511 | 0x50, 0x66, 0x19, 0xbc, 0x2e, 0x30, 0x41, 0x2d, 0xe4, 0x33, 0x4b, 0xf0, | ||
| 2512 | 0x8d, 0x18, 0x10, 0x46, 0x00, 0x22, 0xc3, 0x88, 0x41, 0x61, 0x04, 0x22, | ||
| 2513 | 0x12, 0xb4, 0x85, 0x05, 0x6f, 0x21, 0x1f, 0x0b, 0xe2, 0x02, 0x3e, 0xb3, | ||
| 2514 | 0x04, 0xdf, 0x40, 0x05, 0xa0, 0x74, 0x82, 0x37, 0xc7, 0x90, 0x04, 0xfc, | ||
| 2515 | 0x31, 0x86, 0x50, 0xe9, 0xc7, 0x70, 0x43, 0x10, 0x17, 0xca, 0x2c, 0x43, | ||
| 2516 | 0x18, 0x80, 0x41, 0x60, 0xc2, 0x5c, 0xc8, 0x67, 0x96, 0x40, 0x0c, 0x46, | ||
| 2517 | 0x0c, 0x08, 0x23, 0x48, 0x91, 0x61, 0xc4, 0xa0, 0x30, 0x82, 0x15, 0x09, | ||
| 2518 | 0xec, 0xc2, 0x02, 0xbc, 0x90, 0x8f, 0x05, 0x7a, 0x01, 0x9f, 0x59, 0x02, | ||
| 2519 | 0x31, 0x18, 0xa8, 0x00, 0x14, 0x30, 0x10, 0xc2, 0x60, 0x8e, 0x21, 0x09, | ||
| 2520 | 0x44, 0x64, 0xc4, 0xc0, 0x30, 0x82, 0x18, 0x09, 0x62, 0xe3, 0x35, 0x06, | ||
| 2521 | 0x19, 0x82, 0xd9, 0x28, 0x8f, 0x59, 0x82, 0x31, 0x18, 0xa8, 0x08, 0xfc, | ||
| 2522 | 0x00, 0x13, 0xc4, 0x60, 0x90, 0x21, 0xc8, 0x8d, 0xf3, 0x98, 0x25, 0x88, | ||
| 2523 | 0x83, 0x59, 0x86, 0x32, 0x88, 0x03, 0x7e, 0x18, 0x64, 0xe8, 0x05, 0xdd, | ||
| 2524 | 0x18, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0x66, 0x24, 0x68, 0x8d, 0x39, 0x06, | ||
| 2525 | 0xdb, 0x08, 0x5a, 0x64, 0xc4, 0xa0, 0x30, 0x82, 0x1a, 0x19, 0x5c, 0x63, | ||
| 2526 | 0x8e, 0x41, 0x08, 0x5c, 0x64, 0xc4, 0xa0, 0x30, 0x82, 0x1b, 0x29, 0x5e, | ||
| 2527 | 0x63, 0x8e, 0x41, 0x08, 0x5a, 0x64, 0x90, 0x21, 0xe8, 0x8d, 0xf7, 0x18, | ||
| 2528 | 0x64, 0x08, 0xca, 0x21, 0x3e, 0xc6, 0x1b, 0xee, 0x43, 0x44, 0x68, 0x84, | ||
| 2529 | 0x82, 0x31, 0xde, 0x90, 0x1f, 0x24, 0xe2, 0x22, 0x14, 0x8c, 0x39, 0x86, | ||
| 2530 | 0xf1, 0x08, 0x70, 0x64, 0x90, 0x21, 0x20, 0x0f, 0xf9, 0xb0, 0x20, 0x91, | ||
| 2531 | 0xcf, 0x20, 0x43, 0x60, 0x1e, 0xf8, 0x31, 0xdc, 0x70, 0xb4, 0x86, 0x33, | ||
| 2532 | 0xcb, 0x00, 0x07, 0x66, 0x10, 0x8c, 0x21, 0x0c, 0x3d, 0x32, 0xdc, 0x10, | ||
| 2533 | 0xc0, 0x86, 0x32, 0xcb, 0x80, 0x06, 0x67, 0x10, 0x98, 0x20, 0x1b, 0xf2, | ||
| 2534 | 0x99, 0x25, 0x48, 0x83, 0x11, 0x03, 0xc2, 0x08, 0xd0, 0x64, 0x18, 0x31, | ||
| 2535 | 0x28, 0x8c, 0x40, 0x4d, 0x82, 0xda, 0xb0, 0xe0, 0x36, 0xe4, 0x63, 0x41, | ||
| 2536 | 0x6e, 0xc0, 0x67, 0x96, 0x20, 0x0d, 0x06, 0x2a, 0x00, 0xe5, 0x0c, 0x04, | ||
| 2537 | 0x34, 0x98, 0x63, 0x70, 0x8f, 0xa0, 0x4c, 0xc6, 0x10, 0x98, 0x32, 0x19, | ||
| 2538 | 0x6e, 0x08, 0x72, 0x43, 0x99, 0x65, 0x58, 0x03, 0x35, 0x08, 0x4c, 0xd8, | ||
| 2539 | 0x0d, 0xf9, 0xcc, 0x12, 0xb0, 0xc1, 0x88, 0x01, 0x61, 0x04, 0x71, 0x32, | ||
| 2540 | 0x8c, 0x18, 0x14, 0x46, 0x30, 0x27, 0x81, 0x6f, 0x58, 0x00, 0x1e, 0xf2, | ||
| 2541 | 0xb1, 0x40, 0x3c, 0xe0, 0x33, 0x4b, 0xc0, 0x06, 0x03, 0x15, 0x80, 0xa2, | ||
| 2542 | 0x06, 0xc2, 0x1a, 0xcc, 0x31, 0x24, 0x41, 0x9b, 0x8c, 0x21, 0x54, 0x6b, | ||
| 2543 | 0x32, 0xdc, 0x10, 0x88, 0x87, 0x32, 0xcb, 0xe0, 0x06, 0x6d, 0x10, 0x98, | ||
| 2544 | 0x40, 0x1e, 0xf2, 0x99, 0x25, 0x78, 0x83, 0x11, 0x03, 0xc2, 0x08, 0xf4, | ||
| 2545 | 0x64, 0x18, 0x31, 0x28, 0x8c, 0x80, 0x4f, 0x82, 0xf3, 0xb0, 0x20, 0x3d, | ||
| 2546 | 0xe4, 0x63, 0xc1, 0x7a, 0xc0, 0x67, 0x96, 0xe0, 0x0d, 0x06, 0x2a, 0x00, | ||
| 2547 | 0xa5, 0x0d, 0x04, 0x37, 0x98, 0x63, 0x48, 0x82, 0x39, 0x19, 0x31, 0x30, | ||
| 2548 | 0x8c, 0x40, 0x54, 0x02, 0x11, 0x01, 0x91, 0x41, 0x86, 0x80, 0x44, 0x6c, | ||
| 2549 | 0x64, 0x96, 0x00, 0x0e, 0x06, 0x2a, 0x02, 0x3f, 0x28, 0x03, 0xe1, 0x0d, | ||
| 2550 | 0x06, 0x19, 0x02, 0x15, 0xc1, 0x91, 0x59, 0x82, 0x38, 0x18, 0x68, 0x09, | ||
| 2551 | 0x78, 0x44, 0xe1, 0x11, 0x8b, 0x47, 0xc6, 0x40, 0x16, 0xe0, 0x80, 0x47, | ||
| 2552 | 0xc8, 0x60, 0xa0, 0x25, 0x40, 0x11, 0x45, 0x2f, 0x2c, 0x73, 0x18, 0x03, | ||
| 2553 | 0x02, 0x0e, 0x68, 0x88, 0x0c, 0x06, 0x19, 0x02, 0x81, 0x47, 0x2c, 0x20, | ||
| 2554 | 0x13, 0xf9, 0x64, 0x10, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 2555 | 0x00, 0x17, 0xd3, 0x07, 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, | ||
| 2556 | 0x50, 0x13, 0xe7, 0x2c, 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, | ||
| 2557 | 0x9b, 0x6d, 0x29, 0x38, 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, | ||
| 2558 | 0x00, 0x03, 0x11, 0x71, 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, | ||
| 2559 | 0x21, 0x13, 0x00, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x2c, 0x00, 0x00, | ||
| 2560 | 0x00, 0x5b, 0x8e, 0x20, 0x98, 0x85, 0x03, 0x17, 0x90, 0x5f, 0xd8, 0x52, | ||
| 2561 | 0x10, 0x07, 0x38, 0x20, 0xe1, 0xb0, 0xa5, 0x28, 0x0e, 0x70, 0x40, 0xc2, | ||
| 2562 | 0x61, 0x4b, 0xa1, 0x1c, 0xe2, 0x80, 0x8c, 0xc3, 0x96, 0xe2, 0x39, 0xc4, | ||
| 2563 | 0x01, 0x19, 0x87, 0x2d, 0x45, 0x75, 0x88, 0x03, 0x32, 0x0e, 0x5b, 0x8a, | ||
| 2564 | 0xed, 0x10, 0x07, 0x64, 0x1c, 0xb6, 0x14, 0x62, 0x70, 0x80, 0x03, 0x12, | ||
| 2565 | 0x0e, 0x5b, 0x8a, 0x31, 0x38, 0xc0, 0x01, 0x09, 0x87, 0x2d, 0x45, 0x1a, | ||
| 2566 | 0x1c, 0xe2, 0x80, 0x8c, 0xc3, 0x96, 0xc2, 0x0d, 0x0e, 0x71, 0x40, 0xc6, | ||
| 2567 | 0x61, 0x4b, 0x41, 0x07, 0x87, 0x38, 0x20, 0xe3, 0xb0, 0xa5, 0xd0, 0x83, | ||
| 2568 | 0x43, 0x1c, 0x90, 0x71, 0xd8, 0x32, 0x88, 0x42, 0x40, 0x0e, 0x5b, 0x86, | ||
| 2569 | 0x53, 0x08, 0xca, 0x61, 0xcb, 0xa0, 0x0b, 0x81, 0x39, 0x6c, 0x19, 0x7e, | ||
| 2570 | 0x21, 0x38, 0x87, 0x2d, 0x43, 0x38, 0x04, 0xe8, 0xb0, 0x65, 0x50, 0x87, | ||
| 2571 | 0x60, 0x16, 0xb6, 0x0c, 0xef, 0x10, 0xa4, 0xc3, 0x96, 0xc1, 0x1e, 0x02, | ||
| 2572 | 0x75, 0xd8, 0x32, 0xe0, 0x43, 0x90, 0x0e, 0x5b, 0x06, 0xb6, 0x08, 0xd4, | ||
| 2573 | 0x61, 0xcb, 0xe0, 0x16, 0x41, 0x3a, 0x6c, 0x19, 0xd4, 0x23, 0x50, 0x87, | ||
| 2574 | 0x2d, 0x03, 0x7b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2575 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, | ||
| 2576 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xd4, 0xce, 0x41, | ||
| 2577 | 0x2c, 0xcc, 0xd3, 0x06, 0x94, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, | ||
| 2578 | 0xdf, 0x0c, 0x00, 0x05, 0x33, 0x00, 0x54, 0xcc, 0x00, 0x8c, 0x35, 0xb0, | ||
| 2579 | 0xec, 0x19, 0xca, 0x1f, 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, | ||
| 2580 | 0xde, 0x58, 0x83, 0x5e, 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, | ||
| 2581 | 0xdb, 0xa7, 0xf4, 0xe8, 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, | ||
| 2582 | 0xc2, 0xe8, 0xee, 0xdd, 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, | ||
| 2583 | 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, | ||
| 2584 | 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, | ||
| 2585 | 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, | ||
| 2586 | 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, | ||
| 2587 | 0x33, 0x00, 0x04, 0x8c, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, | ||
| 2588 | 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, | ||
| 2589 | 0x02, 0x0d, 0x37, 0x50, 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, | ||
| 2590 | 0x43, 0xc5, 0xc1, 0x20, 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, | ||
| 2591 | 0x08, 0xa0, 0x6a, 0x96, 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, | ||
| 2592 | 0x48, 0x82, 0xe1, 0x86, 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, | ||
| 2593 | 0x28, 0x8c, 0xc0, 0x0f, 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xf0, 0x60, 0xc4, | ||
| 2594 | 0xa0, 0x30, 0x02, 0x50, 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xc8, 0x83, 0x11, | ||
| 2595 | 0x83, 0xc2, 0x08, 0x44, 0x21, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xc0, 0x83, | ||
| 2596 | 0x59, 0x82, 0x62, 0xa0, 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xfc, | ||
| 2597 | 0x60, 0x0c, 0x41, 0xf0, 0x83, 0x31, 0x84, 0x81, 0x0f, 0x46, 0x0c, 0x0a, | ||
| 2598 | 0x23, 0x30, 0x05, 0x21, 0x18, 0x31, 0x28, 0x8c, 0xe0, 0x14, 0x88, 0x60, | ||
| 2599 | 0xb8, 0x21, 0xb8, 0x84, 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, | ||
| 2600 | 0x0c, 0x6c, 0x40, 0x03, 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, | ||
| 2601 | 0x8f, 0x05, 0x1a, 0x7c, 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, | ||
| 2602 | 0x2a, 0x0c, 0x32, 0x04, 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, | ||
| 2603 | 0x08, 0xd2, 0xc0, 0x0d, 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, | ||
| 2604 | 0xa0, 0x98, 0x65, 0x40, 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, | ||
| 2605 | 0x31, 0x28, 0x8c, 0xe0, 0x16, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0x20, | ||
| 2606 | 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xc8, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, | ||
| 2607 | 0x40, 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xd8, 0x85, 0x42, 0x0d, 0xe6, 0x18, | ||
| 2608 | 0x84, 0x20, 0x16, 0x66, 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, | ||
| 2609 | 0x10, 0x04, 0x04, 0x3a, 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, | ||
| 2610 | 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 2611 | }; | ||
| 2612 | const unsigned int sdl_metallib_len = 31301; | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_shaders_metal_iphonesimulator.h b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_iphonesimulator.h new file mode 100644 index 0000000..962d3d0 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_iphonesimulator.h | |||
| @@ -0,0 +1,3155 @@ | |||
| 1 | const unsigned char sdl_metallib[] = { | ||
| 2 | 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 3 | 0x00, 0x00, 0x00, 0x00, 0xbd, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 4 | 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x03, 0x00, 0x00, | ||
| 5 | 0x00, 0x00, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 6 | 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, | ||
| 7 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0x3d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f, 0x00, 0x00, | ||
| 9 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, | ||
| 10 | 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, | ||
| 11 | 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, | ||
| 12 | 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, | ||
| 13 | 0x40, 0x16, 0x1e, 0x80, 0x6f, 0x65, 0x1c, 0x60, 0x4b, 0xe5, 0x3e, 0x52, | ||
| 14 | 0xbd, 0x45, 0x4b, 0x73, 0x3d, 0xb1, 0x9c, 0xfa, 0xfe, 0xc3, 0x69, 0x80, | ||
| 15 | 0x87, 0x85, 0xc7, 0x21, 0xed, 0x04, 0x6d, 0xba, 0x4d, 0x44, 0x53, 0x5a, | ||
| 16 | 0x08, 0x00, 0xa0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x46, | ||
| 17 | 0x46, 0x54, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 19 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, 0x00, | ||
| 20 | 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x85, 0x00, | ||
| 21 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 22 | 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, | ||
| 23 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 24 | 0x00, 0x4f, 0x3e, 0x88, 0xf6, 0xd4, 0xa3, 0x24, 0xb7, 0xdd, 0x38, 0xe0, | ||
| 25 | 0x22, 0x3d, 0x83, 0x1f, 0x22, 0x68, 0x86, 0x1c, 0x9f, 0x44, 0x3b, 0x7a, | ||
| 26 | 0x75, 0x43, 0x0b, 0xd5, 0x0c, 0xbf, 0x6a, 0xaf, 0x7a, 0x4d, 0x44, 0x53, | ||
| 27 | 0x5a, 0x08, 0x00, 0xb0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, | ||
| 28 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 29 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0e, 0x00, | ||
| 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, | ||
| 31 | 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x88, | ||
| 32 | 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, | ||
| 33 | 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, | ||
| 34 | 0x65, 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, | ||
| 35 | 0x41, 0x53, 0x48, 0x20, 0x00, 0x69, 0x0c, 0xc0, 0x72, 0x21, 0x01, 0x36, | ||
| 36 | 0xf4, 0x14, 0xe1, 0x4d, 0xa4, 0x88, 0x9b, 0xe6, 0x99, 0x4b, 0x81, 0x66, | ||
| 37 | 0x0a, 0xe3, 0x36, 0x1a, 0x3b, 0xb2, 0xa9, 0x82, 0x63, 0x0e, 0xec, 0x2c, | ||
| 38 | 0x58, 0x4d, 0x44, 0x53, 0x5a, 0x08, 0x00, 0x10, 0x0e, 0x00, 0x00, 0x00, | ||
| 39 | 0x00, 0x00, 0x00, 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x66, 0x00, 0x00, | ||
| 40 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 41 | 0x00, 0x50, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, | ||
| 42 | 0x53, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, | ||
| 43 | 0x4e, 0x44, 0x54, 0x87, 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, | ||
| 44 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, | ||
| 45 | 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, | ||
| 46 | 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x66, 0x5d, 0xb4, 0x98, | ||
| 47 | 0xcf, 0x81, 0x8b, 0x13, 0x13, 0xaf, 0x83, 0xd1, 0x40, 0x24, 0xf0, 0x52, | ||
| 48 | 0x05, 0xac, 0x7a, 0x64, 0x96, 0xa7, 0xa3, 0x59, 0x4c, 0x41, 0x3c, 0xf3, | ||
| 49 | 0xe6, 0xe4, 0xf5, 0xf2, 0x4d, 0x44, 0x53, 0x5a, 0x08, 0x00, 0x50, 0x1f, | ||
| 50 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, | ||
| 51 | 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 52 | 0x00, 0x00, 0x00, 0x00, 0x60, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 53 | 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, | ||
| 54 | 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x86, 0x00, 0x00, 0x00, 0x4e, 0x41, | ||
| 55 | 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x59, 0x55, 0x56, 0x5f, | ||
| 56 | 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, | ||
| 57 | 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x63, 0x82, | ||
| 58 | 0xe4, 0xf4, 0x29, 0x67, 0x41, 0x9b, 0x27, 0xdf, 0xce, 0x83, 0x4e, 0x78, | ||
| 59 | 0x01, 0xd6, 0xf3, 0xc5, 0x34, 0x38, 0x15, 0x0a, 0x0b, 0x3a, 0x6e, 0xc6, | ||
| 60 | 0x9a, 0xb7, 0x3b, 0x8f, 0x19, 0x4f, 0x4d, 0x44, 0x53, 0x5a, 0x08, 0x00, | ||
| 61 | 0x10, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x46, 0x46, 0x54, | ||
| 62 | 0x18, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, | ||
| 63 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x4a, 0x00, 0x00, 0x00, 0x00, | ||
| 64 | 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, | ||
| 65 | 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x87, 0x00, 0x00, 0x00, | ||
| 66 | 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x4e, 0x56, | ||
| 67 | 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, | ||
| 68 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 69 | 0x00, 0x54, 0x3f, 0x4e, 0x00, 0xe4, 0xb5, 0x11, 0x83, 0x07, 0xe1, 0x16, | ||
| 70 | 0xbd, 0xe2, 0x4a, 0x65, 0xc1, 0xb1, 0xf2, 0x03, 0x91, 0x7d, 0xa1, 0x48, | ||
| 71 | 0xf1, 0x9b, 0x1f, 0xe7, 0xa0, 0xe0, 0x46, 0xa5, 0xcc, 0x4d, 0x44, 0x53, | ||
| 72 | 0x5a, 0x08, 0x00, 0xc0, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, | ||
| 73 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 74 | 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6c, 0x00, | ||
| 75 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, | ||
| 76 | 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x45, | ||
| 77 | 0x4e, 0x44, 0x54, 0x29, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x15, | ||
| 78 | 0x00, 0x02, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, | ||
| 79 | 0x00, 0x80, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x56, 0x41, | ||
| 80 | 0x54, 0x59, 0x04, 0x00, 0x02, 0x00, 0x04, 0x06, 0x45, 0x4e, 0x44, 0x54, | ||
| 81 | 0x35, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x20, 0x00, 0x03, 0x00, | ||
| 82 | 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, | ||
| 83 | 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, | ||
| 84 | 0x6f, 0x72, 0x64, 0x00, 0x02, 0x80, 0x56, 0x41, 0x54, 0x59, 0x05, 0x00, | ||
| 85 | 0x03, 0x00, 0x04, 0x06, 0x04, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 86 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 87 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 88 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 89 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 90 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 91 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 92 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 93 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x84, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 94 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 95 | 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, 0xc8, 0x14, 0x00, 0x00, | ||
| 96 | 0x00, 0x21, 0x0c, 0x00, 0x00, 0x65, 0x03, 0x00, 0x00, 0x0b, 0x02, 0x21, | ||
| 97 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 98 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 99 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 100 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 101 | 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 102 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, 0x90, 0x91, 0x22, 0xc4, | ||
| 103 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, | ||
| 104 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 105 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, | ||
| 106 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 107 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 108 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 109 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 110 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 111 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 112 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 113 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 114 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 115 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 116 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 117 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 118 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 119 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 120 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 121 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 122 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 123 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 124 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 125 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 126 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 127 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 128 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 129 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 130 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 131 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 132 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 133 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 134 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 135 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 136 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 137 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 138 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x78, | ||
| 139 | 0xc2, 0x00, 0x2c, 0x40, 0x15, 0xa4, 0x01, 0x28, 0x0c, 0xe1, 0x90, 0x0e, | ||
| 140 | 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, | ||
| 141 | 0x6d, 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe1, 0xc0, 0x0e, 0xe9, 0x10, 0x0e, | ||
| 142 | 0xf3, 0x00, 0x6c, 0xf0, 0x06, 0x02, 0x58, 0x80, 0x2a, 0x48, 0x03, 0x50, | ||
| 143 | 0x18, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, | ||
| 144 | 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, 0x1d, 0xde, 0xa1, 0x0d, 0xc2, 0x81, | ||
| 145 | 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 146 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 147 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 148 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 149 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 150 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x60, 0x87, 0x10, 0xc0, | ||
| 151 | 0x30, 0x82, 0x00, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 152 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 153 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 154 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x52, 0x88, | ||
| 155 | 0x11, 0x8c, 0xa1, 0x33, 0x10, 0x30, 0x47, 0x00, 0x06, 0x29, 0xa0, 0xe6, | ||
| 156 | 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00, | ||
| 157 | 0x00, 0x13, 0xbe, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 158 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 159 | 0x79, 0x88, 0x83, 0x39, 0x70, 0x03, 0x38, 0x70, 0x03, 0x38, 0x68, 0x83, | ||
| 160 | 0x79, 0x48, 0x87, 0x76, 0xa8, 0x07, 0x76, 0x08, 0x07, 0x7a, 0x78, 0x07, | ||
| 161 | 0x79, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, | ||
| 162 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, | ||
| 163 | 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, | ||
| 164 | 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, | ||
| 165 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, | ||
| 166 | 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, | ||
| 167 | 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 168 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 169 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, | ||
| 170 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 171 | 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 172 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 173 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 174 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, | ||
| 175 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 176 | 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 177 | 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, | ||
| 178 | 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, | ||
| 179 | 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 180 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, | ||
| 181 | 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, | ||
| 182 | 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 183 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, | ||
| 184 | 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, | ||
| 185 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, | ||
| 186 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 187 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 188 | 0x07, 0x72, 0xa0, 0x11, 0xc2, 0x90, 0x10, 0xdb, 0x95, 0x3f, 0xeb, 0x2c, | ||
| 189 | 0xc8, 0xf0, 0x57, 0x44, 0x34, 0x11, 0xd7, 0x90, 0x08, 0x80, 0x0e, 0x00, | ||
| 190 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0xd8, 0x20, | ||
| 191 | 0x50, 0xf4, 0x6c, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x0a, 0x00, 0x00, | ||
| 192 | 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 193 | 0x47, 0xc6, 0x04, 0x43, 0x52, 0x45, 0x50, 0x02, 0x85, 0x30, 0x02, 0x50, | ||
| 194 | 0x80, 0x01, 0x05, 0x52, 0x06, 0xc4, 0x46, 0x00, 0x68, 0x8d, 0x25, 0x48, | ||
| 195 | 0x02, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 196 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 197 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 198 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 199 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 200 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 201 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 202 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 203 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 204 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 205 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 206 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 207 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 208 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 209 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 210 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 211 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 212 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 213 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 214 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 215 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 216 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 217 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 218 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 219 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 220 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 221 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 222 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 223 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 224 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 225 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 226 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 227 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 228 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 229 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 230 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 231 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 232 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 233 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 234 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 235 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 236 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 237 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 238 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 239 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 240 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 241 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 242 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 243 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 244 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 245 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 246 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 247 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 248 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 249 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 250 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 251 | 0x00, 0x79, 0x20, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 252 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 253 | 0x3c, 0xec, 0x7c, 0x00, 0x00, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x01, | ||
| 254 | 0x13, 0x19, 0x0c, 0x12, 0x59, 0x85, 0x53, 0x24, 0x90, 0xe4, 0x19, 0xca, | ||
| 255 | 0x83, 0x44, 0x17, 0xa2, 0x24, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 256 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 257 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 258 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 259 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 260 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 261 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 262 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 263 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 264 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 265 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 266 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 267 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 268 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 269 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, | ||
| 270 | 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 271 | 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, 0x61, | ||
| 272 | 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, | ||
| 273 | 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, | ||
| 274 | 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x6f, 0x75, 0x74, | ||
| 275 | 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, | ||
| 276 | 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, | ||
| 277 | 0x29, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, | ||
| 278 | 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x66, 0x6c, 0x6f, 0x61, | ||
| 279 | 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x61, 0x69, | ||
| 280 | 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6e, 0x70, | ||
| 281 | 0x75, 0x74, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, | ||
| 282 | 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x67, 0x65, 0x6e, 0x65, | ||
| 283 | 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x61, 0x69, 0x72, 0x5f, | ||
| 284 | 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, | ||
| 285 | 0x5f, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x61, 0x69, 0x72, 0x2e, | ||
| 286 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, | ||
| 287 | 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, | ||
| 288 | 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, | ||
| 289 | 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, | ||
| 290 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, | ||
| 291 | 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x66, 0x6c, 0x6f, | ||
| 292 | 0x61, 0x74, 0x34, 0x78, 0x34, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, | ||
| 293 | 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, | ||
| 294 | 0x00, 0xc4, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0xa0, | ||
| 295 | 0x04, 0x23, 0x08, 0x4b, 0x32, 0x82, 0xa0, 0x08, 0x23, 0x08, 0xca, 0x30, | ||
| 296 | 0x82, 0xa0, 0x10, 0x23, 0x08, 0x08, 0x30, 0x82, 0xa0, 0x14, 0x23, 0x08, | ||
| 297 | 0x8a, 0x31, 0x82, 0xa0, 0x1c, 0x33, 0x0c, 0x5f, 0x00, 0x06, 0x33, 0x0c, | ||
| 298 | 0x61, 0x20, 0x88, 0xc1, 0x0c, 0xc1, 0x30, 0xc3, 0xf0, 0x7d, 0x63, 0x30, | ||
| 299 | 0x03, 0x41, 0x84, 0x41, 0x18, 0x8c, 0xc1, 0x0c, 0x41, 0x31, 0x43, 0x60, | ||
| 300 | 0xcc, 0x10, 0x1c, 0x33, 0x14, 0x48, 0xa2, 0x2c, 0xcc, 0x0c, 0x46, 0xe3, | ||
| 301 | 0x24, 0xca, 0xf2, 0xcc, 0x50, 0x40, 0x49, 0xb4, 0x48, 0x33, 0x0c, 0x70, | ||
| 302 | 0x10, 0x07, 0x72, 0x30, 0x83, 0x32, 0x06, 0x13, 0x35, 0x06, 0x61, 0x50, | ||
| 303 | 0x25, 0xd6, 0xc2, 0xcc, 0xa0, 0x84, 0xc1, 0x44, 0x85, 0x41, 0x18, 0x54, | ||
| 304 | 0x89, 0xb2, 0x3c, 0x33, 0x40, 0xdf, 0x85, 0x95, 0x01, 0xf5, 0x85, 0x41, | ||
| 305 | 0xa6, 0x95, 0xc1, 0x66, 0x06, 0x09, 0xb7, 0x74, 0x33, 0x40, 0x67, 0x70, | ||
| 306 | 0x61, 0x65, 0x40, 0x9d, 0x41, 0x18, 0x64, 0x5a, 0x19, 0x6c, 0x66, 0x90, | ||
| 307 | 0x70, 0x8b, 0x37, 0x03, 0x41, 0x07, 0x75, 0x60, 0x07, 0x77, 0x30, 0xc3, | ||
| 308 | 0x40, 0x06, 0x73, 0x80, 0x07, 0xb5, 0x01, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, | ||
| 309 | 0x71, 0x1c, 0x1a, 0xb8, 0x81, 0x85, 0x06, 0x7a, 0x60, 0x59, 0x96, 0x1b, | ||
| 310 | 0xd0, 0x81, 0x1b, 0xd0, 0x81, 0x2f, 0xf8, 0x02, 0x4a, 0xd0, 0x04, 0x28, | ||
| 311 | 0xc8, 0x48, 0x60, 0x82, 0x2e, 0x62, 0x63, 0xb3, 0x6b, 0x73, 0x69, 0x7b, | ||
| 312 | 0x23, 0xab, 0x63, 0x2b, 0x73, 0x31, 0x63, 0x0b, 0x3b, 0x9b, 0x1b, 0x45, | ||
| 313 | 0x38, 0x03, 0x34, 0x38, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, | ||
| 314 | 0xcc, 0x8d, 0x6e, 0x94, 0x20, 0x0d, 0x6e, 0x09, 0x4b, 0x93, 0x73, 0xb1, | ||
| 315 | 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0x50, 0x83, 0xa3, 0xc2, | ||
| 316 | 0xd2, 0xe4, 0x5c, 0xd8, 0xc2, 0xdc, 0xce, 0xea, 0xc2, 0xce, 0xca, 0xbe, | ||
| 317 | 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x46, 0x09, 0xd6, 0xe0, 0xa6, | ||
| 318 | 0xb0, 0x34, 0x39, 0x97, 0xb1, 0xb7, 0x36, 0xb8, 0x34, 0xb6, 0xb2, 0xaf, | ||
| 319 | 0x37, 0x38, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x51, 0x06, 0x36, 0x68, 0x03, | ||
| 320 | 0x37, 0x38, 0x25, 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, 0x8e, 0xae, 0x0c, | ||
| 321 | 0x6f, 0x94, 0x00, 0x0f, 0x00, 0xa9, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, | ||
| 322 | 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, | ||
| 323 | 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, | ||
| 324 | 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, | ||
| 325 | 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, | ||
| 326 | 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, | ||
| 327 | 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, | ||
| 328 | 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 329 | 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, | ||
| 330 | 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, | ||
| 331 | 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, | ||
| 332 | 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, | ||
| 333 | 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, | ||
| 334 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 335 | 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, | ||
| 336 | 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, | ||
| 337 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, | ||
| 338 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xc4, 0x4a, 0xa0, | ||
| 339 | 0x0c, 0x8a, 0x80, 0xdc, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, | ||
| 340 | 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x81, 0x31, 0x02, | ||
| 341 | 0x10, 0x04, 0x41, 0xfc, 0xa3, 0x30, 0x03, 0x30, 0x03, 0x40, 0x62, 0x06, | ||
| 342 | 0x80, 0xc6, 0x0c, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x2c, 0x00, 0x00, | ||
| 343 | 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0x08, 0x3d, 0x00, 0x00, 0x00, | ||
| 344 | 0x00, 0xcf, 0x23, 0x06, 0x96, 0x05, 0x00, 0x00, 0x00, 0x6f, 0x6d, 0x6e, | ||
| 345 | 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, | ||
| 346 | 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, | ||
| 347 | 0x42, 0x41, 0x41, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 348 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, | ||
| 349 | 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, | ||
| 350 | 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, | ||
| 351 | 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x61, | ||
| 352 | 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, | ||
| 353 | 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x32, 0x29, 0x13, 0x04, 0x06, | ||
| 354 | 0x59, 0x21, 0x80, 0x02, 0x1f, 0xac, 0x18, 0x42, 0x01, 0x14, 0xfa, 0x60, | ||
| 355 | 0xc5, 0x20, 0x0a, 0xa0, 0xe0, 0x07, 0x1b, 0x82, 0x3d, 0xd8, 0x30, 0xe8, | ||
| 356 | 0xc1, 0x28, 0xfc, 0xc1, 0x86, 0x81, 0x14, 0x48, 0xe1, 0x0f, 0x36, 0x04, | ||
| 357 | 0xa1, 0xb0, 0x21, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x10, 0x8d, | ||
| 358 | 0x64, 0x49, 0x14, 0x84, 0xb2, 0x0b, 0x01, 0x51, 0x18, 0x45, 0x41, 0x28, | ||
| 359 | 0x83, 0x0c, 0xc3, 0xd1, 0x98, 0x10, 0x88, 0xff, 0x2e, 0x04, 0x85, 0x71, | ||
| 360 | 0x12, 0x05, 0xa1, 0x0c, 0x32, 0x1c, 0x0c, 0x64, 0x42, 0x20, 0xfe, 0x16, | ||
| 361 | 0x14, 0xe0, 0xbf, 0x0b, 0x91, 0x75, 0x61, 0x50, 0x51, 0x10, 0xca, 0x20, | ||
| 362 | 0x03, 0x13, 0x51, 0x26, 0x04, 0xe2, 0x6f, 0x45, 0x00, 0xfe, 0xbb, 0x10, | ||
| 363 | 0x9e, 0x18, 0x98, 0xc1, 0x46, 0x41, 0x28, 0x83, 0x0c, 0x91, 0x85, 0x99, | ||
| 364 | 0x10, 0x88, 0xbf, 0x15, 0x01, 0xf8, 0xef, 0x42, 0x88, 0xc1, 0x19, 0xac, | ||
| 365 | 0x41, 0x18, 0x50, 0x10, 0xca, 0x20, 0x43, 0xa0, 0x81, 0x81, 0x05, 0x95, | ||
| 366 | 0xf8, 0x0f, 0x32, 0x0c, 0x5d, 0x18, 0x58, 0x30, 0x89, 0xbf, 0x0d, 0x01, | ||
| 367 | 0xf8, 0x0f, 0x32, 0x18, 0x60, 0x30, 0x06, 0x16, 0x44, 0xe2, 0x6f, 0x43, | ||
| 368 | 0x00, 0xfe, 0x83, 0x0c, 0xc9, 0x18, 0x94, 0x81, 0x05, 0x8f, 0xf8, 0xdb, | ||
| 369 | 0x10, 0x80, 0xff, 0x2e, 0xc4, 0x1b, 0xd0, 0x01, 0x1e, 0xb4, 0x01, 0x05, | ||
| 370 | 0xa1, 0x0c, 0x32, 0x04, 0x67, 0xd0, 0x06, 0x16, 0x88, 0x81, 0xf8, 0x0f, | ||
| 371 | 0x32, 0x0c, 0x6a, 0xe0, 0x06, 0x16, 0x80, 0x81, 0xf8, 0x0f, 0x32, 0x14, | ||
| 372 | 0x6c, 0xf0, 0x06, 0x16, 0x74, 0xe2, 0x3f, 0xc8, 0x70, 0xb8, 0x01, 0x1c, | ||
| 373 | 0x58, 0xa0, 0x89, 0xff, 0x20, 0x03, 0x1f, 0xb4, 0x41, 0x1d, 0x58, 0x16, | ||
| 374 | 0x88, 0xff, 0x20, 0x83, 0x1f, 0xbc, 0x81, 0x1d, 0x98, 0x13, 0x88, 0xbf, | ||
| 375 | 0x25, 0x03, 0xf8, 0x5b, 0xc0, 0x80, 0xbf, 0x05, 0x09, 0xf8, 0x5b, 0x80, | ||
| 376 | 0x80, 0xbf, 0x05, 0x05, 0xf8, 0xcf, 0x36, 0xdc, 0x41, 0x00, 0xcc, 0x36, | ||
| 377 | 0x04, 0xa5, 0x10, 0xcc, 0x36, 0x04, 0x7c, 0x20, 0x64, 0x10, 0x10, 0x03, | ||
| 378 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, 0x20, 0x85, 0xa3, 0x14, | ||
| 379 | 0x10, 0x53, 0xd8, 0x72, 0x0c, 0x01, 0x29, 0x1c, 0xa6, 0x80, 0x94, 0xc2, | ||
| 380 | 0x96, 0xe3, 0x08, 0x48, 0xe1, 0x30, 0x05, 0xa4, 0x14, 0xb6, 0x1c, 0x4c, | ||
| 381 | 0x40, 0x0a, 0x87, 0x29, 0x20, 0xa5, 0xb0, 0xe5, 0x88, 0x02, 0x52, 0x38, | ||
| 382 | 0x4c, 0x01, 0x29, 0x85, 0x2d, 0x87, 0x15, 0x90, 0xc2, 0x51, 0x0a, 0x88, | ||
| 383 | 0x29, 0x6c, 0x39, 0xc6, 0x20, 0x20, 0x85, 0xa3, 0x14, 0x10, 0x53, 0x00, | ||
| 384 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 385 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xd9, 0x05, 0x00, 0x00, 0x00, | ||
| 386 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 387 | 0x00, 0x12, 0x03, 0x94, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 388 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, | ||
| 389 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 390 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, | ||
| 391 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 392 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 393 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 394 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 395 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 396 | 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, | ||
| 397 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 398 | 0x00, 0x12, 0x03, 0x94, 0x78, 0x00, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, | ||
| 399 | 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, | ||
| 400 | 0x78, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, | ||
| 401 | 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, 0x69, 0x6f, | ||
| 402 | 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, | ||
| 403 | 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 404 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 405 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x90, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 406 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 407 | 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, 0xc8, 0x14, 0x00, 0x00, | ||
| 408 | 0x00, 0x21, 0x0c, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x0b, 0x02, 0x21, | ||
| 409 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 410 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 411 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 412 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 413 | 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 414 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, 0x90, 0x91, 0x22, 0xc4, | ||
| 415 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, | ||
| 416 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 417 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, | ||
| 418 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 419 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 420 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 421 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 422 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 423 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 424 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 425 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 426 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 427 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 428 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 429 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 430 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 431 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 432 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 433 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 434 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 435 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 436 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 437 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 438 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 439 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 440 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 441 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 442 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 443 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 444 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 445 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 446 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 447 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 448 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 449 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 450 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x78, | ||
| 451 | 0x02, 0x01, 0x2c, 0x40, 0x15, 0xa4, 0x01, 0x28, 0x0c, 0xe1, 0x90, 0x0e, | ||
| 452 | 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, | ||
| 453 | 0x6d, 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe1, 0xc0, 0x0e, 0xe9, 0x10, 0x0e, | ||
| 454 | 0xf3, 0x00, 0x6c, 0xf0, 0x86, 0x02, 0x58, 0x80, 0x2a, 0x48, 0x03, 0x50, | ||
| 455 | 0x18, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, | ||
| 456 | 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, 0x1d, 0xde, 0xa1, 0x0d, 0xc2, 0x81, | ||
| 457 | 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 458 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 459 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 460 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 461 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 462 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 463 | 0x76, 0x08, 0x41, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 464 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 465 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 466 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x62, 0x0c, | ||
| 467 | 0x11, 0x84, 0x31, 0x74, 0x06, 0x02, 0xe6, 0x08, 0xc0, 0x20, 0x05, 0xd4, | ||
| 468 | 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x04, 0xc2, 0x30, 0x02, 0xa1, 0x8c, 0x00, | ||
| 469 | 0x00, 0x13, 0xbe, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 470 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 471 | 0x79, 0x88, 0x83, 0x39, 0x70, 0x03, 0x38, 0x70, 0x03, 0x38, 0x68, 0x83, | ||
| 472 | 0x79, 0x48, 0x87, 0x76, 0xa8, 0x07, 0x76, 0x08, 0x07, 0x7a, 0x78, 0x07, | ||
| 473 | 0x79, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, | ||
| 474 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, | ||
| 475 | 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, | ||
| 476 | 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, | ||
| 477 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, | ||
| 478 | 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, | ||
| 479 | 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 480 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 481 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, | ||
| 482 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 483 | 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 484 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 485 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 486 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, | ||
| 487 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 488 | 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 489 | 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, | ||
| 490 | 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, | ||
| 491 | 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 492 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, | ||
| 493 | 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, | ||
| 494 | 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 495 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, | ||
| 496 | 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, | ||
| 497 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, | ||
| 498 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 499 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 500 | 0x07, 0x72, 0xa0, 0x11, 0xc2, 0x90, 0x0f, 0xdb, 0x95, 0x3f, 0xe7, 0x3c, | ||
| 501 | 0xd8, 0x5f, 0x11, 0xd1, 0x44, 0x5c, 0x43, 0x22, 0xe0, 0x39, 0x00, 0x00, | ||
| 502 | 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x62, 0x83, 0x40, | ||
| 503 | 0x51, 0xb5, 0x01, 0x00, 0x80, 0x2c, 0x10, 0x00, 0x00, 0x0a, 0x00, 0x00, | ||
| 504 | 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 505 | 0x47, 0xc6, 0x04, 0x43, 0x52, 0x45, 0x50, 0x02, 0x85, 0x30, 0x02, 0x50, | ||
| 506 | 0x06, 0x05, 0x18, 0x50, 0x20, 0xc4, 0x46, 0x00, 0x68, 0x8d, 0x25, 0x48, | ||
| 507 | 0x02, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 508 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 509 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 510 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 511 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 512 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 513 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 514 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 515 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 516 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 517 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 518 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 519 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 520 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 521 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 522 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 523 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 524 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 525 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 526 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 527 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 528 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 529 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 530 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 531 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 532 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 533 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 534 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 535 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 536 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 537 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 538 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 539 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 540 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 541 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 542 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 543 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 544 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 545 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 546 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 547 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 548 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 549 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 550 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 551 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 552 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 553 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 554 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 555 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 556 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 557 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 558 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 559 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 560 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 561 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 562 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 563 | 0x00, 0x79, 0x20, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 564 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 565 | 0x3a, 0x8c, 0x7d, 0x00, 0x00, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x01, | ||
| 566 | 0x13, 0x19, 0x0c, 0x12, 0x59, 0x45, 0x66, 0x20, 0x90, 0xe4, 0x29, 0x0f, | ||
| 567 | 0x12, 0x5d, 0x88, 0x92, 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 568 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 569 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 570 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 571 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 572 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 573 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 574 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 575 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 576 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 577 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 578 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 579 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 580 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 581 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, | ||
| 582 | 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 583 | 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, 0x61, | ||
| 584 | 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, | ||
| 585 | 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, | ||
| 586 | 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x6f, 0x75, 0x74, | ||
| 587 | 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, | ||
| 588 | 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, | ||
| 589 | 0x29, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, | ||
| 590 | 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, | ||
| 591 | 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 592 | 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x61, 0x69, 0x72, | ||
| 593 | 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6e, 0x70, 0x75, | ||
| 594 | 0x74, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, | ||
| 595 | 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 596 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x61, 0x69, 0x72, 0x5f, 0x70, | ||
| 597 | 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x5f, | ||
| 598 | 0x29, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, | ||
| 599 | 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, | ||
| 600 | 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, | ||
| 601 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, | ||
| 602 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 603 | 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, | ||
| 604 | 0x7a, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x70, 0x72, | ||
| 605 | 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, | ||
| 606 | 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x04, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 607 | 0x00, 0x30, 0x82, 0xa0, 0x04, 0x23, 0x08, 0x4b, 0x32, 0x82, 0xa0, 0x08, | ||
| 608 | 0x23, 0x08, 0xca, 0x30, 0x82, 0xa0, 0x10, 0x23, 0x08, 0x08, 0x30, 0x82, | ||
| 609 | 0xa0, 0x14, 0x23, 0x08, 0x8a, 0x31, 0x82, 0xa0, 0x1c, 0x33, 0x0c, 0x5e, | ||
| 610 | 0xf0, 0xcd, 0x30, 0x80, 0x81, 0x10, 0x06, 0x33, 0x04, 0xc3, 0x0c, 0x83, | ||
| 611 | 0xe7, 0x89, 0xc1, 0x0c, 0x04, 0x01, 0x06, 0x60, 0x20, 0x06, 0x33, 0x04, | ||
| 612 | 0xc5, 0x0c, 0x81, 0x31, 0x43, 0x70, 0xcc, 0x50, 0x20, 0x89, 0xb2, 0x30, | ||
| 613 | 0x33, 0x18, 0x8d, 0x93, 0x28, 0xcb, 0x33, 0x83, 0xd1, 0x40, 0x49, 0xb4, | ||
| 614 | 0x48, 0x33, 0x0c, 0x6f, 0x00, 0x07, 0x71, 0x30, 0x83, 0x22, 0x06, 0x13, | ||
| 615 | 0x25, 0x06, 0x60, 0x50, 0x25, 0xd1, 0xc2, 0xcc, 0xa0, 0x80, 0xc1, 0x44, | ||
| 616 | 0x81, 0x01, 0x18, 0x54, 0x89, 0xb2, 0x3c, 0x33, 0x28, 0xde, 0x44, 0x79, | ||
| 617 | 0x60, 0x50, 0x25, 0xd1, 0x22, 0xcd, 0x00, 0x91, 0x81, 0x75, 0x95, 0x01, | ||
| 618 | 0xe5, 0x81, 0x01, 0x96, 0x95, 0x81, 0x66, 0x06, 0xc9, 0xb6, 0x70, 0x33, | ||
| 619 | 0x40, 0x61, 0x60, 0x5d, 0x65, 0x40, 0x91, 0x01, 0x18, 0x60, 0x59, 0x19, | ||
| 620 | 0x68, 0x66, 0x90, 0x6c, 0x4b, 0x37, 0x43, 0x31, 0x07, 0x74, 0x50, 0x07, | ||
| 621 | 0x76, 0x70, 0x07, 0x33, 0x0c, 0x63, 0x20, 0x07, 0x78, 0x50, 0x1c, 0xc0, | ||
| 622 | 0x71, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x89, 0x81, 0x1b, 0x58, 0x68, 0xa0, | ||
| 623 | 0x07, 0x96, 0x65, 0xb9, 0x01, 0x1d, 0xd0, 0x01, 0x1d, 0xf8, 0x82, 0x2f, | ||
| 624 | 0xc8, 0x82, 0x4b, 0xd0, 0x04, 0x2b, 0xc8, 0x48, 0x60, 0x82, 0x2e, 0x62, | ||
| 625 | 0x63, 0xb3, 0x6b, 0x73, 0x69, 0x7b, 0x23, 0xab, 0x63, 0x2b, 0x73, 0x31, | ||
| 626 | 0x63, 0x0b, 0x3b, 0x9b, 0x1b, 0x45, 0x30, 0x83, 0x33, 0x38, 0x85, 0x8d, | ||
| 627 | 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x94, 0x00, 0x0d, | ||
| 628 | 0x6e, 0x09, 0x4b, 0x93, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, | ||
| 629 | 0x1b, 0x25, 0x48, 0x83, 0xa3, 0xc2, 0xd2, 0xe4, 0x5c, 0xd8, 0xc2, 0xdc, | ||
| 630 | 0xce, 0xea, 0xc2, 0xce, 0xca, 0xbe, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, | ||
| 631 | 0xdc, 0x46, 0x09, 0xd4, 0xe0, 0xa6, 0xb0, 0x34, 0x39, 0x97, 0xb1, 0xb7, | ||
| 632 | 0x36, 0xb8, 0x34, 0xb6, 0xb2, 0xaf, 0x37, 0x38, 0xba, 0xb4, 0x37, 0xb7, | ||
| 633 | 0xb9, 0x51, 0x86, 0x35, 0x60, 0x83, 0x36, 0x38, 0x25, 0x2c, 0x4d, 0xce, | ||
| 634 | 0xc5, 0xae, 0x4c, 0x8e, 0xae, 0x0c, 0x6f, 0x94, 0x00, 0x0f, 0x00, 0x00, | ||
| 635 | 0x00, 0xa9, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, | ||
| 636 | 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, | ||
| 637 | 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, | ||
| 638 | 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, | ||
| 639 | 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, | ||
| 640 | 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, | ||
| 641 | 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, | ||
| 642 | 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, | ||
| 643 | 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, | ||
| 644 | 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, | ||
| 645 | 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, | ||
| 646 | 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, | ||
| 647 | 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, | ||
| 648 | 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, | ||
| 649 | 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, | ||
| 650 | 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 651 | 0x00, 0x8a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 652 | 0x00, 0x09, 0x00, 0x00, 0x00, 0xc4, 0x4a, 0xa0, 0x0c, 0x8a, 0x80, 0xdc, | ||
| 653 | 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, | ||
| 654 | 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x85, 0x19, 0x80, 0x19, 0x00, 0x12, 0x33, | ||
| 655 | 0x00, 0x34, 0x66, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x2c, 0x00, 0x00, | ||
| 656 | 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0xc8, 0x3c, 0x00, 0x00, 0x00, | ||
| 657 | 0x00, 0xcf, 0x13, 0x06, 0x96, 0x05, 0x00, 0x00, 0x00, 0x6f, 0x6d, 0x6e, | ||
| 658 | 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, | ||
| 659 | 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, | ||
| 660 | 0x42, 0x41, 0x41, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 661 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, | ||
| 662 | 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x29, | ||
| 663 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 664 | 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x34, 0x29, 0x61, 0x69, | ||
| 665 | 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, | ||
| 666 | 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x00, 0x13, 0x04, 0x06, | ||
| 667 | 0x59, 0x21, 0x80, 0x02, 0x1f, 0xac, 0x18, 0x42, 0x01, 0x14, 0xfa, 0x60, | ||
| 668 | 0xc5, 0x20, 0x0a, 0xa0, 0xe0, 0x07, 0x1b, 0x82, 0x3d, 0xd8, 0x30, 0xe8, | ||
| 669 | 0xc1, 0x28, 0xfc, 0xc1, 0x86, 0x81, 0x14, 0x48, 0xe1, 0x0f, 0x36, 0x04, | ||
| 670 | 0xa1, 0xb0, 0x21, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x10, 0x8c, | ||
| 671 | 0x64, 0x49, 0x14, 0x84, 0xb2, 0x0b, 0xf1, 0x50, 0x18, 0x45, 0x41, 0x28, | ||
| 672 | 0x83, 0x0c, 0xc3, 0xc1, 0x98, 0x10, 0x88, 0xff, 0x2e, 0xc4, 0x84, 0x71, | ||
| 673 | 0x11, 0x05, 0xa1, 0x0c, 0x32, 0x1c, 0xcc, 0x63, 0x42, 0x20, 0xfe, 0x16, | ||
| 674 | 0x14, 0xe0, 0xbf, 0x0b, 0x81, 0x75, 0x61, 0x40, 0x51, 0x10, 0xca, 0x20, | ||
| 675 | 0x03, 0x13, 0x4d, 0x26, 0x04, 0xe2, 0x6f, 0x45, 0x00, 0xfe, 0xbb, 0x10, | ||
| 676 | 0x9d, 0x18, 0x98, 0x81, 0x46, 0x41, 0x28, 0x83, 0x0c, 0x91, 0x75, 0x99, | ||
| 677 | 0x10, 0x88, 0xbf, 0x15, 0x01, 0xf8, 0xef, 0x42, 0x84, 0xc1, 0x19, 0xac, | ||
| 678 | 0x01, 0x18, 0x50, 0x10, 0xca, 0x20, 0x43, 0xa0, 0x7d, 0x16, 0x54, 0xe2, | ||
| 679 | 0x3f, 0xc8, 0x30, 0x74, 0x60, 0x60, 0xc1, 0x24, 0xfe, 0x36, 0x04, 0xe0, | ||
| 680 | 0x3f, 0xc8, 0x60, 0x80, 0x81, 0x18, 0x58, 0x10, 0x89, 0xbf, 0x0d, 0x01, | ||
| 681 | 0xf8, 0x0f, 0x32, 0x24, 0x63, 0x40, 0x06, 0x16, 0x3c, 0xe2, 0x6f, 0x43, | ||
| 682 | 0x00, 0xfe, 0xbb, 0x10, 0x6e, 0x40, 0x07, 0x78, 0xc0, 0x06, 0x14, 0x84, | ||
| 683 | 0x32, 0xc8, 0x10, 0x9c, 0x01, 0x1b, 0x58, 0x20, 0x06, 0xe2, 0x3f, 0xc8, | ||
| 684 | 0x30, 0xa8, 0x41, 0x1b, 0x58, 0x00, 0x06, 0xe2, 0x3f, 0xc8, 0x50, 0xb0, | ||
| 685 | 0x81, 0x1b, 0x58, 0xd0, 0x89, 0xff, 0x20, 0xc3, 0xe1, 0x06, 0x6f, 0x60, | ||
| 686 | 0x81, 0x26, 0xfe, 0x83, 0x0c, 0x7c, 0xe0, 0x06, 0x74, 0x60, 0x59, 0x20, | ||
| 687 | 0xfe, 0x83, 0x0c, 0x7e, 0x00, 0x07, 0x75, 0x60, 0x4e, 0x20, 0xfe, 0x96, | ||
| 688 | 0x0c, 0xe0, 0x6f, 0x01, 0x03, 0xfe, 0x16, 0x24, 0xe0, 0x6f, 0x01, 0x02, | ||
| 689 | 0xfe, 0x16, 0x14, 0xe0, 0x3f, 0xdb, 0x60, 0x07, 0x01, 0x30, 0xdb, 0x10, | ||
| 690 | 0x94, 0x42, 0x30, 0xdb, 0x10, 0x94, 0x82, 0x90, 0x41, 0x40, 0x0c, 0x00, | ||
| 691 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, 0x20, 0x85, 0xa3, 0x14, | ||
| 692 | 0x10, 0x53, 0xd8, 0x72, 0x0c, 0x01, 0x29, 0x1c, 0xa6, 0x80, 0x94, 0xc2, | ||
| 693 | 0x96, 0xe3, 0x08, 0x48, 0xe1, 0x30, 0x05, 0xa4, 0x14, 0xb6, 0x1c, 0x4c, | ||
| 694 | 0x40, 0x0a, 0x87, 0x29, 0x20, 0xa5, 0xb0, 0xe5, 0x88, 0x02, 0x52, 0x38, | ||
| 695 | 0x4c, 0x01, 0x29, 0x85, 0x2d, 0x87, 0x15, 0x90, 0xc2, 0x51, 0x0a, 0x88, | ||
| 696 | 0x29, 0x6c, 0x39, 0xc6, 0x20, 0x20, 0x85, 0xa3, 0x14, 0x10, 0x53, 0x00, | ||
| 697 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 698 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xde, 0x05, 0x00, 0x00, 0x00, | ||
| 699 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 700 | 0x00, 0x12, 0x03, 0x94, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 701 | 0x00, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, | ||
| 702 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 703 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, | ||
| 704 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 705 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, | ||
| 706 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 707 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 708 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 709 | 0x00, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, | ||
| 710 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 711 | 0x00, 0x12, 0x03, 0x94, 0x77, 0x00, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, | ||
| 712 | 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, | ||
| 713 | 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, 0x72, | ||
| 714 | 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, 0x69, 0x6f, 0x73, | ||
| 715 | 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, | ||
| 716 | 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 717 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 718 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf4, 0x0d, 0x00, | ||
| 719 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, | ||
| 720 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, | ||
| 721 | 0xc8, 0x14, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x40, 0x03, 0x00, | ||
| 722 | 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 723 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 724 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 725 | 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, | ||
| 726 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, | ||
| 727 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, | ||
| 728 | 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 729 | 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x71, 0x00, 0x00, | ||
| 730 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0x03, | ||
| 731 | 0x40, 0x02, 0x28, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, | ||
| 732 | 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 733 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 734 | 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, | ||
| 735 | 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, | ||
| 736 | 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, | ||
| 737 | 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 738 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 739 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 740 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 741 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, | ||
| 742 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, | ||
| 743 | 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, | ||
| 744 | 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, | ||
| 745 | 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 746 | 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, | ||
| 747 | 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, | ||
| 748 | 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, | ||
| 749 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, | ||
| 750 | 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 751 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 752 | 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, | ||
| 753 | 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, | ||
| 754 | 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, | ||
| 755 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 756 | 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, | ||
| 757 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 758 | 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, | ||
| 759 | 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 760 | 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 761 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, | ||
| 762 | 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, | ||
| 763 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 764 | 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0xe0, 0x09, 0x03, 0xb0, 0x00, 0x55, 0x90, | ||
| 765 | 0x06, 0x60, 0x30, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, | ||
| 766 | 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 767 | 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0x00, 0x49, 0x18, 0x00, | ||
| 768 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, | ||
| 769 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, | ||
| 770 | 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, | ||
| 771 | 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, | ||
| 772 | 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x67, 0x49, 0x53, 0x44, | ||
| 773 | 0x09, 0x93, 0xcf, 0x1e, 0xc0, 0x40, 0x44, 0x9c, 0xd3, 0x48, 0x13, 0xd0, | ||
| 774 | 0x4c, 0x12, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, 0x11, 0x06, 0xa1, 0x10, | ||
| 775 | 0x21, 0x41, 0x54, 0x03, 0x01, 0x73, 0x04, 0x60, 0x90, 0x02, 0x38, 0x47, | ||
| 776 | 0x00, 0x0a, 0x83, 0x08, 0x80, 0x30, 0x8c, 0x30, 0x00, 0xc3, 0x08, 0x04, | ||
| 777 | 0x32, 0x02, 0x00, 0x00, 0x00, 0x13, 0xbe, 0x70, 0x48, 0x07, 0x79, 0xb0, | ||
| 778 | 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, | ||
| 779 | 0x83, 0x74, 0x78, 0x87, 0x79, 0x88, 0x83, 0x39, 0x70, 0x03, 0x38, 0x70, | ||
| 780 | 0x03, 0x38, 0x68, 0x83, 0x79, 0x48, 0x87, 0x76, 0xa8, 0x07, 0x76, 0x08, | ||
| 781 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, | ||
| 782 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, | ||
| 783 | 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, | ||
| 784 | 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, | ||
| 785 | 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, | ||
| 786 | 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 787 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, | ||
| 788 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, | ||
| 789 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 790 | 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, | ||
| 791 | 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, | ||
| 792 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, | ||
| 793 | 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, | ||
| 794 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 795 | 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, | ||
| 796 | 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 797 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, | ||
| 798 | 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, | ||
| 799 | 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, | ||
| 800 | 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, | ||
| 801 | 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, | ||
| 802 | 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, | ||
| 803 | 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, | ||
| 804 | 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, | ||
| 805 | 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, | ||
| 806 | 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, | ||
| 807 | 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, | ||
| 808 | 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x11, 0xc2, 0x90, 0x12, 0xdb, | ||
| 809 | 0x95, 0x3f, 0xeb, 0x2c, 0xc8, 0xf0, 0x17, 0x11, 0x60, 0x30, 0x44, 0x33, | ||
| 810 | 0x0d, 0x89, 0x00, 0xa9, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, | ||
| 811 | 0x00, 0x00, 0x00, 0x89, 0x0d, 0x02, 0x45, 0x85, 0x06, 0x00, 0x00, 0xb2, | ||
| 812 | 0x40, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, | ||
| 813 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xc2, 0x22, 0x28, 0x81, | ||
| 814 | 0x42, 0x18, 0x01, 0x28, 0xa0, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, | ||
| 815 | 0x29, 0x1c, 0xd2, 0x11, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x90, 0x42, | ||
| 816 | 0x29, 0x98, 0xc2, 0xa1, 0x1c, 0x4b, 0x90, 0x04, 0x00, 0xb1, 0x18, 0x00, | ||
| 817 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 818 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 819 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 820 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 821 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 822 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 823 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 824 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 825 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 826 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 827 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 828 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 829 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 830 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 831 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 832 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 833 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 834 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 835 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 836 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 837 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 838 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 839 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 840 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 841 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 842 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 843 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 844 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 845 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 846 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 847 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 848 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 849 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 850 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 851 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 852 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 853 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 854 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 855 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 856 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 857 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 858 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 859 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 860 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 861 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 862 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 863 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 864 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 865 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 866 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 867 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 868 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 869 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 870 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 871 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 872 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0xf6, 0x00, 0x00, | ||
| 873 | 0x00, 0x32, 0x9a, 0x08, 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, | ||
| 874 | 0x11, 0x32, 0x64, 0xd4, 0xca, 0x00, 0x0c, 0x66, 0x09, 0x8b, 0x12, 0x07, | ||
| 875 | 0xc5, 0xc6, 0x91, 0x41, 0x14, 0x19, 0x52, 0xa6, 0x3c, 0x06, 0x83, 0x58, | ||
| 876 | 0x85, 0xf2, 0x48, 0x08, 0x55, 0x30, 0x8c, 0xb2, 0x38, 0xcf, 0xf3, 0x44, | ||
| 877 | 0xd7, 0x13, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 878 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 879 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 880 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 881 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 882 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 883 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 884 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 885 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 886 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 887 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 888 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 889 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 890 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 891 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, | ||
| 892 | 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x61, 0x69, 0x72, 0x2e, | ||
| 893 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, | ||
| 894 | 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 895 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, | ||
| 896 | 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, | ||
| 897 | 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x76, 0x32, 0x5f, | ||
| 898 | 0x66, 0x29, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, | ||
| 899 | 0x61, 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, | ||
| 900 | 0x69, 0x76, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x61, 0x69, 0x72, | ||
| 901 | 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x73, | ||
| 902 | 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, | ||
| 903 | 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, | ||
| 904 | 0x5f, 0x66, 0x29, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 905 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, | ||
| 906 | 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, | ||
| 907 | 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, | ||
| 908 | 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, | ||
| 909 | 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, | ||
| 910 | 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 911 | 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, | ||
| 912 | 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 913 | 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x63, 0x6f, | ||
| 914 | 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x74, 0x6f, 0x6e, | ||
| 915 | 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x74, | ||
| 916 | 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, | ||
| 917 | 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, | ||
| 918 | 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, 0x64, 0x72, 0x5f, 0x77, 0x68, 0x69, | ||
| 919 | 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x72, 0x2e, | ||
| 920 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, | ||
| 921 | 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, | ||
| 922 | 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, | ||
| 923 | 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, | ||
| 924 | 0x6e, 0x74, 0x73, 0x63, 0x00, 0x44, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 925 | 0x00, 0x30, 0x82, 0x80, 0x04, 0x23, 0x08, 0x09, 0x35, 0x82, 0x80, 0x08, | ||
| 926 | 0x23, 0x08, 0xc8, 0x30, 0x82, 0x80, 0x10, 0x23, 0x08, 0x06, 0x30, 0x82, | ||
| 927 | 0x80, 0x14, 0x23, 0x08, 0x88, 0x31, 0x82, 0x80, 0x1c, 0x23, 0x08, 0x08, | ||
| 928 | 0x32, 0x82, 0x80, 0x24, 0x23, 0x08, 0x88, 0x32, 0x82, 0x80, 0x2c, 0x33, | ||
| 929 | 0x0c, 0x66, 0x10, 0x9c, 0xc1, 0x0c, 0x03, 0x1a, 0x08, 0x69, 0x30, 0x43, | ||
| 930 | 0x30, 0xcc, 0x30, 0x98, 0x81, 0x19, 0xa8, 0xc1, 0x0c, 0x04, 0x81, 0x06, | ||
| 931 | 0x68, 0xa0, 0x06, 0x33, 0x04, 0xc5, 0x0c, 0x81, 0x31, 0x43, 0x70, 0xcc, | ||
| 932 | 0x50, 0x20, 0x6a, 0xa0, 0x06, 0x89, 0x32, 0x43, 0xb0, 0x07, 0x33, 0x24, | ||
| 933 | 0x6a, 0xb0, 0x30, 0x8d, 0x93, 0x3c, 0x50, 0x34, 0x43, 0x82, 0x06, 0x8b, | ||
| 934 | 0xd4, 0x38, 0x89, 0x02, 0x4d, 0x33, 0xa0, 0x81, 0x1a, 0xa4, 0x81, 0x1a, | ||
| 935 | 0x64, 0x5a, 0x1a, 0xa4, 0x81, 0x1a, 0x64, 0x5b, 0x1b, 0xa4, 0x81, 0x1a, | ||
| 936 | 0x64, 0x9c, 0x1b, 0xa4, 0x81, 0x1a, 0x64, 0xdd, 0x1b, 0xa4, 0x81, 0x1a, | ||
| 937 | 0x64, 0x1e, 0x1c, 0xa4, 0x81, 0x1a, 0x64, 0x5f, 0x1c, 0xa4, 0x81, 0x1a, | ||
| 938 | 0x64, 0x60, 0x20, 0x07, 0x69, 0xa0, 0x06, 0x59, 0x18, 0xcc, 0x20, 0x99, | ||
| 939 | 0x01, 0x55, 0xb1, 0x81, 0xa5, 0x06, 0x68, 0x70, 0x61, 0x7f, 0x20, 0x06, | ||
| 940 | 0x6c, 0x30, 0x06, 0x69, 0x90, 0x90, 0x01, 0x54, 0x06, 0x33, 0x0c, 0x7d, | ||
| 941 | 0xe0, 0x07, 0xa0, 0x30, 0xc3, 0xb0, 0x06, 0x7c, 0x10, 0x0a, 0xd5, 0x01, | ||
| 942 | 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x71, 0x9c, 0x1b, 0xb8, | ||
| 943 | 0x81, 0x45, 0x07, 0x7a, 0x60, 0x59, 0x96, 0x1e, 0x70, 0xac, 0xc0, 0x0a, | ||
| 944 | 0x62, 0xe3, 0x17, 0x74, 0x20, 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, 0xcd, | ||
| 945 | 0xae, 0xcd, 0xa5, 0xed, 0x8d, 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, | ||
| 946 | 0xec, 0x6c, 0x6e, 0x14, 0x41, 0x0e, 0xe6, 0xe0, 0x14, 0x36, 0x36, 0xbb, | ||
| 947 | 0x36, 0x97, 0x34, 0xb2, 0x32, 0x37, 0xba, 0x51, 0x02, 0x3a, 0xb8, 0x25, | ||
| 948 | 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x94, | ||
| 949 | 0xa0, 0x0e, 0x8e, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, 0xab, | ||
| 950 | 0x0b, 0x3b, 0x2b, 0xfb, 0xb2, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, | ||
| 951 | 0x25, 0xb0, 0x83, 0x9b, 0xc2, 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, 0xe0, | ||
| 952 | 0xd2, 0xd8, 0xca, 0xbe, 0xde, 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0x46, | ||
| 953 | 0x19, 0xee, 0x00, 0x0f, 0xf2, 0xe0, 0x98, 0xb0, 0x34, 0x39, 0x17, 0x33, | ||
| 954 | 0xb9, 0xb0, 0xb3, 0xb6, 0x32, 0x37, 0xba, 0x51, 0x82, 0x50, 0x00, 0x00, | ||
| 955 | 0x00, 0xa9, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, | ||
| 956 | 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, | ||
| 957 | 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, | ||
| 958 | 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, | ||
| 959 | 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, | ||
| 960 | 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, | ||
| 961 | 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, | ||
| 962 | 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, | ||
| 963 | 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, | ||
| 964 | 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, | ||
| 965 | 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, | ||
| 966 | 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, | ||
| 967 | 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, | ||
| 968 | 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, | ||
| 969 | 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, | ||
| 970 | 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 971 | 0x00, 0x4e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 972 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x84, 0x65, 0x30, 0x03, 0x40, 0x5a, 0x06, | ||
| 973 | 0xd4, 0x73, 0x10, 0x04, 0x41, 0x64, 0x04, 0x63, 0x04, 0x20, 0x08, 0x82, | ||
| 974 | 0xf8, 0x47, 0x3c, 0x03, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 975 | 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0x48, 0x3d, 0x00, 0x00, 0x00, | ||
| 976 | 0x00, 0xd5, 0xf3, 0x90, 0x81, 0x05, 0x00, 0x00, 0x00, 0x5f, 0x5a, 0x54, | ||
| 977 | 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, | ||
| 978 | 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, | ||
| 979 | 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, | ||
| 980 | 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, | ||
| 981 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 982 | 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, | ||
| 983 | 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x29, | ||
| 984 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 985 | 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x32, 0x29, 0x00, 0x00, | ||
| 986 | 0x00, 0x13, 0x04, 0x85, 0x99, 0x20, 0x28, 0xcd, 0x04, 0x41, 0x71, 0x26, | ||
| 987 | 0x08, 0xca, 0x33, 0x41, 0x50, 0xa0, 0x09, 0x82, 0x12, 0x4d, 0x10, 0x14, | ||
| 988 | 0x69, 0x82, 0xa0, 0x4c, 0x2b, 0x04, 0x58, 0x30, 0x85, 0x15, 0x43, 0x2c, | ||
| 989 | 0xc0, 0xc2, 0x29, 0x6c, 0x08, 0x4a, 0x61, 0xc3, 0x40, 0x0a, 0xb2, 0x80, | ||
| 990 | 0x0a, 0x1b, 0x86, 0x6c, 0x16, 0x50, 0x61, 0x43, 0x34, 0x0a, 0xb4, 0x80, | ||
| 991 | 0x0a, 0xb4, 0x90, 0x0a, 0xb4, 0xa0, 0x0a, 0xb4, 0xb0, 0x0a, 0xb4, 0xc0, | ||
| 992 | 0x0a, 0xb4, 0xd0, 0x0a, 0xb4, 0xe0, 0x0a, 0xb4, 0xf0, 0x0a, 0x1b, 0x86, | ||
| 993 | 0x5a, 0xa0, 0x85, 0x55, 0xd8, 0x10, 0xc4, 0x02, 0x00, 0x7b, 0x86, 0x43, | ||
| 994 | 0x32, 0x28, 0x80, 0x31, 0xc7, 0x30, 0x04, 0xd4, 0x20, 0x43, 0x40, 0x18, | ||
| 995 | 0x73, 0x0c, 0x81, 0x81, 0x58, 0xd0, 0x88, 0x7f, 0x06, 0x01, 0x31, 0x00, | ||
| 996 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x8a, 0x20, 0xa8, 0x85, 0xc3, 0x16, | ||
| 997 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 998 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xf2, 0x05, 0x00, 0x00, 0x00, | ||
| 999 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 1000 | 0x00, 0x12, 0x03, 0x94, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 1001 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, | ||
| 1002 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1003 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, | ||
| 1004 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 1005 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, | ||
| 1006 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1007 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1008 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1009 | 0x00, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, | ||
| 1010 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1011 | 0x00, 0x12, 0x03, 0x94, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, | ||
| 1012 | 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, | ||
| 1013 | 0x65, 0x6e, 0x74, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, | ||
| 1014 | 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, | ||
| 1015 | 0x69, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, | ||
| 1016 | 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1017 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 1018 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x30, 0x1f, 0x00, | ||
| 1019 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, | ||
| 1020 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, | ||
| 1021 | 0xc8, 0x14, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x04, 0x07, 0x00, | ||
| 1022 | 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1023 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 1024 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 1025 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 1026 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, | ||
| 1027 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, | ||
| 1028 | 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 1029 | 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x64, 0x01, 0x00, | ||
| 1030 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, | ||
| 1031 | 0x40, 0x02, 0x2a, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, | ||
| 1032 | 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1033 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1034 | 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, | ||
| 1035 | 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, | ||
| 1036 | 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, | ||
| 1037 | 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1038 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 1039 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 1040 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 1041 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, | ||
| 1042 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, | ||
| 1043 | 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, | ||
| 1044 | 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, | ||
| 1045 | 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 1046 | 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, | ||
| 1047 | 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, | ||
| 1048 | 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, | ||
| 1049 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, | ||
| 1050 | 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 1051 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1052 | 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, | ||
| 1053 | 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, | ||
| 1054 | 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, | ||
| 1055 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 1056 | 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, | ||
| 1057 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1058 | 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, | ||
| 1059 | 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 1060 | 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 1061 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, | ||
| 1062 | 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, | ||
| 1063 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 1064 | 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0xe0, 0x09, 0x04, 0xb0, 0x00, 0x55, 0x90, | ||
| 1065 | 0x06, 0x60, 0x30, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, | ||
| 1066 | 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 1067 | 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0xc1, 0x18, 0x0a, | ||
| 1068 | 0x60, 0x01, 0xaa, 0x0d, 0x06, 0x61, 0x00, 0x0b, 0x50, 0x6d, 0x08, 0x93, | ||
| 1069 | 0xe2, 0xff, 0xff, 0xff, 0xff, 0x07, 0x60, 0x0d, 0x00, 0x09, 0xa8, 0x88, | ||
| 1070 | 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, | ||
| 1071 | 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 1072 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1073 | 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, | ||
| 1074 | 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, | ||
| 1075 | 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, | ||
| 1076 | 0x39, 0xc0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, | ||
| 1077 | 0x74, 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, | ||
| 1078 | 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, | ||
| 1079 | 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, | ||
| 1080 | 0x72, 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, | ||
| 1081 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 1082 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 1083 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, | ||
| 1084 | 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, | ||
| 1085 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, | ||
| 1086 | 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, | ||
| 1087 | 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, | ||
| 1088 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, | ||
| 1089 | 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, | ||
| 1090 | 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, | ||
| 1091 | 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, | ||
| 1092 | 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, | ||
| 1093 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1094 | 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, | ||
| 1095 | 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, | ||
| 1096 | 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, | ||
| 1097 | 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, | ||
| 1098 | 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, | ||
| 1099 | 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, | ||
| 1100 | 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, | ||
| 1101 | 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, | ||
| 1102 | 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, | ||
| 1103 | 0x60, 0x43, 0x62, 0x08, 0xc0, 0x02, 0x54, 0x41, 0x1a, 0x80, 0xc1, 0x06, | ||
| 1104 | 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0x83, 0x8f, | ||
| 1105 | 0x20, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, | ||
| 1106 | 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, | ||
| 1107 | 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 1108 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, | ||
| 1109 | 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, | ||
| 1110 | 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, | ||
| 1111 | 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x90, 0x07, 0x76, 0x00, | ||
| 1112 | 0x0c, 0xee, 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, 0x90, 0x0e, 0xec, 0x40, | ||
| 1113 | 0x0f, 0xe9, 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, | ||
| 1114 | 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, | ||
| 1115 | 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, | ||
| 1116 | 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 1117 | 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, | ||
| 1118 | 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, | ||
| 1119 | 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 1120 | 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0x0f, 0xf2, 0x50, | ||
| 1121 | 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, | ||
| 1122 | 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 1123 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 1124 | 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, | ||
| 1125 | 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, | ||
| 1126 | 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, | ||
| 1127 | 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, | ||
| 1128 | 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, | ||
| 1129 | 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, | ||
| 1130 | 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, | ||
| 1131 | 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, | ||
| 1132 | 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, | ||
| 1133 | 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, | ||
| 1134 | 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, | ||
| 1135 | 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, | ||
| 1136 | 0x0e, 0x00, 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, | ||
| 1137 | 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, | ||
| 1138 | 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x92, | ||
| 1139 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x36, 0x00, 0xd6, 0x00, 0x90, 0x80, | ||
| 1140 | 0x6a, 0x83, 0xa1, 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x45, 0x00, 0x16, | ||
| 1141 | 0xa0, 0xda, 0xa0, 0x30, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x6d, 0x00, | ||
| 1142 | 0xac, 0x01, 0x20, 0x01, 0xd5, 0x86, 0xa9, 0xf9, 0xff, 0xff, 0xff, 0xff, | ||
| 1143 | 0x01, 0x58, 0x03, 0x40, 0x19, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1c, 0xea, | ||
| 1144 | 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, 0x01, 0xd8, 0x50, | ||
| 1145 | 0x38, 0x42, 0x90, 0x06, 0x60, 0xb0, 0xc1, 0x78, 0xfe, 0xff, 0xff, 0xff, | ||
| 1146 | 0x7f, 0x00, 0x24, 0x80, 0xda, 0x10, 0x41, 0xff, 0xff, 0xff, 0xff, 0x3f, | ||
| 1147 | 0x00, 0xca, 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe9, 0xc0, | ||
| 1148 | 0x0e, 0xf4, 0x90, 0x0e, 0xee, 0x30, 0x0f, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 1149 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x42, | ||
| 1150 | 0x61, 0x4c, 0x08, 0x8e, 0x09, 0x01, 0x32, 0x61, 0x48, 0x94, 0x65, 0xc2, | ||
| 1151 | 0xc0, 0x28, 0xcb, 0x04, 0xa1, 0x71, 0x26, 0x04, 0xcf, 0x84, 0x00, 0x02, | ||
| 1152 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, | ||
| 1153 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, | ||
| 1154 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, | ||
| 1155 | 0x4c, 0x10, 0xb4, 0xc1, 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, | ||
| 1156 | 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, | ||
| 1157 | 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 1158 | 0x00, 0x80, 0x41, 0x84, 0x41, 0x38, 0x4a, 0x9a, 0x22, 0x4a, 0x98, 0xfc, | ||
| 1159 | 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, 0xdf, 0x1e, 0xfe, 0x69, 0x8c, 0x00, | ||
| 1160 | 0x18, 0x44, 0x28, 0x82, 0x8b, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x25, | ||
| 1161 | 0x80, 0x79, 0x16, 0x22, 0xfa, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x10, | ||
| 1162 | 0xca, 0x11, 0x04, 0x81, 0x40, 0x18, 0x08, 0x25, 0x65, 0x08, 0x02, 0x82, | ||
| 1163 | 0x96, 0x61, 0x84, 0x01, 0x28, 0x44, 0xd3, 0x34, 0x0d, 0x39, 0x65, 0x00, | ||
| 1164 | 0x00, 0x80, 0xa0, 0x22, 0x00, 0x00, 0x49, 0x73, 0x04, 0x41, 0x11, 0x28, | ||
| 1165 | 0x80, 0xaa, 0x32, 0x00, 0x4d, 0x43, 0x57, 0x31, 0x9a, 0x06, 0x00, 0x00, | ||
| 1166 | 0x80, 0xb2, 0x32, 0x34, 0x4d, 0x43, 0x5b, 0x11, 0x9a, 0x86, 0xba, 0x39, | ||
| 1167 | 0x02, 0xc4, 0x08, 0xc1, 0x37, 0x47, 0x00, 0x06, 0xc3, 0x08, 0x42, 0x18, | ||
| 1168 | 0x14, 0x05, 0x34, 0x10, 0x81, 0x12, 0x29, 0x00, 0x08, 0x69, 0x1c, 0x08, | ||
| 1169 | 0x48, 0x81, 0x70, 0x04, 0x60, 0x8e, 0x00, 0x14, 0x06, 0x11, 0x00, 0x61, | ||
| 1170 | 0x0a, 0x60, 0x18, 0x61, 0x08, 0x83, 0x61, 0x04, 0x22, 0x0c, 0x00, 0x00, | ||
| 1171 | 0x00, 0x13, 0xbe, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 1172 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 1173 | 0x79, 0x88, 0x83, 0x39, 0x70, 0x03, 0x38, 0x70, 0x03, 0x38, 0x68, 0x83, | ||
| 1174 | 0x79, 0x48, 0x87, 0x76, 0xa8, 0x07, 0x76, 0x08, 0x07, 0x7a, 0x78, 0x07, | ||
| 1175 | 0x79, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, | ||
| 1176 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, | ||
| 1177 | 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, | ||
| 1178 | 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, | ||
| 1179 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, | ||
| 1180 | 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, | ||
| 1181 | 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 1182 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1183 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, | ||
| 1184 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 1185 | 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 1186 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 1187 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1188 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, | ||
| 1189 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 1190 | 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1191 | 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, | ||
| 1192 | 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, | ||
| 1193 | 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 1194 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, | ||
| 1195 | 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, | ||
| 1196 | 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 1197 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, | ||
| 1198 | 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, | ||
| 1199 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, | ||
| 1200 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 1201 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 1202 | 0x07, 0x72, 0xa0, 0x11, 0xc2, 0x90, 0x11, 0xdb, 0x95, 0x3f, 0xe7, 0x3c, | ||
| 1203 | 0xd8, 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x34, 0x24, 0x02, 0xa2, 0x04, | ||
| 1204 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x86, 0x44, | ||
| 1205 | 0x11, 0x1e, 0x2c, 0x08, 0x30, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 1206 | 0x00, 0x30, 0x24, 0x4a, 0x05, 0xca, 0x01, 0x02, 0x60, 0x00, 0x00, 0x00, | ||
| 1207 | 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, 0x51, 0x2f, 0x40, 0x10, 0x10, 0x00, | ||
| 1208 | 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x89, 0xda, 0x21, | ||
| 1209 | 0x92, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, | ||
| 1210 | 0x48, 0xe4, 0x0f, 0x56, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x20, 0x00, | ||
| 1211 | 0x00, 0x00, 0x00, 0x43, 0x22, 0x9a, 0x68, 0x2e, 0x20, 0x00, 0x06, 0x00, | ||
| 1212 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x12, 0x85, 0x45, 0x96, 0x21, | ||
| 1213 | 0xc0, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x48, | ||
| 1214 | 0x2f, 0x22, 0x08, 0x08, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 1215 | 0x00, 0x86, 0x44, 0xab, 0x21, 0x6d, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 1216 | 0x02, 0x00, 0x00, 0x00, 0x30, 0x24, 0xea, 0x8d, 0xa9, 0x03, 0x02, 0x60, | ||
| 1217 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, 0x11, 0x7c, 0x4c, | ||
| 1218 | 0x1b, 0x10, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
| 1219 | 0x89, 0x46, 0x64, 0x1b, 0x03, 0x20, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, | ||
| 1220 | 0x00, 0x00, 0x00, 0x90, 0xd8, 0x20, 0x50, 0xb4, 0xe0, 0x00, 0x00, 0x20, | ||
| 1221 | 0x0b, 0x04, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 1222 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 1223 | 0x0a, 0x8b, 0xa0, 0x04, 0x0a, 0x61, 0x04, 0xa0, 0x0c, 0x0a, 0xa8, 0x20, | ||
| 1224 | 0x0a, 0xa3, 0x40, 0x0a, 0xa5, 0x60, 0x0a, 0xa7, 0x14, 0x08, 0x1d, 0x01, | ||
| 1225 | 0x28, 0x84, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0x32, | ||
| 1226 | 0xc7, 0x12, 0x24, 0x01, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 1227 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 1228 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 1229 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 1230 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 1231 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 1232 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 1233 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 1234 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 1235 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 1236 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 1237 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 1238 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 1239 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 1240 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 1241 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 1242 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 1243 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 1244 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 1245 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 1246 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 1247 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 1248 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 1249 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 1250 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 1251 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 1252 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 1253 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 1254 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 1255 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 1256 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 1257 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 1258 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 1259 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 1260 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 1261 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 1262 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 1263 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 1264 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 1265 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 1266 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 1267 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 1268 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 1269 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 1270 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 1271 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 1272 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 1273 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 1274 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 1275 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 1276 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 1277 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 1278 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 1279 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 1280 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 1281 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 1282 | 0x00, 0x79, 0x20, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 1283 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 1284 | 0xde, 0x00, 0x0d, 0x48, 0x0b, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x41, | ||
| 1285 | 0x14, 0x19, 0x8c, 0x22, 0x31, 0x88, 0x64, 0x3d, 0x45, 0x66, 0x20, 0xca, | ||
| 1286 | 0x23, 0x21, 0x54, 0xc1, 0x30, 0xca, 0xe2, 0x3c, 0xcf, 0x13, 0x5d, 0x4f, | ||
| 1287 | 0xb0, 0x28, 0xd8, 0xb0, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4b, | ||
| 1288 | 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, | ||
| 1289 | 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, | ||
| 1290 | 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, | ||
| 1291 | 0x6e, 0x20, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, | ||
| 1292 | 0x28, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, | ||
| 1293 | 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, | ||
| 1294 | 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, | ||
| 1295 | 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, | ||
| 1296 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 1297 | 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, | ||
| 1298 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 1299 | 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, | ||
| 1300 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, | ||
| 1301 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, | ||
| 1302 | 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, | ||
| 1303 | 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 1304 | 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, | ||
| 1305 | 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, | ||
| 1306 | 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x69, 0x72, | ||
| 1307 | 0x2e, 0x6e, 0x6f, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, | ||
| 1308 | 0x69, 0x76, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, | ||
| 1309 | 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, | ||
| 1310 | 0x69, 0x72, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, | ||
| 1311 | 0x69, 0x6e, 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, | ||
| 1312 | 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, | ||
| 1313 | 0x5f, 0x66, 0x29, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, 0x70, | ||
| 1314 | 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, | ||
| 1315 | 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, | ||
| 1316 | 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, | ||
| 1317 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 1318 | 0x72, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, | ||
| 1319 | 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, | ||
| 1320 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, | ||
| 1321 | 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, | ||
| 1322 | 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, | ||
| 1323 | 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, | ||
| 1324 | 0x6f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, | ||
| 1325 | 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, | ||
| 1326 | 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, | ||
| 1327 | 0x74, 0x79, 0x70, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, | ||
| 1328 | 0x61, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, | ||
| 1329 | 0x65, 0x74, 0x68, 0x6f, 0x64, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, | ||
| 1330 | 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, | ||
| 1331 | 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, | ||
| 1332 | 0x64, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, | ||
| 1333 | 0x6e, 0x74, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, | ||
| 1334 | 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, | ||
| 1335 | 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, | ||
| 1336 | 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, | ||
| 1337 | 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x61, 0x69, | ||
| 1338 | 0x72, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x61, 0x69, 0x72, | ||
| 1339 | 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x78, 0x74, 0x75, | ||
| 1340 | 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, | ||
| 1341 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x61, 0x69, | ||
| 1342 | 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x6d, | ||
| 1343 | 0x70, 0x6c, 0x65, 0x72, 0x73, 0x24, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1344 | 0x00, 0x30, 0x82, 0x10, 0x06, 0xcd, 0x08, 0x82, 0x19, 0x88, 0xc1, 0x08, | ||
| 1345 | 0x42, 0x18, 0x38, 0x23, 0x08, 0x61, 0xf0, 0x8c, 0x20, 0x84, 0x01, 0x34, | ||
| 1346 | 0x82, 0xa0, 0x00, 0x23, 0x08, 0x61, 0x10, 0x8d, 0x20, 0x84, 0x81, 0x34, | ||
| 1347 | 0x82, 0x10, 0x06, 0xd3, 0x08, 0x42, 0x18, 0x50, 0x23, 0x08, 0x61, 0x50, | ||
| 1348 | 0x8d, 0x20, 0x84, 0x81, 0x35, 0x82, 0x10, 0x06, 0xd7, 0x08, 0x42, 0x18, | ||
| 1349 | 0x60, 0x23, 0x08, 0x61, 0x90, 0xcd, 0x30, 0xc0, 0x41, 0x10, 0x07, 0x33, | ||
| 1350 | 0x0c, 0x72, 0x20, 0xcc, 0xc1, 0x0c, 0xc1, 0x30, 0xc3, 0x00, 0x07, 0x70, | ||
| 1351 | 0x40, 0x07, 0x33, 0x10, 0x84, 0x1c, 0xc8, 0x01, 0x1d, 0xcc, 0x10, 0x14, | ||
| 1352 | 0x33, 0x04, 0xc6, 0x0c, 0xc1, 0x31, 0x43, 0x81, 0xd0, 0x01, 0x1d, 0x24, | ||
| 1353 | 0xca, 0x0c, 0xc1, 0x29, 0xcc, 0x80, 0xd0, 0xc1, 0xc2, 0x34, 0x89, 0xe2, | ||
| 1354 | 0x3c, 0x33, 0x24, 0x72, 0x00, 0x45, 0x8c, 0x94, 0x28, 0xce, 0x34, 0x43, | ||
| 1355 | 0x02, 0x07, 0x10, 0xc5, 0x48, 0x49, 0xe5, 0x58, 0x33, 0xa0, 0x01, 0x1d, | ||
| 1356 | 0xcc, 0x01, 0x1d, 0x70, 0xdd, 0x1c, 0xcc, 0x01, 0x1d, 0x70, 0x1e, 0x1e, | ||
| 1357 | 0xcc, 0x01, 0x1d, 0x70, 0x5f, 0x1e, 0xcc, 0x01, 0x1d, 0x70, 0x60, 0xa0, | ||
| 1358 | 0x07, 0x73, 0x40, 0x07, 0x5c, 0x18, 0xec, 0xc1, 0x1c, 0xd0, 0x01, 0x27, | ||
| 1359 | 0x06, 0x7c, 0x30, 0x07, 0x74, 0xc0, 0x8d, 0x41, 0x1f, 0xcc, 0x01, 0x1d, | ||
| 1360 | 0x70, 0x64, 0x30, 0x83, 0x64, 0x07, 0x17, 0x76, 0x07, 0x19, 0x1d, 0xc8, | ||
| 1361 | 0x81, 0xb6, 0xb1, 0x42, 0x19, 0xdc, 0x81, 0x19, 0xcc, 0x41, 0x72, 0x06, | ||
| 1362 | 0x0e, 0x1a, 0xcc, 0xa0, 0xcc, 0x41, 0x1a, 0x64, 0x74, 0x20, 0x07, 0x6a, | ||
| 1363 | 0x90, 0xac, 0x81, 0xc3, 0x06, 0x33, 0x24, 0x7e, 0xd0, 0x06, 0x19, 0x1d, | ||
| 1364 | 0xc8, 0x41, 0xe2, 0x06, 0xce, 0x1b, 0xcc, 0x60, 0xa4, 0x82, 0x2a, 0xac, | ||
| 1365 | 0x42, 0x2b, 0xb8, 0xc2, 0x2b, 0xcc, 0x30, 0xd4, 0x01, 0x2a, 0xc0, 0x42, | ||
| 1366 | 0x89, 0x01, 0x20, 0x06, 0x68, 0x20, 0x06, 0x62, 0x20, 0x06, 0x9c, 0x18, | ||
| 1367 | 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, | ||
| 1368 | 0xb8, 0x81, 0x1b, 0x58, 0x74, 0xa0, 0x07, 0x96, 0x65, 0xe9, 0x01, 0x67, | ||
| 1369 | 0x0a, 0xac, 0xc0, 0x0a, 0x74, 0xe3, 0x17, 0xf6, 0xa0, 0x0e, 0xb8, 0x20, | ||
| 1370 | 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, 0xcd, 0xae, 0xcd, 0xa5, 0xed, 0x8d, | ||
| 1371 | 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, 0x14, 0xc1, | ||
| 1372 | 0x0f, 0xfe, 0xe0, 0x14, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32, | ||
| 1373 | 0x37, 0xba, 0x51, 0x02, 0x50, 0xb8, 0x25, 0x2c, 0x4d, 0xce, 0xc5, 0xae, | ||
| 1374 | 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x94, 0x20, 0x14, 0x8e, 0x0a, 0x4b, | ||
| 1375 | 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, 0xab, 0x0b, 0x3b, 0x2b, 0xfb, 0xb2, | ||
| 1376 | 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0x10, 0x85, 0x9b, 0xc2, | ||
| 1377 | 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, 0xe0, 0xd2, 0xd8, 0xca, 0xbe, 0xde, | ||
| 1378 | 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0x46, 0x19, 0x46, 0x81, 0x14, 0x4a, | ||
| 1379 | 0xe1, 0x98, 0xb0, 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, 0xb6, 0x32, | ||
| 1380 | 0x37, 0xba, 0x51, 0x02, 0x58, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, | ||
| 1381 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, | ||
| 1382 | 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, | ||
| 1383 | 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, | ||
| 1384 | 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 1385 | 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, | ||
| 1386 | 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, | ||
| 1387 | 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, | ||
| 1388 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, | ||
| 1389 | 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, | ||
| 1390 | 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, | ||
| 1391 | 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, | ||
| 1392 | 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, | ||
| 1393 | 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, | ||
| 1394 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, | ||
| 1395 | 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, | ||
| 1396 | 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3e, 0x00, 0x00, | ||
| 1397 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 1398 | 0x00, 0x44, 0xd5, 0xc0, 0x08, 0x00, 0x89, 0x23, 0x00, 0x04, 0x8c, 0x00, | ||
| 1399 | 0x00, 0xf1, 0x30, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, | ||
| 1400 | 0x90, 0x51, 0x12, 0x44, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x63, 0x80, 0x61, | ||
| 1401 | 0x16, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, | ||
| 1402 | 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, | ||
| 1403 | 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x29, | ||
| 1404 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 1405 | 0x6f, 0x70, 0x65, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, | ||
| 1406 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 1407 | 0x6f, 0x70, 0x65, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x73, | ||
| 1408 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 1409 | 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x00, 0x00, | ||
| 1410 | 0x00, 0x2b, 0x04, 0x5b, 0x90, 0x85, 0x15, 0xc3, 0x2d, 0xd8, 0xc2, 0x2c, | ||
| 1411 | 0xac, 0x18, 0x70, 0xc1, 0x16, 0x68, 0x61, 0xc5, 0x90, 0x0b, 0xb6, 0x50, | ||
| 1412 | 0x0b, 0x1b, 0x04, 0x5c, 0xb8, 0x85, 0x0d, 0x41, 0x2e, 0x00, 0x00, 0x00, | ||
| 1413 | 0x00, 0x23, 0x06, 0x8d, 0x11, 0x82, 0x60, 0x30, 0x06, 0x61, 0x60, 0x14, | ||
| 1414 | 0x08, 0x21, 0x0c, 0x41, 0xd0, 0x8d, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x71, | ||
| 1415 | 0xc4, 0x20, 0x58, 0xf8, 0xc7, 0xe2, 0x06, 0x41, 0x62, 0x01, 0x23, 0xfe, | ||
| 1416 | 0x19, 0x04, 0xc4, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x0a, 0xe0, | ||
| 1417 | 0xc8, 0x05, 0x44, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1418 | 0x00, 0xe3, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, | ||
| 1419 | 0x00, 0x4f, 0x00, 0x00, 0x00, 0x14, 0x96, 0xc3, 0x0c, 0x40, 0x31, 0x10, | ||
| 1420 | 0x5a, 0x02, 0x45, 0x40, 0xeb, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, 0xc4, | ||
| 1421 | 0xce, 0x41, 0x40, 0x4e, 0x63, 0x06, 0x63, 0x11, 0x40, 0x20, 0x1c, 0x04, | ||
| 1422 | 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x18, 0x81, 0x2c, 0xba, 0x3d, | ||
| 1423 | 0x0d, 0x06, 0x63, 0x04, 0xb5, 0x5a, 0xab, 0xed, 0x37, 0x46, 0xd0, 0xc7, | ||
| 1424 | 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0x6e, 0x1f, 0x8b, 0xb6, 0x2f, 0x8c, 0x11, | ||
| 1425 | 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, | ||
| 1426 | 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, | ||
| 1427 | 0x8d, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, 0xce, 0x9a, 0x73, | ||
| 1428 | 0x08, 0x06, 0x23, 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, 0x8c, | ||
| 1429 | 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x03, 0x40, 0xc1, 0x0c, 0xc0, | ||
| 1430 | 0x0c, 0xc0, 0x1c, 0xc4, 0x1c, 0xe4, 0xc1, 0x1c, 0xf0, 0x01, 0x35, 0x33, | ||
| 1431 | 0x00, 0x23, 0x00, 0x33, 0x00, 0x63, 0x0d, 0x20, 0x08, 0x82, 0xf8, 0x07, | ||
| 1432 | 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x37, 0xd6, 0xc0, 0xb6, | ||
| 1433 | 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, 0xc7, 0xb6, 0xf3, 0x4f, 0x7a, | ||
| 1434 | 0x63, 0x0d, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, 0xd6, 0xbf, | ||
| 1435 | 0x00, 0x82, 0x20, 0x5b, 0xff, 0xc2, 0x58, 0x03, 0x08, 0x82, 0x6b, 0x0e, | ||
| 1436 | 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x80, 0x20, 0xb8, 0xe6, 0x60, 0x30, | ||
| 1437 | 0xd6, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, | ||
| 1438 | 0x20, 0x48, 0xb7, 0x39, 0x18, 0x8c, 0x35, 0xac, 0x23, 0x1e, 0xb3, 0x60, | ||
| 1439 | 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x3a, 0xe2, 0x31, 0x0b, 0x06, 0x63, | ||
| 1440 | 0x0d, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, 0x63, 0x00, | ||
| 1441 | 0x82, 0x30, 0x1e, 0x8e, 0xc1, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, | ||
| 1442 | 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, | ||
| 1443 | 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, | ||
| 1444 | 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, | ||
| 1445 | 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x00, 0xf1, 0x30, 0x00, | ||
| 1446 | 0x00, 0x32, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x0e, 0xc4, | ||
| 1447 | 0x1d, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf3, 0x00, 0x00, 0x5f, 0x5a, 0x54, | ||
| 1448 | 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, | ||
| 1449 | 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, | ||
| 1450 | 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, | ||
| 1451 | 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, | ||
| 1452 | 0x00, 0x13, 0x04, 0x34, 0xd0, 0x26, 0x08, 0x68, 0xb0, 0x4d, 0x10, 0xd0, | ||
| 1453 | 0x80, 0x9b, 0x20, 0xa0, 0x41, 0x37, 0x41, 0x40, 0x03, 0x6f, 0x82, 0x80, | ||
| 1454 | 0x06, 0xdf, 0x04, 0x01, 0x0d, 0xc0, 0x60, 0x82, 0x80, 0x06, 0x61, 0xb0, | ||
| 1455 | 0x21, 0xa0, 0x85, 0x0d, 0xc3, 0x2c, 0xf4, 0x42, 0x2d, 0x6c, 0x18, 0x38, | ||
| 1456 | 0x5f, 0xa8, 0x85, 0x0d, 0x91, 0x2c, 0xfc, 0x42, 0x2d, 0xfc, 0x82, 0x2d, | ||
| 1457 | 0xfc, 0xc2, 0x2d, 0xfc, 0x02, 0x2e, 0xfc, 0x42, 0x2e, 0xfc, 0x82, 0x2e, | ||
| 1458 | 0xfc, 0xc2, 0x2e, 0xfc, 0x02, 0x2f, 0x6c, 0x18, 0xc0, 0xe1, 0x17, 0x6e, | ||
| 1459 | 0x61, 0xc3, 0x00, 0x0e, 0xbf, 0xc0, 0x0b, 0x1b, 0x06, 0x70, 0xf8, 0x85, | ||
| 1460 | 0x5c, 0xd8, 0x30, 0x80, 0xc3, 0x2f, 0xe8, 0xc2, 0x86, 0x01, 0x1c, 0x7e, | ||
| 1461 | 0x61, 0x17, 0x36, 0x0c, 0xe0, 0xf0, 0x0b, 0xb6, 0xb0, 0x61, 0x00, 0x87, | ||
| 1462 | 0x5f, 0xc0, 0x85, 0x0d, 0x03, 0x38, 0xfc, 0x42, 0x2d, 0x00, 0x00, 0x00, | ||
| 1463 | 0x00, 0x7b, 0x18, 0xd2, 0x60, 0x0e, 0x40, 0x81, 0x02, 0x60, 0x0c, 0x47, | ||
| 1464 | 0x04, 0x55, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0xb4, 0xc1, | ||
| 1465 | 0x64, 0x06, 0x7b, 0x18, 0xda, 0xe0, 0x0e, 0xd8, 0x80, 0x02, 0x60, 0x8c, | ||
| 1466 | 0x18, 0x18, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x74, 0xa9, 0x30, 0x8c, 0x18, | ||
| 1467 | 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x6c, 0xab, 0x10, 0x40, 0x16, 0x40, | ||
| 1468 | 0xe0, 0x3f, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0xb1, 0xad, 0x42, | ||
| 1469 | 0x50, 0xd9, 0x10, 0x89, 0xbf, 0x45, 0x41, 0xf8, 0xdb, 0x10, 0x90, 0xff, | ||
| 1470 | 0x88, 0x81, 0x81, 0x84, 0x20, 0x58, 0xf8, 0x47, 0x07, 0x0b, 0xc1, 0x88, | ||
| 1471 | 0xc1, 0x81, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0x26, 0x0b, 0xc1, 0x64, 0xc1, | ||
| 1472 | 0x24, 0xfe, 0x73, 0x0c, 0xdd, 0x32, 0x0a, 0x83, 0x0c, 0x81, 0x37, 0x07, | ||
| 1473 | 0x36, 0x04, 0xe4, 0x3f, 0xc8, 0x10, 0x80, 0x01, 0x1d, 0x0c, 0x32, 0x04, | ||
| 1474 | 0x7e, 0x40, 0x07, 0xb3, 0x04, 0xc2, 0x40, 0x45, 0x20, 0x04, 0xfe, 0x00, | ||
| 1475 | 0xec, 0x61, 0xf8, 0x83, 0x54, 0xa0, 0x05, 0x0a, 0x80, 0x31, 0x1c, 0x11, | ||
| 1476 | 0xb0, 0x81, 0xe3, 0x1f, 0xb3, 0x0c, 0x03, 0x11, 0x0c, 0x32, 0x10, 0x69, | ||
| 1477 | 0xc0, 0x07, 0x7b, 0x18, 0x46, 0xa1, 0x15, 0x5c, 0x81, 0x02, 0x60, 0xec, | ||
| 1478 | 0x61, 0x28, 0x85, 0x57, 0x10, 0x05, 0x0a, 0x80, 0x31, 0x62, 0xa0, 0x24, | ||
| 1479 | 0x31, 0x08, 0x16, 0xfe, 0x91, 0x91, 0x43, 0xd1, 0x1d, 0x43, 0x30, 0xc8, | ||
| 1480 | 0x10, 0xb0, 0x01, 0x28, 0x0c, 0x32, 0x04, 0x0b, 0x28, 0xcc, 0x12, 0x10, | ||
| 1481 | 0x03, 0x15, 0x81, 0x30, 0x60, 0xc2, 0x70, 0x44, 0x18, 0xf0, 0x41, 0xe0, | ||
| 1482 | 0x1f, 0xb3, 0x0c, 0xc5, 0x14, 0xec, 0x61, 0x60, 0x05, 0x5b, 0x10, 0x07, | ||
| 1483 | 0x0a, 0x80, 0x31, 0x1c, 0x11, 0xfc, 0x41, 0xe0, 0x1f, 0xb3, 0x0c, 0xc6, | ||
| 1484 | 0x11, 0x0c, 0x32, 0x14, 0x76, 0x90, 0x0a, 0x7b, 0x18, 0x60, 0x41, 0x17, | ||
| 1485 | 0xc6, 0x81, 0x02, 0x60, 0xcc, 0x31, 0xd8, 0x41, 0xc0, 0x0b, 0x83, 0x0c, | ||
| 1486 | 0xc1, 0x1d, 0xb0, 0x82, 0x05, 0x85, 0xf8, 0x0f, 0x32, 0x04, 0x79, 0xd0, | ||
| 1487 | 0x0a, 0xb3, 0x04, 0x6d, 0xb0, 0x87, 0xc1, 0x16, 0xc0, 0x41, 0x1d, 0x28, | ||
| 1488 | 0x00, 0xc6, 0x1e, 0x06, 0x5c, 0x10, 0x87, 0x75, 0xa0, 0x00, 0x18, 0x83, | ||
| 1489 | 0x0c, 0x50, 0x28, 0xc8, 0xc2, 0x88, 0x41, 0x81, 0x84, 0x20, 0x18, 0x54, | ||
| 1490 | 0xfa, 0x40, 0xcc, 0x32, 0x20, 0x52, 0x30, 0x86, 0x20, 0x99, 0xc3, 0x70, | ||
| 1491 | 0x44, 0xd0, 0x0a, 0x8a, 0x7f, 0xcc, 0x32, 0x28, 0x49, 0x60, 0x42, 0x2b, | ||
| 1492 | 0x88, 0xff, 0x2c, 0xc1, 0x62, 0x43, 0x2b, 0x80, 0xff, 0x88, 0x81, 0x81, | ||
| 1493 | 0x84, 0x20, 0x58, 0xf8, 0x87, 0x04, 0x12, 0x81, 0x05, 0xae, 0x20, 0xfe, | ||
| 1494 | 0x23, 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0xd0, 0x48, 0x04, 0xae, | ||
| 1495 | 0x30, 0x4b, 0xb0, 0x0c, 0x54, 0x00, 0x4a, 0x22, 0x28, 0x73, 0x0c, 0xaa, | ||
| 1496 | 0x10, 0xb8, 0xc3, 0x18, 0xc2, 0x16, 0x0e, 0xc3, 0x11, 0x81, 0x2d, 0x28, | ||
| 1497 | 0xfe, 0x31, 0xcb, 0xd0, 0x30, 0x81, 0x09, 0xb6, 0x20, 0xfe, 0xb3, 0x04, | ||
| 1498 | 0x8e, 0x0d, 0xb6, 0x00, 0xfe, 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, | ||
| 1499 | 0x1f, 0x52, 0x4a, 0x04, 0x16, 0xdc, 0x82, 0xf8, 0x8f, 0x18, 0x1c, 0x48, | ||
| 1500 | 0x08, 0x82, 0x85, 0x7f, 0x40, 0x2c, 0x11, 0xdc, 0xc2, 0x2c, 0x81, 0x33, | ||
| 1501 | 0x50, 0x01, 0x28, 0x8c, 0xd0, 0xcc, 0x31, 0x24, 0x41, 0x3a, 0x8c, 0x21, | ||
| 1502 | 0x90, 0x41, 0x3a, 0x0c, 0x47, 0x04, 0xbf, 0xa0, 0xf8, 0xc7, 0x2c, 0x03, | ||
| 1503 | 0xf4, 0x04, 0x26, 0xfc, 0x82, 0xf8, 0xcf, 0x12, 0x44, 0x36, 0xfc, 0x02, | ||
| 1504 | 0xf8, 0x8f, 0x18, 0x18, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x48, 0x32, 0x11, | ||
| 1505 | 0x58, 0x00, 0x0e, 0xe2, 0x3f, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, | ||
| 1506 | 0x01, 0xd5, 0x44, 0x00, 0x0e, 0xb3, 0x04, 0xd1, 0x40, 0x05, 0xa0, 0x3c, | ||
| 1507 | 0x02, 0x34, 0xc7, 0x90, 0x04, 0xf1, 0x30, 0x4b, 0x20, 0x0d, 0x54, 0x04, | ||
| 1508 | 0x42, 0xa4, 0x07, 0xc7, 0x20, 0x43, 0xf0, 0x0b, 0xf2, 0x30, 0xc7, 0xd0, | ||
| 1509 | 0x0b, 0x60, 0x30, 0x12, 0x83, 0x0c, 0x81, 0x2f, 0xcc, 0x83, 0x0d, 0x81, | ||
| 1510 | 0xf8, 0x0f, 0x32, 0x04, 0xe0, 0x40, 0x0f, 0xb3, 0x04, 0x6d, 0x30, 0x1c, | ||
| 1511 | 0x31, 0x0b, 0xe6, 0x10, 0xf8, 0xc7, 0x2c, 0x03, 0x05, 0x06, 0xc1, 0x20, | ||
| 1512 | 0x03, 0x1d, 0x94, 0x03, 0x3e, 0xec, 0x61, 0xf8, 0x87, 0x94, 0x98, 0x09, | ||
| 1513 | 0x0a, 0x80, 0xb1, 0x87, 0x21, 0x24, 0x56, 0x82, 0x26, 0x28, 0x00, 0xc6, | ||
| 1514 | 0x1c, 0xc3, 0x39, 0x04, 0x2d, 0x31, 0xc8, 0x10, 0xa0, 0x43, 0x3f, 0x58, | ||
| 1515 | 0x70, 0x88, 0xff, 0x20, 0x43, 0xa0, 0x0e, 0xfe, 0x30, 0x62, 0x50, 0x20, | ||
| 1516 | 0x21, 0x08, 0x06, 0x95, 0x59, 0x1c, 0xb3, 0x0c, 0x5f, 0x15, 0x8c, 0x21, | ||
| 1517 | 0x0c, 0x32, 0x31, 0x1c, 0x11, 0xfc, 0x83, 0xe2, 0x1f, 0xb3, 0x0c, 0x97, | ||
| 1518 | 0x15, 0x98, 0xf0, 0x0f, 0xe2, 0x3f, 0x4b, 0x80, 0x8d, 0x18, 0x18, 0x48, | ||
| 1519 | 0x08, 0x82, 0x85, 0x7f, 0x48, 0x6b, 0x31, 0x8c, 0x18, 0x1c, 0x48, 0x08, | ||
| 1520 | 0x82, 0x85, 0x7f, 0x40, 0x6d, 0x11, 0x80, 0x84, 0x05, 0x20, 0x21, 0xfe, | ||
| 1521 | 0x16, 0x80, 0x04, 0xf8, 0xcf, 0x12, 0x60, 0x03, 0x15, 0x80, 0x62, 0x09, | ||
| 1522 | 0xd7, 0x1c, 0x83, 0x3c, 0x04, 0x3a, 0x31, 0x86, 0xc0, 0xb4, 0xc4, 0x70, | ||
| 1523 | 0x44, 0x80, 0x12, 0x8a, 0x7f, 0xcc, 0x32, 0x68, 0x59, 0x60, 0x02, 0x4a, | ||
| 1524 | 0x88, 0xff, 0x2c, 0xc1, 0x36, 0x62, 0x60, 0x20, 0x21, 0x08, 0x16, 0xfe, | ||
| 1525 | 0x21, 0xd1, 0xc5, 0x30, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x01, | ||
| 1526 | 0xd9, 0x45, 0x90, 0x12, 0x16, 0xa4, 0x84, 0xf8, 0x5b, 0x90, 0x12, 0xe0, | ||
| 1527 | 0x3f, 0x4b, 0xb0, 0x0d, 0x54, 0x00, 0x4a, 0x26, 0x68, 0x73, 0x0c, 0x49, | ||
| 1528 | 0x50, 0x13, 0x63, 0x08, 0x55, 0x4d, 0x0c, 0x47, 0x04, 0x31, 0xa1, 0xf8, | ||
| 1529 | 0xc7, 0x2c, 0x43, 0xc7, 0x05, 0x26, 0xc4, 0x84, 0xf8, 0xcf, 0x12, 0x78, | ||
| 1530 | 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x52, 0x5f, 0x0c, 0x23, | ||
| 1531 | 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0xd0, 0x5f, 0x04, 0x32, 0x61, | ||
| 1532 | 0x81, 0x4c, 0x88, 0xbf, 0x05, 0x32, 0x01, 0xfe, 0xb3, 0x04, 0xde, 0x40, | ||
| 1533 | 0x05, 0xa0, 0x70, 0x42, 0x37, 0xc7, 0x90, 0x04, 0x3d, 0x31, 0x62, 0x80, | ||
| 1534 | 0x20, 0x21, 0x08, 0x16, 0xfe, 0xe1, 0x94, 0x46, 0x60, 0x12, 0x24, 0x31, | ||
| 1535 | 0xc8, 0x10, 0xa0, 0x04, 0x4f, 0xcc, 0x12, 0x7c, 0x03, 0x15, 0x81, 0x1f, | ||
| 1536 | 0x50, 0x82, 0x37, 0xc8, 0x10, 0xb4, 0x84, 0x4f, 0xcc, 0x12, 0xb4, 0xc1, | ||
| 1537 | 0x2c, 0x43, 0x18, 0xb4, 0x01, 0x3f, 0x0c, 0x32, 0xf4, 0x82, 0x4b, 0x84, | ||
| 1538 | 0xc5, 0x88, 0xc1, 0x81, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0x65, 0x1a, 0x81, | ||
| 1539 | 0x48, 0xcc, 0x31, 0xac, 0x44, 0x30, 0x17, 0x23, 0x06, 0x07, 0x12, 0x82, | ||
| 1540 | 0x60, 0xe1, 0x1f, 0x17, 0x6a, 0x0c, 0x23, 0x31, 0xc7, 0x20, 0x04, 0x67, | ||
| 1541 | 0x31, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x71, 0xa9, 0x46, 0x41, | ||
| 1542 | 0x12, 0x73, 0x0c, 0x42, 0x80, 0x16, 0x83, 0x0c, 0x81, 0x4c, 0x98, 0xc5, | ||
| 1543 | 0x20, 0x43, 0x50, 0x0e, 0x66, 0xb1, 0x87, 0x01, 0x2e, 0xf4, 0x82, 0x34, | ||
| 1544 | 0x28, 0x00, 0xc6, 0x1e, 0x06, 0xb9, 0xe0, 0x8b, 0xd2, 0xa0, 0x00, 0x18, | ||
| 1545 | 0x73, 0x0c, 0x38, 0x11, 0xf8, 0xc5, 0x20, 0x43, 0x90, 0x13, 0x6e, 0x61, | ||
| 1546 | 0x41, 0x22, 0xfe, 0x83, 0x0c, 0xc1, 0x4e, 0xbc, 0xc5, 0x88, 0x41, 0x81, | ||
| 1547 | 0x84, 0x20, 0x18, 0x54, 0xb7, 0x71, 0xcc, 0x32, 0xb0, 0x81, 0x18, 0x04, | ||
| 1548 | 0x63, 0x08, 0xc3, 0x68, 0x0c, 0x47, 0x04, 0x70, 0xa1, 0xf8, 0xc7, 0x2c, | ||
| 1549 | 0x03, 0x19, 0x8c, 0x41, 0x60, 0x02, 0x5c, 0x88, 0xff, 0x2c, 0x41, 0x19, | ||
| 1550 | 0x8c, 0x18, 0x18, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x48, 0xbc, 0x31, 0x8c, | ||
| 1551 | 0x18, 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x40, 0xbe, 0x11, 0xc4, 0x85, | ||
| 1552 | 0x05, 0x71, 0x21, 0xfe, 0x16, 0xc4, 0x05, 0xf8, 0xcf, 0x12, 0x94, 0xc1, | ||
| 1553 | 0x40, 0x05, 0xa0, 0x8c, 0x81, 0x40, 0x06, 0x73, 0x0c, 0x63, 0x11, 0xac, | ||
| 1554 | 0xc6, 0x18, 0x02, 0xe3, 0x17, 0xc3, 0x11, 0x41, 0x5e, 0x28, 0xfe, 0x31, | ||
| 1555 | 0xcb, 0x70, 0x06, 0x66, 0x10, 0x98, 0x90, 0x17, 0xe2, 0x3f, 0x4b, 0x80, | ||
| 1556 | 0x06, 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x52, 0x79, 0x0c, | ||
| 1557 | 0x23, 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0xd0, 0x79, 0x04, 0x7a, | ||
| 1558 | 0x61, 0x81, 0x5e, 0x88, 0xbf, 0x05, 0x7a, 0x01, 0xfe, 0xb3, 0x04, 0x68, | ||
| 1559 | 0x30, 0x50, 0x01, 0x28, 0x66, 0x20, 0x9c, 0xc1, 0x1c, 0x43, 0x12, 0x98, | ||
| 1560 | 0xc6, 0x18, 0x42, 0x65, 0x1a, 0xc3, 0x11, 0x81, 0x68, 0x28, 0xfe, 0x31, | ||
| 1561 | 0xcb, 0xa0, 0x06, 0x69, 0x10, 0x98, 0x20, 0x1a, 0xe2, 0x3f, 0x4b, 0xb0, | ||
| 1562 | 0x06, 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x92, 0x7b, 0x0c, | ||
| 1563 | 0x23, 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x10, 0x7c, 0x04, 0xa3, | ||
| 1564 | 0x61, 0xc1, 0x68, 0x88, 0xbf, 0x05, 0xa3, 0x01, 0xfe, 0xb3, 0x04, 0x6b, | ||
| 1565 | 0x30, 0x50, 0x01, 0x28, 0x69, 0x20, 0xa8, 0xc1, 0x1c, 0x43, 0x12, 0xb8, | ||
| 1566 | 0xc6, 0x88, 0x01, 0x82, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x63, 0x1f, 0xc1, | ||
| 1567 | 0x5d, 0xd4, 0xc5, 0x20, 0x43, 0x90, 0x17, 0xad, 0x31, 0x4b, 0xc0, 0x06, | ||
| 1568 | 0x03, 0x15, 0x81, 0x1f, 0x84, 0x81, 0xb0, 0x06, 0x83, 0x0c, 0x81, 0x5f, | ||
| 1569 | 0xbc, 0xc6, 0x2c, 0x41, 0x1b, 0x0c, 0xb4, 0x04, 0x3c, 0x62, 0xf0, 0x88, | ||
| 1570 | 0xc4, 0x23, 0x9f, 0x2c, 0xb0, 0x01, 0x8f, 0x80, 0xc1, 0x40, 0x4b, 0x80, | ||
| 1571 | 0x22, 0x86, 0x5e, 0x48, 0xe6, 0xf0, 0x11, 0x6c, 0xc0, 0x2f, 0x60, 0x30, | ||
| 1572 | 0xc8, 0x10, 0x08, 0xb1, 0x91, 0x41, 0x40, 0x0c, 0x00, 0x12, 0x00, 0x00, | ||
| 1573 | 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x83, 0x11, 0x84, 0xc3, 0x96, | ||
| 1574 | 0x21, 0x0b, 0xc4, 0x61, 0xcb, 0xe0, 0x05, 0xe3, 0xb0, 0x65, 0x00, 0x83, | ||
| 1575 | 0x80, 0x1c, 0xb6, 0x0c, 0x69, 0x10, 0x94, 0xc3, 0x96, 0xc1, 0x0d, 0x02, | ||
| 1576 | 0x73, 0xd8, 0x32, 0xd4, 0x41, 0x70, 0x0e, 0x5b, 0x86, 0x3b, 0x08, 0xcc, | ||
| 1577 | 0x61, 0xcb, 0xb0, 0x0e, 0xc1, 0x39, 0x6c, 0x19, 0xda, 0x21, 0x30, 0x87, | ||
| 1578 | 0x2d, 0x43, 0x5a, 0x04, 0xe7, 0xb0, 0x65, 0x58, 0x8b, 0xc0, 0x1c, 0x00, | ||
| 1579 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x73, 0x00, 0x00, | ||
| 1580 | 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, | ||
| 1581 | 0x00, 0x14, 0xce, 0x00, 0x10, 0x5a, 0x02, 0x45, 0x40, 0xeb, 0x58, 0x03, | ||
| 1582 | 0x10, 0x08, 0x23, 0x00, 0xc4, 0xce, 0x41, 0x40, 0x4e, 0x83, 0x06, 0x04, | ||
| 1583 | 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, | ||
| 1584 | 0x08, 0x06, 0x23, 0x00, 0x14, 0xcc, 0x00, 0xcc, 0x00, 0x50, 0x33, 0x03, | ||
| 1585 | 0x30, 0xd6, 0xc0, 0xb2, 0x67, 0x28, 0x7f, 0xa8, 0x5f, 0xc6, 0xea, 0x97, | ||
| 1586 | 0x9f, 0xba, 0x38, 0x7b, 0x63, 0x0d, 0x7a, 0x0d, 0xee, 0xb8, 0xa7, 0xe2, | ||
| 1587 | 0xb9, 0x6d, 0x7f, 0x6f, 0x9f, 0xd2, 0xa3, 0x37, 0xd6, 0xb0, 0xce, 0x31, | ||
| 1588 | 0x8b, 0x7a, 0x69, 0x08, 0xa3, 0xbb, 0x77, 0xb7, 0xb1, 0x6a, 0x7f, 0x63, | ||
| 1589 | 0x0d, 0x62, 0x2e, 0xa6, 0xfd, 0x07, 0x96, 0x3c, 0x1b, 0xff, 0xc2, 0x98, | ||
| 1590 | 0xae, 0x6a, 0xee, 0x0b, 0x63, 0x0d, 0xff, 0x4c, 0xfa, 0xbf, 0x2f, 0xd0, | ||
| 1591 | 0x35, 0x28, 0xe6, 0x5f, 0x0b, 0xc7, 0x31, 0xe8, 0x0b, 0x63, 0x0d, 0x73, | ||
| 1592 | 0xdf, 0xa6, 0xa9, 0x2f, 0xb4, 0x6e, 0xc8, 0xf3, 0xbe, 0xc0, 0xe7, 0xac, | ||
| 1593 | 0x8f, 0x7f, 0x00, 0x00, 0x00, 0x83, 0x0c, 0xd7, 0xd1, 0x0c, 0x47, 0x58, | ||
| 1594 | 0x4d, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0xcc, 0x31, 0x24, 0x96, 0x18, | ||
| 1595 | 0x0c, 0x32, 0x04, 0x4a, 0x64, 0xc1, 0x26, 0xfe, 0x83, 0x0c, 0x01, 0x23, | ||
| 1596 | 0xcd, 0x12, 0x24, 0xc3, 0x11, 0x5b, 0x14, 0xf8, 0xc7, 0x2c, 0xc3, 0x90, | ||
| 1597 | 0x04, 0xc3, 0x11, 0x9d, 0x14, 0xf8, 0xc7, 0x2c, 0x03, 0x51, 0x04, 0x23, | ||
| 1598 | 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x17, 0x1f, 0x7c, 0xce, 0x1c, | ||
| 1599 | 0x43, 0x14, 0xa4, 0xc1, 0x88, 0xc1, 0x81, 0x84, 0x20, 0x58, 0xf8, 0xc7, | ||
| 1600 | 0xe5, 0x07, 0x61, 0xf0, 0xcc, 0x31, 0x08, 0x01, 0x37, 0x62, 0x70, 0x20, | ||
| 1601 | 0x21, 0x08, 0x16, 0xfe, 0x71, 0x81, 0xc2, 0x18, 0x40, 0x73, 0x0c, 0x42, | ||
| 1602 | 0xd0, 0xcd, 0x12, 0x14, 0x03, 0x15, 0x81, 0x40, 0x70, 0xc3, 0x18, 0x42, | ||
| 1603 | 0xf0, 0x06, 0x63, 0x08, 0x42, 0x18, 0x8c, 0x21, 0x0c, 0x61, 0x30, 0x62, | ||
| 1604 | 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x01, 0x91, 0x82, 0x10, 0x8c, 0x18, | ||
| 1605 | 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x40, 0xa5, 0x40, 0x04, 0xc3, 0x11, | ||
| 1606 | 0x81, 0x27, 0xf8, 0xc7, 0x2c, 0x83, 0x71, 0x04, 0x83, 0x0c, 0x87, 0x47, | ||
| 1607 | 0x06, 0x36, 0xa8, 0x81, 0xf8, 0x5b, 0x30, 0x06, 0xe0, 0x6f, 0xc5, 0x1a, | ||
| 1608 | 0x88, 0xbf, 0x05, 0x65, 0x00, 0xfe, 0x36, 0x04, 0xe4, 0x3f, 0xc7, 0x20, | ||
| 1609 | 0x06, 0xc1, 0x1e, 0x0c, 0x32, 0x04, 0x63, 0xa0, 0x06, 0x16, 0x20, 0xe2, | ||
| 1610 | 0x3f, 0xc8, 0x10, 0x94, 0xc1, 0x1a, 0xcc, 0x12, 0x1c, 0x03, 0x15, 0x81, | ||
| 1611 | 0x60, 0x88, 0x41, 0x31, 0xcb, 0x80, 0x24, 0xd9, 0x20, 0x43, 0x90, 0x06, | ||
| 1612 | 0x6f, 0x30, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x71, 0xd5, 0x42, | ||
| 1613 | 0x40, 0x06, 0x73, 0x0c, 0x6a, 0x10, 0x88, 0xc2, 0x88, 0xc1, 0x81, 0x84, | ||
| 1614 | 0x20, 0x58, 0xf8, 0xc7, 0x75, 0x0b, 0x43, 0x19, 0xcc, 0x31, 0x08, 0x41, | ||
| 1615 | 0x1d, 0x8c, 0x18, 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x5c, 0xb9, 0x50, | ||
| 1616 | 0x98, 0xc1, 0x1c, 0x83, 0x10, 0xd8, 0xc1, 0x2c, 0x41, 0x32, 0x50, 0x12, | ||
| 1617 | 0x90, 0x42, 0xe0, 0x0a, 0x82, 0x80, 0x40, 0xc7, 0x20, 0x43, 0x10, 0x07, | ||
| 1618 | 0x77, 0x90, 0x01, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 1619 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xeb, 0x08, 0x18, 0xb0, 0x9a, | ||
| 1620 | 0x80, 0x07, 0x90, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, | ||
| 1621 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0x30, 0x03, 0x00, 0x00, | ||
| 1622 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 1623 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 1624 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1625 | 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, | ||
| 1626 | 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1627 | 0x00, 0x46, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, | ||
| 1628 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1629 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1630 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1631 | 0xff, 0x00, 0x24, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 1632 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1633 | 0xff, 0x00, 0x30, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 1634 | 0x00, 0x49, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1635 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 1636 | 0x00, 0x5d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1637 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1638 | 0x00, 0x6d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1639 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 1640 | 0x00, 0x7e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1641 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1642 | 0x00, 0x94, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1643 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, | ||
| 1644 | 0x00, 0xa1, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1645 | 0xff, 0x00, 0x30, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1646 | 0x00, 0xba, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1647 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1648 | 0x00, 0xcb, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1649 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1650 | 0x00, 0xdd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1651 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1652 | 0x00, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1653 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, | ||
| 1654 | 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1655 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, | ||
| 1656 | 0x00, 0x55, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0xa6, 0x02, 0x00, 0x00, | ||
| 1657 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, | ||
| 1658 | 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x5a, 0x31, 0x34, 0x47, 0x65, | ||
| 1659 | 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 1660 | 0x44, 0x76, 0x34, 0x5f, 0x66, 0x52, 0x55, 0x31, 0x31, 0x4d, 0x54, 0x4c, | ||
| 1661 | 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x4b, 0x31, 0x35, 0x53, | ||
| 1662 | 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, | ||
| 1663 | 0x74, 0x73, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, | ||
| 1664 | 0x6c, 0x61, 0x6d, 0x70, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, | ||
| 1665 | 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x66, | ||
| 1666 | 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, | ||
| 1667 | 0x61, 0x62, 0x73, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 1668 | 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x2e, 0x75, 0x2e, 0x69, 0x31, 0x2e, | ||
| 1669 | 0x66, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x64, 0x6f, 0x74, | ||
| 1670 | 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x5f, 0x5a, 0x31, 0x32, 0x41, 0x70, | ||
| 1671 | 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x44, 0x76, | ||
| 1672 | 0x33, 0x5f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 1673 | 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x33, 0x32, | ||
| 1674 | 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, | ||
| 1675 | 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 1676 | 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, 0x76, 0x33, 0x66, 0x33, | ||
| 1677 | 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, | ||
| 1678 | 0x61, 0x78, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, | ||
| 1679 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, | ||
| 1680 | 0x72, 0x65, 0x5f, 0x32, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x33, | ||
| 1681 | 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, 0x72, 0x36, | ||
| 1682 | 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, 0x69, 0x6f, 0x73, 0x31, | ||
| 1683 | 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, | ||
| 1684 | 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1685 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 1686 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x21, 0x00, | ||
| 1687 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, | ||
| 1688 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, | ||
| 1689 | 0xc8, 0x14, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0xa8, 0x07, 0x00, | ||
| 1690 | 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1691 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 1692 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 1693 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 1694 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, | ||
| 1695 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, | ||
| 1696 | 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 1697 | 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x6e, 0x01, 0x00, | ||
| 1698 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, | ||
| 1699 | 0x40, 0x02, 0x2a, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, | ||
| 1700 | 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1701 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1702 | 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, | ||
| 1703 | 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, | ||
| 1704 | 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, | ||
| 1705 | 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1706 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 1707 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 1708 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 1709 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, | ||
| 1710 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, | ||
| 1711 | 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, | ||
| 1712 | 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, | ||
| 1713 | 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 1714 | 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, | ||
| 1715 | 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, | ||
| 1716 | 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, | ||
| 1717 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, | ||
| 1718 | 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 1719 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1720 | 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, | ||
| 1721 | 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, | ||
| 1722 | 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, | ||
| 1723 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 1724 | 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, | ||
| 1725 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1726 | 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, | ||
| 1727 | 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 1728 | 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 1729 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, | ||
| 1730 | 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, | ||
| 1731 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 1732 | 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0xe0, 0x09, 0x04, 0xb0, 0x00, 0x55, 0x90, | ||
| 1733 | 0x06, 0x60, 0x30, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, | ||
| 1734 | 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 1735 | 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0xc1, 0x1b, 0x0a, | ||
| 1736 | 0x60, 0x01, 0xaa, 0x20, 0x0d, 0x40, 0x61, 0x08, 0x87, 0x74, 0x90, 0x87, | ||
| 1737 | 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x03, | ||
| 1738 | 0x77, 0x78, 0x87, 0x36, 0x08, 0x07, 0x76, 0x48, 0x87, 0x70, 0x98, 0x07, | ||
| 1739 | 0x60, 0x83, 0x41, 0x18, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x02, 0x01, 0x16, | ||
| 1740 | 0xa0, 0xda, 0x10, 0x26, 0xc6, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0x1a, | ||
| 1741 | 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, | ||
| 1742 | 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, | ||
| 1743 | 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, | ||
| 1744 | 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, | ||
| 1745 | 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, | ||
| 1746 | 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, | ||
| 1747 | 0xa0, 0x03, 0x10, 0x07, 0x72, 0x80, 0x07, 0xc0, 0xe0, 0x0e, 0xef, 0xd0, | ||
| 1748 | 0x06, 0xe2, 0x50, 0x0f, 0xe9, 0xc0, 0x0e, 0xf4, 0x90, 0x0e, 0xee, 0x30, | ||
| 1749 | 0x0f, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, | ||
| 1750 | 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, | ||
| 1751 | 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x00, 0x3d, | ||
| 1752 | 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x39, | ||
| 1753 | 0xc8, 0x43, 0x38, 0xb4, 0x43, 0x39, 0xb4, 0x01, 0x3c, 0xbc, 0x43, 0x3a, | ||
| 1754 | 0xb8, 0x03, 0x3d, 0x94, 0x83, 0x3c, 0xb4, 0x41, 0x39, 0xb0, 0x43, 0x3a, | ||
| 1755 | 0xb4, 0x43, 0x1b, 0xb8, 0xc3, 0x3b, 0xb8, 0x43, 0x1b, 0xb0, 0x43, 0x39, | ||
| 1756 | 0x84, 0x83, 0x39, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, | ||
| 1757 | 0x0e, 0xef, 0xd0, 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, | ||
| 1758 | 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, | ||
| 1759 | 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, | ||
| 1760 | 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, | ||
| 1761 | 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, | ||
| 1762 | 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, 0x70, 0x0e, 0xee, 0x50, | ||
| 1763 | 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, | ||
| 1764 | 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, | ||
| 1765 | 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 1766 | 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, 0x3a, 0xb8, 0xc3, 0x39, | ||
| 1767 | 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, | ||
| 1768 | 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, 0xeb, 0xd0, | ||
| 1769 | 0x06, 0xf0, 0x20, 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, | ||
| 1770 | 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, | ||
| 1771 | 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, | ||
| 1772 | 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, | ||
| 1773 | 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, | ||
| 1774 | 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0x86, 0xe4, 0x10, 0x80, 0x05, 0xa8, 0x82, | ||
| 1775 | 0x34, 0x00, 0x83, 0x0d, 0x06, 0xf2, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 1776 | 0x01, 0xd4, 0x06, 0x1f, 0x49, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x24, | ||
| 1777 | 0xa0, 0x22, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, | ||
| 1778 | 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, | ||
| 1779 | 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1780 | 0x72, 0x00, 0x88, 0x76, 0x48, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 1781 | 0x73, 0x08, 0x07, 0x76, 0x68, 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, | ||
| 1782 | 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, 0x07, 0x7a, 0x40, 0x07, | ||
| 1783 | 0x20, 0x0f, 0xec, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1c, 0xea, | ||
| 1784 | 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, 0x01, 0x20, 0xdc, | ||
| 1785 | 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, | ||
| 1786 | 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, | ||
| 1787 | 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1788 | 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, | ||
| 1789 | 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, | ||
| 1790 | 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, | ||
| 1791 | 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, | ||
| 1792 | 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1793 | 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, | ||
| 1794 | 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1795 | 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, | ||
| 1796 | 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, | ||
| 1797 | 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, | ||
| 1798 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, | ||
| 1799 | 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1800 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1801 | 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, | ||
| 1802 | 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, | ||
| 1803 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1804 | 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, | ||
| 1805 | 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, | ||
| 1806 | 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, | ||
| 1807 | 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, 0x7a, 0x70, 0x87, | ||
| 1808 | 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, | ||
| 1809 | 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, | ||
| 1810 | 0x01, 0xd8, 0xa0, 0x28, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x6d, 0x00, | ||
| 1811 | 0xac, 0x01, 0x20, 0x01, 0xd5, 0x06, 0x63, 0x09, 0x80, 0x05, 0xa8, 0x36, | ||
| 1812 | 0x18, 0x8c, 0x00, 0x2c, 0x40, 0xb5, 0x41, 0x69, 0xfe, 0xff, 0xff, 0xff, | ||
| 1813 | 0x7f, 0x00, 0xda, 0x00, 0x58, 0x03, 0x40, 0x02, 0xaa, 0x0d, 0x86, 0xf3, | ||
| 1814 | 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd4, 0x86, 0xe9, 0xf9, 0xff, | ||
| 1815 | 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, 0x40, 0x19, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1816 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 1817 | 0x01, 0xd8, 0x50, 0x40, 0x42, 0x90, 0x06, 0x60, 0xb0, 0x21, 0x8a, 0xfe, | ||
| 1818 | 0xff, 0xff, 0xff, 0x7f, 0x00, 0x94, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, 0xc4, | ||
| 1819 | 0xa1, 0x1e, 0xd2, 0x81, 0x1d, 0xe8, 0x21, 0x1d, 0xdc, 0x61, 0x1e, 0x00, | ||
| 1820 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, | ||
| 1821 | 0x18, 0x88, 0x62, 0x82, 0x60, 0x1c, 0x13, 0x02, 0x64, 0x42, 0x90, 0x4c, | ||
| 1822 | 0x18, 0x94, 0x85, 0x99, 0x30, 0x34, 0x0b, 0x33, 0x21, 0x70, 0x26, 0x08, | ||
| 1823 | 0x0f, 0x34, 0x21, 0x88, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, | ||
| 1824 | 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, | ||
| 1825 | 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, | ||
| 1826 | 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xe0, 0xc1, 0x0c, 0xc0, 0x30, 0x02, | ||
| 1827 | 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, | ||
| 1828 | 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, | ||
| 1829 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, 0x41, 0x18, 0x46, 0x18, | ||
| 1830 | 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, | ||
| 1831 | 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, | ||
| 1832 | 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, | ||
| 1833 | 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, 0xec, 0xbe, 0x1d, 0x21, | ||
| 1834 | 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, 0x84, 0xa3, 0xa4, 0x29, | ||
| 1835 | 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0xf8, 0xed, 0xe1, | ||
| 1836 | 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0x38, 0x4d, 0x9a, 0x22, 0x4a, | ||
| 1837 | 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, 0xdf, 0x1e, 0x7e, 0x20, | ||
| 1838 | 0x8a, 0x00, 0xec, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x26, 0xb8, 0x48, | ||
| 1839 | 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, 0x7f, | ||
| 1840 | 0x1a, 0x23, 0x00, 0x06, 0x11, 0x1c, 0xa1, 0x24, 0x41, 0x10, 0x08, 0x44, | ||
| 1841 | 0xb2, 0x34, 0x0f, 0x41, 0x65, 0x08, 0x02, 0x82, 0xa4, 0x42, 0x14, 0x45, | ||
| 1842 | 0x51, 0x10, 0x55, 0x06, 0x00, 0x00, 0xc8, 0x2a, 0x02, 0x00, 0x10, 0x36, | ||
| 1843 | 0x47, 0x10, 0x14, 0x41, 0x03, 0x68, 0x2b, 0x03, 0x50, 0x14, 0xd4, 0x15, | ||
| 1844 | 0xa3, 0x28, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x43, 0x51, 0x14, 0x14, 0x16, | ||
| 1845 | 0xa1, 0x28, 0x68, 0x9c, 0x23, 0x40, 0x8c, 0x10, 0x94, 0x73, 0x04, 0x60, | ||
| 1846 | 0x30, 0x8c, 0x20, 0x9c, 0x41, 0x59, 0xcc, 0xe6, 0x11, 0x4e, 0x0d, 0xd5, | ||
| 1847 | 0x00, 0xe0, 0xa4, 0xb4, 0x28, 0xe6, 0xf2, 0x08, 0x1a, 0xaa, 0x01, 0xc0, | ||
| 1848 | 0x49, 0xeb, 0x40, 0x40, 0x0a, 0x9c, 0x73, 0x04, 0xa0, 0x30, 0x8c, 0x30, | ||
| 1849 | 0x9c, 0xc1, 0x20, 0x42, 0x20, 0x0c, 0x22, 0x1c, 0xc2, 0x20, 0x42, 0x21, | ||
| 1850 | 0x8c, 0x00, 0x0c, 0x22, 0x00, 0xc2, 0x14, 0xc0, 0x30, 0x02, 0x71, 0x06, | ||
| 1851 | 0x00, 0x13, 0xbe, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 1852 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 1853 | 0x79, 0x88, 0x83, 0x39, 0x70, 0x03, 0x38, 0x70, 0x03, 0x38, 0x68, 0x83, | ||
| 1854 | 0x79, 0x48, 0x87, 0x76, 0xa8, 0x07, 0x76, 0x08, 0x07, 0x7a, 0x78, 0x07, | ||
| 1855 | 0x79, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, | ||
| 1856 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, | ||
| 1857 | 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, | ||
| 1858 | 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, | ||
| 1859 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, | ||
| 1860 | 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, | ||
| 1861 | 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 1862 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1863 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, | ||
| 1864 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 1865 | 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 1866 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 1867 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1868 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, | ||
| 1869 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, | ||
| 1870 | 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1871 | 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, | ||
| 1872 | 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, | ||
| 1873 | 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 1874 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, | ||
| 1875 | 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, | ||
| 1876 | 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 1877 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, | ||
| 1878 | 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, | ||
| 1879 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, | ||
| 1880 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 1881 | 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, | ||
| 1882 | 0x07, 0x72, 0xa0, 0x11, 0xc2, 0x90, 0x10, 0xdb, 0x95, 0xbf, 0xec, 0xbe, | ||
| 1883 | 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0xd3, 0x90, 0x08, 0x80, 0x20, 0x00, | ||
| 1884 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x12, 0x41, | ||
| 1885 | 0x78, 0x20, 0x21, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 1886 | 0xc0, 0x90, 0x08, 0x15, 0x28, 0x0a, 0x08, 0x80, 0x01, 0x00, 0x00, 0x40, | ||
| 1887 | 0x00, 0x00, 0x00, 0x00, 0x86, 0x44, 0xbc, 0x00, 0x59, 0x40, 0x00, 0x0c, | ||
| 1888 | 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x24, 0x62, 0x87, 0x08, | ||
| 1889 | 0x03, 0x02, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, | ||
| 1890 | 0x51, 0x3f, 0x58, 0x1b, 0x10, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, | ||
| 1891 | 0x00, 0x00, 0x0c, 0x89, 0x66, 0xa2, 0xe9, 0x80, 0x00, 0x18, 0x00, 0x00, | ||
| 1892 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x48, 0x04, 0x16, 0xd9, 0x87, 0x00, | ||
| 1893 | 0x03, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x43, 0xa2, 0xbc, | ||
| 1894 | 0x88, 0x2c, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 1895 | 0x18, 0x12, 0xa9, 0x86, 0x14, 0x06, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 1896 | 0x02, 0x00, 0x00, 0x00, 0x30, 0x24, 0xe2, 0x8d, 0x69, 0x0c, 0x80, 0x00, | ||
| 1897 | 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x48, 0xf4, 0x1e, | ||
| 1898 | 0x53, 0x18, 0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 1899 | 0xc0, 0x90, 0x48, 0x44, 0xc2, 0x20, 0x0d, 0x80, 0x00, 0x28, 0x00, 0x00, | ||
| 1900 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x48, 0x34, 0x26, 0xdb, 0x1a, 0x00, | ||
| 1901 | 0x01, 0x50, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0xc4, 0x06, | ||
| 1902 | 0x81, 0xa2, 0xa9, 0x07, 0x00, 0x00, 0x59, 0x20, 0x00, 0x10, 0x00, 0x00, | ||
| 1903 | 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 1904 | 0x47, 0xc6, 0x04, 0x43, 0x3a, 0x8b, 0xa0, 0x04, 0x0a, 0x61, 0x04, 0xa0, | ||
| 1905 | 0x0c, 0x0a, 0xa8, 0x20, 0x0a, 0xa3, 0x40, 0x0a, 0xa5, 0x60, 0x0a, 0xa7, | ||
| 1906 | 0x00, 0x03, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, 0xe8, 0x1d, 0x01, 0x28, | ||
| 1907 | 0x84, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0x72, 0xc7, | ||
| 1908 | 0x12, 0x24, 0x01, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 1909 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 1910 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 1911 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 1912 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 1913 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 1914 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 1915 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 1916 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 1917 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 1918 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 1919 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 1920 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 1921 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 1922 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 1923 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 1924 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 1925 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 1926 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 1927 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 1928 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 1929 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 1930 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 1931 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 1932 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 1933 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 1934 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 1935 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 1936 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 1937 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 1938 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 1939 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 1940 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 1941 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 1942 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 1943 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 1944 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 1945 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 1946 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 1947 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 1948 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 1949 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 1950 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 1951 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 1952 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 1953 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 1954 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 1955 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 1956 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 1957 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 1958 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 1959 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 1960 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 1961 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 1962 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 1963 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 1964 | 0x00, 0x79, 0x20, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 1965 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 1966 | 0xee, 0x80, 0x0d, 0x6a, 0x0c, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x41, | ||
| 1967 | 0x14, 0x19, 0x8c, 0x22, 0x31, 0x88, 0x64, 0x3d, 0x45, 0x66, 0x20, 0xca, | ||
| 1968 | 0x23, 0x21, 0x54, 0xc1, 0x30, 0xca, 0xe2, 0x3c, 0xcf, 0x13, 0x5d, 0x4f, | ||
| 1969 | 0x60, 0x18, 0x88, 0x91, 0x18, 0x8b, 0x82, 0x11, 0x5e, 0xb1, 0x1c, 0x01, | ||
| 1970 | 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, | ||
| 1971 | 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x70, | ||
| 1972 | 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x20, 0x76, 0x65, | ||
| 1973 | 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, | ||
| 1974 | 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x66, 0x65, | ||
| 1975 | 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x29, 0x4d, | ||
| 1976 | 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, | ||
| 1977 | 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, | ||
| 1978 | 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 1979 | 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, | ||
| 1980 | 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 1981 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 1982 | 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, | ||
| 1983 | 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 1984 | 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, | ||
| 1985 | 0x72, 0x67, 0x65, 0x74, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, | ||
| 1986 | 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, | ||
| 1987 | 0x61, 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, | ||
| 1988 | 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, | ||
| 1989 | 0x72, 0x61, 0x69, 0x72, 0x2e, 0x6e, 0x6f, 0x5f, 0x70, 0x65, 0x72, 0x73, | ||
| 1990 | 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, | ||
| 1991 | 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, | ||
| 1992 | 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d, | ||
| 1993 | 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, | ||
| 1994 | 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, | ||
| 1995 | 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, 0x61, 0x69, 0x72, 0x2e, 0x70, | ||
| 1996 | 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, | ||
| 1997 | 0x6c, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, | ||
| 1998 | 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x44, 0x76, | ||
| 1999 | 0x32, 0x5f, 0x66, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x74, 0x65, | ||
| 2000 | 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, | ||
| 2001 | 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, | ||
| 2002 | 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x6c, | ||
| 2003 | 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, | ||
| 2004 | 0x78, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, 0x72, | ||
| 2005 | 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 2006 | 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x73, 0x63, | ||
| 2007 | 0x52, 0x47, 0x42, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x74, 0x65, | ||
| 2008 | 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, | ||
| 2009 | 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x63, 0x6f, 0x6c, 0x6f, | ||
| 2010 | 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x65, 0x6d, | ||
| 2011 | 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x74, 0x6f, 0x6e, | ||
| 2012 | 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x31, | ||
| 2013 | 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, | ||
| 2014 | 0x6f, 0x72, 0x32, 0x73, 0x64, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, | ||
| 2015 | 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, | ||
| 2016 | 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, | ||
| 2017 | 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, | ||
| 2018 | 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x53, 0x68, | ||
| 2019 | 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, | ||
| 2020 | 0x73, 0x63, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x6f, 0x66, 0x66, 0x73, | ||
| 2021 | 0x65, 0x74, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x6d, 0x61, | ||
| 2022 | 0x74, 0x72, 0x69, 0x78, 0x59, 0x55, 0x56, 0x44, 0x65, 0x63, 0x6f, 0x64, | ||
| 2023 | 0x65, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x74, | ||
| 2024 | 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, | ||
| 2025 | 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, | ||
| 2026 | 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, 0x73, 0x61, 0x6d, | ||
| 2027 | 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x59, 0x74, 0x65, 0x78, 0x74, | ||
| 2028 | 0x75, 0x72, 0x65, 0x32, 0x64, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3c, | ||
| 2029 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, | ||
| 2030 | 0x65, 0x3e, 0x74, 0x65, 0x78, 0x55, 0x56, 0x61, 0x69, 0x72, 0x2e, 0x73, | ||
| 2031 | 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, | ||
| 2032 | 0x72, 0x73, 0x00, 0x00, 0x00, 0xe4, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2033 | 0x00, 0x30, 0x82, 0x70, 0x06, 0xce, 0x08, 0x82, 0x1b, 0x9c, 0xc1, 0x08, | ||
| 2034 | 0xc2, 0x19, 0x3c, 0x23, 0x08, 0x67, 0x00, 0x8d, 0x20, 0x9c, 0x41, 0x34, | ||
| 2035 | 0x82, 0x10, 0x01, 0x23, 0x08, 0x67, 0x20, 0x8d, 0x20, 0x9c, 0xc1, 0x34, | ||
| 2036 | 0x82, 0x70, 0x06, 0xd4, 0x08, 0xc2, 0x19, 0x54, 0x23, 0x08, 0x67, 0x60, | ||
| 2037 | 0x8d, 0x20, 0x9c, 0xc1, 0x35, 0x82, 0x70, 0x06, 0xd8, 0x08, 0xc2, 0x19, | ||
| 2038 | 0x64, 0x23, 0x08, 0x67, 0xa0, 0x8d, 0x20, 0x9c, 0xc1, 0x36, 0x82, 0x70, | ||
| 2039 | 0x06, 0xdc, 0x08, 0xc2, 0x19, 0x74, 0x23, 0x08, 0x67, 0xe0, 0xcd, 0x30, | ||
| 2040 | 0xe0, 0x41, 0x90, 0x07, 0x33, 0x0c, 0x7a, 0x20, 0xec, 0xc1, 0x0c, 0xc1, | ||
| 2041 | 0x30, 0xc3, 0x80, 0x07, 0x78, 0xc0, 0x07, 0x33, 0x10, 0x84, 0x1e, 0xe8, | ||
| 2042 | 0x01, 0x1f, 0xcc, 0x10, 0x14, 0x33, 0x04, 0xc6, 0x0c, 0xc1, 0x31, 0x43, | ||
| 2043 | 0x81, 0xf0, 0x01, 0x1f, 0x24, 0xca, 0x0c, 0xc1, 0x2c, 0xcc, 0x80, 0xf0, | ||
| 2044 | 0xc1, 0xc2, 0x34, 0x89, 0xe2, 0x3c, 0x33, 0x24, 0x7a, 0x00, 0x45, 0x8c, | ||
| 2045 | 0x94, 0x28, 0xce, 0x34, 0x43, 0x82, 0x07, 0x10, 0xc5, 0x48, 0x49, 0xe5, | ||
| 2046 | 0x58, 0x33, 0xa0, 0x01, 0x1f, 0xec, 0x01, 0x1f, 0x70, 0xdd, 0x1e, 0xec, | ||
| 2047 | 0x01, 0x1f, 0x70, 0x1e, 0x28, 0xec, 0x01, 0x1f, 0x70, 0x5f, 0x28, 0xec, | ||
| 2048 | 0x01, 0x1f, 0x70, 0x60, 0x20, 0x0a, 0x7b, 0xc0, 0x07, 0x5c, 0x18, 0x8c, | ||
| 2049 | 0xc2, 0x1e, 0xf0, 0x01, 0x27, 0x06, 0xa4, 0xb0, 0x07, 0x7c, 0xc0, 0x8d, | ||
| 2050 | 0x41, 0x29, 0xec, 0x01, 0x1f, 0x70, 0x64, 0x30, 0x83, 0xe4, 0x07, 0x17, | ||
| 2051 | 0xf6, 0x07, 0x19, 0x1f, 0xe8, 0x81, 0xb6, 0xe1, 0x42, 0x19, 0xfc, 0x81, | ||
| 2052 | 0x19, 0xec, 0x41, 0x72, 0x06, 0x0e, 0x1a, 0xcc, 0xa0, 0xf0, 0x81, 0x28, | ||
| 2053 | 0xf0, 0x41, 0x1a, 0xa8, 0x81, 0x28, 0x9c, 0x02, 0x1f, 0xac, 0x01, 0x1b, | ||
| 2054 | 0xcc, 0x20, 0xed, 0xc1, 0x85, 0x99, 0x42, 0xa6, 0x07, 0x7a, 0xa0, 0x6d, | ||
| 2055 | 0xba, 0x50, 0x06, 0xa6, 0x60, 0x06, 0xa2, 0x90, 0xb4, 0x81, 0xe3, 0x06, | ||
| 2056 | 0x33, 0x28, 0xa8, 0xf0, 0x06, 0x19, 0x1f, 0xe8, 0x01, 0x1c, 0x24, 0x71, | ||
| 2057 | 0xe0, 0xc8, 0xc1, 0x0c, 0x4a, 0x2a, 0xbc, 0x41, 0xa6, 0x07, 0x7a, 0x00, | ||
| 2058 | 0x07, 0xc9, 0x1c, 0x38, 0x74, 0x30, 0x43, 0xa2, 0x0a, 0x75, 0x90, 0xf1, | ||
| 2059 | 0x81, 0x1e, 0x24, 0x76, 0xe0, 0xdc, 0xc1, 0x0c, 0x48, 0x2d, 0xd8, 0xc2, | ||
| 2060 | 0x2d, 0xe4, 0xc2, 0x2e, 0xf0, 0x42, 0x2f, 0xf8, 0xc2, 0x0c, 0x43, 0x1f, | ||
| 2061 | 0xd0, 0xc2, 0x2f, 0x54, 0x1a, 0x00, 0x62, 0x80, 0x06, 0x62, 0x20, 0x06, | ||
| 2062 | 0x62, 0xc0, 0x89, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, | ||
| 2063 | 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x1b, 0xb8, | ||
| 2064 | 0x81, 0x45, 0x07, 0x7a, 0x60, 0x59, 0x96, 0x1e, 0x70, 0xa6, 0xc0, 0x0a, | ||
| 2065 | 0xac, 0x40, 0x37, 0x7e, 0x81, 0x12, 0x7e, 0x61, 0x0f, 0xf6, 0xa0, 0x0e, | ||
| 2066 | 0xf0, 0x20, 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, 0xcd, 0xae, 0xcd, 0xa5, | ||
| 2067 | 0xed, 0x8d, 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, | ||
| 2068 | 0x14, 0x41, 0x15, 0x56, 0xe1, 0x14, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, | ||
| 2069 | 0xb2, 0x32, 0x37, 0xba, 0x51, 0x02, 0x56, 0xb8, 0x25, 0x2c, 0x4d, 0xce, | ||
| 2070 | 0xc5, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x94, 0xa0, 0x15, 0x8e, | ||
| 2071 | 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, 0xab, 0x0b, 0x3b, 0x2b, | ||
| 2072 | 0xfb, 0xb2, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0x70, 0x85, | ||
| 2073 | 0x9b, 0xc2, 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, 0xe0, 0xd2, 0xd8, 0xca, | ||
| 2074 | 0xbe, 0xde, 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0x46, 0x19, 0x5e, 0x01, | ||
| 2075 | 0x16, 0x62, 0xe1, 0x98, 0xb0, 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, | ||
| 2076 | 0xb6, 0x32, 0x37, 0xba, 0x51, 0x82, 0x5f, 0x00, 0x00, 0xa9, 0x18, 0x00, | ||
| 2077 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, | ||
| 2078 | 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, | ||
| 2079 | 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, | ||
| 2080 | 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 2081 | 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, | ||
| 2082 | 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, | ||
| 2083 | 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, | ||
| 2084 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, | ||
| 2085 | 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, | ||
| 2086 | 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, | ||
| 2087 | 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, | ||
| 2088 | 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, | ||
| 2089 | 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, | ||
| 2090 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, | ||
| 2091 | 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, | ||
| 2092 | 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x8c, 0x00, 0x00, | ||
| 2093 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, | ||
| 2094 | 0x00, 0xa4, 0xd5, 0xc0, 0x08, 0x00, 0x9d, 0x33, 0x00, 0x84, 0x8e, 0x00, | ||
| 2095 | 0xd0, 0x5b, 0x02, 0x45, 0x40, 0xf0, 0x58, 0x03, 0x10, 0x08, 0x73, 0x0c, | ||
| 2096 | 0x91, 0x1c, 0xc8, 0x01, 0x01, 0x23, 0x00, 0x33, 0x00, 0x63, 0x04, 0x20, | ||
| 2097 | 0x08, 0x82, 0xf8, 0x47, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x1c, 0x44, 0x1e, | ||
| 2098 | 0xe4, 0x41, 0x1e, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x30, 0x00, | ||
| 2099 | 0x00, 0x32, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0x88, | ||
| 2100 | 0x49, 0x00, 0x00, 0x00, 0x00, 0x62, 0x80, 0x61, 0x96, 0x05, 0x00, 0x00, | ||
| 2101 | 0x00, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, | ||
| 2102 | 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, 0x59, 0x55, | ||
| 2103 | 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x61, | ||
| 2104 | 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, | ||
| 2105 | 0x70, 0x65, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, | ||
| 2106 | 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, | ||
| 2107 | 0x70, 0x65, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x73, 0x61, | ||
| 2108 | 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, | ||
| 2109 | 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x34, 0x29, 0x61, 0x69, 0x72, | ||
| 2110 | 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, | ||
| 2111 | 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x00, 0x00, 0x2b, 0x04, 0x73, | ||
| 2112 | 0x08, 0x87, 0x15, 0xc3, 0x39, 0x98, 0x83, 0x38, 0xac, 0x18, 0xd0, 0xc1, | ||
| 2113 | 0x1c, 0xc6, 0x61, 0xc5, 0x90, 0x0e, 0xe6, 0x40, 0x0e, 0x2b, 0x06, 0x75, | ||
| 2114 | 0x30, 0x87, 0x72, 0xd8, 0x20, 0xa0, 0xc3, 0x39, 0x6c, 0x10, 0xd4, 0x21, | ||
| 2115 | 0x1d, 0x36, 0x04, 0xe9, 0xb0, 0x61, 0x50, 0x07, 0x74, 0x38, 0x07, 0x00, | ||
| 2116 | 0x00, 0x23, 0x06, 0x8d, 0x11, 0x82, 0x60, 0xb0, 0x06, 0x71, 0x10, 0x3d, | ||
| 2117 | 0x94, 0xb3, 0x34, 0x86, 0xd1, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x62, 0xe0, | ||
| 2118 | 0x18, 0x21, 0x08, 0x06, 0x69, 0x40, 0x07, 0x52, 0x64, 0xbd, 0x01, 0xd4, | ||
| 2119 | 0x3c, 0x08, 0xf2, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x86, 0x10, 0x8c, 0xc1, | ||
| 2120 | 0x20, 0x03, 0x71, 0x30, 0x73, 0x0c, 0x81, 0x00, 0x8d, 0x18, 0x38, 0x46, | ||
| 2121 | 0x08, 0x82, 0x41, 0x1a, 0xe4, 0xc1, 0x65, 0x6d, 0x76, 0x50, 0x49, 0x54, | ||
| 2122 | 0xd3, 0xd0, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x21, 0x04, 0x68, 0x30, 0xc7, | ||
| 2123 | 0x40, 0x04, 0xd3, 0x75, 0xf1, 0x52, 0x10, 0x94, 0x41, 0x86, 0x00, 0xaa, | ||
| 2124 | 0x8c, 0x08, 0xc0, 0x7f, 0x23, 0x43, 0x18, 0xb8, 0x81, 0x1f, 0x5c, 0x10, | ||
| 2125 | 0x2f, 0x05, 0x41, 0x19, 0x64, 0x08, 0x2a, 0x6d, 0xc4, 0xe0, 0x38, 0x42, | ||
| 2126 | 0x10, 0x2c, 0xfc, 0xa3, 0x5b, 0x85, 0x22, 0xd8, 0x48, 0x61, 0x06, 0x73, | ||
| 2127 | 0x30, 0x0a, 0xa1, 0xe0, 0x5d, 0x10, 0x2f, 0x05, 0x41, 0x19, 0x64, 0x08, | ||
| 2128 | 0xb4, 0x6f, 0xc4, 0xe0, 0x38, 0x42, 0x10, 0x2c, 0xfc, 0xa3, 0x83, 0x05, | ||
| 2129 | 0x25, 0xd8, 0x48, 0xb1, 0x06, 0x78, 0x80, 0x0a, 0xa6, 0x20, 0x06, 0x17, | ||
| 2130 | 0xc4, 0x4b, 0x41, 0x50, 0x06, 0x19, 0x82, 0x8f, 0x0c, 0x46, 0x0c, 0x8e, | ||
| 2131 | 0x23, 0x04, 0xc1, 0xc2, 0x3f, 0xba, 0x5a, 0x78, 0x82, 0x39, 0x86, 0x6f, | ||
| 2132 | 0xe9, 0x83, 0x39, 0x86, 0xe0, 0x48, 0x83, 0x39, 0x86, 0x60, 0x48, 0x83, | ||
| 2133 | 0x11, 0x83, 0x03, 0x89, 0x41, 0xb0, 0xf0, 0x0f, 0xc9, 0x17, 0x02, 0x3a, | ||
| 2134 | 0xb0, 0xe0, 0x0e, 0xc4, 0x3f, 0x83, 0x80, 0x18, 0x00, 0x0d, 0x00, 0x00, | ||
| 2135 | 0x00, 0x5b, 0x0a, 0xe0, 0x50, 0x07, 0x64, 0x1d, 0xb6, 0x14, 0xc2, 0xa1, | ||
| 2136 | 0x0e, 0xc8, 0x3a, 0x6c, 0x29, 0x8e, 0x43, 0x1d, 0x90, 0x75, 0xd8, 0x52, | ||
| 2137 | 0x30, 0x07, 0x3b, 0x20, 0xed, 0xb0, 0xa5, 0x88, 0x0e, 0x76, 0x40, 0xda, | ||
| 2138 | 0x61, 0x4b, 0x61, 0x1d, 0xec, 0x80, 0xb4, 0xc3, 0x96, 0x62, 0x3b, 0xd8, | ||
| 2139 | 0x01, 0x69, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 2140 | 0x00, 0xe5, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, | ||
| 2141 | 0x00, 0x4f, 0x00, 0x00, 0x00, 0x74, 0xce, 0x00, 0xd0, 0x5b, 0x02, 0x45, | ||
| 2142 | 0x40, 0xf0, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, 0x74, 0xcf, 0x41, 0x44, | ||
| 2143 | 0x8f, 0xa3, 0x06, 0x63, 0x11, 0x40, 0x20, 0x1c, 0x04, 0x8c, 0x11, 0xf0, | ||
| 2144 | 0xf0, 0xaa, 0xd3, 0xdd, 0x18, 0x81, 0x2c, 0xba, 0x3d, 0x0d, 0x06, 0x63, | ||
| 2145 | 0x04, 0xb5, 0x5a, 0xab, 0xed, 0x37, 0x46, 0xd0, 0xc7, 0xa2, 0x8b, 0x7f, | ||
| 2146 | 0x63, 0x04, 0x6e, 0x1f, 0x8b, 0xb6, 0x2f, 0x8c, 0x11, 0x80, 0x20, 0x08, | ||
| 2147 | 0xe2, 0xdf, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0xc4, 0x3c, | ||
| 2148 | 0xd8, 0xe7, 0xde, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xbc, | ||
| 2149 | 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, 0xce, 0x9a, 0x73, 0x08, 0x06, 0x23, | ||
| 2150 | 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, 0x8c, 0x11, 0x80, 0x20, | ||
| 2151 | 0x08, 0x82, 0x60, 0x30, 0x03, 0x40, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x1c, | ||
| 2152 | 0x84, 0x1d, 0xf0, 0x81, 0x1d, 0xfc, 0x01, 0x15, 0x33, 0x00, 0x23, 0x00, | ||
| 2153 | 0x33, 0x00, 0x63, 0x0d, 0x20, 0x08, 0x82, 0xf8, 0x07, 0x82, 0x20, 0x88, | ||
| 2154 | 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x37, 0xd6, 0xc0, 0xb6, 0xf3, 0x4f, 0x7a, | ||
| 2155 | 0x6c, 0x3b, 0xff, 0xa4, 0xc7, 0xb6, 0xf3, 0x4f, 0x7a, 0x63, 0x0d, 0x20, | ||
| 2156 | 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, 0xd6, 0xbf, 0x00, 0x82, 0x20, | ||
| 2157 | 0x5b, 0xff, 0xc2, 0x58, 0x03, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x20, 0x08, | ||
| 2158 | 0xae, 0x39, 0x18, 0x80, 0x20, 0xb8, 0xe6, 0x60, 0x30, 0xd6, 0x00, 0x82, | ||
| 2159 | 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x20, 0x48, 0xb7, | ||
| 2160 | 0x39, 0x18, 0x8c, 0x35, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0xb0, 0x8e, 0x78, | ||
| 2161 | 0xcc, 0x82, 0xc1, 0x3a, 0xe2, 0x31, 0x0b, 0x06, 0x63, 0x0d, 0x20, 0x08, | ||
| 2162 | 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, 0x63, 0x00, 0x82, 0x30, 0x1e, | ||
| 2163 | 0x8e, 0xc1, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, | ||
| 2164 | 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, | ||
| 2165 | 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, | ||
| 2166 | 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, | ||
| 2167 | 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x30, 0x00, | ||
| 2168 | 0x00, 0x33, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x0e, 0xc4, | ||
| 2169 | 0x1d, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf3, 0x00, 0x00, 0x5f, 0x5a, 0x54, | ||
| 2170 | 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, | ||
| 2171 | 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, | ||
| 2172 | 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, | ||
| 2173 | 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, | ||
| 2174 | 0x00, 0x13, 0x84, 0x37, 0xf8, 0x26, 0x08, 0x6f, 0x00, 0x06, 0x13, 0x84, | ||
| 2175 | 0x37, 0x08, 0x83, 0x09, 0xc2, 0x1b, 0x88, 0xc1, 0x04, 0xe1, 0x0d, 0xc6, | ||
| 2176 | 0x60, 0x82, 0xf0, 0x06, 0x64, 0x30, 0x41, 0x78, 0x83, 0x32, 0x98, 0x20, | ||
| 2177 | 0xbc, 0x81, 0x19, 0x6c, 0x08, 0xc6, 0x61, 0xc3, 0x20, 0x0e, 0xec, 0x40, | ||
| 2178 | 0x0e, 0x1b, 0x06, 0xae, 0x1d, 0xc8, 0x61, 0x43, 0x14, 0x0e, 0xee, 0x40, | ||
| 2179 | 0x0e, 0xee, 0x50, 0x0e, 0xee, 0x60, 0x0e, 0xee, 0x70, 0x0e, 0xee, 0x80, | ||
| 2180 | 0x0e, 0xee, 0x90, 0x0e, 0xee, 0xa0, 0x0e, 0xee, 0xb0, 0x0e, 0x1b, 0x86, | ||
| 2181 | 0x77, 0x70, 0x07, 0x73, 0xd8, 0x30, 0xbc, 0x83, 0x3b, 0xac, 0xc3, 0x86, | ||
| 2182 | 0xe1, 0x1d, 0xdc, 0x01, 0x1d, 0x36, 0x0c, 0xef, 0xe0, 0x0e, 0xe9, 0xb0, | ||
| 2183 | 0x61, 0x78, 0x07, 0x77, 0x50, 0x87, 0x0d, 0xc3, 0x3b, 0xb8, 0x43, 0x39, | ||
| 2184 | 0x6c, 0x18, 0xde, 0xc1, 0x1d, 0xce, 0x61, 0xc3, 0xf0, 0x0e, 0xee, 0x40, | ||
| 2185 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x18, 0xce, 0x20, 0x0e, 0x44, 0x81, | ||
| 2186 | 0x02, 0x60, 0x0c, 0x47, 0x04, 0x55, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, | ||
| 2187 | 0x0c, 0x32, 0xac, 0xc1, 0x64, 0x06, 0x7b, 0x18, 0xd6, 0xa0, 0x0e, 0xec, | ||
| 2188 | 0x80, 0x02, 0x60, 0x8c, 0x18, 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x8c, | ||
| 2189 | 0x01, 0x2b, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x61, | ||
| 2190 | 0xe0, 0x0a, 0x01, 0x64, 0x01, 0x04, 0xfe, 0x23, 0x06, 0xc7, 0x11, 0x82, | ||
| 2191 | 0x60, 0xe1, 0x1f, 0x61, 0xe0, 0x0a, 0x41, 0x65, 0x43, 0x24, 0xfe, 0x16, | ||
| 2192 | 0x05, 0xe1, 0x6f, 0x43, 0x40, 0xfe, 0x23, 0x06, 0xc6, 0x11, 0x82, 0x60, | ||
| 2193 | 0xe1, 0x1f, 0x63, 0x30, 0x0b, 0xc1, 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, | ||
| 2194 | 0xf8, 0x47, 0x18, 0xd4, 0x42, 0x30, 0x59, 0x30, 0x89, 0xff, 0x1c, 0x43, | ||
| 2195 | 0xb7, 0x84, 0xc2, 0x20, 0x43, 0xe0, 0xcd, 0x81, 0x0d, 0x01, 0xf9, 0x0f, | ||
| 2196 | 0x32, 0x04, 0x60, 0x40, 0x07, 0x83, 0x0c, 0x01, 0x1f, 0xd0, 0xc1, 0x2c, | ||
| 2197 | 0x81, 0x30, 0x50, 0x11, 0x08, 0x81, 0x3e, 0x00, 0x7b, 0x18, 0xfa, 0xe0, | ||
| 2198 | 0x14, 0x6c, 0x81, 0x02, 0x60, 0x0c, 0x47, 0x04, 0x6c, 0xe0, 0xf8, 0xc7, | ||
| 2199 | 0x2c, 0xc3, 0x40, 0x04, 0x83, 0x0c, 0x44, 0x1a, 0xf0, 0xc1, 0x1e, 0x86, | ||
| 2200 | 0x50, 0x58, 0x05, 0x57, 0xa0, 0x00, 0x18, 0x7b, 0x18, 0x46, 0xa1, 0x15, | ||
| 2201 | 0x5e, 0x81, 0x02, 0x60, 0x8c, 0x18, 0x28, 0x49, 0x0c, 0x82, 0x85, 0x7f, | ||
| 2202 | 0x7c, 0xe7, 0x50, 0x74, 0xc7, 0x10, 0x0c, 0x32, 0x04, 0x6c, 0x00, 0x0a, | ||
| 2203 | 0x83, 0x0c, 0xc1, 0x02, 0x0a, 0xb3, 0x04, 0xc4, 0x40, 0x45, 0x20, 0x0c, | ||
| 2204 | 0x98, 0x30, 0x1c, 0x11, 0x06, 0x7c, 0x10, 0xf8, 0xc7, 0x2c, 0x43, 0x31, | ||
| 2205 | 0x05, 0x7b, 0x18, 0x54, 0x81, 0x16, 0xc8, 0x81, 0x02, 0x60, 0x0c, 0x47, | ||
| 2206 | 0x04, 0x7f, 0x10, 0xf8, 0xc7, 0x2c, 0x83, 0x71, 0x04, 0x83, 0x0c, 0x85, | ||
| 2207 | 0x1d, 0xa4, 0xc2, 0x1e, 0x06, 0x57, 0xc0, 0x85, 0x72, 0xa0, 0x00, 0x18, | ||
| 2208 | 0x73, 0x0c, 0x76, 0x10, 0xe8, 0xc2, 0x20, 0x43, 0x70, 0x07, 0xac, 0x60, | ||
| 2209 | 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x41, 0x1e, 0xb4, 0xc2, 0x2c, 0x41, 0x1b, | ||
| 2210 | 0xec, 0x61, 0xa0, 0x05, 0x5f, 0x60, 0x07, 0x0a, 0x80, 0xb1, 0x87, 0xc1, | ||
| 2211 | 0x16, 0xc0, 0xa1, 0x1d, 0x28, 0x00, 0xc6, 0x20, 0x03, 0x14, 0x0a, 0xb2, | ||
| 2212 | 0x30, 0x62, 0x50, 0x1c, 0x21, 0x08, 0x06, 0x5b, 0x3f, 0x10, 0xb3, 0x0c, | ||
| 2213 | 0x88, 0x14, 0x8c, 0x21, 0x48, 0xe4, 0x30, 0x1c, 0x11, 0xb4, 0x82, 0xe2, | ||
| 2214 | 0x1f, 0xb3, 0x0c, 0x4a, 0x12, 0x98, 0xd0, 0x0a, 0xe2, 0x3f, 0x4b, 0xb0, | ||
| 2215 | 0xd8, 0xd0, 0x0a, 0xe0, 0x3f, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, | ||
| 2216 | 0x81, 0x8d, 0x44, 0x60, 0x81, 0x2b, 0x88, 0xff, 0x88, 0xc1, 0x71, 0x84, | ||
| 2217 | 0x20, 0x58, 0xf8, 0x87, 0x65, 0x12, 0x81, 0x2b, 0xcc, 0x12, 0x2c, 0x03, | ||
| 2218 | 0x15, 0x80, 0x92, 0x08, 0xca, 0x1c, 0x83, 0x2a, 0x04, 0xec, 0x30, 0x86, | ||
| 2219 | 0xb0, 0x85, 0xc3, 0x70, 0x44, 0x60, 0x0b, 0x8a, 0x7f, 0xcc, 0x32, 0x34, | ||
| 2220 | 0x4c, 0x60, 0x82, 0x2d, 0x88, 0xff, 0x2c, 0x81, 0x63, 0x83, 0x2d, 0x80, | ||
| 2221 | 0xff, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0xc6, 0x12, 0x81, | ||
| 2222 | 0x05, 0xb7, 0x20, 0xfe, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, | ||
| 2223 | 0xd6, 0x4b, 0x04, 0xb7, 0x30, 0x4b, 0xe0, 0x0c, 0x54, 0x00, 0x0a, 0x23, | ||
| 2224 | 0x34, 0x73, 0x0c, 0x49, 0x90, 0x0e, 0x63, 0x08, 0x64, 0x90, 0x0e, 0xc3, | ||
| 2225 | 0x11, 0xc1, 0x2f, 0x28, 0xfe, 0x31, 0xcb, 0x00, 0x3d, 0x81, 0x09, 0xbf, | ||
| 2226 | 0x20, 0xfe, 0xb3, 0x04, 0x91, 0x0d, 0xbf, 0x00, 0xfe, 0x23, 0x06, 0xc6, | ||
| 2227 | 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x58, 0x4d, 0x04, 0x16, 0x80, 0x83, 0xf8, | ||
| 2228 | 0x8f, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x58, 0x38, 0x11, 0x80, | ||
| 2229 | 0xc3, 0x2c, 0x41, 0x34, 0x50, 0x01, 0x28, 0x8f, 0x00, 0xcd, 0x31, 0x24, | ||
| 2230 | 0x41, 0x3c, 0xcc, 0x12, 0x48, 0x03, 0x15, 0x81, 0x10, 0xe9, 0xc1, 0x31, | ||
| 2231 | 0xc8, 0x10, 0xfc, 0x82, 0x3c, 0xcc, 0x31, 0xf4, 0x02, 0x18, 0x84, 0xc4, | ||
| 2232 | 0x20, 0x43, 0xe0, 0x0b, 0xf3, 0x60, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0x01, | ||
| 2233 | 0x38, 0xd0, 0xc3, 0x2c, 0x41, 0x1b, 0x0c, 0x47, 0xcc, 0x82, 0x39, 0x04, | ||
| 2234 | 0xfe, 0x31, 0xcb, 0x40, 0x81, 0x41, 0x30, 0xc8, 0x40, 0x07, 0xe5, 0x80, | ||
| 2235 | 0x0f, 0x7b, 0x18, 0xfa, 0xe1, 0x24, 0x6a, 0x82, 0x02, 0x60, 0xec, 0x61, | ||
| 2236 | 0xf8, 0x87, 0x94, 0xb0, 0x09, 0x0a, 0x80, 0x31, 0xc7, 0x70, 0x0e, 0xc1, | ||
| 2237 | 0x4a, 0x0c, 0x32, 0x04, 0xe8, 0xd0, 0x0f, 0x16, 0x1c, 0xe2, 0x3f, 0xc8, | ||
| 2238 | 0x10, 0xa8, 0x83, 0x3f, 0x8c, 0x18, 0x14, 0x47, 0x08, 0x82, 0xc1, 0x96, | ||
| 2239 | 0x16, 0xc7, 0x2c, 0xc3, 0x57, 0x05, 0x63, 0x08, 0x03, 0x4c, 0x0c, 0x47, | ||
| 2240 | 0x04, 0xff, 0xa0, 0xf8, 0xc7, 0x2c, 0xc3, 0x65, 0x05, 0x26, 0xfc, 0x83, | ||
| 2241 | 0xf8, 0xcf, 0x12, 0x60, 0x23, 0x06, 0xc6, 0x11, 0x82, 0x60, 0xe1, 0x1f, | ||
| 2242 | 0x98, 0x5b, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x16, | ||
| 2243 | 0x5c, 0x04, 0x20, 0x61, 0x01, 0x48, 0x88, 0xbf, 0x05, 0x20, 0x01, 0xfe, | ||
| 2244 | 0xb3, 0x04, 0xd8, 0x40, 0x05, 0xa0, 0x58, 0xc2, 0x35, 0xc7, 0x20, 0x0f, | ||
| 2245 | 0x01, 0x4e, 0x8c, 0x21, 0x30, 0x2d, 0x31, 0x1c, 0x11, 0xa0, 0x84, 0xe2, | ||
| 2246 | 0x1f, 0xb3, 0x0c, 0x5a, 0x16, 0x98, 0x80, 0x12, 0xe2, 0x3f, 0x4b, 0xb0, | ||
| 2247 | 0x8d, 0x18, 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x60, 0x77, 0x31, 0x8c, | ||
| 2248 | 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x58, 0x79, 0x11, 0xa4, 0x84, | ||
| 2249 | 0x05, 0x29, 0x21, 0xfe, 0x16, 0xa4, 0x04, 0xf8, 0xcf, 0x12, 0x6c, 0x03, | ||
| 2250 | 0x15, 0x80, 0x92, 0x09, 0xda, 0x1c, 0x43, 0x12, 0xd4, 0xc4, 0x18, 0x42, | ||
| 2251 | 0x55, 0x13, 0xc3, 0x11, 0x41, 0x4c, 0x28, 0xfe, 0x31, 0xcb, 0xd0, 0x71, | ||
| 2252 | 0x81, 0x09, 0x31, 0x21, 0xfe, 0xb3, 0x04, 0xde, 0x88, 0x81, 0x71, 0x84, | ||
| 2253 | 0x20, 0x58, 0xf8, 0x07, 0x06, 0x1a, 0xc3, 0x88, 0xc1, 0x71, 0x84, 0x20, | ||
| 2254 | 0x58, 0xf8, 0x87, 0x25, 0x1a, 0x81, 0x4c, 0x58, 0x20, 0x13, 0xe2, 0x6f, | ||
| 2255 | 0x81, 0x4c, 0x80, 0xff, 0x2c, 0x81, 0x37, 0x50, 0x01, 0x28, 0x9c, 0xd0, | ||
| 2256 | 0xcd, 0x31, 0x24, 0x41, 0x4f, 0x8c, 0x18, 0x20, 0x47, 0x08, 0x82, 0x85, | ||
| 2257 | 0x7f, 0x50, 0xa8, 0x11, 0x98, 0x04, 0x49, 0x0c, 0x32, 0x04, 0x28, 0xc1, | ||
| 2258 | 0x13, 0xb3, 0x04, 0xdf, 0x40, 0x45, 0xe0, 0x07, 0x94, 0xe0, 0x0d, 0x32, | ||
| 2259 | 0x04, 0x2d, 0xe1, 0x13, 0xb3, 0x04, 0x6d, 0x30, 0xcb, 0x10, 0x06, 0x6d, | ||
| 2260 | 0xc0, 0x0f, 0x83, 0x0c, 0xbd, 0xe0, 0x12, 0x61, 0x31, 0x62, 0x70, 0x1c, | ||
| 2261 | 0x21, 0x08, 0x16, 0xfe, 0xd1, 0xa5, 0x46, 0x20, 0x12, 0x73, 0x0c, 0x2b, | ||
| 2262 | 0x11, 0xc4, 0xc5, 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x47, 0xb7, | ||
| 2263 | 0x1a, 0xc3, 0x48, 0xcc, 0x31, 0x08, 0xc1, 0x59, 0x8c, 0x18, 0x1c, 0x47, | ||
| 2264 | 0x08, 0x82, 0x85, 0x7f, 0x74, 0xad, 0x51, 0x90, 0xc4, 0x1c, 0x83, 0x10, | ||
| 2265 | 0xa0, 0xc5, 0x20, 0x43, 0x20, 0x13, 0x66, 0x31, 0xc8, 0x10, 0x94, 0x83, | ||
| 2266 | 0x59, 0xec, 0x61, 0x70, 0x0b, 0xbc, 0x30, 0x0d, 0x0a, 0x80, 0xb1, 0x87, | ||
| 2267 | 0x01, 0x2e, 0xf4, 0xe2, 0x34, 0x28, 0x00, 0xc6, 0x1c, 0x03, 0x4e, 0x04, | ||
| 2268 | 0x7c, 0x31, 0xc8, 0x10, 0xe4, 0x84, 0x5b, 0x58, 0x90, 0x88, 0xff, 0x20, | ||
| 2269 | 0x43, 0xb0, 0x13, 0x6f, 0x31, 0x62, 0x50, 0x1c, 0x21, 0x08, 0x06, 0x9b, | ||
| 2270 | 0x6e, 0x1c, 0xb3, 0x0c, 0x6c, 0x20, 0x06, 0xc1, 0x18, 0xc2, 0x10, 0x1a, | ||
| 2271 | 0xc3, 0x11, 0x01, 0x5c, 0x28, 0xfe, 0x31, 0xcb, 0x40, 0x06, 0x63, 0x10, | ||
| 2272 | 0x98, 0x00, 0x17, 0xe2, 0x3f, 0x4b, 0x50, 0x06, 0x23, 0x06, 0xc6, 0x11, | ||
| 2273 | 0x82, 0x60, 0xe1, 0x1f, 0xd8, 0x6f, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, | ||
| 2274 | 0x60, 0xe1, 0x1f, 0x56, 0x78, 0x04, 0x71, 0x61, 0x41, 0x5c, 0x88, 0xbf, | ||
| 2275 | 0x05, 0x71, 0x01, 0xfe, 0xb3, 0x04, 0x65, 0x30, 0x50, 0x01, 0x28, 0x63, | ||
| 2276 | 0x20, 0x90, 0xc1, 0x1c, 0xc3, 0x58, 0x04, 0xa9, 0x31, 0x86, 0xc0, 0xf8, | ||
| 2277 | 0xc5, 0x70, 0x44, 0x90, 0x17, 0x8a, 0x7f, 0xcc, 0x32, 0x9c, 0x81, 0x19, | ||
| 2278 | 0x04, 0x26, 0xe4, 0x85, 0xf8, 0xcf, 0x12, 0xa0, 0xc1, 0x88, 0x81, 0x71, | ||
| 2279 | 0x84, 0x20, 0x58, 0xf8, 0x07, 0x86, 0x1e, 0xc3, 0x88, 0xc1, 0x71, 0x84, | ||
| 2280 | 0x20, 0x58, 0xf8, 0x87, 0xa5, 0x1e, 0x81, 0x5e, 0x58, 0xa0, 0x17, 0xe2, | ||
| 2281 | 0x6f, 0x81, 0x5e, 0x80, 0xff, 0x2c, 0x01, 0x1a, 0x0c, 0x54, 0x00, 0x8a, | ||
| 2282 | 0x19, 0x08, 0x67, 0x30, 0xc7, 0x90, 0x04, 0xa6, 0x31, 0x86, 0x50, 0x99, | ||
| 2283 | 0xc6, 0x70, 0x44, 0x20, 0x1a, 0x8a, 0x7f, 0xcc, 0x32, 0xa8, 0x41, 0x1a, | ||
| 2284 | 0x04, 0x26, 0x88, 0x86, 0xf8, 0xcf, 0x12, 0xac, 0xc1, 0x88, 0x81, 0x71, | ||
| 2285 | 0x84, 0x20, 0x58, 0xf8, 0x07, 0x16, 0x1f, 0xc3, 0x88, 0xc1, 0x71, 0x84, | ||
| 2286 | 0x20, 0x58, 0xf8, 0x87, 0x35, 0x1f, 0xc1, 0x68, 0x58, 0x30, 0x1a, 0xe2, | ||
| 2287 | 0x6f, 0xc1, 0x68, 0x80, 0xff, 0x2c, 0xc1, 0x1a, 0x0c, 0x54, 0x00, 0x4a, | ||
| 2288 | 0x1a, 0x08, 0x6a, 0x30, 0xc7, 0x90, 0x04, 0xae, 0x31, 0x62, 0x80, 0x1c, | ||
| 2289 | 0x21, 0x08, 0x16, 0xfe, 0x41, 0xe5, 0x47, 0x70, 0x17, 0x75, 0x31, 0xc8, | ||
| 2290 | 0x10, 0xe4, 0x45, 0x6b, 0xcc, 0x12, 0xb0, 0xc1, 0x40, 0x45, 0xe0, 0x07, | ||
| 2291 | 0x61, 0x20, 0xac, 0xc1, 0x20, 0x43, 0xe0, 0x17, 0xaf, 0x31, 0x4b, 0xd0, | ||
| 2292 | 0x06, 0x03, 0x2d, 0x01, 0x8f, 0x18, 0x3c, 0x22, 0xf1, 0xc8, 0x27, 0x0b, | ||
| 2293 | 0x6c, 0xc0, 0x23, 0x60, 0x30, 0xd0, 0x12, 0xa0, 0x88, 0xa1, 0x17, 0x92, | ||
| 2294 | 0x39, 0x7c, 0x04, 0x1b, 0xf0, 0x0b, 0x18, 0x0c, 0x32, 0x04, 0x42, 0x6c, | ||
| 2295 | 0x64, 0x10, 0x10, 0x03, 0x00, 0x12, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, | ||
| 2296 | 0x78, 0x87, 0x2d, 0x83, 0x11, 0xc0, 0xc3, 0x96, 0x21, 0x0b, 0xe2, 0x61, | ||
| 2297 | 0xcb, 0xe0, 0x05, 0xf2, 0xb0, 0x65, 0x00, 0x83, 0x60, 0x1e, 0xb6, 0x0c, | ||
| 2298 | 0x69, 0x10, 0xd0, 0xc3, 0x96, 0xc1, 0x0d, 0x82, 0x7a, 0xd8, 0x32, 0xd4, | ||
| 2299 | 0x41, 0x60, 0x0f, 0x5b, 0x86, 0x3b, 0x08, 0xea, 0x61, 0xcb, 0xb0, 0x0e, | ||
| 2300 | 0x81, 0x3d, 0x6c, 0x19, 0xda, 0x21, 0xa8, 0x87, 0x2d, 0x43, 0x5a, 0x04, | ||
| 2301 | 0xf6, 0xb0, 0x65, 0x58, 0x8b, 0xa0, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2302 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, | ||
| 2303 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x74, 0xce, 0x00, | ||
| 2304 | 0xd0, 0x5b, 0x02, 0x45, 0x40, 0xf0, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, | ||
| 2305 | 0x74, 0xcf, 0x41, 0x44, 0x8f, 0xd3, 0x06, 0x04, 0x8c, 0x11, 0x80, 0x20, | ||
| 2306 | 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x23, 0x00, | ||
| 2307 | 0x14, 0xcc, 0x00, 0xcc, 0x00, 0x50, 0x31, 0x03, 0x30, 0xd6, 0xc0, 0xb2, | ||
| 2308 | 0x67, 0x28, 0x7f, 0xa8, 0x5f, 0xc6, 0xea, 0x97, 0x9f, 0xba, 0x38, 0x7b, | ||
| 2309 | 0x63, 0x0d, 0x7a, 0x0d, 0xee, 0xb8, 0xa7, 0xe2, 0xb9, 0x6d, 0x7f, 0x6f, | ||
| 2310 | 0x9f, 0xd2, 0xa3, 0x37, 0xd6, 0xb0, 0xce, 0x31, 0x8b, 0x7a, 0x69, 0x08, | ||
| 2311 | 0xa3, 0xbb, 0x77, 0xb7, 0xb1, 0x6a, 0x7f, 0x63, 0x0d, 0x62, 0x2e, 0xa6, | ||
| 2312 | 0xfd, 0x07, 0x96, 0x3c, 0x1b, 0xff, 0xc2, 0x98, 0xae, 0x6a, 0xee, 0x0b, | ||
| 2313 | 0x63, 0x0d, 0xff, 0x4c, 0xfa, 0xbf, 0x2f, 0xd0, 0x35, 0x28, 0xe6, 0x5f, | ||
| 2314 | 0x0b, 0xc7, 0x31, 0xe8, 0x0b, 0x63, 0x0d, 0x73, 0xdf, 0xa6, 0xa9, 0x2f, | ||
| 2315 | 0xb4, 0x6e, 0xc8, 0xf3, 0xbe, 0xc0, 0xe7, 0xac, 0x8f, 0x7f, 0x00, 0x00, | ||
| 2316 | 0x00, 0x83, 0x0c, 0xd7, 0xd1, 0x0c, 0x47, 0x58, 0x4d, 0xe0, 0x1f, 0xb3, | ||
| 2317 | 0x0c, 0x81, 0x10, 0xcc, 0x31, 0x24, 0x96, 0x18, 0x0c, 0x32, 0x04, 0x4a, | ||
| 2318 | 0x64, 0xc1, 0x26, 0xfe, 0x83, 0x0c, 0x01, 0x23, 0xcd, 0x12, 0x24, 0xc3, | ||
| 2319 | 0x11, 0x5b, 0x14, 0xf8, 0xc7, 0x2c, 0xc3, 0x90, 0x04, 0xc3, 0x11, 0x9d, | ||
| 2320 | 0x14, 0xf8, 0xc7, 0x2c, 0x03, 0x51, 0x04, 0x23, 0x06, 0xc7, 0x11, 0x82, | ||
| 2321 | 0x60, 0xe1, 0x1f, 0x5d, 0x28, 0x7c, 0xce, 0x1c, 0x43, 0x14, 0xa4, 0xc1, | ||
| 2322 | 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x47, 0x37, 0x0a, 0x61, 0xf0, | ||
| 2323 | 0xcc, 0x31, 0x08, 0x01, 0x37, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, | ||
| 2324 | 0xd1, 0x95, 0xc2, 0x18, 0x40, 0x73, 0x0c, 0x42, 0xd0, 0xcd, 0x12, 0x14, | ||
| 2325 | 0x03, 0x15, 0x81, 0x40, 0x70, 0xc3, 0x18, 0x42, 0xf0, 0x06, 0x63, 0x08, | ||
| 2326 | 0x42, 0x18, 0x8c, 0x21, 0x0c, 0x61, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, | ||
| 2327 | 0x16, 0xfe, 0x61, 0xa5, 0x82, 0x10, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, | ||
| 2328 | 0x85, 0x7f, 0x58, 0xaa, 0x40, 0x04, 0xc3, 0x11, 0x81, 0x27, 0xf8, 0xc7, | ||
| 2329 | 0x2c, 0x83, 0x71, 0x04, 0x83, 0x0c, 0x87, 0x47, 0x06, 0x36, 0xa8, 0x81, | ||
| 2330 | 0xf8, 0x5b, 0x30, 0x06, 0xe0, 0x6f, 0xc5, 0x1a, 0x88, 0xbf, 0x05, 0x65, | ||
| 2331 | 0x00, 0xfe, 0x36, 0x04, 0xe4, 0x3f, 0xc7, 0x20, 0x06, 0xc1, 0x1e, 0x0c, | ||
| 2332 | 0x32, 0x04, 0x63, 0xa0, 0x06, 0x16, 0x20, 0xe2, 0x3f, 0xc8, 0x10, 0x94, | ||
| 2333 | 0xc1, 0x1a, 0xcc, 0x12, 0x1c, 0x03, 0x15, 0x81, 0x60, 0x88, 0x41, 0x31, | ||
| 2334 | 0xcb, 0x80, 0x24, 0xd9, 0x20, 0x43, 0x90, 0x06, 0x6f, 0x30, 0x62, 0x70, | ||
| 2335 | 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xd1, 0xe9, 0x42, 0x40, 0x06, 0x73, 0x0c, | ||
| 2336 | 0x6a, 0x10, 0x88, 0xc2, 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x47, | ||
| 2337 | 0xc7, 0x0b, 0x43, 0x19, 0xcc, 0x31, 0x08, 0x41, 0x1d, 0x8c, 0x18, 0x1c, | ||
| 2338 | 0x47, 0x08, 0x82, 0x85, 0x7f, 0x74, 0xbe, 0x50, 0x98, 0xc1, 0x1c, 0x83, | ||
| 2339 | 0x10, 0xd8, 0xc1, 0x2c, 0x41, 0x32, 0x50, 0x12, 0x90, 0x42, 0xe0, 0x0a, | ||
| 2340 | 0x82, 0x80, 0x40, 0xc7, 0x20, 0x43, 0x10, 0x07, 0x77, 0x90, 0x01, 0x00, | ||
| 2341 | 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, | ||
| 2342 | 0x22, 0x84, 0x00, 0xbf, 0x09, 0x18, 0xd0, 0xac, 0x80, 0x07, 0xb4, 0x0e, | ||
| 2343 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x6d, 0x00, 0x00, | ||
| 2344 | 0x00, 0x12, 0x03, 0x94, 0x68, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 2345 | 0x00, 0x3e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, | ||
| 2346 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2347 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, | ||
| 2348 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 2349 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x66, 0x01, 0x00, | ||
| 2350 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2351 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2352 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2353 | 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, | ||
| 2354 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 2355 | 0x00, 0x38, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, | ||
| 2356 | 0x00, 0x48, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, | ||
| 2357 | 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2358 | 0x00, 0x5c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, | ||
| 2359 | 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2360 | 0x00, 0x6c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, | ||
| 2361 | 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2362 | 0x00, 0x7d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, | ||
| 2363 | 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2364 | 0x00, 0x93, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, | ||
| 2365 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2366 | 0x00, 0xa0, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, | ||
| 2367 | 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, | ||
| 2368 | 0x00, 0xb9, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, | ||
| 2369 | 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2370 | 0x00, 0xca, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, | ||
| 2371 | 0x00, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2372 | 0x00, 0xdc, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, | ||
| 2373 | 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2374 | 0x00, 0xef, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, | ||
| 2375 | 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2376 | 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, | ||
| 2377 | 0x00, 0x21, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2378 | 0x00, 0x23, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, | ||
| 2379 | 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, | ||
| 2380 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x5d, 0x00, 0x00, | ||
| 2381 | 0x00, 0x12, 0x03, 0x94, 0xe6, 0x02, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, | ||
| 2382 | 0x5f, 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, | ||
| 2383 | 0x74, 0x5f, 0x5a, 0x31, 0x34, 0x47, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x70, | ||
| 2384 | 0x75, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, | ||
| 2385 | 0x52, 0x55, 0x31, 0x31, 0x4d, 0x54, 0x4c, 0x63, 0x6f, 0x6e, 0x73, 0x74, | ||
| 2386 | 0x61, 0x6e, 0x74, 0x4b, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, | ||
| 2387 | 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x61, 0x69, 0x72, | ||
| 2388 | 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x2e, | ||
| 2389 | 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, | ||
| 2390 | 0x74, 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, | ||
| 2391 | 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, 0x66, | ||
| 2392 | 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, | ||
| 2393 | 0x74, 0x2e, 0x75, 0x2e, 0x69, 0x31, 0x2e, 0x66, 0x2e, 0x66, 0x33, 0x32, | ||
| 2394 | 0x61, 0x69, 0x72, 0x2e, 0x64, 0x6f, 0x74, 0x2e, 0x76, 0x33, 0x66, 0x33, | ||
| 2395 | 0x32, 0x5f, 0x5a, 0x31, 0x32, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, | ||
| 2396 | 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x44, 0x76, 0x33, 0x5f, 0x66, 0x66, 0x66, | ||
| 2397 | 0x66, 0x66, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, | ||
| 2398 | 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 2399 | 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x76, 0x33, 0x66, 0x33, | ||
| 2400 | 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x61, | ||
| 2401 | 0x62, 0x73, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, | ||
| 2402 | 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x33, | ||
| 2403 | 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, | ||
| 2404 | 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x32, 0x64, | ||
| 2405 | 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, | ||
| 2406 | 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, | ||
| 2407 | 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x32, 0x64, 0x2e, 0x76, 0x34, | ||
| 2408 | 0x66, 0x33, 0x32, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, | ||
| 2409 | 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, | ||
| 2410 | 0x69, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, | ||
| 2411 | 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2412 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 2413 | 0x00, 0x14, 0x00, 0x00, 0x00, 0xa4, 0x22, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2414 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 2415 | 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, 0xc8, 0x14, 0x00, 0x00, | ||
| 2416 | 0x00, 0x21, 0x0c, 0x00, 0x00, 0xe1, 0x07, 0x00, 0x00, 0x0b, 0x02, 0x21, | ||
| 2417 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 2418 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 2419 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 2420 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 2421 | 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 2422 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, 0x90, 0x11, 0x23, 0xc4, | ||
| 2423 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, | ||
| 2424 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0x1b, 0xc2, 0x24, | ||
| 2425 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, 0x40, 0x02, 0x2a, 0x22, | ||
| 2426 | 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, | ||
| 2427 | 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, | ||
| 2428 | 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, | ||
| 2429 | 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x38, 0x87, 0x70, | ||
| 2430 | 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, | ||
| 2431 | 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, 0xe2, 0x40, | ||
| 2432 | 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1c, 0xea, 0x21, | ||
| 2433 | 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, 0x01, 0x20, 0xdc, 0xe1, | ||
| 2434 | 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, | ||
| 2435 | 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, | ||
| 2436 | 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, | ||
| 2437 | 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, | ||
| 2438 | 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, | ||
| 2439 | 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, | ||
| 2440 | 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, | ||
| 2441 | 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, | ||
| 2442 | 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, | ||
| 2443 | 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, | ||
| 2444 | 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, | ||
| 2445 | 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, | ||
| 2446 | 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, | ||
| 2447 | 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, | ||
| 2448 | 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, | ||
| 2449 | 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, | ||
| 2450 | 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, | ||
| 2451 | 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 2452 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, | ||
| 2453 | 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, | ||
| 2454 | 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, | ||
| 2455 | 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, | ||
| 2456 | 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, | ||
| 2457 | 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 2458 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 2459 | 0xd8, 0xe0, 0x09, 0x04, 0xb0, 0x00, 0x55, 0x90, 0x06, 0x60, 0x30, 0x84, | ||
| 2460 | 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, | ||
| 2461 | 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, 0x84, 0x03, 0x3b, 0xa4, | ||
| 2462 | 0x43, 0x38, 0xcc, 0x03, 0xb0, 0xc1, 0x1b, 0x0a, 0x60, 0x01, 0xaa, 0x20, | ||
| 2463 | 0x0d, 0x40, 0x61, 0x08, 0x87, 0x74, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 2464 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x03, 0x77, 0x78, 0x87, 0x36, | ||
| 2465 | 0x08, 0x07, 0x76, 0x48, 0x87, 0x70, 0x98, 0x07, 0x60, 0x83, 0x41, 0x20, | ||
| 2466 | 0xc0, 0x02, 0x54, 0x1b, 0xc2, 0xa4, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, | ||
| 2467 | 0x58, 0x03, 0x40, 0x02, 0x2a, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, | ||
| 2468 | 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, | ||
| 2469 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 2470 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, | ||
| 2471 | 0x60, 0x87, 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, | ||
| 2472 | 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, | ||
| 2473 | 0xa0, 0x07, 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, | ||
| 2474 | 0x1d, 0xda, 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, | ||
| 2475 | 0x1d, 0xe6, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, | ||
| 2476 | 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, | ||
| 2477 | 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, | ||
| 2478 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 2479 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 2480 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 2481 | 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, | ||
| 2482 | 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 2483 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, | ||
| 2484 | 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, | ||
| 2485 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 2486 | 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, | ||
| 2487 | 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, | ||
| 2488 | 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, | ||
| 2489 | 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, | ||
| 2490 | 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 2491 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, | ||
| 2492 | 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, | ||
| 2493 | 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, | ||
| 2494 | 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, | ||
| 2495 | 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, | ||
| 2496 | 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, | ||
| 2497 | 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, | ||
| 2498 | 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, | ||
| 2499 | 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, | ||
| 2500 | 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0x90, 0x18, 0x02, 0xb0, 0x00, | ||
| 2501 | 0x55, 0x90, 0x06, 0x60, 0xb0, 0xc1, 0x38, 0xfe, 0xff, 0xff, 0xff, 0x7f, | ||
| 2502 | 0x00, 0x24, 0x80, 0xda, 0xe0, 0x23, 0xc8, 0xff, 0xff, 0xff, 0xff, 0x0f, | ||
| 2503 | 0x80, 0x04, 0x54, 0x44, 0x38, 0xc0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, | ||
| 2504 | 0x43, 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, 0x39, 0xc0, | ||
| 2505 | 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, | ||
| 2506 | 0xf5, 0x50, 0x0e, 0x00, 0xd1, 0x0e, 0xe9, 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, | ||
| 2507 | 0xe5, 0x70, 0x0e, 0xe1, 0xc0, 0x0e, 0x6d, 0x60, 0x0f, 0xe5, 0x30, 0x0e, | ||
| 2508 | 0xf4, 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xf7, 0x90, 0x0e, 0xe4, 0x40, 0x0f, | ||
| 2509 | 0xe8, 0x00, 0xe4, 0x81, 0x1d, 0x00, 0x83, 0x3b, 0xbc, 0x43, 0x1b, 0x88, | ||
| 2510 | 0x43, 0x3d, 0xa4, 0x03, 0x3b, 0xd0, 0x43, 0x3a, 0xb8, 0xc3, 0x3c, 0x00, | ||
| 2511 | 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, | ||
| 2512 | 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, | ||
| 2513 | 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, | ||
| 2514 | 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, | ||
| 2515 | 0xe1, 0xd0, 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, | ||
| 2516 | 0xf4, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, | ||
| 2517 | 0x6d, 0xe0, 0x0e, 0xef, 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, | ||
| 2518 | 0xe6, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, | ||
| 2519 | 0x43, 0x1b, 0xa4, 0x83, 0x3b, 0x98, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, | ||
| 2520 | 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, | ||
| 2521 | 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, | ||
| 2522 | 0xee, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, | ||
| 2523 | 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, | ||
| 2524 | 0xc3, 0x3b, 0xb4, 0xc1, 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, | ||
| 2525 | 0x43, 0x1b, 0xe8, 0x43, 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, | ||
| 2526 | 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, | ||
| 2527 | 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x40, 0x0f, | ||
| 2528 | 0xf2, 0x10, 0x0e, 0xf0, 0x00, 0x0f, 0xe9, 0xe0, 0x0e, 0xe7, 0xd0, 0x06, | ||
| 2529 | 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, | ||
| 2530 | 0x03, 0x40, 0xcc, 0x03, 0x3d, 0x84, 0xc3, 0x38, 0xac, 0x43, 0x1b, 0xc0, | ||
| 2531 | 0x83, 0x3c, 0xbc, 0x03, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, | ||
| 2532 | 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, | ||
| 2533 | 0xc1, 0x3c, 0xa4, 0x83, 0x3e, 0x94, 0x03, 0x80, 0x07, 0x00, 0x51, 0x0f, | ||
| 2534 | 0xee, 0x30, 0x0f, 0xe1, 0x60, 0x0e, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, | ||
| 2535 | 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, | ||
| 2536 | 0x43, 0x39, 0x00, 0x1b, 0x94, 0xe4, 0xff, 0xff, 0xff, 0xff, 0x07, 0xa0, | ||
| 2537 | 0x0d, 0x80, 0x35, 0x00, 0x24, 0xa0, 0xda, 0x60, 0x28, 0x01, 0xb0, 0x00, | ||
| 2538 | 0xd5, 0x06, 0x63, 0x11, 0x80, 0x05, 0xa8, 0x36, 0x28, 0xcc, 0xff, 0xff, | ||
| 2539 | 0xff, 0xff, 0x0f, 0x40, 0x1b, 0x00, 0x6b, 0x00, 0x48, 0x40, 0xb5, 0xc1, | ||
| 2540 | 0x68, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x24, 0x80, 0xda, 0x30, 0x39, | ||
| 2541 | 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x6b, 0x00, 0x28, 0x83, 0x3b, 0xbc, | ||
| 2542 | 0x43, 0x1b, 0x88, 0x43, 0x3d, 0xa4, 0x03, 0x3b, 0xd0, 0x43, 0x3a, 0xb8, | ||
| 2543 | 0xc3, 0x3c, 0x00, 0x1b, 0x8a, 0x47, 0x08, 0xd2, 0x00, 0x0c, 0x36, 0x44, | ||
| 2544 | 0xd0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x32, 0xb8, 0xc3, 0x3b, 0xb4, | ||
| 2545 | 0x81, 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, 0x3d, 0xa4, 0x83, 0x3b, 0xcc, | ||
| 2546 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 2547 | 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x42, 0x61, 0x4c, 0x08, 0x8e, | ||
| 2548 | 0x09, 0x01, 0x32, 0x61, 0x48, 0x94, 0x65, 0xc2, 0xc0, 0x28, 0xcb, 0x84, | ||
| 2549 | 0xa0, 0x99, 0x20, 0x38, 0xcf, 0x84, 0x00, 0x02, 0x00, 0x89, 0x20, 0x00, | ||
| 2550 | 0x00, 0x48, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, | ||
| 2551 | 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, | ||
| 2552 | 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xd0, 0xc1, | ||
| 2553 | 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, | ||
| 2554 | 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, | ||
| 2555 | 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, | ||
| 2556 | 0x41, 0x18, 0x46, 0x18, 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, | ||
| 2557 | 0xe4, 0xa1, 0x1e, 0xc6, 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, | ||
| 2558 | 0xc2, 0x81, 0x1d, 0xf4, 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, | ||
| 2559 | 0xd2, 0x01, 0x1f, 0x50, 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, | ||
| 2560 | 0xec, 0xbe, 0x1d, 0x21, 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, | ||
| 2561 | 0x84, 0xa3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, | ||
| 2562 | 0x88, 0xf8, 0xed, 0xe1, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0xb8, | ||
| 2563 | 0x48, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, | ||
| 2564 | 0x7f, 0x1a, 0x23, 0x00, 0x06, 0x11, 0x18, 0xa1, 0x24, 0x41, 0x10, 0x08, | ||
| 2565 | 0x44, 0xb2, 0x2c, 0x0d, 0x39, 0x65, 0x08, 0x02, 0x82, 0xa0, 0x42, 0x14, | ||
| 2566 | 0x45, 0x51, 0x90, 0x54, 0x06, 0x00, 0x00, 0x88, 0x2a, 0x02, 0x00, 0x90, | ||
| 2567 | 0x35, 0x47, 0x10, 0x14, 0x01, 0x03, 0x28, 0x2b, 0x03, 0x50, 0x14, 0xb4, | ||
| 2568 | 0x15, 0xa3, 0x28, 0x00, 0x00, 0x00, 0xa8, 0x2b, 0x43, 0x51, 0x14, 0xf4, | ||
| 2569 | 0x15, 0xa1, 0x28, 0x28, 0x9c, 0x23, 0x40, 0x8c, 0x10, 0x8c, 0x73, 0x04, | ||
| 2570 | 0x60, 0x30, 0x8c, 0x20, 0x94, 0x41, 0x51, 0xc8, 0xa5, 0x11, 0x30, 0x13, | ||
| 2571 | 0x03, 0x80, 0x92, 0xce, 0x81, 0x80, 0x14, 0x28, 0xe7, 0x08, 0x40, 0x61, | ||
| 2572 | 0x10, 0x01, 0x10, 0xa6, 0x00, 0x46, 0x00, 0x86, 0x11, 0x86, 0x32, 0x18, | ||
| 2573 | 0x44, 0x08, 0x84, 0x41, 0x84, 0x43, 0x18, 0x44, 0x28, 0x84, 0x61, 0x04, | ||
| 2574 | 0xa2, 0x0c, 0x00, 0x00, 0x00, 0x13, 0xbe, 0x70, 0x48, 0x07, 0x79, 0xb0, | ||
| 2575 | 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, | ||
| 2576 | 0x83, 0x74, 0x78, 0x87, 0x79, 0x88, 0x83, 0x39, 0x70, 0x03, 0x38, 0x70, | ||
| 2577 | 0x03, 0x38, 0x68, 0x83, 0x79, 0x48, 0x87, 0x76, 0xa8, 0x07, 0x76, 0x08, | ||
| 2578 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, | ||
| 2579 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, | ||
| 2580 | 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, | ||
| 2581 | 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, | ||
| 2582 | 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, | ||
| 2583 | 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 2584 | 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, | ||
| 2585 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, | ||
| 2586 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 2587 | 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, | ||
| 2588 | 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, | ||
| 2589 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, | ||
| 2590 | 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, | ||
| 2591 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 2592 | 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, | ||
| 2593 | 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 2594 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, | ||
| 2595 | 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, | ||
| 2596 | 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, | ||
| 2597 | 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, | ||
| 2598 | 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, | ||
| 2599 | 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, | ||
| 2600 | 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, | ||
| 2601 | 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, | ||
| 2602 | 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, | ||
| 2603 | 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, | ||
| 2604 | 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, | ||
| 2605 | 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x11, 0xc2, 0x90, 0x11, 0xdb, | ||
| 2606 | 0x95, 0xff, 0xf9, 0xd6, 0xf6, 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x34, | ||
| 2607 | 0x24, 0x02, 0x22, 0x07, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, | ||
| 2608 | 0x00, 0x00, 0x86, 0x44, 0x11, 0x1e, 0x40, 0x08, 0x30, 0x08, 0x00, 0x00, | ||
| 2609 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x24, 0x4a, 0x05, 0x4a, 0x02, 0x02, | ||
| 2610 | 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, 0x51, 0x2f, | ||
| 2611 | 0x40, 0x14, 0x10, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, | ||
| 2612 | 0x0c, 0x89, 0xda, 0x21, 0xb2, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, | ||
| 2613 | 0x00, 0x00, 0x00, 0x60, 0x48, 0xe4, 0x0f, 0x56, 0x06, 0x04, 0xc0, 0x00, | ||
| 2614 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x43, 0x22, 0x9a, 0x68, 0x36, | ||
| 2615 | 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x12, | ||
| 2616 | 0x85, 0x45, 0xd6, 0x21, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 2617 | 0x00, 0xc0, 0x90, 0x48, 0x2f, 0x22, 0x0a, 0x08, 0x80, 0x01, 0x00, 0x00, | ||
| 2618 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x86, 0x44, 0xab, 0x21, 0x7d, 0x40, 0x00, | ||
| 2619 | 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x24, 0xea, 0x8d, | ||
| 2620 | 0x29, 0x0c, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 2621 | 0x60, 0x48, 0x04, 0x1f, 0xd3, 0x07, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x20, | ||
| 2622 | 0x00, 0x00, 0x00, 0x00, 0x43, 0xa2, 0x11, 0xd9, 0xce, 0x00, 0x08, 0x80, | ||
| 2623 | 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x24, 0x36, 0x08, 0x14, | ||
| 2624 | 0x15, 0x3f, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 2625 | 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 2626 | 0x47, 0xc6, 0x04, 0x43, 0x2a, 0x8b, 0xa0, 0x04, 0x0a, 0x61, 0x04, 0xa0, | ||
| 2627 | 0x0c, 0x0a, 0xa8, 0x20, 0x0a, 0xa3, 0x40, 0x0a, 0xa5, 0x60, 0x0a, 0xa7, | ||
| 2628 | 0x00, 0x03, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, 0x68, 0x1d, 0x01, 0x28, | ||
| 2629 | 0x84, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0x52, 0xc7, | ||
| 2630 | 0x12, 0x24, 0x01, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 2631 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 2632 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 2633 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 2634 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 2635 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 2636 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 2637 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 2638 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 2639 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 2640 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 2641 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 2642 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 2643 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 2644 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 2645 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 2646 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 2647 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 2648 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 2649 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 2650 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 2651 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 2652 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 2653 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 2654 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 2655 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 2656 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 2657 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 2658 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 2659 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 2660 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 2661 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 2662 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 2663 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 2664 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 2665 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 2666 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 2667 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 2668 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 2669 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 2670 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 2671 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 2672 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 2673 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 2674 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 2675 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 2676 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 2677 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 2678 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 2679 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 2680 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 2681 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 2682 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 2683 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 2684 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 2685 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 2686 | 0x00, 0x79, 0x20, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 2687 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 2688 | 0xf2, 0x00, 0x0e, 0xdc, 0x0c, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x41, | ||
| 2689 | 0x14, 0x19, 0x8c, 0x22, 0x31, 0x88, 0x64, 0x3d, 0x45, 0x66, 0x20, 0xca, | ||
| 2690 | 0x23, 0x21, 0x54, 0xc1, 0x30, 0xca, 0xe2, 0x3c, 0xcf, 0x13, 0x5d, 0x4f, | ||
| 2691 | 0x60, 0x18, 0x88, 0x91, 0x18, 0x8b, 0x82, 0x11, 0xc5, 0x72, 0x04, 0xd5, | ||
| 2692 | 0xf3, 0x00, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 2693 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 2694 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 2695 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 2696 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 2697 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 2698 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 2699 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 2700 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 2701 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 2702 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 2703 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 2704 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 2705 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 2706 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, | ||
| 2707 | 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x61, 0x69, 0x72, 0x2e, | ||
| 2708 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, | ||
| 2709 | 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x70, | ||
| 2710 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 2711 | 0x65, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x6e, 0x6f, 0x5f, | ||
| 2712 | 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, | ||
| 2713 | 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x70, | ||
| 2714 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 2715 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, | ||
| 2716 | 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, | ||
| 2717 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, 0x61, | ||
| 2718 | 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, | ||
| 2719 | 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 2720 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 2721 | 0x72, 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x66, 0x6c, 0x6f, 0x61, | ||
| 2722 | 0x74, 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x61, 0x69, | ||
| 2723 | 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 2724 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, | ||
| 2725 | 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, | ||
| 2726 | 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, | ||
| 2727 | 0x64, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, | ||
| 2728 | 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x66, 0x6c, 0x6f, | ||
| 2729 | 0x61, 0x74, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, 0x75, 0x74, 0x70, | ||
| 2730 | 0x75, 0x74, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, | ||
| 2731 | 0x70, 0x65, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 2732 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x74, | ||
| 2733 | 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, | ||
| 2734 | 0x64, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, | ||
| 2735 | 0x74, 0x6f, 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, | ||
| 2736 | 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, 0x64, 0x72, 0x5f, 0x77, | ||
| 2737 | 0x68, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x61, 0x69, | ||
| 2738 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, | ||
| 2739 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 2740 | 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, | ||
| 2741 | 0x7a, 0x65, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, | ||
| 2742 | 0x74, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, | ||
| 2743 | 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, | ||
| 2744 | 0x78, 0x33, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x59, 0x55, 0x56, 0x44, | ||
| 2745 | 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x61, | ||
| 2746 | 0x69, 0x72, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x61, 0x69, | ||
| 2747 | 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x78, 0x74, | ||
| 2748 | 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, | ||
| 2749 | 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x59, | ||
| 2750 | 0x74, 0x65, 0x78, 0x55, 0x56, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, | ||
| 2751 | 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, | ||
| 2752 | 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, | ||
| 2753 | 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, 0x6e, | ||
| 2754 | 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, | ||
| 2755 | 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, | ||
| 2756 | 0x42, 0x41, 0x41, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2757 | 0x00, 0x30, 0x82, 0x50, 0x06, 0xcd, 0x08, 0x82, 0x1a, 0x98, 0xc1, 0x08, | ||
| 2758 | 0x42, 0x19, 0x38, 0x23, 0x08, 0x65, 0xf0, 0x8c, 0x20, 0x94, 0x01, 0x34, | ||
| 2759 | 0x82, 0xf0, 0x00, 0x23, 0x08, 0x65, 0x10, 0x8d, 0x20, 0x94, 0x81, 0x34, | ||
| 2760 | 0x82, 0x50, 0x06, 0xd3, 0x08, 0x42, 0x19, 0x50, 0x23, 0x08, 0x65, 0x50, | ||
| 2761 | 0x8d, 0x20, 0x94, 0x81, 0x35, 0x82, 0x50, 0x06, 0xd7, 0x08, 0x42, 0x19, | ||
| 2762 | 0x60, 0x23, 0x08, 0x65, 0x90, 0x8d, 0x20, 0x94, 0x81, 0x36, 0x82, 0x50, | ||
| 2763 | 0x06, 0xdb, 0x08, 0x42, 0x19, 0x70, 0x23, 0x08, 0x65, 0xd0, 0x8d, 0x20, | ||
| 2764 | 0xac, 0x81, 0x37, 0x82, 0xb0, 0x06, 0xdf, 0x08, 0xc2, 0x1a, 0x80, 0xc1, | ||
| 2765 | 0x08, 0xc2, 0x1a, 0x84, 0xc1, 0x08, 0xc2, 0x1a, 0x88, 0xc1, 0x08, 0xc2, | ||
| 2766 | 0x1a, 0x8c, 0xc1, 0x08, 0xc2, 0x1a, 0x90, 0xc1, 0x08, 0xc2, 0x1a, 0x94, | ||
| 2767 | 0xc1, 0x0c, 0x83, 0x1e, 0x04, 0x7b, 0x30, 0xc3, 0xc0, 0x07, 0x42, 0x1f, | ||
| 2768 | 0xcc, 0x10, 0x0c, 0x33, 0x0c, 0x7a, 0xa0, 0x07, 0x7e, 0x30, 0x03, 0x41, | ||
| 2769 | 0xf0, 0x01, 0x1f, 0xf8, 0xc1, 0x0c, 0x41, 0x31, 0x43, 0x60, 0xcc, 0x10, | ||
| 2770 | 0x1c, 0x33, 0x14, 0x88, 0x1f, 0xf8, 0x41, 0xa2, 0xcc, 0x10, 0xf4, 0xc2, | ||
| 2771 | 0x0c, 0x88, 0x1f, 0x2c, 0x4c, 0x93, 0x28, 0xce, 0x33, 0x43, 0xc2, 0x07, | ||
| 2772 | 0x50, 0xc4, 0x48, 0x89, 0xe2, 0x4c, 0x33, 0x24, 0x7a, 0x00, 0x51, 0x8c, | ||
| 2773 | 0x94, 0x54, 0x8e, 0x35, 0x03, 0x1a, 0xf8, 0x41, 0x1f, 0xf8, 0x01, 0xd7, | ||
| 2774 | 0xf5, 0x41, 0x1f, 0xf8, 0x01, 0xe7, 0x89, 0x42, 0x1f, 0xf8, 0x01, 0xf7, | ||
| 2775 | 0x8d, 0x42, 0x1f, 0xf8, 0x01, 0x07, 0x06, 0xa4, 0xd0, 0x07, 0x7e, 0xc0, | ||
| 2776 | 0x85, 0x41, 0x29, 0xf4, 0x81, 0x1f, 0x70, 0x62, 0x60, 0x0a, 0x7d, 0xe0, | ||
| 2777 | 0x07, 0xdc, 0x18, 0x9c, 0x42, 0x1f, 0xf8, 0x01, 0x47, 0x06, 0x33, 0x48, | ||
| 2778 | 0xa0, 0x70, 0x61, 0xa1, 0x90, 0xf9, 0x01, 0x1f, 0x68, 0x9b, 0x38, 0x94, | ||
| 2779 | 0x41, 0x28, 0x98, 0x41, 0x1f, 0x24, 0x67, 0xe0, 0xa0, 0xc1, 0x0c, 0x8a, | ||
| 2780 | 0x1f, 0x90, 0x82, 0x1f, 0xa4, 0x81, 0x1a, 0x90, 0x42, 0x2a, 0xf8, 0xc1, | ||
| 2781 | 0x1a, 0xb0, 0xc1, 0x0c, 0x52, 0x1f, 0x5c, 0x18, 0x2a, 0x64, 0x7c, 0xc0, | ||
| 2782 | 0x07, 0xda, 0x46, 0x0e, 0x65, 0x80, 0x0a, 0x66, 0x40, 0x0a, 0x49, 0x1b, | ||
| 2783 | 0x38, 0x6e, 0x30, 0x83, 0xa2, 0x0a, 0x6f, 0x90, 0xf9, 0x01, 0x1f, 0xc0, | ||
| 2784 | 0x41, 0x12, 0x07, 0x8e, 0x1c, 0xcc, 0xa0, 0xac, 0xc2, 0x1b, 0x64, 0x7c, | ||
| 2785 | 0xc0, 0x07, 0x70, 0x90, 0xc4, 0x81, 0x33, 0x07, 0x33, 0x24, 0xac, 0x40, | ||
| 2786 | 0x07, 0x99, 0x1f, 0xf0, 0x41, 0x52, 0x07, 0x8e, 0x1d, 0xcc, 0x80, 0xfc, | ||
| 2787 | 0x02, 0x38, 0x84, 0xc3, 0x38, 0x94, 0x83, 0x39, 0x9c, 0x03, 0x3a, 0xcc, | ||
| 2788 | 0x30, 0xfc, 0x81, 0x2f, 0xa4, 0xc3, 0x0c, 0x41, 0x1e, 0xcc, 0x30, 0xe0, | ||
| 2789 | 0xc1, 0x3a, 0xb4, 0xc2, 0x0c, 0x03, 0xc7, 0x0e, 0xad, 0x30, 0x43, 0x74, | ||
| 2790 | 0x07, 0xed, 0xd0, 0x0a, 0xed, 0xe0, 0x0a, 0xed, 0xf0, 0x0a, 0xed, 0x00, | ||
| 2791 | 0x0b, 0xed, 0x10, 0x0b, 0xed, 0x20, 0x0b, 0xed, 0x30, 0x0b, 0xed, 0x40, | ||
| 2792 | 0x0b, 0x33, 0x0c, 0xee, 0xd0, 0x0e, 0xae, 0x50, 0x76, 0x00, 0x88, 0x01, | ||
| 2793 | 0x1a, 0x88, 0x81, 0x18, 0x88, 0x01, 0x27, 0x06, 0x62, 0x20, 0x06, 0x62, | ||
| 2794 | 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, | ||
| 2795 | 0x20, 0x06, 0x62, 0x20, 0x06, 0x68, 0x80, 0x06, 0x68, 0x80, 0x06, 0x68, | ||
| 2796 | 0x80, 0x06, 0x6e, 0xe0, 0x06, 0x16, 0x1d, 0xe8, 0x81, 0x65, 0x59, 0x7a, | ||
| 2797 | 0xc0, 0x99, 0x02, 0x2b, 0xb0, 0x02, 0xdd, 0xf8, 0x05, 0x4a, 0xf8, 0x85, | ||
| 2798 | 0x3d, 0xd8, 0x83, 0x3a, 0xc0, 0x03, 0x1d, 0x70, 0x74, 0xe0, 0x06, 0xbc, | ||
| 2799 | 0x21, 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, 0xcd, 0xae, 0xcd, 0xa5, 0xed, | ||
| 2800 | 0x8d, 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, 0x14, | ||
| 2801 | 0x81, 0x16, 0x6a, 0xe1, 0x14, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, | ||
| 2802 | 0x32, 0x37, 0xba, 0x51, 0x02, 0x5b, 0xb8, 0x25, 0x2c, 0x4d, 0xce, 0xc5, | ||
| 2803 | 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x94, 0xe0, 0x16, 0x8e, 0x0a, | ||
| 2804 | 0x4b, 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, 0xab, 0x0b, 0x3b, 0x2b, 0xfb, | ||
| 2805 | 0xb2, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0xc0, 0x85, 0x9b, | ||
| 2806 | 0xc2, 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, 0xe0, 0xd2, 0xd8, 0xca, 0xbe, | ||
| 2807 | 0xde, 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0x46, 0x19, 0x72, 0x41, 0x17, | ||
| 2808 | 0x76, 0xe1, 0x98, 0xb0, 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, 0xb6, | ||
| 2809 | 0x32, 0x37, 0xba, 0x51, 0x82, 0x74, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, | ||
| 2810 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, | ||
| 2811 | 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, | ||
| 2812 | 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, | ||
| 2813 | 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 2814 | 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, | ||
| 2815 | 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, | ||
| 2816 | 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, | ||
| 2817 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, | ||
| 2818 | 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, | ||
| 2819 | 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, | ||
| 2820 | 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, | ||
| 2821 | 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, | ||
| 2822 | 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, | ||
| 2823 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, | ||
| 2824 | 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, | ||
| 2825 | 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xd9, 0x00, 0x00, | ||
| 2826 | 0x00, 0x13, 0x04, 0x45, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 2827 | 0x00, 0x84, 0xd5, 0xc0, 0x08, 0x00, 0x95, 0x33, 0x00, 0x64, 0x8e, 0x00, | ||
| 2828 | 0x8c, 0x25, 0x04, 0x00, 0xad, 0x25, 0x50, 0x04, 0x65, 0x40, 0xef, 0x58, | ||
| 2829 | 0x03, 0x10, 0x08, 0x73, 0x0c, 0x50, 0x1c, 0xc4, 0xc1, 0x1c, 0x03, 0xe4, | ||
| 2830 | 0xc4, 0xc1, 0x58, 0x03, 0x30, 0x10, 0x04, 0x8c, 0x00, 0x8c, 0x11, 0x80, | ||
| 2831 | 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x63, | ||
| 2832 | 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, 0x30, | ||
| 2833 | 0x03, 0x30, 0x07, 0xc1, 0x07, 0x7b, 0xc0, 0x07, 0x7f, 0x40, 0xc2, 0x0c, | ||
| 2834 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x34, 0x00, 0x00, | ||
| 2835 | 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0xc8, 0x49, 0x00, 0x00, 0x00, | ||
| 2836 | 0x00, 0x63, 0x60, 0x61, 0x98, 0x05, 0x00, 0x00, 0x00, 0x61, 0x69, 0x72, | ||
| 2837 | 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, | ||
| 2838 | 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, 0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, | ||
| 2839 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x61, 0x69, 0x72, 0x2d, | ||
| 2840 | 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, | ||
| 2841 | 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, | ||
| 2842 | 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x73, 0x61, | ||
| 2843 | 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, | ||
| 2844 | 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x74, 0x65, | ||
| 2845 | 0x78, 0x74, 0x75, 0x72, 0x65, 0x73, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, | ||
| 2846 | 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, | ||
| 2847 | 0x67, 0x28, 0x34, 0x29, 0x00, 0x2b, 0x84, 0x7a, 0x80, 0x87, 0x15, 0x83, | ||
| 2848 | 0x3d, 0xd4, 0x43, 0x3c, 0xac, 0x18, 0xee, 0xa1, 0x1e, 0xe4, 0x61, 0xc5, | ||
| 2849 | 0x80, 0x0f, 0xf5, 0x30, 0x0f, 0x2b, 0x86, 0x7c, 0xa8, 0x07, 0x7a, 0xd8, | ||
| 2850 | 0x10, 0xd8, 0xc3, 0x86, 0x21, 0x1f, 0xf0, 0xe1, 0x1e, 0x36, 0x08, 0xf8, | ||
| 2851 | 0x70, 0x0f, 0x1b, 0x04, 0x7b, 0xc8, 0x87, 0x0d, 0x41, 0x3e, 0x6c, 0x18, | ||
| 2852 | 0xec, 0x01, 0x1f, 0xee, 0x01, 0x7b, 0x18, 0x34, 0x33, 0xb0, 0x03, 0x0a, | ||
| 2853 | 0x80, 0x31, 0x1c, 0x11, 0x24, 0x81, 0x7f, 0xcc, 0x32, 0x04, 0x42, 0x30, | ||
| 2854 | 0x62, 0xd0, 0x18, 0x21, 0x08, 0x06, 0x67, 0xb0, 0x07, 0x5b, 0xe6, 0x61, | ||
| 2855 | 0xd5, 0xc5, 0x30, 0x77, 0x30, 0x9a, 0x10, 0x00, 0x23, 0x06, 0x8d, 0x11, | ||
| 2856 | 0x82, 0x60, 0x70, 0x06, 0x7d, 0xc0, 0x6d, 0x60, 0xa0, 0x5d, 0x99, 0xe3, | ||
| 2857 | 0xe4, 0xc1, 0x68, 0x42, 0x00, 0x0c, 0x32, 0x0c, 0xca, 0x34, 0xc8, 0x20, | ||
| 2858 | 0x30, 0xd3, 0x20, 0x83, 0x10, 0x4c, 0x37, 0x06, 0xf0, 0x52, 0x10, 0x94, | ||
| 2859 | 0x41, 0x86, 0x00, 0xca, 0x8c, 0x08, 0xc0, 0x7f, 0x23, 0xc3, 0x19, 0xd0, | ||
| 2860 | 0x01, 0x29, 0x5c, 0x00, 0x2f, 0x05, 0x41, 0x19, 0x64, 0x08, 0x2a, 0x6f, | ||
| 2861 | 0xc4, 0xe0, 0x38, 0x42, 0x10, 0x2c, 0xfc, 0x63, 0x83, 0x85, 0x22, 0x98, | ||
| 2862 | 0x63, 0xb0, 0x82, 0x3c, 0xd8, 0x48, 0xd1, 0x06, 0x7a, 0xa0, 0x0a, 0xa8, | ||
| 2863 | 0x40, 0x06, 0x17, 0xc0, 0x4b, 0x41, 0x50, 0x06, 0x19, 0x82, 0x8d, 0x0c, | ||
| 2864 | 0x46, 0x0c, 0x8e, 0x23, 0x04, 0xc1, 0xc2, 0x3f, 0x36, 0x5b, 0x58, 0x82, | ||
| 2865 | 0x39, 0x06, 0x23, 0x48, 0x83, 0x8d, 0x14, 0x73, 0x00, 0x0a, 0xb0, 0xe0, | ||
| 2866 | 0x0a, 0x69, 0x70, 0x01, 0xbc, 0x14, 0x04, 0x65, 0x90, 0x21, 0x08, 0x03, | ||
| 2867 | 0x35, 0x18, 0x31, 0x38, 0x8e, 0x10, 0x04, 0x0b, 0xff, 0xd8, 0x78, 0x21, | ||
| 2868 | 0x0a, 0xe6, 0x18, 0x8c, 0xc0, 0x0d, 0x66, 0x09, 0x88, 0xe1, 0x88, 0xcf, | ||
| 2869 | 0x0c, 0x02, 0xff, 0x98, 0x65, 0x18, 0x88, 0x60, 0xc4, 0xa0, 0x31, 0x42, | ||
| 2870 | 0x10, 0x0c, 0xce, 0x20, 0x17, 0xf2, 0xe0, 0x0e, 0xf8, 0xc0, 0x0e, 0xe6, | ||
| 2871 | 0xa0, 0x0e, 0xd4, 0x40, 0x0d, 0x6a, 0x61, 0x34, 0x21, 0x00, 0x46, 0x0c, | ||
| 2872 | 0x1a, 0x23, 0x04, 0xc1, 0xe0, 0x0c, 0x76, 0x41, 0x0f, 0xf2, 0xc0, 0x0f, | ||
| 2873 | 0xf0, 0xa0, 0x0e, 0xee, 0x80, 0x0d, 0xd8, 0xe0, 0x16, 0x46, 0x13, 0x02, | ||
| 2874 | 0x60, 0x90, 0x21, 0x48, 0x03, 0x3b, 0x18, 0x64, 0x20, 0xd2, 0x40, 0x0e, | ||
| 2875 | 0x06, 0x19, 0x04, 0x34, 0x90, 0x83, 0x41, 0x06, 0x21, 0x90, 0x83, 0x13, | ||
| 2876 | 0x05, 0x78, 0x29, 0x08, 0xca, 0x20, 0x43, 0xf0, 0x06, 0x78, 0x60, 0x44, | ||
| 2877 | 0x00, 0xfe, 0x1b, 0x19, 0x4c, 0x61, 0x16, 0xc6, 0xe1, 0x02, 0x78, 0x29, | ||
| 2878 | 0x08, 0xca, 0x20, 0x43, 0x40, 0x07, 0x7d, 0x30, 0x62, 0x70, 0x1c, 0x21, | ||
| 2879 | 0x08, 0x16, 0xfe, 0xb1, 0xbd, 0x43, 0x11, 0xcc, 0x31, 0xd4, 0x41, 0x80, | ||
| 2880 | 0x0b, 0x1b, 0x29, 0x58, 0x21, 0x17, 0xd2, 0xe1, 0x1c, 0x46, 0xe1, 0x02, | ||
| 2881 | 0x78, 0x29, 0x08, 0xca, 0x20, 0x43, 0xa0, 0x07, 0xa3, 0x30, 0x62, 0x70, | ||
| 2882 | 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xb1, 0xd5, 0xc3, 0x12, 0xcc, 0x31, 0x18, | ||
| 2883 | 0x01, 0x2a, 0x6c, 0xa4, 0x90, 0x85, 0x5f, 0x78, 0x87, 0x76, 0x40, 0x85, | ||
| 2884 | 0x0b, 0xe0, 0xa5, 0x20, 0x28, 0x83, 0x0c, 0x01, 0x28, 0xa4, 0xc2, 0x88, | ||
| 2885 | 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0xb6, 0x0f, 0x51, 0x30, 0xc7, | ||
| 2886 | 0x60, 0x04, 0xad, 0x30, 0x4b, 0x40, 0x0c, 0x74, 0x04, 0xa0, 0x10, 0x08, | ||
| 2887 | 0x83, 0x48, 0x08, 0x73, 0x0c, 0x01, 0x2a, 0xb8, 0xc2, 0x88, 0xc1, 0x81, | ||
| 2888 | 0xc4, 0x20, 0x58, 0xf8, 0x07, 0x44, 0x12, 0xc1, 0x2e, 0x58, 0xe0, 0x0b, | ||
| 2889 | 0xe2, 0x9f, 0x41, 0x40, 0x0c, 0x19, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, | ||
| 2890 | 0x70, 0x87, 0x23, 0x1f, 0x10, 0x7d, 0xd8, 0x52, 0x10, 0xc7, 0x3e, 0x20, | ||
| 2891 | 0xfc, 0xb0, 0xa5, 0x30, 0x8e, 0x7d, 0x40, 0xf8, 0x61, 0x4b, 0xc1, 0x1c, | ||
| 2892 | 0xfd, 0x80, 0xf8, 0xc3, 0x96, 0x22, 0x3a, 0xfa, 0x01, 0xf1, 0x87, 0x2d, | ||
| 2893 | 0xc5, 0x75, 0xf4, 0x03, 0xe2, 0x0f, 0x5b, 0x8a, 0xee, 0xe8, 0x07, 0xc4, | ||
| 2894 | 0x1f, 0xb6, 0x14, 0x64, 0x70, 0xec, 0x03, 0xc2, 0x0f, 0x5b, 0x0a, 0x33, | ||
| 2895 | 0x38, 0xf6, 0x01, 0xe1, 0x87, 0x2d, 0x45, 0x1b, 0x1c, 0xfd, 0x80, 0xf8, | ||
| 2896 | 0xc3, 0x96, 0x42, 0x0e, 0x8e, 0x7e, 0x40, 0xfc, 0x61, 0x4b, 0x81, 0x07, | ||
| 2897 | 0x47, 0x3f, 0x20, 0xfe, 0xb0, 0xa5, 0xf0, 0x83, 0xa3, 0x1f, 0x10, 0x7f, | ||
| 2898 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xbe, 0x01, 0x00, | ||
| 2899 | 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, 0x00, 0x4f, 0x00, 0x00, | ||
| 2900 | 0x00, 0x54, 0xce, 0x00, 0xd0, 0x5a, 0x02, 0x45, 0x40, 0xef, 0x58, 0x03, | ||
| 2901 | 0x10, 0x08, 0x23, 0x00, 0x34, 0xcf, 0x41, 0x40, 0x4e, 0x93, 0x06, 0x63, | ||
| 2902 | 0x11, 0x40, 0x20, 0x1c, 0x04, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, | ||
| 2903 | 0x18, 0x81, 0x2c, 0xba, 0x3d, 0x0d, 0x06, 0x63, 0x04, 0xb5, 0x5a, 0xab, | ||
| 2904 | 0xed, 0x37, 0x46, 0xd0, 0xc7, 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0x6e, 0x1f, | ||
| 2905 | 0x8b, 0xb6, 0x2f, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, | ||
| 2906 | 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, | ||
| 2907 | 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, | ||
| 2908 | 0x18, 0x81, 0xce, 0x9a, 0x73, 0x08, 0x06, 0x23, 0x00, 0x63, 0x04, 0x20, | ||
| 2909 | 0x08, 0x82, 0x24, 0x18, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, | ||
| 2910 | 0x03, 0x40, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x1c, 0x44, 0x1d, 0xec, 0x41, | ||
| 2911 | 0x1d, 0xf8, 0x01, 0x15, 0x33, 0x00, 0x23, 0x00, 0x33, 0x00, 0x63, 0x0d, | ||
| 2912 | 0x20, 0x08, 0x82, 0xf8, 0x07, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, | ||
| 2913 | 0xf8, 0x37, 0xd6, 0xc0, 0xb6, 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, | ||
| 2914 | 0xc7, 0xb6, 0xf3, 0x4f, 0x7a, 0x63, 0x0d, 0x20, 0x08, 0xb2, 0xf5, 0x2f, | ||
| 2915 | 0x80, 0x20, 0xc8, 0xd6, 0xbf, 0x00, 0x82, 0x20, 0x5b, 0xff, 0xc2, 0x58, | ||
| 2916 | 0x03, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x80, | ||
| 2917 | 0x20, 0xb8, 0xe6, 0x60, 0x30, 0xd6, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, | ||
| 2918 | 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x20, 0x48, 0xb7, 0x39, 0x18, 0x8c, 0x35, | ||
| 2919 | 0xac, 0x23, 0x1e, 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x3a, | ||
| 2920 | 0xe2, 0x31, 0x0b, 0x06, 0x63, 0x0d, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, | ||
| 2921 | 0x20, 0x8c, 0x87, 0x63, 0x00, 0x82, 0x30, 0x1e, 0x8e, 0xc1, 0x58, 0x83, | ||
| 2922 | 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, | ||
| 2923 | 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, | ||
| 2924 | 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, | ||
| 2925 | 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, | ||
| 2926 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, | ||
| 2927 | 0x00, 0x1b, 0x06, 0x77, 0x68, 0x87, 0x57, 0xd8, 0x30, 0xb8, 0x43, 0x3b, | ||
| 2928 | 0xd0, 0xc2, 0x86, 0xc1, 0x1d, 0xda, 0x21, 0x16, 0x36, 0x0c, 0xee, 0xd0, | ||
| 2929 | 0x0e, 0xb2, 0xb0, 0x61, 0x70, 0x87, 0x76, 0x98, 0x85, 0x0d, 0x83, 0x3b, | ||
| 2930 | 0xb4, 0x03, 0x2c, 0x6c, 0x18, 0xdc, 0xa1, 0x1d, 0x5a, 0x01, 0x00, 0x00, | ||
| 2931 | 0x00, 0x7b, 0x18, 0xce, 0x20, 0x0e, 0x44, 0x81, 0x02, 0x60, 0x0c, 0x47, | ||
| 2932 | 0x04, 0x55, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0xac, 0xc1, | ||
| 2933 | 0x64, 0x06, 0x7b, 0x18, 0xd6, 0xa0, 0x0e, 0xec, 0x80, 0x02, 0x60, 0x8c, | ||
| 2934 | 0x18, 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x84, 0xc1, 0x2a, 0x0c, 0x23, | ||
| 2935 | 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x5f, 0x2b, 0x04, 0x90, 0x05, | ||
| 2936 | 0x10, 0xf8, 0x8f, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x7c, 0xad, | ||
| 2937 | 0x10, 0x54, 0x36, 0x44, 0xe2, 0x6f, 0x51, 0x10, 0xfe, 0x36, 0x04, 0xe4, | ||
| 2938 | 0x3f, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x11, 0x06, 0xb2, 0x10, | ||
| 2939 | 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x7c, 0xb4, 0x10, 0x4c, | ||
| 2940 | 0x16, 0x4c, 0xe2, 0x3f, 0xc7, 0xd0, 0x2d, 0xa1, 0x30, 0xc8, 0x10, 0x78, | ||
| 2941 | 0x73, 0x60, 0x43, 0x40, 0xfe, 0x83, 0x0c, 0x01, 0x18, 0xd0, 0xc1, 0x20, | ||
| 2942 | 0x43, 0xc0, 0x07, 0x74, 0x30, 0x4b, 0x20, 0x0c, 0x54, 0x04, 0x42, 0xa0, | ||
| 2943 | 0x0f, 0xc0, 0x1e, 0x86, 0x3e, 0x38, 0x05, 0x5b, 0xa0, 0x00, 0x18, 0xc3, | ||
| 2944 | 0x11, 0x01, 0x1b, 0x38, 0xfe, 0x31, 0xcb, 0x30, 0x10, 0xc1, 0x20, 0x03, | ||
| 2945 | 0x91, 0x06, 0x7c, 0xb0, 0x87, 0x21, 0x14, 0x56, 0xc1, 0x15, 0x28, 0x00, | ||
| 2946 | 0xc6, 0x1e, 0x86, 0x51, 0x68, 0x85, 0x57, 0xa0, 0x00, 0x18, 0x23, 0x06, | ||
| 2947 | 0x4a, 0x12, 0x83, 0x60, 0xe1, 0x1f, 0x9d, 0x39, 0x14, 0xdd, 0x31, 0x04, | ||
| 2948 | 0x83, 0x0c, 0x01, 0x1b, 0x80, 0xc2, 0x20, 0x43, 0xb0, 0x80, 0xc2, 0x2c, | ||
| 2949 | 0x01, 0x31, 0x50, 0x11, 0x08, 0x03, 0x26, 0x0c, 0x47, 0x84, 0x01, 0x1f, | ||
| 2950 | 0x04, 0xfe, 0x31, 0xcb, 0x50, 0x4c, 0xc1, 0x1e, 0x06, 0x55, 0xa0, 0x05, | ||
| 2951 | 0x72, 0xa0, 0x00, 0x18, 0xc3, 0x11, 0xc1, 0x1f, 0x04, 0xfe, 0x31, 0xcb, | ||
| 2952 | 0x60, 0x1c, 0xc1, 0x20, 0x43, 0x61, 0x07, 0xa9, 0xb0, 0x87, 0xc1, 0x15, | ||
| 2953 | 0x70, 0xa1, 0x1c, 0x28, 0x00, 0xc6, 0x1c, 0x83, 0x1d, 0x04, 0xba, 0x30, | ||
| 2954 | 0xc8, 0x10, 0xdc, 0x01, 0x2b, 0x58, 0x50, 0x88, 0xff, 0x20, 0x43, 0x90, | ||
| 2955 | 0x07, 0xad, 0x30, 0x4b, 0xd0, 0x06, 0x7b, 0x18, 0x68, 0xc1, 0x17, 0xd8, | ||
| 2956 | 0x81, 0x02, 0x60, 0xec, 0x61, 0xb0, 0x05, 0x70, 0x68, 0x07, 0x0a, 0x80, | ||
| 2957 | 0x31, 0xc8, 0x00, 0x85, 0x82, 0x2c, 0x8c, 0x18, 0x14, 0x47, 0x08, 0x82, | ||
| 2958 | 0x41, 0xc6, 0x0f, 0xc4, 0x2c, 0x03, 0x22, 0x05, 0x63, 0x08, 0x12, 0x39, | ||
| 2959 | 0x0c, 0x47, 0x04, 0xad, 0xa0, 0xf8, 0xc7, 0x2c, 0x83, 0x92, 0x04, 0x26, | ||
| 2960 | 0xb4, 0x82, 0xf8, 0xcf, 0x12, 0x2c, 0x36, 0xb4, 0x02, 0xf8, 0x8f, 0x18, | ||
| 2961 | 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x58, 0x22, 0x11, 0x58, 0xe0, 0x0a, | ||
| 2962 | 0xe2, 0x3f, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0x95, 0x44, | ||
| 2963 | 0xe0, 0x0a, 0xb3, 0x04, 0xcb, 0x40, 0x05, 0xa0, 0x24, 0x82, 0x32, 0xc7, | ||
| 2964 | 0xa0, 0x0a, 0x01, 0x3b, 0x8c, 0x21, 0x6c, 0xe1, 0x30, 0x1c, 0x11, 0xd8, | ||
| 2965 | 0x82, 0xe2, 0x1f, 0xb3, 0x0c, 0x0d, 0x13, 0x98, 0x60, 0x0b, 0xe2, 0x3f, | ||
| 2966 | 0x4b, 0xe0, 0xd8, 0x60, 0x0b, 0xe0, 0x3f, 0x62, 0x60, 0x1c, 0x21, 0x08, | ||
| 2967 | 0x16, 0xfe, 0x61, 0xad, 0x44, 0x60, 0xc1, 0x2d, 0x88, 0xff, 0x88, 0xc1, | ||
| 2968 | 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0xe5, 0x12, 0xc1, 0x2d, 0xcc, 0x12, | ||
| 2969 | 0x38, 0x03, 0x15, 0x80, 0xc2, 0x08, 0xcd, 0x1c, 0x43, 0x12, 0xa4, 0xc3, | ||
| 2970 | 0x18, 0x02, 0x19, 0xa4, 0xc3, 0x70, 0x44, 0xf0, 0x0b, 0x8a, 0x7f, 0xcc, | ||
| 2971 | 0x32, 0x40, 0x4f, 0x60, 0xc2, 0x2f, 0x88, 0xff, 0x2c, 0x41, 0x64, 0xc3, | ||
| 2972 | 0x2f, 0x80, 0xff, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x45, | ||
| 2973 | 0x13, 0x81, 0x05, 0xe0, 0x20, 0xfe, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, | ||
| 2974 | 0xe1, 0x1f, 0xd4, 0x4d, 0x04, 0xe0, 0x30, 0x4b, 0x10, 0x0d, 0x54, 0x00, | ||
| 2975 | 0xca, 0x23, 0x40, 0x73, 0x0c, 0x49, 0x10, 0x0f, 0xb3, 0x04, 0xd2, 0x40, | ||
| 2976 | 0x45, 0x20, 0x44, 0x7a, 0x70, 0x0c, 0x32, 0x04, 0xbf, 0x20, 0x0f, 0x73, | ||
| 2977 | 0x0c, 0xbd, 0x00, 0x06, 0x21, 0x31, 0xc8, 0x10, 0xf8, 0xc2, 0x3c, 0xd8, | ||
| 2978 | 0x10, 0x88, 0xff, 0x20, 0x43, 0x00, 0x0e, 0xf4, 0x30, 0x4b, 0xd0, 0x06, | ||
| 2979 | 0xc3, 0x11, 0xb3, 0x60, 0x0e, 0x81, 0x7f, 0xcc, 0x32, 0x50, 0x60, 0x10, | ||
| 2980 | 0x0c, 0x32, 0xd0, 0x41, 0x39, 0xe0, 0xc3, 0x1e, 0x86, 0x7e, 0x38, 0x89, | ||
| 2981 | 0x9a, 0xa0, 0x00, 0x18, 0x7b, 0x18, 0xfe, 0x21, 0x25, 0x6c, 0x82, 0x02, | ||
| 2982 | 0x60, 0xcc, 0x31, 0x9c, 0x43, 0xb0, 0x12, 0x83, 0x0c, 0x01, 0x3a, 0xf4, | ||
| 2983 | 0x83, 0x05, 0x87, 0xf8, 0x0f, 0x32, 0x04, 0xea, 0xe0, 0x0f, 0x23, 0x06, | ||
| 2984 | 0xc5, 0x11, 0x82, 0x60, 0x90, 0xa1, 0xc5, 0x31, 0xcb, 0xf0, 0x55, 0xc1, | ||
| 2985 | 0x18, 0xc2, 0x00, 0x13, 0xc3, 0x11, 0xc1, 0x3f, 0x28, 0xfe, 0x31, 0xcb, | ||
| 2986 | 0x70, 0x59, 0x81, 0x09, 0xff, 0x20, 0xfe, 0xb3, 0x04, 0xd8, 0x88, 0x81, | ||
| 2987 | 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0xd5, 0x16, 0xc3, 0x88, 0xc1, 0x71, | ||
| 2988 | 0x84, 0x20, 0x58, 0xf8, 0x07, 0xf5, 0x16, 0x01, 0x48, 0x58, 0x00, 0x12, | ||
| 2989 | 0xe2, 0x6f, 0x01, 0x48, 0x80, 0xff, 0x2c, 0x01, 0x36, 0x50, 0x01, 0x28, | ||
| 2990 | 0x96, 0x70, 0xcd, 0x31, 0xc8, 0x43, 0x80, 0x13, 0x63, 0x08, 0x4c, 0x4b, | ||
| 2991 | 0x0c, 0x47, 0x04, 0x28, 0xa1, 0xf8, 0xc7, 0x2c, 0x83, 0x96, 0x05, 0x26, | ||
| 2992 | 0xa0, 0x84, 0xf8, 0xcf, 0x12, 0x6c, 0x23, 0x06, 0xc6, 0x11, 0x82, 0x60, | ||
| 2993 | 0xe1, 0x1f, 0x96, 0x5d, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, | ||
| 2994 | 0x1f, 0x14, 0x5e, 0x04, 0x29, 0x61, 0x41, 0x4a, 0x88, 0xbf, 0x05, 0x29, | ||
| 2995 | 0x01, 0xfe, 0xb3, 0x04, 0xdb, 0x40, 0x05, 0xa0, 0x64, 0x82, 0x36, 0xc7, | ||
| 2996 | 0x90, 0x04, 0x35, 0x31, 0x86, 0x50, 0xd5, 0xc4, 0x70, 0x44, 0x10, 0x13, | ||
| 2997 | 0x8a, 0x7f, 0xcc, 0x32, 0x74, 0x5c, 0x60, 0x42, 0x4c, 0x88, 0xff, 0x2c, | ||
| 2998 | 0x81, 0x37, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0xfd, 0xc5, | ||
| 2999 | 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0x85, 0x46, 0x20, | ||
| 3000 | 0x13, 0x16, 0xc8, 0x84, 0xf8, 0x5b, 0x20, 0x13, 0xe0, 0x3f, 0x4b, 0xe0, | ||
| 3001 | 0x0d, 0x54, 0x00, 0x0a, 0x27, 0x74, 0x73, 0x0c, 0x49, 0xd0, 0x13, 0x23, | ||
| 3002 | 0x06, 0xc8, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0xd2, 0x69, 0x04, 0x26, 0x41, | ||
| 3003 | 0x12, 0x83, 0x0c, 0x01, 0x4a, 0xf0, 0xc4, 0x2c, 0xc1, 0x37, 0x50, 0x11, | ||
| 3004 | 0xf8, 0x01, 0x25, 0x78, 0x83, 0x0c, 0x41, 0x4b, 0xf8, 0xc4, 0x2c, 0x41, | ||
| 3005 | 0x1b, 0xcc, 0x32, 0x84, 0x41, 0x1b, 0xf0, 0xc3, 0x20, 0x43, 0x2f, 0xb8, | ||
| 3006 | 0x44, 0x58, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x6c, 0xa8, | ||
| 3007 | 0x11, 0x88, 0xc4, 0x1c, 0xc3, 0x4a, 0x04, 0x71, 0x31, 0x62, 0x70, 0x1c, | ||
| 3008 | 0x21, 0x08, 0x16, 0xfe, 0xb1, 0xa9, 0xc6, 0x30, 0x12, 0x73, 0x0c, 0x42, | ||
| 3009 | 0x70, 0x16, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x1b, 0x6b, | ||
| 3010 | 0x14, 0x24, 0x31, 0xc7, 0x20, 0x04, 0x68, 0x31, 0xc8, 0x10, 0xc8, 0x84, | ||
| 3011 | 0x59, 0x0c, 0x32, 0x04, 0xe5, 0x60, 0x16, 0x7b, 0x18, 0xdc, 0x02, 0x2f, | ||
| 3012 | 0x4c, 0x83, 0x02, 0x60, 0xec, 0x61, 0x80, 0x0b, 0xbd, 0x38, 0x0d, 0x0a, | ||
| 3013 | 0x80, 0x31, 0xc7, 0x80, 0x13, 0x01, 0x5f, 0x0c, 0x32, 0x04, 0x39, 0xe1, | ||
| 3014 | 0x16, 0x16, 0x24, 0xe2, 0x3f, 0xc8, 0x10, 0xec, 0xc4, 0x5b, 0x8c, 0x18, | ||
| 3015 | 0x14, 0x47, 0x08, 0x82, 0x41, 0x96, 0x1b, 0xc7, 0x2c, 0x03, 0x1b, 0x88, | ||
| 3016 | 0x41, 0x30, 0x86, 0x30, 0x84, 0xc6, 0x70, 0x44, 0x00, 0x17, 0x8a, 0x7f, | ||
| 3017 | 0xcc, 0x32, 0x90, 0xc1, 0x18, 0x04, 0x26, 0xc0, 0x85, 0xf8, 0xcf, 0x12, | ||
| 3018 | 0x94, 0xc1, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0xe5, 0x1b, | ||
| 3019 | 0xc3, 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x05, 0x1e, 0x41, | ||
| 3020 | 0x5c, 0x58, 0x10, 0x17, 0xe2, 0x6f, 0x41, 0x5c, 0x80, 0xff, 0x2c, 0x41, | ||
| 3021 | 0x19, 0x0c, 0x54, 0x00, 0xca, 0x18, 0x08, 0x64, 0x30, 0xc7, 0x30, 0x16, | ||
| 3022 | 0x41, 0x6a, 0x8c, 0x21, 0x30, 0x7e, 0x31, 0x1c, 0x11, 0xe4, 0x85, 0xe2, | ||
| 3023 | 0x1f, 0xb3, 0x0c, 0x67, 0x60, 0x06, 0x81, 0x09, 0x79, 0x21, 0xfe, 0xb3, | ||
| 3024 | 0x04, 0x68, 0x30, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0x9d, | ||
| 3025 | 0xc7, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xa5, 0x47, | ||
| 3026 | 0xa0, 0x17, 0x16, 0xe8, 0x85, 0xf8, 0x5b, 0xa0, 0x17, 0xe0, 0x3f, 0x4b, | ||
| 3027 | 0x80, 0x06, 0x03, 0x15, 0x80, 0x62, 0x06, 0xc2, 0x19, 0xcc, 0x31, 0x24, | ||
| 3028 | 0x81, 0x69, 0x8c, 0x21, 0x54, 0xa6, 0x31, 0x1c, 0x11, 0x88, 0x86, 0xe2, | ||
| 3029 | 0x1f, 0xb3, 0x0c, 0x6a, 0x90, 0x06, 0x81, 0x09, 0xa2, 0x21, 0xfe, 0xb3, | ||
| 3030 | 0x04, 0x6b, 0x30, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0xc1, | ||
| 3031 | 0xc7, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xc9, 0x47, | ||
| 3032 | 0x30, 0x1a, 0x16, 0x8c, 0x86, 0xf8, 0x5b, 0x30, 0x1a, 0xe0, 0x3f, 0x4b, | ||
| 3033 | 0xb0, 0x06, 0x03, 0x15, 0x80, 0x92, 0x06, 0x82, 0x1a, 0xcc, 0x31, 0x24, | ||
| 3034 | 0x81, 0x6b, 0x8c, 0x18, 0x20, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x48, 0xf8, | ||
| 3035 | 0x11, 0xdc, 0x45, 0x5d, 0x0c, 0x32, 0x04, 0x79, 0xd1, 0x1a, 0xb3, 0x04, | ||
| 3036 | 0x6c, 0x30, 0x50, 0x11, 0xf8, 0x41, 0x18, 0x08, 0x6b, 0x30, 0xc8, 0x10, | ||
| 3037 | 0xf8, 0xc5, 0x6b, 0xcc, 0x12, 0xb4, 0xc1, 0x40, 0x4b, 0xc0, 0x23, 0x06, | ||
| 3038 | 0x8f, 0x48, 0x3c, 0xf2, 0xc9, 0x02, 0x1b, 0xf0, 0x08, 0x18, 0x0c, 0xb4, | ||
| 3039 | 0x04, 0x28, 0x62, 0xe8, 0x85, 0x64, 0x0e, 0x1f, 0xc1, 0x06, 0xfc, 0x02, | ||
| 3040 | 0x06, 0x83, 0x0c, 0x81, 0x10, 0x1b, 0x19, 0x04, 0xc4, 0x00, 0x00, 0x00, | ||
| 3041 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x78, 0x87, 0x2d, 0x83, | ||
| 3042 | 0x11, 0xc0, 0xc3, 0x96, 0x21, 0x0b, 0xe2, 0x61, 0xcb, 0xe0, 0x05, 0xf2, | ||
| 3043 | 0xb0, 0x65, 0x00, 0x83, 0x60, 0x1e, 0xb6, 0x0c, 0x69, 0x10, 0xb8, 0xc3, | ||
| 3044 | 0x96, 0xc1, 0x0d, 0x02, 0x7a, 0xd8, 0x32, 0xd4, 0x41, 0x50, 0x0f, 0x5b, | ||
| 3045 | 0x86, 0x3b, 0x08, 0xe8, 0x61, 0xcb, 0xb0, 0x0e, 0x41, 0x3d, 0x6c, 0x19, | ||
| 3046 | 0xda, 0x21, 0xa0, 0x87, 0x2d, 0x43, 0x5a, 0x04, 0xf5, 0xb0, 0x65, 0x58, | ||
| 3047 | 0x8b, 0x80, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 3048 | 0x00, 0x73, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 3049 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x54, 0xce, 0x00, 0xd0, 0x5a, 0x02, 0x45, | ||
| 3050 | 0x40, 0xef, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, 0x34, 0xcf, 0x41, 0x40, | ||
| 3051 | 0x4e, 0xc3, 0x06, 0x04, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, | ||
| 3052 | 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x23, 0x00, 0x14, 0xcc, 0x00, 0xcc, | ||
| 3053 | 0x00, 0x50, 0x31, 0x03, 0x30, 0xd6, 0xc0, 0xb2, 0x67, 0x28, 0x7f, 0xa8, | ||
| 3054 | 0x5f, 0xc6, 0xea, 0x97, 0x9f, 0xba, 0x38, 0x7b, 0x63, 0x0d, 0x7a, 0x0d, | ||
| 3055 | 0xee, 0xb8, 0xa7, 0xe2, 0xb9, 0x6d, 0x7f, 0x6f, 0x9f, 0xd2, 0xa3, 0x37, | ||
| 3056 | 0xd6, 0xb0, 0xce, 0x31, 0x8b, 0x7a, 0x69, 0x08, 0xa3, 0xbb, 0x77, 0xb7, | ||
| 3057 | 0xb1, 0x6a, 0x7f, 0x63, 0x0d, 0x62, 0x2e, 0xa6, 0xfd, 0x07, 0x96, 0x3c, | ||
| 3058 | 0x1b, 0xff, 0xc2, 0x98, 0xae, 0x6a, 0xee, 0x0b, 0x63, 0x0d, 0xff, 0x4c, | ||
| 3059 | 0xfa, 0xbf, 0x2f, 0xd0, 0x35, 0x28, 0xe6, 0x5f, 0x0b, 0xc7, 0x31, 0xe8, | ||
| 3060 | 0x0b, 0x63, 0x0d, 0x73, 0xdf, 0xa6, 0xa9, 0x2f, 0xb4, 0x6e, 0xc8, 0xf3, | ||
| 3061 | 0xbe, 0xc0, 0xe7, 0xac, 0x8f, 0x7f, 0x00, 0x00, 0x00, 0x83, 0x0c, 0xd7, | ||
| 3062 | 0xd1, 0x0c, 0x47, 0x58, 0x4d, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0xcc, | ||
| 3063 | 0x31, 0x24, 0x96, 0x18, 0x0c, 0x32, 0x04, 0x4a, 0x64, 0xc1, 0x26, 0xfe, | ||
| 3064 | 0x83, 0x0c, 0x01, 0x23, 0xcd, 0x12, 0x24, 0xc3, 0x11, 0x5b, 0x14, 0xf8, | ||
| 3065 | 0xc7, 0x2c, 0xc3, 0x90, 0x04, 0xc3, 0x11, 0x9d, 0x14, 0xf8, 0xc7, 0x2c, | ||
| 3066 | 0x03, 0x51, 0x04, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x1b, | ||
| 3067 | 0x28, 0x7c, 0xce, 0x1c, 0x43, 0x14, 0xa4, 0xc1, 0x88, 0xc1, 0x71, 0x84, | ||
| 3068 | 0x20, 0x58, 0xf8, 0xc7, 0x26, 0x0a, 0x61, 0xf0, 0xcc, 0x31, 0x08, 0x01, | ||
| 3069 | 0x37, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xb1, 0x91, 0xc2, 0x18, | ||
| 3070 | 0x40, 0x73, 0x0c, 0x42, 0xd0, 0xcd, 0x12, 0x14, 0x03, 0x15, 0x81, 0x40, | ||
| 3071 | 0x70, 0xc3, 0x18, 0x42, 0xf0, 0x06, 0x63, 0x08, 0x42, 0x18, 0x8c, 0x21, | ||
| 3072 | 0x0c, 0x61, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xa1, | ||
| 3073 | 0x82, 0x10, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x50, 0xa9, | ||
| 3074 | 0x40, 0x04, 0xc3, 0x11, 0x81, 0x27, 0xf8, 0xc7, 0x2c, 0x83, 0x71, 0x04, | ||
| 3075 | 0x83, 0x0c, 0x87, 0x47, 0x06, 0x36, 0xa8, 0x81, 0xf8, 0x5b, 0x30, 0x06, | ||
| 3076 | 0xe0, 0x6f, 0xc5, 0x1a, 0x88, 0xbf, 0x05, 0x65, 0x00, 0xfe, 0x36, 0x04, | ||
| 3077 | 0xe4, 0x3f, 0xc7, 0x20, 0x06, 0xc1, 0x1e, 0x0c, 0x32, 0x04, 0x63, 0xa0, | ||
| 3078 | 0x06, 0x16, 0x20, 0xe2, 0x3f, 0xc8, 0x10, 0x94, 0xc1, 0x1a, 0xcc, 0x12, | ||
| 3079 | 0x1c, 0x03, 0x15, 0x81, 0x60, 0x88, 0x41, 0x31, 0xcb, 0x80, 0x24, 0xd9, | ||
| 3080 | 0x20, 0x43, 0x90, 0x06, 0x6f, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, | ||
| 3081 | 0xfe, 0xb1, 0xe5, 0x42, 0x40, 0x06, 0x73, 0x0c, 0x6a, 0x10, 0x88, 0xc2, | ||
| 3082 | 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0xb6, 0x0b, 0x43, 0x19, | ||
| 3083 | 0xcc, 0x31, 0x08, 0x41, 0x1d, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, | ||
| 3084 | 0x7f, 0x6c, 0xbd, 0x50, 0x98, 0xc1, 0x1c, 0x83, 0x10, 0xd8, 0xc1, 0x2c, | ||
| 3085 | 0x41, 0x32, 0x50, 0x12, 0x90, 0x42, 0xe0, 0x0a, 0x82, 0x80, 0x40, 0xc7, | ||
| 3086 | 0x20, 0x43, 0x10, 0x07, 0x77, 0x90, 0x01, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 3087 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xd2, | ||
| 3088 | 0x09, 0x18, 0xd0, 0xba, 0x80, 0x07, 0xed, 0x0e, 0x00, 0x00, 0x00, 0x00, | ||
| 3089 | 0x00, 0x65, 0x0c, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, | ||
| 3090 | 0x30, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, | ||
| 3091 | 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 3092 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 3093 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3094 | 0x00, 0x27, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3095 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3096 | 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3097 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3098 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3099 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3100 | 0x00, 0x38, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 3101 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x49, 0x00, 0x00, | ||
| 3102 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 3103 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x5d, 0x00, 0x00, | ||
| 3104 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 3105 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x6d, 0x00, 0x00, | ||
| 3106 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3107 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x7e, 0x00, 0x00, | ||
| 3108 | 0x00, 0x16, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 3109 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x94, 0x00, 0x00, | ||
| 3110 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 3111 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xa1, 0x00, 0x00, | ||
| 3112 | 0x00, 0x19, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, | ||
| 3113 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0xba, 0x00, 0x00, | ||
| 3114 | 0x00, 0x11, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3115 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xcb, 0x00, 0x00, | ||
| 3116 | 0x00, 0x12, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 3117 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xdd, 0x00, 0x00, | ||
| 3118 | 0x00, 0x13, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 3119 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xf0, 0x00, 0x00, | ||
| 3120 | 0x00, 0x13, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 3121 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x03, 0x01, 0x00, | ||
| 3122 | 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, | ||
| 3123 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3124 | 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, | ||
| 3125 | 0xa6, 0x02, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x4e, 0x56, 0x31, | ||
| 3126 | 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x5a, | ||
| 3127 | 0x31, 0x34, 0x47, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, | ||
| 3128 | 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x52, 0x55, 0x31, | ||
| 3129 | 0x31, 0x4d, 0x54, 0x4c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, | ||
| 3130 | 0x4b, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, | ||
| 3131 | 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 3132 | 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x2e, 0x76, 0x33, 0x66, | ||
| 3133 | 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, | ||
| 3134 | 0x6f, 0x77, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 3135 | 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, 0x66, 0x33, 0x32, 0x61, | ||
| 3136 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x2e, 0x75, | ||
| 3137 | 0x2e, 0x69, 0x31, 0x2e, 0x66, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, | ||
| 3138 | 0x2e, 0x64, 0x6f, 0x74, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x5f, 0x5a, | ||
| 3139 | 0x31, 0x32, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x6e, 0x65, 0x6d, | ||
| 3140 | 0x61, 0x70, 0x44, 0x76, 0x33, 0x5f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61, | ||
| 3141 | 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, | ||
| 3142 | 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 3143 | 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, | ||
| 3144 | 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, | ||
| 3145 | 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, | ||
| 3146 | 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, | ||
| 3147 | 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, | ||
| 3148 | 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x32, 0x64, 0x2e, 0x76, 0x34, | ||
| 3149 | 0x66, 0x33, 0x32, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, | ||
| 3150 | 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, | ||
| 3151 | 0x69, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, | ||
| 3152 | 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3153 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 3154 | }; | ||
| 3155 | const unsigned int sdl_metallib_len = 37821; | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_shaders_metal_macos.h b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_macos.h new file mode 100644 index 0000000..e3c4230 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_macos.h | |||
| @@ -0,0 +1,2532 @@ | |||
| 1 | const unsigned char sdl_metallib[] = { | ||
| 2 | 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 3 | 0x00, 0x00, 0x00, 0x00, 0x85, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 4 | 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x00, | ||
| 5 | 0x00, 0x00, 0x00, 0x00, 0x2f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 6 | 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x03, 0x00, 0x00, | ||
| 7 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x72, 0x00, 0x00, | ||
| 9 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, | ||
| 10 | 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, | ||
| 11 | 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, | ||
| 12 | 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, | ||
| 13 | 0x50, 0x0f, 0x81, 0xd3, 0x48, 0x9a, 0xd9, 0x04, 0x20, 0xa9, 0x3e, 0x02, | ||
| 14 | 0x8a, 0x68, 0xb0, 0x30, 0x34, 0x06, 0x99, 0x69, 0x0c, 0x03, 0x74, 0x35, | ||
| 15 | 0xb5, 0x66, 0x90, 0x7b, 0x6c, 0x3a, 0x14, 0x62, 0x4f, 0x46, 0x46, 0x54, | ||
| 16 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 18 | 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, | ||
| 19 | 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, 0x00, | ||
| 20 | 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, | ||
| 21 | 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, 0x59, | ||
| 22 | 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0xf0, | ||
| 23 | 0x2e, 0x14, 0xc5, 0xee, 0x9f, 0xd5, 0xcc, 0x21, 0x55, 0xa5, 0x5b, 0xe0, | ||
| 24 | 0x3c, 0xdf, 0x01, 0x52, 0xa7, 0x30, 0x4a, 0x99, 0xd1, 0xa8, 0x5f, 0x13, | ||
| 25 | 0xe2, 0xf0, 0x62, 0x6a, 0x80, 0x37, 0xb7, 0x4f, 0x46, 0x46, 0x54, 0x18, | ||
| 26 | 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 28 | 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, | ||
| 29 | 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7a, 0x00, 0x00, 0x00, 0x4e, | ||
| 30 | 0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, | ||
| 31 | 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, | ||
| 32 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 33 | 0x00, 0x74, 0x71, 0x0b, 0x57, 0x4b, 0xa1, 0xa5, 0xee, 0x31, 0x5f, 0xf7, | ||
| 34 | 0x98, 0x90, 0x9f, 0xc4, 0x0b, 0x72, 0x5f, 0x4b, 0xd5, 0x4b, 0xce, 0x85, | ||
| 35 | 0x2b, 0x45, 0x6c, 0x7e, 0xdd, 0xa5, 0x54, 0x8e, 0xb0, 0x4f, 0x46, 0x46, | ||
| 36 | 0x54, 0x18, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, | ||
| 37 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, | ||
| 38 | 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, | ||
| 39 | 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, 0x00, | ||
| 40 | 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, | ||
| 41 | 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||
| 42 | 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, | ||
| 43 | 0x20, 0x00, 0x83, 0x74, 0xe0, 0x68, 0x12, 0xd5, 0x8c, 0xd4, 0x71, 0xdb, | ||
| 44 | 0xb9, 0x4c, 0x41, 0x85, 0x0e, 0x4d, 0x36, 0xf9, 0x66, 0x8d, 0x70, 0x81, | ||
| 45 | 0x5b, 0xbb, 0xe9, 0x81, 0x42, 0xc5, 0x56, 0x6f, 0x27, 0xa3, 0x4f, 0x46, | ||
| 46 | 0x46, 0x54, 0x18, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 47 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x23, 0x00, 0x00, | ||
| 48 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, | ||
| 49 | 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x78, 0x00, | ||
| 50 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 51 | 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||
| 52 | 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, | ||
| 53 | 0x20, 0x00, 0x3a, 0x25, 0xd4, 0xcc, 0x66, 0x7c, 0x15, 0x7f, 0xc4, 0x37, | ||
| 54 | 0x91, 0x2a, 0xc4, 0x81, 0x61, 0xee, 0xdc, 0xcf, 0xd6, 0x25, 0x51, 0xcf, | ||
| 55 | 0x14, 0x26, 0xf5, 0xe3, 0xb9, 0xd9, 0x21, 0x42, 0x05, 0x8e, 0x4f, 0x46, | ||
| 56 | 0x46, 0x54, 0x18, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 57 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x00, 0x00, | ||
| 58 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, | ||
| 59 | 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, | ||
| 60 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 61 | 0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, | ||
| 62 | 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, | ||
| 63 | 0x48, 0x20, 0x00, 0x22, 0x61, 0x99, 0x75, 0x7e, 0x79, 0xc7, 0x29, 0xce, | ||
| 64 | 0x24, 0x1e, 0x6f, 0x01, 0x62, 0x29, 0x3a, 0x12, 0xe8, 0xf8, 0xd8, 0xa5, | ||
| 65 | 0xf2, 0x5e, 0x21, 0xb5, 0x28, 0x04, 0xc8, 0xf3, 0x8d, 0x60, 0xfb, 0x4f, | ||
| 66 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 67 | 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x57, 0x00, | ||
| 68 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, | ||
| 69 | 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x29, | ||
| 70 | 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x15, 0x00, 0x02, 0x00, 0x70, | ||
| 71 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, 0x6f, | ||
| 72 | 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x56, 0x41, 0x54, 0x59, 0x04, 0x00, | ||
| 73 | 0x02, 0x00, 0x04, 0x06, 0x45, 0x4e, 0x44, 0x54, 0x35, 0x00, 0x00, 0x00, | ||
| 74 | 0x56, 0x41, 0x54, 0x54, 0x20, 0x00, 0x03, 0x00, 0x70, 0x6f, 0x73, 0x69, | ||
| 75 | 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 76 | 0x00, 0x01, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, | ||
| 77 | 0x02, 0x80, 0x56, 0x41, 0x54, 0x59, 0x05, 0x00, 0x03, 0x00, 0x04, 0x06, | ||
| 78 | 0x04, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 79 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 80 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 81 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 82 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 83 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 84 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 85 | 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 86 | 0x00, 0xe8, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 87 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0xf7, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 88 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 89 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 90 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 91 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 92 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 93 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, | ||
| 94 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 95 | 0x00, 0x6a, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 96 | 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, | ||
| 97 | 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, | ||
| 98 | 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, | ||
| 99 | 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 100 | 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, | ||
| 101 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, | ||
| 102 | 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, 0x00, 0x06, 0x77, 0x78, | ||
| 103 | 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, 0xa0, 0x87, 0x74, 0x70, | ||
| 104 | 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, | ||
| 105 | 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, | ||
| 106 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, | ||
| 107 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 108 | 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, | ||
| 109 | 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, | ||
| 110 | 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, | ||
| 111 | 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, | ||
| 112 | 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, | ||
| 113 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 114 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 115 | 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, | ||
| 116 | 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 117 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, | ||
| 118 | 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, | ||
| 119 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 120 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 121 | 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, | ||
| 122 | 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, | ||
| 123 | 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, | ||
| 124 | 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, | ||
| 125 | 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, | ||
| 126 | 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, | ||
| 127 | 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, | ||
| 128 | 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 129 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x18, 0xc2, 0x00, 0x2c, 0x40, | ||
| 130 | 0xb5, 0xc1, 0x18, 0x08, 0x60, 0x01, 0x2a, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 131 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 132 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 133 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 134 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 135 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x60, 0x87, 0x10, 0xc0, | ||
| 136 | 0x30, 0x82, 0x00, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 137 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 138 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 139 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x52, 0x88, | ||
| 140 | 0x11, 0x8c, 0xa1, 0x33, 0x10, 0x30, 0x47, 0x00, 0x06, 0x29, 0xa0, 0xe6, | ||
| 141 | 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00, | ||
| 142 | 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 143 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, | ||
| 144 | 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, | ||
| 145 | 0x38, 0x70, 0x03, 0x38, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, | ||
| 146 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 147 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, | ||
| 148 | 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, | ||
| 149 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 150 | 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 151 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, | ||
| 152 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 153 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 154 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 155 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, | ||
| 156 | 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, | ||
| 157 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, | ||
| 158 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 159 | 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 160 | 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 161 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, | ||
| 162 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 163 | 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, | ||
| 164 | 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, | ||
| 165 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 166 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, | ||
| 167 | 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, | ||
| 168 | 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, | ||
| 169 | 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 170 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, | ||
| 171 | 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 172 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x41, 0x00, 0x00, 0x08, 0x00, | ||
| 173 | 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, | ||
| 174 | 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 175 | 0x47, 0xc6, 0x04, 0x43, 0x52, 0x25, 0x30, 0x02, 0x50, 0x80, 0x01, 0x45, | ||
| 176 | 0x50, 0x20, 0x65, 0x50, 0x08, 0x05, 0x41, 0x6c, 0x04, 0x80, 0xd6, 0x58, | ||
| 177 | 0xc2, 0x23, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xe4, 0x00, 0x00, | ||
| 178 | 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, | ||
| 179 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x86, 0x42, 0x24, 0xc0, 0xa2, 0x50, | ||
| 180 | 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, | ||
| 181 | 0x28, 0x41, 0x22, 0x28, 0x07, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, | ||
| 182 | 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, | ||
| 183 | 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, | ||
| 184 | 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, | ||
| 185 | 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x90, 0x10, 0x43, | ||
| 186 | 0x0c, 0x25, 0x50, 0x10, 0x45, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, | ||
| 187 | 0x04, 0x49, 0x0e, 0x25, 0x50, 0x02, 0x45, 0xe0, 0x16, 0x96, 0x26, 0xe7, | ||
| 188 | 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, | ||
| 189 | 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, | ||
| 190 | 0x44, 0x48, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, | ||
| 191 | 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, | ||
| 192 | 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x64, 0x61, | ||
| 193 | 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, | ||
| 194 | 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, | ||
| 195 | 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85, 0x89, | ||
| 196 | 0xb1, 0x95, 0x0d, 0x11, 0x92, 0x86, 0x4c, 0x58, 0x9a, 0x9c, 0x0b, 0xdc, | ||
| 197 | 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0x1b, 0xa3, 0xb0, 0x34, 0x39, 0x97, | ||
| 198 | 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, 0xb7, 0xb0, 0xb6, | ||
| 199 | 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x64, 0xc2, 0xd2, 0xe4, | ||
| 200 | 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x88, 0xc0, 0xbd, | ||
| 201 | 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x51, 0x92, 0x27, 0x81, 0x92, | ||
| 202 | 0x28, 0x91, 0x92, 0x89, 0x51, 0x58, 0x9a, 0x9c, 0x8b, 0x5d, 0x99, 0x1c, | ||
| 203 | 0x5d, 0x19, 0xde, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0x1d, 0xad, 0xb3, | ||
| 204 | 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, 0x94, 0x9a, 0xb1, 0x37, | ||
| 205 | 0xb6, 0x37, 0x39, 0x22, 0x3b, 0x9a, 0x2f, 0xb3, 0x14, 0x16, 0x63, 0x6f, | ||
| 206 | 0x6c, 0x6f, 0x72, 0x43, 0x98, 0xa4, 0x4a, 0xac, 0x04, 0x4a, 0xa2, 0x44, | ||
| 207 | 0x4a, 0x2e, 0x3a, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, | ||
| 208 | 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0x98, | ||
| 209 | 0xc0, 0xbd, 0xa5, 0xb9, 0xd1, 0x4d, 0xa5, 0xe9, 0x95, 0x0d, 0x51, 0x92, | ||
| 210 | 0x2c, 0x81, 0x12, 0x2d, 0x91, 0x92, 0x6d, 0x88, 0x91, 0x50, 0x09, 0x96, | ||
| 211 | 0x70, 0x84, 0xc2, 0xd2, 0xe4, 0x5c, 0xec, 0xca, 0xe4, 0xe8, 0xca, 0xf0, | ||
| 212 | 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x28, 0x85, 0xa5, 0xc9, 0xb9, 0xb0, | ||
| 213 | 0xbd, 0x8d, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, 0xb9, 0x91, 0x95, | ||
| 214 | 0xe1, 0xd1, 0x3b, 0x2b, 0x73, 0x2b, 0x93, 0x0b, 0xa3, 0x2b, 0x23, 0x43, | ||
| 215 | 0xf9, 0xfa, 0x0a, 0x4b, 0x93, 0xfb, 0x82, 0x63, 0x0b, 0x1b, 0x2b, 0x43, | ||
| 216 | 0x7b, 0x63, 0x23, 0x2b, 0x93, 0xfb, 0xfa, 0x4a, 0xa1, 0x61, 0xc6, 0xf6, | ||
| 217 | 0x16, 0x46, 0x27, 0x33, 0x84, 0x52, 0x84, 0xc4, 0x4b, 0x3e, 0x45, 0x50, | ||
| 218 | 0x82, 0x04, 0x0c, 0x12, 0x28, 0x09, 0x83, 0x44, 0x4a, 0xa6, 0x21, 0x94, | ||
| 219 | 0x12, 0x24, 0x5e, 0xf2, 0x29, 0x81, 0x12, 0x24, 0x60, 0x90, 0x40, 0x49, | ||
| 220 | 0x94, 0x48, 0xc9, 0x45, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, | ||
| 221 | 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, | ||
| 222 | 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x91, 0xb0, 0x34, 0x39, 0x17, | ||
| 223 | 0xb9, 0xb2, 0x30, 0x32, 0x46, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, | ||
| 224 | 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0xbc, 0xc2, | ||
| 225 | 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, | ||
| 226 | 0xc2, 0xd8, 0xd2, 0xce, 0xdc, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x88, 0x98, | ||
| 227 | 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0xe0, 0xd1, 0x50, 0x81, 0x93, 0x7b, 0x53, | ||
| 228 | 0x2b, 0x1b, 0xa3, 0x4b, 0x7b, 0x73, 0x1b, 0x02, 0x06, 0x0a, 0x91, 0x90, | ||
| 229 | 0x41, 0x52, 0x06, 0xca, 0x90, 0x7c, 0x0a, 0xa1, 0x04, 0x89, 0x19, 0x24, | ||
| 230 | 0x67, 0xa0, 0x0c, 0x09, 0x1a, 0x28, 0x45, 0x02, 0x25, 0x69, 0x90, 0x48, | ||
| 231 | 0x89, 0x1a, 0x30, 0xa1, 0x93, 0x0b, 0x73, 0x9b, 0x33, 0x7b, 0x93, 0x6b, | ||
| 232 | 0x1b, 0x02, 0x06, 0x8a, 0x91, 0x90, 0x41, 0x52, 0x06, 0xca, 0x90, 0x7c, | ||
| 233 | 0x8a, 0xa1, 0x04, 0x89, 0x19, 0x24, 0x67, 0xa0, 0x0c, 0x09, 0x1a, 0x28, | ||
| 234 | 0x45, 0x02, 0x25, 0x69, 0x90, 0x48, 0x09, 0x1b, 0x0c, 0x41, 0x12, 0x31, | ||
| 235 | 0x48, 0xc6, 0x20, 0x59, 0x83, 0xa4, 0x0d, 0x86, 0x18, 0x08, 0x90, 0x74, | ||
| 236 | 0x89, 0x1b, 0xf0, 0x79, 0x6b, 0x73, 0x4b, 0x83, 0x7b, 0xa3, 0x2b, 0x73, | ||
| 237 | 0xa3, 0x03, 0x19, 0x43, 0x0b, 0x93, 0xe3, 0x33, 0x95, 0xd6, 0x06, 0xc7, | ||
| 238 | 0x56, 0x06, 0x32, 0xb4, 0xb2, 0x02, 0x42, 0x25, 0x14, 0x14, 0x34, 0x44, | ||
| 239 | 0x48, 0xe2, 0x60, 0x88, 0x91, 0xc0, 0x41, 0x22, 0x07, 0x4c, 0x32, 0xc4, | ||
| 240 | 0x48, 0xe6, 0x20, 0x99, 0x03, 0x26, 0x19, 0x11, 0xb1, 0x03, 0x3b, 0xd8, | ||
| 241 | 0x43, 0x3b, 0xb8, 0x41, 0x3b, 0xbc, 0x03, 0x39, 0xd4, 0x03, 0x3b, 0x94, | ||
| 242 | 0x83, 0x1b, 0x98, 0x03, 0x3b, 0x84, 0xc3, 0x39, 0xcc, 0xc3, 0x14, 0x21, | ||
| 243 | 0x18, 0x46, 0x28, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, | ||
| 244 | 0xe4, 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x62, 0xc4, 0x12, 0x0e, | ||
| 245 | 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, | ||
| 246 | 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x63, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, | ||
| 247 | 0x6e, 0xc0, 0x0e, 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, | ||
| 248 | 0xe5, 0xf0, 0x0b, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, | ||
| 249 | 0xee, 0x30, 0x25, 0x40, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, | ||
| 250 | 0xe3, 0xf0, 0x0e, 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, | ||
| 251 | 0xef, 0x00, 0x0f, 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x65, | ||
| 252 | 0x50, 0x18, 0x67, 0x84, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, | ||
| 253 | 0xe5, 0x20, 0x0f, 0xf4, 0x50, 0x0e, 0xf8, 0x30, 0x25, 0x78, 0x03, 0x00, | ||
| 254 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 255 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 256 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 257 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 258 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 259 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 260 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 261 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 262 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 263 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 264 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 265 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 266 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 267 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 268 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 269 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 270 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 271 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 272 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 273 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 274 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 275 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 276 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 277 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 278 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 279 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 280 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 281 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 282 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 283 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 284 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 285 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 286 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 287 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 288 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 289 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 290 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 291 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 292 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 293 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 294 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 295 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 296 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 297 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 298 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 299 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 300 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 301 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 302 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 303 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 304 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 305 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 306 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 307 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 308 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 309 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 310 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, | ||
| 311 | 0x82, 0x0c, 0x7f, 0x45, 0x44, 0x13, 0x71, 0x01, 0x00, 0x61, 0x20, 0x00, | ||
| 312 | 0x00, 0x54, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 313 | 0x00, 0x0b, 0x00, 0x00, 0x00, 0xe4, 0xc6, 0x22, 0x86, 0x61, 0x18, 0xc6, | ||
| 314 | 0x22, 0x04, 0x41, 0x10, 0xc6, 0x22, 0x82, 0x20, 0x08, 0x46, 0x00, 0x88, | ||
| 315 | 0x15, 0x41, 0x09, 0x94, 0x01, 0x8d, 0x19, 0x00, 0x12, 0x33, 0x00, 0x14, | ||
| 316 | 0x66, 0x00, 0x66, 0x00, 0x08, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0x1f, | ||
| 317 | 0x00, 0xe3, 0x11, 0x8d, 0x94, 0x49, 0x14, 0x94, 0xf1, 0x08, 0x88, 0xda, | ||
| 318 | 0x28, 0x0a, 0xca, 0x20, 0xc3, 0x70, 0x34, 0x26, 0x04, 0xf2, 0x19, 0x8f, | ||
| 319 | 0xa0, 0xb0, 0xaf, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x8a, 0x64, 0x42, 0x20, | ||
| 320 | 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x64, 0x1d, 0x19, 0x4c, 0x14, 0x94, | ||
| 321 | 0x41, 0x06, 0xe6, 0xc1, 0x4c, 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, | ||
| 322 | 0x08, 0x4f, 0x0c, 0xd2, 0xc0, 0xa2, 0xa0, 0x0c, 0x32, 0x44, 0x94, 0x67, | ||
| 323 | 0x42, 0x20, 0x1f, 0x2b, 0x02, 0xf8, 0x8c, 0x47, 0x88, 0xc1, 0x19, 0xb8, | ||
| 324 | 0x01, 0x47, 0x41, 0x19, 0x64, 0x08, 0x34, 0x30, 0xb0, 0xa0, 0x92, 0xcf, | ||
| 325 | 0x20, 0xc3, 0xb0, 0x8d, 0x81, 0x05, 0x93, 0x7c, 0x6c, 0x08, 0xe0, 0x33, | ||
| 326 | 0xc8, 0x60, 0x78, 0x67, 0x60, 0x41, 0x24, 0x1f, 0x1b, 0x02, 0xf8, 0x0c, | ||
| 327 | 0x32, 0x24, 0x61, 0xb0, 0x06, 0x16, 0x3c, 0xf2, 0xb1, 0x21, 0x80, 0xcf, | ||
| 328 | 0x78, 0xc4, 0x1b, 0xd0, 0xc1, 0x1e, 0xa0, 0x01, 0x05, 0x65, 0x90, 0x21, | ||
| 329 | 0x38, 0x83, 0x36, 0xb0, 0x40, 0x0c, 0xe4, 0x33, 0xc8, 0x30, 0xa0, 0x01, | ||
| 330 | 0x1c, 0x58, 0x00, 0x06, 0xf2, 0x19, 0x64, 0x28, 0xd4, 0x60, 0x0e, 0x2c, | ||
| 331 | 0xe8, 0xe4, 0x33, 0xc8, 0x70, 0xb0, 0x81, 0x1d, 0x58, 0xa0, 0xc9, 0x67, | ||
| 332 | 0x90, 0x81, 0x0f, 0xe2, 0xa0, 0x0e, 0x2c, 0x0b, 0xe4, 0x33, 0xc8, 0xe0, | ||
| 333 | 0x07, 0x73, 0x80, 0x07, 0xe6, 0x04, 0xf2, 0xb1, 0x64, 0x80, 0x8f, 0x05, | ||
| 334 | 0x0c, 0x7c, 0x2c, 0x48, 0xe0, 0x63, 0x01, 0x02, 0x1f, 0x0b, 0x0a, 0xf8, | ||
| 335 | 0xcc, 0x36, 0xe4, 0x41, 0x00, 0xcc, 0x36, 0x04, 0xa5, 0x10, 0xcc, 0x36, | ||
| 336 | 0x04, 0x78, 0x20, 0x64, 0x10, 0x10, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 337 | 0x00, 0x5b, 0x86, 0x20, 0xa0, 0x83, 0x2d, 0xc3, 0x10, 0xd0, 0xc1, 0x96, | ||
| 338 | 0xe1, 0x08, 0xe8, 0x60, 0xcb, 0xc0, 0x04, 0x74, 0xb0, 0x65, 0x88, 0x02, | ||
| 339 | 0x3a, 0xd8, 0x32, 0x58, 0x01, 0x1d, 0x6c, 0x19, 0xc6, 0x20, 0xa0, 0x03, | ||
| 340 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 341 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 342 | 0x00, 0xf8, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 343 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0xfb, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 344 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 345 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 346 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 347 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 348 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 349 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, | ||
| 350 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 351 | 0x00, 0x6a, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 352 | 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, | ||
| 353 | 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, | ||
| 354 | 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, | ||
| 355 | 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 356 | 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, | ||
| 357 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, | ||
| 358 | 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, 0x00, 0x06, 0x77, 0x78, | ||
| 359 | 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, 0xa0, 0x87, 0x74, 0x70, | ||
| 360 | 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, | ||
| 361 | 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, | ||
| 362 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, | ||
| 363 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 364 | 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, | ||
| 365 | 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, | ||
| 366 | 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, | ||
| 367 | 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, | ||
| 368 | 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, | ||
| 369 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 370 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 371 | 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, | ||
| 372 | 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 373 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, | ||
| 374 | 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, | ||
| 375 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 376 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 377 | 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, | ||
| 378 | 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, | ||
| 379 | 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, | ||
| 380 | 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, | ||
| 381 | 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, | ||
| 382 | 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, | ||
| 383 | 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, | ||
| 384 | 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 385 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x18, 0x02, 0x01, 0x2c, 0x40, | ||
| 386 | 0xb5, 0xc1, 0x18, 0x0a, 0x60, 0x01, 0x2a, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 387 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 388 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 389 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 390 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 391 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 392 | 0x76, 0x08, 0x41, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 393 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 394 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 395 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x62, 0x0c, | ||
| 396 | 0x11, 0x84, 0x31, 0x74, 0x06, 0x02, 0xe6, 0x08, 0xc0, 0x20, 0x05, 0xd4, | ||
| 397 | 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x04, 0xc2, 0x30, 0x02, 0xa1, 0x8c, 0x00, | ||
| 398 | 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 399 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, | ||
| 400 | 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, | ||
| 401 | 0x38, 0x70, 0x03, 0x38, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, | ||
| 402 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 403 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, | ||
| 404 | 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, | ||
| 405 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 406 | 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 407 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, | ||
| 408 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 409 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 410 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 411 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, | ||
| 412 | 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, | ||
| 413 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, | ||
| 414 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 415 | 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 416 | 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 417 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, | ||
| 418 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 419 | 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, | ||
| 420 | 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, | ||
| 421 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 422 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, | ||
| 423 | 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, | ||
| 424 | 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, | ||
| 425 | 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 426 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, | ||
| 427 | 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 428 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x41, 0x00, 0x00, 0x08, 0x00, | ||
| 429 | 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, | ||
| 430 | 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 431 | 0x47, 0xc6, 0x04, 0x43, 0x52, 0x25, 0x50, 0x04, 0x23, 0x00, 0x05, 0x18, | ||
| 432 | 0x50, 0x08, 0x65, 0x50, 0x20, 0x05, 0x41, 0x6c, 0x04, 0x80, 0xd6, 0x58, | ||
| 433 | 0xc2, 0x23, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xea, 0x00, 0x00, | ||
| 434 | 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, | ||
| 435 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x86, 0x22, 0x24, 0xc0, 0xa2, 0x50, | ||
| 436 | 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, | ||
| 437 | 0x28, 0x41, 0x22, 0x28, 0x05, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, | ||
| 438 | 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, | ||
| 439 | 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, | ||
| 440 | 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, | ||
| 441 | 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x90, 0x10, 0x43, | ||
| 442 | 0x0c, 0x25, 0x50, 0x10, 0x65, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, | ||
| 443 | 0x04, 0x49, 0x0e, 0x25, 0x50, 0x02, 0x65, 0xe0, 0x16, 0x96, 0x26, 0xe7, | ||
| 444 | 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, | ||
| 445 | 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, | ||
| 446 | 0x44, 0x48, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, | ||
| 447 | 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, | ||
| 448 | 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x64, 0x61, | ||
| 449 | 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, | ||
| 450 | 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, | ||
| 451 | 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85, 0x89, | ||
| 452 | 0xb1, 0x95, 0x0d, 0x11, 0x92, 0x86, 0x4c, 0x58, 0x9a, 0x9c, 0x0b, 0xdc, | ||
| 453 | 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0x1b, 0xa3, 0xb0, 0x34, 0x39, 0x97, | ||
| 454 | 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, 0xb7, 0xb0, 0xb6, | ||
| 455 | 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x64, 0xc2, 0xd2, 0xe4, | ||
| 456 | 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x88, 0xc0, 0xbd, | ||
| 457 | 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x51, 0x92, 0x27, 0x81, 0x92, | ||
| 458 | 0x28, 0x91, 0x92, 0x89, 0x51, 0x58, 0x9a, 0x9c, 0x8b, 0x5d, 0x99, 0x1c, | ||
| 459 | 0x5d, 0x19, 0xde, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0x1d, 0xad, 0xb3, | ||
| 460 | 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, 0x94, 0x9a, 0xb1, 0x37, | ||
| 461 | 0xb6, 0x37, 0x39, 0x22, 0x3b, 0x9a, 0x2f, 0xb3, 0x14, 0x16, 0x63, 0x6f, | ||
| 462 | 0x6c, 0x6f, 0x72, 0x43, 0x98, 0xa4, 0x4a, 0xac, 0x04, 0x4a, 0xa2, 0x44, | ||
| 463 | 0x4a, 0x2e, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, | ||
| 464 | 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x44, 0x76, | ||
| 465 | 0x32, 0x5f, 0x66, 0x29, 0x34, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0x64, 0x88, | ||
| 466 | 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x0d, 0x61, 0x92, 0x2a, | ||
| 467 | 0xc9, 0x12, 0x28, 0xd1, 0x12, 0x29, 0xd9, 0x86, 0x18, 0x09, 0x95, 0x60, | ||
| 468 | 0x09, 0x47, 0x28, 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, 0x8e, 0xae, 0x0c, | ||
| 469 | 0xef, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0x52, 0x58, 0x9a, 0x9c, 0x0b, | ||
| 470 | 0xdb, 0xdb, 0x58, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0x57, 0x9a, 0x1b, 0x59, | ||
| 471 | 0x19, 0x1e, 0xbd, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, | ||
| 472 | 0x94, 0xaf, 0xaf, 0xb0, 0x34, 0xb9, 0x2f, 0x38, 0xb6, 0xb0, 0xb1, 0x32, | ||
| 473 | 0xb4, 0x37, 0x36, 0xb2, 0x32, 0xb9, 0xaf, 0xaf, 0x94, 0x21, 0x94, 0x32, | ||
| 474 | 0x24, 0x5e, 0xf2, 0x29, 0x83, 0x12, 0x24, 0x60, 0x90, 0x40, 0x89, 0x96, | ||
| 475 | 0x48, 0xc9, 0x34, 0x84, 0x52, 0x82, 0xc4, 0x4b, 0x3e, 0x25, 0x50, 0x82, | ||
| 476 | 0x04, 0x0c, 0x12, 0x28, 0x89, 0x12, 0x29, 0xb9, 0x86, 0x50, 0x8a, 0x90, | ||
| 477 | 0x78, 0xc9, 0xa7, 0x08, 0x4a, 0x90, 0x80, 0x41, 0x02, 0x25, 0x5a, 0x22, | ||
| 478 | 0x25, 0x1b, 0x95, 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a, 0x33, 0xb3, 0x32, | ||
| 479 | 0x39, 0x3e, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, | ||
| 480 | 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x44, 0xc2, 0xd2, 0xe4, 0x5c, 0xe4, 0xca, | ||
| 481 | 0xc2, 0xc8, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, | ||
| 482 | 0xe5, 0xc1, 0x95, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1, 0x0a, 0x4b, 0x93, | ||
| 483 | 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x0a, 0x63, | ||
| 484 | 0x4b, 0x3b, 0x73, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x23, 0x62, 0xc6, 0xf6, | ||
| 485 | 0x16, 0x46, 0x47, 0x83, 0x47, 0x43, 0x05, 0x4e, 0xee, 0x4d, 0xad, 0x6c, | ||
| 486 | 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x18, 0x28, 0x46, 0x42, 0x06, 0x49, | ||
| 487 | 0x19, 0x28, 0x44, 0xf2, 0x29, 0x82, 0x12, 0x24, 0x66, 0x90, 0x9c, 0x81, | ||
| 488 | 0x42, 0x24, 0x68, 0xa0, 0x1c, 0x09, 0x94, 0xa4, 0x41, 0x22, 0x25, 0x6a, | ||
| 489 | 0xc0, 0x84, 0x4e, 0x2e, 0xcc, 0x6d, 0xce, 0xec, 0x4d, 0xae, 0x6d, 0x08, | ||
| 490 | 0x18, 0x28, 0x45, 0x42, 0x06, 0x49, 0x19, 0x28, 0x44, 0xf2, 0x29, 0x86, | ||
| 491 | 0x12, 0x24, 0x66, 0x90, 0x9c, 0x81, 0x42, 0x24, 0x68, 0xa0, 0x1c, 0x09, | ||
| 492 | 0x94, 0xa4, 0x41, 0x22, 0x25, 0x6c, 0x30, 0x44, 0x49, 0xc2, 0x20, 0x11, | ||
| 493 | 0x83, 0x64, 0x0c, 0x92, 0x35, 0x48, 0xda, 0x60, 0x88, 0x81, 0x00, 0x49, | ||
| 494 | 0x97, 0xb8, 0x01, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, 0x37, 0xba, 0x32, | ||
| 495 | 0x37, 0x3a, 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, 0x69, 0x6d, 0x70, | ||
| 496 | 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x43, | ||
| 497 | 0x84, 0x24, 0x0e, 0x86, 0x18, 0x09, 0x1c, 0x24, 0x72, 0xc0, 0x24, 0x43, | ||
| 498 | 0x8c, 0x64, 0x0e, 0x92, 0x39, 0x60, 0x92, 0x11, 0x11, 0x3b, 0xb0, 0x83, | ||
| 499 | 0x3d, 0xb4, 0x83, 0x1b, 0xb4, 0xc3, 0x3b, 0x90, 0x43, 0x3d, 0xb0, 0x43, | ||
| 500 | 0x39, 0xb8, 0x81, 0x39, 0xb0, 0x43, 0x38, 0x9c, 0xc3, 0x3c, 0x4c, 0x11, | ||
| 501 | 0x82, 0x61, 0x84, 0xc2, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, | ||
| 502 | 0x40, 0x0e, 0xe5, 0xe0, 0x0e, 0xf4, 0x30, 0x25, 0x28, 0x46, 0x2c, 0xe1, | ||
| 503 | 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, | ||
| 504 | 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x30, 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, | ||
| 505 | 0xe0, 0x06, 0xec, 0x10, 0x0e, 0xee, 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, | ||
| 506 | 0x50, 0x0e, 0xbf, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, | ||
| 507 | 0xe0, 0x0e, 0x53, 0x02, 0x64, 0xc4, 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, | ||
| 508 | 0x30, 0x0e, 0xef, 0xd0, 0x0e, 0xf0, 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, | ||
| 509 | 0xf0, 0x0e, 0xf0, 0x40, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, | ||
| 510 | 0x06, 0x85, 0x71, 0x46, 0x28, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6, | ||
| 511 | 0x50, 0x0e, 0xf2, 0x40, 0x0f, 0xe5, 0x80, 0x0f, 0x53, 0x82, 0x37, 0x00, | ||
| 512 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 513 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 514 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 515 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 516 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 517 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 518 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 519 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 520 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 521 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 522 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 523 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 524 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 525 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 526 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 527 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 528 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 529 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 530 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 531 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 532 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 533 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 534 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 535 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 536 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 537 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 538 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 539 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 540 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 541 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 542 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 543 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 544 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 545 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 546 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 547 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 548 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 549 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 550 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 551 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 552 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 553 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 554 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 555 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 556 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 557 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 558 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 559 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 560 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 561 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 562 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 563 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 564 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 565 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 566 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 567 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 568 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, | ||
| 569 | 0x83, 0xfd, 0x15, 0x11, 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 570 | 0x00, 0x52, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 571 | 0x00, 0x09, 0x00, 0x00, 0x00, 0xe4, 0xc6, 0x22, 0x86, 0x61, 0x18, 0xc6, | ||
| 572 | 0x22, 0x04, 0x41, 0x10, 0xc6, 0x22, 0x82, 0x20, 0x08, 0x46, 0x00, 0x88, | ||
| 573 | 0x95, 0x40, 0x19, 0x14, 0x01, 0x8d, 0x19, 0x00, 0x12, 0x33, 0x00, 0x14, | ||
| 574 | 0x66, 0x00, 0x66, 0x00, 0x00, 0xe3, 0x11, 0x8c, 0x84, 0x49, 0x14, 0x94, | ||
| 575 | 0xf1, 0x88, 0x87, 0xd2, 0x28, 0x0a, 0xca, 0x20, 0xc3, 0x60, 0x30, 0x26, | ||
| 576 | 0x04, 0xf2, 0x19, 0x8f, 0x98, 0x30, 0xaf, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, | ||
| 577 | 0x49, 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x60, 0xdd, | ||
| 578 | 0x18, 0x40, 0x14, 0x94, 0x41, 0x06, 0xc6, 0xb9, 0x4c, 0x08, 0xe4, 0x63, | ||
| 579 | 0x45, 0x00, 0x9f, 0xf1, 0x88, 0x4e, 0x0c, 0xd0, 0xc0, 0xa2, 0xa0, 0x0c, | ||
| 580 | 0x32, 0x44, 0x53, 0x67, 0x42, 0x20, 0x1f, 0x2b, 0x02, 0xf8, 0x8c, 0x47, | ||
| 581 | 0x84, 0xc1, 0x19, 0xb4, 0x01, 0x47, 0x41, 0x19, 0x64, 0x08, 0xb2, 0xcf, | ||
| 582 | 0x82, 0x4a, 0x3e, 0x83, 0x0c, 0x83, 0x26, 0x06, 0x16, 0x4c, 0xf2, 0xb1, | ||
| 583 | 0x21, 0x80, 0xcf, 0x20, 0x83, 0xd1, 0x99, 0x81, 0x05, 0x91, 0x7c, 0x6c, | ||
| 584 | 0x08, 0xe0, 0x33, 0xc8, 0x90, 0x80, 0x81, 0x1a, 0x58, 0xf0, 0xc8, 0xc7, | ||
| 585 | 0x86, 0x00, 0x3e, 0xe3, 0x11, 0x6e, 0x40, 0x07, 0x7a, 0x80, 0x06, 0x14, | ||
| 586 | 0x94, 0x41, 0x86, 0xc0, 0x0c, 0xd8, 0xc0, 0x02, 0x31, 0x90, 0xcf, 0x20, | ||
| 587 | 0xc3, 0x70, 0x06, 0x6f, 0x60, 0x01, 0x18, 0xc8, 0x67, 0x90, 0xa1, 0x48, | ||
| 588 | 0x03, 0x39, 0xb0, 0xa0, 0x93, 0xcf, 0x20, 0xc3, 0xb1, 0x06, 0x75, 0x60, | ||
| 589 | 0x81, 0x26, 0x9f, 0x41, 0x06, 0x3e, 0x78, 0x03, 0x3a, 0xb0, 0x2c, 0x90, | ||
| 590 | 0xcf, 0x20, 0x83, 0x1f, 0xc4, 0xc1, 0x1d, 0x98, 0x13, 0xc8, 0xc7, 0x92, | ||
| 591 | 0x01, 0x3e, 0x16, 0x30, 0xf0, 0xb1, 0x20, 0x81, 0x8f, 0x05, 0x08, 0x7c, | ||
| 592 | 0x2c, 0x28, 0xe0, 0x33, 0xdb, 0x90, 0x07, 0x01, 0x30, 0xdb, 0x10, 0x94, | ||
| 593 | 0x42, 0x30, 0xdb, 0x10, 0x94, 0x82, 0x90, 0x41, 0x40, 0x0c, 0x00, 0x00, | ||
| 594 | 0x00, 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xa0, 0x83, 0x2d, 0xc3, | ||
| 595 | 0x10, 0xd0, 0xc1, 0x96, 0xe1, 0x08, 0xe8, 0x60, 0xcb, 0xc0, 0x04, 0x74, | ||
| 596 | 0xb0, 0x65, 0x88, 0x02, 0x3a, 0xd8, 0x32, 0x58, 0x01, 0x1d, 0x6c, 0x19, | ||
| 597 | 0xc6, 0x20, 0xa0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 598 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 599 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x98, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 600 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe3, 0x02, 0x00, | ||
| 601 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 602 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 603 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 604 | 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, | ||
| 605 | 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, | ||
| 606 | 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, | ||
| 607 | 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, | ||
| 608 | 0x00, 0x51, 0x18, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 609 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x8a, 0x08, 0x07, 0x78, | ||
| 610 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 611 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 612 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 613 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 614 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 615 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 616 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 617 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 618 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 619 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 620 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 621 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 622 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 623 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 624 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 625 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 626 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 627 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 628 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 629 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 630 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 631 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 632 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 633 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 634 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 635 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 636 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 637 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 638 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 639 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 640 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 641 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 642 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x18, | ||
| 643 | 0xc2, 0x00, 0x2c, 0x40, 0x05, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 644 | 0x00, 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, | ||
| 645 | 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, | ||
| 646 | 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, | ||
| 647 | 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, 0x00, 0xc3, 0x08, 0x04, | ||
| 648 | 0x30, 0x8c, 0x20, 0x00, 0x67, 0x49, 0x53, 0x44, 0x09, 0x93, 0xcf, 0x1e, | ||
| 649 | 0xc0, 0x40, 0x44, 0x9c, 0xd3, 0x48, 0x13, 0xd0, 0x4c, 0x12, 0x42, 0x00, | ||
| 650 | 0x00, 0x00, 0x00, 0x06, 0x11, 0x06, 0xa1, 0x10, 0x21, 0x41, 0x54, 0x03, | ||
| 651 | 0x01, 0x73, 0x04, 0x60, 0x90, 0x02, 0x38, 0x47, 0x00, 0x0a, 0x83, 0x08, | ||
| 652 | 0x80, 0x30, 0x8c, 0x30, 0x00, 0xc3, 0x08, 0x04, 0x32, 0x02, 0x00, 0x00, | ||
| 653 | 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 654 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, | ||
| 655 | 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, | ||
| 656 | 0x38, 0x70, 0x03, 0x38, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, | ||
| 657 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 658 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, | ||
| 659 | 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, | ||
| 660 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 661 | 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 662 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, | ||
| 663 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 664 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 665 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 666 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, | ||
| 667 | 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, | ||
| 668 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, | ||
| 669 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 670 | 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 671 | 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 672 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, | ||
| 673 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 674 | 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, | ||
| 675 | 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, | ||
| 676 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 677 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, | ||
| 678 | 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, | ||
| 679 | 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, | ||
| 680 | 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 681 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, | ||
| 682 | 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 683 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x31, 0x00, 0x00, 0x08, 0x00, | ||
| 684 | 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 685 | 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 686 | 0x47, 0xc6, 0x04, 0x43, 0xc2, 0x11, 0x80, 0x42, 0x28, 0x81, 0x22, 0x28, | ||
| 687 | 0x88, 0x02, 0x2a, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0xd2, 0xc2, | ||
| 688 | 0x19, 0x01, 0x28, 0x8c, 0x42, 0x28, 0x88, 0x02, 0x29, 0x94, 0x82, 0xa1, | ||
| 689 | 0x1c, 0x4b, 0x78, 0x04, 0x00, 0x79, 0x18, 0x00, 0x00, 0x13, 0x01, 0x00, | ||
| 690 | 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, | ||
| 691 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x06, 0x42, 0x1c, 0x40, 0x42, 0x51, | ||
| 692 | 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, | ||
| 693 | 0x20, 0xc3, 0x21, 0x20, 0x02, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, | ||
| 694 | 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, | ||
| 695 | 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, | ||
| 696 | 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, | ||
| 697 | 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x70, 0x10, 0x43, | ||
| 698 | 0x0c, 0x64, 0x40, 0x0a, 0x24, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, | ||
| 699 | 0x04, 0x39, 0x0e, 0x64, 0x40, 0x06, 0x24, 0xe0, 0x16, 0x96, 0x26, 0xe7, | ||
| 700 | 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, | ||
| 701 | 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, | ||
| 702 | 0x44, 0x38, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, | ||
| 703 | 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, | ||
| 704 | 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x63, 0x61, | ||
| 705 | 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, | ||
| 706 | 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, | ||
| 707 | 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85, 0x89, | ||
| 708 | 0xb1, 0x95, 0x0d, 0x11, 0x8e, 0x86, 0x51, 0x58, 0x9a, 0x9c, 0x8b, 0x5c, | ||
| 709 | 0x99, 0x1b, 0x59, 0x99, 0xdc, 0x17, 0x5d, 0x98, 0xdc, 0x59, 0x19, 0x1d, | ||
| 710 | 0xa3, 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, | ||
| 711 | 0xb2, 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 712 | 0x34, 0x43, 0x90, 0xe3, 0x41, 0x82, 0x03, 0x3a, 0xa2, 0x21, 0xc2, 0x21, | ||
| 713 | 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x31, 0x93, 0x0b, 0x3b, 0x6b, 0x2b, 0x73, | ||
| 714 | 0xa3, 0xfb, 0x4a, 0x73, 0x83, 0xab, 0xa3, 0x63, 0x76, 0x56, 0xe6, 0x56, | ||
| 715 | 0x26, 0x17, 0x46, 0x57, 0x46, 0x86, 0x82, 0x03, 0xf7, 0x36, 0x97, 0x46, | ||
| 716 | 0x97, 0xf6, 0xe6, 0x46, 0x64, 0x27, 0xf3, 0x65, 0x96, 0x42, 0x25, 0x2c, | ||
| 717 | 0x4d, 0xce, 0x65, 0xac, 0xcc, 0x8d, 0xae, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, | ||
| 718 | 0x9c, 0x0b, 0x5c, 0x99, 0xdc, 0x1c, 0x5c, 0xd9, 0x18, 0x5d, 0x9a, 0x5d, | ||
| 719 | 0x19, 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x32, 0x61, 0x69, 0x72, | ||
| 720 | 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, | ||
| 721 | 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x48, 0x48, 0x70, 0x50, 0x47, | ||
| 722 | 0x75, 0x58, 0xc7, 0x75, 0x40, 0x07, 0x76, 0x64, 0x87, 0x46, 0xeb, 0xac, | ||
| 723 | 0xcc, 0xad, 0x4c, 0x2e, 0x8c, 0xae, 0x8c, 0x0c, 0xa5, 0x66, 0xec, 0x8d, | ||
| 724 | 0xed, 0x4d, 0x8e, 0xc8, 0x8e, 0xe6, 0xcb, 0x2c, 0x85, 0xc5, 0xd8, 0x1b, | ||
| 725 | 0xdb, 0x9b, 0xdc, 0x10, 0x09, 0x19, 0x0e, 0xea, 0xe0, 0x0e, 0xeb, 0xb8, | ||
| 726 | 0x0e, 0xe8, 0x88, 0x8e, 0xec, 0xe8, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, | ||
| 727 | 0xd5, 0x99, 0x99, 0x95, 0xc9, 0xf1, 0x09, 0x4b, 0x93, 0x73, 0x11, 0xab, | ||
| 728 | 0x33, 0x33, 0x2b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0xa3, 0x14, 0x96, | ||
| 729 | 0x26, 0xe7, 0xc2, 0xf6, 0x36, 0x16, 0x46, 0x97, 0xf6, 0xe6, 0xf6, 0x95, | ||
| 730 | 0xe6, 0x46, 0x56, 0x86, 0x47, 0x24, 0x2c, 0x4d, 0xce, 0x45, 0xae, 0x2c, | ||
| 731 | 0x8c, 0x8c, 0x54, 0x58, 0x9a, 0x9c, 0xcb, 0x1c, 0x9d, 0x5c, 0xdd, 0x18, | ||
| 732 | 0xdd, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x9a, 0x9b, 0xd9, 0x1b, 0x0b, | ||
| 733 | 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x32, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, | ||
| 734 | 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x64, 0xe8, 0xca, 0xf0, 0xe8, 0xea, | ||
| 735 | 0xe4, 0xca, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xa8, 0xa4, 0xb9, 0xc1, 0xd5, | ||
| 736 | 0xd1, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x71, 0x19, 0x7b, 0x63, 0x7b, 0x93, | ||
| 737 | 0xfb, 0x9a, 0x1b, 0x0b, 0x63, 0x2b, 0xa3, 0x43, 0xf7, 0xe6, 0x56, 0xd6, | ||
| 738 | 0x16, 0x06, 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0xc6, 0x87, 0xee, | ||
| 739 | 0xcd, 0xad, 0xac, 0x2d, 0x0c, 0xee, 0xcb, 0x2c, 0x6c, 0x8c, 0xee, 0x4d, | ||
| 740 | 0x2e, 0x86, 0x0f, 0xdd, 0x9b, 0x5b, 0x59, 0x5b, 0x18, 0xdc, 0x97, 0x59, | ||
| 741 | 0xd8, 0x18, 0xdd, 0x9b, 0x9c, 0x0c, 0x9f, 0x39, 0x32, 0xb9, 0xaf, 0x3b, | ||
| 742 | 0xb4, 0x34, 0xba, 0xb2, 0x2f, 0xb8, 0xb7, 0x34, 0x37, 0xba, 0x21, 0xb0, | ||
| 743 | 0x80, 0x04, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x65, 0x80, 0x08, 0x88, | ||
| 744 | 0x80, 0x04, 0x07, 0x19, 0x1c, 0x66, 0x80, 0x14, 0x88, 0x80, 0x04, 0x07, | ||
| 745 | 0x19, 0x1c, 0x67, 0x80, 0x1c, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x68, | ||
| 746 | 0x80, 0x20, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x69, 0x80, 0x24, 0x88, | ||
| 747 | 0x80, 0x04, 0x07, 0x19, 0x1c, 0x6a, 0x80, 0x28, 0x88, 0x80, 0x04, 0x07, | ||
| 748 | 0x19, 0x1c, 0x6b, 0x80, 0x2c, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x6c, | ||
| 749 | 0xc0, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, | ||
| 750 | 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, | ||
| 751 | 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, | ||
| 752 | 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x9f, 0x29, 0xb4, 0x30, 0xb2, | ||
| 753 | 0x32, 0xb9, 0xa1, 0x37, 0xb7, 0x39, 0xba, 0x30, 0x37, 0xba, 0x39, 0x06, | ||
| 754 | 0x63, 0x43, 0xc8, 0x00, 0x21, 0x8e, 0xef, 0x00, 0x03, 0xc4, 0x38, 0xc2, | ||
| 755 | 0x00, 0x09, 0x90, 0xe1, 0x10, 0x83, 0x63, 0x0c, 0x8e, 0x36, 0x38, 0xdc, | ||
| 756 | 0x00, 0x31, 0x8e, 0x37, 0x40, 0x84, 0x03, 0x3a, 0xe0, 0xe0, 0xc8, 0x8e, | ||
| 757 | 0x38, 0x18, 0x62, 0x1c, 0xdb, 0xe1, 0x1d, 0x72, 0x30, 0xc4, 0x30, 0x80, | ||
| 758 | 0x63, 0x3a, 0xe6, 0x80, 0xd5, 0x97, 0x16, 0xd5, 0x54, 0x4c, 0xcd, 0x14, | ||
| 759 | 0x5a, 0x18, 0x59, 0x99, 0xdc, 0xd0, 0x9b, 0xdb, 0x1c, 0x5d, 0x98, 0x1b, | ||
| 760 | 0xdd, 0x1c, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, 0x37, 0xba, 0x32, 0x37, | ||
| 761 | 0x3a, 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, 0x69, 0x6d, 0x70, 0x6c, | ||
| 762 | 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x43, 0x84, | ||
| 763 | 0xe3, 0x0e, 0x86, 0x18, 0x87, 0x1d, 0x1c, 0x78, 0xa0, 0x34, 0x43, 0x8c, | ||
| 764 | 0x83, 0x0c, 0x8e, 0x3c, 0x50, 0x9a, 0x21, 0x62, 0x70, 0xd4, 0xc1, 0xa1, | ||
| 765 | 0x07, 0x4a, 0x73, 0xe8, 0x81, 0xf2, 0x1c, 0x7a, 0xa0, 0x40, 0x87, 0x1e, | ||
| 766 | 0x28, 0xce, 0xa1, 0x07, 0x4a, 0x74, 0xe8, 0x81, 0x22, 0x1d, 0x7a, 0xa0, | ||
| 767 | 0x4c, 0x87, 0x1e, 0x28, 0xcc, 0x10, 0xe3, 0xd8, 0x83, 0x43, 0x0f, 0x14, | ||
| 768 | 0x67, 0x44, 0xc4, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xed, 0xf0, | ||
| 769 | 0x0e, 0xe4, 0x50, 0x0f, 0xec, 0x50, 0x0e, 0x6e, 0x60, 0x0e, 0xec, 0x10, | ||
| 770 | 0x0e, 0xe7, 0x30, 0x0f, 0x53, 0x84, 0x60, 0x18, 0xa1, 0xb0, 0x03, 0x3b, | ||
| 771 | 0xd8, 0x43, 0x3b, 0xb8, 0x41, 0x3a, 0x90, 0x43, 0x39, 0xb8, 0x03, 0x3d, | ||
| 772 | 0x4c, 0x09, 0x8a, 0x11, 0x4b, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x3d, | ||
| 773 | 0x94, 0x83, 0x3c, 0xcc, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0x4c, 0x09, 0x8c, | ||
| 774 | 0x11, 0x54, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x01, 0x3b, 0x84, 0x83, 0x3b, | ||
| 775 | 0x9c, 0x43, 0x3d, 0x84, 0xc3, 0x39, 0x94, 0xc3, 0x2f, 0xd8, 0x43, 0x39, | ||
| 776 | 0xc8, 0xc3, 0x3c, 0xa4, 0xc3, 0x3b, 0xb8, 0xc3, 0x94, 0x00, 0x19, 0x31, | ||
| 777 | 0x85, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x8c, 0xc3, 0x3b, 0xb4, 0x03, 0x3c, | ||
| 778 | 0xa4, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x03, 0x3c, 0xd0, 0x43, 0x3a, | ||
| 779 | 0xbc, 0x83, 0x3b, 0xcc, 0xc3, 0x94, 0x41, 0x61, 0x9c, 0x11, 0x4c, 0x38, | ||
| 780 | 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x39, 0xc8, 0x43, 0x38, 0x9c, 0x43, 0x3b, | ||
| 781 | 0x94, 0x83, 0x3b, 0xd0, 0xc3, 0x94, 0x80, 0x0e, 0x00, 0x79, 0x18, 0x00, | ||
| 782 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 783 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 784 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 785 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 786 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 787 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 788 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 789 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 790 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 791 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 792 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 793 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 794 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 795 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 796 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 797 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 798 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 799 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 800 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 801 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 802 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 803 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 804 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 805 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 806 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 807 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 808 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 809 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 810 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 811 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 812 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 813 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 814 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 815 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 816 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 817 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 818 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 819 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 820 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 821 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 822 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 823 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 824 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 825 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 826 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 827 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 828 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 829 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 830 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 831 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 832 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 833 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 834 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 835 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 836 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 837 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, | ||
| 838 | 0x00, 0x06, 0x20, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x11, | ||
| 839 | 0x01, 0x06, 0x43, 0x34, 0x13, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 840 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 841 | 0x00, 0x06, 0x00, 0x00, 0x00, 0xd4, 0x73, 0x10, 0x41, 0x10, 0x68, 0x84, | ||
| 842 | 0x65, 0x30, 0x03, 0x40, 0x3c, 0x03, 0x40, 0x30, 0x46, 0x00, 0x82, 0x20, | ||
| 843 | 0x88, 0x7f, 0x00, 0x00, 0x00, 0xe3, 0x0d, 0x06, 0x44, 0x50, 0x30, 0xe6, | ||
| 844 | 0x18, 0x88, 0xc0, 0x1b, 0x64, 0x08, 0x0a, 0x64, 0x8e, 0x21, 0x28, 0x10, | ||
| 845 | 0x0b, 0x18, 0xf9, 0x64, 0x10, 0x10, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 846 | 0x00, 0x5b, 0x86, 0x20, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 847 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 848 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x50, 0x18, 0x00, | ||
| 849 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, | ||
| 850 | 0x00, 0x11, 0x06, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, | ||
| 851 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, | ||
| 852 | 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, | ||
| 853 | 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, | ||
| 854 | 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, | ||
| 855 | 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, | ||
| 856 | 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, | ||
| 857 | 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0xe8, 0x00, 0x00, | ||
| 858 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, | ||
| 859 | 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, | ||
| 860 | 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, | ||
| 861 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 862 | 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, | ||
| 863 | 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, | ||
| 864 | 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, | ||
| 865 | 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 866 | 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, | ||
| 867 | 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, | ||
| 868 | 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, | ||
| 869 | 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, | ||
| 870 | 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, | ||
| 871 | 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, | ||
| 872 | 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, | ||
| 873 | 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, | ||
| 874 | 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, | ||
| 875 | 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, | ||
| 876 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 877 | 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, | ||
| 878 | 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, | ||
| 879 | 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, | ||
| 880 | 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, | ||
| 881 | 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, | ||
| 882 | 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, | ||
| 883 | 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, | ||
| 884 | 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, | ||
| 885 | 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 886 | 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, | ||
| 887 | 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, | ||
| 888 | 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, | ||
| 889 | 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, | ||
| 890 | 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 891 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 892 | 0x7a, 0x28, 0x07, 0x60, 0x83, 0x21, 0x10, 0xc0, 0x02, 0x54, 0x1b, 0x8c, | ||
| 893 | 0xa1, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x10, 0x06, 0xb0, 0x00, 0xd5, 0x06, | ||
| 894 | 0xa3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0x83, 0x8f, | ||
| 895 | 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, | ||
| 896 | 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, | ||
| 897 | 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 898 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, | ||
| 899 | 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, | ||
| 900 | 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, | ||
| 901 | 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x90, 0x07, 0x76, 0x00, | ||
| 902 | 0x0c, 0xee, 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, 0x90, 0x0e, 0xec, 0x40, | ||
| 903 | 0x0f, 0xe9, 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, | ||
| 904 | 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, | ||
| 905 | 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, | ||
| 906 | 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 907 | 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, | ||
| 908 | 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, | ||
| 909 | 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 910 | 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0x0f, 0xf2, 0x50, | ||
| 911 | 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, | ||
| 912 | 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 913 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 914 | 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, | ||
| 915 | 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, | ||
| 916 | 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, | ||
| 917 | 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, | ||
| 918 | 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, | ||
| 919 | 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, | ||
| 920 | 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, | ||
| 921 | 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, | ||
| 922 | 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, | ||
| 923 | 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, | ||
| 924 | 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, | ||
| 925 | 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, | ||
| 926 | 0x0e, 0x00, 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, | ||
| 927 | 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, | ||
| 928 | 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x40, 0x8e, | ||
| 929 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83, 0x81, | ||
| 930 | 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0xda, 0x80, | ||
| 931 | 0x28, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, | ||
| 932 | 0x63, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0xc3, 0xc4, | ||
| 933 | 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x80, 0x34, 0xb8, 0xc3, 0x3b, | ||
| 934 | 0xb4, 0x81, 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, 0x3d, 0xa4, 0x83, 0x3b, | ||
| 935 | 0xcc, 0x03, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 936 | 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, 0x31, 0x21, 0x30, 0x26, | ||
| 937 | 0x0c, 0x07, 0x92, 0x4c, 0x18, 0x14, 0x24, 0x99, 0x10, 0x2c, 0x13, 0x02, | ||
| 938 | 0x06, 0x89, 0x20, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, | ||
| 939 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, | ||
| 940 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, | ||
| 941 | 0x4c, 0x10, 0x9c, 0xc1, 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, | ||
| 942 | 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, | ||
| 943 | 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 944 | 0x00, 0x80, 0x41, 0x84, 0x41, 0x38, 0x4a, 0x9a, 0x22, 0x4a, 0x98, 0xfc, | ||
| 945 | 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, 0xdf, 0x1e, 0xfe, 0x69, 0x8c, 0x00, | ||
| 946 | 0x18, 0x44, 0x28, 0x82, 0x8b, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x25, | ||
| 947 | 0x80, 0x79, 0x16, 0x22, 0xfa, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x10, | ||
| 948 | 0xca, 0x11, 0x04, 0x81, 0x40, 0x18, 0x08, 0x25, 0xc3, 0x08, 0x03, 0x50, | ||
| 949 | 0x88, 0x65, 0x59, 0x16, 0x62, 0xca, 0x00, 0x00, 0x00, 0x39, 0x45, 0x00, | ||
| 950 | 0x00, 0x82, 0xca, 0x00, 0x2c, 0x0b, 0x49, 0xc5, 0x58, 0x16, 0x00, 0x00, | ||
| 951 | 0x00, 0xa2, 0xca, 0xb0, 0x2c, 0x0b, 0x59, 0x45, 0x58, 0x16, 0xc2, 0xe6, | ||
| 952 | 0x08, 0x82, 0x39, 0x02, 0x30, 0x18, 0x46, 0x10, 0xb6, 0x82, 0x04, 0x06, | ||
| 953 | 0x22, 0x68, 0x9c, 0x06, 0x50, 0x37, 0x10, 0x90, 0x02, 0xdb, 0x1c, 0x01, | ||
| 954 | 0x28, 0x0c, 0x22, 0x00, 0xc2, 0x14, 0xc0, 0x08, 0xc0, 0x30, 0xc2, 0xb0, | ||
| 955 | 0x0d, 0x23, 0x10, 0x1b, 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, | ||
| 956 | 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, | ||
| 957 | 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, | ||
| 958 | 0x03, 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8, 0x70, 0x1b, 0xe5, | ||
| 959 | 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 960 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, | ||
| 961 | 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, | ||
| 962 | 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, | ||
| 963 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, | ||
| 964 | 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, | ||
| 965 | 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, | ||
| 966 | 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 967 | 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 968 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, | ||
| 969 | 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, | ||
| 970 | 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, | ||
| 971 | 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 972 | 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 973 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, | ||
| 974 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, | ||
| 975 | 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, | ||
| 976 | 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, | ||
| 977 | 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, | ||
| 978 | 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, | ||
| 979 | 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, | ||
| 980 | 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, | ||
| 981 | 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, | ||
| 982 | 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, | ||
| 983 | 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, | ||
| 984 | 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, | ||
| 985 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x51, | ||
| 986 | 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x34, 0x40, | ||
| 987 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x61, 0x1e, 0x20, 0x00, | ||
| 988 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x30, 0x11, 0x10, 0x00, 0x02, | ||
| 989 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x98, 0x09, 0x08, 0x00, 0x01, 0x00, | ||
| 990 | 0x00, 0x00, 0x00, 0x80, 0x21, 0x4c, 0x85, 0x00, 0xc3, 0x00, 0x00, 0x00, | ||
| 991 | 0x10, 0x00, 0xc0, 0x10, 0xe6, 0x01, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, | ||
| 992 | 0x00, 0x60, 0x08, 0x73, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 993 | 0x30, 0x84, 0xc9, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, | ||
| 994 | 0xc2, 0x5c, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x61, | ||
| 995 | 0x3c, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, | ||
| 996 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, | ||
| 997 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xda, 0x46, 0x00, 0x0a, | ||
| 998 | 0xa1, 0x04, 0x8a, 0xa0, 0x20, 0x0a, 0xa8, 0x0c, 0x0a, 0xa3, 0x40, 0x0a, | ||
| 999 | 0xa5, 0x60, 0x0a, 0xa7, 0x14, 0x28, 0x2c, 0x9c, 0x11, 0x80, 0x42, 0x28, | ||
| 1000 | 0x88, 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x02, 0xc7, 0x12, 0x1e, 0x01, | ||
| 1001 | 0x00, 0x79, 0x18, 0x00, 0x00, 0x6f, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 1002 | 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, | ||
| 1003 | 0xb7, 0x21, 0xc6, 0xe6, 0x7c, 0x00, 0x18, 0x80, 0x01, 0x95, 0xbb, 0x31, | ||
| 1004 | 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0xc6, 0xd6, 0x7c, | ||
| 1005 | 0xc2, 0xc6, 0x30, 0x0e, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0xda, 0xca, | ||
| 1006 | 0xe8, 0xc2, 0xd8, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, | ||
| 1007 | 0x66, 0x64, 0x60, 0x64, 0x66, 0x5c, 0x68, 0x60, 0x68, 0x40, 0x50, 0xda, | ||
| 1008 | 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x66, 0x64, 0x60, 0x64, 0x66, | ||
| 1009 | 0x5c, 0x68, 0x60, 0x68, 0x52, 0x86, 0x08, 0x1f, 0x31, 0xc4, 0xd8, 0x9a, | ||
| 1010 | 0xed, 0xd9, 0x16, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xef, | ||
| 1011 | 0xd8, 0x9a, 0xad, 0xd9, 0x16, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, | ||
| 1012 | 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, | ||
| 1013 | 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x2f, | ||
| 1014 | 0x21, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, | ||
| 1015 | 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, | ||
| 1016 | 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xf8, 0x16, 0x96, 0x41, 0x58, | ||
| 1017 | 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, | ||
| 1018 | 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, | ||
| 1019 | 0x19, 0xdd, 0x18, 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b, 0xd9, | ||
| 1020 | 0x10, 0xe1, 0x6b, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0xc8, 0x95, 0xb9, 0x91, | ||
| 1021 | 0x95, 0xc9, 0x7d, 0xd1, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x31, 0x0a, 0x4b, | ||
| 1022 | 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x72, | ||
| 1023 | 0x0b, 0x6b, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x33, 0x04, | ||
| 1024 | 0xf9, 0x9e, 0x6d, 0xf9, 0xa0, 0x2f, 0x1a, 0x22, 0x7c, 0x12, 0x99, 0xb0, | ||
| 1025 | 0x34, 0x39, 0x17, 0xb8, 0xb7, 0xb9, 0x34, 0xba, 0xb4, 0x37, 0x37, 0x2a, | ||
| 1026 | 0x61, 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x94, 0xc2, | ||
| 1027 | 0xd2, 0xe4, 0x5c, 0xdc, 0xde, 0xbe, 0xe0, 0xca, 0xe4, 0xe6, 0xe0, 0xca, | ||
| 1028 | 0xc6, 0xe8, 0xd2, 0xec, 0xca, 0xc8, 0x84, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, | ||
| 1029 | 0x9d, 0x7d, 0xb9, 0x85, 0xb5, 0x95, 0x11, 0x81, 0x7b, 0x9b, 0x4b, 0xa3, | ||
| 1030 | 0x4b, 0x7b, 0x73, 0x1b, 0x02, 0x6d, 0xcb, 0x47, 0x7d, 0xd5, 0x67, 0x7d, | ||
| 1031 | 0xd0, 0x17, 0x7d, 0xd7, 0x87, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x31, 0x93, | ||
| 1032 | 0x0b, 0x3b, 0x6b, 0x2b, 0x73, 0xa3, 0xfb, 0x4a, 0x73, 0x83, 0xab, 0xa3, | ||
| 1033 | 0xa3, 0x75, 0x56, 0xe6, 0x56, 0x26, 0x17, 0x46, 0x57, 0x46, 0x86, 0x52, | ||
| 1034 | 0x33, 0xf6, 0xc6, 0xf6, 0x26, 0x47, 0x64, 0x47, 0xf3, 0x65, 0x96, 0xc2, | ||
| 1035 | 0x27, 0x2c, 0x4d, 0xce, 0x05, 0xae, 0x4c, 0x6e, 0x0e, 0xae, 0x6c, 0x8c, | ||
| 1036 | 0x2e, 0xcd, 0xae, 0x8c, 0xc5, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0x10, 0x69, | ||
| 1037 | 0x6b, 0x3e, 0xed, 0xdb, 0xbe, 0xea, 0xe3, 0x3e, 0xe8, 0x8b, 0xbe, 0xeb, | ||
| 1038 | 0xeb, 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, | ||
| 1039 | 0xe0, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, | ||
| 1040 | 0x7c, 0x99, 0xa5, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x93, 0x21, 0x42, | ||
| 1041 | 0x57, 0x86, 0x37, 0xf6, 0xf6, 0x26, 0x47, 0x36, 0x44, 0xda, 0x9c, 0x4f, | ||
| 1042 | 0xfb, 0xbe, 0xaf, 0xfa, 0xb8, 0x0f, 0xfa, 0xc0, 0xe0, 0xbb, 0xbe, 0x30, | ||
| 1043 | 0xa0, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x56, 0x67, 0x66, 0x56, 0x26, 0xc7, | ||
| 1044 | 0x27, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0xee, 0x6b, | ||
| 1045 | 0x2e, 0x4d, 0xaf, 0x8c, 0x52, 0x58, 0x9a, 0x9c, 0x0b, 0xdb, 0xdb, 0x58, | ||
| 1046 | 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0x57, 0x9a, 0x1b, 0x59, 0x19, 0x1e, 0x91, | ||
| 1047 | 0xb0, 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x52, 0x61, 0x69, 0x72, | ||
| 1048 | 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 1049 | 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2c, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0xc8, | ||
| 1050 | 0xcc, 0x8d, 0x49, 0x1d, 0x09, 0x7d, 0xbd, 0xd5, 0xd1, 0xc1, 0xd5, 0xd1, | ||
| 1051 | 0x91, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xfb, 0xa2, 0xcb, 0x83, | ||
| 1052 | 0x2b, 0xa3, 0x92, 0xe6, 0x06, 0x57, 0x47, 0xf7, 0x45, 0x97, 0x07, 0x57, | ||
| 1053 | 0xc6, 0x65, 0xec, 0x8d, 0xed, 0x4d, 0xee, 0x6b, 0x6e, 0x2c, 0x8c, 0xad, | ||
| 1054 | 0x8c, 0x0e, 0xdd, 0x9b, 0x5b, 0x59, 0x5b, 0x18, 0xdc, 0x57, 0x5b, 0x19, | ||
| 1055 | 0x1d, 0xda, 0x1b, 0x19, 0x1f, 0xba, 0x37, 0xb7, 0xb2, 0xb6, 0x30, 0xb8, | ||
| 1056 | 0x2f, 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x18, 0x3e, 0x74, 0x6f, 0x6e, | ||
| 1057 | 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, | ||
| 1058 | 0x7c, 0xe6, 0xc8, 0xe4, 0xbe, 0xee, 0xd0, 0xd2, 0xe8, 0xca, 0xbe, 0xe0, | ||
| 1059 | 0xde, 0xd2, 0xdc, 0xe8, 0x86, 0xc0, 0xc2, 0xb6, 0x6c, 0xcc, 0xb6, 0x7c, | ||
| 1060 | 0x68, 0xf0, 0xa5, 0xc1, 0xc6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xa9, | ||
| 1061 | 0xc1, 0xf6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xad, 0xc1, 0x26, 0x6d, | ||
| 1062 | 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xb1, 0xc1, 0x36, 0x6d, 0xcc, 0xb6, 0x7c, | ||
| 1063 | 0x68, 0xf0, 0xb5, 0xc1, 0x46, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xb9, | ||
| 1064 | 0xc1, 0x56, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xbd, 0xc1, 0x66, 0x6d, | ||
| 1065 | 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xc1, 0x01, 0xa3, 0xb0, 0x34, 0x39, 0x97, | ||
| 1066 | 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0xaf, 0xb9, 0x34, 0xbd, | ||
| 1067 | 0x32, 0x5e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, | ||
| 1068 | 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, | ||
| 1069 | 0x65, 0x7c, 0xa6, 0xd0, 0xc2, 0xc8, 0xca, 0xe4, 0x86, 0xde, 0xdc, 0xe6, | ||
| 1070 | 0xe8, 0xc2, 0xdc, 0xe8, 0xe6, 0x18, 0x8c, 0x0d, 0x21, 0x83, 0x2d, 0xfa, | ||
| 1071 | 0xc6, 0xe0, 0x23, 0x83, 0x0d, 0xfa, 0xca, 0x60, 0x5b, 0xb6, 0xe6, 0x33, | ||
| 1072 | 0x83, 0xef, 0x0c, 0xbe, 0x38, 0xf8, 0xe4, 0x60, 0x83, 0xbe, 0x39, 0xd8, | ||
| 1073 | 0x98, 0x0f, 0xfa, 0xe8, 0xe0, 0xbb, 0xbe, 0x3a, 0xe0, 0x12, 0x96, 0x26, | ||
| 1074 | 0xe7, 0x42, 0x57, 0x86, 0x47, 0x57, 0x27, 0x57, 0x46, 0x25, 0x2c, 0x4d, | ||
| 1075 | 0xce, 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x8c, 0x18, 0x5d, 0x19, 0x1e, | ||
| 1076 | 0x5d, 0x9d, 0x5c, 0x99, 0x0c, 0x19, 0x8f, 0x19, 0xdb, 0x5b, 0x18, 0x1d, | ||
| 1077 | 0x0b, 0xc8, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x0f, 0x07, 0xba, 0x32, | ||
| 1078 | 0xbc, 0x21, 0xd4, 0xc6, 0x7c, 0x77, 0xf0, 0x95, 0xc1, 0xb6, 0x6c, 0xcd, | ||
| 1079 | 0x87, 0x07, 0x1f, 0xf4, 0xe5, 0xc1, 0x77, 0x7d, 0x7a, 0xc0, 0x25, 0x2c, | ||
| 1080 | 0x4d, 0xce, 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc7, 0x5c, | ||
| 1081 | 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x1c, 0x83, 0xb9, 0x21, 0xd2, 0x76, 0x7d, | ||
| 1082 | 0x7c, 0xf0, 0x95, 0xc1, 0xb6, 0x6c, 0xcd, 0x07, 0x7d, 0x7d, 0xf0, 0x5d, | ||
| 1083 | 0x9f, 0x1f, 0x0c, 0x61, 0xbe, 0xec, 0xf3, 0x3e, 0x31, 0xf8, 0xec, 0xe0, | ||
| 1084 | 0xdb, 0x83, 0xef, 0x0f, 0x86, 0x18, 0x0a, 0xf0, 0x4d, 0x1f, 0x28, 0x70, | ||
| 1085 | 0x0c, 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, | ||
| 1086 | 0xc6, 0xde, 0xe0, 0xca, 0xe6, 0x50, 0xa6, 0x88, 0x98, 0xbe, 0x86, 0xde, | ||
| 1087 | 0xe0, 0xf2, 0xbe, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0x52, | ||
| 1088 | 0x86, 0x10, 0xdf, 0x28, 0x7c, 0xa2, 0x40, 0x2c, 0x2c, 0x4d, 0xae, 0x25, | ||
| 1089 | 0x8c, 0x2d, 0x2d, 0x6c, 0xae, 0x65, 0x6e, 0xec, 0x0d, 0xae, 0xac, 0x85, | ||
| 1090 | 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x6c, 0x6e, 0x88, 0xf1, 0x95, 0xc2, | ||
| 1091 | 0x37, 0x0a, 0x1f, 0x29, 0x10, 0x0b, 0x4b, 0x93, 0x6b, 0x09, 0x63, 0x4b, | ||
| 1092 | 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, 0x2b, 0x6b, 0x99, 0x0b, 0x6b, | ||
| 1093 | 0x83, 0x63, 0x2b, 0x93, 0x9b, 0x1b, 0x62, 0x7c, 0xa7, 0xf0, 0x8d, 0xc2, | ||
| 1094 | 0x67, 0x0a, 0x43, 0x88, 0xaf, 0x14, 0xbe, 0x53, 0x60, 0xf5, 0xa5, 0x45, | ||
| 1095 | 0x35, 0x15, 0x53, 0x33, 0x85, 0x16, 0x46, 0x56, 0x26, 0x37, 0xf4, 0xe6, | ||
| 1096 | 0x36, 0x47, 0x17, 0xe6, 0x46, 0x37, 0xc7, 0xe7, 0xad, 0xcd, 0x2d, 0x0d, | ||
| 1097 | 0xee, 0x8d, 0xae, 0xcc, 0x8d, 0x0e, 0x64, 0x0c, 0x2d, 0x4c, 0x8e, 0xcf, | ||
| 1098 | 0x54, 0x5a, 0x1b, 0x1c, 0x5b, 0x19, 0xc8, 0xd0, 0xca, 0x0a, 0x08, 0x95, | ||
| 1099 | 0x50, 0x50, 0xd0, 0x10, 0xe1, 0x5b, 0x85, 0x21, 0xc6, 0xa7, 0x0a, 0x1f, | ||
| 1100 | 0x2b, 0x84, 0x41, 0x36, 0xc4, 0xf8, 0xd0, 0xe0, 0x6b, 0x85, 0x30, 0xc8, | ||
| 1101 | 0x86, 0x88, 0xc1, 0x97, 0x0a, 0x9f, 0x2b, 0x84, 0x41, 0xf6, 0xb9, 0x42, | ||
| 1102 | 0x18, 0x68, 0x9f, 0x2b, 0x84, 0xc1, 0xf6, 0xb9, 0x42, 0x18, 0x70, 0x9f, | ||
| 1103 | 0x2b, 0x84, 0x41, 0xf7, 0xb9, 0x42, 0x18, 0x78, 0x9f, 0x2b, 0x84, 0xc1, | ||
| 1104 | 0xf7, 0xb9, 0x42, 0x18, 0x60, 0x43, 0x8c, 0xef, 0x15, 0x3e, 0x57, 0x08, | ||
| 1105 | 0x83, 0x6d, 0x88, 0xf1, 0xbd, 0xc2, 0xe7, 0x0a, 0x61, 0x80, 0x0d, 0x31, | ||
| 1106 | 0xbe, 0x57, 0xf8, 0x5c, 0x21, 0x0c, 0xba, 0x21, 0xc6, 0xf7, 0x0a, 0x9f, | ||
| 1107 | 0x2b, 0x84, 0x81, 0x37, 0xc4, 0xf8, 0x5e, 0xe1, 0x73, 0x85, 0x30, 0xf8, | ||
| 1108 | 0x86, 0x18, 0xdf, 0x2b, 0x7c, 0xae, 0x10, 0x06, 0xda, 0x10, 0xe3, 0x7b, | ||
| 1109 | 0x85, 0xcf, 0x15, 0xc2, 0x80, 0x1b, 0x62, 0x7c, 0xaf, 0xf0, 0xb9, 0x42, | ||
| 1110 | 0x18, 0x64, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 1111 | 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03, 0x73, 0x60, | ||
| 1112 | 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x22, 0x04, 0xc3, 0x08, 0x85, 0x1d, | ||
| 1113 | 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81, 0x1c, 0xca, 0xc1, 0x1d, | ||
| 1114 | 0xe8, 0x61, 0x4a, 0x50, 0x8c, 0x58, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, | ||
| 1115 | 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x4a, | ||
| 1116 | 0x60, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xd8, 0x21, 0x1c, | ||
| 1117 | 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1, 0x1c, 0x7e, 0xc1, 0x1e, | ||
| 1118 | 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xa6, 0x04, 0xc8, | ||
| 1119 | 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, | ||
| 1120 | 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1, 0x1d, 0xe0, 0x81, 0x1e, | ||
| 1121 | 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x0c, 0x0a, 0xe3, 0x8c, 0x60, | ||
| 1122 | 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, | ||
| 1123 | 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0xa1, 0x00, 0x00, 0x00, | ||
| 1124 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 1125 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 1126 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 1127 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 1128 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 1129 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 1130 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 1131 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 1132 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 1133 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 1134 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 1135 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 1136 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 1137 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 1138 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 1139 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 1140 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 1141 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 1142 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 1143 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 1144 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 1145 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 1146 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 1147 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 1148 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 1149 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 1150 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 1151 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 1152 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 1153 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 1154 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 1155 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 1156 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 1157 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 1158 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 1159 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 1160 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 1161 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 1162 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 1163 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 1164 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 1165 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 1166 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 1167 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 1168 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 1169 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 1170 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 1171 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 1172 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 1173 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 1174 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 1175 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 1176 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 1177 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 1178 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 1179 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 1180 | 0x00, 0x2e, 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d, 0xf9, 0x73, 0xce, | ||
| 1181 | 0x83, 0xfd, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x56, 0x90, 0xfd, 0x73, | ||
| 1182 | 0x6d, 0x6b, 0xcf, 0xb3, 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, | ||
| 1183 | 0xfd, 0x17, 0x45, 0x51, 0x14, 0x46, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, | ||
| 1184 | 0xe4, 0x57, 0x77, 0x71, 0xdb, 0xa6, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, | ||
| 1185 | 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, | ||
| 1186 | 0x85, 0x17, 0xb7, 0x6d, 0x08, 0x13, 0x80, 0x44, 0x7e, 0x01, 0x48, 0xd3, | ||
| 1187 | 0x5f, 0x00, 0x81, 0xe4, 0x57, 0x77, 0x71, 0xdb, 0x16, 0x40, 0x01, 0x48, | ||
| 1188 | 0xe4, 0x17, 0x80, 0x34, 0xfd, 0xc2, 0x02, 0x30, 0x8f, 0x5f, 0xdd, 0xc5, | ||
| 1189 | 0x6d, 0x5b, 0xc2, 0x04, 0x20, 0x91, 0x5f, 0x00, 0xd2, 0xf4, 0x17, 0x0c, | ||
| 1190 | 0x70, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x09, 0x40, 0x00, 0x12, 0xf9, 0x05, | ||
| 1191 | 0x20, 0x4d, 0xff, 0xe3, 0x58, 0x7e, 0x71, 0xdb, 0x36, 0x10, 0x01, 0x48, | ||
| 1192 | 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, 0x10, 0x48, 0x7e, 0x71, 0xdb, 0x66, | ||
| 1193 | 0x10, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, 0x03, 0x5c, 0x7e, | ||
| 1194 | 0x71, 0xdb, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x8f, | ||
| 1195 | 0x63, 0xf9, 0xd5, 0x5d, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1196 | 0x00, 0x99, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, | ||
| 1197 | 0x00, 0x51, 0x00, 0x00, 0x00, 0x64, 0x8e, 0x45, 0x00, 0x81, 0x70, 0xcc, | ||
| 1198 | 0x41, 0x2c, 0x8d, 0xd3, 0x06, 0x54, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, | ||
| 1199 | 0x40, 0xdc, 0x08, 0x00, 0x6d, 0xc5, 0x30, 0x03, 0x50, 0x0e, 0xa4, 0x8d, | ||
| 1200 | 0x00, 0xd4, 0x00, 0x01, 0x63, 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, | ||
| 1201 | 0xa0, 0xb3, 0xe6, 0x1c, 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x09, | ||
| 1202 | 0x06, 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x18, 0xcc, 0x00, 0x50, 0x30, | ||
| 1203 | 0x03, 0x30, 0x03, 0x30, 0x07, 0x91, 0x0a, 0xaf, 0x90, 0x0a, 0x75, 0x40, | ||
| 1204 | 0xcb, 0x0c, 0xc0, 0x08, 0xc0, 0x0c, 0xc0, 0x58, 0x03, 0x08, 0x82, 0x20, | ||
| 1205 | 0xfe, 0x81, 0x20, 0x08, 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x8d, 0x35, | ||
| 1206 | 0xb0, 0xed, 0xfc, 0x93, 0x1e, 0xdb, 0xce, 0x3f, 0xe9, 0xb1, 0xed, 0xfc, | ||
| 1207 | 0x93, 0xde, 0x58, 0x03, 0x08, 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, | ||
| 1208 | 0xf5, 0x2f, 0x80, 0x20, 0xc8, 0xd6, 0xbf, 0x30, 0xd6, 0x00, 0x82, 0xe0, | ||
| 1209 | 0x9a, 0x83, 0x01, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, | ||
| 1210 | 0x18, 0x8c, 0x35, 0x80, 0x20, 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, | ||
| 1211 | 0x83, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x63, 0x0d, 0xeb, 0x88, 0xc7, | ||
| 1212 | 0x2c, 0x18, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, | ||
| 1213 | 0xc1, 0x58, 0x03, 0x08, 0xc2, 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, | ||
| 1214 | 0x18, 0x80, 0x20, 0x8c, 0x87, 0x63, 0x30, 0xd6, 0x20, 0xe6, 0x62, 0xda, | ||
| 1215 | 0x7f, 0x60, 0xc9, 0xb3, 0xf1, 0x2f, 0x8c, 0xe9, 0xaa, 0xe6, 0xbe, 0x30, | ||
| 1216 | 0xd6, 0xf0, 0xcf, 0xa4, 0xff, 0xfb, 0x02, 0x5d, 0x83, 0x62, 0xfe, 0xb5, | ||
| 1217 | 0x70, 0x1c, 0x83, 0xbe, 0x30, 0xd6, 0x30, 0xf7, 0x6d, 0x9a, 0xfa, 0x42, | ||
| 1218 | 0xeb, 0x86, 0x3c, 0xef, 0x0b, 0x7c, 0xce, 0xfa, 0xf8, 0x47, 0xc0, 0x18, | ||
| 1219 | 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, | ||
| 1220 | 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, | ||
| 1221 | 0xdf, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, | ||
| 1222 | 0xba, 0xf8, 0x37, 0x46, 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, | ||
| 1223 | 0xe8, 0xf6, 0x34, 0x18, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, | ||
| 1224 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x4a, 0x11, 0x98, 0xc2, 0x1a, | ||
| 1225 | 0xa8, 0x41, 0x1b, 0x80, 0x41, 0x19, 0x84, 0x41, 0x30, 0xde, 0xd0, 0x06, | ||
| 1226 | 0x78, 0x30, 0x0a, 0x14, 0x8c, 0xe1, 0x86, 0x00, 0x0c, 0x82, 0x59, 0x86, | ||
| 1227 | 0x40, 0x08, 0x06, 0x19, 0x08, 0x4f, 0x0d, 0xc6, 0x1b, 0xe2, 0x80, 0x0f, | ||
| 1228 | 0xce, 0x80, 0x82, 0x31, 0x62, 0x40, 0x18, 0xc1, 0x2b, 0x0c, 0x23, 0x06, | ||
| 1229 | 0x85, 0x11, 0xc4, 0x42, 0xb0, 0x59, 0xb0, 0xc1, 0x67, 0xc4, 0xa0, 0x30, | ||
| 1230 | 0x82, 0x58, 0x08, 0xc0, 0xc0, 0x06, 0x4e, 0x3e, 0xc6, 0x05, 0xf1, 0xb1, | ||
| 1231 | 0x21, 0xa0, 0xcf, 0x88, 0x01, 0x61, 0x04, 0xb6, 0x10, 0x8c, 0x18, 0x14, | ||
| 1232 | 0x46, 0x80, 0x0b, 0x81, 0x67, 0x81, 0x27, 0x9f, 0x39, 0x06, 0x34, 0x58, | ||
| 1233 | 0x6c, 0x61, 0x90, 0x21, 0x48, 0x83, 0x3c, 0xb0, 0x21, 0xa0, 0xcf, 0x20, | ||
| 1234 | 0x43, 0xb0, 0x06, 0x7c, 0x30, 0xc8, 0x10, 0x54, 0x7e, 0x30, 0x4b, 0x20, | ||
| 1235 | 0x0c, 0x54, 0x04, 0x42, 0xc0, 0x06, 0xc0, 0x78, 0xc3, 0x28, 0xb8, 0xc2, | ||
| 1236 | 0x2e, 0x50, 0x30, 0x86, 0x1b, 0x02, 0xcd, 0x99, 0x65, 0x18, 0x88, 0x60, | ||
| 1237 | 0x90, 0x81, 0xa0, 0x03, 0x50, 0x18, 0x6f, 0x38, 0x05, 0x59, 0xa0, 0x05, | ||
| 1238 | 0x0a, 0xc6, 0x78, 0x43, 0x2a, 0xd0, 0x42, 0x28, 0x50, 0x30, 0x46, 0x0c, | ||
| 1239 | 0x90, 0x23, 0x52, 0x87, 0xa2, 0x3b, 0x86, 0x60, 0x90, 0x21, 0xb8, 0x03, | ||
| 1240 | 0x54, 0x18, 0x64, 0x08, 0x16, 0x55, 0x98, 0x25, 0x20, 0x06, 0x2a, 0x02, | ||
| 1241 | 0x61, 0xc0, 0x84, 0xe1, 0x86, 0x30, 0x50, 0x83, 0x60, 0x96, 0xa1, 0x98, | ||
| 1242 | 0x82, 0xf1, 0x06, 0x58, 0xd8, 0x85, 0x73, 0xa0, 0x60, 0x0c, 0x37, 0x04, | ||
| 1243 | 0x6d, 0x10, 0xcc, 0x32, 0x18, 0x47, 0x30, 0xc8, 0x50, 0x84, 0x42, 0x2b, | ||
| 1244 | 0x8c, 0x37, 0xd0, 0xc2, 0x2f, 0x9c, 0x03, 0x05, 0x63, 0x8e, 0x21, 0x14, | ||
| 1245 | 0x82, 0x77, 0x18, 0x64, 0x08, 0x44, 0x41, 0x16, 0x2c, 0x28, 0xe4, 0x33, | ||
| 1246 | 0xc8, 0x10, 0x90, 0x42, 0x2d, 0xcc, 0x12, 0xb4, 0xc1, 0x78, 0x83, 0x2e, | ||
| 1247 | 0x94, 0xc3, 0x3c, 0x50, 0x30, 0xc6, 0x1b, 0x78, 0xe1, 0x1c, 0xde, 0x81, | ||
| 1248 | 0x82, 0x31, 0xc8, 0x00, 0xb1, 0x82, 0x2e, 0x0c, 0x37, 0x10, 0x74, 0xe0, | ||
| 1249 | 0xcc, 0x32, 0x20, 0x52, 0x30, 0x86, 0x20, 0xe5, 0xc3, 0x70, 0x43, 0xd0, | ||
| 1250 | 0x07, 0xca, 0x2c, 0x83, 0x92, 0x04, 0x26, 0xfc, 0x81, 0x7c, 0x66, 0x09, | ||
| 1251 | 0x16, 0x1b, 0x42, 0x01, 0x3e, 0x23, 0x06, 0x84, 0x11, 0x94, 0x44, 0x60, | ||
| 1252 | 0x01, 0x2e, 0xc8, 0x67, 0xc4, 0xa0, 0x30, 0x02, 0x94, 0x08, 0x70, 0x61, | ||
| 1253 | 0x96, 0x60, 0x19, 0xa8, 0x00, 0x94, 0x44, 0x50, 0xe6, 0x18, 0x6a, 0x21, | ||
| 1254 | 0x08, 0x89, 0x31, 0x84, 0x0d, 0x24, 0x86, 0x1b, 0x02, 0x53, 0x50, 0x66, | ||
| 1255 | 0x19, 0x1a, 0x26, 0x30, 0x01, 0x15, 0xe4, 0x33, 0x4b, 0xe0, 0xd8, 0xa0, | ||
| 1256 | 0x0a, 0xf0, 0x19, 0x31, 0x20, 0x8c, 0xc0, 0x25, 0x02, 0x0b, 0xc2, 0x41, | ||
| 1257 | 0x3e, 0x23, 0x06, 0x85, 0x11, 0xc4, 0x44, 0x10, 0x0e, 0xb3, 0x04, 0xce, | ||
| 1258 | 0x40, 0x05, 0xa0, 0x30, 0x42, 0x33, 0xc7, 0x90, 0x04, 0x28, 0x31, 0x86, | ||
| 1259 | 0x40, 0x06, 0x28, 0x31, 0xdc, 0x10, 0xbc, 0x82, 0x32, 0xcb, 0x00, 0x3d, | ||
| 1260 | 0x81, 0x09, 0xb1, 0x20, 0x9f, 0x59, 0x82, 0xc8, 0x86, 0x59, 0x80, 0xcf, | ||
| 1261 | 0x88, 0x01, 0x61, 0x04, 0x37, 0x11, 0x58, 0xa0, 0x0e, 0xf2, 0x19, 0x31, | ||
| 1262 | 0x28, 0x8c, 0x40, 0x27, 0x02, 0x75, 0x98, 0x25, 0x88, 0x06, 0x2a, 0x00, | ||
| 1263 | 0xe5, 0x11, 0xa0, 0x39, 0x86, 0x24, 0x80, 0x89, 0x59, 0x02, 0x69, 0xa0, | ||
| 1264 | 0x22, 0x10, 0x22, 0x3d, 0x38, 0x06, 0x19, 0x02, 0x75, 0xb0, 0x87, 0x39, | ||
| 1265 | 0x06, 0x74, 0x00, 0x03, 0x9b, 0x18, 0x64, 0x08, 0xd2, 0x21, 0x1f, 0x6c, | ||
| 1266 | 0x08, 0xe4, 0x33, 0xc8, 0x10, 0xac, 0x03, 0x3f, 0xcc, 0x12, 0xb4, 0xc1, | ||
| 1267 | 0x70, 0xc3, 0x2c, 0xc4, 0x43, 0x30, 0xcb, 0x40, 0x81, 0x41, 0x30, 0xc8, | ||
| 1268 | 0x40, 0x07, 0xf0, 0xc0, 0x0f, 0xe3, 0x0d, 0x23, 0xe1, 0x12, 0x3c, 0x41, | ||
| 1269 | 0xc1, 0x18, 0x6f, 0x28, 0x09, 0x98, 0xc0, 0x09, 0x0a, 0xc6, 0x1c, 0x83, | ||
| 1270 | 0x3c, 0x04, 0x60, 0x31, 0xc8, 0x10, 0xcc, 0xc3, 0x48, 0x58, 0x70, 0xc8, | ||
| 1271 | 0x67, 0x90, 0x21, 0xa8, 0x07, 0x93, 0x18, 0x6e, 0x38, 0xc0, 0xc1, 0x99, | ||
| 1272 | 0x65, 0xf8, 0xaa, 0x60, 0x0c, 0x61, 0x28, 0x8b, 0xe1, 0x86, 0x60, 0x1c, | ||
| 1273 | 0x94, 0x59, 0x86, 0xcb, 0x0a, 0x4c, 0x28, 0x07, 0xf9, 0xcc, 0x12, 0x60, | ||
| 1274 | 0x23, 0x06, 0x84, 0x11, 0xc0, 0xc5, 0x30, 0x62, 0x50, 0x18, 0x81, 0x5c, | ||
| 1275 | 0x04, 0xe8, 0x60, 0x81, 0x3a, 0xc8, 0xc7, 0x02, 0x76, 0x80, 0xcf, 0x2c, | ||
| 1276 | 0x01, 0x36, 0x50, 0x01, 0x28, 0x96, 0x70, 0xcd, 0x31, 0xf4, 0x43, 0xd0, | ||
| 1277 | 0x16, 0x63, 0x08, 0x0c, 0x5b, 0x0c, 0x37, 0x04, 0xec, 0xa0, 0xcc, 0x32, | ||
| 1278 | 0x68, 0x59, 0x60, 0x82, 0x3b, 0xc8, 0x67, 0x96, 0x60, 0x1b, 0x31, 0x20, | ||
| 1279 | 0x8c, 0x20, 0x2f, 0x86, 0x11, 0x83, 0xc2, 0x08, 0xf6, 0x22, 0x88, 0x07, | ||
| 1280 | 0x0b, 0xe6, 0x41, 0x3e, 0x16, 0xd4, 0x03, 0x7c, 0x66, 0x09, 0xb6, 0x81, | ||
| 1281 | 0x0a, 0x40, 0xc9, 0x04, 0x6d, 0x8e, 0x21, 0x09, 0xe8, 0x62, 0x0c, 0xa1, | ||
| 1282 | 0xa2, 0x8b, 0xe1, 0x86, 0xa0, 0x1e, 0x94, 0x59, 0x86, 0x8e, 0x0b, 0x4c, | ||
| 1283 | 0xb8, 0x07, 0xf9, 0xcc, 0x12, 0x78, 0x23, 0x06, 0x84, 0x11, 0x88, 0xc6, | ||
| 1284 | 0x30, 0x62, 0x50, 0x18, 0x01, 0x69, 0x04, 0xfa, 0x60, 0x01, 0x3f, 0xc8, | ||
| 1285 | 0xc7, 0x02, 0x7f, 0x80, 0xcf, 0x2c, 0x81, 0x37, 0x50, 0x01, 0x28, 0x9c, | ||
| 1286 | 0xd0, 0xcd, 0x31, 0x24, 0x01, 0x5f, 0x8c, 0x18, 0x18, 0x46, 0xa0, 0x1a, | ||
| 1287 | 0x41, 0x4c, 0xbc, 0xc4, 0x20, 0x43, 0x30, 0x13, 0x64, 0x31, 0x4b, 0xf0, | ||
| 1288 | 0x0d, 0x54, 0x04, 0x7e, 0x40, 0x09, 0xde, 0x20, 0x43, 0x80, 0x13, 0x66, | ||
| 1289 | 0x31, 0x4b, 0xd0, 0x06, 0xb3, 0x0c, 0x61, 0xd0, 0x06, 0xfc, 0x30, 0xc8, | ||
| 1290 | 0xd0, 0x0b, 0x39, 0x51, 0x16, 0x23, 0x06, 0x85, 0x11, 0xb0, 0x46, 0xd0, | ||
| 1291 | 0x12, 0x73, 0x0c, 0x36, 0x11, 0x98, 0xc6, 0x88, 0x41, 0x61, 0x04, 0xae, | ||
| 1292 | 0x31, 0xb8, 0xc4, 0x1c, 0x83, 0x10, 0x98, 0xc6, 0x88, 0x41, 0x61, 0x04, | ||
| 1293 | 0xb0, 0x51, 0xbc, 0xc4, 0x1c, 0x83, 0x10, 0x9c, 0xc6, 0x20, 0x43, 0xd0, | ||
| 1294 | 0x13, 0x6e, 0x31, 0xc8, 0x10, 0x94, 0x03, 0x5c, 0x8c, 0x37, 0xd0, 0xc5, | ||
| 1295 | 0x5f, 0xb4, 0x06, 0x05, 0x63, 0xbc, 0xc1, 0x2e, 0x42, 0x23, 0x35, 0x28, | ||
| 1296 | 0x18, 0x73, 0x0c, 0x63, 0x11, 0xc4, 0xc6, 0x20, 0x43, 0x40, 0x16, 0x74, | ||
| 1297 | 0x61, 0x41, 0x22, 0x9f, 0x41, 0x86, 0xc0, 0x2c, 0xee, 0x62, 0xb8, 0xe1, | ||
| 1298 | 0x88, 0x09, 0x67, 0x96, 0x81, 0x0d, 0xc4, 0x20, 0x18, 0x43, 0x18, 0x6c, | ||
| 1299 | 0x63, 0xb8, 0x21, 0xa0, 0x09, 0x65, 0x96, 0x81, 0x0c, 0xc6, 0x20, 0x30, | ||
| 1300 | 0xc1, 0x26, 0xe4, 0x33, 0x4b, 0x50, 0x06, 0x23, 0x06, 0x84, 0x11, 0x84, | ||
| 1301 | 0xc7, 0x30, 0x62, 0x50, 0x18, 0xc1, 0x78, 0x04, 0x39, 0x61, 0xc1, 0x4e, | ||
| 1302 | 0xc8, 0xc7, 0x82, 0x9e, 0x80, 0xcf, 0x2c, 0x41, 0x19, 0x0c, 0x54, 0x00, | ||
| 1303 | 0xca, 0x18, 0x08, 0x64, 0x30, 0xc7, 0xe0, 0x16, 0x81, 0x6f, 0x8c, 0x21, | ||
| 1304 | 0x30, 0xbd, 0x31, 0xdc, 0x10, 0xf4, 0x84, 0x32, 0xcb, 0x70, 0x06, 0x66, | ||
| 1305 | 0x10, 0x98, 0xf0, 0x13, 0xf2, 0x99, 0x25, 0x40, 0x83, 0x11, 0x03, 0xc2, | ||
| 1306 | 0x08, 0xd4, 0x63, 0x18, 0x31, 0x28, 0x8c, 0x80, 0x3d, 0x02, 0xb1, 0xb0, | ||
| 1307 | 0x80, 0x2c, 0xe4, 0x63, 0x81, 0x59, 0xc0, 0x67, 0x96, 0x00, 0x0d, 0x06, | ||
| 1308 | 0x2a, 0x00, 0xc5, 0x0c, 0x84, 0x33, 0x98, 0x63, 0x48, 0x82, 0xf2, 0x18, | ||
| 1309 | 0x43, 0xa8, 0xca, 0x63, 0xb8, 0x21, 0x30, 0x0b, 0x65, 0x96, 0x41, 0x0d, | ||
| 1310 | 0xd2, 0x20, 0x30, 0x01, 0x2d, 0xe4, 0x33, 0x4b, 0xb0, 0x06, 0x23, 0x06, | ||
| 1311 | 0x84, 0x11, 0xcc, 0xc7, 0x30, 0x62, 0x50, 0x18, 0x41, 0x7d, 0x04, 0x6b, | ||
| 1312 | 0x61, 0x41, 0x5b, 0xc8, 0xc7, 0x82, 0xb7, 0x80, 0xcf, 0x2c, 0xc1, 0x1a, | ||
| 1313 | 0x0c, 0x54, 0x00, 0x4a, 0x1a, 0x08, 0x6a, 0x30, 0xc7, 0x90, 0x04, 0xed, | ||
| 1314 | 0x31, 0x62, 0x60, 0x18, 0xc1, 0x7e, 0x04, 0xa2, 0x01, 0x1a, 0x83, 0x0c, | ||
| 1315 | 0x01, 0x69, 0xd4, 0xc6, 0x2c, 0x01, 0x1b, 0x0c, 0x54, 0x04, 0x7e, 0x10, | ||
| 1316 | 0x06, 0xc2, 0x1a, 0x0c, 0x32, 0x04, 0xa9, 0x71, 0x1b, 0xb3, 0x04, 0x6d, | ||
| 1317 | 0x30, 0xd0, 0x12, 0xf0, 0x88, 0xc1, 0x23, 0x12, 0x8f, 0x7c, 0xb2, 0xc0, | ||
| 1318 | 0x06, 0x3c, 0x02, 0x06, 0x03, 0x2d, 0x01, 0x8a, 0x18, 0x7a, 0x21, 0x99, | ||
| 1319 | 0xc3, 0x47, 0xb0, 0x81, 0xcc, 0x80, 0xc1, 0x20, 0x43, 0x20, 0xec, 0x86, | ||
| 1320 | 0x05, 0xe1, 0x21, 0x9f, 0x0c, 0xc2, 0x81, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1321 | 0x00, 0xd7, 0xd2, 0x07, 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, | ||
| 1322 | 0x50, 0x13, 0xe7, 0x2c, 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, | ||
| 1323 | 0x9b, 0x6d, 0x29, 0x38, 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, | ||
| 1324 | 0x00, 0x03, 0x11, 0x71, 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, | ||
| 1325 | 0x21, 0x13, 0x00, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1326 | 0x00, 0x5b, 0x06, 0xe0, 0x40, 0x85, 0x2d, 0x83, 0x10, 0xc0, 0xc2, 0x96, | ||
| 1327 | 0xe1, 0x08, 0x62, 0x61, 0xcb, 0xa0, 0x05, 0xb2, 0xb0, 0x65, 0xf8, 0x82, | ||
| 1328 | 0x59, 0xd8, 0x32, 0x84, 0x41, 0x40, 0x0b, 0x5b, 0x06, 0x35, 0x08, 0x6a, | ||
| 1329 | 0x61, 0xcb, 0xf0, 0x06, 0x81, 0x2d, 0x6c, 0x19, 0xec, 0x20, 0xb8, 0x85, | ||
| 1330 | 0x2d, 0x03, 0x1e, 0x04, 0xb6, 0xb0, 0x65, 0x60, 0x87, 0xe0, 0x16, 0xb6, | ||
| 1331 | 0x0c, 0xee, 0x10, 0xd8, 0xc2, 0x96, 0x41, 0x2d, 0x82, 0x5b, 0xd8, 0x32, | ||
| 1332 | 0xb0, 0x45, 0x60, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1333 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 1334 | 0x00, 0x24, 0x00, 0x00, 0x00, 0x64, 0xce, 0x41, 0x2c, 0x8d, 0x93, 0x06, | ||
| 1335 | 0x54, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xdb, 0x0c, 0x00, 0x05, | ||
| 1336 | 0x33, 0x00, 0xb4, 0xcc, 0x00, 0x8c, 0x35, 0xb0, 0xec, 0x19, 0xca, 0x1f, | ||
| 1337 | 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, 0xde, 0x58, 0x83, 0x5e, | ||
| 1338 | 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, 0xdb, 0xa7, 0xf4, 0xe8, | ||
| 1339 | 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, 0xc2, 0xe8, 0xee, 0xdd, | ||
| 1340 | 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, | ||
| 1341 | 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, | ||
| 1342 | 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, | ||
| 1343 | 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, | ||
| 1344 | 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, 0x33, 0x00, 0x04, 0x8c, | ||
| 1345 | 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, | ||
| 1346 | 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, 0x02, 0x0d, 0x37, 0x50, | ||
| 1347 | 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, 0x43, 0xb5, 0xc1, 0x20, | ||
| 1348 | 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, 0x08, 0xa0, 0x6a, 0x96, | ||
| 1349 | 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, 0x48, 0x82, 0xe1, 0x86, | ||
| 1350 | 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, 0x28, 0x8c, 0x40, 0x0f, | ||
| 1351 | 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xe8, 0x60, 0xc4, 0xa0, 0x30, 0x02, 0x3e, | ||
| 1352 | 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xa0, 0x83, 0x11, 0x83, 0xc2, 0x08, 0xfc, | ||
| 1353 | 0x20, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xa8, 0x83, 0x59, 0x82, 0x62, 0xa0, | ||
| 1354 | 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xf4, 0x60, 0x0c, 0x41, 0xc8, | ||
| 1355 | 0x83, 0x31, 0x84, 0x21, 0x0f, 0x46, 0x0c, 0x0a, 0x23, 0x10, 0x05, 0x21, | ||
| 1356 | 0x18, 0x31, 0x28, 0x8c, 0x60, 0x14, 0x88, 0x60, 0xb8, 0x21, 0xb8, 0x84, | ||
| 1357 | 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, 0x0c, 0x6c, 0x40, 0x03, | ||
| 1358 | 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, 0x8f, 0x05, 0x1a, 0x7c, | ||
| 1359 | 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, 0x29, 0x0c, 0x32, 0x04, | ||
| 1360 | 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, 0x08, 0xd2, 0xc0, 0x0d, | ||
| 1361 | 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, 0xa0, 0x98, 0x65, 0x40, | ||
| 1362 | 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, 0x31, 0x28, 0x8c, 0x60, | ||
| 1363 | 0x16, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0xa0, 0x15, 0x46, 0x0c, 0x0a, | ||
| 1364 | 0x23, 0xa8, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, 0xa0, 0x15, 0x46, 0x0c, | ||
| 1365 | 0x0a, 0x23, 0xb8, 0x85, 0x42, 0x0d, 0xe6, 0x18, 0x84, 0xc0, 0x15, 0x66, | ||
| 1366 | 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, 0x10, 0x04, 0x04, 0x3a, | ||
| 1367 | 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1368 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1369 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 1370 | 0x00, 0x0c, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 1371 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 1372 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 1373 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 1374 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 1375 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 1376 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 1377 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, | ||
| 1378 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 1379 | 0x00, 0xea, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 1380 | 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, | ||
| 1381 | 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, | ||
| 1382 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 1383 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, | ||
| 1384 | 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, | ||
| 1385 | 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, | ||
| 1386 | 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, | ||
| 1387 | 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, | ||
| 1388 | 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, | ||
| 1389 | 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, | ||
| 1390 | 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, | ||
| 1391 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 1392 | 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, | ||
| 1393 | 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, | ||
| 1394 | 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 1395 | 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 1396 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, | ||
| 1397 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 1398 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 1399 | 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, | ||
| 1400 | 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, | ||
| 1401 | 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, | ||
| 1402 | 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, | ||
| 1403 | 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, | ||
| 1404 | 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, | ||
| 1405 | 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, | ||
| 1406 | 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 1407 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, | ||
| 1408 | 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, | ||
| 1409 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, | ||
| 1410 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, | ||
| 1411 | 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 1412 | 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, | ||
| 1413 | 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x83, 0x21, 0x10, 0xc0, | ||
| 1414 | 0x02, 0x54, 0x1b, 0x8c, 0xa1, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x10, 0x06, | ||
| 1415 | 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0x40, 0x80, 0x05, 0xa8, 0x36, 0x18, 0xc6, | ||
| 1416 | 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x50, 0x1b, 0x7c, 0xe4, 0xf8, | ||
| 1417 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, | ||
| 1418 | 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, | ||
| 1419 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 1420 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, | ||
| 1421 | 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, | ||
| 1422 | 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, | ||
| 1423 | 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x3c, 0xb0, 0x03, 0x60, 0x70, | ||
| 1424 | 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, | ||
| 1425 | 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, | ||
| 1426 | 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, | ||
| 1427 | 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, | ||
| 1428 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 1429 | 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, | ||
| 1430 | 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, | ||
| 1431 | 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 1432 | 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 1433 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, | ||
| 1434 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 1435 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 1436 | 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, | ||
| 1437 | 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, | ||
| 1438 | 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, | ||
| 1439 | 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, | ||
| 1440 | 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, | ||
| 1441 | 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, | ||
| 1442 | 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, | ||
| 1443 | 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 1444 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, | ||
| 1445 | 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, | ||
| 1446 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, | ||
| 1447 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, | ||
| 1448 | 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 1449 | 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, | ||
| 1450 | 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x03, 0x82, 0xfc, 0xff, | ||
| 1451 | 0xff, 0xff, 0xff, 0x00, 0x30, 0x80, 0x04, 0x54, 0x1b, 0x8c, 0x24, 0x00, | ||
| 1452 | 0x16, 0xa0, 0xda, 0x60, 0x28, 0x02, 0xb0, 0x00, 0xd5, 0x06, 0x64, 0xf9, | ||
| 1453 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x36, 0x18, 0xcc, | ||
| 1454 | 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x50, 0x1b, 0xa6, 0xe6, 0xff, | ||
| 1455 | 0xff, 0xff, 0xff, 0x07, 0x40, 0x01, 0xa4, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 1456 | 0xc4, 0xa1, 0x1e, 0xd2, 0x81, 0x1d, 0xe8, 0x21, 0x1d, 0xdc, 0x61, 0x1e, | ||
| 1457 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x07, 0x00, 0x00, | ||
| 1458 | 0x00, 0x13, 0x8a, 0x40, 0x18, 0x88, 0x62, 0x42, 0x60, 0x4c, 0x08, 0x8e, | ||
| 1459 | 0x09, 0x03, 0x92, 0x28, 0x13, 0x86, 0x25, 0x51, 0x26, 0x04, 0xcc, 0x84, | ||
| 1460 | 0xa0, 0x01, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x4d, 0x00, 0x00, | ||
| 1461 | 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, | ||
| 1462 | 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, | ||
| 1463 | 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xc8, 0xc1, 0x0c, 0xc0, 0x30, 0x02, | ||
| 1464 | 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, | ||
| 1465 | 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, | ||
| 1466 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, 0x41, 0x18, 0x46, 0x18, | ||
| 1467 | 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, | ||
| 1468 | 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, | ||
| 1469 | 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, | ||
| 1470 | 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, 0xec, 0xbe, 0x1d, 0x21, | ||
| 1471 | 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, 0x84, 0xa3, 0xa4, 0x29, | ||
| 1472 | 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0xf8, 0xed, 0xe1, | ||
| 1473 | 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0x38, 0x4d, 0x9a, 0x22, 0x4a, | ||
| 1474 | 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, 0xdf, 0x1e, 0x7e, 0x20, | ||
| 1475 | 0x8a, 0x00, 0xec, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x26, 0xb8, 0x48, | ||
| 1476 | 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, 0x7f, | ||
| 1477 | 0x1a, 0x23, 0x00, 0x06, 0x11, 0x1c, 0xa1, 0x24, 0x41, 0x10, 0x08, 0x44, | ||
| 1478 | 0xb2, 0x34, 0x0f, 0x41, 0x85, 0x28, 0x8a, 0xa2, 0x20, 0xa9, 0x0c, 0x00, | ||
| 1479 | 0x00, 0x10, 0x55, 0x04, 0x00, 0x20, 0xab, 0x0c, 0x40, 0x51, 0x10, 0x56, | ||
| 1480 | 0x8c, 0xa2, 0x00, 0x00, 0x00, 0x20, 0xad, 0x0c, 0x45, 0x51, 0x10, 0x57, | ||
| 1481 | 0x84, 0xa2, 0x20, 0x6f, 0x8e, 0x00, 0x0c, 0xe6, 0x08, 0x82, 0x61, 0x04, | ||
| 1482 | 0x01, 0x0c, 0x4a, 0x12, 0x34, 0x8f, 0x00, 0x86, 0x62, 0x08, 0xd0, 0x58, | ||
| 1483 | 0x90, 0x60, 0x79, 0x84, 0x50, 0x0c, 0x01, 0x2a, 0x07, 0x02, 0x52, 0x00, | ||
| 1484 | 0x1c, 0x46, 0x18, 0xc0, 0x60, 0x10, 0x21, 0x10, 0xe6, 0x08, 0x40, 0x61, | ||
| 1485 | 0x10, 0xe1, 0x10, 0x06, 0x11, 0x0a, 0x61, 0x10, 0x01, 0x10, 0xa6, 0x00, | ||
| 1486 | 0x46, 0x00, 0x86, 0x11, 0x08, 0x30, 0x00, 0x00, 0x00, 0x13, 0xb2, 0x70, | ||
| 1487 | 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, | ||
| 1488 | 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, | ||
| 1489 | 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, | ||
| 1490 | 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 1491 | 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, | ||
| 1492 | 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, | ||
| 1493 | 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, | ||
| 1494 | 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, | ||
| 1495 | 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 1496 | 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, | ||
| 1497 | 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, | ||
| 1498 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, | ||
| 1499 | 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, | ||
| 1500 | 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, | ||
| 1501 | 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, | ||
| 1502 | 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, | ||
| 1503 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, | ||
| 1504 | 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, | ||
| 1505 | 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 1506 | 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, | ||
| 1507 | 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, | ||
| 1508 | 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, | ||
| 1509 | 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, | ||
| 1510 | 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, | ||
| 1511 | 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, | ||
| 1512 | 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, | ||
| 1513 | 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, | ||
| 1514 | 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, | ||
| 1515 | 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, | ||
| 1516 | 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, | ||
| 1517 | 0x72, 0x30, 0x84, 0x89, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1518 | 0x18, 0xc2, 0x4c, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
| 1519 | 0x61, 0x2a, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x30, | ||
| 1520 | 0x17, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x98, 0x0c, | ||
| 1521 | 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0xcc, 0x86, 0x00, | ||
| 1522 | 0xc3, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x10, 0xa6, 0x02, 0x02, 0x40, | ||
| 1523 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0xd3, 0x01, 0x01, 0x20, 0x00, | ||
| 1524 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0xf9, 0x80, 0x00, 0x10, 0x00, 0x00, | ||
| 1525 | 0x00, 0x00, 0x00, 0x18, 0xc2, 0x74, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 1526 | 0x00, 0x00, 0x0c, 0x61, 0xc8, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 1527 | 0x00, 0x80, 0x21, 0x8c, 0x19, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, | ||
| 1528 | 0x00, 0x90, 0x05, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 1529 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 1530 | 0x02, 0x47, 0x00, 0x4a, 0xa0, 0x10, 0x0a, 0xa4, 0x08, 0x0a, 0xa2, 0x80, | ||
| 1531 | 0x0a, 0x30, 0xa0, 0x0c, 0x0a, 0xa3, 0x50, 0x0a, 0xa6, 0x70, 0x0a, 0xac, | ||
| 1532 | 0x14, 0x8a, 0xa1, 0x1c, 0x68, 0x2d, 0x9c, 0x11, 0x80, 0x42, 0x28, 0x88, | ||
| 1533 | 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x42, 0xc7, 0x12, 0x1e, 0x01, 0x00, | ||
| 1534 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 1535 | 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, | ||
| 1536 | 0xb7, 0x21, 0x06, 0x18, 0x40, 0x67, 0x00, 0xa0, 0x41, 0x19, 0x50, 0xb9, | ||
| 1537 | 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, 0x80, | ||
| 1538 | 0x41, 0x73, 0x06, 0x02, 0x18, 0x38, 0x8c, 0x83, 0x20, 0x38, 0x38, 0xb6, | ||
| 1539 | 0x32, 0x90, 0xb6, 0x32, 0xba, 0x30, 0x36, 0x10, 0xbb, 0x32, 0xb9, 0xb9, | ||
| 1540 | 0xb4, 0x37, 0x37, 0x90, 0x19, 0x19, 0x18, 0x99, 0x19, 0x17, 0x1a, 0x18, | ||
| 1541 | 0x1a, 0x10, 0x94, 0xb6, 0x32, 0xba, 0x30, 0x36, 0xb3, 0xb2, 0x96, 0x19, | ||
| 1542 | 0x19, 0x18, 0x99, 0x19, 0x17, 0x1a, 0x18, 0x9a, 0x94, 0x21, 0xc2, 0x19, | ||
| 1543 | 0x10, 0x43, 0x0c, 0x30, 0x68, 0xc0, 0x20, 0x02, 0x03, 0x86, 0x45, 0x53, | ||
| 1544 | 0x19, 0x5d, 0x18, 0xdb, 0x10, 0xe4, 0x0c, 0x0e, 0x30, 0x68, 0xc0, 0xa0, | ||
| 1545 | 0x01, 0x03, 0x86, 0x5b, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, | ||
| 1546 | 0x1a, 0x5b, 0x99, 0x0b, 0x59, 0x99, 0xdb, 0x9b, 0x5c, 0xdb, 0xdc, 0x17, | ||
| 1547 | 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0xe1, 0x0c, 0x12, 0x72, | ||
| 1548 | 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, | ||
| 1549 | 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, | ||
| 1550 | 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x33, 0x58, 0x58, 0x06, 0x61, 0x69, | ||
| 1551 | 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, | ||
| 1552 | 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, | ||
| 1553 | 0x74, 0x63, 0x68, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, | ||
| 1554 | 0x84, 0x33, 0x68, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0xc8, 0x95, 0xb9, 0x91, | ||
| 1555 | 0x95, 0xc9, 0x7d, 0xd1, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x31, 0x0a, 0x4b, | ||
| 1556 | 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x72, | ||
| 1557 | 0x0b, 0x6b, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x33, 0x04, | ||
| 1558 | 0x39, 0x83, 0x07, 0x0c, 0x98, 0x33, 0x80, 0xce, 0x20, 0x1a, 0x22, 0x9c, | ||
| 1559 | 0x81, 0x44, 0x26, 0x2c, 0x4d, 0xce, 0x05, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, | ||
| 1560 | 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x58, 0x99, 0x1b, 0x5d, | ||
| 1561 | 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb7, 0xb7, 0x2f, 0xb8, 0x32, | ||
| 1562 | 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x32, 0x61, 0x69, | ||
| 1563 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, | ||
| 1564 | 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x40, 0x60, 0xc0, 0x9c, | ||
| 1565 | 0x01, 0x75, 0x06, 0xd5, 0x19, 0x58, 0x67, 0x00, 0x9d, 0x41, 0x74, 0x06, | ||
| 1566 | 0xd7, 0x19, 0x60, 0x94, 0xc2, 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, | ||
| 1567 | 0xda, 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x68, 0x9d, | ||
| 1568 | 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xd4, 0x8c, 0xbd, | ||
| 1569 | 0xb1, 0xbd, 0xc9, 0x11, 0xd9, 0xd1, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, | ||
| 1570 | 0x93, 0x73, 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, | ||
| 1571 | 0x2b, 0x63, 0x31, 0xf6, 0xc6, 0xf6, 0x26, 0x37, 0x44, 0x02, 0x83, 0xe6, | ||
| 1572 | 0x0c, 0xb4, 0x33, 0xd8, 0xce, 0xa0, 0x3a, 0x03, 0xee, 0x0c, 0xa0, 0x33, | ||
| 1573 | 0x88, 0xce, 0xe0, 0x3a, 0x83, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, | ||
| 1574 | 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, | ||
| 1575 | 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x0d, 0x33, 0xb6, 0xb7, | ||
| 1576 | 0x30, 0x3a, 0x19, 0x22, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, | ||
| 1577 | 0x43, 0x24, 0x30, 0x80, 0xce, 0x40, 0x3b, 0x83, 0xef, 0x0c, 0xaa, 0x33, | ||
| 1578 | 0xe0, 0xce, 0x00, 0x3a, 0x03, 0x30, 0x38, 0x83, 0xeb, 0x0c, 0xc2, 0x80, | ||
| 1579 | 0x4a, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0x1c, 0x9f, | ||
| 1580 | 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a, 0x33, 0xb3, 0x32, 0xb9, 0xaf, 0xb9, | ||
| 1581 | 0x34, 0xbd, 0x32, 0x4a, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, | ||
| 1582 | 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x44, 0xc2, | ||
| 1583 | 0xd2, 0xe4, 0x5c, 0xe4, 0xca, 0xc2, 0xc8, 0x48, 0x85, 0xa5, 0xc9, 0xb9, | ||
| 1584 | 0xcc, 0xd1, 0xc9, 0xd5, 0x8d, 0xd1, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, | ||
| 1585 | 0xa5, 0xb9, 0x99, 0xbd, 0xb1, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x23, 0x33, | ||
| 1586 | 0x37, 0x26, 0x75, 0x24, 0xf4, 0xf5, 0x56, 0x47, 0x07, 0x57, 0x47, 0x47, | ||
| 1587 | 0x86, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0xec, 0x8b, 0x2e, 0x0f, 0xae, | ||
| 1588 | 0x8c, 0x4a, 0x9a, 0x1b, 0x5c, 0x1d, 0xdd, 0x17, 0x5d, 0x1e, 0x5c, 0x19, | ||
| 1589 | 0x97, 0xb1, 0x37, 0xb6, 0x37, 0xb9, 0xaf, 0xb9, 0xb1, 0x30, 0xb6, 0x32, | ||
| 1590 | 0x3a, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, | ||
| 1591 | 0x68, 0x6f, 0x64, 0x7c, 0xe8, 0xde, 0xdc, 0xca, 0xda, 0xc2, 0xe0, 0xbe, | ||
| 1592 | 0xcc, 0xc2, 0xc6, 0xe8, 0xde, 0xe4, 0x62, 0xf8, 0xd0, 0xbd, 0xb9, 0x95, | ||
| 1593 | 0xb5, 0x85, 0xc1, 0x7d, 0x99, 0x85, 0x8d, 0xd1, 0xbd, 0xc9, 0xc9, 0xf0, | ||
| 1594 | 0x99, 0x23, 0x93, 0xfb, 0xba, 0x43, 0x4b, 0xa3, 0x2b, 0xfb, 0x82, 0x7b, | ||
| 1595 | 0x4b, 0x73, 0xa3, 0x1b, 0x02, 0x0b, 0x60, 0xc0, 0x80, 0x81, 0x03, 0x06, | ||
| 1596 | 0xcc, 0x19, 0xa0, 0xc1, 0x19, 0xa4, 0x01, 0x18, 0x38, 0x60, 0xe0, 0x80, | ||
| 1597 | 0x01, 0x73, 0x06, 0x68, 0x70, 0x06, 0x6a, 0x00, 0x06, 0x11, 0x18, 0x38, | ||
| 1598 | 0x60, 0xc0, 0x9c, 0x01, 0x1a, 0x9c, 0xc1, 0x1a, 0x80, 0x41, 0x05, 0x06, | ||
| 1599 | 0x0e, 0x18, 0x30, 0x67, 0x80, 0x06, 0x67, 0xc0, 0x06, 0x60, 0xf0, 0x80, | ||
| 1600 | 0x81, 0x03, 0x06, 0xcc, 0x19, 0xa0, 0xc1, 0x19, 0xb4, 0x01, 0x18, 0x58, | ||
| 1601 | 0x60, 0xe0, 0x80, 0x01, 0x73, 0x06, 0x68, 0x70, 0x06, 0x6e, 0x00, 0x06, | ||
| 1602 | 0x17, 0x18, 0x38, 0x60, 0xc0, 0x9c, 0x01, 0x1a, 0x9c, 0xc1, 0x1b, 0x80, | ||
| 1603 | 0x01, 0x06, 0x06, 0x0e, 0x18, 0x30, 0x67, 0x80, 0x06, 0x67, 0x00, 0x07, | ||
| 1604 | 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, | ||
| 1605 | 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, | ||
| 1606 | 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, | ||
| 1607 | 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1, 0x99, 0x42, 0x0b, 0x23, 0x2b, | ||
| 1608 | 0x93, 0x1b, 0x7a, 0x73, 0x9b, 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0x63, 0x30, | ||
| 1609 | 0x36, 0x84, 0x0c, 0xc0, 0x80, 0x3a, 0x83, 0x31, 0x38, 0x03, 0x32, 0x00, | ||
| 1610 | 0x03, 0xe9, 0x0c, 0xca, 0x00, 0x0c, 0x18, 0x30, 0x68, 0xce, 0xc0, 0x0c, | ||
| 1611 | 0xce, 0xe0, 0x0c, 0xce, 0x20, 0x0e, 0xce, 0x40, 0x0e, 0xc0, 0x40, 0x3a, | ||
| 1612 | 0x83, 0x39, 0x00, 0x03, 0xe7, 0x0c, 0xa0, 0x33, 0xa0, 0x83, 0x33, 0xb8, | ||
| 1613 | 0xce, 0xa0, 0x0e, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0xd0, 0x78, | ||
| 1614 | 0x33, 0x33, 0x9b, 0x2b, 0xa3, 0x23, 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x37, | ||
| 1615 | 0x83, 0x37, 0x43, 0xa3, 0x2d, 0x8c, 0x4e, 0x2e, 0x0d, 0x6f, 0x08, 0x05, | ||
| 1616 | 0x06, 0x0c, 0x18, 0x3c, 0x60, 0xc0, 0x9c, 0xc1, 0x1d, 0x9c, 0x01, 0x1e, | ||
| 1617 | 0x80, 0xc1, 0x03, 0x06, 0x19, 0x18, 0x30, 0x67, 0x90, 0x07, 0x67, 0xa0, | ||
| 1618 | 0x07, 0x4c, 0xb2, 0xaa, 0xac, 0x88, 0xca, 0xc6, 0xde, 0xc8, 0xca, 0x68, | ||
| 1619 | 0x90, 0x95, 0x8d, 0xbd, 0x91, 0x95, 0x0d, 0x21, 0x03, 0x30, 0x70, 0xce, | ||
| 1620 | 0x60, 0x0c, 0xce, 0x80, 0x0c, 0xc0, 0x60, 0x3a, 0x83, 0x32, 0x00, 0x83, | ||
| 1621 | 0x06, 0x0c, 0x9a, 0x33, 0x30, 0x83, 0x33, 0x38, 0x83, 0x33, 0xd8, 0x83, | ||
| 1622 | 0x33, 0x90, 0x03, 0x30, 0x98, 0xce, 0x60, 0x0e, 0xc0, 0xe0, 0x39, 0x03, | ||
| 1623 | 0xe8, 0x0c, 0xf8, 0xe0, 0x0c, 0xae, 0x33, 0xe8, 0x03, 0x2e, 0x61, 0x69, | ||
| 1624 | 0x72, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x54, 0xc2, 0xd2, | ||
| 1625 | 0xe4, 0x5c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0x88, 0xd1, 0x95, 0xe1, | ||
| 1626 | 0xd1, 0xd5, 0xc9, 0x95, 0xc9, 0x90, 0xf1, 0x98, 0xb1, 0xbd, 0x85, 0xd1, | ||
| 1627 | 0xb1, 0x80, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xf9, 0x90, 0xa0, 0x2b, | ||
| 1628 | 0xc3, 0xcb, 0x1a, 0x42, 0x81, 0x81, 0x76, 0x06, 0x7f, 0x70, 0x06, 0x65, | ||
| 1629 | 0x00, 0x06, 0x0c, 0x18, 0x34, 0x67, 0x00, 0x0a, 0x67, 0x00, 0x9d, 0x41, | ||
| 1630 | 0x28, 0x9c, 0xc1, 0x75, 0x06, 0xa2, 0x40, 0x8f, 0xae, 0x0c, 0x8f, 0xae, | ||
| 1631 | 0x4e, 0xae, 0x4c, 0x86, 0xec, 0x2b, 0x4c, 0x4e, 0x2e, 0x2c, 0x8f, 0xc7, | ||
| 1632 | 0x8c, 0xed, 0x2d, 0x8c, 0x8e, 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, | ||
| 1633 | 0xcc, 0x87, 0x05, 0x5d, 0x19, 0x5e, 0x95, 0xd5, 0x10, 0x0a, 0x0c, 0xb6, | ||
| 1634 | 0x33, 0xf8, 0x83, 0x33, 0x28, 0x03, 0x30, 0x68, 0xc0, 0xa0, 0x39, 0x03, | ||
| 1635 | 0x50, 0x38, 0x03, 0xe8, 0x0c, 0x48, 0xe1, 0x0c, 0xae, 0x33, 0x28, 0x05, | ||
| 1636 | 0x2e, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, | ||
| 1637 | 0x3c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, | ||
| 1638 | 0xc0, 0x80, 0x3b, 0x83, 0x53, 0x38, 0x83, 0x32, 0x00, 0x03, 0x06, 0x0c, | ||
| 1639 | 0x9a, 0x33, 0x80, 0xce, 0x00, 0x15, 0xce, 0xe0, 0x3a, 0x83, 0x54, 0x18, | ||
| 1640 | 0x02, 0x9d, 0x41, 0x76, 0x06, 0xde, 0x19, 0x88, 0xc1, 0x19, 0xd8, 0xc1, | ||
| 1641 | 0x19, 0xf8, 0xc1, 0x19, 0x8c, 0xc2, 0x19, 0x98, 0xc2, 0x19, 0xa8, 0xc2, | ||
| 1642 | 0x10, 0x23, 0x02, 0xce, 0x60, 0x3a, 0x83, 0x55, 0xa0, 0x18, 0x84, 0xa5, | ||
| 1643 | 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, | ||
| 1644 | 0x95, 0xcd, 0xa1, 0x4c, 0x11, 0x31, 0x7d, 0x65, 0x55, 0x59, 0x7d, 0x99, | ||
| 1645 | 0xc9, 0x85, 0x9d, 0xb5, 0x95, 0xb9, 0xd1, 0xa5, 0x0c, 0x21, 0xce, 0xc0, | ||
| 1646 | 0x15, 0xce, 0xa0, 0x15, 0x88, 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, | ||
| 1647 | 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0xd0, 0x95, 0xe1, | ||
| 1648 | 0xd1, 0xd5, 0xc9, 0x95, 0xcd, 0x0d, 0x31, 0xce, 0x00, 0x16, 0xce, 0xc0, | ||
| 1649 | 0x15, 0xce, 0xe0, 0x15, 0x88, 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, | ||
| 1650 | 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0xcc, 0x85, 0xb5, | ||
| 1651 | 0xc1, 0xb1, 0x95, 0xc9, 0xcd, 0x0d, 0x31, 0xce, 0x40, 0x16, 0xce, 0xc0, | ||
| 1652 | 0x15, 0xce, 0x20, 0x16, 0x86, 0x10, 0x67, 0x00, 0x0b, 0x67, 0x20, 0x0b, | ||
| 1653 | 0xac, 0xbe, 0xb4, 0xa8, 0xa6, 0x62, 0x6a, 0xa6, 0xd0, 0xc2, 0xc8, 0xca, | ||
| 1654 | 0xe4, 0x86, 0xde, 0xdc, 0xe6, 0xe8, 0xc2, 0xdc, 0xe8, 0xe6, 0xf8, 0xbc, | ||
| 1655 | 0xb5, 0xb9, 0xa5, 0xc1, 0xbd, 0xd1, 0x95, 0xb9, 0xd1, 0x81, 0x8c, 0xa1, | ||
| 1656 | 0x85, 0xc9, 0xf1, 0x99, 0x4a, 0x6b, 0x83, 0x63, 0x2b, 0x03, 0x19, 0x5a, | ||
| 1657 | 0x59, 0x01, 0xa1, 0x12, 0x0a, 0x0a, 0x1a, 0x22, 0x9c, 0x81, 0x2d, 0x0c, | ||
| 1658 | 0x31, 0xce, 0xa0, 0x16, 0xce, 0xe0, 0x16, 0xd6, 0xc0, 0x1b, 0x62, 0x9c, | ||
| 1659 | 0x01, 0x1a, 0x9c, 0x01, 0x2e, 0xac, 0x81, 0x37, 0x44, 0x0c, 0xce, 0x80, | ||
| 1660 | 0x16, 0xce, 0x20, 0x17, 0xd6, 0xc0, 0x3b, 0x83, 0x5c, 0x58, 0x83, 0xef, | ||
| 1661 | 0x0c, 0x72, 0x61, 0x0d, 0xc0, 0xe0, 0x0c, 0x72, 0x61, 0x0d, 0xc2, 0xe0, | ||
| 1662 | 0x0c, 0x72, 0x61, 0x0d, 0xc4, 0xe0, 0x0c, 0x72, 0x61, 0x0d, 0xc6, 0xe0, | ||
| 1663 | 0x0c, 0x72, 0x61, 0x0d, 0xc8, 0xe0, 0x0c, 0x72, 0x61, 0x0d, 0xba, 0x21, | ||
| 1664 | 0xc6, 0x19, 0xe8, 0xc2, 0x19, 0xe4, 0xc2, 0x1a, 0x80, 0xc1, 0x10, 0xe3, | ||
| 1665 | 0x0c, 0x74, 0xe1, 0x0c, 0x72, 0x61, 0x0d, 0xba, 0x21, 0xc6, 0x19, 0xe8, | ||
| 1666 | 0xc2, 0x19, 0xe4, 0xc2, 0x1a, 0x88, 0xc1, 0x10, 0xe3, 0x0c, 0x74, 0xe1, | ||
| 1667 | 0x0c, 0x72, 0x61, 0x0d, 0xc6, 0x60, 0x88, 0x71, 0x06, 0xba, 0x70, 0x06, | ||
| 1668 | 0xb9, 0xb0, 0x06, 0x64, 0x30, 0xc4, 0x38, 0x03, 0x5d, 0x38, 0x83, 0x5c, | ||
| 1669 | 0x58, 0x83, 0x6f, 0x88, 0x71, 0x06, 0xba, 0x70, 0x06, 0xb9, 0xb0, 0x06, | ||
| 1670 | 0x61, 0x30, 0xc4, 0x38, 0x03, 0x5d, 0x38, 0x83, 0x5c, 0x58, 0x03, 0x6f, | ||
| 1671 | 0x44, 0xc4, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xed, 0xf0, 0x0e, | ||
| 1672 | 0xe4, 0x50, 0x0f, 0xec, 0x50, 0x0e, 0x6e, 0x60, 0x0e, 0xec, 0x10, 0x0e, | ||
| 1673 | 0xe7, 0x30, 0x0f, 0x53, 0x84, 0x60, 0x18, 0xa1, 0xb0, 0x03, 0x3b, 0xd8, | ||
| 1674 | 0x43, 0x3b, 0xb8, 0x41, 0x3a, 0x90, 0x43, 0x39, 0xb8, 0x03, 0x3d, 0x4c, | ||
| 1675 | 0x09, 0x8a, 0x11, 0x4b, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x3d, 0x94, | ||
| 1676 | 0x83, 0x3c, 0xcc, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0x4c, 0x09, 0x8c, 0x11, | ||
| 1677 | 0x54, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x01, 0x3b, 0x84, 0x83, 0x3b, 0x9c, | ||
| 1678 | 0x43, 0x3d, 0x84, 0xc3, 0x39, 0x94, 0xc3, 0x2f, 0xd8, 0x43, 0x39, 0xc8, | ||
| 1679 | 0xc3, 0x3c, 0xa4, 0xc3, 0x3b, 0xb8, 0xc3, 0x94, 0x00, 0x19, 0x31, 0x85, | ||
| 1680 | 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x8c, 0xc3, 0x3b, 0xb4, 0x03, 0x3c, 0xa4, | ||
| 1681 | 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x03, 0x3c, 0xd0, 0x43, 0x3a, 0xbc, | ||
| 1682 | 0x83, 0x3b, 0xcc, 0xc3, 0x94, 0x41, 0x61, 0x9c, 0x11, 0x4c, 0x38, 0xa4, | ||
| 1683 | 0x83, 0x3c, 0xb8, 0x81, 0x39, 0xc8, 0x43, 0x38, 0x9c, 0x43, 0x3b, 0x94, | ||
| 1684 | 0x83, 0x3b, 0xd0, 0xc3, 0x94, 0x80, 0x15, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 1685 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 1686 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 1687 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 1688 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 1689 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 1690 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 1691 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 1692 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 1693 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 1694 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 1695 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 1696 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 1697 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 1698 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 1699 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 1700 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 1701 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 1702 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 1703 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 1704 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 1705 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 1706 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 1707 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 1708 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 1709 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 1710 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 1711 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 1712 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 1713 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 1714 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 1715 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 1716 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 1717 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 1718 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 1719 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 1720 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 1721 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 1722 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 1723 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 1724 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 1725 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 1726 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 1727 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 1728 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 1729 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 1730 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 1731 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 1732 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 1733 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 1734 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 1735 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 1736 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 1737 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 1738 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 1739 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 1740 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, | ||
| 1741 | 0x00, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, 0xb3, 0x60, 0xad, 0xd3, | ||
| 1742 | 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, 0x51, 0x14, 0x96, 0x30, | ||
| 1743 | 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, 0x03, 0x5c, 0x7e, 0x75, | ||
| 1744 | 0x17, 0xb7, 0x6d, 0x01, 0x14, 0x80, 0x44, 0x7e, 0x01, 0x48, 0xd3, 0x2f, | ||
| 1745 | 0x2c, 0x00, 0xf3, 0xf8, 0xd5, 0x5d, 0xdc, 0xb6, 0x09, 0x40, 0x00, 0x12, | ||
| 1746 | 0xf9, 0x05, 0x20, 0x4d, 0xff, 0xe3, 0x58, 0x7e, 0x71, 0xdb, 0x36, 0x10, | ||
| 1747 | 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, 0x10, 0x48, 0x7e, 0x71, | ||
| 1748 | 0xdb, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x8f, 0x63, | ||
| 1749 | 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x29, 0x84, 0x01, 0x80, 0x44, 0xbe, 0x04, | ||
| 1750 | 0x30, 0xcf, 0x42, 0xfc, 0x13, 0x71, 0x4d, 0x54, 0x44, 0xfc, 0xf6, 0xf0, | ||
| 1751 | 0x03, 0x51, 0x04, 0x60, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x04, 0x0d, 0x80, | ||
| 1752 | 0x44, 0xfe, 0xe0, 0x4c, 0x7e, 0x75, 0x17, 0xb7, 0x6d, 0x0b, 0x1b, 0x80, | ||
| 1753 | 0x44, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0xfc, 0x13, 0x71, 0x4d, 0x54, 0x44, | ||
| 1754 | 0xfc, 0xf6, 0xe0, 0x57, 0x78, 0x71, 0xdb, 0x86, 0x30, 0x01, 0x48, 0xe4, | ||
| 1755 | 0x17, 0x80, 0x34, 0xfd, 0x05, 0x10, 0x48, 0x7e, 0x75, 0x17, 0xb7, 0x6d, | ||
| 1756 | 0x00, 0x10, 0xdb, 0x95, 0xbf, 0xec, 0xbe, 0x7f, 0x11, 0x01, 0x06, 0x43, | ||
| 1757 | 0x34, 0x93, 0x19, 0x44, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0x7f, 0xc1, | ||
| 1758 | 0x00, 0x97, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1759 | 0x00, 0xcb, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, | ||
| 1760 | 0x00, 0x55, 0x00, 0x00, 0x00, 0x14, 0x8f, 0x45, 0x00, 0x81, 0x70, 0xcc, | ||
| 1761 | 0x41, 0x30, 0x0d, 0x84, 0x07, 0xb4, 0x16, 0x41, 0x09, 0x50, 0x3a, 0xc7, | ||
| 1762 | 0xc0, 0xe0, 0x01, 0x1e, 0x8c, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xe2, | ||
| 1763 | 0x08, 0x00, 0x85, 0x23, 0x00, 0x35, 0x40, 0xe0, 0x0c, 0x00, 0x01, 0x63, | ||
| 1764 | 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, 0xa0, 0xb3, 0xe6, 0x1c, 0x82, | ||
| 1765 | 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x09, 0x06, 0x63, 0x04, 0x20, 0x08, | ||
| 1766 | 0x82, 0x20, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, 0x30, 0x03, 0x30, 0x07, | ||
| 1767 | 0x21, 0x0b, 0xb2, 0x20, 0x0b, 0xb3, 0x30, 0x07, 0x31, 0x0b, 0xb9, 0x30, | ||
| 1768 | 0x0b, 0x7d, 0x40, 0xc5, 0x0c, 0xc0, 0x08, 0xc0, 0x0c, 0xc0, 0x58, 0x03, | ||
| 1769 | 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, 0xe2, 0x1f, 0x08, 0x82, 0x20, | ||
| 1770 | 0xfe, 0x8d, 0x35, 0xb0, 0xed, 0xfc, 0x93, 0x1e, 0xdb, 0xce, 0x3f, 0xe9, | ||
| 1771 | 0xb1, 0xed, 0xfc, 0x93, 0xde, 0x58, 0x03, 0x08, 0x82, 0x6c, 0xfd, 0x0b, | ||
| 1772 | 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, 0xd6, 0xbf, 0x30, 0xd6, | ||
| 1773 | 0x00, 0x82, 0xe0, 0x9a, 0x83, 0x01, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x20, | ||
| 1774 | 0x08, 0xae, 0x39, 0x18, 0x8c, 0x35, 0x80, 0x20, 0xdd, 0xe6, 0x60, 0x00, | ||
| 1775 | 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x63, 0x0d, | ||
| 1776 | 0xeb, 0x88, 0xc7, 0x2c, 0x18, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0xb0, 0x8e, | ||
| 1777 | 0x78, 0xcc, 0x82, 0xc1, 0x58, 0x03, 0x08, 0xc2, 0x78, 0x38, 0x06, 0x20, | ||
| 1778 | 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, 0x63, 0x30, 0xd6, 0x20, | ||
| 1779 | 0xe6, 0x62, 0xda, 0x7f, 0x60, 0xc9, 0xb3, 0xf1, 0x2f, 0x8c, 0xe9, 0xaa, | ||
| 1780 | 0xe6, 0xbe, 0x30, 0xd6, 0xf0, 0xcf, 0xa4, 0xff, 0xfb, 0x02, 0x5d, 0x83, | ||
| 1781 | 0x62, 0xfe, 0xb5, 0x70, 0x1c, 0x83, 0xbe, 0x30, 0xd6, 0x30, 0xf7, 0x6d, | ||
| 1782 | 0x9a, 0xfa, 0x42, 0xeb, 0x86, 0x3c, 0xef, 0x0b, 0x7c, 0xce, 0xfa, 0xf8, | ||
| 1783 | 0x47, 0xc0, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xc4, 0x3c, | ||
| 1784 | 0xd8, 0xe7, 0xde, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0xcd, 0x00, 0x8c, | ||
| 1785 | 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, | ||
| 1786 | 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, 0xf8, 0x37, 0x46, 0x50, 0xab, 0xb5, | ||
| 1787 | 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, 0xf6, 0x34, 0x18, 0x8c, 0x11, 0xf0, | ||
| 1788 | 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x4a, | ||
| 1789 | 0x11, 0xbc, 0xc2, 0x1b, 0xb4, 0x81, 0x1c, 0x8c, 0x41, 0x19, 0x90, 0x41, | ||
| 1790 | 0x30, 0x62, 0xb0, 0x14, 0x41, 0x2c, 0xbc, 0x81, 0x1b, 0xcc, 0xc1, 0x2b, | ||
| 1791 | 0x90, 0x81, 0x19, 0x94, 0x81, 0x30, 0x86, 0x10, 0xc0, 0xc2, 0x20, 0xc3, | ||
| 1792 | 0xe0, 0xad, 0xc1, 0x1c, 0x43, 0x20, 0xc4, 0xc2, 0x88, 0xc1, 0x52, 0x04, | ||
| 1793 | 0xb5, 0x30, 0x07, 0x72, 0x70, 0x07, 0xb2, 0x80, 0x06, 0x6a, 0x90, 0x06, | ||
| 1794 | 0xc6, 0x18, 0x42, 0x40, 0x0b, 0x73, 0x0c, 0x43, 0x10, 0x0b, 0x87, 0x07, | ||
| 1795 | 0xea, 0x52, 0x50, 0x06, 0x19, 0x02, 0x33, 0x80, 0x03, 0x23, 0x02, 0xf8, | ||
| 1796 | 0x8c, 0x37, 0xf0, 0x01, 0x2a, 0xe4, 0xc2, 0x05, 0xea, 0x52, 0x50, 0x06, | ||
| 1797 | 0x19, 0x82, 0x35, 0xa8, 0x83, 0x11, 0x83, 0xc2, 0x08, 0xcc, 0xa1, 0x08, | ||
| 1798 | 0xc6, 0x2b, 0x42, 0xa1, 0x15, 0x7c, 0xe1, 0x17, 0xf4, 0xe0, 0x02, 0x75, | ||
| 1799 | 0x29, 0x28, 0x83, 0x0c, 0x01, 0x1c, 0xe8, 0xc1, 0x88, 0x41, 0x61, 0x04, | ||
| 1800 | 0xeb, 0xa0, 0x04, 0xe3, 0x15, 0xa6, 0x20, 0x0b, 0xe3, 0x40, 0x0e, 0xa0, | ||
| 1801 | 0x70, 0x81, 0xba, 0x14, 0x94, 0x41, 0x86, 0xa0, 0x0e, 0xfe, 0x60, 0xc4, | ||
| 1802 | 0xa0, 0x30, 0x02, 0x78, 0x78, 0x82, 0x39, 0x86, 0x3a, 0x58, 0xd2, 0x61, | ||
| 1803 | 0x8e, 0x21, 0x38, 0xd2, 0x61, 0x8e, 0x21, 0x18, 0xce, 0x61, 0xbc, 0xe1, | ||
| 1804 | 0x15, 0x74, 0x01, 0x1d, 0x28, 0x18, 0xc3, 0x0d, 0xc1, 0x1f, 0x04, 0xb3, | ||
| 1805 | 0x0c, 0x81, 0x10, 0x0c, 0x32, 0x10, 0x7d, 0x70, 0x0a, 0xe3, 0x0d, 0xb3, | ||
| 1806 | 0xe0, 0x0b, 0xe0, 0x40, 0xc1, 0x18, 0x31, 0x20, 0x8c, 0xc0, 0x1e, 0x86, | ||
| 1807 | 0x11, 0x83, 0xc2, 0x08, 0xf0, 0x21, 0xc8, 0x03, 0x0b, 0xf2, 0x00, 0x3e, | ||
| 1808 | 0x23, 0x06, 0x85, 0x11, 0xe0, 0x43, 0xe0, 0x07, 0x36, 0xe8, 0x81, 0x7c, | ||
| 1809 | 0x4c, 0x0f, 0x82, 0xf8, 0xd8, 0x10, 0xd0, 0x67, 0xc4, 0x80, 0x30, 0x82, | ||
| 1810 | 0x7e, 0x08, 0x46, 0x0c, 0x0a, 0x23, 0xf8, 0x87, 0x80, 0x0f, 0x2c, 0xe0, | ||
| 1811 | 0x03, 0xf9, 0xcc, 0x31, 0x98, 0xc2, 0xc2, 0x0f, 0x83, 0x0c, 0xc1, 0x29, | ||
| 1812 | 0xd8, 0x82, 0x0d, 0x01, 0x7d, 0x06, 0x19, 0x82, 0x54, 0xe0, 0x85, 0x41, | ||
| 1813 | 0x86, 0xa0, 0xf2, 0x85, 0x59, 0x02, 0x61, 0xa0, 0x22, 0x10, 0x02, 0x36, | ||
| 1814 | 0x00, 0xc6, 0x1b, 0xca, 0x01, 0x1e, 0x40, 0x82, 0x82, 0x31, 0xdc, 0x10, | ||
| 1815 | 0xdc, 0x81, 0x33, 0xcb, 0x30, 0x10, 0xc1, 0x20, 0x03, 0x31, 0x0b, 0xbd, | ||
| 1816 | 0x30, 0xde, 0x90, 0x0e, 0xf4, 0x80, 0x0f, 0x14, 0x8c, 0xf1, 0x86, 0x75, | ||
| 1817 | 0xb0, 0x87, 0x7c, 0xa0, 0x60, 0x8c, 0x18, 0x20, 0x47, 0x14, 0x13, 0x45, | ||
| 1818 | 0x77, 0x0c, 0xc1, 0x20, 0x43, 0x50, 0x0b, 0xe8, 0x30, 0xc8, 0x10, 0x2c, | ||
| 1819 | 0xea, 0x30, 0x4b, 0x40, 0x0c, 0x54, 0x04, 0xc2, 0x80, 0x09, 0xc3, 0x0d, | ||
| 1820 | 0x61, 0x70, 0x0a, 0xc1, 0x2c, 0x43, 0x31, 0x05, 0xe3, 0x0d, 0xf2, 0xd0, | ||
| 1821 | 0x0f, 0x2e, 0x41, 0xc1, 0x18, 0x6e, 0x08, 0x54, 0x21, 0x98, 0x65, 0x30, | ||
| 1822 | 0x8e, 0x60, 0x90, 0xa1, 0x00, 0x07, 0x75, 0x18, 0x6f, 0xb0, 0x87, 0x90, | ||
| 1823 | 0x58, 0x09, 0x0a, 0xc6, 0x1c, 0xc3, 0x2f, 0x04, 0x35, 0x31, 0xc8, 0x10, | ||
| 1824 | 0x80, 0xc3, 0x3b, 0x58, 0x50, 0xc8, 0x67, 0x90, 0x21, 0x10, 0x87, 0x7a, | ||
| 1825 | 0x98, 0x25, 0x68, 0x83, 0xf1, 0x06, 0x7e, 0x38, 0x89, 0x9c, 0xa0, 0x60, | ||
| 1826 | 0x8c, 0x37, 0xf8, 0x43, 0x4a, 0xcc, 0x04, 0x05, 0x63, 0x90, 0x01, 0x5a, | ||
| 1827 | 0x07, 0x7d, 0x18, 0x6e, 0x20, 0x62, 0xc1, 0x99, 0x65, 0x40, 0xa4, 0x60, | ||
| 1828 | 0x0c, 0x41, 0xfa, 0x89, 0xe1, 0x86, 0x60, 0x17, 0x94, 0x59, 0x06, 0x25, | ||
| 1829 | 0x09, 0x4c, 0xe8, 0x05, 0xf9, 0xcc, 0x12, 0x2c, 0x36, 0xfc, 0x02, 0x7c, | ||
| 1830 | 0x46, 0x0c, 0x08, 0x23, 0x60, 0x8b, 0xc0, 0x82, 0x7b, 0x90, 0xcf, 0x88, | ||
| 1831 | 0x41, 0x61, 0x04, 0x6f, 0x11, 0xdc, 0xc3, 0x2c, 0xc1, 0x32, 0x50, 0x01, | ||
| 1832 | 0x28, 0x89, 0xa0, 0xcc, 0x31, 0xd0, 0x43, 0x70, 0x16, 0x63, 0x08, 0xdb, | ||
| 1833 | 0x59, 0x0c, 0x37, 0x04, 0xe4, 0xa0, 0xcc, 0x32, 0x34, 0x4c, 0x60, 0x82, | ||
| 1834 | 0x39, 0xc8, 0x67, 0x96, 0xc0, 0xb1, 0x01, 0x1d, 0xe0, 0x33, 0x62, 0x40, | ||
| 1835 | 0x18, 0x41, 0x5d, 0x04, 0x16, 0x80, 0x84, 0x7c, 0x46, 0x0c, 0x0a, 0x23, | ||
| 1836 | 0xc0, 0x8b, 0x00, 0x24, 0x66, 0x09, 0x9c, 0x81, 0x0a, 0x40, 0x61, 0x84, | ||
| 1837 | 0x66, 0x8e, 0x21, 0x09, 0xde, 0x62, 0x0c, 0x81, 0x0c, 0xda, 0x62, 0xb8, | ||
| 1838 | 0x21, 0x68, 0x07, 0x65, 0x96, 0x01, 0x7a, 0x02, 0x13, 0xde, 0x41, 0x3e, | ||
| 1839 | 0xb3, 0x04, 0x91, 0x0d, 0xf1, 0x00, 0x9f, 0x11, 0x03, 0xc2, 0x08, 0xfc, | ||
| 1840 | 0x22, 0xb0, 0x20, 0x25, 0xe4, 0x33, 0x62, 0x50, 0x18, 0x41, 0x68, 0x04, | ||
| 1841 | 0x29, 0x31, 0x4b, 0x10, 0x0d, 0x54, 0x00, 0xca, 0x23, 0x40, 0x73, 0x0c, | ||
| 1842 | 0x49, 0x50, 0x17, 0xb3, 0x04, 0xd2, 0x40, 0x45, 0x20, 0x44, 0x7a, 0x70, | ||
| 1843 | 0x0c, 0x32, 0x04, 0x29, 0x31, 0x13, 0x73, 0x0c, 0x26, 0x01, 0x06, 0x7c, | ||
| 1844 | 0x31, 0xc8, 0x10, 0x9c, 0x84, 0x4d, 0xd8, 0x10, 0xc8, 0x67, 0x90, 0x21, | ||
| 1845 | 0x48, 0x09, 0x9e, 0x98, 0x25, 0x68, 0x83, 0xe1, 0x86, 0x59, 0x80, 0x89, | ||
| 1846 | 0x60, 0x96, 0x81, 0x02, 0x83, 0x60, 0x90, 0x81, 0x0e, 0x5e, 0x22, 0x27, | ||
| 1847 | 0xc6, 0x1b, 0xca, 0x02, 0x2e, 0x44, 0x83, 0x82, 0x31, 0xde, 0x70, 0x16, | ||
| 1848 | 0x72, 0xc1, 0x17, 0x14, 0x8c, 0x39, 0x06, 0x98, 0x08, 0x4c, 0x63, 0x90, | ||
| 1849 | 0x21, 0x88, 0x09, 0xb0, 0xb0, 0xe0, 0x90, 0xcf, 0x20, 0x43, 0x30, 0x13, | ||
| 1850 | 0x66, 0x31, 0xdc, 0x70, 0xf4, 0x83, 0x33, 0xcb, 0xf0, 0x55, 0xc1, 0x18, | ||
| 1851 | 0xc2, 0xb0, 0x1a, 0xc3, 0x0d, 0x01, 0x48, 0x28, 0xb3, 0x0c, 0x97, 0x15, | ||
| 1852 | 0x98, 0x20, 0x12, 0xf2, 0x99, 0x25, 0xc0, 0x46, 0x0c, 0x08, 0x23, 0xb8, | ||
| 1853 | 0x8d, 0x61, 0xc4, 0xa0, 0x30, 0x82, 0xdc, 0x08, 0x4a, 0xc2, 0x82, 0x93, | ||
| 1854 | 0x90, 0x8f, 0x05, 0x29, 0x01, 0x9f, 0x59, 0x02, 0x6c, 0xa0, 0x02, 0x50, | ||
| 1855 | 0x2c, 0xe1, 0x9a, 0x63, 0xd8, 0x89, 0x60, 0x36, 0xc6, 0x10, 0x98, 0xd9, | ||
| 1856 | 0x18, 0x6e, 0x08, 0x52, 0x42, 0x99, 0x65, 0xd0, 0xb2, 0xc0, 0x84, 0x95, | ||
| 1857 | 0x90, 0xcf, 0x2c, 0xc1, 0x36, 0x62, 0x40, 0x18, 0x01, 0x78, 0x0c, 0x23, | ||
| 1858 | 0x06, 0x85, 0x11, 0x88, 0x47, 0xe0, 0x12, 0x16, 0xc0, 0x84, 0x7c, 0x2c, | ||
| 1859 | 0x90, 0x09, 0xf8, 0xcc, 0x12, 0x6c, 0x03, 0x15, 0x80, 0x92, 0x09, 0xda, | ||
| 1860 | 0x1c, 0x43, 0x12, 0xec, 0xc6, 0x18, 0x42, 0x95, 0x1b, 0xc3, 0x0d, 0x81, | ||
| 1861 | 0x4c, 0x28, 0xb3, 0x0c, 0x1d, 0x17, 0x98, 0x40, 0x13, 0xf2, 0x99, 0x25, | ||
| 1862 | 0xf0, 0x46, 0x0c, 0x08, 0x23, 0x48, 0x8f, 0x61, 0xc4, 0xa0, 0x30, 0x82, | ||
| 1863 | 0xf5, 0x08, 0x6e, 0xc2, 0x82, 0x9c, 0x90, 0x8f, 0x05, 0x3b, 0x01, 0x9f, | ||
| 1864 | 0x59, 0x02, 0x6f, 0xa0, 0x02, 0x50, 0x38, 0xa1, 0x9b, 0x63, 0x48, 0x82, | ||
| 1865 | 0xf0, 0x18, 0x31, 0x30, 0x8c, 0x20, 0x3e, 0x82, 0xb7, 0x68, 0x8b, 0x41, | ||
| 1866 | 0x86, 0x20, 0x2e, 0x48, 0x63, 0x96, 0xe0, 0x1b, 0xa8, 0x08, 0xfc, 0x80, | ||
| 1867 | 0x12, 0xbc, 0x41, 0x86, 0xe0, 0x2e, 0x4c, 0x63, 0x96, 0xa0, 0x0d, 0x66, | ||
| 1868 | 0x19, 0xc2, 0xa0, 0x0d, 0xf8, 0x61, 0x90, 0xa1, 0x17, 0xf0, 0x42, 0x34, | ||
| 1869 | 0x46, 0x0c, 0x0a, 0x23, 0x98, 0x8f, 0x60, 0x2d, 0xe6, 0x18, 0xe8, 0x22, | ||
| 1870 | 0x60, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0xea, 0x63, 0x60, 0x8b, 0x39, 0x06, | ||
| 1871 | 0x21, 0x68, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0xee, 0xa3, 0x68, 0x8b, 0x39, | ||
| 1872 | 0x06, 0x21, 0x60, 0x8f, 0x41, 0x86, 0x60, 0x2f, 0x5c, 0x63, 0x90, 0x21, | ||
| 1873 | 0x28, 0x07, 0xd8, 0x18, 0x6f, 0xb0, 0x8d, 0xf0, 0x98, 0x0f, 0x0a, 0xc6, | ||
| 1874 | 0x78, 0x03, 0x6e, 0x8c, 0x47, 0x7b, 0x50, 0x30, 0xe6, 0x18, 0x42, 0x23, | ||
| 1875 | 0xb8, 0x8f, 0x41, 0x86, 0x40, 0x34, 0x62, 0xc3, 0x82, 0x44, 0x3e, 0x83, | ||
| 1876 | 0x0c, 0x01, 0x69, 0xdc, 0xc6, 0x70, 0xc3, 0xe1, 0x16, 0xce, 0x2c, 0x03, | ||
| 1877 | 0x1b, 0x88, 0x41, 0x30, 0x86, 0x30, 0xf0, 0xc7, 0x70, 0x43, 0x10, 0x17, | ||
| 1878 | 0xca, 0x2c, 0x03, 0x19, 0x8c, 0x41, 0x60, 0xc2, 0x5c, 0xc8, 0x67, 0x96, | ||
| 1879 | 0xa0, 0x0c, 0x46, 0x0c, 0x08, 0x23, 0x40, 0x91, 0x61, 0xc4, 0xa0, 0x30, | ||
| 1880 | 0x02, 0x15, 0x09, 0xec, 0xc2, 0x02, 0xbc, 0x90, 0x8f, 0x05, 0x7a, 0x01, | ||
| 1881 | 0x9f, 0x59, 0x82, 0x32, 0x18, 0xa8, 0x00, 0x94, 0x31, 0x10, 0xc8, 0x60, | ||
| 1882 | 0x8e, 0x81, 0x35, 0x02, 0x12, 0x19, 0x43, 0x60, 0x48, 0x64, 0xb8, 0x21, | ||
| 1883 | 0xd0, 0x0b, 0x65, 0x96, 0xe1, 0x0c, 0xcc, 0x20, 0x30, 0x81, 0x2f, 0xe4, | ||
| 1884 | 0x33, 0x4b, 0x80, 0x06, 0x23, 0x06, 0x84, 0x11, 0xc4, 0xc8, 0x30, 0x62, | ||
| 1885 | 0x50, 0x18, 0xc1, 0x8c, 0x04, 0x7f, 0x61, 0x41, 0x68, 0xc8, 0xc7, 0x82, | ||
| 1886 | 0xd1, 0x80, 0xcf, 0x2c, 0x01, 0x1a, 0x0c, 0x54, 0x00, 0x8a, 0x19, 0x08, | ||
| 1887 | 0x67, 0x30, 0xc7, 0x90, 0x04, 0x2c, 0x32, 0x86, 0x50, 0xa9, 0xc8, 0x70, | ||
| 1888 | 0x43, 0x30, 0x1a, 0xca, 0x2c, 0x83, 0x1a, 0xa4, 0x41, 0x60, 0x42, 0x69, | ||
| 1889 | 0xc8, 0x67, 0x96, 0x60, 0x0d, 0x46, 0x0c, 0x08, 0x23, 0xd0, 0x91, 0x61, | ||
| 1890 | 0xc4, 0xa0, 0x30, 0x02, 0x1e, 0x09, 0x50, 0xc3, 0x02, 0xd5, 0x90, 0x8f, | ||
| 1891 | 0x05, 0xac, 0x01, 0x9f, 0x59, 0x82, 0x35, 0x18, 0xa8, 0x00, 0x94, 0x34, | ||
| 1892 | 0x10, 0xd4, 0x60, 0x8e, 0x21, 0x09, 0x64, 0x64, 0xc4, 0xc0, 0x30, 0x02, | ||
| 1893 | 0x31, 0x09, 0xc0, 0xc3, 0x37, 0x06, 0x19, 0x02, 0xf1, 0xa8, 0x8f, 0x59, | ||
| 1894 | 0x02, 0x36, 0x18, 0xa8, 0x08, 0xfc, 0x20, 0x0c, 0x84, 0x35, 0x18, 0x64, | ||
| 1895 | 0x08, 0xd0, 0xe3, 0x3e, 0x66, 0x09, 0xda, 0x60, 0xa0, 0x25, 0xe0, 0x11, | ||
| 1896 | 0x83, 0x47, 0x24, 0x1e, 0xf9, 0x64, 0x81, 0x0d, 0x78, 0x04, 0x0c, 0x06, | ||
| 1897 | 0x5a, 0x02, 0x14, 0x31, 0xf4, 0x42, 0x32, 0x87, 0x8f, 0x60, 0x03, 0xd7, | ||
| 1898 | 0x01, 0x83, 0x41, 0x86, 0x40, 0xd8, 0x0f, 0x0b, 0x46, 0x44, 0x3e, 0x19, | ||
| 1899 | 0x84, 0x03, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd7, 0xd2, 0x07, | ||
| 1900 | 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, 0x50, 0x13, 0xe7, 0x2c, | ||
| 1901 | 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, 0x9b, 0x6d, 0x29, 0x38, | ||
| 1902 | 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, 0x00, 0x03, 0x11, 0x71, | ||
| 1903 | 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, 0x21, 0x13, 0x00, 0x00, | ||
| 1904 | 0x00, 0x01, 0x31, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x5b, 0x06, 0xe0, | ||
| 1905 | 0x98, 0x85, 0x2d, 0x43, 0x70, 0xcc, 0xc2, 0x96, 0xa1, 0x38, 0x66, 0x61, | ||
| 1906 | 0xcb, 0xf0, 0x05, 0xbb, 0xb0, 0x65, 0x20, 0x83, 0x80, 0x17, 0xb6, 0x0c, | ||
| 1907 | 0x77, 0x10, 0xf4, 0xc2, 0x96, 0x81, 0x0f, 0x02, 0x5f, 0xd8, 0x32, 0xf8, | ||
| 1908 | 0x41, 0xf0, 0x0b, 0x5b, 0x86, 0x53, 0x08, 0xc0, 0x61, 0xcb, 0xc0, 0x0a, | ||
| 1909 | 0x41, 0x38, 0x6c, 0x19, 0x66, 0x21, 0x10, 0x87, 0x2d, 0x43, 0x2d, 0x04, | ||
| 1910 | 0xe1, 0xb0, 0x65, 0x48, 0x89, 0x40, 0x1c, 0xb6, 0x0c, 0x2b, 0x11, 0x84, | ||
| 1911 | 0xc3, 0x96, 0xe1, 0x34, 0x02, 0x71, 0xd8, 0x32, 0xa4, 0x46, 0x10, 0x0e, | ||
| 1912 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, | ||
| 1913 | 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, | ||
| 1914 | 0x00, 0x14, 0xcf, 0x41, 0x30, 0x0d, 0xe4, 0x06, 0x94, 0x8e, 0x00, 0x8c, | ||
| 1915 | 0x35, 0x00, 0x81, 0x40, 0xe0, 0x0c, 0x00, 0x05, 0x33, 0x00, 0x54, 0xcc, | ||
| 1916 | 0x00, 0x8c, 0x35, 0xb0, 0xec, 0x19, 0xca, 0x1f, 0xea, 0x97, 0xb1, 0xfa, | ||
| 1917 | 0xe5, 0xa7, 0x2e, 0xce, 0xde, 0x58, 0x83, 0x5e, 0x83, 0x3b, 0xee, 0xa9, | ||
| 1918 | 0x78, 0x6e, 0xdb, 0xdf, 0xdb, 0xa7, 0xf4, 0xe8, 0x8d, 0x35, 0xac, 0x73, | ||
| 1919 | 0xcc, 0xa2, 0x5e, 0x1a, 0xc2, 0xe8, 0xee, 0xdd, 0x6d, 0xac, 0xda, 0xdf, | ||
| 1920 | 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, | ||
| 1921 | 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, | ||
| 1922 | 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, | ||
| 1923 | 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, | ||
| 1924 | 0xeb, 0xe3, 0x1f, 0x05, 0x33, 0x00, 0x04, 0x8c, 0x00, 0x8c, 0x11, 0x80, | ||
| 1925 | 0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x00, | ||
| 1926 | 0x00, 0x83, 0x0c, 0xd5, 0x02, 0x0d, 0x37, 0x50, 0x42, 0x30, 0xcb, 0x10, | ||
| 1927 | 0x08, 0xc1, 0x1c, 0x43, 0x43, 0xc5, 0xc1, 0x20, 0x43, 0xe0, 0x48, 0x16, | ||
| 1928 | 0x64, 0xf2, 0x19, 0x64, 0x08, 0xa0, 0x6a, 0x96, 0x20, 0x19, 0x6e, 0xc8, | ||
| 1929 | 0x90, 0x60, 0x96, 0x61, 0x48, 0x82, 0xe1, 0x86, 0x2d, 0x09, 0x66, 0x19, | ||
| 1930 | 0x88, 0x22, 0x18, 0x31, 0x28, 0x8c, 0xe0, 0x0f, 0x3a, 0x69, 0x8e, 0xa1, | ||
| 1931 | 0x0a, 0xf0, 0x60, 0xc4, 0xa0, 0x30, 0x82, 0x50, 0xf8, 0xa6, 0x39, 0x06, | ||
| 1932 | 0x21, 0xc8, 0x83, 0x11, 0x83, 0xc2, 0x08, 0x46, 0x21, 0x0c, 0xa8, 0x39, | ||
| 1933 | 0x06, 0x21, 0xc0, 0x83, 0x59, 0x82, 0x62, 0xa0, 0x22, 0x10, 0x08, 0x6e, | ||
| 1934 | 0x18, 0x43, 0x08, 0xfc, 0x60, 0x0c, 0x41, 0xf0, 0x83, 0x31, 0x84, 0x81, | ||
| 1935 | 0x0f, 0x46, 0x0c, 0x0a, 0x23, 0x38, 0x05, 0x21, 0x18, 0x31, 0x28, 0x8c, | ||
| 1936 | 0x00, 0x15, 0x88, 0x60, 0xb8, 0x21, 0xb8, 0x84, 0x59, 0x06, 0xe3, 0x08, | ||
| 1937 | 0x06, 0x19, 0x8e, 0x6c, 0x0c, 0x6c, 0x40, 0x03, 0xf9, 0x58, 0x80, 0xc1, | ||
| 1938 | 0xc7, 0x8a, 0x34, 0x90, 0x8f, 0x05, 0x1a, 0x7c, 0x6c, 0x08, 0xe8, 0x33, | ||
| 1939 | 0xc7, 0x60, 0x06, 0x81, 0x2a, 0x0c, 0x32, 0x04, 0x67, 0xb0, 0x06, 0x16, | ||
| 1940 | 0x20, 0xf2, 0x19, 0x64, 0x08, 0xd2, 0xc0, 0x0d, 0x66, 0x09, 0x8e, 0x81, | ||
| 1941 | 0x8a, 0x40, 0x30, 0xc4, 0xa0, 0x98, 0x65, 0x40, 0x92, 0x6c, 0x90, 0x21, | ||
| 1942 | 0x20, 0x03, 0x37, 0x18, 0x31, 0x28, 0x8c, 0x00, 0x17, 0x02, 0x34, 0x98, | ||
| 1943 | 0x63, 0x70, 0x83, 0x20, 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xd0, 0x85, 0x21, | ||
| 1944 | 0x0d, 0xe6, 0x18, 0x84, 0x40, 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xe0, 0x85, | ||
| 1945 | 0x42, 0x0d, 0xe6, 0x18, 0x84, 0x20, 0x16, 0x66, 0x09, 0x92, 0x81, 0x92, | ||
| 1946 | 0x80, 0x14, 0x02, 0x57, 0x10, 0x04, 0x04, 0x3a, 0x06, 0x19, 0x02, 0x36, | ||
| 1947 | 0xb0, 0x83, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 1948 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x30, 0x1b, 0x00, | ||
| 1949 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, | ||
| 1950 | 0x00, 0xc9, 0x06, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, | ||
| 1951 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, | ||
| 1952 | 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, | ||
| 1953 | 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, | ||
| 1954 | 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, | ||
| 1955 | 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, | ||
| 1956 | 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, | ||
| 1957 | 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0xe8, 0x00, 0x00, | ||
| 1958 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, | ||
| 1959 | 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, | ||
| 1960 | 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, | ||
| 1961 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1962 | 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, | ||
| 1963 | 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, | ||
| 1964 | 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, | ||
| 1965 | 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 1966 | 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, | ||
| 1967 | 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, | ||
| 1968 | 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, | ||
| 1969 | 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, | ||
| 1970 | 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, | ||
| 1971 | 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, | ||
| 1972 | 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, | ||
| 1973 | 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, | ||
| 1974 | 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, | ||
| 1975 | 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, | ||
| 1976 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 1977 | 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, | ||
| 1978 | 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, | ||
| 1979 | 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, | ||
| 1980 | 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, | ||
| 1981 | 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, | ||
| 1982 | 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, | ||
| 1983 | 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, | ||
| 1984 | 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, | ||
| 1985 | 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1986 | 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, | ||
| 1987 | 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, | ||
| 1988 | 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, | ||
| 1989 | 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, | ||
| 1990 | 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1991 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1992 | 0x7a, 0x28, 0x07, 0x60, 0x83, 0x21, 0x10, 0xc0, 0x02, 0x54, 0x1b, 0x8c, | ||
| 1993 | 0xa1, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x10, 0x08, 0xb0, 0x00, 0xd5, 0x06, | ||
| 1994 | 0xa3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0x83, 0x8f, | ||
| 1995 | 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, | ||
| 1996 | 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, | ||
| 1997 | 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 1998 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, | ||
| 1999 | 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, | ||
| 2000 | 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, | ||
| 2001 | 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x90, 0x07, 0x76, 0x00, | ||
| 2002 | 0x0c, 0xee, 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, 0x90, 0x0e, 0xec, 0x40, | ||
| 2003 | 0x0f, 0xe9, 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, | ||
| 2004 | 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, | ||
| 2005 | 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, | ||
| 2006 | 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 2007 | 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, | ||
| 2008 | 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, | ||
| 2009 | 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 2010 | 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0x0f, 0xf2, 0x50, | ||
| 2011 | 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, | ||
| 2012 | 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 2013 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 2014 | 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, | ||
| 2015 | 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, | ||
| 2016 | 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, | ||
| 2017 | 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, | ||
| 2018 | 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, | ||
| 2019 | 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, | ||
| 2020 | 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, | ||
| 2021 | 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, | ||
| 2022 | 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, | ||
| 2023 | 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, | ||
| 2024 | 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, | ||
| 2025 | 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, | ||
| 2026 | 0x0e, 0x00, 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, | ||
| 2027 | 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, | ||
| 2028 | 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x40, 0x8e, | ||
| 2029 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83, 0x81, | ||
| 2030 | 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0xda, 0x80, | ||
| 2031 | 0x28, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, | ||
| 2032 | 0x63, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0xc3, 0xc4, | ||
| 2033 | 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x80, 0x34, 0xb8, 0xc3, 0x3b, | ||
| 2034 | 0xb4, 0x81, 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, 0x3d, 0xa4, 0x83, 0x3b, | ||
| 2035 | 0xcc, 0x03, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 2036 | 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, 0x31, 0x21, 0x30, 0x26, | ||
| 2037 | 0x0c, 0x07, 0x92, 0x4c, 0x18, 0x14, 0x24, 0x99, 0x10, 0x2c, 0x13, 0x02, | ||
| 2038 | 0x06, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, | ||
| 2039 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, | ||
| 2040 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, | ||
| 2041 | 0x4c, 0x10, 0xb8, 0xc1, 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, | ||
| 2042 | 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, | ||
| 2043 | 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 2044 | 0x00, 0x80, 0x41, 0x84, 0x41, 0x18, 0x46, 0x18, 0x80, 0x1c, 0x28, 0x66, | ||
| 2045 | 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, 0x81, 0x1e, 0xdc, 0xa0, | ||
| 2046 | 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, 0x40, 0x0f, 0xda, 0x21, | ||
| 2047 | 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, 0x60, 0x1c, 0x24, 0x4d, | ||
| 2048 | 0x11, 0x25, 0x4c, 0xbe, 0xec, 0xbe, 0x1d, 0x21, 0x38, 0x03, 0x81, 0x84, | ||
| 2049 | 0xe2, 0x18, 0x44, 0x40, 0x84, 0xa3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, | ||
| 2050 | 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0xf8, 0xed, 0xe1, 0x9f, 0xc6, 0x08, 0x80, | ||
| 2051 | 0x41, 0x04, 0x25, 0xb8, 0x48, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, | ||
| 2052 | 0x98, 0x67, 0x21, 0xa2, 0x7f, 0x1a, 0x23, 0x00, 0x06, 0x11, 0x18, 0xa1, | ||
| 2053 | 0x24, 0x41, 0x10, 0x08, 0x44, 0xb2, 0x2c, 0x0d, 0x39, 0x85, 0x28, 0x8a, | ||
| 2054 | 0xa2, 0x20, 0xa8, 0x0c, 0x00, 0x00, 0x90, 0x54, 0x04, 0x00, 0x20, 0xaa, | ||
| 2055 | 0x0c, 0x40, 0x51, 0x90, 0x55, 0x8c, 0xa2, 0x00, 0x00, 0x00, 0x20, 0xac, | ||
| 2056 | 0x0c, 0x45, 0x51, 0x90, 0x56, 0x84, 0xa2, 0x20, 0x6e, 0x8e, 0x20, 0x98, | ||
| 2057 | 0x23, 0x00, 0x83, 0x61, 0x04, 0xe1, 0x2b, 0x48, 0xb0, 0x34, 0x82, 0x07, | ||
| 2058 | 0x7a, 0x00, 0x85, 0x03, 0x01, 0x29, 0xf0, 0xcd, 0x11, 0x80, 0xc2, 0x20, | ||
| 2059 | 0x02, 0x20, 0x4c, 0x01, 0x8c, 0x00, 0x0c, 0x23, 0x0c, 0xdf, 0x20, 0x42, | ||
| 2060 | 0x20, 0x0c, 0x22, 0x1c, 0xc2, 0x20, 0x42, 0x21, 0x0c, 0x23, 0x10, 0x1f, | ||
| 2061 | 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 2062 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, | ||
| 2063 | 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, | ||
| 2064 | 0x38, 0x70, 0x03, 0x38, 0xd8, 0x70, 0x1b, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, | ||
| 2065 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 2066 | 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, | ||
| 2067 | 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, | ||
| 2068 | 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 2069 | 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, | ||
| 2070 | 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, | ||
| 2071 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, | ||
| 2072 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 2073 | 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 2074 | 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, | ||
| 2075 | 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, | ||
| 2076 | 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, | ||
| 2077 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, | ||
| 2078 | 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 2079 | 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, | ||
| 2080 | 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, | ||
| 2081 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 2082 | 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, | ||
| 2083 | 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, | ||
| 2084 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 2085 | 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, | ||
| 2086 | 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, | ||
| 2087 | 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, | ||
| 2088 | 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 2089 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, | ||
| 2090 | 0x07, 0x72, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, | ||
| 2091 | 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x79, 0x00, 0x00, 0x08, 0x00, | ||
| 2092 | 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x44, 0x40, 0x00, 0x08, 0x00, 0x00, | ||
| 2093 | 0x00, 0x00, 0x00, 0x0c, 0x61, 0x26, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 2094 | 0x00, 0x00, 0x86, 0x30, 0x15, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, | ||
| 2095 | 0x00, 0x43, 0x98, 0x0b, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, | ||
| 2096 | 0x21, 0x4c, 0x86, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x10, | ||
| 2097 | 0x66, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0xb3, | ||
| 2098 | 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0xe9, 0x80, | ||
| 2099 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x6c, 0x40, 0x00, | ||
| 2100 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x61, 0xc4, 0x00, 0x08, 0x00, | ||
| 2101 | 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, 0x10, 0x00, 0x00, | ||
| 2102 | 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 2103 | 0x47, 0xc6, 0x04, 0x43, 0xfa, 0x46, 0x00, 0x4a, 0xa0, 0x10, 0x0a, 0xa4, | ||
| 2104 | 0x08, 0x0a, 0xa2, 0x80, 0x0a, 0x30, 0xa0, 0x0c, 0x0a, 0xa3, 0x50, 0x0a, | ||
| 2105 | 0xa6, 0x70, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, 0xa8, 0x2c, 0x9c, 0x11, | ||
| 2106 | 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x22, 0xc7, | ||
| 2107 | 0x12, 0x1e, 0x01, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xae, 0x01, 0x00, | ||
| 2108 | 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, | ||
| 2109 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0xc6, 0xf7, 0x8c, 0x01, 0x40, 0x06, | ||
| 2110 | 0x64, 0x40, 0xe5, 0x6e, 0x0c, 0x2d, 0x4c, 0xee, 0x6b, 0x2e, 0x4d, 0xaf, | ||
| 2111 | 0x6c, 0x88, 0xf1, 0x31, 0x63, 0x20, 0x7c, 0x0d, 0xe3, 0x20, 0x08, 0x0e, | ||
| 2112 | 0x8e, 0xad, 0x0c, 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, | ||
| 2113 | 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, | ||
| 2114 | 0x06, 0x86, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, | ||
| 2115 | 0x65, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, | ||
| 2116 | 0x30, 0x06, 0xc4, 0x10, 0xe3, 0x63, 0x3e, 0xe8, 0x5b, 0x58, 0x34, 0x95, | ||
| 2117 | 0xd1, 0x85, 0xb1, 0x0d, 0x41, 0xc6, 0xe0, 0xf8, 0x98, 0x8f, 0xf9, 0x16, | ||
| 2118 | 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, | ||
| 2119 | 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, | ||
| 2120 | 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x31, 0x48, 0xc8, 0x85, 0xa5, 0xc9, | ||
| 2121 | 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0x85, 0xcd, | ||
| 2122 | 0xd1, 0x7d, 0xb5, 0x85, 0xd1, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89, 0xb1, | ||
| 2123 | 0x95, 0x0d, 0x11, 0xc6, 0x60, 0x61, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, | ||
| 2124 | 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, | ||
| 2125 | 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, | ||
| 2126 | 0x7d, 0x91, 0xa5, 0xcd, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xc6, 0xa0, | ||
| 2127 | 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, | ||
| 2128 | 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, | ||
| 2129 | 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, | ||
| 2130 | 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x64, 0x0c, 0x9e, | ||
| 2131 | 0x6f, 0x19, 0x03, 0x68, 0x0c, 0xa2, 0x21, 0xc2, 0x18, 0x48, 0x64, 0xc2, | ||
| 2132 | 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, | ||
| 2133 | 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, | ||
| 2134 | 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, | ||
| 2135 | 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, | ||
| 2136 | 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, | ||
| 2137 | 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0xf4, 0x2d, 0x63, 0x40, 0x8d, 0x41, 0x35, | ||
| 2138 | 0x06, 0xd6, 0x18, 0x40, 0x63, 0x10, 0x8d, 0xc1, 0x35, 0x06, 0x18, 0xa5, | ||
| 2139 | 0xb0, 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, 0xb6, 0x32, 0x37, 0xba, | ||
| 2140 | 0xaf, 0x34, 0x37, 0xb8, 0x3a, 0x3a, 0x5a, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 2141 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, | ||
| 2142 | 0x76, 0x34, 0x5f, 0x66, 0x29, 0x7c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xca, | ||
| 2143 | 0xe4, 0xe6, 0xe0, 0xca, 0xc6, 0xe8, 0xd2, 0xec, 0xca, 0x58, 0x8c, 0xbd, | ||
| 2144 | 0xb1, 0xbd, 0xc9, 0x0d, 0x91, 0x3e, 0x66, 0x0c, 0xb4, 0x31, 0xd8, 0xc6, | ||
| 2145 | 0xa0, 0x1a, 0x03, 0x6e, 0x0c, 0xa0, 0x31, 0x88, 0xc6, 0xe0, 0x1a, 0x83, | ||
| 2146 | 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, | ||
| 2147 | 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, | ||
| 2148 | 0x97, 0x59, 0x0a, 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x22, 0x74, | ||
| 2149 | 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x43, 0xa4, 0xef, 0x19, 0x03, | ||
| 2150 | 0x6d, 0x0c, 0xbe, 0x31, 0xa8, 0xc6, 0x80, 0x1b, 0x03, 0x68, 0x0c, 0xc0, | ||
| 2151 | 0x60, 0x0c, 0xae, 0x31, 0x08, 0x03, 0x2a, 0x61, 0x69, 0x72, 0x2e, 0x62, | ||
| 2152 | 0x75, 0x66, 0x66, 0x65, 0x72, 0x7c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, | ||
| 2153 | 0xcc, 0xcc, 0xca, 0xe4, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x28, 0x85, 0xa5, | ||
| 2154 | 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, | ||
| 2155 | 0xb9, 0x91, 0x95, 0xe1, 0x11, 0x09, 0x4b, 0x93, 0x73, 0x91, 0x2b, 0x0b, | ||
| 2156 | 0x23, 0x23, 0x15, 0x96, 0x26, 0xe7, 0x32, 0x47, 0x27, 0x57, 0x37, 0x46, | ||
| 2157 | 0xf7, 0x45, 0x97, 0x07, 0x57, 0xf6, 0x95, 0xe6, 0x66, 0xf6, 0xc6, 0xc2, | ||
| 2158 | 0x8c, 0xed, 0x2d, 0x8c, 0x8e, 0xcc, 0xdc, 0x98, 0xd4, 0x91, 0xd0, 0xd7, | ||
| 2159 | 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0x1d, 0x19, 0xba, 0x32, 0x3c, 0xba, 0x3a, | ||
| 2160 | 0xb9, 0xb2, 0x2f, 0xba, 0x3c, 0xb8, 0x32, 0x2a, 0x69, 0x6e, 0x70, 0x75, | ||
| 2161 | 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5c, 0xc6, 0xde, 0xd8, 0xde, 0xe4, | ||
| 2162 | 0xbe, 0xe6, 0xc6, 0xc2, 0xd8, 0xca, 0xe8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, | ||
| 2163 | 0x85, 0xc1, 0x7d, 0xb5, 0x95, 0xd1, 0xa1, 0xbd, 0x91, 0xf1, 0xa1, 0x7b, | ||
| 2164 | 0x73, 0x2b, 0x6b, 0x0b, 0x83, 0xfb, 0x32, 0x0b, 0x1b, 0xa3, 0x7b, 0x93, | ||
| 2165 | 0x8b, 0xe1, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16, 0x06, 0xf7, 0x65, 0x16, | ||
| 2166 | 0x36, 0x46, 0xf7, 0x26, 0x27, 0xc3, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, | ||
| 2167 | 0x2d, 0x8d, 0xae, 0xec, 0x0b, 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x08, 0x2c, | ||
| 2168 | 0x7c, 0xcb, 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, 0xa4, 0xc1, 0xd7, | ||
| 2169 | 0x7c, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x81, 0x1a, 0x7c, 0xd0, 0xd7, | ||
| 2170 | 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, 0xac, 0xc1, 0x47, 0x7d, 0xcd, 0xb7, | ||
| 2171 | 0x8c, 0x01, 0x1a, 0x8c, 0x01, 0x1b, 0x7c, 0xce, 0xd7, 0x7c, 0xcb, 0x18, | ||
| 2172 | 0xa0, 0xc1, 0x18, 0xb4, 0xc1, 0x57, 0x7d, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, | ||
| 2173 | 0x8c, 0x81, 0x1b, 0x7c, 0xd6, 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, | ||
| 2174 | 0xbc, 0xc1, 0x77, 0x7d, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x01, 0x1c, | ||
| 2175 | 0x30, 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, | ||
| 2176 | 0x2b, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0xe3, 0x15, 0x96, 0x26, 0xe7, 0x12, | ||
| 2177 | 0x26, 0x77, 0xf6, 0x45, 0x97, 0x07, 0x57, 0xf6, 0x15, 0xc6, 0x96, 0x76, | ||
| 2178 | 0xe6, 0xf6, 0x35, 0x97, 0xa6, 0x57, 0xc6, 0x67, 0x0a, 0x2d, 0x8c, 0xac, | ||
| 2179 | 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x8e, 0xc1, | ||
| 2180 | 0xd8, 0x10, 0x32, 0xf8, 0xa6, 0x31, 0x18, 0x83, 0x31, 0x20, 0x83, 0x2f, | ||
| 2181 | 0x1a, 0x83, 0x32, 0xf8, 0x96, 0x8f, 0x19, 0x03, 0x33, 0x18, 0x83, 0x33, | ||
| 2182 | 0x18, 0x83, 0x38, 0x18, 0x03, 0x39, 0xf8, 0xa2, 0x31, 0x98, 0x83, 0xaf, | ||
| 2183 | 0x19, 0x03, 0x68, 0x0c, 0xe8, 0x60, 0x0c, 0xae, 0x31, 0xa8, 0x03, 0x1a, | ||
| 2184 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x34, 0xde, 0xcc, 0xcc, 0xe6, 0xca, | ||
| 2185 | 0xe8, 0x88, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0xe0, 0xcd, 0xd0, 0x68, | ||
| 2186 | 0x0b, 0xa3, 0x93, 0x4b, 0xc3, 0x1b, 0x42, 0x7d, 0xcb, 0xe7, 0x7c, 0xcb, | ||
| 2187 | 0x18, 0xdc, 0xc1, 0x18, 0xe0, 0xc1, 0xe7, 0x7c, 0xd8, 0xb7, 0x8c, 0x41, | ||
| 2188 | 0x1e, 0x8c, 0x81, 0x1e, 0x30, 0xc9, 0xaa, 0xb2, 0x22, 0x2a, 0x1b, 0x7b, | ||
| 2189 | 0x23, 0x2b, 0xa3, 0x41, 0x56, 0x36, 0xf6, 0x46, 0x56, 0x36, 0x84, 0x0c, | ||
| 2190 | 0xbe, 0x66, 0x0c, 0xc6, 0x60, 0x0c, 0xc8, 0xe0, 0x93, 0xc6, 0xa0, 0x0c, | ||
| 2191 | 0x3e, 0xe6, 0x63, 0xc6, 0xc0, 0x0c, 0xc6, 0xe0, 0x0c, 0xc6, 0x60, 0x0f, | ||
| 2192 | 0xc6, 0x40, 0x0e, 0x3e, 0x69, 0x0c, 0xe6, 0xe0, 0x73, 0xc6, 0x00, 0x1a, | ||
| 2193 | 0x03, 0x3e, 0x18, 0x83, 0x6b, 0x0c, 0xfa, 0x80, 0x4b, 0x58, 0x9a, 0x9c, | ||
| 2194 | 0x0b, 0x5d, 0x19, 0x1e, 0x5d, 0x9d, 0x5c, 0x19, 0x95, 0xb0, 0x34, 0x39, | ||
| 2195 | 0x97, 0xb9, 0xb0, 0x36, 0x38, 0xb6, 0x32, 0x62, 0x74, 0x65, 0x78, 0x74, | ||
| 2196 | 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, | ||
| 2197 | 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x24, 0xe8, 0xca, 0xf0, | ||
| 2198 | 0xb2, 0x86, 0x50, 0x5f, 0x36, 0x06, 0x7f, 0x30, 0x06, 0x65, 0xf0, 0x2d, | ||
| 2199 | 0x1f, 0x33, 0x06, 0xa0, 0x30, 0x06, 0xd0, 0x18, 0x84, 0xc2, 0x18, 0x5c, | ||
| 2200 | 0x63, 0x20, 0x0a, 0x2c, 0xe8, 0xca, 0xf0, 0xaa, 0xac, 0x86, 0x50, 0x9f, | ||
| 2201 | 0x36, 0x06, 0x7f, 0x30, 0x06, 0x65, 0xf0, 0x31, 0x1f, 0x33, 0x06, 0xa0, | ||
| 2202 | 0x30, 0x06, 0xd0, 0x18, 0x84, 0xc2, 0x18, 0x5c, 0x63, 0x40, 0x0a, 0x5c, | ||
| 2203 | 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x78, | ||
| 2204 | 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0x31, 0x98, 0x1b, 0x22, 0x7d, | ||
| 2205 | 0xdb, 0x18, 0x98, 0xc2, 0x18, 0x94, 0xc1, 0xb7, 0x7c, 0xcc, 0x18, 0x40, | ||
| 2206 | 0x63, 0x70, 0x0a, 0x63, 0x70, 0x8d, 0x01, 0x2a, 0x0c, 0x81, 0xc6, 0x20, | ||
| 2207 | 0x1b, 0x03, 0x6f, 0x0c, 0xc4, 0x60, 0x0c, 0xec, 0x60, 0x0c, 0xfc, 0x60, | ||
| 2208 | 0x0c, 0x46, 0x61, 0x0c, 0x4a, 0x61, 0x0c, 0x52, 0x61, 0x88, 0xf1, 0x00, | ||
| 2209 | 0x63, 0x30, 0x8d, 0x81, 0x2a, 0xb0, 0xfa, 0xd2, 0xa2, 0x9a, 0x8a, 0xa9, | ||
| 2210 | 0x99, 0x42, 0x0b, 0x23, 0x2b, 0x93, 0x1b, 0x7a, 0x73, 0x9b, 0xa3, 0x0b, | ||
| 2211 | 0x73, 0xa3, 0x9b, 0xe3, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, | ||
| 2212 | 0xe6, 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, | ||
| 2213 | 0x8e, 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, | ||
| 2214 | 0x88, 0x30, 0x06, 0xae, 0x30, 0xc4, 0x18, 0x83, 0x56, 0x18, 0x83, 0x57, | ||
| 2215 | 0x28, 0x83, 0x6e, 0x88, 0x31, 0x06, 0x68, 0x30, 0x06, 0xb0, 0x50, 0x06, | ||
| 2216 | 0xdd, 0x10, 0x31, 0x18, 0x03, 0x56, 0x18, 0x83, 0x58, 0x28, 0x83, 0x6e, | ||
| 2217 | 0x0c, 0x62, 0xa1, 0x0c, 0xbc, 0x31, 0x88, 0x85, 0x32, 0xf8, 0xc6, 0x20, | ||
| 2218 | 0x16, 0xca, 0x00, 0x0c, 0xc6, 0x20, 0x16, 0xca, 0x20, 0x0c, 0xc6, 0x20, | ||
| 2219 | 0x16, 0xca, 0x40, 0x0c, 0xc6, 0x20, 0x16, 0xca, 0x60, 0x0c, 0xc6, 0x20, | ||
| 2220 | 0x16, 0xca, 0x80, 0x1b, 0x62, 0x8c, 0x81, 0x2c, 0x8c, 0x41, 0x2c, 0x94, | ||
| 2221 | 0x81, 0xc7, 0x31, 0x08, 0x4b, 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, 0x9b, | ||
| 2222 | 0x6b, 0x99, 0x1b, 0x7b, 0x83, 0x2b, 0x9b, 0x43, 0x99, 0x22, 0x62, 0xfa, | ||
| 2223 | 0x72, 0xb2, 0x8a, 0x91, 0xf9, 0x32, 0x93, 0x0b, 0x3b, 0x6b, 0x2b, 0x73, | ||
| 2224 | 0xa3, 0x4b, 0x19, 0x42, 0x8c, 0x41, 0x2d, 0x8c, 0x01, 0x2d, 0x10, 0x0b, | ||
| 2225 | 0x4b, 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, | ||
| 2226 | 0x83, 0x2b, 0x6b, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x9b, 0x1b, | ||
| 2227 | 0x62, 0x8c, 0xc1, 0x2d, 0x8c, 0x41, 0x2d, 0x8c, 0x81, 0x2d, 0x10, 0x0b, | ||
| 2228 | 0x4b, 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, | ||
| 2229 | 0x83, 0x2b, 0x6b, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0x93, 0x9b, 0x1b, | ||
| 2230 | 0x62, 0x8c, 0x41, 0x2e, 0x8c, 0x41, 0x2d, 0x8c, 0x01, 0x2e, 0x0c, 0x21, | ||
| 2231 | 0xc6, 0xe0, 0x16, 0xc6, 0x20, 0x17, 0x86, 0x18, 0x63, 0x20, 0x0b, 0x63, | ||
| 2232 | 0x10, 0x0b, 0x65, 0xf0, 0x0d, 0x31, 0xc6, 0x40, 0x16, 0xc6, 0x20, 0x16, | ||
| 2233 | 0xca, 0x80, 0x1b, 0x62, 0x8c, 0x81, 0x2c, 0x8c, 0x41, 0x2c, 0x94, 0x41, | ||
| 2234 | 0x18, 0x0c, 0x31, 0xc6, 0x40, 0x16, 0xc6, 0x20, 0x16, 0xca, 0x40, 0x0c, | ||
| 2235 | 0x86, 0x18, 0x63, 0x20, 0x0b, 0x63, 0x10, 0x0b, 0x65, 0x30, 0x06, 0x43, | ||
| 2236 | 0x8c, 0x31, 0x90, 0x85, 0x31, 0x88, 0x85, 0x32, 0x00, 0x83, 0x21, 0xc6, | ||
| 2237 | 0x18, 0xc8, 0xc2, 0x18, 0xc4, 0x42, 0x19, 0x74, 0x23, 0x22, 0x76, 0x60, | ||
| 2238 | 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, | ||
| 2239 | 0x87, 0x72, 0x70, 0x03, 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, | ||
| 2240 | 0x22, 0x04, 0xc3, 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, | ||
| 2241 | 0xd2, 0x81, 0x1c, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x50, 0x8c, 0x58, | ||
| 2242 | 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, | ||
| 2243 | 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x4a, 0x60, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, | ||
| 2244 | 0xe4, 0xc1, 0x0d, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, | ||
| 2245 | 0xce, 0xa1, 0x1c, 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, | ||
| 2246 | 0xde, 0xc1, 0x1d, 0xa6, 0x04, 0xc8, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, | ||
| 2247 | 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, | ||
| 2248 | 0x7e, 0xe1, 0x1d, 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, | ||
| 2249 | 0xa6, 0x0c, 0x0a, 0xe3, 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, | ||
| 2250 | 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, | ||
| 2251 | 0xa6, 0x04, 0xab, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 2252 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 2253 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 2254 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 2255 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 2256 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 2257 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 2258 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 2259 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 2260 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 2261 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 2262 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 2263 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 2264 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 2265 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 2266 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 2267 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 2268 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 2269 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 2270 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 2271 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 2272 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 2273 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 2274 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 2275 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 2276 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 2277 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 2278 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 2279 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 2280 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 2281 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 2282 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 2283 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 2284 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 2285 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 2286 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 2287 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 2288 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 2289 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 2290 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 2291 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 2292 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 2293 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 2294 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 2295 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 2296 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 2297 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 2298 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 2299 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 2300 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 2301 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 2302 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 2303 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 2304 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 2305 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 2306 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 2307 | 0x00, 0x71, 0x20, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x56, 0x90, 0xfd, | ||
| 2308 | 0x73, 0x6d, 0x6b, 0xcf, 0xb3, 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, | ||
| 2309 | 0xd5, 0xfd, 0x17, 0x45, 0x51, 0x14, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, | ||
| 2310 | 0x80, 0x34, 0xfd, 0x8f, 0x63, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x11, 0x34, | ||
| 2311 | 0x00, 0x12, 0xf9, 0x83, 0x33, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x29, 0x6c, | ||
| 2312 | 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c, 0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, | ||
| 2313 | 0x11, 0xf1, 0xdb, 0x83, 0x5f, 0xe1, 0xc5, 0x6d, 0x1b, 0xc2, 0x04, 0x20, | ||
| 2314 | 0x91, 0x5f, 0x00, 0xd2, 0xf4, 0x17, 0x40, 0x20, 0xf9, 0xd5, 0x5d, 0xdc, | ||
| 2315 | 0xb6, 0x05, 0x50, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xbf, 0xb0, 0x00, | ||
| 2316 | 0xcc, 0xe3, 0x57, 0x77, 0x71, 0xdb, 0x96, 0x30, 0x01, 0x48, 0xe4, 0x17, | ||
| 2317 | 0x80, 0x34, 0xfd, 0x05, 0x03, 0x5c, 0x7e, 0x75, 0x17, 0xb7, 0x6d, 0x02, | ||
| 2318 | 0x10, 0x80, 0x44, 0x7e, 0x01, 0x48, 0xd3, 0xff, 0x38, 0x96, 0x5f, 0xdc, | ||
| 2319 | 0xb6, 0x01, 0x44, 0x6c, 0x57, 0xfe, 0xe7, 0x5b, 0xdb, 0x7f, 0x11, 0x01, | ||
| 2320 | 0x06, 0x43, 0x34, 0x93, 0x0d, 0x44, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, | ||
| 2321 | 0x7f, 0x01, 0x04, 0x92, 0x5f, 0xdc, 0xb6, 0x19, 0x44, 0x00, 0x12, 0xf9, | ||
| 2322 | 0x05, 0x20, 0x4d, 0x7f, 0xc1, 0x00, 0x97, 0x5f, 0xdc, 0x36, 0x00, 0x00, | ||
| 2323 | 0x00, 0x61, 0x20, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x13, 0x04, 0x72, | ||
| 2324 | 0x10, 0x0b, 0x04, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0xd4, 0x8e, 0x45, | ||
| 2325 | 0x00, 0x81, 0x70, 0xcc, 0x41, 0x2c, 0xcc, 0x83, 0x07, 0x94, 0x8e, 0x35, | ||
| 2326 | 0x00, 0x03, 0x31, 0xc7, 0xb0, 0x30, 0x78, 0x30, 0xc7, 0xb0, 0xe0, 0x01, | ||
| 2327 | 0x1e, 0x8c, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0x65, 0x11, 0x94, 0x00, | ||
| 2328 | 0x81, 0x63, 0x09, 0x01, 0x30, 0x02, 0x40, 0xdf, 0x0c, 0x00, 0x79, 0x23, | ||
| 2329 | 0x00, 0x35, 0x40, 0xc0, 0x0c, 0x00, 0x05, 0x33, 0x00, 0x33, 0x00, 0x73, | ||
| 2330 | 0x10, 0xb4, 0xa0, 0x0b, 0xb4, 0xb0, 0x07, 0x24, 0xcc, 0x00, 0x50, 0x31, | ||
| 2331 | 0x03, 0x30, 0x02, 0x30, 0x03, 0x30, 0xd6, 0x00, 0x82, 0x20, 0x88, 0x7f, | ||
| 2332 | 0x20, 0x08, 0x82, 0xf8, 0x07, 0x82, 0x20, 0x88, 0x7f, 0x63, 0x0d, 0x6c, | ||
| 2333 | 0x3b, 0xff, 0xa4, 0xc7, 0xb6, 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, | ||
| 2334 | 0x37, 0xd6, 0x00, 0x82, 0x20, 0x5b, 0xff, 0x02, 0x08, 0x82, 0x6c, 0xfd, | ||
| 2335 | 0x0b, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x8c, 0x35, 0x80, 0x20, 0xb8, 0xe6, | ||
| 2336 | 0x60, 0x00, 0x82, 0xe0, 0x9a, 0x83, 0x01, 0x08, 0x82, 0x6b, 0x0e, 0x06, | ||
| 2337 | 0x63, 0x0d, 0x20, 0x48, 0xb7, 0x39, 0x18, 0x80, 0x20, 0xdd, 0xe6, 0x60, | ||
| 2338 | 0x00, 0x82, 0x74, 0x9b, 0x83, 0xc1, 0x58, 0xc3, 0x3a, 0xe2, 0x31, 0x0b, | ||
| 2339 | 0x06, 0xeb, 0x88, 0xc7, 0x2c, 0x18, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0x30, | ||
| 2340 | 0xd6, 0x00, 0x82, 0x30, 0x1e, 0x8e, 0x01, 0x08, 0xc2, 0x78, 0x38, 0x06, | ||
| 2341 | 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x8c, 0x35, 0x88, 0xb9, 0x98, 0xf6, 0x1f, | ||
| 2342 | 0x58, 0xf2, 0x6c, 0xfc, 0x0b, 0x63, 0xba, 0xaa, 0xb9, 0x2f, 0x8c, 0x35, | ||
| 2343 | 0xfc, 0x33, 0xe9, 0xff, 0xbe, 0x40, 0xd7, 0xa0, 0x98, 0x7f, 0x2d, 0x1c, | ||
| 2344 | 0xc7, 0xa0, 0x2f, 0x8c, 0x35, 0xcc, 0x7d, 0x9b, 0xa6, 0xbe, 0xd0, 0xba, | ||
| 2345 | 0x21, 0xcf, 0xfb, 0x02, 0x9f, 0xb3, 0x3e, 0xfe, 0x11, 0x30, 0x46, 0x00, | ||
| 2346 | 0x82, 0x20, 0x48, 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, | ||
| 2347 | 0x63, 0x04, 0x3a, 0x6b, 0xce, 0x21, 0x18, 0x8c, 0x11, 0xbc, 0x7b, 0x5a, | ||
| 2348 | 0xde, 0xdf, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xc4, 0x3c, | ||
| 2349 | 0xd8, 0xe7, 0xde, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0x80, | ||
| 2350 | 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x0b, 0x63, | ||
| 2351 | 0x04, 0x7d, 0x2c, 0xba, 0xf8, 0x37, 0x46, 0x50, 0xab, 0xb5, 0xda, 0x7e, | ||
| 2352 | 0x63, 0x04, 0xb2, 0xe8, 0xf6, 0x34, 0x18, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, | ||
| 2353 | 0xd3, 0xdd, 0x08, 0x00, 0x00, 0xe3, 0x0d, 0x73, 0xe0, 0x07, 0xaf, 0x40, | ||
| 2354 | 0xc1, 0x18, 0x6e, 0x08, 0x9e, 0x60, 0x96, 0x21, 0x10, 0x82, 0x11, 0x03, | ||
| 2355 | 0xa5, 0x08, 0x68, 0x81, 0x0e, 0xe4, 0xe0, 0x0e, 0xc8, 0xe0, 0x0c, 0xca, | ||
| 2356 | 0x80, 0x18, 0x31, 0x50, 0x8a, 0xa0, 0x16, 0xe8, 0x60, 0x0e, 0xf0, 0xa0, | ||
| 2357 | 0x0c, 0xd0, 0xc0, 0x0c, 0x8a, 0x41, 0x06, 0x61, 0x0c, 0xde, 0x60, 0x90, | ||
| 2358 | 0x41, 0x28, 0x83, 0x38, 0x18, 0x64, 0x10, 0x82, 0x39, 0x38, 0x3d, 0x50, | ||
| 2359 | 0x97, 0x82, 0x32, 0xc8, 0x10, 0xa4, 0x81, 0x1c, 0x18, 0x11, 0xc0, 0x67, | ||
| 2360 | 0xbc, 0xc1, 0x0f, 0x54, 0x61, 0x17, 0x2e, 0x50, 0x97, 0x82, 0x32, 0xc8, | ||
| 2361 | 0x10, 0xb8, 0xc1, 0x1d, 0x8c, 0x18, 0x14, 0x46, 0x70, 0x0e, 0x45, 0x30, | ||
| 2362 | 0xc7, 0xf0, 0x06, 0x41, 0x38, 0x8c, 0x57, 0x90, 0x02, 0x2c, 0x84, 0x83, | ||
| 2363 | 0x38, 0xe0, 0xc1, 0x05, 0xea, 0x52, 0x50, 0x06, 0x19, 0x02, 0x3a, 0xe8, | ||
| 2364 | 0x83, 0x11, 0x83, 0xc2, 0x08, 0xda, 0x61, 0x09, 0xe6, 0x18, 0x8c, 0xc0, | ||
| 2365 | 0x1c, 0xc6, 0x2b, 0x54, 0xc1, 0x16, 0xce, 0x01, 0x1d, 0xfe, 0xe0, 0x02, | ||
| 2366 | 0x75, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x1e, 0x8c, 0xc2, 0x88, 0x41, 0x61, | ||
| 2367 | 0x04, 0xf3, 0x10, 0x05, 0x73, 0x0c, 0x46, 0x90, 0x0e, 0xb3, 0x04, 0xc4, | ||
| 2368 | 0x70, 0x43, 0xc7, 0x06, 0xc1, 0x2c, 0xc3, 0x40, 0x04, 0x23, 0x06, 0x4a, | ||
| 2369 | 0x11, 0xc0, 0x03, 0x2c, 0xb8, 0xc2, 0x2c, 0x80, 0xc2, 0x28, 0x84, 0x02, | ||
| 2370 | 0x18, 0x8c, 0x18, 0x28, 0x45, 0x10, 0x0f, 0xb0, 0xf0, 0x0a, 0xb4, 0x10, | ||
| 2371 | 0x0a, 0xa4, 0x20, 0x0a, 0x61, 0x30, 0xc8, 0x10, 0x80, 0x82, 0x29, 0x0c, | ||
| 2372 | 0x32, 0x0c, 0xa0, 0xc0, 0x0a, 0x83, 0x0c, 0xc2, 0x1f, 0xb8, 0xc2, 0x20, | ||
| 2373 | 0x83, 0x10, 0xc0, 0xc2, 0xdd, 0x82, 0xba, 0x14, 0x94, 0x41, 0x86, 0xc0, | ||
| 2374 | 0x14, 0x5e, 0xc1, 0x88, 0x00, 0x3e, 0xe3, 0x0d, 0xbb, 0x70, 0x0e, 0xf8, | ||
| 2375 | 0x70, 0x81, 0xba, 0x14, 0x94, 0x41, 0x86, 0x60, 0x15, 0x68, 0x61, 0xc4, | ||
| 2376 | 0xa0, 0x30, 0x02, 0x92, 0x28, 0x82, 0x39, 0x06, 0x56, 0x08, 0xfc, 0x61, | ||
| 2377 | 0xbc, 0x22, 0x1c, 0xda, 0xc1, 0x1f, 0xfe, 0xa1, 0x16, 0x2e, 0x50, 0x97, | ||
| 2378 | 0x82, 0x32, 0xc8, 0x10, 0xc4, 0x82, 0x2e, 0x8c, 0x18, 0x14, 0x46, 0xa0, | ||
| 2379 | 0x12, 0x4b, 0x30, 0xc7, 0x60, 0x04, 0x23, 0x31, 0x5e, 0x71, 0x0e, 0xf3, | ||
| 2380 | 0x40, 0x12, 0x25, 0xc1, 0x0b, 0x17, 0xa8, 0x4b, 0x41, 0x19, 0x64, 0x08, | ||
| 2381 | 0x6e, 0x01, 0x1c, 0x46, 0x0c, 0x0a, 0x23, 0x80, 0x89, 0x28, 0x98, 0x63, | ||
| 2382 | 0x30, 0x02, 0x93, 0x98, 0x25, 0x20, 0x06, 0x3a, 0x02, 0x3e, 0x08, 0x84, | ||
| 2383 | 0x01, 0x2e, 0x84, 0x39, 0x86, 0x60, 0x14, 0x48, 0x62, 0xbc, 0x01, 0x1e, | ||
| 2384 | 0xf6, 0x21, 0x25, 0x28, 0x18, 0xc3, 0x0d, 0x41, 0x2b, 0x04, 0xb3, 0x0c, | ||
| 2385 | 0x85, 0x11, 0x0c, 0x32, 0x10, 0xbf, 0x80, 0x0e, 0xe3, 0x0d, 0xf4, 0xf0, | ||
| 2386 | 0x0f, 0x21, 0x41, 0xc1, 0x18, 0x31, 0x20, 0x8c, 0xc0, 0x26, 0x86, 0x11, | ||
| 2387 | 0x83, 0xc2, 0x08, 0x70, 0x22, 0xd8, 0x05, 0x0b, 0x76, 0x01, 0x3e, 0x23, | ||
| 2388 | 0x06, 0x85, 0x11, 0xe0, 0x44, 0x00, 0x0e, 0x36, 0xf0, 0x82, 0x7c, 0x8c, | ||
| 2389 | 0x17, 0x82, 0xf8, 0xd8, 0x10, 0xd0, 0x67, 0xc4, 0x80, 0x30, 0x82, 0x9e, | ||
| 2390 | 0x08, 0x46, 0x0c, 0x0a, 0x23, 0xf8, 0x89, 0xc0, 0x17, 0x2c, 0xf0, 0x05, | ||
| 2391 | 0xf9, 0xcc, 0x31, 0xa0, 0xc3, 0xd2, 0x13, 0x83, 0x0c, 0x41, 0x3a, 0xdc, | ||
| 2392 | 0x83, 0x0d, 0x01, 0x7d, 0x06, 0x19, 0x82, 0x75, 0xe8, 0x87, 0x41, 0x86, | ||
| 2393 | 0xa0, 0xfa, 0x87, 0x59, 0x02, 0x63, 0xa0, 0x22, 0x10, 0x0a, 0x36, 0x20, | ||
| 2394 | 0xc6, 0x1b, 0x4c, 0x22, 0x26, 0xc2, 0x82, 0x82, 0x31, 0xdc, 0x10, 0xd8, | ||
| 2395 | 0x82, 0x33, 0xcb, 0x70, 0x20, 0xc1, 0x20, 0x03, 0x51, 0x0f, 0xfe, 0x30, | ||
| 2396 | 0xde, 0xa0, 0x12, 0x35, 0x91, 0x13, 0x14, 0x8c, 0xf1, 0x06, 0x96, 0xb8, | ||
| 2397 | 0x09, 0x9d, 0xa0, 0x60, 0x8c, 0x18, 0x20, 0x47, 0x14, 0x17, 0x45, 0x77, | ||
| 2398 | 0x0c, 0xc1, 0x20, 0x43, 0x70, 0x0f, 0x29, 0x31, 0xc8, 0x10, 0x2c, 0x2b, | ||
| 2399 | 0x31, 0x4b, 0x80, 0x0c, 0x54, 0x04, 0xc2, 0x81, 0x19, 0xc3, 0x0d, 0x61, | ||
| 2400 | 0x60, 0x0e, 0xc1, 0x2c, 0x43, 0x72, 0x05, 0xe3, 0x0d, 0x33, 0xe1, 0x13, | ||
| 2401 | 0x6f, 0x41, 0xc1, 0x18, 0x6e, 0x08, 0xd2, 0x21, 0x98, 0x65, 0x50, 0x96, | ||
| 2402 | 0x60, 0x90, 0xa1, 0x10, 0x89, 0x95, 0x18, 0x6f, 0xb8, 0x09, 0xb1, 0x60, | ||
| 2403 | 0x0b, 0x0a, 0xc6, 0x1c, 0x43, 0x48, 0x04, 0x76, 0x31, 0xc8, 0x10, 0x88, | ||
| 2404 | 0x04, 0x4c, 0x58, 0x50, 0xc8, 0x67, 0x90, 0x21, 0x20, 0x09, 0x9b, 0x98, | ||
| 2405 | 0x25, 0x88, 0x83, 0xf1, 0x86, 0x9e, 0x40, 0x0b, 0xbd, 0xa0, 0x60, 0x8c, | ||
| 2406 | 0x37, 0xfc, 0x84, 0x5a, 0xd0, 0x05, 0x05, 0x63, 0x90, 0x01, 0x6a, 0x89, | ||
| 2407 | 0x9d, 0x18, 0x6e, 0x20, 0xe0, 0xc1, 0x99, 0x65, 0x60, 0xac, 0x60, 0x0c, | ||
| 2408 | 0x41, 0x02, 0x8d, 0xe1, 0x86, 0x20, 0x1f, 0x94, 0x59, 0x06, 0xa7, 0x09, | ||
| 2409 | 0x4c, 0xd8, 0x07, 0xf9, 0xcc, 0x12, 0x3c, 0x36, 0xf4, 0x03, 0x7c, 0x46, | ||
| 2410 | 0x0c, 0x08, 0x23, 0x60, 0x8d, 0xc0, 0x02, 0x90, 0x90, 0xcf, 0x88, 0x41, | ||
| 2411 | 0x61, 0x04, 0xaf, 0x11, 0x88, 0xc4, 0x2c, 0xc1, 0x33, 0x50, 0x01, 0x28, | ||
| 2412 | 0x8d, 0xe0, 0xcc, 0x31, 0xd8, 0x44, 0x80, 0x1a, 0x63, 0x08, 0x1b, 0x6a, | ||
| 2413 | 0x0c, 0x37, 0x04, 0x22, 0xa1, 0xcc, 0x32, 0x44, 0x50, 0x60, 0x02, 0x49, | ||
| 2414 | 0xc8, 0x67, 0x96, 0x40, 0xb2, 0xc1, 0x24, 0xe0, 0x33, 0x62, 0x40, 0x18, | ||
| 2415 | 0x41, 0x6d, 0x04, 0x16, 0xa4, 0x84, 0x7c, 0x46, 0x0c, 0x0a, 0x23, 0xc0, | ||
| 2416 | 0x8d, 0x60, 0x25, 0x66, 0x09, 0xa4, 0x81, 0x0a, 0x40, 0x81, 0x84, 0x68, | ||
| 2417 | 0x8e, 0x21, 0x09, 0x60, 0x63, 0x0c, 0x81, 0x0c, 0x5c, 0x63, 0xb8, 0x21, | ||
| 2418 | 0x58, 0x09, 0x65, 0x96, 0x81, 0x9a, 0x02, 0x13, 0x5a, 0x42, 0x3e, 0xb3, | ||
| 2419 | 0x04, 0x95, 0x0d, 0x2f, 0x01, 0x9f, 0x11, 0x03, 0xc2, 0x08, 0x7c, 0x23, | ||
| 2420 | 0xb0, 0x40, 0x26, 0xe4, 0x33, 0x62, 0x50, 0x18, 0x41, 0x78, 0x04, 0x34, | ||
| 2421 | 0x31, 0x4b, 0x50, 0x0d, 0x54, 0x00, 0xca, 0x24, 0x50, 0x73, 0x0c, 0x49, | ||
| 2422 | 0x60, 0x1b, 0xb3, 0x04, 0xd6, 0x40, 0x45, 0x20, 0x54, 0x7a, 0xb0, 0x0c, | ||
| 2423 | 0x32, 0x04, 0x6b, 0x41, 0x17, 0x73, 0x0c, 0x68, 0x01, 0x06, 0xbd, 0x31, | ||
| 2424 | 0xc8, 0x10, 0xa4, 0xc5, 0x5d, 0xd8, 0x10, 0xc8, 0x67, 0x90, 0x21, 0x58, | ||
| 2425 | 0x8b, 0xbe, 0x98, 0x25, 0x88, 0x83, 0xe1, 0x86, 0x59, 0xf0, 0x89, 0x60, | ||
| 2426 | 0x96, 0x01, 0x23, 0x83, 0x60, 0x90, 0x81, 0x0e, 0xe2, 0x42, 0x2f, 0xc6, | ||
| 2427 | 0x1b, 0x4c, 0x23, 0x36, 0xc6, 0x83, 0x82, 0x31, 0xde, 0x80, 0x1a, 0xb3, | ||
| 2428 | 0xd1, 0x1b, 0x14, 0x8c, 0x39, 0x06, 0xb9, 0x08, 0xce, 0x63, 0x90, 0x21, | ||
| 2429 | 0x98, 0x8b, 0xd0, 0xb0, 0xe0, 0x90, 0xcf, 0x20, 0x43, 0x50, 0x17, 0xa7, | ||
| 2430 | 0x31, 0xdc, 0x70, 0xf0, 0x84, 0x33, 0xcb, 0x30, 0x06, 0x59, 0x30, 0x86, | ||
| 2431 | 0x30, 0xb0, 0xc7, 0x70, 0x43, 0xf0, 0x13, 0xca, 0x2c, 0xc3, 0xa6, 0x05, | ||
| 2432 | 0x26, 0x84, 0x85, 0x7c, 0x66, 0x09, 0xb8, 0x11, 0x03, 0xc2, 0x08, 0xee, | ||
| 2433 | 0x63, 0x18, 0x31, 0x28, 0x8c, 0x20, 0x3f, 0x02, 0xb2, 0xb0, 0xc0, 0x2c, | ||
| 2434 | 0xe4, 0x63, 0x01, 0x5a, 0xc0, 0x67, 0x96, 0x80, 0x1b, 0xa8, 0x00, 0x14, | ||
| 2435 | 0x4d, 0xd8, 0xe6, 0x18, 0xfa, 0x22, 0xa0, 0x8f, 0x31, 0x04, 0x86, 0x3e, | ||
| 2436 | 0x86, 0x1b, 0x02, 0xb4, 0x50, 0x66, 0x19, 0xbc, 0x2e, 0x30, 0x41, 0x2d, | ||
| 2437 | 0xe4, 0x33, 0x4b, 0xf0, 0x8d, 0x18, 0x10, 0x46, 0x00, 0x22, 0xc3, 0x88, | ||
| 2438 | 0x41, 0x61, 0x04, 0x22, 0x12, 0xb4, 0x85, 0x05, 0x6f, 0x21, 0x1f, 0x0b, | ||
| 2439 | 0xe2, 0x02, 0x3e, 0xb3, 0x04, 0xdf, 0x40, 0x05, 0xa0, 0x74, 0x82, 0x37, | ||
| 2440 | 0xc7, 0x90, 0x04, 0xfc, 0x31, 0x86, 0x50, 0xe9, 0xc7, 0x70, 0x43, 0x10, | ||
| 2441 | 0x17, 0xca, 0x2c, 0x43, 0x18, 0x80, 0x41, 0x60, 0xc2, 0x5c, 0xc8, 0x67, | ||
| 2442 | 0x96, 0x40, 0x0c, 0x46, 0x0c, 0x08, 0x23, 0x48, 0x91, 0x61, 0xc4, 0xa0, | ||
| 2443 | 0x30, 0x82, 0x15, 0x09, 0xec, 0xc2, 0x02, 0xbc, 0x90, 0x8f, 0x05, 0x7a, | ||
| 2444 | 0x01, 0x9f, 0x59, 0x02, 0x31, 0x18, 0xa8, 0x00, 0x14, 0x30, 0x10, 0xc2, | ||
| 2445 | 0x60, 0x8e, 0x21, 0x09, 0x44, 0x64, 0xc4, 0xc0, 0x30, 0x82, 0x18, 0x09, | ||
| 2446 | 0x62, 0xe3, 0x35, 0x06, 0x19, 0x82, 0xd9, 0x28, 0x8f, 0x59, 0x82, 0x31, | ||
| 2447 | 0x18, 0xa8, 0x08, 0xfc, 0x00, 0x13, 0xc4, 0x60, 0x90, 0x21, 0xc8, 0x8d, | ||
| 2448 | 0xf3, 0x98, 0x25, 0x88, 0x83, 0x59, 0x86, 0x32, 0x88, 0x03, 0x7e, 0x18, | ||
| 2449 | 0x64, 0xe8, 0x05, 0xdd, 0x18, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0x66, 0x24, | ||
| 2450 | 0x68, 0x8d, 0x39, 0x06, 0xdb, 0x08, 0x5a, 0x64, 0xc4, 0xa0, 0x30, 0x82, | ||
| 2451 | 0x1a, 0x19, 0x5c, 0x63, 0x8e, 0x41, 0x08, 0x5c, 0x64, 0xc4, 0xa0, 0x30, | ||
| 2452 | 0x82, 0x1b, 0x29, 0x5e, 0x63, 0x8e, 0x41, 0x08, 0x5a, 0x64, 0x90, 0x21, | ||
| 2453 | 0xe8, 0x8d, 0xf7, 0x18, 0x64, 0x08, 0xca, 0x21, 0x3e, 0xc6, 0x1b, 0xee, | ||
| 2454 | 0x43, 0x44, 0x68, 0x84, 0x82, 0x31, 0xde, 0x90, 0x1f, 0x24, 0xe2, 0x22, | ||
| 2455 | 0x14, 0x8c, 0x39, 0x86, 0xf1, 0x08, 0x70, 0x64, 0x90, 0x21, 0x20, 0x0f, | ||
| 2456 | 0xf9, 0xb0, 0x20, 0x91, 0xcf, 0x20, 0x43, 0x60, 0x1e, 0xf8, 0x31, 0xdc, | ||
| 2457 | 0x70, 0xb4, 0x86, 0x33, 0xcb, 0x00, 0x07, 0x66, 0x10, 0x8c, 0x21, 0x0c, | ||
| 2458 | 0x3d, 0x32, 0xdc, 0x10, 0xc0, 0x86, 0x32, 0xcb, 0x80, 0x06, 0x67, 0x10, | ||
| 2459 | 0x98, 0x20, 0x1b, 0xf2, 0x99, 0x25, 0x48, 0x83, 0x11, 0x03, 0xc2, 0x08, | ||
| 2460 | 0xd0, 0x64, 0x18, 0x31, 0x28, 0x8c, 0x40, 0x4d, 0x82, 0xda, 0xb0, 0xe0, | ||
| 2461 | 0x36, 0xe4, 0x63, 0x41, 0x6e, 0xc0, 0x67, 0x96, 0x20, 0x0d, 0x06, 0x2a, | ||
| 2462 | 0x00, 0xe5, 0x0c, 0x04, 0x34, 0x98, 0x63, 0x70, 0x8f, 0xa0, 0x4c, 0xc6, | ||
| 2463 | 0x10, 0x98, 0x32, 0x19, 0x6e, 0x08, 0x72, 0x43, 0x99, 0x65, 0x58, 0x03, | ||
| 2464 | 0x35, 0x08, 0x4c, 0xd8, 0x0d, 0xf9, 0xcc, 0x12, 0xb0, 0xc1, 0x88, 0x01, | ||
| 2465 | 0x61, 0x04, 0x71, 0x32, 0x8c, 0x18, 0x14, 0x46, 0x30, 0x27, 0x81, 0x6f, | ||
| 2466 | 0x58, 0x00, 0x1e, 0xf2, 0xb1, 0x40, 0x3c, 0xe0, 0x33, 0x4b, 0xc0, 0x06, | ||
| 2467 | 0x03, 0x15, 0x80, 0xa2, 0x06, 0xc2, 0x1a, 0xcc, 0x31, 0x24, 0x41, 0x9b, | ||
| 2468 | 0x8c, 0x21, 0x54, 0x6b, 0x32, 0xdc, 0x10, 0x88, 0x87, 0x32, 0xcb, 0xe0, | ||
| 2469 | 0x06, 0x6d, 0x10, 0x98, 0x40, 0x1e, 0xf2, 0x99, 0x25, 0x78, 0x83, 0x11, | ||
| 2470 | 0x03, 0xc2, 0x08, 0xf4, 0x64, 0x18, 0x31, 0x28, 0x8c, 0x80, 0x4f, 0x82, | ||
| 2471 | 0xf3, 0xb0, 0x20, 0x3d, 0xe4, 0x63, 0xc1, 0x7a, 0xc0, 0x67, 0x96, 0xe0, | ||
| 2472 | 0x0d, 0x06, 0x2a, 0x00, 0xa5, 0x0d, 0x04, 0x37, 0x98, 0x63, 0x48, 0x82, | ||
| 2473 | 0x39, 0x19, 0x31, 0x30, 0x8c, 0x40, 0x54, 0x02, 0x11, 0x01, 0x91, 0x41, | ||
| 2474 | 0x86, 0x80, 0x44, 0x6c, 0x64, 0x96, 0x00, 0x0e, 0x06, 0x2a, 0x02, 0x3f, | ||
| 2475 | 0x28, 0x03, 0xe1, 0x0d, 0x06, 0x19, 0x02, 0x15, 0xc1, 0x91, 0x59, 0x82, | ||
| 2476 | 0x38, 0x18, 0x68, 0x09, 0x78, 0x44, 0xe1, 0x11, 0x8b, 0x47, 0xc6, 0x40, | ||
| 2477 | 0x16, 0xe0, 0x80, 0x47, 0xc8, 0x60, 0xa0, 0x25, 0x40, 0x11, 0x45, 0x2f, | ||
| 2478 | 0x2c, 0x73, 0x18, 0x03, 0x02, 0x0e, 0x68, 0x88, 0x0c, 0x06, 0x19, 0x02, | ||
| 2479 | 0x81, 0x47, 0x2c, 0x20, 0x13, 0xf9, 0x64, 0x10, 0x0e, 0x04, 0x00, 0x00, | ||
| 2480 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0xd3, 0x07, 0xff, 0x5c, 0xe3, 0x20, | ||
| 2481 | 0x31, 0xa1, 0xd4, 0xf4, 0x50, 0x13, 0xe7, 0x2c, 0x4e, 0xd4, 0x55, 0xf8, | ||
| 2482 | 0x5f, 0xac, 0x6e, 0x5d, 0x9b, 0x6d, 0x29, 0x38, 0x8d, 0x34, 0x01, 0xcd, | ||
| 2483 | 0x44, 0xd6, 0x39, 0x7b, 0x00, 0x03, 0x11, 0x71, 0x4e, 0x23, 0x4d, 0x40, | ||
| 2484 | 0x33, 0x49, 0x3e, 0x71, 0x21, 0x13, 0x00, 0x00, 0x00, 0x01, 0x31, 0x00, | ||
| 2485 | 0x00, 0x19, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x98, 0x85, 0x2d, 0x03, | ||
| 2486 | 0x71, 0xe8, 0xc2, 0x96, 0xa1, 0x38, 0x74, 0x61, 0xcb, 0x20, 0x06, 0x87, | ||
| 2487 | 0x2e, 0x6c, 0x19, 0xc6, 0xe0, 0xd0, 0x85, 0x2d, 0x83, 0x28, 0x04, 0xbb, | ||
| 2488 | 0xb0, 0x65, 0x38, 0x85, 0x80, 0x17, 0xb6, 0x0c, 0xba, 0x10, 0xf4, 0xc2, | ||
| 2489 | 0x96, 0xe1, 0x17, 0x02, 0x5f, 0xd8, 0x32, 0x84, 0x43, 0xf0, 0x0b, 0x5b, | ||
| 2490 | 0x06, 0x75, 0x08, 0x66, 0x61, 0xcb, 0xf0, 0x0e, 0x01, 0x38, 0x6c, 0x19, | ||
| 2491 | 0xec, 0x21, 0x08, 0x87, 0x2d, 0x03, 0x3e, 0x04, 0xe0, 0xb0, 0x65, 0x60, | ||
| 2492 | 0x8b, 0x20, 0x1c, 0xb6, 0x0c, 0x6e, 0x11, 0x80, 0xc3, 0x96, 0x41, 0x3d, | ||
| 2493 | 0x82, 0x70, 0xd8, 0x32, 0xb0, 0x47, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, | ||
| 2494 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, | ||
| 2495 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xd4, 0xce, 0x41, | ||
| 2496 | 0x2c, 0xcc, 0xd3, 0x06, 0x94, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, | ||
| 2497 | 0xdf, 0x0c, 0x00, 0x05, 0x33, 0x00, 0x54, 0xcc, 0x00, 0x8c, 0x35, 0xb0, | ||
| 2498 | 0xec, 0x19, 0xca, 0x1f, 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, | ||
| 2499 | 0xde, 0x58, 0x83, 0x5e, 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, | ||
| 2500 | 0xdb, 0xa7, 0xf4, 0xe8, 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, | ||
| 2501 | 0xc2, 0xe8, 0xee, 0xdd, 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, | ||
| 2502 | 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, | ||
| 2503 | 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, | ||
| 2504 | 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, | ||
| 2505 | 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, | ||
| 2506 | 0x33, 0x00, 0x04, 0x8c, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, | ||
| 2507 | 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, | ||
| 2508 | 0x02, 0x0d, 0x37, 0x50, 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, | ||
| 2509 | 0x43, 0xc5, 0xc1, 0x20, 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, | ||
| 2510 | 0x08, 0xa0, 0x6a, 0x96, 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, | ||
| 2511 | 0x48, 0x82, 0xe1, 0x86, 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, | ||
| 2512 | 0x28, 0x8c, 0xc0, 0x0f, 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xf0, 0x60, 0xc4, | ||
| 2513 | 0xa0, 0x30, 0x02, 0x50, 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xc8, 0x83, 0x11, | ||
| 2514 | 0x83, 0xc2, 0x08, 0x44, 0x21, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xc0, 0x83, | ||
| 2515 | 0x59, 0x82, 0x62, 0xa0, 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xfc, | ||
| 2516 | 0x60, 0x0c, 0x41, 0xf0, 0x83, 0x31, 0x84, 0x81, 0x0f, 0x46, 0x0c, 0x0a, | ||
| 2517 | 0x23, 0x30, 0x05, 0x21, 0x18, 0x31, 0x28, 0x8c, 0xe0, 0x14, 0x88, 0x60, | ||
| 2518 | 0xb8, 0x21, 0xb8, 0x84, 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, | ||
| 2519 | 0x0c, 0x6c, 0x40, 0x03, 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, | ||
| 2520 | 0x8f, 0x05, 0x1a, 0x7c, 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, | ||
| 2521 | 0x2a, 0x0c, 0x32, 0x04, 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, | ||
| 2522 | 0x08, 0xd2, 0xc0, 0x0d, 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, | ||
| 2523 | 0xa0, 0x98, 0x65, 0x40, 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, | ||
| 2524 | 0x31, 0x28, 0x8c, 0xe0, 0x16, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0x20, | ||
| 2525 | 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xc8, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, | ||
| 2526 | 0x40, 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xd8, 0x85, 0x42, 0x0d, 0xe6, 0x18, | ||
| 2527 | 0x84, 0x20, 0x16, 0x66, 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, | ||
| 2528 | 0x10, 0x04, 0x04, 0x3a, 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, | ||
| 2529 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2530 | 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 2531 | }; | ||
| 2532 | const unsigned int sdl_metallib_len = 30341; | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_shaders_metal_tvos.h b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_tvos.h new file mode 100644 index 0000000..5d04118 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_tvos.h | |||
| @@ -0,0 +1,2612 @@ | |||
| 1 | const unsigned char sdl_metallib[] = { | ||
| 2 | 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 3 | 0x00, 0x00, 0x00, 0x00, 0x45, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 4 | 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x00, | ||
| 5 | 0x00, 0x00, 0x00, 0x00, 0x2f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 6 | 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x03, 0x00, 0x00, | ||
| 7 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x00, 0x00, | ||
| 9 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, | ||
| 10 | 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, | ||
| 11 | 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, | ||
| 12 | 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, | ||
| 13 | 0x60, 0x7a, 0x81, 0x65, 0xda, 0xf6, 0x14, 0xc4, 0x56, 0x47, 0x0b, 0x7a, | ||
| 14 | 0x77, 0x81, 0xf4, 0xc0, 0x01, 0xee, 0xcd, 0x26, 0x7c, 0x2d, 0x8d, 0x7b, | ||
| 15 | 0x28, 0x66, 0x63, 0x5c, 0x85, 0xe9, 0xdd, 0xb9, 0x4f, 0x46, 0x46, 0x54, | ||
| 16 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 18 | 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, | ||
| 19 | 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, 0x00, | ||
| 20 | 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, | ||
| 21 | 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, 0x59, | ||
| 22 | 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x6e, | ||
| 23 | 0xc3, 0x21, 0x35, 0x82, 0x00, 0x01, 0xe8, 0xa4, 0x27, 0xe1, 0xec, 0x73, | ||
| 24 | 0xf1, 0xe9, 0x58, 0x2e, 0x4a, 0x0d, 0xc0, 0x5a, 0x63, 0x1e, 0x7f, 0x35, | ||
| 25 | 0xf1, 0x6e, 0x35, 0x4e, 0xbf, 0x18, 0xae, 0x4f, 0x46, 0x46, 0x54, 0x18, | ||
| 26 | 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 28 | 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, | ||
| 29 | 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7a, 0x00, 0x00, 0x00, 0x4e, | ||
| 30 | 0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, | ||
| 31 | 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, | ||
| 32 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 33 | 0x00, 0x6a, 0x1d, 0x1d, 0x45, 0x2a, 0x6b, 0x07, 0x82, 0x0a, 0x87, 0xce, | ||
| 34 | 0x97, 0xa1, 0xfe, 0x31, 0x9c, 0x83, 0x91, 0x37, 0x14, 0x18, 0x48, 0x21, | ||
| 35 | 0x09, 0xd8, 0x88, 0xe6, 0x6a, 0xd7, 0xa1, 0x43, 0x12, 0x4f, 0x46, 0x46, | ||
| 36 | 0x54, 0x18, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, | ||
| 37 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x19, 0x00, 0x00, 0x00, | ||
| 38 | 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, | ||
| 39 | 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, 0x00, | ||
| 40 | 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, | ||
| 41 | 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||
| 42 | 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, | ||
| 43 | 0x20, 0x00, 0xc3, 0xd6, 0x7b, 0x88, 0x85, 0xf9, 0x2a, 0x82, 0x3a, 0xbd, | ||
| 44 | 0x11, 0xe6, 0x1e, 0x52, 0xa3, 0x10, 0xbc, 0xf6, 0x87, 0xcf, 0x2b, 0x30, | ||
| 45 | 0xb1, 0x9a, 0xa7, 0x8c, 0xf0, 0x69, 0xee, 0x5a, 0x25, 0x8c, 0x4f, 0x46, | ||
| 46 | 0x46, 0x54, 0x18, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 47 | 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x25, 0x00, 0x00, | ||
| 48 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, | ||
| 49 | 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x78, 0x00, | ||
| 50 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 51 | 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||
| 52 | 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, | ||
| 53 | 0x20, 0x00, 0x9f, 0x6c, 0xde, 0x3a, 0x59, 0x77, 0x6a, 0xd2, 0x35, 0x5f, | ||
| 54 | 0x27, 0x58, 0x9c, 0x4b, 0xdb, 0x9c, 0x88, 0xf7, 0xdf, 0x70, 0x9e, 0x17, | ||
| 55 | 0x60, 0xc0, 0xe8, 0x92, 0xf3, 0x9d, 0xc8, 0x6a, 0x12, 0x45, 0x4f, 0x46, | ||
| 56 | 0x46, 0x54, 0x18, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 57 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x3e, 0x00, 0x00, | ||
| 58 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, | ||
| 59 | 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, | ||
| 60 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 61 | 0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, | ||
| 62 | 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, | ||
| 63 | 0x48, 0x20, 0x00, 0xa0, 0xfa, 0x0c, 0x39, 0x0e, 0x54, 0xa2, 0xb2, 0x34, | ||
| 64 | 0x03, 0x53, 0x34, 0x18, 0x63, 0x46, 0x2e, 0x1a, 0x02, 0x79, 0x8d, 0x88, | ||
| 65 | 0x29, 0x32, 0xb9, 0xcc, 0xcd, 0x6b, 0xaa, 0xd8, 0x7a, 0x01, 0xd6, 0x4f, | ||
| 66 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 67 | 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x5a, 0x00, | ||
| 68 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, | ||
| 69 | 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x29, | ||
| 70 | 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x15, 0x00, 0x02, 0x00, 0x70, | ||
| 71 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, 0x6f, | ||
| 72 | 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x56, 0x41, 0x54, 0x59, 0x04, 0x00, | ||
| 73 | 0x02, 0x00, 0x04, 0x06, 0x45, 0x4e, 0x44, 0x54, 0x35, 0x00, 0x00, 0x00, | ||
| 74 | 0x56, 0x41, 0x54, 0x54, 0x20, 0x00, 0x03, 0x00, 0x70, 0x6f, 0x73, 0x69, | ||
| 75 | 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 76 | 0x00, 0x01, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, | ||
| 77 | 0x02, 0x80, 0x56, 0x41, 0x54, 0x59, 0x05, 0x00, 0x03, 0x00, 0x04, 0x06, | ||
| 78 | 0x04, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 79 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 80 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 81 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 82 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 83 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 84 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 85 | 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 86 | 0x00, 0xac, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 87 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 88 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 89 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 90 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 91 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 92 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 93 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, | ||
| 94 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 95 | 0x00, 0x79, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 96 | 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, | ||
| 97 | 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, | ||
| 98 | 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, | ||
| 99 | 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 100 | 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, | ||
| 101 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, | ||
| 102 | 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, 0x00, 0x06, 0x77, 0x78, | ||
| 103 | 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, 0xa0, 0x87, 0x74, 0x70, | ||
| 104 | 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, | ||
| 105 | 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, | ||
| 106 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, | ||
| 107 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 108 | 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, | ||
| 109 | 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, | ||
| 110 | 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, | ||
| 111 | 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, | ||
| 112 | 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, | ||
| 113 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 114 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 115 | 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, | ||
| 116 | 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 117 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, | ||
| 118 | 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, | ||
| 119 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 120 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 121 | 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, | ||
| 122 | 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, | ||
| 123 | 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, | ||
| 124 | 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, | ||
| 125 | 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, | ||
| 126 | 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, | ||
| 127 | 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, | ||
| 128 | 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 129 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x6c, 0xc2, 0x00, 0x2c, 0x40, | ||
| 130 | 0x35, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, | ||
| 131 | 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, 0x84, 0x03, | ||
| 132 | 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0x61, 0x1b, 0x08, 0x60, 0x01, | ||
| 133 | 0xaa, 0x21, 0x1c, 0xd2, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, | ||
| 134 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1c, | ||
| 135 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 136 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 137 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 138 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 139 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 140 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x60, 0x87, 0x10, 0xc0, | ||
| 141 | 0x30, 0x82, 0x00, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 142 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 143 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 144 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x52, 0x88, | ||
| 145 | 0x11, 0x8c, 0xa1, 0x33, 0x10, 0x30, 0x47, 0x00, 0x06, 0x29, 0xa0, 0xe6, | ||
| 146 | 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00, | ||
| 147 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 148 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 149 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 150 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 151 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 152 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 153 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 154 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 155 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 156 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 157 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 158 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 159 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 160 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 161 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 162 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 163 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 164 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 165 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 166 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 167 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 168 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 169 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 170 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 171 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 172 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 173 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 174 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 175 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 176 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, | ||
| 177 | 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, | ||
| 178 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, | ||
| 179 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x52, 0x25, 0x30, 0x02, | ||
| 180 | 0x50, 0x80, 0x01, 0x45, 0x50, 0x20, 0x65, 0x50, 0x08, 0x05, 0x41, 0x6c, | ||
| 181 | 0x04, 0x80, 0xd6, 0x58, 0x82, 0x24, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 182 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, | ||
| 183 | 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x86, 0x42, | ||
| 184 | 0x24, 0xc0, 0xa2, 0x50, 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, | ||
| 185 | 0xd3, 0x2b, 0x1b, 0x62, 0x28, 0x41, 0x22, 0x28, 0x07, 0xe3, 0x20, 0x08, | ||
| 186 | 0x0e, 0x8e, 0xad, 0x0c, 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, | ||
| 187 | 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, | ||
| 188 | 0x85, 0x06, 0x86, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, | ||
| 189 | 0xac, 0x65, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, | ||
| 190 | 0x88, 0x90, 0x10, 0x43, 0x0c, 0x25, 0x50, 0x10, 0x45, 0x60, 0xd1, 0x54, | ||
| 191 | 0x46, 0x17, 0xc6, 0x36, 0x04, 0x49, 0x0e, 0x25, 0x50, 0x02, 0x45, 0xe0, | ||
| 192 | 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, | ||
| 193 | 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, | ||
| 194 | 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 195 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 196 | 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, | ||
| 197 | 0x43, 0x84, 0x64, 0x21, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, | ||
| 198 | 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, | ||
| 199 | 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, | ||
| 200 | 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x92, 0x86, 0x4c, 0x58, 0x9a, | ||
| 201 | 0x9c, 0x0b, 0xdc, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0x1b, 0xa3, 0xb0, | ||
| 202 | 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, | ||
| 203 | 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x64, | ||
| 204 | 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xdc, 0xc2, 0xda, 0xca, | ||
| 205 | 0x88, 0xc0, 0xbd, 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x51, 0x92, | ||
| 206 | 0x27, 0x81, 0x92, 0x28, 0x91, 0x92, 0x89, 0x51, 0x58, 0x9a, 0x9c, 0x8b, | ||
| 207 | 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0xde, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, | ||
| 208 | 0x1d, 0xad, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, 0x94, | ||
| 209 | 0x9a, 0xb1, 0x37, 0xb6, 0x37, 0x39, 0x22, 0x3b, 0x9a, 0x2f, 0xb3, 0x14, | ||
| 210 | 0x16, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x43, 0x98, 0xa4, 0x4a, 0xac, 0x04, | ||
| 211 | 0x4a, 0xa2, 0x44, 0x4a, 0x2e, 0x3a, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, | ||
| 212 | 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0xcc, 0xd8, 0xde, | ||
| 213 | 0xc2, 0xe8, 0x98, 0xc0, 0xbd, 0xa5, 0xb9, 0xd1, 0x4d, 0xa5, 0xe9, 0x95, | ||
| 214 | 0x0d, 0x51, 0x92, 0x2c, 0x81, 0x12, 0x2d, 0x91, 0x92, 0x6d, 0x88, 0x91, | ||
| 215 | 0x50, 0x09, 0x96, 0x70, 0x84, 0xc2, 0xd2, 0xe4, 0x5c, 0xec, 0xca, 0xe4, | ||
| 216 | 0xe8, 0xca, 0xf0, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x28, 0x85, 0xa5, | ||
| 217 | 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, | ||
| 218 | 0xb9, 0x91, 0x95, 0xe1, 0xd1, 0x3b, 0x2b, 0x73, 0x2b, 0x93, 0x0b, 0xa3, | ||
| 219 | 0x2b, 0x23, 0x43, 0xf9, 0xfa, 0x0a, 0x4b, 0x93, 0xfb, 0x82, 0x63, 0x0b, | ||
| 220 | 0x1b, 0x2b, 0x43, 0x7b, 0x63, 0x23, 0x2b, 0x93, 0xfb, 0xfa, 0x4a, 0xa1, | ||
| 221 | 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x33, 0x84, 0x52, 0x84, 0xc4, 0x4b, | ||
| 222 | 0x3e, 0x45, 0x50, 0x82, 0x04, 0x0c, 0x12, 0x28, 0x09, 0x83, 0x44, 0x4a, | ||
| 223 | 0xa6, 0x21, 0x94, 0x12, 0x24, 0x5e, 0xf2, 0x29, 0x81, 0x12, 0x24, 0x60, | ||
| 224 | 0x90, 0x40, 0x49, 0x94, 0x48, 0xc9, 0x45, 0x25, 0x2c, 0x4d, 0xce, 0x45, | ||
| 225 | 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, | ||
| 226 | 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x91, 0xb0, | ||
| 227 | 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x46, 0x61, 0x69, 0x72, 0x2e, | ||
| 228 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, | ||
| 229 | 0x65, 0xbc, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, | ||
| 230 | 0xe0, 0xca, 0xbe, 0xc2, 0xd8, 0xd2, 0xce, 0xdc, 0xbe, 0xe6, 0xd2, 0xf4, | ||
| 231 | 0xca, 0x88, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0xe0, 0xd1, 0x50, 0x81, | ||
| 232 | 0x93, 0x7b, 0x53, 0x2b, 0x1b, 0xa3, 0x4b, 0x7b, 0x73, 0x1b, 0x02, 0x06, | ||
| 233 | 0x0a, 0x91, 0x90, 0x41, 0x52, 0x06, 0xca, 0x90, 0x7c, 0x0a, 0xa1, 0x04, | ||
| 234 | 0x89, 0x19, 0x24, 0x67, 0xa0, 0x0c, 0x09, 0x1a, 0x28, 0x45, 0x02, 0x25, | ||
| 235 | 0x69, 0x90, 0x48, 0x89, 0x1a, 0x30, 0xa1, 0x93, 0x0b, 0x73, 0x9b, 0x33, | ||
| 236 | 0x7b, 0x93, 0x6b, 0x1b, 0x02, 0x06, 0x8a, 0x91, 0x90, 0x41, 0x52, 0x06, | ||
| 237 | 0xca, 0x90, 0x7c, 0x8a, 0xa1, 0x04, 0x89, 0x19, 0x24, 0x67, 0xa0, 0x0c, | ||
| 238 | 0x09, 0x1a, 0x28, 0x45, 0x02, 0x25, 0x69, 0x90, 0x48, 0x09, 0x1b, 0x0c, | ||
| 239 | 0x41, 0x12, 0x31, 0x48, 0xc6, 0x20, 0x59, 0x83, 0xa4, 0x0d, 0x86, 0x18, | ||
| 240 | 0x08, 0x90, 0x74, 0x89, 0x1b, 0xf0, 0x79, 0x6b, 0x73, 0x4b, 0x83, 0x7b, | ||
| 241 | 0xa3, 0x2b, 0x73, 0xa3, 0x03, 0x19, 0x43, 0x0b, 0x93, 0xe3, 0x33, 0x95, | ||
| 242 | 0xd6, 0x06, 0xc7, 0x56, 0x06, 0x32, 0xb4, 0xb2, 0x02, 0x42, 0x25, 0x14, | ||
| 243 | 0x14, 0x34, 0x44, 0x48, 0xe2, 0x60, 0x88, 0x91, 0xc0, 0x41, 0x22, 0x07, | ||
| 244 | 0x4c, 0x32, 0xc4, 0x48, 0xe6, 0x20, 0x99, 0x03, 0x26, 0xa1, 0x18, 0x84, | ||
| 245 | 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, | ||
| 246 | 0xc1, 0x95, 0xcd, 0xa1, 0x4c, 0x11, 0x31, 0x7d, 0x4d, 0xbd, 0xb1, 0xa5, | ||
| 247 | 0x91, 0x7d, 0xd9, 0x95, 0xc9, 0xd1, 0x95, 0xe1, 0xa5, 0x0c, 0x21, 0x12, | ||
| 248 | 0x3b, 0x48, 0xea, 0x80, 0x56, 0x58, 0x9a, 0x5c, 0x4b, 0x18, 0x5b, 0x5a, | ||
| 249 | 0xd8, 0x5c, 0xcb, 0xdc, 0xd8, 0x1b, 0x5c, 0x59, 0x4b, 0x98, 0xdc, 0x19, | ||
| 250 | 0xca, 0x4c, 0xca, 0x10, 0x23, 0xc1, 0x83, 0xc4, 0x0e, 0x92, 0x3b, 0x18, | ||
| 251 | 0x22, 0x24, 0x78, 0x40, 0x2b, 0x2c, 0x4d, 0xae, 0x25, 0x8c, 0x2d, 0x2d, | ||
| 252 | 0x6c, 0xae, 0x65, 0x6e, 0xec, 0x0d, 0xae, 0xac, 0x25, 0x4c, 0xee, 0x0c, | ||
| 253 | 0x45, 0x26, 0x65, 0x88, 0x91, 0xec, 0x41, 0x62, 0x07, 0x89, 0x1e, 0x0c, | ||
| 254 | 0x11, 0x92, 0x3d, 0x18, 0x11, 0xb1, 0x03, 0x3b, 0xd8, 0x43, 0x3b, 0xb8, | ||
| 255 | 0x41, 0x3b, 0xbc, 0x03, 0x39, 0xd4, 0x03, 0x3b, 0x94, 0x83, 0x1b, 0x98, | ||
| 256 | 0x03, 0x3b, 0x84, 0xc3, 0x39, 0xcc, 0xc3, 0x14, 0x21, 0x18, 0x46, 0x28, | ||
| 257 | 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 258 | 0xee, 0x40, 0x0f, 0x53, 0x82, 0x62, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, | ||
| 259 | 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, | ||
| 260 | 0x53, 0x02, 0x63, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, | ||
| 261 | 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, | ||
| 262 | 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, | ||
| 263 | 0x40, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, | ||
| 264 | 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, | ||
| 265 | 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x65, 0x50, 0x18, 0x67, | ||
| 266 | 0x84, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, | ||
| 267 | 0xf4, 0x50, 0x0e, 0xf8, 0x30, 0x25, 0x78, 0x03, 0x00, 0x79, 0x18, 0x00, | ||
| 268 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 269 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 270 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 271 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 272 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 273 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 274 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 275 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 276 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 277 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 278 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 279 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 280 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 281 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 282 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 283 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 284 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 285 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 286 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 287 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 288 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 289 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 290 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 291 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 292 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 293 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 294 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 295 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 296 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 297 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 298 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 299 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 300 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 301 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 302 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 303 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 304 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 305 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 306 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 307 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 308 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 309 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 310 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 311 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 312 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 313 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 314 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 315 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 316 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 317 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 318 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 319 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 320 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 321 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 322 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 323 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 324 | 0x00, 0x06, 0x00, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x45, | ||
| 325 | 0x44, 0x13, 0x71, 0x01, 0x00, 0x61, 0x20, 0x00, 0x00, 0x5c, 0x00, 0x00, | ||
| 326 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, | ||
| 327 | 0x00, 0xe4, 0xc6, 0x22, 0x86, 0x61, 0x18, 0xc6, 0x22, 0x04, 0x41, 0x10, | ||
| 328 | 0xc6, 0x22, 0x82, 0x20, 0x08, 0x46, 0x00, 0x88, 0x15, 0x41, 0x09, 0x94, | ||
| 329 | 0x01, 0x8d, 0x19, 0x00, 0x12, 0x33, 0x00, 0x14, 0x66, 0x00, 0x66, 0x00, | ||
| 330 | 0x08, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x00, 0xe3, 0x11, 0x8d, | ||
| 331 | 0x94, 0x49, 0x14, 0x94, 0xf1, 0x08, 0x88, 0xda, 0x28, 0x0a, 0xca, 0x20, | ||
| 332 | 0xc3, 0x70, 0x34, 0x26, 0x04, 0xf2, 0x19, 0x8f, 0xa0, 0xb0, 0xaf, 0xa1, | ||
| 333 | 0xa0, 0x0c, 0x32, 0x1c, 0x8a, 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, | ||
| 334 | 0x8c, 0x47, 0x64, 0x1d, 0x19, 0x4c, 0x14, 0x94, 0x41, 0x06, 0xe6, 0xc1, | ||
| 335 | 0x4c, 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, 0x08, 0x4f, 0x0c, 0xd2, | ||
| 336 | 0xc0, 0xa2, 0xa0, 0x0c, 0x32, 0x44, 0x94, 0x67, 0x42, 0x20, 0x1f, 0x2b, | ||
| 337 | 0x02, 0xf8, 0x8c, 0x47, 0x88, 0xc1, 0x19, 0xb8, 0x01, 0x47, 0x41, 0x19, | ||
| 338 | 0x64, 0x08, 0x34, 0x30, 0xb0, 0xa0, 0x92, 0xcf, 0x20, 0xc3, 0xb0, 0x8d, | ||
| 339 | 0x81, 0x05, 0x93, 0x7c, 0x6c, 0x08, 0xe0, 0x33, 0xc8, 0x60, 0x78, 0x67, | ||
| 340 | 0x60, 0x41, 0x24, 0x1f, 0x1b, 0x02, 0xf8, 0x0c, 0x32, 0x24, 0x61, 0xb0, | ||
| 341 | 0x06, 0x16, 0x3c, 0xf2, 0xb1, 0x21, 0x80, 0xcf, 0x78, 0xc4, 0x1b, 0xd0, | ||
| 342 | 0xc1, 0x1e, 0xa0, 0x01, 0x05, 0x65, 0x90, 0x21, 0x38, 0x83, 0x36, 0xb0, | ||
| 343 | 0x40, 0x0c, 0xe4, 0x33, 0xc8, 0x30, 0xa0, 0x01, 0x1c, 0x58, 0x00, 0x06, | ||
| 344 | 0xf2, 0x19, 0x64, 0x28, 0xd4, 0x60, 0x0e, 0x2c, 0xe8, 0xe4, 0x33, 0xc8, | ||
| 345 | 0x70, 0xb0, 0x81, 0x1d, 0x58, 0xa0, 0xc9, 0x67, 0x90, 0x81, 0x0f, 0xe2, | ||
| 346 | 0xa0, 0x0e, 0x2c, 0x0b, 0xe4, 0x33, 0xc8, 0xe0, 0x07, 0x73, 0x80, 0x07, | ||
| 347 | 0xe6, 0x04, 0xf2, 0xb1, 0x64, 0x80, 0x8f, 0x05, 0x0c, 0x7c, 0x2c, 0x48, | ||
| 348 | 0xe0, 0x63, 0x01, 0x02, 0x1f, 0x0b, 0x0a, 0xf8, 0xcc, 0x36, 0xe4, 0x41, | ||
| 349 | 0x00, 0xcc, 0x36, 0x04, 0xa5, 0x10, 0xcc, 0x36, 0x04, 0x78, 0x20, 0x64, | ||
| 350 | 0x10, 0x10, 0x03, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, | ||
| 351 | 0xa0, 0x83, 0x23, 0x0f, 0x10, 0x3e, 0xd8, 0x72, 0x0c, 0x01, 0x1d, 0x1c, | ||
| 352 | 0x7c, 0x80, 0xe4, 0xc1, 0x96, 0xe3, 0x08, 0xe8, 0xe0, 0xe0, 0x03, 0x24, | ||
| 353 | 0x0f, 0xb6, 0x1c, 0x4c, 0x40, 0x07, 0x07, 0x1f, 0x20, 0x79, 0xb0, 0xe5, | ||
| 354 | 0x88, 0x02, 0x3a, 0x38, 0xf8, 0x00, 0xc9, 0x83, 0x2d, 0x87, 0x15, 0xd0, | ||
| 355 | 0xc1, 0x91, 0x07, 0x08, 0x1f, 0x6c, 0x39, 0xc6, 0x20, 0xa0, 0x83, 0x23, | ||
| 356 | 0x0f, 0x10, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 357 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 358 | 0x00, 0xbc, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 359 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 360 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 361 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 362 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 363 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 364 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 365 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, | ||
| 366 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 367 | 0x00, 0x79, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 368 | 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, | ||
| 369 | 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, | ||
| 370 | 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, | ||
| 371 | 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 372 | 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, | ||
| 373 | 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, | ||
| 374 | 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, 0x00, 0x06, 0x77, 0x78, | ||
| 375 | 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, 0xa0, 0x87, 0x74, 0x70, | ||
| 376 | 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, | ||
| 377 | 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, | ||
| 378 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, | ||
| 379 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 380 | 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, | ||
| 381 | 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, | ||
| 382 | 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, | ||
| 383 | 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, | ||
| 384 | 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, | ||
| 385 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 386 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 387 | 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, | ||
| 388 | 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 389 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, | ||
| 390 | 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, | ||
| 391 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 392 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 393 | 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, | ||
| 394 | 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, | ||
| 395 | 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, | ||
| 396 | 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, | ||
| 397 | 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, | ||
| 398 | 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, | ||
| 399 | 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, | ||
| 400 | 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 401 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x6c, 0x02, 0x01, 0x2c, 0x40, | ||
| 402 | 0x35, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, | ||
| 403 | 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, 0x84, 0x03, | ||
| 404 | 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0x61, 0x1b, 0x0a, 0x60, 0x01, | ||
| 405 | 0xaa, 0x21, 0x1c, 0xd2, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, | ||
| 406 | 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1c, | ||
| 407 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 408 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 409 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 410 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 411 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 412 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 413 | 0x76, 0x08, 0x41, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 414 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 415 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 416 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x62, 0x0c, | ||
| 417 | 0x11, 0x84, 0x31, 0x74, 0x06, 0x02, 0xe6, 0x08, 0xc0, 0x20, 0x05, 0xd4, | ||
| 418 | 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x04, 0xc2, 0x30, 0x02, 0xa1, 0x8c, 0x00, | ||
| 419 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 420 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 421 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 422 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 423 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 424 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 425 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 426 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 427 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 428 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 429 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 430 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 431 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 432 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 433 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 434 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 435 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 436 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 437 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 438 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 439 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 440 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 441 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 442 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 443 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 444 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 445 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 446 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 447 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 448 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, | ||
| 449 | 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, | ||
| 450 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, | ||
| 451 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x52, 0x25, 0x50, 0x04, | ||
| 452 | 0x23, 0x00, 0x05, 0x18, 0x50, 0x08, 0x65, 0x50, 0x20, 0x05, 0x41, 0x6c, | ||
| 453 | 0x04, 0x80, 0xd6, 0x58, 0x82, 0x24, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 454 | 0x00, 0x06, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, | ||
| 455 | 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x86, 0x22, | ||
| 456 | 0x24, 0xc0, 0xa2, 0x50, 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, | ||
| 457 | 0xd3, 0x2b, 0x1b, 0x62, 0x28, 0x41, 0x22, 0x28, 0x05, 0xe3, 0x20, 0x08, | ||
| 458 | 0x0e, 0x8e, 0xad, 0x0c, 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, | ||
| 459 | 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, | ||
| 460 | 0x85, 0x06, 0x86, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, | ||
| 461 | 0xac, 0x65, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, | ||
| 462 | 0x88, 0x90, 0x10, 0x43, 0x0c, 0x25, 0x50, 0x10, 0x65, 0x60, 0xd1, 0x54, | ||
| 463 | 0x46, 0x17, 0xc6, 0x36, 0x04, 0x49, 0x0e, 0x25, 0x50, 0x02, 0x65, 0xe0, | ||
| 464 | 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, | ||
| 465 | 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, | ||
| 466 | 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 467 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 468 | 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, | ||
| 469 | 0x43, 0x84, 0x64, 0x21, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, | ||
| 470 | 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, | ||
| 471 | 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, | ||
| 472 | 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x92, 0x86, 0x4c, 0x58, 0x9a, | ||
| 473 | 0x9c, 0x0b, 0xdc, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0x1b, 0xa3, 0xb0, | ||
| 474 | 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, | ||
| 475 | 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x64, | ||
| 476 | 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xdc, 0xc2, 0xda, 0xca, | ||
| 477 | 0x88, 0xc0, 0xbd, 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x51, 0x92, | ||
| 478 | 0x27, 0x81, 0x92, 0x28, 0x91, 0x92, 0x89, 0x51, 0x58, 0x9a, 0x9c, 0x8b, | ||
| 479 | 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0xde, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, | ||
| 480 | 0x1d, 0xad, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0x32, 0x32, 0x94, | ||
| 481 | 0x9a, 0xb1, 0x37, 0xb6, 0x37, 0x39, 0x22, 0x3b, 0x9a, 0x2f, 0xb3, 0x14, | ||
| 482 | 0x16, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x43, 0x98, 0xa4, 0x4a, 0xac, 0x04, | ||
| 483 | 0x4a, 0xa2, 0x44, 0x4a, 0x2e, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, | ||
| 484 | 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, | ||
| 485 | 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x34, 0xcc, 0xd8, 0xde, 0xc2, | ||
| 486 | 0xe8, 0x64, 0x88, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x0d, | ||
| 487 | 0x61, 0x92, 0x2a, 0xc9, 0x12, 0x28, 0xd1, 0x12, 0x29, 0xd9, 0x86, 0x18, | ||
| 488 | 0x09, 0x95, 0x60, 0x09, 0x47, 0x28, 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, | ||
| 489 | 0x8e, 0xae, 0x0c, 0xef, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0x52, 0x58, | ||
| 490 | 0x9a, 0x9c, 0x0b, 0xdb, 0xdb, 0x58, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0x57, | ||
| 491 | 0x9a, 0x1b, 0x59, 0x19, 0x1e, 0xbd, 0xb3, 0x32, 0xb7, 0x32, 0xb9, 0x30, | ||
| 492 | 0xba, 0x32, 0x32, 0x94, 0xaf, 0xaf, 0xb0, 0x34, 0xb9, 0x2f, 0x38, 0xb6, | ||
| 493 | 0xb0, 0xb1, 0x32, 0xb4, 0x37, 0x36, 0xb2, 0x32, 0xb9, 0xaf, 0xaf, 0x94, | ||
| 494 | 0x21, 0x94, 0x32, 0x24, 0x5e, 0xf2, 0x29, 0x83, 0x12, 0x24, 0x60, 0x90, | ||
| 495 | 0x40, 0x89, 0x96, 0x48, 0xc9, 0x34, 0x84, 0x52, 0x82, 0xc4, 0x4b, 0x3e, | ||
| 496 | 0x25, 0x50, 0x82, 0x04, 0x0c, 0x12, 0x28, 0x89, 0x12, 0x29, 0xb9, 0x86, | ||
| 497 | 0x50, 0x8a, 0x90, 0x78, 0xc9, 0xa7, 0x08, 0x4a, 0x90, 0x80, 0x41, 0x02, | ||
| 498 | 0x25, 0x5a, 0x22, 0x25, 0x1b, 0x95, 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a, | ||
| 499 | 0x33, 0xb3, 0x32, 0x39, 0x3e, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, | ||
| 500 | 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x44, 0xc2, 0xd2, 0xe4, | ||
| 501 | 0x5c, 0xe4, 0xca, 0xc2, 0xc8, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, | ||
| 502 | 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1, | ||
| 503 | 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, | ||
| 504 | 0xfb, 0x0a, 0x63, 0x4b, 0x3b, 0x73, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x23, | ||
| 505 | 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x83, 0x47, 0x43, 0x05, 0x4e, 0xee, | ||
| 506 | 0x4d, 0xad, 0x6c, 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x18, 0x28, 0x46, | ||
| 507 | 0x42, 0x06, 0x49, 0x19, 0x28, 0x44, 0xf2, 0x29, 0x82, 0x12, 0x24, 0x66, | ||
| 508 | 0x90, 0x9c, 0x81, 0x42, 0x24, 0x68, 0xa0, 0x1c, 0x09, 0x94, 0xa4, 0x41, | ||
| 509 | 0x22, 0x25, 0x6a, 0xc0, 0x84, 0x4e, 0x2e, 0xcc, 0x6d, 0xce, 0xec, 0x4d, | ||
| 510 | 0xae, 0x6d, 0x08, 0x18, 0x28, 0x45, 0x42, 0x06, 0x49, 0x19, 0x28, 0x44, | ||
| 511 | 0xf2, 0x29, 0x86, 0x12, 0x24, 0x66, 0x90, 0x9c, 0x81, 0x42, 0x24, 0x68, | ||
| 512 | 0xa0, 0x1c, 0x09, 0x94, 0xa4, 0x41, 0x22, 0x25, 0x6c, 0x30, 0x44, 0x49, | ||
| 513 | 0xc2, 0x20, 0x11, 0x83, 0x64, 0x0c, 0x92, 0x35, 0x48, 0xda, 0x60, 0x88, | ||
| 514 | 0x81, 0x00, 0x49, 0x97, 0xb8, 0x01, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, | ||
| 515 | 0x37, 0xba, 0x32, 0x37, 0x3a, 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, | ||
| 516 | 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, | ||
| 517 | 0x41, 0x41, 0x43, 0x84, 0x24, 0x0e, 0x86, 0x18, 0x09, 0x1c, 0x24, 0x72, | ||
| 518 | 0xc0, 0x24, 0x43, 0x8c, 0x64, 0x0e, 0x92, 0x39, 0x60, 0x12, 0x86, 0x41, | ||
| 519 | 0x58, 0x9a, 0x5c, 0x4b, 0x18, 0x5b, 0x5a, 0xd8, 0x5c, 0xcb, 0xdc, 0xd8, | ||
| 520 | 0x1b, 0x5c, 0xd9, 0x1c, 0xca, 0x14, 0x11, 0xd3, 0xd7, 0xd0, 0x1b, 0x5c, | ||
| 521 | 0xde, 0x97, 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0x5e, 0xca, 0x10, 0x22, 0xb1, | ||
| 522 | 0x83, 0xa4, 0x0e, 0x68, 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, | ||
| 523 | 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0x84, 0xc9, 0x9d, 0xa1, | ||
| 524 | 0xd0, 0xa4, 0x0c, 0x31, 0x12, 0x3c, 0x48, 0xec, 0x20, 0xb9, 0x83, 0x21, | ||
| 525 | 0x42, 0x82, 0x07, 0xb4, 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, 0xd2, 0xc2, | ||
| 526 | 0xe6, 0x5a, 0xe6, 0xc6, 0xde, 0xe0, 0xca, 0x5a, 0xc2, 0xe4, 0xce, 0x50, | ||
| 527 | 0x66, 0x52, 0x86, 0x18, 0xc9, 0x1e, 0x24, 0x76, 0x90, 0xe8, 0xc1, 0x10, | ||
| 528 | 0x21, 0xd9, 0x83, 0x11, 0x11, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, | ||
| 529 | 0xb4, 0xc3, 0x3b, 0x90, 0x43, 0x3d, 0xb0, 0x43, 0x39, 0xb8, 0x81, 0x39, | ||
| 530 | 0xb0, 0x43, 0x38, 0x9c, 0xc3, 0x3c, 0x4c, 0x11, 0x82, 0x61, 0x84, 0xc2, | ||
| 531 | 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, | ||
| 532 | 0x0e, 0xf4, 0x30, 0x25, 0x28, 0x46, 0x2c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, | ||
| 533 | 0x06, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, | ||
| 534 | 0x25, 0x30, 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xec, 0x10, | ||
| 535 | 0x0e, 0xee, 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, 0x50, 0x0e, 0xbf, 0x60, | ||
| 536 | 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, | ||
| 537 | 0x64, 0xc4, 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x30, 0x0e, 0xef, 0xd0, | ||
| 538 | 0x0e, 0xf0, 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, 0xf0, 0x0e, 0xf0, 0x40, | ||
| 539 | 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, 0x06, 0x85, 0x71, 0x46, | ||
| 540 | 0x28, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6, 0x50, 0x0e, 0xf2, 0x40, | ||
| 541 | 0x0f, 0xe5, 0x80, 0x0f, 0x53, 0x82, 0x37, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 542 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 543 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 544 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 545 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 546 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 547 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 548 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 549 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 550 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 551 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 552 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 553 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 554 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 555 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 556 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 557 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 558 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 559 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 560 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 561 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 562 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 563 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 564 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 565 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 566 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 567 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 568 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 569 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 570 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 571 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 572 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 573 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 574 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 575 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 576 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 577 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 578 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 579 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 580 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 581 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 582 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 583 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 584 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 585 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 586 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 587 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 588 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 589 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 590 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 591 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 592 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 593 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 594 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 595 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 596 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 597 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 598 | 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x15, 0x11, | ||
| 599 | 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00, | ||
| 600 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 601 | 0x00, 0xe4, 0xc6, 0x22, 0x86, 0x61, 0x18, 0xc6, 0x22, 0x04, 0x41, 0x10, | ||
| 602 | 0xc6, 0x22, 0x82, 0x20, 0x08, 0x46, 0x00, 0x88, 0x95, 0x40, 0x19, 0x14, | ||
| 603 | 0x01, 0x8d, 0x19, 0x00, 0x12, 0x33, 0x00, 0x14, 0x66, 0x00, 0x66, 0x00, | ||
| 604 | 0x00, 0xe3, 0x11, 0x8c, 0x84, 0x49, 0x14, 0x94, 0xf1, 0x88, 0x87, 0xd2, | ||
| 605 | 0x28, 0x0a, 0xca, 0x20, 0xc3, 0x60, 0x30, 0x26, 0x04, 0xf2, 0x19, 0x8f, | ||
| 606 | 0x98, 0x30, 0xaf, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x49, 0x64, 0x42, 0x20, | ||
| 607 | 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x60, 0xdd, 0x18, 0x40, 0x14, 0x94, | ||
| 608 | 0x41, 0x06, 0xc6, 0xb9, 0x4c, 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, | ||
| 609 | 0x88, 0x4e, 0x0c, 0xd0, 0xc0, 0xa2, 0xa0, 0x0c, 0x32, 0x44, 0x53, 0x67, | ||
| 610 | 0x42, 0x20, 0x1f, 0x2b, 0x02, 0xf8, 0x8c, 0x47, 0x84, 0xc1, 0x19, 0xb4, | ||
| 611 | 0x01, 0x47, 0x41, 0x19, 0x64, 0x08, 0xb2, 0xcf, 0x82, 0x4a, 0x3e, 0x83, | ||
| 612 | 0x0c, 0x83, 0x26, 0x06, 0x16, 0x4c, 0xf2, 0xb1, 0x21, 0x80, 0xcf, 0x20, | ||
| 613 | 0x83, 0xd1, 0x99, 0x81, 0x05, 0x91, 0x7c, 0x6c, 0x08, 0xe0, 0x33, 0xc8, | ||
| 614 | 0x90, 0x80, 0x81, 0x1a, 0x58, 0xf0, 0xc8, 0xc7, 0x86, 0x00, 0x3e, 0xe3, | ||
| 615 | 0x11, 0x6e, 0x40, 0x07, 0x7a, 0x80, 0x06, 0x14, 0x94, 0x41, 0x86, 0xc0, | ||
| 616 | 0x0c, 0xd8, 0xc0, 0x02, 0x31, 0x90, 0xcf, 0x20, 0xc3, 0x70, 0x06, 0x6f, | ||
| 617 | 0x60, 0x01, 0x18, 0xc8, 0x67, 0x90, 0xa1, 0x48, 0x03, 0x39, 0xb0, 0xa0, | ||
| 618 | 0x93, 0xcf, 0x20, 0xc3, 0xb1, 0x06, 0x75, 0x60, 0x81, 0x26, 0x9f, 0x41, | ||
| 619 | 0x06, 0x3e, 0x78, 0x03, 0x3a, 0xb0, 0x2c, 0x90, 0xcf, 0x20, 0x83, 0x1f, | ||
| 620 | 0xc4, 0xc1, 0x1d, 0x98, 0x13, 0xc8, 0xc7, 0x92, 0x01, 0x3e, 0x16, 0x30, | ||
| 621 | 0xf0, 0xb1, 0x20, 0x81, 0x8f, 0x05, 0x08, 0x7c, 0x2c, 0x28, 0xe0, 0x33, | ||
| 622 | 0xdb, 0x90, 0x07, 0x01, 0x30, 0xdb, 0x10, 0x94, 0x42, 0x30, 0xdb, 0x10, | ||
| 623 | 0x94, 0x82, 0x90, 0x41, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 624 | 0x00, 0x5b, 0x8e, 0x20, 0xa0, 0x83, 0x23, 0x0f, 0x10, 0x3e, 0xd8, 0x72, | ||
| 625 | 0x0c, 0x01, 0x1d, 0x1c, 0x7c, 0x80, 0xe4, 0xc1, 0x96, 0xe3, 0x08, 0xe8, | ||
| 626 | 0xe0, 0xe0, 0x03, 0x24, 0x0f, 0xb6, 0x1c, 0x4c, 0x40, 0x07, 0x07, 0x1f, | ||
| 627 | 0x20, 0x79, 0xb0, 0xe5, 0x88, 0x02, 0x3a, 0x38, 0xf8, 0x00, 0xc9, 0x83, | ||
| 628 | 0x2d, 0x87, 0x15, 0xd0, 0xc1, 0x91, 0x07, 0x08, 0x1f, 0x6c, 0x39, 0xc6, | ||
| 629 | 0x20, 0xa0, 0x83, 0x23, 0x0f, 0x10, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 630 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 631 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 632 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xfd, 0x02, 0x00, | ||
| 633 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 634 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 635 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 636 | 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, | ||
| 637 | 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, | ||
| 638 | 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, | ||
| 639 | 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, | ||
| 640 | 0x00, 0x51, 0x18, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 641 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x8a, 0x08, 0x07, 0x78, | ||
| 642 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 643 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 644 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 645 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 646 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 647 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 648 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 649 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 650 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 651 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 652 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 653 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 654 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 655 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 656 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 657 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 658 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 659 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 660 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 661 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 662 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 663 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 664 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 665 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 666 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 667 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 668 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 669 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 670 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 671 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 672 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 673 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 674 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x6c, | ||
| 675 | 0xc2, 0x00, 0x2c, 0x40, 0x35, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, | ||
| 676 | 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, | ||
| 677 | 0x43, 0x1b, 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0x00, 0x00, | ||
| 678 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, | ||
| 679 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, | ||
| 680 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, | ||
| 681 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, | ||
| 682 | 0x4c, 0x10, 0x3c, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 683 | 0x67, 0x49, 0x53, 0x44, 0x09, 0x93, 0xcf, 0x1e, 0xc0, 0x40, 0x44, 0x9c, | ||
| 684 | 0xd3, 0x48, 0x13, 0xd0, 0x4c, 0x12, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, | ||
| 685 | 0x11, 0x06, 0xa1, 0x10, 0x21, 0x41, 0x54, 0x03, 0x01, 0x73, 0x04, 0x60, | ||
| 686 | 0x90, 0x02, 0x38, 0x47, 0x00, 0x0a, 0x83, 0x08, 0x80, 0x30, 0x8c, 0x30, | ||
| 687 | 0x00, 0xc3, 0x08, 0x04, 0x32, 0x02, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, | ||
| 688 | 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, | ||
| 689 | 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, | ||
| 690 | 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, 0x0e, 0x6d, 0x00, 0x0f, | ||
| 691 | 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 692 | 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, | ||
| 693 | 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, | ||
| 694 | 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, | ||
| 695 | 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, | ||
| 696 | 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, | ||
| 697 | 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, | ||
| 698 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 699 | 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 700 | 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, | ||
| 701 | 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0, 0x07, | ||
| 702 | 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30, 0x07, | ||
| 703 | 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, | ||
| 704 | 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, | ||
| 705 | 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, | ||
| 706 | 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0, 0x07, | ||
| 707 | 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, | ||
| 708 | 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, | ||
| 709 | 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90, 0x07, | ||
| 710 | 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, | ||
| 711 | 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, | ||
| 712 | 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, | ||
| 713 | 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, | ||
| 714 | 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20, 0x07, | ||
| 715 | 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, | ||
| 716 | 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, | ||
| 717 | 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x03, 0x00, 0x80, 0x00, | ||
| 718 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 719 | 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 720 | 0x47, 0xc6, 0x04, 0x43, 0xc2, 0x11, 0x80, 0x42, 0x28, 0x81, 0x22, 0x28, | ||
| 721 | 0x88, 0x02, 0x2a, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0xd2, 0xc2, | ||
| 722 | 0x19, 0x01, 0x28, 0x8c, 0x42, 0x28, 0x88, 0x02, 0x29, 0x94, 0x82, 0xa1, | ||
| 723 | 0x1c, 0x4b, 0x90, 0x04, 0x00, 0x79, 0x18, 0x00, 0x00, 0x27, 0x01, 0x00, | ||
| 724 | 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, | ||
| 725 | 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x06, 0x42, 0x1c, 0x40, 0x42, 0x51, | ||
| 726 | 0xb9, 0x1b, 0x43, 0x0b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, | ||
| 727 | 0x20, 0xc3, 0x21, 0x20, 0x02, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, | ||
| 728 | 0xa4, 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, | ||
| 729 | 0xcd, 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, | ||
| 730 | 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, | ||
| 731 | 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x70, 0x10, 0x43, | ||
| 732 | 0x0c, 0x64, 0x40, 0x0a, 0x24, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, | ||
| 733 | 0x04, 0x39, 0x0e, 0x64, 0x40, 0x06, 0x24, 0xe0, 0x16, 0x96, 0x26, 0xe7, | ||
| 734 | 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, | ||
| 735 | 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, | ||
| 736 | 0x44, 0x38, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, | ||
| 737 | 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, | ||
| 738 | 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x63, 0x21, | ||
| 739 | 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, | ||
| 740 | 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, | ||
| 741 | 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89, 0xb1, | ||
| 742 | 0x95, 0x0d, 0x11, 0x8e, 0x86, 0x51, 0x58, 0x9a, 0x9c, 0x8b, 0x5c, 0x99, | ||
| 743 | 0x1b, 0x59, 0x99, 0xdc, 0x17, 0x5d, 0x98, 0xdc, 0x59, 0x19, 0x1d, 0xa3, | ||
| 744 | 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, | ||
| 745 | 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, | ||
| 746 | 0x43, 0x90, 0xe3, 0x41, 0x82, 0x03, 0x3a, 0xa2, 0x21, 0xc2, 0x21, 0x51, | ||
| 747 | 0x0a, 0x4b, 0x93, 0x73, 0x31, 0x93, 0x0b, 0x3b, 0x6b, 0x2b, 0x73, 0xa3, | ||
| 748 | 0xfb, 0x4a, 0x73, 0x83, 0xab, 0xa3, 0x63, 0x76, 0x56, 0xe6, 0x56, 0x26, | ||
| 749 | 0x17, 0x46, 0x57, 0x46, 0x86, 0x82, 0x03, 0xf7, 0x36, 0x97, 0x46, 0x97, | ||
| 750 | 0xf6, 0xe6, 0x46, 0x64, 0x27, 0xf3, 0x65, 0x96, 0x42, 0x25, 0x2c, 0x4d, | ||
| 751 | 0xce, 0x65, 0xac, 0xcc, 0x8d, 0xae, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, | ||
| 752 | 0x0b, 0x5c, 0x99, 0xdc, 0x1c, 0x5c, 0xd9, 0x18, 0x5d, 0x9a, 0x5d, 0x19, | ||
| 753 | 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x32, 0x61, 0x69, 0x72, 0x2e, | ||
| 754 | 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, | ||
| 755 | 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x48, 0x48, 0x70, 0x50, 0x47, 0x75, | ||
| 756 | 0x58, 0xc7, 0x75, 0x40, 0x07, 0x76, 0x64, 0x87, 0x46, 0xeb, 0xac, 0xcc, | ||
| 757 | 0xad, 0x4c, 0x2e, 0x8c, 0xae, 0x8c, 0x0c, 0xa5, 0x66, 0xec, 0x8d, 0xed, | ||
| 758 | 0x4d, 0x8e, 0xc8, 0x8e, 0xe6, 0xcb, 0x2c, 0x85, 0xc5, 0xd8, 0x1b, 0xdb, | ||
| 759 | 0x9b, 0xdc, 0x10, 0x09, 0x19, 0x0e, 0xea, 0xe0, 0x0e, 0xeb, 0xb8, 0x0e, | ||
| 760 | 0xe8, 0x88, 0x8e, 0xec, 0xe8, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, | ||
| 761 | 0x99, 0x99, 0x95, 0xc9, 0xf1, 0x09, 0x4b, 0x93, 0x73, 0x11, 0xab, 0x33, | ||
| 762 | 0x33, 0x2b, 0x93, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0xa3, 0x14, 0x96, 0x26, | ||
| 763 | 0xe7, 0xc2, 0xf6, 0x36, 0x16, 0x46, 0x97, 0xf6, 0xe6, 0xf6, 0x95, 0xe6, | ||
| 764 | 0x46, 0x56, 0x86, 0x47, 0x24, 0x2c, 0x4d, 0xce, 0x45, 0xae, 0x2c, 0x8c, | ||
| 765 | 0x8c, 0x54, 0x58, 0x9a, 0x9c, 0xcb, 0x1c, 0x9d, 0x5c, 0xdd, 0x18, 0xdd, | ||
| 766 | 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x9a, 0x9b, 0xd9, 0x1b, 0x0b, 0x33, | ||
| 767 | 0xb6, 0xb7, 0x30, 0x3a, 0x32, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, | ||
| 768 | 0x75, 0x74, 0x70, 0x75, 0x74, 0x64, 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, | ||
| 769 | 0xca, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xa8, 0xa4, 0xb9, 0xc1, 0xd5, 0xd1, | ||
| 770 | 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x71, 0x19, 0x7b, 0x63, 0x7b, 0x93, 0xfb, | ||
| 771 | 0x9a, 0x1b, 0x0b, 0x63, 0x2b, 0xa3, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16, | ||
| 772 | 0x06, 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0xc6, 0x87, 0xee, 0xcd, | ||
| 773 | 0xad, 0xac, 0x2d, 0x0c, 0xee, 0xcb, 0x2c, 0x6c, 0x8c, 0xee, 0x4d, 0x2e, | ||
| 774 | 0x86, 0x0f, 0xdd, 0x9b, 0x5b, 0x59, 0x5b, 0x18, 0xdc, 0x97, 0x59, 0xd8, | ||
| 775 | 0x18, 0xdd, 0x9b, 0x9c, 0x0c, 0x9f, 0x39, 0x32, 0xb9, 0xaf, 0x3b, 0xb4, | ||
| 776 | 0x34, 0xba, 0xb2, 0x2f, 0xb8, 0xb7, 0x34, 0x37, 0xba, 0x21, 0xb0, 0x80, | ||
| 777 | 0x04, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x65, 0x80, 0x08, 0x88, 0x80, | ||
| 778 | 0x04, 0x07, 0x19, 0x1c, 0x66, 0x80, 0x14, 0x88, 0x80, 0x04, 0x07, 0x19, | ||
| 779 | 0x1c, 0x67, 0x80, 0x1c, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x68, 0x80, | ||
| 780 | 0x20, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x69, 0x80, 0x24, 0x88, 0x80, | ||
| 781 | 0x04, 0x07, 0x19, 0x1c, 0x6a, 0x80, 0x28, 0x88, 0x80, 0x04, 0x07, 0x19, | ||
| 782 | 0x1c, 0x6b, 0x80, 0x2c, 0x88, 0x80, 0x04, 0x07, 0x19, 0x1c, 0x6c, 0xc0, | ||
| 783 | 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, | ||
| 784 | 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, | ||
| 785 | 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, | ||
| 786 | 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x9f, 0x29, 0xb4, 0x30, 0xb2, 0x32, | ||
| 787 | 0xb9, 0xa1, 0x37, 0xb7, 0x39, 0xba, 0x30, 0x37, 0xba, 0x39, 0x06, 0x63, | ||
| 788 | 0x43, 0xc8, 0x00, 0x21, 0x8e, 0xef, 0x00, 0x03, 0xc4, 0x38, 0xc2, 0x00, | ||
| 789 | 0x09, 0x90, 0xe1, 0x10, 0x83, 0x63, 0x0c, 0x8e, 0x36, 0x38, 0xdc, 0x00, | ||
| 790 | 0x31, 0x8e, 0x37, 0x40, 0x84, 0x03, 0x3a, 0xe0, 0xe0, 0xc8, 0x8e, 0x38, | ||
| 791 | 0x18, 0x62, 0x1c, 0xdb, 0xe1, 0x1d, 0x72, 0x30, 0xc4, 0x30, 0x80, 0x63, | ||
| 792 | 0x3a, 0xe6, 0x80, 0xd5, 0x97, 0x16, 0xd5, 0x54, 0x4c, 0xcd, 0x14, 0x5a, | ||
| 793 | 0x18, 0x59, 0x99, 0xdc, 0xd0, 0x9b, 0xdb, 0x1c, 0x5d, 0x98, 0x1b, 0xdd, | ||
| 794 | 0x1c, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, 0x37, 0xba, 0x32, 0x37, 0x3a, | ||
| 795 | 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, | ||
| 796 | 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x43, 0x84, 0xe3, | ||
| 797 | 0x0e, 0x86, 0x18, 0x87, 0x1d, 0x1c, 0x78, 0xa0, 0x34, 0x43, 0x8c, 0x83, | ||
| 798 | 0x0c, 0x8e, 0x3c, 0x50, 0x9a, 0x21, 0x62, 0x70, 0xd4, 0xc1, 0xa1, 0x07, | ||
| 799 | 0x4a, 0x73, 0xe8, 0x81, 0xf2, 0x1c, 0x7a, 0xa0, 0x40, 0x87, 0x1e, 0x28, | ||
| 800 | 0xce, 0xa1, 0x07, 0x4a, 0x74, 0xe8, 0x81, 0x22, 0x1d, 0x7a, 0xa0, 0x4c, | ||
| 801 | 0x87, 0x1e, 0x28, 0xcc, 0x10, 0xe3, 0xd8, 0x83, 0x43, 0x0f, 0x14, 0x87, | ||
| 802 | 0x64, 0x10, 0x96, 0x26, 0xd7, 0x12, 0xc6, 0x96, 0x16, 0x36, 0xd7, 0x32, | ||
| 803 | 0x37, 0xf6, 0x06, 0x57, 0x36, 0x87, 0x32, 0x45, 0xc4, 0xf4, 0x35, 0xf5, | ||
| 804 | 0xc6, 0x96, 0x46, 0xf6, 0x65, 0x26, 0x17, 0x76, 0xd6, 0x56, 0xe6, 0x46, | ||
| 805 | 0x97, 0x32, 0x84, 0x38, 0xfc, 0xe0, 0xe8, 0x03, 0x5a, 0x61, 0x69, 0x72, | ||
| 806 | 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, | ||
| 807 | 0x2d, 0x61, 0x72, 0x67, 0x28, 0x32, 0x29, 0x43, 0x8c, 0x03, 0x14, 0x0e, | ||
| 808 | 0x3f, 0x38, 0xfe, 0x60, 0x88, 0x70, 0x80, 0xc2, 0x88, 0x88, 0x1d, 0xd8, | ||
| 809 | 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8, 0xa1, 0x1e, 0xd8, | ||
| 810 | 0xa1, 0x1c, 0xdc, 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0x61, 0x1e, 0xa6, | ||
| 811 | 0x08, 0xc1, 0x30, 0x42, 0x61, 0x07, 0x76, 0xb0, 0x87, 0x76, 0x70, 0x83, | ||
| 812 | 0x74, 0x20, 0x87, 0x72, 0x70, 0x07, 0x7a, 0x98, 0x12, 0x14, 0x23, 0x96, | ||
| 813 | 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, | ||
| 814 | 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x18, 0x23, 0xa8, 0x70, 0x48, 0x07, | ||
| 815 | 0x79, 0x70, 0x03, 0x76, 0x08, 0x07, 0x77, 0x38, 0x87, 0x7a, 0x08, 0x87, | ||
| 816 | 0x73, 0x28, 0x87, 0x5f, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, | ||
| 817 | 0x77, 0x70, 0x87, 0x29, 0x01, 0x32, 0x62, 0x0a, 0x87, 0x74, 0x90, 0x07, | ||
| 818 | 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x87, | ||
| 819 | 0x5f, 0x78, 0x07, 0x78, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x87, | ||
| 820 | 0x29, 0x83, 0xc2, 0x38, 0x23, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, | ||
| 821 | 0x73, 0x90, 0x87, 0x70, 0x38, 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, | ||
| 822 | 0x29, 0x01, 0x1d, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 823 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 824 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 825 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 826 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 827 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 828 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 829 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 830 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 831 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 832 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 833 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 834 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 835 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 836 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 837 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 838 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 839 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 840 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 841 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 842 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 843 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 844 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 845 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 846 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 847 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 848 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 849 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 850 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 851 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 852 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 853 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 854 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 855 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 856 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 857 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 858 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 859 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 860 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 861 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 862 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 863 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 864 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 865 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 866 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 867 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 868 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 869 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 870 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 871 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 872 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 873 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 874 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 875 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 876 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 877 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 878 | 0x00, 0x71, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x20, 0xb1, | ||
| 879 | 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, | ||
| 880 | 0x13, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 881 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 882 | 0x00, 0xd4, 0x73, 0x10, 0x41, 0x10, 0x68, 0x84, 0x65, 0x30, 0x03, 0x40, | ||
| 883 | 0x3c, 0x03, 0x40, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x00, 0x00, | ||
| 884 | 0x00, 0xe3, 0x0d, 0x06, 0x44, 0x50, 0x30, 0xe6, 0x18, 0x88, 0xc0, 0x1b, | ||
| 885 | 0x64, 0x08, 0x0a, 0x64, 0x8e, 0x21, 0x28, 0x10, 0x0b, 0x18, 0xf9, 0x64, | ||
| 886 | 0x10, 0x10, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x8a, 0x20, | ||
| 887 | 0xe0, 0x83, 0x23, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 888 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 889 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 890 | 0x00, 0x88, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 891 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 892 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 893 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 894 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 895 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 896 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 897 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, | ||
| 898 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 899 | 0x00, 0xef, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 900 | 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, | ||
| 901 | 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, | ||
| 902 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 903 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, | ||
| 904 | 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, | ||
| 905 | 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, | ||
| 906 | 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, | ||
| 907 | 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, | ||
| 908 | 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, | ||
| 909 | 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, | ||
| 910 | 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, | ||
| 911 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 912 | 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, | ||
| 913 | 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, | ||
| 914 | 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 915 | 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 916 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, | ||
| 917 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 918 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 919 | 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, | ||
| 920 | 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, | ||
| 921 | 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, | ||
| 922 | 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, | ||
| 923 | 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, | ||
| 924 | 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, | ||
| 925 | 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, | ||
| 926 | 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 927 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, | ||
| 928 | 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, | ||
| 929 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, | ||
| 930 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, | ||
| 931 | 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 932 | 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, | ||
| 933 | 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0xc3, 0x26, 0x10, 0xc0, | ||
| 934 | 0x02, 0x54, 0x43, 0x38, 0xa4, 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, | ||
| 935 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, | ||
| 936 | 0x38, 0xb0, 0x43, 0x3a, 0x84, 0xc3, 0x3c, 0x00, 0x1b, 0x8c, 0xa1, 0x00, | ||
| 937 | 0x16, 0xa0, 0xda, 0x60, 0x10, 0x06, 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0xf8, | ||
| 938 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0x83, 0x8f, 0x18, 0xff, | ||
| 939 | 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, 0x0f, 0xf0, | ||
| 940 | 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, 0x0e, 0xe3, | ||
| 941 | 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, | ||
| 942 | 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, | ||
| 943 | 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, | ||
| 944 | 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, 0xdc, 0x43, | ||
| 945 | 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x90, 0x07, 0x76, 0x00, 0x0c, 0xee, | ||
| 946 | 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, 0x90, 0x0e, 0xec, 0x40, 0x0f, 0xe9, | ||
| 947 | 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, | ||
| 948 | 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, | ||
| 949 | 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, | ||
| 950 | 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, | ||
| 951 | 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, | ||
| 952 | 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, | ||
| 953 | 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, | ||
| 954 | 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, | ||
| 955 | 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, | ||
| 956 | 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, | ||
| 957 | 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, | ||
| 958 | 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, | ||
| 959 | 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, | ||
| 960 | 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, | ||
| 961 | 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, | ||
| 962 | 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, | ||
| 963 | 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, | ||
| 964 | 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, 0xa4, 0x83, | ||
| 965 | 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, | ||
| 966 | 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, | ||
| 967 | 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, | ||
| 968 | 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, | ||
| 969 | 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, | ||
| 970 | 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, 0x94, 0x43, | ||
| 971 | 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, | ||
| 972 | 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x40, 0x8e, 0xff, 0xff, | ||
| 973 | 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83, 0x81, 0x04, 0xc0, | ||
| 974 | 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0xda, 0x80, 0x28, 0xff, | ||
| 975 | 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, 0x63, 0xf9, | ||
| 976 | 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0xc3, 0xc4, 0xfc, 0xff, | ||
| 977 | 0xff, 0xff, 0xff, 0x00, 0x28, 0x80, 0x34, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, | ||
| 978 | 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, 0x3d, 0xa4, 0x83, 0x3b, 0xcc, 0x03, | ||
| 979 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, | ||
| 980 | 0x18, 0x88, 0x09, 0x41, 0x31, 0x21, 0x30, 0x26, 0x0c, 0x07, 0x92, 0x4c, | ||
| 981 | 0x18, 0x14, 0x24, 0x99, 0x10, 0x2c, 0x13, 0x02, 0x06, 0x89, 0x20, 0x00, | ||
| 982 | 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, | ||
| 983 | 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, | ||
| 984 | 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x9c, 0xc1, | ||
| 985 | 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, | ||
| 986 | 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, | ||
| 987 | 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, | ||
| 988 | 0x41, 0x38, 0x4a, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, | ||
| 989 | 0x8a, 0x88, 0xdf, 0x1e, 0xfe, 0x69, 0x8c, 0x00, 0x18, 0x44, 0x28, 0x82, | ||
| 990 | 0x8b, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x25, 0x80, 0x79, 0x16, 0x22, | ||
| 991 | 0xfa, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x10, 0xca, 0x11, 0x04, 0x81, | ||
| 992 | 0x40, 0x18, 0x08, 0x25, 0xc3, 0x08, 0x03, 0x50, 0x88, 0x65, 0x59, 0x16, | ||
| 993 | 0x62, 0xca, 0x00, 0x00, 0x00, 0x39, 0x45, 0x00, 0x00, 0x82, 0xca, 0x00, | ||
| 994 | 0x2c, 0x0b, 0x49, 0xc5, 0x58, 0x16, 0x00, 0x00, 0x00, 0xa2, 0xca, 0xb0, | ||
| 995 | 0x2c, 0x0b, 0x59, 0x45, 0x58, 0x16, 0xc2, 0xe6, 0x08, 0x82, 0x39, 0x02, | ||
| 996 | 0x30, 0x18, 0x46, 0x10, 0xb6, 0x82, 0x04, 0x06, 0x22, 0x68, 0x9c, 0x06, | ||
| 997 | 0x50, 0x37, 0x10, 0x90, 0x02, 0xdb, 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x00, | ||
| 998 | 0xc2, 0x14, 0xc0, 0x08, 0xc0, 0x30, 0xc2, 0xb0, 0x0d, 0x23, 0x10, 0x1b, | ||
| 999 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 1000 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 1001 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 1002 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1003 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 1004 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 1005 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 1006 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 1007 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 1008 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 1009 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1010 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1011 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 1012 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 1013 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 1014 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1015 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 1016 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 1017 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 1018 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 1019 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 1020 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 1021 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 1022 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 1023 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 1024 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 1025 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 1026 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 1027 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 1028 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, | ||
| 1029 | 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x4c, 0x03, | ||
| 1030 | 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xe6, 0x01, 0x02, | ||
| 1031 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x13, 0x01, 0x01, 0x20, | ||
| 1032 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0x99, 0x80, 0x00, 0x10, 0x00, | ||
| 1033 | 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x54, 0x08, 0x30, 0x0c, 0x00, 0x00, | ||
| 1034 | 0x00, 0x01, 0x00, 0x0c, 0x61, 0x1e, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 1035 | 0x00, 0x00, 0x86, 0x30, 0x17, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, | ||
| 1036 | 0x00, 0x43, 0x98, 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, | ||
| 1037 | 0x21, 0xcc, 0x05, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, | ||
| 1038 | 0xc6, 0x03, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, | ||
| 1039 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, | ||
| 1040 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xda, 0x46, 0x00, 0x0a, | ||
| 1041 | 0xa1, 0x04, 0x8a, 0xa0, 0x20, 0x0a, 0xa8, 0x0c, 0x0a, 0xa3, 0x40, 0x0a, | ||
| 1042 | 0xa5, 0x60, 0x0a, 0xa7, 0x14, 0x28, 0x2c, 0x9c, 0x11, 0x80, 0x42, 0x28, | ||
| 1043 | 0x88, 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x02, 0xc7, 0x12, 0x24, 0x01, | ||
| 1044 | 0x00, 0x79, 0x18, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 1045 | 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, | ||
| 1046 | 0xb7, 0x21, 0xc6, 0xe6, 0x7c, 0x00, 0x18, 0x80, 0x01, 0x95, 0xbb, 0x31, | ||
| 1047 | 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0xc6, 0xd6, 0x7c, | ||
| 1048 | 0xc2, 0xc6, 0x30, 0x0e, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0xda, 0xca, | ||
| 1049 | 0xe8, 0xc2, 0xd8, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, | ||
| 1050 | 0x66, 0x64, 0x60, 0x64, 0x66, 0x5c, 0x68, 0x60, 0x68, 0x40, 0x50, 0xda, | ||
| 1051 | 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x66, 0x64, 0x60, 0x64, 0x66, | ||
| 1052 | 0x5c, 0x68, 0x60, 0x68, 0x52, 0x86, 0x08, 0x1f, 0x31, 0xc4, 0xd8, 0x9a, | ||
| 1053 | 0xed, 0xd9, 0x16, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xef, | ||
| 1054 | 0xd8, 0x9a, 0xad, 0xd9, 0x16, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, | ||
| 1055 | 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, | ||
| 1056 | 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x2f, | ||
| 1057 | 0x21, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, | ||
| 1058 | 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, | ||
| 1059 | 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xf8, 0x16, 0x92, 0x41, 0x58, | ||
| 1060 | 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, | ||
| 1061 | 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, | ||
| 1062 | 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10, | ||
| 1063 | 0xe1, 0x6b, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0xc8, 0x95, 0xb9, 0x91, 0x95, | ||
| 1064 | 0xc9, 0x7d, 0xd1, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x31, 0x0a, 0x4b, 0x93, | ||
| 1065 | 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x72, 0x0b, | ||
| 1066 | 0x6b, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x33, 0x04, 0xf9, | ||
| 1067 | 0x9e, 0x6d, 0xf9, 0xa0, 0x2f, 0x1a, 0x22, 0x7c, 0x12, 0x99, 0xb0, 0x34, | ||
| 1068 | 0x39, 0x17, 0xb8, 0xb7, 0xb9, 0x34, 0xba, 0xb4, 0x37, 0x37, 0x2a, 0x61, | ||
| 1069 | 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x94, 0xc2, 0xd2, | ||
| 1070 | 0xe4, 0x5c, 0xdc, 0xde, 0xbe, 0xe0, 0xca, 0xe4, 0xe6, 0xe0, 0xca, 0xc6, | ||
| 1071 | 0xe8, 0xd2, 0xec, 0xca, 0xc8, 0x84, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, | ||
| 1072 | 0x7d, 0xb9, 0x85, 0xb5, 0x95, 0x11, 0x81, 0x7b, 0x9b, 0x4b, 0xa3, 0x4b, | ||
| 1073 | 0x7b, 0x73, 0x1b, 0x02, 0x6d, 0xcb, 0x47, 0x7d, 0xd5, 0x67, 0x7d, 0xd0, | ||
| 1074 | 0x17, 0x7d, 0xd7, 0x87, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x31, 0x93, 0x0b, | ||
| 1075 | 0x3b, 0x6b, 0x2b, 0x73, 0xa3, 0xfb, 0x4a, 0x73, 0x83, 0xab, 0xa3, 0xa3, | ||
| 1076 | 0x75, 0x56, 0xe6, 0x56, 0x26, 0x17, 0x46, 0x57, 0x46, 0x86, 0x52, 0x33, | ||
| 1077 | 0xf6, 0xc6, 0xf6, 0x26, 0x47, 0x64, 0x47, 0xf3, 0x65, 0x96, 0xc2, 0x27, | ||
| 1078 | 0x2c, 0x4d, 0xce, 0x05, 0xae, 0x4c, 0x6e, 0x0e, 0xae, 0x6c, 0x8c, 0x2e, | ||
| 1079 | 0xcd, 0xae, 0x8c, 0xc5, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0x10, 0x69, 0x6b, | ||
| 1080 | 0x3e, 0xed, 0xdb, 0xbe, 0xea, 0xe3, 0x3e, 0xe8, 0x8b, 0xbe, 0xeb, 0xeb, | ||
| 1081 | 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, | ||
| 1082 | 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, | ||
| 1083 | 0x99, 0xa5, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x93, 0x21, 0x42, 0x57, | ||
| 1084 | 0x86, 0x37, 0xf6, 0xf6, 0x26, 0x47, 0x36, 0x44, 0xda, 0x9c, 0x4f, 0xfb, | ||
| 1085 | 0xbe, 0xaf, 0xfa, 0xb8, 0x0f, 0xfa, 0xc0, 0xe0, 0xbb, 0xbe, 0x30, 0xa0, | ||
| 1086 | 0x12, 0x96, 0x26, 0xe7, 0x22, 0x56, 0x67, 0x66, 0x56, 0x26, 0xc7, 0x27, | ||
| 1087 | 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0xee, 0x6b, 0x2e, | ||
| 1088 | 0x4d, 0xaf, 0x8c, 0x52, 0x58, 0x9a, 0x9c, 0x0b, 0xdb, 0xdb, 0x58, 0x18, | ||
| 1089 | 0x5d, 0xda, 0x9b, 0xdb, 0x57, 0x9a, 0x1b, 0x59, 0x19, 0x1e, 0x91, 0xb0, | ||
| 1090 | 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x52, 0x61, 0x69, 0x72, 0x2e, | ||
| 1091 | 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, | ||
| 1092 | 0x69, 0x6e, 0x66, 0x6f, 0x2c, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0xc8, 0xcc, | ||
| 1093 | 0x8d, 0x49, 0x1d, 0x09, 0x7d, 0xbd, 0xd5, 0xd1, 0xc1, 0xd5, 0xd1, 0x91, | ||
| 1094 | 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, | ||
| 1095 | 0xa3, 0x92, 0xe6, 0x06, 0x57, 0x47, 0xf7, 0x45, 0x97, 0x07, 0x57, 0xc6, | ||
| 1096 | 0x65, 0xec, 0x8d, 0xed, 0x4d, 0xee, 0x6b, 0x6e, 0x2c, 0x8c, 0xad, 0x8c, | ||
| 1097 | 0x0e, 0xdd, 0x9b, 0x5b, 0x59, 0x5b, 0x18, 0xdc, 0x57, 0x5b, 0x19, 0x1d, | ||
| 1098 | 0xda, 0x1b, 0x19, 0x1f, 0xba, 0x37, 0xb7, 0xb2, 0xb6, 0x30, 0xb8, 0x2f, | ||
| 1099 | 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x18, 0x3e, 0x74, 0x6f, 0x6e, 0x65, | ||
| 1100 | 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x7c, | ||
| 1101 | 0xe6, 0xc8, 0xe4, 0xbe, 0xee, 0xd0, 0xd2, 0xe8, 0xca, 0xbe, 0xe0, 0xde, | ||
| 1102 | 0xd2, 0xdc, 0xe8, 0x86, 0xc0, 0xc2, 0xb6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, | ||
| 1103 | 0xf0, 0xa5, 0xc1, 0xc6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xa9, 0xc1, | ||
| 1104 | 0xf6, 0x6c, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xad, 0xc1, 0x26, 0x6d, 0xcc, | ||
| 1105 | 0xb6, 0x7c, 0x68, 0xf0, 0xb1, 0xc1, 0x36, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, | ||
| 1106 | 0xf0, 0xb5, 0xc1, 0x46, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xb9, 0xc1, | ||
| 1107 | 0x56, 0x6d, 0xcc, 0xb6, 0x7c, 0x68, 0xf0, 0xbd, 0xc1, 0x66, 0x6d, 0xcc, | ||
| 1108 | 0xb6, 0x7c, 0x68, 0xf0, 0xc1, 0x01, 0xa3, 0xb0, 0x34, 0x39, 0x97, 0x30, | ||
| 1109 | 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0xaf, 0xb9, 0x34, 0xbd, 0x32, | ||
| 1110 | 0x5e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, | ||
| 1111 | 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, | ||
| 1112 | 0x7c, 0xa6, 0xd0, 0xc2, 0xc8, 0xca, 0xe4, 0x86, 0xde, 0xdc, 0xe6, 0xe8, | ||
| 1113 | 0xc2, 0xdc, 0xe8, 0xe6, 0x18, 0x8c, 0x0d, 0x21, 0x83, 0x2d, 0xfa, 0xc6, | ||
| 1114 | 0xe0, 0x23, 0x83, 0x0d, 0xfa, 0xca, 0x60, 0x5b, 0xb6, 0xe6, 0x33, 0x83, | ||
| 1115 | 0xef, 0x0c, 0xbe, 0x38, 0xf8, 0xe4, 0x60, 0x83, 0xbe, 0x39, 0xd8, 0x98, | ||
| 1116 | 0x0f, 0xfa, 0xe8, 0xe0, 0xbb, 0xbe, 0x3a, 0xe0, 0x12, 0x96, 0x26, 0xe7, | ||
| 1117 | 0x42, 0x57, 0x86, 0x47, 0x57, 0x27, 0x57, 0x46, 0x25, 0x2c, 0x4d, 0xce, | ||
| 1118 | 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x8c, 0x18, 0x5d, 0x19, 0x1e, 0x5d, | ||
| 1119 | 0x9d, 0x5c, 0x99, 0x0c, 0x19, 0x8f, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0x0b, | ||
| 1120 | 0xc8, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x0f, 0x07, 0xba, 0x32, 0xbc, | ||
| 1121 | 0x21, 0xd4, 0xc6, 0x7c, 0x77, 0xf0, 0x95, 0xc1, 0xb6, 0x6c, 0xcd, 0x87, | ||
| 1122 | 0x07, 0x1f, 0xf4, 0xe5, 0xc1, 0x77, 0x7d, 0x7a, 0xc0, 0x25, 0x2c, 0x4d, | ||
| 1123 | 0xce, 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc7, 0x5c, 0x58, | ||
| 1124 | 0x1b, 0x1c, 0x5b, 0x99, 0x1c, 0x83, 0xb9, 0x21, 0xd2, 0x76, 0x7d, 0x7c, | ||
| 1125 | 0xf0, 0x95, 0xc1, 0xb6, 0x6c, 0xcd, 0x07, 0x7d, 0x7d, 0xf0, 0x5d, 0x9f, | ||
| 1126 | 0x1f, 0x0c, 0x61, 0xbe, 0xec, 0xf3, 0x3e, 0x31, 0xf8, 0xec, 0xe0, 0xdb, | ||
| 1127 | 0x83, 0xef, 0x0f, 0x86, 0x18, 0x0a, 0xf0, 0x4d, 0x1f, 0x28, 0x70, 0x0c, | ||
| 1128 | 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, 0xc6, | ||
| 1129 | 0xde, 0xe0, 0xca, 0xe6, 0x50, 0xa6, 0x88, 0x98, 0xbe, 0x86, 0xde, 0xe0, | ||
| 1130 | 0xf2, 0xbe, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0x52, 0x86, | ||
| 1131 | 0x10, 0xdf, 0x28, 0x7c, 0xa2, 0x40, 0x2c, 0x2c, 0x4d, 0xae, 0x25, 0x8c, | ||
| 1132 | 0x2d, 0x2d, 0x6c, 0xae, 0x65, 0x6e, 0xec, 0x0d, 0xae, 0xac, 0x85, 0xae, | ||
| 1133 | 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x6c, 0x6e, 0x88, 0xf1, 0x95, 0xc2, 0x37, | ||
| 1134 | 0x0a, 0x1f, 0x29, 0x10, 0x0b, 0x4b, 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, | ||
| 1135 | 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, 0x2b, 0x6b, 0x99, 0x0b, 0x6b, 0x83, | ||
| 1136 | 0x63, 0x2b, 0x93, 0x9b, 0x1b, 0x62, 0x7c, 0xa7, 0xf0, 0x8d, 0xc2, 0x67, | ||
| 1137 | 0x0a, 0x43, 0x88, 0xaf, 0x14, 0xbe, 0x53, 0xa0, 0x15, 0x96, 0x26, 0xd7, | ||
| 1138 | 0x12, 0xc6, 0x96, 0x16, 0x36, 0xd7, 0x32, 0x37, 0xf6, 0x06, 0x57, 0xd6, | ||
| 1139 | 0x12, 0x26, 0x77, 0x86, 0x32, 0x93, 0x32, 0xc4, 0xf8, 0x54, 0xe1, 0x1b, | ||
| 1140 | 0x85, 0x2f, 0x15, 0x86, 0x08, 0x9f, 0x2a, 0xb0, 0xfa, 0xd2, 0xa2, 0x9a, | ||
| 1141 | 0x8a, 0xa9, 0x99, 0x42, 0x0b, 0x23, 0x2b, 0x93, 0x1b, 0x7a, 0x73, 0x9b, | ||
| 1142 | 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0xe3, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, | ||
| 1143 | 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, | ||
| 1144 | 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, | ||
| 1145 | 0x28, 0x68, 0x88, 0xf0, 0xb9, 0xc2, 0x10, 0xe3, 0x6b, 0x85, 0xef, 0x15, | ||
| 1146 | 0xc2, 0x20, 0x1b, 0x62, 0x7c, 0x68, 0xf0, 0xc1, 0x42, 0x18, 0x64, 0x43, | ||
| 1147 | 0xc4, 0xe0, 0x63, 0x85, 0x2f, 0x16, 0xc2, 0x20, 0xfb, 0x62, 0x21, 0x0c, | ||
| 1148 | 0xb4, 0x2f, 0x16, 0xc2, 0x60, 0xfb, 0x62, 0x21, 0x0c, 0xb8, 0x2f, 0x16, | ||
| 1149 | 0xc2, 0xa0, 0xfb, 0x62, 0x21, 0x0c, 0xbc, 0x2f, 0x16, 0xc2, 0xe0, 0xfb, | ||
| 1150 | 0x62, 0x21, 0x0c, 0xb0, 0x21, 0xc6, 0x27, 0x0b, 0x5f, 0x2c, 0x84, 0xc1, | ||
| 1151 | 0x36, 0xc4, 0xf8, 0x64, 0xe1, 0x8b, 0x85, 0x30, 0xc0, 0x86, 0x18, 0x9f, | ||
| 1152 | 0x2c, 0x7c, 0xb1, 0x10, 0x06, 0xdd, 0x10, 0xe3, 0x93, 0x85, 0x2f, 0x16, | ||
| 1153 | 0xc2, 0xc0, 0x1b, 0x62, 0x7c, 0xb2, 0xf0, 0xc5, 0x42, 0x18, 0x7c, 0x43, | ||
| 1154 | 0x8c, 0x4f, 0x16, 0xbe, 0x58, 0x08, 0x03, 0x6d, 0x88, 0xf1, 0xc9, 0xc2, | ||
| 1155 | 0x17, 0x0b, 0x61, 0xc0, 0x0d, 0x31, 0x3e, 0x59, 0xf8, 0x62, 0x21, 0x0c, | ||
| 1156 | 0xb2, 0x11, 0x11, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0xb4, 0xc3, | ||
| 1157 | 0x3b, 0x90, 0x43, 0x3d, 0xb0, 0x43, 0x39, 0xb8, 0x81, 0x39, 0xb0, 0x43, | ||
| 1158 | 0x38, 0x9c, 0xc3, 0x3c, 0x4c, 0x11, 0x82, 0x61, 0x84, 0xc2, 0x0e, 0xec, | ||
| 1159 | 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x0e, 0xf4, | ||
| 1160 | 0x30, 0x25, 0x28, 0x46, 0x2c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6, | ||
| 1161 | 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x30, | ||
| 1162 | 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xec, 0x10, 0x0e, 0xee, | ||
| 1163 | 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, 0x50, 0x0e, 0xbf, 0x60, 0x0f, 0xe5, | ||
| 1164 | 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x64, 0xc4, | ||
| 1165 | 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x30, 0x0e, 0xef, 0xd0, 0x0e, 0xf0, | ||
| 1166 | 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, 0xf0, 0x0e, 0xf0, 0x40, 0x0f, 0xe9, | ||
| 1167 | 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, 0x06, 0x85, 0x71, 0x46, 0x30, 0xe1, | ||
| 1168 | 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0x70, 0x0e, 0xed, | ||
| 1169 | 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x50, 0x00, 0x79, 0x18, 0x00, | ||
| 1170 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 1171 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 1172 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 1173 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 1174 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 1175 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 1176 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 1177 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 1178 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 1179 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 1180 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 1181 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 1182 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 1183 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 1184 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 1185 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 1186 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 1187 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 1188 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 1189 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 1190 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 1191 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 1192 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 1193 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 1194 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 1195 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 1196 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 1197 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 1198 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 1199 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 1200 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 1201 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 1202 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 1203 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 1204 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 1205 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 1206 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 1207 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 1208 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 1209 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 1210 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 1211 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 1212 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 1213 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 1214 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 1215 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 1216 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 1217 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 1218 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 1219 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 1220 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 1221 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 1222 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 1223 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 1224 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 1225 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2e, 0x00, 0x00, | ||
| 1226 | 0x00, 0x06, 0x10, 0xb1, 0x5d, 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x45, 0x04, | ||
| 1227 | 0x18, 0x0c, 0xd1, 0x4c, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, 0xb3, | ||
| 1228 | 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, 0x51, | ||
| 1229 | 0x14, 0x46, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, | ||
| 1230 | 0xdb, 0xa6, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, | ||
| 1231 | 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, | ||
| 1232 | 0x08, 0x13, 0x80, 0x44, 0x7e, 0x01, 0x48, 0xd3, 0x5f, 0x00, 0x81, 0xe4, | ||
| 1233 | 0x57, 0x77, 0x71, 0xdb, 0x16, 0x40, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, | ||
| 1234 | 0xfd, 0xc2, 0x02, 0x30, 0x8f, 0x5f, 0xdd, 0xc5, 0x6d, 0x5b, 0xc2, 0x04, | ||
| 1235 | 0x20, 0x91, 0x5f, 0x00, 0xd2, 0xf4, 0x17, 0x0c, 0x70, 0xf9, 0xd5, 0x5d, | ||
| 1236 | 0xdc, 0xb6, 0x09, 0x40, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xff, 0xe3, | ||
| 1237 | 0x58, 0x7e, 0x71, 0xdb, 0x36, 0x10, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, | ||
| 1238 | 0xfd, 0x05, 0x10, 0x48, 0x7e, 0x71, 0xdb, 0x66, 0x10, 0x01, 0x48, 0xe4, | ||
| 1239 | 0x17, 0x80, 0x34, 0xfd, 0x05, 0x03, 0x5c, 0x7e, 0x71, 0xdb, 0x76, 0x20, | ||
| 1240 | 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x8f, 0x63, 0xf9, 0xd5, 0x5d, | ||
| 1241 | 0xdc, 0x36, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x9a, 0x01, 0x00, | ||
| 1242 | 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, 0x00, 0x51, 0x00, 0x00, | ||
| 1243 | 0x00, 0x64, 0x8e, 0x45, 0x00, 0x81, 0x70, 0xcc, 0x41, 0x2c, 0x8d, 0xd3, | ||
| 1244 | 0x06, 0x54, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xdc, 0x08, 0x00, | ||
| 1245 | 0x6d, 0xc5, 0x30, 0x03, 0x50, 0x0e, 0xa4, 0x8d, 0x00, 0xd4, 0x00, 0x01, | ||
| 1246 | 0x63, 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, 0xa0, 0xb3, 0xe6, 0x1c, | ||
| 1247 | 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x09, 0x06, 0x63, 0x04, 0x20, | ||
| 1248 | 0x08, 0x82, 0x20, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, 0x30, 0x03, 0x30, | ||
| 1249 | 0x07, 0x91, 0x0a, 0xaf, 0x90, 0x0a, 0x75, 0x40, 0xcb, 0x0c, 0xc0, 0x08, | ||
| 1250 | 0xc0, 0x0c, 0xc0, 0x58, 0x03, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, | ||
| 1251 | 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x8d, 0x35, 0xb0, 0xed, 0xfc, 0x93, | ||
| 1252 | 0x1e, 0xdb, 0xce, 0x3f, 0xe9, 0xb1, 0xed, 0xfc, 0x93, 0xde, 0x58, 0x03, | ||
| 1253 | 0x08, 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, | ||
| 1254 | 0xc8, 0xd6, 0xbf, 0x30, 0xd6, 0x00, 0x82, 0xe0, 0x9a, 0x83, 0x01, 0x08, | ||
| 1255 | 0x82, 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x8c, 0x35, 0x80, | ||
| 1256 | 0x20, 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, | ||
| 1257 | 0x6d, 0x0e, 0x06, 0x63, 0x0d, 0xeb, 0x88, 0xc7, 0x2c, 0x18, 0xac, 0x23, | ||
| 1258 | 0x1e, 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x58, 0x03, 0x08, | ||
| 1259 | 0xc2, 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, | ||
| 1260 | 0x87, 0x63, 0x30, 0xd6, 0x20, 0xe6, 0x62, 0xda, 0x7f, 0x60, 0xc9, 0xb3, | ||
| 1261 | 0xf1, 0x2f, 0x8c, 0xe9, 0xaa, 0xe6, 0xbe, 0x30, 0xd6, 0xf0, 0xcf, 0xa4, | ||
| 1262 | 0xff, 0xfb, 0x02, 0x5d, 0x83, 0x62, 0xfe, 0xb5, 0x70, 0x1c, 0x83, 0xbe, | ||
| 1263 | 0x30, 0xd6, 0x30, 0xf7, 0x6d, 0x9a, 0xfa, 0x42, 0xeb, 0x86, 0x3c, 0xef, | ||
| 1264 | 0x0b, 0x7c, 0xce, 0xfa, 0xf8, 0x47, 0xc0, 0x18, 0x81, 0xdb, 0xc7, 0xa2, | ||
| 1265 | 0xed, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0x79, 0xaf, | ||
| 1266 | 0xab, 0xec, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0xdb, | ||
| 1267 | 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, 0xf8, 0x37, 0x46, | ||
| 1268 | 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, 0xf6, 0x34, 0x18, | ||
| 1269 | 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
| 1270 | 0x00, 0x23, 0x06, 0x4a, 0x11, 0x98, 0xc2, 0x1a, 0xa8, 0x41, 0x1b, 0x80, | ||
| 1271 | 0x41, 0x19, 0x84, 0x41, 0x30, 0xde, 0xd0, 0x06, 0x78, 0x30, 0x0a, 0x14, | ||
| 1272 | 0x8c, 0xe1, 0x86, 0x00, 0x0c, 0x82, 0x59, 0x86, 0x40, 0x08, 0x06, 0x19, | ||
| 1273 | 0x08, 0x4f, 0x0d, 0xc6, 0x1b, 0xe2, 0x80, 0x0f, 0xce, 0x80, 0x82, 0x31, | ||
| 1274 | 0x62, 0x40, 0x18, 0xc1, 0x2b, 0x0c, 0x23, 0x06, 0x85, 0x11, 0xc4, 0x42, | ||
| 1275 | 0xb0, 0x59, 0xb0, 0xc1, 0x67, 0xc4, 0xa0, 0x30, 0x82, 0x58, 0x08, 0xc0, | ||
| 1276 | 0xc0, 0x06, 0x4e, 0x3e, 0xc6, 0x05, 0xf1, 0xb1, 0x21, 0xa0, 0xcf, 0x88, | ||
| 1277 | 0x01, 0x61, 0x04, 0xb6, 0x10, 0x8c, 0x18, 0x14, 0x46, 0x80, 0x0b, 0x81, | ||
| 1278 | 0x67, 0x81, 0x27, 0x9f, 0x39, 0x06, 0x34, 0x58, 0x6c, 0x61, 0x90, 0x21, | ||
| 1279 | 0x48, 0x83, 0x3c, 0xb0, 0x21, 0xa0, 0xcf, 0x20, 0x43, 0xb0, 0x06, 0x7c, | ||
| 1280 | 0x30, 0xc8, 0x10, 0x54, 0x7e, 0x30, 0x4b, 0x20, 0x0c, 0x54, 0x04, 0x42, | ||
| 1281 | 0xc0, 0x06, 0xc0, 0x78, 0xc3, 0x28, 0xb8, 0xc2, 0x2e, 0x50, 0x30, 0x86, | ||
| 1282 | 0x1b, 0x02, 0xcd, 0x99, 0x65, 0x18, 0x88, 0x60, 0x90, 0x81, 0xa0, 0x03, | ||
| 1283 | 0x50, 0x18, 0x6f, 0x38, 0x05, 0x59, 0xa0, 0x05, 0x0a, 0xc6, 0x78, 0x43, | ||
| 1284 | 0x2a, 0xd0, 0x42, 0x28, 0x50, 0x30, 0x46, 0x0c, 0x90, 0x23, 0x52, 0x87, | ||
| 1285 | 0xa2, 0x3b, 0x86, 0x60, 0x90, 0x21, 0xb8, 0x03, 0x54, 0x18, 0x64, 0x08, | ||
| 1286 | 0x16, 0x55, 0x98, 0x25, 0x20, 0x06, 0x2a, 0x02, 0x61, 0xc0, 0x84, 0xe1, | ||
| 1287 | 0x86, 0x30, 0x50, 0x83, 0x60, 0x96, 0xa1, 0x98, 0x82, 0xf1, 0x06, 0x58, | ||
| 1288 | 0xd8, 0x85, 0x73, 0xa0, 0x60, 0x0c, 0x37, 0x04, 0x6d, 0x10, 0xcc, 0x32, | ||
| 1289 | 0x18, 0x47, 0x30, 0xc8, 0x50, 0x84, 0x42, 0x2b, 0x8c, 0x37, 0xd0, 0xc2, | ||
| 1290 | 0x2f, 0x9c, 0x03, 0x05, 0x63, 0x8e, 0x21, 0x14, 0x82, 0x77, 0x18, 0x64, | ||
| 1291 | 0x08, 0x44, 0x41, 0x16, 0x2c, 0x28, 0xe4, 0x33, 0xc8, 0x10, 0x90, 0x42, | ||
| 1292 | 0x2d, 0xcc, 0x12, 0xb4, 0xc1, 0x78, 0x83, 0x2e, 0x94, 0xc3, 0x3c, 0x50, | ||
| 1293 | 0x30, 0xc6, 0x1b, 0x78, 0xe1, 0x1c, 0xde, 0x81, 0x82, 0x31, 0xc8, 0x00, | ||
| 1294 | 0xb1, 0x82, 0x2e, 0x0c, 0x37, 0x10, 0x74, 0xe0, 0xcc, 0x32, 0x20, 0x52, | ||
| 1295 | 0x30, 0x86, 0x20, 0xe5, 0xc3, 0x70, 0x43, 0xd0, 0x07, 0xca, 0x2c, 0x83, | ||
| 1296 | 0x92, 0x04, 0x26, 0xfc, 0x81, 0x7c, 0x66, 0x09, 0x16, 0x1b, 0x42, 0x01, | ||
| 1297 | 0x3e, 0x23, 0x06, 0x84, 0x11, 0x94, 0x44, 0x60, 0x01, 0x2e, 0xc8, 0x67, | ||
| 1298 | 0xc4, 0xa0, 0x30, 0x02, 0x94, 0x08, 0x70, 0x61, 0x96, 0x60, 0x19, 0xa8, | ||
| 1299 | 0x00, 0x94, 0x44, 0x50, 0xe6, 0x18, 0x6a, 0x21, 0x08, 0x89, 0x31, 0x84, | ||
| 1300 | 0x0d, 0x24, 0x86, 0x1b, 0x02, 0x53, 0x50, 0x66, 0x19, 0x1a, 0x26, 0x30, | ||
| 1301 | 0x01, 0x15, 0xe4, 0x33, 0x4b, 0xe0, 0xd8, 0xa0, 0x0a, 0xf0, 0x19, 0x31, | ||
| 1302 | 0x20, 0x8c, 0xc0, 0x25, 0x02, 0x0b, 0xc2, 0x41, 0x3e, 0x23, 0x06, 0x85, | ||
| 1303 | 0x11, 0xc4, 0x44, 0x10, 0x0e, 0xb3, 0x04, 0xce, 0x40, 0x05, 0xa0, 0x30, | ||
| 1304 | 0x42, 0x33, 0xc7, 0x90, 0x04, 0x28, 0x31, 0x86, 0x40, 0x06, 0x28, 0x31, | ||
| 1305 | 0xdc, 0x10, 0xbc, 0x82, 0x32, 0xcb, 0x00, 0x3d, 0x81, 0x09, 0xb1, 0x20, | ||
| 1306 | 0x9f, 0x59, 0x82, 0xc8, 0x86, 0x59, 0x80, 0xcf, 0x88, 0x01, 0x61, 0x04, | ||
| 1307 | 0x37, 0x11, 0x58, 0xa0, 0x0e, 0xf2, 0x19, 0x31, 0x28, 0x8c, 0x40, 0x27, | ||
| 1308 | 0x02, 0x75, 0x98, 0x25, 0x88, 0x06, 0x2a, 0x00, 0xe5, 0x11, 0xa0, 0x39, | ||
| 1309 | 0x86, 0x24, 0x80, 0x89, 0x59, 0x02, 0x69, 0xa0, 0x22, 0x10, 0x22, 0x3d, | ||
| 1310 | 0x38, 0x06, 0x19, 0x02, 0x75, 0xb0, 0x87, 0x39, 0x06, 0x74, 0x00, 0x03, | ||
| 1311 | 0x9b, 0x18, 0x64, 0x08, 0xd2, 0x21, 0x1f, 0x6c, 0x08, 0xe4, 0x33, 0xc8, | ||
| 1312 | 0x10, 0xac, 0x03, 0x3f, 0xcc, 0x12, 0xb4, 0xc1, 0x70, 0xc3, 0x2c, 0xc4, | ||
| 1313 | 0x43, 0x30, 0xcb, 0x40, 0x81, 0x41, 0x30, 0xc8, 0x40, 0x07, 0xf0, 0xc0, | ||
| 1314 | 0x0f, 0xe3, 0x0d, 0x23, 0xe1, 0x12, 0x3c, 0x41, 0xc1, 0x18, 0x6f, 0x28, | ||
| 1315 | 0x09, 0x98, 0xc0, 0x09, 0x0a, 0xc6, 0x1c, 0x83, 0x3c, 0x04, 0x60, 0x31, | ||
| 1316 | 0xc8, 0x10, 0xcc, 0xc3, 0x48, 0x58, 0x70, 0xc8, 0x67, 0x90, 0x21, 0xa8, | ||
| 1317 | 0x07, 0x93, 0x18, 0x6e, 0x38, 0xc0, 0xc1, 0x99, 0x65, 0xf8, 0xaa, 0x60, | ||
| 1318 | 0x0c, 0x61, 0x28, 0x8b, 0xe1, 0x86, 0x60, 0x1c, 0x94, 0x59, 0x86, 0xcb, | ||
| 1319 | 0x0a, 0x4c, 0x28, 0x07, 0xf9, 0xcc, 0x12, 0x60, 0x23, 0x06, 0x84, 0x11, | ||
| 1320 | 0xc0, 0xc5, 0x30, 0x62, 0x50, 0x18, 0x81, 0x5c, 0x04, 0xe8, 0x60, 0x81, | ||
| 1321 | 0x3a, 0xc8, 0xc7, 0x02, 0x76, 0x80, 0xcf, 0x2c, 0x01, 0x36, 0x50, 0x01, | ||
| 1322 | 0x28, 0x96, 0x70, 0xcd, 0x31, 0xf4, 0x43, 0xd0, 0x16, 0x63, 0x08, 0x0c, | ||
| 1323 | 0x5b, 0x0c, 0x37, 0x04, 0xec, 0xa0, 0xcc, 0x32, 0x68, 0x59, 0x60, 0x82, | ||
| 1324 | 0x3b, 0xc8, 0x67, 0x96, 0x60, 0x1b, 0x31, 0x20, 0x8c, 0x20, 0x2f, 0x86, | ||
| 1325 | 0x11, 0x83, 0xc2, 0x08, 0xf6, 0x22, 0x88, 0x07, 0x0b, 0xe6, 0x41, 0x3e, | ||
| 1326 | 0x16, 0xd4, 0x03, 0x7c, 0x66, 0x09, 0xb6, 0x81, 0x0a, 0x40, 0xc9, 0x04, | ||
| 1327 | 0x6d, 0x8e, 0x21, 0x09, 0xe8, 0x62, 0x0c, 0xa1, 0xa2, 0x8b, 0xe1, 0x86, | ||
| 1328 | 0xa0, 0x1e, 0x94, 0x59, 0x86, 0x8e, 0x0b, 0x4c, 0xb8, 0x07, 0xf9, 0xcc, | ||
| 1329 | 0x12, 0x78, 0x23, 0x06, 0x84, 0x11, 0x88, 0xc6, 0x30, 0x62, 0x50, 0x18, | ||
| 1330 | 0x01, 0x69, 0x04, 0xfa, 0x60, 0x01, 0x3f, 0xc8, 0xc7, 0x02, 0x7f, 0x80, | ||
| 1331 | 0xcf, 0x2c, 0x81, 0x37, 0x50, 0x01, 0x28, 0x9c, 0xd0, 0xcd, 0x31, 0x24, | ||
| 1332 | 0x01, 0x5f, 0x8c, 0x18, 0x18, 0x46, 0xa0, 0x1a, 0x41, 0x4c, 0xbc, 0xc4, | ||
| 1333 | 0x20, 0x43, 0x30, 0x13, 0x64, 0x31, 0x4b, 0xf0, 0x0d, 0x54, 0x04, 0x7e, | ||
| 1334 | 0x40, 0x09, 0xde, 0x20, 0x43, 0x80, 0x13, 0x66, 0x31, 0x4b, 0xd0, 0x06, | ||
| 1335 | 0xb3, 0x0c, 0x61, 0xd0, 0x06, 0xfc, 0x30, 0xc8, 0xd0, 0x0b, 0x39, 0x51, | ||
| 1336 | 0x16, 0x23, 0x06, 0x85, 0x11, 0xb0, 0x46, 0xd0, 0x12, 0x73, 0x0c, 0x36, | ||
| 1337 | 0x11, 0x98, 0xc6, 0x88, 0x41, 0x61, 0x04, 0xae, 0x31, 0xb8, 0xc4, 0x1c, | ||
| 1338 | 0x83, 0x10, 0x98, 0xc6, 0x88, 0x41, 0x61, 0x04, 0xb0, 0x51, 0xbc, 0xc4, | ||
| 1339 | 0x1c, 0x83, 0x10, 0x9c, 0xc6, 0x20, 0x43, 0xd0, 0x13, 0x6e, 0x31, 0xc8, | ||
| 1340 | 0x10, 0x94, 0x03, 0x5c, 0x8c, 0x37, 0xd0, 0xc5, 0x5f, 0xb4, 0x06, 0x05, | ||
| 1341 | 0x63, 0xbc, 0xc1, 0x2e, 0x42, 0x23, 0x35, 0x28, 0x18, 0x73, 0x0c, 0x63, | ||
| 1342 | 0x11, 0xc4, 0xc6, 0x20, 0x43, 0x40, 0x16, 0x74, 0x61, 0x41, 0x22, 0x9f, | ||
| 1343 | 0x41, 0x86, 0xc0, 0x2c, 0xee, 0x62, 0xb8, 0xe1, 0x88, 0x09, 0x67, 0x96, | ||
| 1344 | 0x81, 0x0d, 0xc4, 0x20, 0x18, 0x43, 0x18, 0x6c, 0x63, 0xb8, 0x21, 0xa0, | ||
| 1345 | 0x09, 0x65, 0x96, 0x81, 0x0c, 0xc6, 0x20, 0x30, 0xc1, 0x26, 0xe4, 0x33, | ||
| 1346 | 0x4b, 0x50, 0x06, 0x23, 0x06, 0x84, 0x11, 0x84, 0xc7, 0x30, 0x62, 0x50, | ||
| 1347 | 0x18, 0xc1, 0x78, 0x04, 0x39, 0x61, 0xc1, 0x4e, 0xc8, 0xc7, 0x82, 0x9e, | ||
| 1348 | 0x80, 0xcf, 0x2c, 0x41, 0x19, 0x0c, 0x54, 0x00, 0xca, 0x18, 0x08, 0x64, | ||
| 1349 | 0x30, 0xc7, 0xe0, 0x16, 0x81, 0x6f, 0x8c, 0x21, 0x30, 0xbd, 0x31, 0xdc, | ||
| 1350 | 0x10, 0xf4, 0x84, 0x32, 0xcb, 0x70, 0x06, 0x66, 0x10, 0x98, 0xf0, 0x13, | ||
| 1351 | 0xf2, 0x99, 0x25, 0x40, 0x83, 0x11, 0x03, 0xc2, 0x08, 0xd4, 0x63, 0x18, | ||
| 1352 | 0x31, 0x28, 0x8c, 0x80, 0x3d, 0x02, 0xb1, 0xb0, 0x80, 0x2c, 0xe4, 0x63, | ||
| 1353 | 0x81, 0x59, 0xc0, 0x67, 0x96, 0x00, 0x0d, 0x06, 0x2a, 0x00, 0xc5, 0x0c, | ||
| 1354 | 0x84, 0x33, 0x98, 0x63, 0x48, 0x82, 0xf2, 0x18, 0x43, 0xa8, 0xca, 0x63, | ||
| 1355 | 0xb8, 0x21, 0x30, 0x0b, 0x65, 0x96, 0x41, 0x0d, 0xd2, 0x20, 0x30, 0x01, | ||
| 1356 | 0x2d, 0xe4, 0x33, 0x4b, 0xb0, 0x06, 0x23, 0x06, 0x84, 0x11, 0xcc, 0xc7, | ||
| 1357 | 0x30, 0x62, 0x50, 0x18, 0x41, 0x7d, 0x04, 0x6b, 0x61, 0x41, 0x5b, 0xc8, | ||
| 1358 | 0xc7, 0x82, 0xb7, 0x80, 0xcf, 0x2c, 0xc1, 0x1a, 0x0c, 0x54, 0x00, 0x4a, | ||
| 1359 | 0x1a, 0x08, 0x6a, 0x30, 0xc7, 0x90, 0x04, 0xed, 0x31, 0x62, 0x60, 0x18, | ||
| 1360 | 0xc1, 0x7e, 0x04, 0xa2, 0x01, 0x1a, 0x83, 0x0c, 0x01, 0x69, 0xd4, 0xc6, | ||
| 1361 | 0x2c, 0x01, 0x1b, 0x0c, 0x54, 0x04, 0x7e, 0x10, 0x06, 0xc2, 0x1a, 0x0c, | ||
| 1362 | 0x32, 0x04, 0xa9, 0x71, 0x1b, 0xb3, 0x04, 0x6d, 0x30, 0xd0, 0x12, 0xf0, | ||
| 1363 | 0x88, 0xc1, 0x23, 0x12, 0x8f, 0x7c, 0xb2, 0xc0, 0x06, 0x3c, 0x02, 0x06, | ||
| 1364 | 0x03, 0x2d, 0x01, 0x8a, 0x18, 0x7a, 0x21, 0x99, 0xc3, 0x47, 0xb0, 0x81, | ||
| 1365 | 0xcc, 0x80, 0xc1, 0x20, 0x43, 0x20, 0xec, 0x86, 0x05, 0xe1, 0x21, 0x9f, | ||
| 1366 | 0x0c, 0xc2, 0x81, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd7, 0xd2, 0x07, | ||
| 1367 | 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, 0x50, 0x13, 0xe7, 0x2c, | ||
| 1368 | 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, 0x9b, 0x6d, 0x29, 0x38, | ||
| 1369 | 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, 0x00, 0x03, 0x11, 0x71, | ||
| 1370 | 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, 0x21, 0x13, 0x00, 0x00, | ||
| 1371 | 0x00, 0x01, 0x31, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5b, 0x0a, 0xe0, | ||
| 1372 | 0x40, 0x05, 0x64, 0x15, 0xb6, 0x0c, 0x42, 0x30, 0x0b, 0x5b, 0x86, 0x23, | ||
| 1373 | 0xa0, 0x85, 0x2d, 0x83, 0x16, 0xd4, 0xc2, 0x96, 0xe1, 0x0b, 0x6c, 0x61, | ||
| 1374 | 0xcb, 0x10, 0x06, 0xc1, 0x2d, 0x6c, 0x19, 0xd4, 0x20, 0xc0, 0x85, 0x2d, | ||
| 1375 | 0xc3, 0x1b, 0x04, 0xb9, 0xb0, 0x65, 0xb0, 0x83, 0x40, 0x17, 0xb6, 0x0c, | ||
| 1376 | 0x78, 0x10, 0xe4, 0xc2, 0x96, 0x81, 0x1d, 0x02, 0x5d, 0xd8, 0x32, 0xb8, | ||
| 1377 | 0x43, 0x90, 0x0b, 0x5b, 0x06, 0xb5, 0x08, 0x74, 0x61, 0xcb, 0xc0, 0x16, | ||
| 1378 | 0x41, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1379 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 1380 | 0x00, 0x24, 0x00, 0x00, 0x00, 0x64, 0xce, 0x41, 0x2c, 0x8d, 0x93, 0x06, | ||
| 1381 | 0x54, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xdb, 0x0c, 0x00, 0x05, | ||
| 1382 | 0x33, 0x00, 0xb4, 0xcc, 0x00, 0x8c, 0x35, 0xb0, 0xec, 0x19, 0xca, 0x1f, | ||
| 1383 | 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, 0xde, 0x58, 0x83, 0x5e, | ||
| 1384 | 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, 0xdb, 0xa7, 0xf4, 0xe8, | ||
| 1385 | 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, 0xc2, 0xe8, 0xee, 0xdd, | ||
| 1386 | 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, | ||
| 1387 | 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, | ||
| 1388 | 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, | ||
| 1389 | 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, | ||
| 1390 | 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, 0x33, 0x00, 0x04, 0x8c, | ||
| 1391 | 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, | ||
| 1392 | 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, 0x02, 0x0d, 0x37, 0x50, | ||
| 1393 | 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, 0x43, 0xb5, 0xc1, 0x20, | ||
| 1394 | 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, 0x08, 0xa0, 0x6a, 0x96, | ||
| 1395 | 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, 0x48, 0x82, 0xe1, 0x86, | ||
| 1396 | 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, 0x28, 0x8c, 0x40, 0x0f, | ||
| 1397 | 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xe8, 0x60, 0xc4, 0xa0, 0x30, 0x02, 0x3e, | ||
| 1398 | 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xa0, 0x83, 0x11, 0x83, 0xc2, 0x08, 0xfc, | ||
| 1399 | 0x20, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xa8, 0x83, 0x59, 0x82, 0x62, 0xa0, | ||
| 1400 | 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xf4, 0x60, 0x0c, 0x41, 0xc8, | ||
| 1401 | 0x83, 0x31, 0x84, 0x21, 0x0f, 0x46, 0x0c, 0x0a, 0x23, 0x10, 0x05, 0x21, | ||
| 1402 | 0x18, 0x31, 0x28, 0x8c, 0x60, 0x14, 0x88, 0x60, 0xb8, 0x21, 0xb8, 0x84, | ||
| 1403 | 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, 0x0c, 0x6c, 0x40, 0x03, | ||
| 1404 | 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, 0x8f, 0x05, 0x1a, 0x7c, | ||
| 1405 | 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, 0x29, 0x0c, 0x32, 0x04, | ||
| 1406 | 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, 0x08, 0xd2, 0xc0, 0x0d, | ||
| 1407 | 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, 0xa0, 0x98, 0x65, 0x40, | ||
| 1408 | 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, 0x31, 0x28, 0x8c, 0x60, | ||
| 1409 | 0x16, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0xa0, 0x15, 0x46, 0x0c, 0x0a, | ||
| 1410 | 0x23, 0xa8, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, 0xa0, 0x15, 0x46, 0x0c, | ||
| 1411 | 0x0a, 0x23, 0xb8, 0x85, 0x42, 0x0d, 0xe6, 0x18, 0x84, 0xc0, 0x15, 0x66, | ||
| 1412 | 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, 0x10, 0x04, 0x04, 0x3a, | ||
| 1413 | 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1414 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 1415 | 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1416 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xed, 0x06, 0x00, | ||
| 1417 | 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1418 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 1419 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 1420 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 1421 | 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, | ||
| 1422 | 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, | ||
| 1423 | 0x88, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, | ||
| 1424 | 0x00, 0x51, 0x18, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, | ||
| 1425 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, | ||
| 1426 | 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, | ||
| 1427 | 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 1428 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, | ||
| 1429 | 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, | ||
| 1430 | 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, | ||
| 1431 | 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, | ||
| 1432 | 0xc0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, | ||
| 1433 | 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, | ||
| 1434 | 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, | ||
| 1435 | 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, | ||
| 1436 | 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1437 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, | ||
| 1438 | 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, | ||
| 1439 | 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, | ||
| 1440 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, | ||
| 1441 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, | ||
| 1442 | 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 1443 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1444 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, | ||
| 1445 | 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, | ||
| 1446 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 1447 | 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, | ||
| 1448 | 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, | ||
| 1449 | 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, | ||
| 1450 | 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, | ||
| 1451 | 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 1452 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, | ||
| 1453 | 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, | ||
| 1454 | 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, | ||
| 1455 | 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, | ||
| 1456 | 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, | ||
| 1457 | 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, | ||
| 1458 | 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, | ||
| 1459 | 0xc3, 0x26, 0x10, 0xc0, 0x02, 0x54, 0x43, 0x38, 0xa4, 0x83, 0x3c, 0xb4, | ||
| 1460 | 0x81, 0x38, 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xb8, | ||
| 1461 | 0xc3, 0x3b, 0xb4, 0x41, 0x38, 0xb0, 0x43, 0x3a, 0x84, 0xc3, 0x3c, 0x00, | ||
| 1462 | 0x1b, 0xb6, 0xa1, 0x00, 0x16, 0xa0, 0x1a, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, | ||
| 1463 | 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, | ||
| 1464 | 0x1d, 0xde, 0xa1, 0x0d, 0xc2, 0x81, 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, | ||
| 1465 | 0xd8, 0x60, 0x10, 0x06, 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0x40, 0x80, 0x05, | ||
| 1466 | 0xa8, 0x36, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x50, | ||
| 1467 | 0x1b, 0x7c, 0xe4, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, | ||
| 1468 | 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, | ||
| 1469 | 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 1470 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1471 | 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, | ||
| 1472 | 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, | ||
| 1473 | 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x3c, | ||
| 1474 | 0xb0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, | ||
| 1475 | 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, | ||
| 1476 | 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, | ||
| 1477 | 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, | ||
| 1478 | 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1479 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, | ||
| 1480 | 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, | ||
| 1481 | 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, | ||
| 1482 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, | ||
| 1483 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, | ||
| 1484 | 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 1485 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 1486 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, | ||
| 1487 | 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, | ||
| 1488 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 1489 | 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, | ||
| 1490 | 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, | ||
| 1491 | 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, | ||
| 1492 | 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, | ||
| 1493 | 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 1494 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, | ||
| 1495 | 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, | ||
| 1496 | 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, | ||
| 1497 | 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, | ||
| 1498 | 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, | ||
| 1499 | 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, | ||
| 1500 | 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, | ||
| 1501 | 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x80, 0x04, 0x54, | ||
| 1502 | 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x28, 0x02, 0xb0, 0x00, | ||
| 1503 | 0xd5, 0x06, 0x64, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, | ||
| 1504 | 0xa8, 0x36, 0x18, 0xcc, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x50, | ||
| 1505 | 0x1b, 0xa6, 0xe6, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x01, 0xa4, 0xc1, | ||
| 1506 | 0x1d, 0xde, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xd2, 0x81, 0x1d, 0xe8, 0x21, | ||
| 1507 | 0x1d, 0xdc, 0x61, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 1508 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18, 0x88, 0x62, 0x42, | ||
| 1509 | 0x60, 0x4c, 0x08, 0x8e, 0x09, 0x03, 0x92, 0x28, 0x13, 0x86, 0x25, 0x51, | ||
| 1510 | 0x26, 0x04, 0xcc, 0x84, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, | ||
| 1511 | 0x00, 0x4d, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, | ||
| 1512 | 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, | ||
| 1513 | 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xc8, 0xc1, | ||
| 1514 | 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, | ||
| 1515 | 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, | ||
| 1516 | 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, | ||
| 1517 | 0x41, 0x18, 0x46, 0x18, 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, | ||
| 1518 | 0xe4, 0xa1, 0x1e, 0xc6, 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, | ||
| 1519 | 0xc2, 0x81, 0x1d, 0xf4, 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, | ||
| 1520 | 0xd2, 0x01, 0x1f, 0x50, 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, | ||
| 1521 | 0xec, 0xbe, 0x1d, 0x21, 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, | ||
| 1522 | 0x84, 0xa3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, | ||
| 1523 | 0x88, 0xf8, 0xed, 0xe1, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0x38, | ||
| 1524 | 0x4d, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, | ||
| 1525 | 0xdf, 0x1e, 0x7e, 0x20, 0x8a, 0x00, 0xec, 0x9f, 0xc6, 0x08, 0x80, 0x41, | ||
| 1526 | 0x04, 0x26, 0xb8, 0x48, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, | ||
| 1527 | 0x67, 0x21, 0xa2, 0x7f, 0x1a, 0x23, 0x00, 0x06, 0x11, 0x1c, 0xa1, 0x24, | ||
| 1528 | 0x41, 0x10, 0x08, 0x44, 0xb2, 0x34, 0x0f, 0x41, 0x85, 0x28, 0x8a, 0xa2, | ||
| 1529 | 0x20, 0xa9, 0x0c, 0x00, 0x00, 0x10, 0x55, 0x04, 0x00, 0x20, 0xab, 0x0c, | ||
| 1530 | 0x40, 0x51, 0x10, 0x56, 0x8c, 0xa2, 0x00, 0x00, 0x00, 0x20, 0xad, 0x0c, | ||
| 1531 | 0x45, 0x51, 0x10, 0x57, 0x84, 0xa2, 0x20, 0x6f, 0x8e, 0x00, 0x0c, 0xe6, | ||
| 1532 | 0x08, 0x82, 0x61, 0x04, 0x01, 0x0c, 0x4a, 0x12, 0x34, 0x8f, 0x00, 0x86, | ||
| 1533 | 0x62, 0x08, 0xd0, 0x58, 0x90, 0x60, 0x79, 0x84, 0x50, 0x0c, 0x01, 0x2a, | ||
| 1534 | 0x07, 0x02, 0x52, 0x00, 0x1c, 0x46, 0x18, 0xc0, 0x60, 0x10, 0x21, 0x10, | ||
| 1535 | 0xe6, 0x08, 0x40, 0x61, 0x10, 0xe1, 0x10, 0x06, 0x11, 0x0a, 0x61, 0x10, | ||
| 1536 | 0x01, 0x10, 0xa6, 0x00, 0x46, 0x00, 0x86, 0x11, 0x08, 0x30, 0x00, 0x00, | ||
| 1537 | 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, | ||
| 1538 | 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, | ||
| 1539 | 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xb7, 0x51, | ||
| 1540 | 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1541 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, | ||
| 1542 | 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, | ||
| 1543 | 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, | ||
| 1544 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, | ||
| 1545 | 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, | ||
| 1546 | 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, | ||
| 1547 | 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1548 | 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, | ||
| 1549 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, | ||
| 1550 | 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, | ||
| 1551 | 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, | ||
| 1552 | 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, | ||
| 1553 | 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, | ||
| 1554 | 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, | ||
| 1555 | 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, | ||
| 1556 | 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, | ||
| 1557 | 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, | ||
| 1558 | 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, | ||
| 1559 | 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, | ||
| 1560 | 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, | ||
| 1561 | 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, | ||
| 1562 | 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, | ||
| 1563 | 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, | ||
| 1564 | 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, | ||
| 1565 | 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xee, 0x80, | ||
| 1566 | 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x98, | ||
| 1567 | 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0xcc, 0x04, | ||
| 1568 | 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xa6, 0x02, 0x02, | ||
| 1569 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x73, 0x01, 0x01, 0x20, | ||
| 1570 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0xc9, 0x80, 0x00, 0x10, 0x00, | ||
| 1571 | 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x6c, 0x08, 0x30, 0x0c, 0x00, 0x00, | ||
| 1572 | 0x00, 0x01, 0x00, 0x0c, 0x61, 0x2a, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 1573 | 0x00, 0x00, 0x86, 0x30, 0x1d, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, | ||
| 1574 | 0x00, 0x43, 0x98, 0x0f, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, | ||
| 1575 | 0x21, 0x4c, 0x07, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, | ||
| 1576 | 0x86, 0x0c, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, | ||
| 1577 | 0x98, 0x01, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x20, | ||
| 1578 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, | ||
| 1579 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x47, 0x00, 0x4a, | ||
| 1580 | 0xa0, 0x10, 0x0a, 0xa4, 0x08, 0x0a, 0xa2, 0x80, 0x0a, 0x30, 0xa0, 0x0c, | ||
| 1581 | 0x0a, 0xa3, 0x50, 0x0a, 0xa6, 0x70, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, | ||
| 1582 | 0x68, 0x2d, 0x9c, 0x11, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x90, 0x42, | ||
| 1583 | 0x29, 0x18, 0x42, 0xc7, 0x12, 0x24, 0x01, 0x00, 0x00, 0x79, 0x18, 0x00, | ||
| 1584 | 0x00, 0xd9, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x97, 0x29, 0xa2, | ||
| 1585 | 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x21, 0x06, 0x18, | ||
| 1586 | 0x40, 0x67, 0x00, 0xa0, 0x41, 0x19, 0x50, 0xb9, 0x1b, 0x43, 0x0b, 0x93, | ||
| 1587 | 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x1b, 0x62, 0x80, 0x41, 0x73, 0x06, 0x02, | ||
| 1588 | 0x18, 0x38, 0x8c, 0x83, 0x20, 0x38, 0x38, 0xb6, 0x32, 0x90, 0xb6, 0x32, | ||
| 1589 | 0xba, 0x30, 0x36, 0x10, 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0x37, 0x90, | ||
| 1590 | 0x19, 0x19, 0x18, 0x99, 0x19, 0x17, 0x1a, 0x18, 0x1a, 0x10, 0x94, 0xb6, | ||
| 1591 | 0x32, 0xba, 0x30, 0x36, 0xb3, 0xb2, 0x96, 0x19, 0x19, 0x18, 0x99, 0x19, | ||
| 1592 | 0x17, 0x1a, 0x18, 0x9a, 0x94, 0x21, 0xc2, 0x19, 0x10, 0x43, 0x0c, 0x30, | ||
| 1593 | 0x68, 0xc0, 0x20, 0x02, 0x03, 0x86, 0x45, 0x53, 0x19, 0x5d, 0x18, 0xdb, | ||
| 1594 | 0x10, 0xe4, 0x0c, 0x0e, 0x30, 0x68, 0xc0, 0xa0, 0x01, 0x03, 0x86, 0x5b, | ||
| 1595 | 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x0b, | ||
| 1596 | 0x59, 0x99, 0xdb, 0x9b, 0x5c, 0xdb, 0xdc, 0x17, 0x59, 0xda, 0x5c, 0x98, | ||
| 1597 | 0x18, 0x5b, 0xd9, 0x10, 0xe1, 0x0c, 0x12, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 1598 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 1599 | 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, | ||
| 1600 | 0x43, 0x84, 0x33, 0x58, 0x48, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, | ||
| 1601 | 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, | ||
| 1602 | 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, | ||
| 1603 | 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0x33, 0x68, 0x18, 0x85, | ||
| 1604 | 0xa5, 0xc9, 0xb9, 0xc8, 0x95, 0xb9, 0x91, 0x95, 0xc9, 0x7d, 0xd1, 0x85, | ||
| 1605 | 0xc9, 0x9d, 0x95, 0xd1, 0x31, 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, | ||
| 1606 | 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x72, 0x0b, 0x6b, 0x2b, 0xa3, 0x61, | ||
| 1607 | 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x33, 0x04, 0x39, 0x83, 0x07, 0x0c, 0x98, | ||
| 1608 | 0x33, 0x80, 0xce, 0x20, 0x1a, 0x22, 0x9c, 0x81, 0x44, 0x26, 0x2c, 0x4d, | ||
| 1609 | 0xce, 0x05, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, | ||
| 1610 | 0x9a, 0x9c, 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, | ||
| 1611 | 0x39, 0x17, 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, | ||
| 1612 | 0xba, 0x34, 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, | ||
| 1613 | 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, | ||
| 1614 | 0xde, 0xdc, 0x86, 0x40, 0x60, 0xc0, 0x9c, 0x01, 0x75, 0x06, 0xd5, 0x19, | ||
| 1615 | 0x58, 0x67, 0x00, 0x9d, 0x41, 0x74, 0x06, 0xd7, 0x19, 0x60, 0x94, 0xc2, | ||
| 1616 | 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0xbe, | ||
| 1617 | 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x68, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, | ||
| 1618 | 0xd1, 0x95, 0x91, 0xa1, 0xd4, 0x8c, 0xbd, 0xb1, 0xbd, 0xc9, 0x11, 0xd9, | ||
| 1619 | 0xd1, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93, | ||
| 1620 | 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x63, 0x31, 0xf6, 0xc6, | ||
| 1621 | 0xf6, 0x26, 0x37, 0x44, 0x02, 0x83, 0xe6, 0x0c, 0xb4, 0x33, 0xd8, 0xce, | ||
| 1622 | 0xa0, 0x3a, 0x03, 0xee, 0x0c, 0xa0, 0x33, 0x88, 0xce, 0xe0, 0x3a, 0x83, | ||
| 1623 | 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, | ||
| 1624 | 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, | ||
| 1625 | 0x97, 0x59, 0x0a, 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x22, 0x74, | ||
| 1626 | 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x43, 0x24, 0x30, 0x80, 0xce, | ||
| 1627 | 0x40, 0x3b, 0x83, 0xef, 0x0c, 0xaa, 0x33, 0xe0, 0xce, 0x00, 0x3a, 0x03, | ||
| 1628 | 0x30, 0x38, 0x83, 0xeb, 0x0c, 0xc2, 0x80, 0x4a, 0x58, 0x9a, 0x9c, 0x8b, | ||
| 1629 | 0x58, 0x9d, 0x99, 0x59, 0x99, 0x1c, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb1, | ||
| 1630 | 0x3a, 0x33, 0xb3, 0x32, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0x32, 0x4a, 0x61, | ||
| 1631 | 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, | ||
| 1632 | 0x69, 0x6e, 0x64, 0x65, 0x78, 0x44, 0xc2, 0xd2, 0xe4, 0x5c, 0xe4, 0xca, | ||
| 1633 | 0xc2, 0xc8, 0x48, 0x85, 0xa5, 0xc9, 0xb9, 0xcc, 0xd1, 0xc9, 0xd5, 0x8d, | ||
| 1634 | 0xd1, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0xa5, 0xb9, 0x99, 0xbd, 0xb1, | ||
| 1635 | 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x23, 0x33, 0x37, 0x26, 0x75, 0x24, 0xf4, | ||
| 1636 | 0xf5, 0x56, 0x47, 0x07, 0x57, 0x47, 0x47, 0x86, 0xae, 0x0c, 0x8f, 0xae, | ||
| 1637 | 0x4e, 0xae, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0x8c, 0x4a, 0x9a, 0x1b, 0x5c, | ||
| 1638 | 0x1d, 0xdd, 0x17, 0x5d, 0x1e, 0x5c, 0x19, 0x97, 0xb1, 0x37, 0xb6, 0x37, | ||
| 1639 | 0xb9, 0xaf, 0xb9, 0xb1, 0x30, 0xb6, 0x32, 0x3a, 0x74, 0x6f, 0x6e, 0x65, | ||
| 1640 | 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x7c, 0xe8, | ||
| 1641 | 0xde, 0xdc, 0xca, 0xda, 0xc2, 0xe0, 0xbe, 0xcc, 0xc2, 0xc6, 0xe8, 0xde, | ||
| 1642 | 0xe4, 0x62, 0xf8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0x99, | ||
| 1643 | 0x85, 0x8d, 0xd1, 0xbd, 0xc9, 0xc9, 0xf0, 0x99, 0x23, 0x93, 0xfb, 0xba, | ||
| 1644 | 0x43, 0x4b, 0xa3, 0x2b, 0xfb, 0x82, 0x7b, 0x4b, 0x73, 0xa3, 0x1b, 0x02, | ||
| 1645 | 0x0b, 0x60, 0xc0, 0x80, 0x81, 0x03, 0x06, 0xcc, 0x19, 0xa0, 0xc1, 0x19, | ||
| 1646 | 0xa4, 0x01, 0x18, 0x38, 0x60, 0xe0, 0x80, 0x01, 0x73, 0x06, 0x68, 0x70, | ||
| 1647 | 0x06, 0x6a, 0x00, 0x06, 0x11, 0x18, 0x38, 0x60, 0xc0, 0x9c, 0x01, 0x1a, | ||
| 1648 | 0x9c, 0xc1, 0x1a, 0x80, 0x41, 0x05, 0x06, 0x0e, 0x18, 0x30, 0x67, 0x80, | ||
| 1649 | 0x06, 0x67, 0xc0, 0x06, 0x60, 0xf0, 0x80, 0x81, 0x03, 0x06, 0xcc, 0x19, | ||
| 1650 | 0xa0, 0xc1, 0x19, 0xb4, 0x01, 0x18, 0x58, 0x60, 0xe0, 0x80, 0x01, 0x73, | ||
| 1651 | 0x06, 0x68, 0x70, 0x06, 0x6e, 0x00, 0x06, 0x17, 0x18, 0x38, 0x60, 0xc0, | ||
| 1652 | 0x9c, 0x01, 0x1a, 0x9c, 0xc1, 0x1b, 0x80, 0x01, 0x06, 0x06, 0x0e, 0x18, | ||
| 1653 | 0x30, 0x67, 0x80, 0x06, 0x67, 0x00, 0x07, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, | ||
| 1654 | 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, | ||
| 1655 | 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, | ||
| 1656 | 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, | ||
| 1657 | 0x95, 0xf1, 0x99, 0x42, 0x0b, 0x23, 0x2b, 0x93, 0x1b, 0x7a, 0x73, 0x9b, | ||
| 1658 | 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0x63, 0x30, 0x36, 0x84, 0x0c, 0xc0, 0x80, | ||
| 1659 | 0x3a, 0x83, 0x31, 0x38, 0x03, 0x32, 0x00, 0x03, 0xe9, 0x0c, 0xca, 0x00, | ||
| 1660 | 0x0c, 0x18, 0x30, 0x68, 0xce, 0xc0, 0x0c, 0xce, 0xe0, 0x0c, 0xce, 0x20, | ||
| 1661 | 0x0e, 0xce, 0x40, 0x0e, 0xc0, 0x40, 0x3a, 0x83, 0x39, 0x00, 0x03, 0xe7, | ||
| 1662 | 0x0c, 0xa0, 0x33, 0xa0, 0x83, 0x33, 0xb8, 0xce, 0xa0, 0x0e, 0x68, 0x98, | ||
| 1663 | 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0xd0, 0x78, 0x33, 0x33, 0x9b, 0x2b, 0xa3, | ||
| 1664 | 0x23, 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x83, 0x37, 0x43, 0xa3, 0x2d, | ||
| 1665 | 0x8c, 0x4e, 0x2e, 0x0d, 0x6f, 0x08, 0x05, 0x06, 0x0c, 0x18, 0x3c, 0x60, | ||
| 1666 | 0xc0, 0x9c, 0xc1, 0x1d, 0x9c, 0x01, 0x1e, 0x80, 0xc1, 0x03, 0x06, 0x19, | ||
| 1667 | 0x18, 0x30, 0x67, 0x90, 0x07, 0x67, 0xa0, 0x07, 0x4c, 0xb2, 0xaa, 0xac, | ||
| 1668 | 0x88, 0xca, 0xc6, 0xde, 0xc8, 0xca, 0x68, 0x90, 0x95, 0x8d, 0xbd, 0x91, | ||
| 1669 | 0x95, 0x0d, 0x21, 0x03, 0x30, 0x70, 0xce, 0x60, 0x0c, 0xce, 0x80, 0x0c, | ||
| 1670 | 0xc0, 0x60, 0x3a, 0x83, 0x32, 0x00, 0x83, 0x06, 0x0c, 0x9a, 0x33, 0x30, | ||
| 1671 | 0x83, 0x33, 0x38, 0x83, 0x33, 0xd8, 0x83, 0x33, 0x90, 0x03, 0x30, 0x98, | ||
| 1672 | 0xce, 0x60, 0x0e, 0xc0, 0xe0, 0x39, 0x03, 0xe8, 0x0c, 0xf8, 0xe0, 0x0c, | ||
| 1673 | 0xae, 0x33, 0xe8, 0x03, 0x2e, 0x61, 0x69, 0x72, 0x2e, 0x74, 0x65, 0x78, | ||
| 1674 | 0x74, 0x75, 0x72, 0x65, 0x54, 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, 0xc2, 0xda, | ||
| 1675 | 0xe0, 0xd8, 0xca, 0x88, 0xd1, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xc9, | ||
| 1676 | 0x90, 0xf1, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xb1, 0x80, 0xcc, 0x85, 0xb5, | ||
| 1677 | 0xc1, 0xb1, 0x95, 0xf9, 0x90, 0xa0, 0x2b, 0xc3, 0xcb, 0x1a, 0x42, 0x81, | ||
| 1678 | 0x81, 0x76, 0x06, 0x7f, 0x70, 0x06, 0x65, 0x00, 0x06, 0x0c, 0x18, 0x34, | ||
| 1679 | 0x67, 0x00, 0x0a, 0x67, 0x00, 0x9d, 0x41, 0x28, 0x9c, 0xc1, 0x75, 0x06, | ||
| 1680 | 0xa2, 0x40, 0x8f, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0xec, | ||
| 1681 | 0x2b, 0x4c, 0x4e, 0x2e, 0x2c, 0x8f, 0xc7, 0x8c, 0xed, 0x2d, 0x8c, 0x8e, | ||
| 1682 | 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc, 0x87, 0x05, 0x5d, 0x19, | ||
| 1683 | 0x5e, 0x95, 0xd5, 0x10, 0x0a, 0x0c, 0xb6, 0x33, 0xf8, 0x83, 0x33, 0x28, | ||
| 1684 | 0x03, 0x30, 0x68, 0xc0, 0xa0, 0x39, 0x03, 0x50, 0x38, 0x03, 0xe8, 0x0c, | ||
| 1685 | 0x48, 0xe1, 0x0c, 0xae, 0x33, 0x28, 0x05, 0x2e, 0x61, 0x69, 0x72, 0x2e, | ||
| 1686 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x3c, 0xe6, 0xc2, 0xda, 0xe0, | ||
| 1687 | 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, 0xc0, 0x80, 0x3b, 0x83, 0x53, | ||
| 1688 | 0x38, 0x83, 0x32, 0x00, 0x03, 0x06, 0x0c, 0x9a, 0x33, 0x80, 0xce, 0x00, | ||
| 1689 | 0x15, 0xce, 0xe0, 0x3a, 0x83, 0x54, 0x18, 0x02, 0x9d, 0x41, 0x76, 0x06, | ||
| 1690 | 0xde, 0x19, 0x88, 0xc1, 0x19, 0xd8, 0xc1, 0x19, 0xf8, 0xc1, 0x19, 0x8c, | ||
| 1691 | 0xc2, 0x19, 0x98, 0xc2, 0x19, 0xa8, 0xc2, 0x10, 0x23, 0x02, 0xce, 0x60, | ||
| 1692 | 0x3a, 0x83, 0x55, 0xa0, 0x18, 0x84, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, | ||
| 1693 | 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xcd, 0xa1, 0x4c, 0x11, | ||
| 1694 | 0x31, 0x7d, 0x65, 0x55, 0x59, 0x7d, 0x99, 0xc9, 0x85, 0x9d, 0xb5, 0x95, | ||
| 1695 | 0xb9, 0xd1, 0xa5, 0x0c, 0x21, 0xce, 0xc0, 0x15, 0xce, 0xa0, 0x15, 0x88, | ||
| 1696 | 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, | ||
| 1697 | 0xbd, 0xc1, 0x95, 0xb5, 0xd0, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xcd, | ||
| 1698 | 0x0d, 0x31, 0xce, 0x00, 0x16, 0xce, 0xc0, 0x15, 0xce, 0xe0, 0x15, 0x88, | ||
| 1699 | 0x85, 0xa5, 0xc9, 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, | ||
| 1700 | 0xbd, 0xc1, 0x95, 0xb5, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0xcd, | ||
| 1701 | 0x0d, 0x31, 0xce, 0x40, 0x16, 0xce, 0xc0, 0x15, 0xce, 0x20, 0x16, 0x86, | ||
| 1702 | 0x10, 0x67, 0x00, 0x0b, 0x67, 0x20, 0x0b, 0xb4, 0xc2, 0xd2, 0xe4, 0x5a, | ||
| 1703 | 0xc2, 0xd8, 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, 0xc6, 0xde, 0xe0, 0xca, 0x5a, | ||
| 1704 | 0xc2, 0xe4, 0xce, 0x50, 0x66, 0x52, 0x86, 0x18, 0x67, 0x50, 0x0b, 0x67, | ||
| 1705 | 0xe0, 0x0a, 0x67, 0x40, 0x0b, 0xb4, 0xc2, 0xd2, 0xe4, 0x5a, 0xc2, 0xd8, | ||
| 1706 | 0xd2, 0xc2, 0xe6, 0x5a, 0xe6, 0xc6, 0xde, 0xe0, 0xca, 0x5a, 0xc2, 0xe4, | ||
| 1707 | 0xce, 0x50, 0x68, 0x52, 0x86, 0x18, 0x67, 0x70, 0x0b, 0x67, 0xe0, 0x0a, | ||
| 1708 | 0x67, 0x60, 0x0b, 0x43, 0x88, 0x33, 0xa8, 0x85, 0x33, 0xb8, 0x85, 0x21, | ||
| 1709 | 0xc2, 0x19, 0xdc, 0xc2, 0x10, 0xe3, 0x0c, 0x6a, 0xe1, 0x0c, 0x60, 0xe1, | ||
| 1710 | 0x0c, 0x64, 0x81, 0xd5, 0x97, 0x16, 0xd5, 0x54, 0x4c, 0xcd, 0x14, 0x5a, | ||
| 1711 | 0x18, 0x59, 0x99, 0xdc, 0xd0, 0x9b, 0xdb, 0x1c, 0x5d, 0x98, 0x1b, 0xdd, | ||
| 1712 | 0x1c, 0x9f, 0xb7, 0x36, 0xb7, 0x34, 0xb8, 0x37, 0xba, 0x32, 0x37, 0x3a, | ||
| 1713 | 0x90, 0x31, 0xb4, 0x30, 0x39, 0x3e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, | ||
| 1714 | 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x43, 0x84, 0x33, | ||
| 1715 | 0xe8, 0x85, 0x21, 0xc6, 0x19, 0xf0, 0xc2, 0x19, 0xf8, 0xc2, 0x1a, 0x78, | ||
| 1716 | 0x43, 0x8c, 0x33, 0x40, 0x83, 0x33, 0xf8, 0x85, 0x35, 0xf0, 0x86, 0x88, | ||
| 1717 | 0xc1, 0x19, 0xec, 0xc2, 0x19, 0x80, 0xc3, 0x1a, 0x78, 0x67, 0x00, 0x0e, | ||
| 1718 | 0x6b, 0xf0, 0x9d, 0x01, 0x38, 0xac, 0x01, 0x18, 0x9c, 0x01, 0x38, 0xac, | ||
| 1719 | 0x41, 0x18, 0x9c, 0x01, 0x38, 0xac, 0x81, 0x18, 0x9c, 0x01, 0x38, 0xac, | ||
| 1720 | 0xc1, 0x18, 0x9c, 0x01, 0x38, 0xac, 0x01, 0x19, 0x9c, 0x01, 0x38, 0xac, | ||
| 1721 | 0x41, 0x37, 0xc4, 0x38, 0x83, 0x70, 0x38, 0x03, 0x70, 0x58, 0x03, 0x30, | ||
| 1722 | 0x18, 0x62, 0x9c, 0x41, 0x38, 0x9c, 0x01, 0x38, 0xac, 0x41, 0x37, 0xc4, | ||
| 1723 | 0x38, 0x83, 0x70, 0x38, 0x03, 0x70, 0x58, 0x03, 0x31, 0x18, 0x62, 0x9c, | ||
| 1724 | 0x41, 0x38, 0x9c, 0x01, 0x38, 0xac, 0xc1, 0x18, 0x0c, 0x31, 0xce, 0x20, | ||
| 1725 | 0x1c, 0xce, 0x00, 0x1c, 0xd6, 0x80, 0x0c, 0x86, 0x18, 0x67, 0x10, 0x0e, | ||
| 1726 | 0x67, 0x00, 0x0e, 0x6b, 0xf0, 0x0d, 0x31, 0xce, 0x20, 0x1c, 0xce, 0x00, | ||
| 1727 | 0x1c, 0xd6, 0x20, 0x0c, 0x86, 0x18, 0x67, 0x10, 0x0e, 0x67, 0x00, 0x0e, | ||
| 1728 | 0x6b, 0xe0, 0x8d, 0x88, 0xd8, 0x81, 0x1d, 0xec, 0xa1, 0x1d, 0xdc, 0xa0, | ||
| 1729 | 0x1d, 0xde, 0x81, 0x1c, 0xea, 0x81, 0x1d, 0xca, 0xc1, 0x0d, 0xcc, 0x81, | ||
| 1730 | 0x1d, 0xc2, 0xe1, 0x1c, 0xe6, 0x61, 0x8a, 0x10, 0x0c, 0x23, 0x14, 0x76, | ||
| 1731 | 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, | ||
| 1732 | 0xa0, 0x87, 0x29, 0x41, 0x31, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, | ||
| 1733 | 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, | ||
| 1734 | 0x81, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, | ||
| 1735 | 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, | ||
| 1736 | 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x20, | ||
| 1737 | 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, | ||
| 1738 | 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, | ||
| 1739 | 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x32, 0x28, 0x8c, 0x33, 0x82, | ||
| 1740 | 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x07, 0x79, 0x08, 0x87, 0x73, | ||
| 1741 | 0x68, 0x87, 0x72, 0x70, 0x07, 0x7a, 0x98, 0x12, 0xb0, 0x02, 0x00, 0x00, | ||
| 1742 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 1743 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 1744 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 1745 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 1746 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 1747 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 1748 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 1749 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 1750 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 1751 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 1752 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 1753 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 1754 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 1755 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 1756 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 1757 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 1758 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 1759 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 1760 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 1761 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 1762 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 1763 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 1764 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 1765 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 1766 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 1767 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 1768 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 1769 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 1770 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 1771 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 1772 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 1773 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 1774 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 1775 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 1776 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 1777 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 1778 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 1779 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 1780 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 1781 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 1782 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 1783 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 1784 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 1785 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 1786 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 1787 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 1788 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 1789 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 1790 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 1791 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 1792 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 1793 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 1794 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 1795 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 1796 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 1797 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 1798 | 0x00, 0x35, 0x00, 0x00, 0x00, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, | ||
| 1799 | 0xb3, 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, | ||
| 1800 | 0x51, 0x14, 0x96, 0x30, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, | ||
| 1801 | 0x03, 0x5c, 0x7e, 0x75, 0x17, 0xb7, 0x6d, 0x01, 0x14, 0x80, 0x44, 0x7e, | ||
| 1802 | 0x01, 0x48, 0xd3, 0x2f, 0x2c, 0x00, 0xf3, 0xf8, 0xd5, 0x5d, 0xdc, 0xb6, | ||
| 1803 | 0x09, 0x40, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xff, 0xe3, 0x58, 0x7e, | ||
| 1804 | 0x71, 0xdb, 0x36, 0x10, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, | ||
| 1805 | 0x10, 0x48, 0x7e, 0x71, 0xdb, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, 0x80, | ||
| 1806 | 0x34, 0xfd, 0x8f, 0x63, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x29, 0x84, 0x01, | ||
| 1807 | 0x80, 0x44, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0xfc, 0x13, 0x71, 0x4d, 0x54, | ||
| 1808 | 0x44, 0xfc, 0xf6, 0xf0, 0x03, 0x51, 0x04, 0x60, 0x7e, 0x85, 0x17, 0xb7, | ||
| 1809 | 0x6d, 0x04, 0x0d, 0x80, 0x44, 0xfe, 0xe0, 0x4c, 0x7e, 0x75, 0x17, 0xb7, | ||
| 1810 | 0x6d, 0x0b, 0x1b, 0x80, 0x44, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0xfc, 0x13, | ||
| 1811 | 0x71, 0x4d, 0x54, 0x44, 0xfc, 0xf6, 0xe0, 0x57, 0x78, 0x71, 0xdb, 0x86, | ||
| 1812 | 0x30, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, 0x10, 0x48, 0x7e, | ||
| 1813 | 0x75, 0x17, 0xb7, 0x6d, 0x00, 0x10, 0xdb, 0x95, 0xbf, 0xec, 0xbe, 0x7f, | ||
| 1814 | 0x11, 0x01, 0x06, 0x43, 0x34, 0x93, 0x19, 0x44, 0x00, 0x12, 0xf9, 0x05, | ||
| 1815 | 0x20, 0x4d, 0x7f, 0xc1, 0x00, 0x97, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, | ||
| 1816 | 0x00, 0x61, 0x20, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, | ||
| 1817 | 0x10, 0x0b, 0x04, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x14, 0x8f, 0x45, | ||
| 1818 | 0x00, 0x81, 0x70, 0xcc, 0x41, 0x30, 0x0d, 0x84, 0x07, 0xb4, 0x16, 0x41, | ||
| 1819 | 0x09, 0x50, 0x3a, 0xc7, 0xc0, 0xe0, 0x01, 0x1e, 0x8c, 0x00, 0x8c, 0x35, | ||
| 1820 | 0x00, 0x81, 0x40, 0xe2, 0x08, 0x00, 0x85, 0x23, 0x00, 0x35, 0x40, 0xe0, | ||
| 1821 | 0x0c, 0x00, 0x01, 0x63, 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, 0xa0, | ||
| 1822 | 0xb3, 0xe6, 0x1c, 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x09, 0x06, | ||
| 1823 | 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, | ||
| 1824 | 0x30, 0x03, 0x30, 0x07, 0x21, 0x0b, 0xb2, 0x20, 0x0b, 0xb3, 0x30, 0x07, | ||
| 1825 | 0x31, 0x0b, 0xb9, 0x30, 0x0b, 0x7d, 0x40, 0xc5, 0x0c, 0xc0, 0x08, 0xc0, | ||
| 1826 | 0x0c, 0xc0, 0x58, 0x03, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, 0xe2, | ||
| 1827 | 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x8d, 0x35, 0xb0, 0xed, 0xfc, 0x93, 0x1e, | ||
| 1828 | 0xdb, 0xce, 0x3f, 0xe9, 0xb1, 0xed, 0xfc, 0x93, 0xde, 0x58, 0x03, 0x08, | ||
| 1829 | 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, | ||
| 1830 | 0xd6, 0xbf, 0x30, 0xd6, 0x00, 0x82, 0xe0, 0x9a, 0x83, 0x01, 0x08, 0x82, | ||
| 1831 | 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x8c, 0x35, 0x80, 0x20, | ||
| 1832 | 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, | ||
| 1833 | 0x0e, 0x06, 0x63, 0x0d, 0xeb, 0x88, 0xc7, 0x2c, 0x18, 0xac, 0x23, 0x1e, | ||
| 1834 | 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x58, 0x03, 0x08, 0xc2, | ||
| 1835 | 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, | ||
| 1836 | 0x63, 0x30, 0xd6, 0x20, 0xe6, 0x62, 0xda, 0x7f, 0x60, 0xc9, 0xb3, 0xf1, | ||
| 1837 | 0x2f, 0x8c, 0xe9, 0xaa, 0xe6, 0xbe, 0x30, 0xd6, 0xf0, 0xcf, 0xa4, 0xff, | ||
| 1838 | 0xfb, 0x02, 0x5d, 0x83, 0x62, 0xfe, 0xb5, 0x70, 0x1c, 0x83, 0xbe, 0x30, | ||
| 1839 | 0xd6, 0x30, 0xf7, 0x6d, 0x9a, 0xfa, 0x42, 0xeb, 0x86, 0x3c, 0xef, 0x0b, | ||
| 1840 | 0x7c, 0xce, 0xfa, 0xf8, 0x47, 0xc0, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, | ||
| 1841 | 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0x79, 0xaf, 0xab, | ||
| 1842 | 0xec, 0xcd, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, | ||
| 1843 | 0xdb, 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, 0xf8, 0x37, | ||
| 1844 | 0x46, 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, 0xf6, 0x34, | ||
| 1845 | 0x18, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, 0x00, 0x00, | ||
| 1846 | 0x00, 0x23, 0x06, 0x4a, 0x11, 0xbc, 0xc2, 0x1b, 0xb4, 0x81, 0x1c, 0x8c, | ||
| 1847 | 0x41, 0x19, 0x90, 0x41, 0x30, 0x62, 0xb0, 0x14, 0x41, 0x2c, 0xbc, 0x81, | ||
| 1848 | 0x1b, 0xcc, 0xc1, 0x2b, 0x90, 0x81, 0x19, 0x94, 0x81, 0x30, 0x86, 0x10, | ||
| 1849 | 0xc0, 0xc2, 0x20, 0xc3, 0xe0, 0xad, 0xc1, 0x1c, 0x43, 0x20, 0xc4, 0xc2, | ||
| 1850 | 0x88, 0xc1, 0x52, 0x04, 0xb5, 0x30, 0x07, 0x72, 0x70, 0x07, 0xb2, 0x80, | ||
| 1851 | 0x06, 0x6a, 0x90, 0x06, 0xc6, 0x18, 0x42, 0x40, 0x0b, 0x73, 0x0c, 0x43, | ||
| 1852 | 0x10, 0x0b, 0x87, 0x07, 0xea, 0x52, 0x50, 0x06, 0x19, 0x02, 0x33, 0x80, | ||
| 1853 | 0x03, 0x23, 0x02, 0xf8, 0x8c, 0x37, 0xf0, 0x01, 0x2a, 0xe4, 0xc2, 0x05, | ||
| 1854 | 0xea, 0x52, 0x50, 0x06, 0x19, 0x82, 0x35, 0xa8, 0x83, 0x11, 0x83, 0xc2, | ||
| 1855 | 0x08, 0xcc, 0xa1, 0x08, 0xc6, 0x2b, 0x42, 0xa1, 0x15, 0x7c, 0xe1, 0x17, | ||
| 1856 | 0xf4, 0xe0, 0x02, 0x75, 0x29, 0x28, 0x83, 0x0c, 0x01, 0x1c, 0xe8, 0xc1, | ||
| 1857 | 0x88, 0x41, 0x61, 0x04, 0xeb, 0xa0, 0x04, 0xe3, 0x15, 0xa6, 0x20, 0x0b, | ||
| 1858 | 0xe3, 0x40, 0x0e, 0xa0, 0x70, 0x81, 0xba, 0x14, 0x94, 0x41, 0x86, 0xa0, | ||
| 1859 | 0x0e, 0xfe, 0x60, 0xc4, 0xa0, 0x30, 0x02, 0x78, 0x78, 0x82, 0x39, 0x86, | ||
| 1860 | 0x3a, 0x58, 0xd2, 0x61, 0x8e, 0x21, 0x38, 0xd2, 0x61, 0x8e, 0x21, 0x18, | ||
| 1861 | 0xce, 0x61, 0xbc, 0xe1, 0x15, 0x74, 0x01, 0x1d, 0x28, 0x18, 0xc3, 0x0d, | ||
| 1862 | 0xc1, 0x1f, 0x04, 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0x10, 0x7d, 0x70, | ||
| 1863 | 0x0a, 0xe3, 0x0d, 0xb3, 0xe0, 0x0b, 0xe0, 0x40, 0xc1, 0x18, 0x31, 0x20, | ||
| 1864 | 0x8c, 0xc0, 0x1e, 0x86, 0x11, 0x83, 0xc2, 0x08, 0xf0, 0x21, 0xc8, 0x03, | ||
| 1865 | 0x0b, 0xf2, 0x00, 0x3e, 0x23, 0x06, 0x85, 0x11, 0xe0, 0x43, 0xe0, 0x07, | ||
| 1866 | 0x36, 0xe8, 0x81, 0x7c, 0x4c, 0x0f, 0x82, 0xf8, 0xd8, 0x10, 0xd0, 0x67, | ||
| 1867 | 0xc4, 0x80, 0x30, 0x82, 0x7e, 0x08, 0x46, 0x0c, 0x0a, 0x23, 0xf8, 0x87, | ||
| 1868 | 0x80, 0x0f, 0x2c, 0xe0, 0x03, 0xf9, 0xcc, 0x31, 0x98, 0xc2, 0xc2, 0x0f, | ||
| 1869 | 0x83, 0x0c, 0xc1, 0x29, 0xd8, 0x82, 0x0d, 0x01, 0x7d, 0x06, 0x19, 0x82, | ||
| 1870 | 0x54, 0xe0, 0x85, 0x41, 0x86, 0xa0, 0xf2, 0x85, 0x59, 0x02, 0x61, 0xa0, | ||
| 1871 | 0x22, 0x10, 0x02, 0x36, 0x00, 0xc6, 0x1b, 0xca, 0x01, 0x1e, 0x40, 0x82, | ||
| 1872 | 0x82, 0x31, 0xdc, 0x10, 0xdc, 0x81, 0x33, 0xcb, 0x30, 0x10, 0xc1, 0x20, | ||
| 1873 | 0x03, 0x31, 0x0b, 0xbd, 0x30, 0xde, 0x90, 0x0e, 0xf4, 0x80, 0x0f, 0x14, | ||
| 1874 | 0x8c, 0xf1, 0x86, 0x75, 0xb0, 0x87, 0x7c, 0xa0, 0x60, 0x8c, 0x18, 0x20, | ||
| 1875 | 0x47, 0x14, 0x13, 0x45, 0x77, 0x0c, 0xc1, 0x20, 0x43, 0x50, 0x0b, 0xe8, | ||
| 1876 | 0x30, 0xc8, 0x10, 0x2c, 0xea, 0x30, 0x4b, 0x40, 0x0c, 0x54, 0x04, 0xc2, | ||
| 1877 | 0x80, 0x09, 0xc3, 0x0d, 0x61, 0x70, 0x0a, 0xc1, 0x2c, 0x43, 0x31, 0x05, | ||
| 1878 | 0xe3, 0x0d, 0xf2, 0xd0, 0x0f, 0x2e, 0x41, 0xc1, 0x18, 0x6e, 0x08, 0x54, | ||
| 1879 | 0x21, 0x98, 0x65, 0x30, 0x8e, 0x60, 0x90, 0xa1, 0x00, 0x07, 0x75, 0x18, | ||
| 1880 | 0x6f, 0xb0, 0x87, 0x90, 0x58, 0x09, 0x0a, 0xc6, 0x1c, 0xc3, 0x2f, 0x04, | ||
| 1881 | 0x35, 0x31, 0xc8, 0x10, 0x80, 0xc3, 0x3b, 0x58, 0x50, 0xc8, 0x67, 0x90, | ||
| 1882 | 0x21, 0x10, 0x87, 0x7a, 0x98, 0x25, 0x68, 0x83, 0xf1, 0x06, 0x7e, 0x38, | ||
| 1883 | 0x89, 0x9c, 0xa0, 0x60, 0x8c, 0x37, 0xf8, 0x43, 0x4a, 0xcc, 0x04, 0x05, | ||
| 1884 | 0x63, 0x90, 0x01, 0x5a, 0x07, 0x7d, 0x18, 0x6e, 0x20, 0x62, 0xc1, 0x99, | ||
| 1885 | 0x65, 0x40, 0xa4, 0x60, 0x0c, 0x41, 0xfa, 0x89, 0xe1, 0x86, 0x60, 0x17, | ||
| 1886 | 0x94, 0x59, 0x06, 0x25, 0x09, 0x4c, 0xe8, 0x05, 0xf9, 0xcc, 0x12, 0x2c, | ||
| 1887 | 0x36, 0xfc, 0x02, 0x7c, 0x46, 0x0c, 0x08, 0x23, 0x60, 0x8b, 0xc0, 0x82, | ||
| 1888 | 0x7b, 0x90, 0xcf, 0x88, 0x41, 0x61, 0x04, 0x6f, 0x11, 0xdc, 0xc3, 0x2c, | ||
| 1889 | 0xc1, 0x32, 0x50, 0x01, 0x28, 0x89, 0xa0, 0xcc, 0x31, 0xd0, 0x43, 0x70, | ||
| 1890 | 0x16, 0x63, 0x08, 0xdb, 0x59, 0x0c, 0x37, 0x04, 0xe4, 0xa0, 0xcc, 0x32, | ||
| 1891 | 0x34, 0x4c, 0x60, 0x82, 0x39, 0xc8, 0x67, 0x96, 0xc0, 0xb1, 0x01, 0x1d, | ||
| 1892 | 0xe0, 0x33, 0x62, 0x40, 0x18, 0x41, 0x5d, 0x04, 0x16, 0x80, 0x84, 0x7c, | ||
| 1893 | 0x46, 0x0c, 0x0a, 0x23, 0xc0, 0x8b, 0x00, 0x24, 0x66, 0x09, 0x9c, 0x81, | ||
| 1894 | 0x0a, 0x40, 0x61, 0x84, 0x66, 0x8e, 0x21, 0x09, 0xde, 0x62, 0x0c, 0x81, | ||
| 1895 | 0x0c, 0xda, 0x62, 0xb8, 0x21, 0x68, 0x07, 0x65, 0x96, 0x01, 0x7a, 0x02, | ||
| 1896 | 0x13, 0xde, 0x41, 0x3e, 0xb3, 0x04, 0x91, 0x0d, 0xf1, 0x00, 0x9f, 0x11, | ||
| 1897 | 0x03, 0xc2, 0x08, 0xfc, 0x22, 0xb0, 0x20, 0x25, 0xe4, 0x33, 0x62, 0x50, | ||
| 1898 | 0x18, 0x41, 0x68, 0x04, 0x29, 0x31, 0x4b, 0x10, 0x0d, 0x54, 0x00, 0xca, | ||
| 1899 | 0x23, 0x40, 0x73, 0x0c, 0x49, 0x50, 0x17, 0xb3, 0x04, 0xd2, 0x40, 0x45, | ||
| 1900 | 0x20, 0x44, 0x7a, 0x70, 0x0c, 0x32, 0x04, 0x29, 0x31, 0x13, 0x73, 0x0c, | ||
| 1901 | 0x26, 0x01, 0x06, 0x7c, 0x31, 0xc8, 0x10, 0x9c, 0x84, 0x4d, 0xd8, 0x10, | ||
| 1902 | 0xc8, 0x67, 0x90, 0x21, 0x48, 0x09, 0x9e, 0x98, 0x25, 0x68, 0x83, 0xe1, | ||
| 1903 | 0x86, 0x59, 0x80, 0x89, 0x60, 0x96, 0x81, 0x02, 0x83, 0x60, 0x90, 0x81, | ||
| 1904 | 0x0e, 0x5e, 0x22, 0x27, 0xc6, 0x1b, 0xca, 0x02, 0x2e, 0x44, 0x83, 0x82, | ||
| 1905 | 0x31, 0xde, 0x70, 0x16, 0x72, 0xc1, 0x17, 0x14, 0x8c, 0x39, 0x06, 0x98, | ||
| 1906 | 0x08, 0x4c, 0x63, 0x90, 0x21, 0x88, 0x09, 0xb0, 0xb0, 0xe0, 0x90, 0xcf, | ||
| 1907 | 0x20, 0x43, 0x30, 0x13, 0x66, 0x31, 0xdc, 0x70, 0xf4, 0x83, 0x33, 0xcb, | ||
| 1908 | 0xf0, 0x55, 0xc1, 0x18, 0xc2, 0xb0, 0x1a, 0xc3, 0x0d, 0x01, 0x48, 0x28, | ||
| 1909 | 0xb3, 0x0c, 0x97, 0x15, 0x98, 0x20, 0x12, 0xf2, 0x99, 0x25, 0xc0, 0x46, | ||
| 1910 | 0x0c, 0x08, 0x23, 0xb8, 0x8d, 0x61, 0xc4, 0xa0, 0x30, 0x82, 0xdc, 0x08, | ||
| 1911 | 0x4a, 0xc2, 0x82, 0x93, 0x90, 0x8f, 0x05, 0x29, 0x01, 0x9f, 0x59, 0x02, | ||
| 1912 | 0x6c, 0xa0, 0x02, 0x50, 0x2c, 0xe1, 0x9a, 0x63, 0xd8, 0x89, 0x60, 0x36, | ||
| 1913 | 0xc6, 0x10, 0x98, 0xd9, 0x18, 0x6e, 0x08, 0x52, 0x42, 0x99, 0x65, 0xd0, | ||
| 1914 | 0xb2, 0xc0, 0x84, 0x95, 0x90, 0xcf, 0x2c, 0xc1, 0x36, 0x62, 0x40, 0x18, | ||
| 1915 | 0x01, 0x78, 0x0c, 0x23, 0x06, 0x85, 0x11, 0x88, 0x47, 0xe0, 0x12, 0x16, | ||
| 1916 | 0xc0, 0x84, 0x7c, 0x2c, 0x90, 0x09, 0xf8, 0xcc, 0x12, 0x6c, 0x03, 0x15, | ||
| 1917 | 0x80, 0x92, 0x09, 0xda, 0x1c, 0x43, 0x12, 0xec, 0xc6, 0x18, 0x42, 0x95, | ||
| 1918 | 0x1b, 0xc3, 0x0d, 0x81, 0x4c, 0x28, 0xb3, 0x0c, 0x1d, 0x17, 0x98, 0x40, | ||
| 1919 | 0x13, 0xf2, 0x99, 0x25, 0xf0, 0x46, 0x0c, 0x08, 0x23, 0x48, 0x8f, 0x61, | ||
| 1920 | 0xc4, 0xa0, 0x30, 0x82, 0xf5, 0x08, 0x6e, 0xc2, 0x82, 0x9c, 0x90, 0x8f, | ||
| 1921 | 0x05, 0x3b, 0x01, 0x9f, 0x59, 0x02, 0x6f, 0xa0, 0x02, 0x50, 0x38, 0xa1, | ||
| 1922 | 0x9b, 0x63, 0x48, 0x82, 0xf0, 0x18, 0x31, 0x30, 0x8c, 0x20, 0x3e, 0x82, | ||
| 1923 | 0xb7, 0x68, 0x8b, 0x41, 0x86, 0x20, 0x2e, 0x48, 0x63, 0x96, 0xe0, 0x1b, | ||
| 1924 | 0xa8, 0x08, 0xfc, 0x80, 0x12, 0xbc, 0x41, 0x86, 0xe0, 0x2e, 0x4c, 0x63, | ||
| 1925 | 0x96, 0xa0, 0x0d, 0x66, 0x19, 0xc2, 0xa0, 0x0d, 0xf8, 0x61, 0x90, 0xa1, | ||
| 1926 | 0x17, 0xf0, 0x42, 0x34, 0x46, 0x0c, 0x0a, 0x23, 0x98, 0x8f, 0x60, 0x2d, | ||
| 1927 | 0xe6, 0x18, 0xe8, 0x22, 0x60, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0xea, 0x63, | ||
| 1928 | 0x60, 0x8b, 0x39, 0x06, 0x21, 0x68, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0xee, | ||
| 1929 | 0xa3, 0x68, 0x8b, 0x39, 0x06, 0x21, 0x60, 0x8f, 0x41, 0x86, 0x60, 0x2f, | ||
| 1930 | 0x5c, 0x63, 0x90, 0x21, 0x28, 0x07, 0xd8, 0x18, 0x6f, 0xb0, 0x8d, 0xf0, | ||
| 1931 | 0x98, 0x0f, 0x0a, 0xc6, 0x78, 0x03, 0x6e, 0x8c, 0x47, 0x7b, 0x50, 0x30, | ||
| 1932 | 0xe6, 0x18, 0x42, 0x23, 0xb8, 0x8f, 0x41, 0x86, 0x40, 0x34, 0x62, 0xc3, | ||
| 1933 | 0x82, 0x44, 0x3e, 0x83, 0x0c, 0x01, 0x69, 0xdc, 0xc6, 0x70, 0xc3, 0xe1, | ||
| 1934 | 0x16, 0xce, 0x2c, 0x03, 0x1b, 0x88, 0x41, 0x30, 0x86, 0x30, 0xf0, 0xc7, | ||
| 1935 | 0x70, 0x43, 0x10, 0x17, 0xca, 0x2c, 0x03, 0x19, 0x8c, 0x41, 0x60, 0xc2, | ||
| 1936 | 0x5c, 0xc8, 0x67, 0x96, 0xa0, 0x0c, 0x46, 0x0c, 0x08, 0x23, 0x40, 0x91, | ||
| 1937 | 0x61, 0xc4, 0xa0, 0x30, 0x02, 0x15, 0x09, 0xec, 0xc2, 0x02, 0xbc, 0x90, | ||
| 1938 | 0x8f, 0x05, 0x7a, 0x01, 0x9f, 0x59, 0x82, 0x32, 0x18, 0xa8, 0x00, 0x94, | ||
| 1939 | 0x31, 0x10, 0xc8, 0x60, 0x8e, 0x81, 0x35, 0x02, 0x12, 0x19, 0x43, 0x60, | ||
| 1940 | 0x48, 0x64, 0xb8, 0x21, 0xd0, 0x0b, 0x65, 0x96, 0xe1, 0x0c, 0xcc, 0x20, | ||
| 1941 | 0x30, 0x81, 0x2f, 0xe4, 0x33, 0x4b, 0x80, 0x06, 0x23, 0x06, 0x84, 0x11, | ||
| 1942 | 0xc4, 0xc8, 0x30, 0x62, 0x50, 0x18, 0xc1, 0x8c, 0x04, 0x7f, 0x61, 0x41, | ||
| 1943 | 0x68, 0xc8, 0xc7, 0x82, 0xd1, 0x80, 0xcf, 0x2c, 0x01, 0x1a, 0x0c, 0x54, | ||
| 1944 | 0x00, 0x8a, 0x19, 0x08, 0x67, 0x30, 0xc7, 0x90, 0x04, 0x2c, 0x32, 0x86, | ||
| 1945 | 0x50, 0xa9, 0xc8, 0x70, 0x43, 0x30, 0x1a, 0xca, 0x2c, 0x83, 0x1a, 0xa4, | ||
| 1946 | 0x41, 0x60, 0x42, 0x69, 0xc8, 0x67, 0x96, 0x60, 0x0d, 0x46, 0x0c, 0x08, | ||
| 1947 | 0x23, 0xd0, 0x91, 0x61, 0xc4, 0xa0, 0x30, 0x02, 0x1e, 0x09, 0x50, 0xc3, | ||
| 1948 | 0x02, 0xd5, 0x90, 0x8f, 0x05, 0xac, 0x01, 0x9f, 0x59, 0x82, 0x35, 0x18, | ||
| 1949 | 0xa8, 0x00, 0x94, 0x34, 0x10, 0xd4, 0x60, 0x8e, 0x21, 0x09, 0x64, 0x64, | ||
| 1950 | 0xc4, 0xc0, 0x30, 0x02, 0x31, 0x09, 0xc0, 0xc3, 0x37, 0x06, 0x19, 0x02, | ||
| 1951 | 0xf1, 0xa8, 0x8f, 0x59, 0x02, 0x36, 0x18, 0xa8, 0x08, 0xfc, 0x20, 0x0c, | ||
| 1952 | 0x84, 0x35, 0x18, 0x64, 0x08, 0xd0, 0xe3, 0x3e, 0x66, 0x09, 0xda, 0x60, | ||
| 1953 | 0xa0, 0x25, 0xe0, 0x11, 0x83, 0x47, 0x24, 0x1e, 0xf9, 0x64, 0x81, 0x0d, | ||
| 1954 | 0x78, 0x04, 0x0c, 0x06, 0x5a, 0x02, 0x14, 0x31, 0xf4, 0x42, 0x32, 0x87, | ||
| 1955 | 0x8f, 0x60, 0x03, 0xd7, 0x01, 0x83, 0x41, 0x86, 0x40, 0xd8, 0x0f, 0x0b, | ||
| 1956 | 0x46, 0x44, 0x3e, 0x19, 0x84, 0x03, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1957 | 0x00, 0xd7, 0xd2, 0x07, 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, | ||
| 1958 | 0x50, 0x13, 0xe7, 0x2c, 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, | ||
| 1959 | 0x9b, 0x6d, 0x29, 0x38, 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, | ||
| 1960 | 0x00, 0x03, 0x11, 0x71, 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, | ||
| 1961 | 0x21, 0x13, 0x00, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 1962 | 0x00, 0x5b, 0x0a, 0xe0, 0x98, 0x05, 0x04, 0x17, 0xb6, 0x14, 0xc1, 0x31, | ||
| 1963 | 0x0b, 0x08, 0x2e, 0x6c, 0x29, 0x8a, 0x63, 0x16, 0x10, 0x5c, 0xd8, 0x52, | ||
| 1964 | 0x24, 0x47, 0x2e, 0x20, 0xba, 0xb0, 0xa5, 0x70, 0x8e, 0x5c, 0x40, 0x74, | ||
| 1965 | 0x61, 0x4b, 0x31, 0x1d, 0xb9, 0x80, 0xe8, 0xc2, 0x96, 0x02, 0x3b, 0x72, | ||
| 1966 | 0x01, 0xd1, 0x85, 0x2d, 0xc3, 0x17, 0x88, 0xc3, 0x96, 0x81, 0x0c, 0x82, | ||
| 1967 | 0x71, 0xd8, 0x32, 0xdc, 0x41, 0x40, 0x0e, 0x5b, 0x06, 0x3e, 0x08, 0xca, | ||
| 1968 | 0x61, 0xcb, 0xe0, 0x07, 0x81, 0x39, 0x6c, 0x19, 0x4e, 0x21, 0x38, 0x87, | ||
| 1969 | 0x2d, 0x03, 0x2b, 0x04, 0xe8, 0xb0, 0x65, 0x98, 0x85, 0x20, 0x1d, 0xb6, | ||
| 1970 | 0x0c, 0xb5, 0x10, 0xa0, 0xc3, 0x96, 0x21, 0x25, 0x82, 0x74, 0xd8, 0x32, | ||
| 1971 | 0xac, 0x44, 0x80, 0x0e, 0x5b, 0x86, 0xd3, 0x08, 0xd2, 0x61, 0xcb, 0x90, | ||
| 1972 | 0x1a, 0x01, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1973 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 1974 | 0x00, 0x24, 0x00, 0x00, 0x00, 0x14, 0xcf, 0x41, 0x30, 0x0d, 0xe4, 0x06, | ||
| 1975 | 0x94, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, 0xe0, 0x0c, 0x00, 0x05, | ||
| 1976 | 0x33, 0x00, 0x54, 0xcc, 0x00, 0x8c, 0x35, 0xb0, 0xec, 0x19, 0xca, 0x1f, | ||
| 1977 | 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, 0xde, 0x58, 0x83, 0x5e, | ||
| 1978 | 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, 0xdb, 0xa7, 0xf4, 0xe8, | ||
| 1979 | 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, 0xc2, 0xe8, 0xee, 0xdd, | ||
| 1980 | 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, | ||
| 1981 | 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, | ||
| 1982 | 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, | ||
| 1983 | 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, | ||
| 1984 | 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, 0x33, 0x00, 0x04, 0x8c, | ||
| 1985 | 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, | ||
| 1986 | 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, 0x02, 0x0d, 0x37, 0x50, | ||
| 1987 | 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, 0x43, 0xc5, 0xc1, 0x20, | ||
| 1988 | 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, 0x08, 0xa0, 0x6a, 0x96, | ||
| 1989 | 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, 0x48, 0x82, 0xe1, 0x86, | ||
| 1990 | 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, 0x28, 0x8c, 0xe0, 0x0f, | ||
| 1991 | 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xf0, 0x60, 0xc4, 0xa0, 0x30, 0x82, 0x50, | ||
| 1992 | 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xc8, 0x83, 0x11, 0x83, 0xc2, 0x08, 0x46, | ||
| 1993 | 0x21, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xc0, 0x83, 0x59, 0x82, 0x62, 0xa0, | ||
| 1994 | 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xfc, 0x60, 0x0c, 0x41, 0xf0, | ||
| 1995 | 0x83, 0x31, 0x84, 0x81, 0x0f, 0x46, 0x0c, 0x0a, 0x23, 0x38, 0x05, 0x21, | ||
| 1996 | 0x18, 0x31, 0x28, 0x8c, 0x00, 0x15, 0x88, 0x60, 0xb8, 0x21, 0xb8, 0x84, | ||
| 1997 | 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, 0x0c, 0x6c, 0x40, 0x03, | ||
| 1998 | 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, 0x8f, 0x05, 0x1a, 0x7c, | ||
| 1999 | 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, 0x2a, 0x0c, 0x32, 0x04, | ||
| 2000 | 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, 0x08, 0xd2, 0xc0, 0x0d, | ||
| 2001 | 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, 0xa0, 0x98, 0x65, 0x40, | ||
| 2002 | 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, 0x31, 0x28, 0x8c, 0x00, | ||
| 2003 | 0x17, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0x20, 0x16, 0x46, 0x0c, 0x0a, | ||
| 2004 | 0x23, 0xd0, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, 0x40, 0x16, 0x46, 0x0c, | ||
| 2005 | 0x0a, 0x23, 0xe0, 0x85, 0x42, 0x0d, 0xe6, 0x18, 0x84, 0x20, 0x16, 0x66, | ||
| 2006 | 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, 0x10, 0x04, 0x04, 0x3a, | ||
| 2007 | 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2008 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2009 | 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 2010 | 0x00, 0x1c, 0x1c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, | ||
| 2011 | 0xde, 0x21, 0x0c, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x0b, 0x82, 0x20, | ||
| 2012 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 2013 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 2014 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 2015 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 2016 | 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, | ||
| 2017 | 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x88, 0x11, 0x62, 0xa8, | ||
| 2018 | 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, | ||
| 2019 | 0x00, 0xf7, 0x00, 0x00, 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, | ||
| 2020 | 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, | ||
| 2021 | 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, | ||
| 2022 | 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, | ||
| 2023 | 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, | ||
| 2024 | 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, | ||
| 2025 | 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, | ||
| 2026 | 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, 0x39, 0xc0, 0x03, 0x60, 0x70, | ||
| 2027 | 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, 0x74, 0x60, 0x07, 0x7a, 0x48, | ||
| 2028 | 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, | ||
| 2029 | 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, | ||
| 2030 | 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, | ||
| 2031 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 2032 | 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, | ||
| 2033 | 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, | ||
| 2034 | 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, | ||
| 2035 | 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, | ||
| 2036 | 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, | ||
| 2037 | 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, | ||
| 2038 | 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, | ||
| 2039 | 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, | ||
| 2040 | 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, | ||
| 2041 | 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, | ||
| 2042 | 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, | ||
| 2043 | 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, | ||
| 2044 | 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, | ||
| 2045 | 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, | ||
| 2046 | 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, | ||
| 2047 | 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, | ||
| 2048 | 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, | ||
| 2049 | 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, | ||
| 2050 | 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, | ||
| 2051 | 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 2052 | 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, | ||
| 2053 | 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0xc3, 0x26, 0x10, 0xc0, | ||
| 2054 | 0x02, 0x54, 0x43, 0x38, 0xa4, 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, | ||
| 2055 | 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, | ||
| 2056 | 0x38, 0xb0, 0x43, 0x3a, 0x84, 0xc3, 0x3c, 0x00, 0x1b, 0xb6, 0xa1, 0x00, | ||
| 2057 | 0x16, 0xa0, 0x1a, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, | ||
| 2058 | 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, 0x1d, 0xde, 0xa1, 0x0d, | ||
| 2059 | 0xc2, 0x81, 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, 0xd8, 0x60, 0x10, 0x08, | ||
| 2060 | 0xb0, 0x00, 0xd5, 0x06, 0xa3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, | ||
| 2061 | 0x00, 0x6a, 0x83, 0x8f, 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, | ||
| 2062 | 0x50, 0x11, 0xe1, 0x00, 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, | ||
| 2063 | 0x60, 0x0e, 0xf5, 0xe0, 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, | ||
| 2064 | 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, | ||
| 2065 | 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, | ||
| 2066 | 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, | ||
| 2067 | 0x3b, 0xc8, 0x43, 0x1b, 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, | ||
| 2068 | 0x90, 0x07, 0x76, 0x00, 0x0c, 0xee, 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, | ||
| 2069 | 0x90, 0x0e, 0xec, 0x40, 0x0f, 0xe9, 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, | ||
| 2070 | 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, | ||
| 2071 | 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, | ||
| 2072 | 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, | ||
| 2073 | 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, | ||
| 2074 | 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, | ||
| 2075 | 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, | ||
| 2076 | 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, | ||
| 2077 | 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, | ||
| 2078 | 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, | ||
| 2079 | 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, | ||
| 2080 | 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, | ||
| 2081 | 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, | ||
| 2082 | 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, | ||
| 2083 | 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, | ||
| 2084 | 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, | ||
| 2085 | 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, | ||
| 2086 | 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, | ||
| 2087 | 0x38, 0xc0, 0x03, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, | ||
| 2088 | 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, | ||
| 2089 | 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, | ||
| 2090 | 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, | ||
| 2091 | 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, | ||
| 2092 | 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, | ||
| 2093 | 0x3c, 0x84, 0x83, 0x39, 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, | ||
| 2094 | 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, | ||
| 2095 | 0x00, 0x6c, 0x40, 0x8e, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, | ||
| 2096 | 0x80, 0x6a, 0x83, 0x81, 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, | ||
| 2097 | 0x16, 0xa0, 0xda, 0x80, 0x28, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, | ||
| 2098 | 0x20, 0x01, 0xd5, 0x06, 0x63, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, | ||
| 2099 | 0x00, 0x6a, 0xc3, 0xc4, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x80, | ||
| 2100 | 0x34, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, | ||
| 2101 | 0x3d, 0xa4, 0x83, 0x3b, 0xcc, 0x03, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 2102 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, | ||
| 2103 | 0x31, 0x21, 0x30, 0x26, 0x0c, 0x07, 0x92, 0x4c, 0x18, 0x14, 0x24, 0x99, | ||
| 2104 | 0x10, 0x2c, 0x13, 0x02, 0x06, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, | ||
| 2105 | 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, | ||
| 2106 | 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, | ||
| 2107 | 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xb8, 0xc1, 0x0c, 0xc0, 0x30, 0x02, | ||
| 2108 | 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, | ||
| 2109 | 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, | ||
| 2110 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, 0x41, 0x18, 0x46, 0x18, | ||
| 2111 | 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, | ||
| 2112 | 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, | ||
| 2113 | 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, | ||
| 2114 | 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, 0xec, 0xbe, 0x1d, 0x21, | ||
| 2115 | 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, 0x84, 0xa3, 0xa4, 0x29, | ||
| 2116 | 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0xf8, 0xed, 0xe1, | ||
| 2117 | 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0xb8, 0x48, 0x9a, 0x22, 0x4a, | ||
| 2118 | 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, 0x7f, 0x1a, 0x23, 0x00, | ||
| 2119 | 0x06, 0x11, 0x18, 0xa1, 0x24, 0x41, 0x10, 0x08, 0x44, 0xb2, 0x2c, 0x0d, | ||
| 2120 | 0x39, 0x85, 0x28, 0x8a, 0xa2, 0x20, 0xa8, 0x0c, 0x00, 0x00, 0x90, 0x54, | ||
| 2121 | 0x04, 0x00, 0x20, 0xaa, 0x0c, 0x40, 0x51, 0x90, 0x55, 0x8c, 0xa2, 0x00, | ||
| 2122 | 0x00, 0x00, 0x20, 0xac, 0x0c, 0x45, 0x51, 0x90, 0x56, 0x84, 0xa2, 0x20, | ||
| 2123 | 0x6e, 0x8e, 0x20, 0x98, 0x23, 0x00, 0x83, 0x61, 0x04, 0xe1, 0x2b, 0x48, | ||
| 2124 | 0xb0, 0x34, 0x82, 0x07, 0x7a, 0x00, 0x85, 0x03, 0x01, 0x29, 0xf0, 0xcd, | ||
| 2125 | 0x11, 0x80, 0xc2, 0x20, 0x02, 0x20, 0x4c, 0x01, 0x8c, 0x00, 0x0c, 0x23, | ||
| 2126 | 0x0c, 0xdf, 0x20, 0x42, 0x20, 0x0c, 0x22, 0x1c, 0xc2, 0x20, 0x42, 0x21, | ||
| 2127 | 0x0c, 0x23, 0x10, 0x1f, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, | ||
| 2128 | 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, | ||
| 2129 | 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, | ||
| 2130 | 0x83, 0x0d, 0xb7, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, | ||
| 2131 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, | ||
| 2132 | 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, | ||
| 2133 | 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, | ||
| 2134 | 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, | ||
| 2135 | 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, | ||
| 2136 | 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, | ||
| 2137 | 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 2138 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, | ||
| 2139 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, | ||
| 2140 | 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, | ||
| 2141 | 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, | ||
| 2142 | 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, | ||
| 2143 | 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, | ||
| 2144 | 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, | ||
| 2145 | 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, | ||
| 2146 | 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, | ||
| 2147 | 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, | ||
| 2148 | 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, | ||
| 2149 | 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, | ||
| 2150 | 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, | ||
| 2151 | 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, | ||
| 2152 | 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, | ||
| 2153 | 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, | ||
| 2154 | 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, | ||
| 2155 | 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, | ||
| 2156 | 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, | ||
| 2157 | 0x20, 0x07, 0x43, 0x98, 0x07, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2158 | 0x80, 0x21, 0x4c, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, | ||
| 2159 | 0x10, 0x66, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, | ||
| 2160 | 0x53, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0xb9, | ||
| 2161 | 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x64, 0x08, | ||
| 2162 | 0x30, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x61, 0x26, 0x20, 0x00, | ||
| 2163 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x30, 0x1b, 0x10, 0x00, 0x02, | ||
| 2164 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x98, 0x0e, 0x08, 0x00, 0x01, 0x00, | ||
| 2165 | 0x00, 0x00, 0x00, 0x80, 0x21, 0xcc, 0x06, 0x04, 0x80, 0x00, 0x00, 0x00, | ||
| 2166 | 0x00, 0x00, 0xc0, 0x10, 0x46, 0x0c, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, | ||
| 2167 | 0x00, 0x00, 0xc8, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 2168 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 2169 | 0xfa, 0x46, 0x00, 0x4a, 0xa0, 0x10, 0x0a, 0xa4, 0x08, 0x0a, 0xa2, 0x80, | ||
| 2170 | 0x0a, 0x30, 0xa0, 0x0c, 0x0a, 0xa3, 0x50, 0x0a, 0xa6, 0x70, 0x0a, 0xac, | ||
| 2171 | 0x14, 0x8a, 0xa1, 0x1c, 0xa8, 0x2c, 0x9c, 0x11, 0x80, 0x42, 0x28, 0x88, | ||
| 2172 | 0xc2, 0x28, 0x90, 0x42, 0x29, 0x18, 0x22, 0xc7, 0x12, 0x24, 0x01, 0x00, | ||
| 2173 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, | ||
| 2174 | 0x10, 0x97, 0x29, 0xa2, 0x25, 0x10, 0xab, 0x32, 0xb9, 0xb9, 0xb4, 0x37, | ||
| 2175 | 0xb7, 0x21, 0xc6, 0xf7, 0x8c, 0x01, 0x40, 0x06, 0x64, 0x40, 0xe5, 0x6e, | ||
| 2176 | 0x0c, 0x2d, 0x4c, 0xee, 0x6b, 0x2e, 0x4d, 0xaf, 0x6c, 0x88, 0xf1, 0x31, | ||
| 2177 | 0x63, 0x20, 0x7c, 0x0d, 0xe3, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0xa4, | ||
| 2178 | 0xad, 0x8c, 0x2e, 0x8c, 0x0d, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, | ||
| 2179 | 0x0d, 0x64, 0x46, 0x06, 0x46, 0x66, 0xc6, 0x85, 0x06, 0x86, 0x06, 0x04, | ||
| 2180 | 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x65, 0x46, 0x06, 0x46, | ||
| 2181 | 0x66, 0xc6, 0x85, 0x06, 0x86, 0x26, 0x65, 0x88, 0x30, 0x06, 0xc4, 0x10, | ||
| 2182 | 0xe3, 0x63, 0x3e, 0xe8, 0x5b, 0x58, 0x34, 0x95, 0xd1, 0x85, 0xb1, 0x0d, | ||
| 2183 | 0x41, 0xc6, 0xe0, 0xf8, 0x98, 0x8f, 0xf9, 0x16, 0x6e, 0x61, 0x69, 0x72, | ||
| 2184 | 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, | ||
| 2185 | 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, | ||
| 2186 | 0x43, 0x84, 0x31, 0x48, 0xc8, 0x85, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, | ||
| 2187 | 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0x85, 0xcd, 0xd1, 0x7d, 0xb5, 0x85, | ||
| 2188 | 0xd1, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xc6, | ||
| 2189 | 0x60, 0x21, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, | ||
| 2190 | 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, | ||
| 2191 | 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, | ||
| 2192 | 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xc6, 0xa0, 0x61, 0x14, 0x96, 0x26, 0xe7, | ||
| 2193 | 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, | ||
| 2194 | 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, | ||
| 2195 | 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, | ||
| 2196 | 0x18, 0x1d, 0xcd, 0x10, 0x64, 0x0c, 0x9e, 0x6f, 0x19, 0x03, 0x68, 0x0c, | ||
| 2197 | 0xa2, 0x21, 0xc2, 0x18, 0x48, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, | ||
| 2198 | 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, | ||
| 2199 | 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, | ||
| 2200 | 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, | ||
| 2201 | 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, | ||
| 2202 | 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, | ||
| 2203 | 0xf4, 0x2d, 0x63, 0x40, 0x8d, 0x41, 0x35, 0x06, 0xd6, 0x18, 0x40, 0x63, | ||
| 2204 | 0x10, 0x8d, 0xc1, 0x35, 0x06, 0x18, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0x33, | ||
| 2205 | 0xb9, 0xb0, 0xb3, 0xb6, 0x32, 0x37, 0xba, 0xaf, 0x34, 0x37, 0xb8, 0x3a, | ||
| 2206 | 0x3a, 0x5a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, | ||
| 2207 | 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, | ||
| 2208 | 0x7c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xca, 0xe4, 0xe6, 0xe0, 0xca, 0xc6, | ||
| 2209 | 0xe8, 0xd2, 0xec, 0xca, 0x58, 0x8c, 0xbd, 0xb1, 0xbd, 0xc9, 0x0d, 0x91, | ||
| 2210 | 0x3e, 0x66, 0x0c, 0xb4, 0x31, 0xd8, 0xc6, 0xa0, 0x1a, 0x03, 0x6e, 0x0c, | ||
| 2211 | 0xa0, 0x31, 0x88, 0xc6, 0xe0, 0x1a, 0x83, 0x8e, 0xd9, 0x59, 0x99, 0x5b, | ||
| 2212 | 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, | ||
| 2213 | 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x0d, 0x33, | ||
| 2214 | 0xb6, 0xb7, 0x30, 0x3a, 0x19, 0x22, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 2215 | 0x72, 0x64, 0x43, 0xa4, 0xef, 0x19, 0x03, 0x6d, 0x0c, 0xbe, 0x31, 0xa8, | ||
| 2216 | 0xc6, 0x80, 0x1b, 0x03, 0x68, 0x0c, 0xc0, 0x60, 0x0c, 0xae, 0x31, 0x08, | ||
| 2217 | 0x03, 0x2a, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, | ||
| 2218 | 0x7c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xbe, | ||
| 2219 | 0xe6, 0xd2, 0xf4, 0xca, 0x28, 0x85, 0xa5, 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, | ||
| 2220 | 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, 0xb9, 0x91, 0x95, 0xe1, 0x11, | ||
| 2221 | 0x09, 0x4b, 0x93, 0x73, 0x91, 0x2b, 0x0b, 0x23, 0x23, 0x15, 0x96, 0x26, | ||
| 2222 | 0xe7, 0x32, 0x47, 0x27, 0x57, 0x37, 0x46, 0xf7, 0x45, 0x97, 0x07, 0x57, | ||
| 2223 | 0xf6, 0x95, 0xe6, 0x66, 0xf6, 0xc6, 0xc2, 0x8c, 0xed, 0x2d, 0x8c, 0x8e, | ||
| 2224 | 0xcc, 0xdc, 0x98, 0xd4, 0x91, 0xd0, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, | ||
| 2225 | 0x1d, 0x19, 0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0xb2, 0x2f, 0xba, 0x3c, | ||
| 2226 | 0xb8, 0x32, 0x2a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, | ||
| 2227 | 0x65, 0x5c, 0xc6, 0xde, 0xd8, 0xde, 0xe4, 0xbe, 0xe6, 0xc6, 0xc2, 0xd8, | ||
| 2228 | 0xca, 0xe8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0xb5, 0x95, | ||
| 2229 | 0xd1, 0xa1, 0xbd, 0x91, 0xf1, 0xa1, 0x7b, 0x73, 0x2b, 0x6b, 0x0b, 0x83, | ||
| 2230 | 0xfb, 0x32, 0x0b, 0x1b, 0xa3, 0x7b, 0x93, 0x8b, 0xe1, 0x43, 0xf7, 0xe6, | ||
| 2231 | 0x56, 0xd6, 0x16, 0x06, 0xf7, 0x65, 0x16, 0x36, 0x46, 0xf7, 0x26, 0x27, | ||
| 2232 | 0xc3, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, 0x2d, 0x8d, 0xae, 0xec, 0x0b, | ||
| 2233 | 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x08, 0x2c, 0x7c, 0xcb, 0xd7, 0x7c, 0xcb, | ||
| 2234 | 0x18, 0xa0, 0xc1, 0x18, 0xa4, 0xc1, 0xd7, 0x7c, 0xcd, 0xb7, 0x8c, 0x01, | ||
| 2235 | 0x1a, 0x8c, 0x81, 0x1a, 0x7c, 0xd0, 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, | ||
| 2236 | 0x18, 0xac, 0xc1, 0x47, 0x7d, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x01, | ||
| 2237 | 0x1b, 0x7c, 0xce, 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, 0xb4, 0xc1, | ||
| 2238 | 0x57, 0x7d, 0xcd, 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x81, 0x1b, 0x7c, 0xd6, | ||
| 2239 | 0xd7, 0x7c, 0xcb, 0x18, 0xa0, 0xc1, 0x18, 0xbc, 0xc1, 0x77, 0x7d, 0xcd, | ||
| 2240 | 0xb7, 0x8c, 0x01, 0x1a, 0x8c, 0x01, 0x1c, 0x30, 0x0a, 0x4b, 0x93, 0x73, | ||
| 2241 | 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x9a, 0x4b, 0xd3, | ||
| 2242 | 0x2b, 0xe3, 0x15, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0x45, 0x97, | ||
| 2243 | 0x07, 0x57, 0xf6, 0x15, 0xc6, 0x96, 0x76, 0xe6, 0xf6, 0x35, 0x97, 0xa6, | ||
| 2244 | 0x57, 0xc6, 0x67, 0x0a, 0x2d, 0x8c, 0xac, 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, | ||
| 2245 | 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x8e, 0xc1, 0xd8, 0x10, 0x32, 0xf8, 0xa6, | ||
| 2246 | 0x31, 0x18, 0x83, 0x31, 0x20, 0x83, 0x2f, 0x1a, 0x83, 0x32, 0xf8, 0x96, | ||
| 2247 | 0x8f, 0x19, 0x03, 0x33, 0x18, 0x83, 0x33, 0x18, 0x83, 0x38, 0x18, 0x03, | ||
| 2248 | 0x39, 0xf8, 0xa2, 0x31, 0x98, 0x83, 0xaf, 0x19, 0x03, 0x68, 0x0c, 0xe8, | ||
| 2249 | 0x60, 0x0c, 0xae, 0x31, 0xa8, 0x03, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 2250 | 0x33, 0x34, 0xde, 0xcc, 0xcc, 0xe6, 0xca, 0xe8, 0x88, 0x98, 0xb1, 0xbd, | ||
| 2251 | 0x85, 0xd1, 0xcd, 0xe0, 0xcd, 0xd0, 0x68, 0x0b, 0xa3, 0x93, 0x4b, 0xc3, | ||
| 2252 | 0x1b, 0x42, 0x7d, 0xcb, 0xe7, 0x7c, 0xcb, 0x18, 0xdc, 0xc1, 0x18, 0xe0, | ||
| 2253 | 0xc1, 0xe7, 0x7c, 0xd8, 0xb7, 0x8c, 0x41, 0x1e, 0x8c, 0x81, 0x1e, 0x30, | ||
| 2254 | 0xc9, 0xaa, 0xb2, 0x22, 0x2a, 0x1b, 0x7b, 0x23, 0x2b, 0xa3, 0x41, 0x56, | ||
| 2255 | 0x36, 0xf6, 0x46, 0x56, 0x36, 0x84, 0x0c, 0xbe, 0x66, 0x0c, 0xc6, 0x60, | ||
| 2256 | 0x0c, 0xc8, 0xe0, 0x93, 0xc6, 0xa0, 0x0c, 0x3e, 0xe6, 0x63, 0xc6, 0xc0, | ||
| 2257 | 0x0c, 0xc6, 0xe0, 0x0c, 0xc6, 0x60, 0x0f, 0xc6, 0x40, 0x0e, 0x3e, 0x69, | ||
| 2258 | 0x0c, 0xe6, 0xe0, 0x73, 0xc6, 0x00, 0x1a, 0x03, 0x3e, 0x18, 0x83, 0x6b, | ||
| 2259 | 0x0c, 0xfa, 0x80, 0x4b, 0x58, 0x9a, 0x9c, 0x0b, 0x5d, 0x19, 0x1e, 0x5d, | ||
| 2260 | 0x9d, 0x5c, 0x19, 0x95, 0xb0, 0x34, 0x39, 0x97, 0xb9, 0xb0, 0x36, 0x38, | ||
| 2261 | 0xb6, 0x32, 0x62, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, | ||
| 2262 | 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, | ||
| 2263 | 0x6c, 0x65, 0x3e, 0x24, 0xe8, 0xca, 0xf0, 0xb2, 0x86, 0x50, 0x5f, 0x36, | ||
| 2264 | 0x06, 0x7f, 0x30, 0x06, 0x65, 0xf0, 0x2d, 0x1f, 0x33, 0x06, 0xa0, 0x30, | ||
| 2265 | 0x06, 0xd0, 0x18, 0x84, 0xc2, 0x18, 0x5c, 0x63, 0x20, 0x0a, 0x2c, 0xe8, | ||
| 2266 | 0xca, 0xf0, 0xaa, 0xac, 0x86, 0x50, 0x9f, 0x36, 0x06, 0x7f, 0x30, 0x06, | ||
| 2267 | 0x65, 0xf0, 0x31, 0x1f, 0x33, 0x06, 0xa0, 0x30, 0x06, 0xd0, 0x18, 0x84, | ||
| 2268 | 0xc2, 0x18, 0x5c, 0x63, 0x40, 0x0a, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, | ||
| 2269 | 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x78, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, | ||
| 2270 | 0x95, 0xc9, 0x31, 0x98, 0x1b, 0x22, 0x7d, 0xdb, 0x18, 0x98, 0xc2, 0x18, | ||
| 2271 | 0x94, 0xc1, 0xb7, 0x7c, 0xcc, 0x18, 0x40, 0x63, 0x70, 0x0a, 0x63, 0x70, | ||
| 2272 | 0x8d, 0x01, 0x2a, 0x0c, 0x81, 0xc6, 0x20, 0x1b, 0x03, 0x6f, 0x0c, 0xc4, | ||
| 2273 | 0x60, 0x0c, 0xec, 0x60, 0x0c, 0xfc, 0x60, 0x0c, 0x46, 0x61, 0x0c, 0x4a, | ||
| 2274 | 0x61, 0x0c, 0x52, 0x61, 0x88, 0xf1, 0x00, 0x63, 0x30, 0x8d, 0x81, 0x2a, | ||
| 2275 | 0xb0, 0xfa, 0xd2, 0xa2, 0x9a, 0x8a, 0xa9, 0x99, 0x42, 0x0b, 0x23, 0x2b, | ||
| 2276 | 0x93, 0x1b, 0x7a, 0x73, 0x9b, 0xa3, 0x0b, 0x73, 0xa3, 0x9b, 0xe3, 0xf3, | ||
| 2277 | 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, | ||
| 2278 | 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, | ||
| 2279 | 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88, 0x30, 0x06, 0xae, 0x30, | ||
| 2280 | 0xc4, 0x18, 0x83, 0x56, 0x18, 0x83, 0x57, 0x28, 0x83, 0x6e, 0x88, 0x31, | ||
| 2281 | 0x06, 0x68, 0x30, 0x06, 0xb0, 0x50, 0x06, 0xdd, 0x10, 0x31, 0x18, 0x03, | ||
| 2282 | 0x56, 0x18, 0x83, 0x58, 0x28, 0x83, 0x6e, 0x0c, 0x62, 0xa1, 0x0c, 0xbc, | ||
| 2283 | 0x31, 0x88, 0x85, 0x32, 0xf8, 0xc6, 0x20, 0x16, 0xca, 0x00, 0x0c, 0xc6, | ||
| 2284 | 0x20, 0x16, 0xca, 0x20, 0x0c, 0xc6, 0x20, 0x16, 0xca, 0x40, 0x0c, 0xc6, | ||
| 2285 | 0x20, 0x16, 0xca, 0x60, 0x0c, 0xc6, 0x20, 0x16, 0xca, 0x80, 0x1b, 0x62, | ||
| 2286 | 0x8c, 0x81, 0x2c, 0x8c, 0x41, 0x2c, 0x94, 0x81, 0xc7, 0x31, 0x08, 0x4b, | ||
| 2287 | 0x93, 0x6b, 0x09, 0x63, 0x4b, 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, | ||
| 2288 | 0x2b, 0x9b, 0x43, 0x99, 0x22, 0x62, 0xfa, 0x72, 0xb2, 0x8a, 0x91, 0xf9, | ||
| 2289 | 0x32, 0x93, 0x0b, 0x3b, 0x6b, 0x2b, 0x73, 0xa3, 0x4b, 0x19, 0x42, 0x8c, | ||
| 2290 | 0x41, 0x2d, 0x8c, 0x01, 0x2d, 0xd0, 0x0a, 0x4b, 0x93, 0x6b, 0x09, 0x63, | ||
| 2291 | 0x4b, 0x0b, 0x9b, 0x6b, 0x99, 0x1b, 0x7b, 0x83, 0x2b, 0x6b, 0x09, 0x93, | ||
| 2292 | 0x3b, 0x43, 0x99, 0x49, 0x19, 0x62, 0x8c, 0xc1, 0x2d, 0x8c, 0x41, 0x2d, | ||
| 2293 | 0x8c, 0x81, 0x2d, 0x0c, 0x11, 0xc6, 0xe0, 0x16, 0x68, 0x85, 0xa5, 0xc9, | ||
| 2294 | 0xb5, 0x84, 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, | ||
| 2295 | 0xb5, 0x84, 0xc9, 0x9d, 0xa1, 0xd0, 0xa4, 0x0c, 0x31, 0xc6, 0x40, 0x17, | ||
| 2296 | 0xc6, 0xa0, 0x16, 0xc6, 0x20, 0x17, 0x88, 0x85, 0xa5, 0xc9, 0xb5, 0x84, | ||
| 2297 | 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0xd0, | ||
| 2298 | 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xcd, 0x0d, 0x31, 0xc6, 0x80, 0x17, | ||
| 2299 | 0xc6, 0xa0, 0x16, 0xc6, 0x60, 0x17, 0x88, 0x85, 0xa5, 0xc9, 0xb5, 0x84, | ||
| 2300 | 0xb1, 0xa5, 0x85, 0xcd, 0xb5, 0xcc, 0x8d, 0xbd, 0xc1, 0x95, 0xb5, 0xcc, | ||
| 2301 | 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0xcd, 0x0d, 0x31, 0xc6, 0xc0, 0x17, | ||
| 2302 | 0xc6, 0xa0, 0x16, 0xc6, 0xa0, 0x17, 0x86, 0x18, 0x63, 0xa0, 0x0b, 0x63, | ||
| 2303 | 0xc0, 0x0b, 0x63, 0xe0, 0x0b, 0x43, 0x88, 0x31, 0xe0, 0x85, 0x31, 0xf0, | ||
| 2304 | 0x85, 0x21, 0xc4, 0x18, 0xdc, 0xc2, 0x18, 0xe8, 0xc2, 0x10, 0x61, 0x0c, | ||
| 2305 | 0x74, 0x61, 0x88, 0x31, 0x06, 0xb7, 0x30, 0x06, 0xbc, 0x30, 0x06, 0xbe, | ||
| 2306 | 0x30, 0xc4, 0x18, 0x03, 0x59, 0x18, 0x83, 0x58, 0x28, 0x83, 0x6f, 0x88, | ||
| 2307 | 0x31, 0x06, 0xb2, 0x30, 0x06, 0xb1, 0x50, 0x06, 0xdc, 0x10, 0x63, 0x0c, | ||
| 2308 | 0x64, 0x61, 0x0c, 0x62, 0xa1, 0x0c, 0xc2, 0x60, 0x88, 0x31, 0x06, 0xb2, | ||
| 2309 | 0x30, 0x06, 0xb1, 0x50, 0x06, 0x62, 0x30, 0xc4, 0x18, 0x03, 0x59, 0x18, | ||
| 2310 | 0x83, 0x58, 0x28, 0x83, 0x31, 0x18, 0x62, 0x8c, 0x81, 0x2c, 0x8c, 0x41, | ||
| 2311 | 0x2c, 0x94, 0x01, 0x18, 0x0c, 0x31, 0xc6, 0x40, 0x16, 0xc6, 0x20, 0x16, | ||
| 2312 | 0xca, 0xa0, 0x1b, 0x11, 0xb1, 0x03, 0x3b, 0xd8, 0x43, 0x3b, 0xb8, 0x41, | ||
| 2313 | 0x3b, 0xbc, 0x03, 0x39, 0xd4, 0x03, 0x3b, 0x94, 0x83, 0x1b, 0x98, 0x03, | ||
| 2314 | 0x3b, 0x84, 0xc3, 0x39, 0xcc, 0xc3, 0x14, 0x21, 0x18, 0x46, 0x28, 0xec, | ||
| 2315 | 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, 0xee, | ||
| 2316 | 0x40, 0x0f, 0x53, 0x82, 0x62, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, | ||
| 2317 | 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, | ||
| 2318 | 0x02, 0x63, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, 0xe1, | ||
| 2319 | 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, 0xf6, | ||
| 2320 | 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x40, | ||
| 2321 | 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, 0xed, | ||
| 2322 | 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, 0xf4, | ||
| 2323 | 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x65, 0x50, 0x18, 0x67, 0x04, | ||
| 2324 | 0x13, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xe7, | ||
| 2325 | 0xd0, 0x0e, 0xe5, 0xe0, 0x0e, 0xf4, 0x30, 0x25, 0x58, 0x05, 0x00, 0x00, | ||
| 2326 | 0x00, 0x79, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 2327 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 2328 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 2329 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 2330 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 2331 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 2332 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 2333 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 2334 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 2335 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 2336 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 2337 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 2338 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 2339 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 2340 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 2341 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 2342 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 2343 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 2344 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 2345 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 2346 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 2347 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 2348 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 2349 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 2350 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 2351 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 2352 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 2353 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 2354 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 2355 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 2356 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 2357 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 2358 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 2359 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 2360 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 2361 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 2362 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 2363 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 2364 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 2365 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 2366 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 2367 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 2368 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 2369 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 2370 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 2371 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 2372 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 2373 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 2374 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 2375 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 2376 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 2377 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 2378 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 2379 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 2380 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 2381 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 2382 | 0x00, 0x2e, 0x00, 0x00, 0x00, 0x56, 0x90, 0xfd, 0x73, 0x6d, 0x6b, 0xcf, | ||
| 2383 | 0xb3, 0x60, 0xad, 0xd3, 0x10, 0x0c, 0xf0, 0x74, 0xd5, 0xfd, 0x17, 0x45, | ||
| 2384 | 0x51, 0x14, 0x76, 0x20, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x8f, | ||
| 2385 | 0x63, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x11, 0x34, 0x00, 0x12, 0xf9, 0x83, | ||
| 2386 | 0x33, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x29, 0x6c, 0x00, 0x12, 0xf9, 0x12, | ||
| 2387 | 0xc0, 0x3c, 0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0x83, | ||
| 2388 | 0x5f, 0xe1, 0xc5, 0x6d, 0x1b, 0xc2, 0x04, 0x20, 0x91, 0x5f, 0x00, 0xd2, | ||
| 2389 | 0xf4, 0x17, 0x40, 0x20, 0xf9, 0xd5, 0x5d, 0xdc, 0xb6, 0x05, 0x50, 0x00, | ||
| 2390 | 0x12, 0xf9, 0x05, 0x20, 0x4d, 0xbf, 0xb0, 0x00, 0xcc, 0xe3, 0x57, 0x77, | ||
| 2391 | 0x71, 0xdb, 0x96, 0x30, 0x01, 0x48, 0xe4, 0x17, 0x80, 0x34, 0xfd, 0x05, | ||
| 2392 | 0x03, 0x5c, 0x7e, 0x75, 0x17, 0xb7, 0x6d, 0x02, 0x10, 0x80, 0x44, 0x7e, | ||
| 2393 | 0x01, 0x48, 0xd3, 0xff, 0x38, 0x96, 0x5f, 0xdc, 0xb6, 0x01, 0x44, 0x6c, | ||
| 2394 | 0x57, 0xfe, 0xe7, 0x5b, 0xdb, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0x93, | ||
| 2395 | 0x0d, 0x44, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0x7f, 0x01, 0x04, 0x92, | ||
| 2396 | 0x5f, 0xdc, 0xb6, 0x19, 0x44, 0x00, 0x12, 0xf9, 0x05, 0x20, 0x4d, 0x7f, | ||
| 2397 | 0xc1, 0x00, 0x97, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 2398 | 0x00, 0x12, 0x02, 0x00, 0x00, 0x13, 0x04, 0x72, 0x10, 0x0b, 0x04, 0x00, | ||
| 2399 | 0x00, 0x56, 0x00, 0x00, 0x00, 0xd4, 0x8e, 0x45, 0x00, 0x81, 0x70, 0xcc, | ||
| 2400 | 0x41, 0x2c, 0xcc, 0x83, 0x07, 0x94, 0x8e, 0x35, 0x00, 0x03, 0x31, 0xc7, | ||
| 2401 | 0xb0, 0x30, 0x78, 0x30, 0xc7, 0xb0, 0xe0, 0x01, 0x1e, 0x8c, 0x00, 0x8c, | ||
| 2402 | 0x35, 0x00, 0x81, 0x40, 0x65, 0x11, 0x94, 0x00, 0x81, 0x63, 0x09, 0x01, | ||
| 2403 | 0x30, 0x02, 0x40, 0xdf, 0x0c, 0x00, 0x79, 0x23, 0x00, 0x35, 0x40, 0xc0, | ||
| 2404 | 0x0c, 0x00, 0x05, 0x33, 0x00, 0x33, 0x00, 0x73, 0x10, 0xb4, 0xa0, 0x0b, | ||
| 2405 | 0xb4, 0xb0, 0x07, 0x24, 0xcc, 0x00, 0x50, 0x31, 0x03, 0x30, 0x02, 0x30, | ||
| 2406 | 0x03, 0x30, 0xd6, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, | ||
| 2407 | 0x07, 0x82, 0x20, 0x88, 0x7f, 0x63, 0x0d, 0x6c, 0x3b, 0xff, 0xa4, 0xc7, | ||
| 2408 | 0xb6, 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, 0x37, 0xd6, 0x00, 0x82, | ||
| 2409 | 0x20, 0x5b, 0xff, 0x02, 0x08, 0x82, 0x6c, 0xfd, 0x0b, 0x20, 0x08, 0xb2, | ||
| 2410 | 0xf5, 0x2f, 0x8c, 0x35, 0x80, 0x20, 0xb8, 0xe6, 0x60, 0x00, 0x82, 0xe0, | ||
| 2411 | 0x9a, 0x83, 0x01, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x63, 0x0d, 0x20, 0x48, | ||
| 2412 | 0xb7, 0x39, 0x18, 0x80, 0x20, 0xdd, 0xe6, 0x60, 0x00, 0x82, 0x74, 0x9b, | ||
| 2413 | 0x83, 0xc1, 0x58, 0xc3, 0x3a, 0xe2, 0x31, 0x0b, 0x06, 0xeb, 0x88, 0xc7, | ||
| 2414 | 0x2c, 0x18, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0x30, 0xd6, 0x00, 0x82, 0x30, | ||
| 2415 | 0x1e, 0x8e, 0x01, 0x08, 0xc2, 0x78, 0x38, 0x06, 0x20, 0x08, 0xe3, 0xe1, | ||
| 2416 | 0x18, 0x8c, 0x35, 0x88, 0xb9, 0x98, 0xf6, 0x1f, 0x58, 0xf2, 0x6c, 0xfc, | ||
| 2417 | 0x0b, 0x63, 0xba, 0xaa, 0xb9, 0x2f, 0x8c, 0x35, 0xfc, 0x33, 0xe9, 0xff, | ||
| 2418 | 0xbe, 0x40, 0xd7, 0xa0, 0x98, 0x7f, 0x2d, 0x1c, 0xc7, 0xa0, 0x2f, 0x8c, | ||
| 2419 | 0x35, 0xcc, 0x7d, 0x9b, 0xa6, 0xbe, 0xd0, 0xba, 0x21, 0xcf, 0xfb, 0x02, | ||
| 2420 | 0x9f, 0xb3, 0x3e, 0xfe, 0x11, 0x30, 0x46, 0x00, 0x82, 0x20, 0x48, 0x82, | ||
| 2421 | 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x63, 0x04, 0x3a, 0x6b, | ||
| 2422 | 0xce, 0x21, 0x18, 0x8c, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, | ||
| 2423 | 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, | ||
| 2424 | 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, | ||
| 2425 | 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x0b, 0x63, 0x04, 0x7d, 0x2c, 0xba, | ||
| 2426 | 0xf8, 0x37, 0x46, 0x50, 0xab, 0xb5, 0xda, 0x7e, 0x63, 0x04, 0xb2, 0xe8, | ||
| 2427 | 0xf6, 0x34, 0x18, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x08, 0x00, | ||
| 2428 | 0x00, 0xe3, 0x0d, 0x73, 0xe0, 0x07, 0xaf, 0x40, 0xc1, 0x18, 0x6e, 0x08, | ||
| 2429 | 0x9e, 0x60, 0x96, 0x21, 0x10, 0x82, 0x11, 0x03, 0xa5, 0x08, 0x68, 0x81, | ||
| 2430 | 0x0e, 0xe4, 0xe0, 0x0e, 0xc8, 0xe0, 0x0c, 0xca, 0x80, 0x18, 0x31, 0x50, | ||
| 2431 | 0x8a, 0xa0, 0x16, 0xe8, 0x60, 0x0e, 0xf0, 0xa0, 0x0c, 0xd0, 0xc0, 0x0c, | ||
| 2432 | 0x8a, 0x41, 0x06, 0x61, 0x0c, 0xde, 0x60, 0x90, 0x41, 0x28, 0x83, 0x38, | ||
| 2433 | 0x18, 0x64, 0x10, 0x82, 0x39, 0x38, 0x3d, 0x50, 0x97, 0x82, 0x32, 0xc8, | ||
| 2434 | 0x10, 0xa4, 0x81, 0x1c, 0x18, 0x11, 0xc0, 0x67, 0xbc, 0xc1, 0x0f, 0x54, | ||
| 2435 | 0x61, 0x17, 0x2e, 0x50, 0x97, 0x82, 0x32, 0xc8, 0x10, 0xb8, 0xc1, 0x1d, | ||
| 2436 | 0x8c, 0x18, 0x14, 0x46, 0x70, 0x0e, 0x45, 0x30, 0xc7, 0xf0, 0x06, 0x41, | ||
| 2437 | 0x38, 0x8c, 0x57, 0x90, 0x02, 0x2c, 0x84, 0x83, 0x38, 0xe0, 0xc1, 0x05, | ||
| 2438 | 0xea, 0x52, 0x50, 0x06, 0x19, 0x02, 0x3a, 0xe8, 0x83, 0x11, 0x83, 0xc2, | ||
| 2439 | 0x08, 0xda, 0x61, 0x09, 0xe6, 0x18, 0x8c, 0xc0, 0x1c, 0xc6, 0x2b, 0x54, | ||
| 2440 | 0xc1, 0x16, 0xce, 0x01, 0x1d, 0xfe, 0xe0, 0x02, 0x75, 0x29, 0x28, 0x83, | ||
| 2441 | 0x0c, 0x81, 0x1e, 0x8c, 0xc2, 0x88, 0x41, 0x61, 0x04, 0xf3, 0x10, 0x05, | ||
| 2442 | 0x73, 0x0c, 0x46, 0x90, 0x0e, 0xb3, 0x04, 0xc4, 0x70, 0x43, 0xc7, 0x06, | ||
| 2443 | 0xc1, 0x2c, 0xc3, 0x40, 0x04, 0x23, 0x06, 0x4a, 0x11, 0xc0, 0x03, 0x2c, | ||
| 2444 | 0xb8, 0xc2, 0x2c, 0x80, 0xc2, 0x28, 0x84, 0x02, 0x18, 0x8c, 0x18, 0x28, | ||
| 2445 | 0x45, 0x10, 0x0f, 0xb0, 0xf0, 0x0a, 0xb4, 0x10, 0x0a, 0xa4, 0x20, 0x0a, | ||
| 2446 | 0x61, 0x30, 0xc8, 0x10, 0x80, 0x82, 0x29, 0x0c, 0x32, 0x0c, 0xa0, 0xc0, | ||
| 2447 | 0x0a, 0x83, 0x0c, 0xc2, 0x1f, 0xb8, 0xc2, 0x20, 0x83, 0x10, 0xc0, 0xc2, | ||
| 2448 | 0xdd, 0x82, 0xba, 0x14, 0x94, 0x41, 0x86, 0xc0, 0x14, 0x5e, 0xc1, 0x88, | ||
| 2449 | 0x00, 0x3e, 0xe3, 0x0d, 0xbb, 0x70, 0x0e, 0xf8, 0x70, 0x81, 0xba, 0x14, | ||
| 2450 | 0x94, 0x41, 0x86, 0x60, 0x15, 0x68, 0x61, 0xc4, 0xa0, 0x30, 0x02, 0x92, | ||
| 2451 | 0x28, 0x82, 0x39, 0x06, 0x56, 0x08, 0xfc, 0x61, 0xbc, 0x22, 0x1c, 0xda, | ||
| 2452 | 0xc1, 0x1f, 0xfe, 0xa1, 0x16, 0x2e, 0x50, 0x97, 0x82, 0x32, 0xc8, 0x10, | ||
| 2453 | 0xc4, 0x82, 0x2e, 0x8c, 0x18, 0x14, 0x46, 0xa0, 0x12, 0x4b, 0x30, 0xc7, | ||
| 2454 | 0x60, 0x04, 0x23, 0x31, 0x5e, 0x71, 0x0e, 0xf3, 0x40, 0x12, 0x25, 0xc1, | ||
| 2455 | 0x0b, 0x17, 0xa8, 0x4b, 0x41, 0x19, 0x64, 0x08, 0x6e, 0x01, 0x1c, 0x46, | ||
| 2456 | 0x0c, 0x0a, 0x23, 0x80, 0x89, 0x28, 0x98, 0x63, 0x30, 0x02, 0x93, 0x98, | ||
| 2457 | 0x25, 0x20, 0x06, 0x3a, 0x02, 0x3e, 0x08, 0x84, 0x01, 0x2e, 0x84, 0x39, | ||
| 2458 | 0x86, 0x60, 0x14, 0x48, 0x62, 0xbc, 0x01, 0x1e, 0xf6, 0x21, 0x25, 0x28, | ||
| 2459 | 0x18, 0xc3, 0x0d, 0x41, 0x2b, 0x04, 0xb3, 0x0c, 0x85, 0x11, 0x0c, 0x32, | ||
| 2460 | 0x10, 0xbf, 0x80, 0x0e, 0xe3, 0x0d, 0xf4, 0xf0, 0x0f, 0x21, 0x41, 0xc1, | ||
| 2461 | 0x18, 0x31, 0x20, 0x8c, 0xc0, 0x26, 0x86, 0x11, 0x83, 0xc2, 0x08, 0x70, | ||
| 2462 | 0x22, 0xd8, 0x05, 0x0b, 0x76, 0x01, 0x3e, 0x23, 0x06, 0x85, 0x11, 0xe0, | ||
| 2463 | 0x44, 0x00, 0x0e, 0x36, 0xf0, 0x82, 0x7c, 0x8c, 0x17, 0x82, 0xf8, 0xd8, | ||
| 2464 | 0x10, 0xd0, 0x67, 0xc4, 0x80, 0x30, 0x82, 0x9e, 0x08, 0x46, 0x0c, 0x0a, | ||
| 2465 | 0x23, 0xf8, 0x89, 0xc0, 0x17, 0x2c, 0xf0, 0x05, 0xf9, 0xcc, 0x31, 0xa0, | ||
| 2466 | 0xc3, 0xd2, 0x13, 0x83, 0x0c, 0x41, 0x3a, 0xdc, 0x83, 0x0d, 0x01, 0x7d, | ||
| 2467 | 0x06, 0x19, 0x82, 0x75, 0xe8, 0x87, 0x41, 0x86, 0xa0, 0xfa, 0x87, 0x59, | ||
| 2468 | 0x02, 0x63, 0xa0, 0x22, 0x10, 0x0a, 0x36, 0x20, 0xc6, 0x1b, 0x4c, 0x22, | ||
| 2469 | 0x26, 0xc2, 0x82, 0x82, 0x31, 0xdc, 0x10, 0xd8, 0x82, 0x33, 0xcb, 0x70, | ||
| 2470 | 0x20, 0xc1, 0x20, 0x03, 0x51, 0x0f, 0xfe, 0x30, 0xde, 0xa0, 0x12, 0x35, | ||
| 2471 | 0x91, 0x13, 0x14, 0x8c, 0xf1, 0x06, 0x96, 0xb8, 0x09, 0x9d, 0xa0, 0x60, | ||
| 2472 | 0x8c, 0x18, 0x20, 0x47, 0x14, 0x17, 0x45, 0x77, 0x0c, 0xc1, 0x20, 0x43, | ||
| 2473 | 0x70, 0x0f, 0x29, 0x31, 0xc8, 0x10, 0x2c, 0x2b, 0x31, 0x4b, 0x80, 0x0c, | ||
| 2474 | 0x54, 0x04, 0xc2, 0x81, 0x19, 0xc3, 0x0d, 0x61, 0x60, 0x0e, 0xc1, 0x2c, | ||
| 2475 | 0x43, 0x72, 0x05, 0xe3, 0x0d, 0x33, 0xe1, 0x13, 0x6f, 0x41, 0xc1, 0x18, | ||
| 2476 | 0x6e, 0x08, 0xd2, 0x21, 0x98, 0x65, 0x50, 0x96, 0x60, 0x90, 0xa1, 0x10, | ||
| 2477 | 0x89, 0x95, 0x18, 0x6f, 0xb8, 0x09, 0xb1, 0x60, 0x0b, 0x0a, 0xc6, 0x1c, | ||
| 2478 | 0x43, 0x48, 0x04, 0x76, 0x31, 0xc8, 0x10, 0x88, 0x04, 0x4c, 0x58, 0x50, | ||
| 2479 | 0xc8, 0x67, 0x90, 0x21, 0x20, 0x09, 0x9b, 0x98, 0x25, 0x88, 0x83, 0xf1, | ||
| 2480 | 0x86, 0x9e, 0x40, 0x0b, 0xbd, 0xa0, 0x60, 0x8c, 0x37, 0xfc, 0x84, 0x5a, | ||
| 2481 | 0xd0, 0x05, 0x05, 0x63, 0x90, 0x01, 0x6a, 0x89, 0x9d, 0x18, 0x6e, 0x20, | ||
| 2482 | 0xe0, 0xc1, 0x99, 0x65, 0x60, 0xac, 0x60, 0x0c, 0x41, 0x02, 0x8d, 0xe1, | ||
| 2483 | 0x86, 0x20, 0x1f, 0x94, 0x59, 0x06, 0xa7, 0x09, 0x4c, 0xd8, 0x07, 0xf9, | ||
| 2484 | 0xcc, 0x12, 0x3c, 0x36, 0xf4, 0x03, 0x7c, 0x46, 0x0c, 0x08, 0x23, 0x60, | ||
| 2485 | 0x8d, 0xc0, 0x02, 0x90, 0x90, 0xcf, 0x88, 0x41, 0x61, 0x04, 0xaf, 0x11, | ||
| 2486 | 0x88, 0xc4, 0x2c, 0xc1, 0x33, 0x50, 0x01, 0x28, 0x8d, 0xe0, 0xcc, 0x31, | ||
| 2487 | 0xd8, 0x44, 0x80, 0x1a, 0x63, 0x08, 0x1b, 0x6a, 0x0c, 0x37, 0x04, 0x22, | ||
| 2488 | 0xa1, 0xcc, 0x32, 0x44, 0x50, 0x60, 0x02, 0x49, 0xc8, 0x67, 0x96, 0x40, | ||
| 2489 | 0xb2, 0xc1, 0x24, 0xe0, 0x33, 0x62, 0x40, 0x18, 0x41, 0x6d, 0x04, 0x16, | ||
| 2490 | 0xa4, 0x84, 0x7c, 0x46, 0x0c, 0x0a, 0x23, 0xc0, 0x8d, 0x60, 0x25, 0x66, | ||
| 2491 | 0x09, 0xa4, 0x81, 0x0a, 0x40, 0x81, 0x84, 0x68, 0x8e, 0x21, 0x09, 0x60, | ||
| 2492 | 0x63, 0x0c, 0x81, 0x0c, 0x5c, 0x63, 0xb8, 0x21, 0x58, 0x09, 0x65, 0x96, | ||
| 2493 | 0x81, 0x9a, 0x02, 0x13, 0x5a, 0x42, 0x3e, 0xb3, 0x04, 0x95, 0x0d, 0x2f, | ||
| 2494 | 0x01, 0x9f, 0x11, 0x03, 0xc2, 0x08, 0x7c, 0x23, 0xb0, 0x40, 0x26, 0xe4, | ||
| 2495 | 0x33, 0x62, 0x50, 0x18, 0x41, 0x78, 0x04, 0x34, 0x31, 0x4b, 0x50, 0x0d, | ||
| 2496 | 0x54, 0x00, 0xca, 0x24, 0x50, 0x73, 0x0c, 0x49, 0x60, 0x1b, 0xb3, 0x04, | ||
| 2497 | 0xd6, 0x40, 0x45, 0x20, 0x54, 0x7a, 0xb0, 0x0c, 0x32, 0x04, 0x6b, 0x41, | ||
| 2498 | 0x17, 0x73, 0x0c, 0x68, 0x01, 0x06, 0xbd, 0x31, 0xc8, 0x10, 0xa4, 0xc5, | ||
| 2499 | 0x5d, 0xd8, 0x10, 0xc8, 0x67, 0x90, 0x21, 0x58, 0x8b, 0xbe, 0x98, 0x25, | ||
| 2500 | 0x88, 0x83, 0xe1, 0x86, 0x59, 0xf0, 0x89, 0x60, 0x96, 0x01, 0x23, 0x83, | ||
| 2501 | 0x60, 0x90, 0x81, 0x0e, 0xe2, 0x42, 0x2f, 0xc6, 0x1b, 0x4c, 0x23, 0x36, | ||
| 2502 | 0xc6, 0x83, 0x82, 0x31, 0xde, 0x80, 0x1a, 0xb3, 0xd1, 0x1b, 0x14, 0x8c, | ||
| 2503 | 0x39, 0x06, 0xb9, 0x08, 0xce, 0x63, 0x90, 0x21, 0x98, 0x8b, 0xd0, 0xb0, | ||
| 2504 | 0xe0, 0x90, 0xcf, 0x20, 0x43, 0x50, 0x17, 0xa7, 0x31, 0xdc, 0x70, 0xf0, | ||
| 2505 | 0x84, 0x33, 0xcb, 0x30, 0x06, 0x59, 0x30, 0x86, 0x30, 0xb0, 0xc7, 0x70, | ||
| 2506 | 0x43, 0xf0, 0x13, 0xca, 0x2c, 0xc3, 0xa6, 0x05, 0x26, 0x84, 0x85, 0x7c, | ||
| 2507 | 0x66, 0x09, 0xb8, 0x11, 0x03, 0xc2, 0x08, 0xee, 0x63, 0x18, 0x31, 0x28, | ||
| 2508 | 0x8c, 0x20, 0x3f, 0x02, 0xb2, 0xb0, 0xc0, 0x2c, 0xe4, 0x63, 0x01, 0x5a, | ||
| 2509 | 0xc0, 0x67, 0x96, 0x80, 0x1b, 0xa8, 0x00, 0x14, 0x4d, 0xd8, 0xe6, 0x18, | ||
| 2510 | 0xfa, 0x22, 0xa0, 0x8f, 0x31, 0x04, 0x86, 0x3e, 0x86, 0x1b, 0x02, 0xb4, | ||
| 2511 | 0x50, 0x66, 0x19, 0xbc, 0x2e, 0x30, 0x41, 0x2d, 0xe4, 0x33, 0x4b, 0xf0, | ||
| 2512 | 0x8d, 0x18, 0x10, 0x46, 0x00, 0x22, 0xc3, 0x88, 0x41, 0x61, 0x04, 0x22, | ||
| 2513 | 0x12, 0xb4, 0x85, 0x05, 0x6f, 0x21, 0x1f, 0x0b, 0xe2, 0x02, 0x3e, 0xb3, | ||
| 2514 | 0x04, 0xdf, 0x40, 0x05, 0xa0, 0x74, 0x82, 0x37, 0xc7, 0x90, 0x04, 0xfc, | ||
| 2515 | 0x31, 0x86, 0x50, 0xe9, 0xc7, 0x70, 0x43, 0x10, 0x17, 0xca, 0x2c, 0x43, | ||
| 2516 | 0x18, 0x80, 0x41, 0x60, 0xc2, 0x5c, 0xc8, 0x67, 0x96, 0x40, 0x0c, 0x46, | ||
| 2517 | 0x0c, 0x08, 0x23, 0x48, 0x91, 0x61, 0xc4, 0xa0, 0x30, 0x82, 0x15, 0x09, | ||
| 2518 | 0xec, 0xc2, 0x02, 0xbc, 0x90, 0x8f, 0x05, 0x7a, 0x01, 0x9f, 0x59, 0x02, | ||
| 2519 | 0x31, 0x18, 0xa8, 0x00, 0x14, 0x30, 0x10, 0xc2, 0x60, 0x8e, 0x21, 0x09, | ||
| 2520 | 0x44, 0x64, 0xc4, 0xc0, 0x30, 0x82, 0x18, 0x09, 0x62, 0xe3, 0x35, 0x06, | ||
| 2521 | 0x19, 0x82, 0xd9, 0x28, 0x8f, 0x59, 0x82, 0x31, 0x18, 0xa8, 0x08, 0xfc, | ||
| 2522 | 0x00, 0x13, 0xc4, 0x60, 0x90, 0x21, 0xc8, 0x8d, 0xf3, 0x98, 0x25, 0x88, | ||
| 2523 | 0x83, 0x59, 0x86, 0x32, 0x88, 0x03, 0x7e, 0x18, 0x64, 0xe8, 0x05, 0xdd, | ||
| 2524 | 0x18, 0x8f, 0x11, 0x83, 0xc2, 0x08, 0x66, 0x24, 0x68, 0x8d, 0x39, 0x06, | ||
| 2525 | 0xdb, 0x08, 0x5a, 0x64, 0xc4, 0xa0, 0x30, 0x82, 0x1a, 0x19, 0x5c, 0x63, | ||
| 2526 | 0x8e, 0x41, 0x08, 0x5c, 0x64, 0xc4, 0xa0, 0x30, 0x82, 0x1b, 0x29, 0x5e, | ||
| 2527 | 0x63, 0x8e, 0x41, 0x08, 0x5a, 0x64, 0x90, 0x21, 0xe8, 0x8d, 0xf7, 0x18, | ||
| 2528 | 0x64, 0x08, 0xca, 0x21, 0x3e, 0xc6, 0x1b, 0xee, 0x43, 0x44, 0x68, 0x84, | ||
| 2529 | 0x82, 0x31, 0xde, 0x90, 0x1f, 0x24, 0xe2, 0x22, 0x14, 0x8c, 0x39, 0x86, | ||
| 2530 | 0xf1, 0x08, 0x70, 0x64, 0x90, 0x21, 0x20, 0x0f, 0xf9, 0xb0, 0x20, 0x91, | ||
| 2531 | 0xcf, 0x20, 0x43, 0x60, 0x1e, 0xf8, 0x31, 0xdc, 0x70, 0xb4, 0x86, 0x33, | ||
| 2532 | 0xcb, 0x00, 0x07, 0x66, 0x10, 0x8c, 0x21, 0x0c, 0x3d, 0x32, 0xdc, 0x10, | ||
| 2533 | 0xc0, 0x86, 0x32, 0xcb, 0x80, 0x06, 0x67, 0x10, 0x98, 0x20, 0x1b, 0xf2, | ||
| 2534 | 0x99, 0x25, 0x48, 0x83, 0x11, 0x03, 0xc2, 0x08, 0xd0, 0x64, 0x18, 0x31, | ||
| 2535 | 0x28, 0x8c, 0x40, 0x4d, 0x82, 0xda, 0xb0, 0xe0, 0x36, 0xe4, 0x63, 0x41, | ||
| 2536 | 0x6e, 0xc0, 0x67, 0x96, 0x20, 0x0d, 0x06, 0x2a, 0x00, 0xe5, 0x0c, 0x04, | ||
| 2537 | 0x34, 0x98, 0x63, 0x70, 0x8f, 0xa0, 0x4c, 0xc6, 0x10, 0x98, 0x32, 0x19, | ||
| 2538 | 0x6e, 0x08, 0x72, 0x43, 0x99, 0x65, 0x58, 0x03, 0x35, 0x08, 0x4c, 0xd8, | ||
| 2539 | 0x0d, 0xf9, 0xcc, 0x12, 0xb0, 0xc1, 0x88, 0x01, 0x61, 0x04, 0x71, 0x32, | ||
| 2540 | 0x8c, 0x18, 0x14, 0x46, 0x30, 0x27, 0x81, 0x6f, 0x58, 0x00, 0x1e, 0xf2, | ||
| 2541 | 0xb1, 0x40, 0x3c, 0xe0, 0x33, 0x4b, 0xc0, 0x06, 0x03, 0x15, 0x80, 0xa2, | ||
| 2542 | 0x06, 0xc2, 0x1a, 0xcc, 0x31, 0x24, 0x41, 0x9b, 0x8c, 0x21, 0x54, 0x6b, | ||
| 2543 | 0x32, 0xdc, 0x10, 0x88, 0x87, 0x32, 0xcb, 0xe0, 0x06, 0x6d, 0x10, 0x98, | ||
| 2544 | 0x40, 0x1e, 0xf2, 0x99, 0x25, 0x78, 0x83, 0x11, 0x03, 0xc2, 0x08, 0xf4, | ||
| 2545 | 0x64, 0x18, 0x31, 0x28, 0x8c, 0x80, 0x4f, 0x82, 0xf3, 0xb0, 0x20, 0x3d, | ||
| 2546 | 0xe4, 0x63, 0xc1, 0x7a, 0xc0, 0x67, 0x96, 0xe0, 0x0d, 0x06, 0x2a, 0x00, | ||
| 2547 | 0xa5, 0x0d, 0x04, 0x37, 0x98, 0x63, 0x48, 0x82, 0x39, 0x19, 0x31, 0x30, | ||
| 2548 | 0x8c, 0x40, 0x54, 0x02, 0x11, 0x01, 0x91, 0x41, 0x86, 0x80, 0x44, 0x6c, | ||
| 2549 | 0x64, 0x96, 0x00, 0x0e, 0x06, 0x2a, 0x02, 0x3f, 0x28, 0x03, 0xe1, 0x0d, | ||
| 2550 | 0x06, 0x19, 0x02, 0x15, 0xc1, 0x91, 0x59, 0x82, 0x38, 0x18, 0x68, 0x09, | ||
| 2551 | 0x78, 0x44, 0xe1, 0x11, 0x8b, 0x47, 0xc6, 0x40, 0x16, 0xe0, 0x80, 0x47, | ||
| 2552 | 0xc8, 0x60, 0xa0, 0x25, 0x40, 0x11, 0x45, 0x2f, 0x2c, 0x73, 0x18, 0x03, | ||
| 2553 | 0x02, 0x0e, 0x68, 0x88, 0x0c, 0x06, 0x19, 0x02, 0x81, 0x47, 0x2c, 0x20, | ||
| 2554 | 0x13, 0xf9, 0x64, 0x10, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 2555 | 0x00, 0x17, 0xd3, 0x07, 0xff, 0x5c, 0xe3, 0x20, 0x31, 0xa1, 0xd4, 0xf4, | ||
| 2556 | 0x50, 0x13, 0xe7, 0x2c, 0x4e, 0xd4, 0x55, 0xf8, 0x5f, 0xac, 0x6e, 0x5d, | ||
| 2557 | 0x9b, 0x6d, 0x29, 0x38, 0x8d, 0x34, 0x01, 0xcd, 0x44, 0xd6, 0x39, 0x7b, | ||
| 2558 | 0x00, 0x03, 0x11, 0x71, 0x4e, 0x23, 0x4d, 0x40, 0x33, 0x49, 0x3e, 0x71, | ||
| 2559 | 0x21, 0x13, 0x00, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x2c, 0x00, 0x00, | ||
| 2560 | 0x00, 0x5b, 0x8e, 0x20, 0x98, 0x85, 0x03, 0x17, 0x90, 0x5f, 0xd8, 0x52, | ||
| 2561 | 0x10, 0x07, 0x38, 0x20, 0xe1, 0xb0, 0xa5, 0x28, 0x0e, 0x70, 0x40, 0xc2, | ||
| 2562 | 0x61, 0x4b, 0xa1, 0x1c, 0xe2, 0x80, 0x8c, 0xc3, 0x96, 0xe2, 0x39, 0xc4, | ||
| 2563 | 0x01, 0x19, 0x87, 0x2d, 0x45, 0x75, 0x88, 0x03, 0x32, 0x0e, 0x5b, 0x8a, | ||
| 2564 | 0xed, 0x10, 0x07, 0x64, 0x1c, 0xb6, 0x14, 0x62, 0x70, 0x80, 0x03, 0x12, | ||
| 2565 | 0x0e, 0x5b, 0x8a, 0x31, 0x38, 0xc0, 0x01, 0x09, 0x87, 0x2d, 0x45, 0x1a, | ||
| 2566 | 0x1c, 0xe2, 0x80, 0x8c, 0xc3, 0x96, 0xc2, 0x0d, 0x0e, 0x71, 0x40, 0xc6, | ||
| 2567 | 0x61, 0x4b, 0x41, 0x07, 0x87, 0x38, 0x20, 0xe3, 0xb0, 0xa5, 0xd0, 0x83, | ||
| 2568 | 0x43, 0x1c, 0x90, 0x71, 0xd8, 0x32, 0x88, 0x42, 0x40, 0x0e, 0x5b, 0x86, | ||
| 2569 | 0x53, 0x08, 0xca, 0x61, 0xcb, 0xa0, 0x0b, 0x81, 0x39, 0x6c, 0x19, 0x7e, | ||
| 2570 | 0x21, 0x38, 0x87, 0x2d, 0x43, 0x38, 0x04, 0xe8, 0xb0, 0x65, 0x50, 0x87, | ||
| 2571 | 0x60, 0x16, 0xb6, 0x0c, 0xef, 0x10, 0xa4, 0xc3, 0x96, 0xc1, 0x1e, 0x02, | ||
| 2572 | 0x75, 0xd8, 0x32, 0xe0, 0x43, 0x90, 0x0e, 0x5b, 0x06, 0xb6, 0x08, 0xd4, | ||
| 2573 | 0x61, 0xcb, 0xe0, 0x16, 0x41, 0x3a, 0x6c, 0x19, 0xd4, 0x23, 0x50, 0x87, | ||
| 2574 | 0x2d, 0x03, 0x7b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2575 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, | ||
| 2576 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xd4, 0xce, 0x41, | ||
| 2577 | 0x2c, 0xcc, 0xd3, 0x06, 0x94, 0x8e, 0x00, 0x8c, 0x35, 0x00, 0x81, 0x40, | ||
| 2578 | 0xdf, 0x0c, 0x00, 0x05, 0x33, 0x00, 0x54, 0xcc, 0x00, 0x8c, 0x35, 0xb0, | ||
| 2579 | 0xec, 0x19, 0xca, 0x1f, 0xea, 0x97, 0xb1, 0xfa, 0xe5, 0xa7, 0x2e, 0xce, | ||
| 2580 | 0xde, 0x58, 0x83, 0x5e, 0x83, 0x3b, 0xee, 0xa9, 0x78, 0x6e, 0xdb, 0xdf, | ||
| 2581 | 0xdb, 0xa7, 0xf4, 0xe8, 0x8d, 0x35, 0xac, 0x73, 0xcc, 0xa2, 0x5e, 0x1a, | ||
| 2582 | 0xc2, 0xe8, 0xee, 0xdd, 0x6d, 0xac, 0xda, 0xdf, 0x58, 0x83, 0x98, 0x8b, | ||
| 2583 | 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, | ||
| 2584 | 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, | ||
| 2585 | 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, | ||
| 2586 | 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x05, | ||
| 2587 | 0x33, 0x00, 0x04, 0x8c, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, | ||
| 2588 | 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x00, 0x00, 0x83, 0x0c, 0xd5, | ||
| 2589 | 0x02, 0x0d, 0x37, 0x50, 0x42, 0x30, 0xcb, 0x10, 0x08, 0xc1, 0x1c, 0x43, | ||
| 2590 | 0x43, 0xc5, 0xc1, 0x20, 0x43, 0xe0, 0x48, 0x16, 0x64, 0xf2, 0x19, 0x64, | ||
| 2591 | 0x08, 0xa0, 0x6a, 0x96, 0x20, 0x19, 0x6e, 0xc8, 0x90, 0x60, 0x96, 0x61, | ||
| 2592 | 0x48, 0x82, 0xe1, 0x86, 0x2d, 0x09, 0x66, 0x19, 0x88, 0x22, 0x18, 0x31, | ||
| 2593 | 0x28, 0x8c, 0xc0, 0x0f, 0x3a, 0x69, 0x8e, 0xa1, 0x0a, 0xf0, 0x60, 0xc4, | ||
| 2594 | 0xa0, 0x30, 0x02, 0x50, 0xf8, 0xa6, 0x39, 0x06, 0x21, 0xc8, 0x83, 0x11, | ||
| 2595 | 0x83, 0xc2, 0x08, 0x44, 0x21, 0x0c, 0xa8, 0x39, 0x06, 0x21, 0xc0, 0x83, | ||
| 2596 | 0x59, 0x82, 0x62, 0xa0, 0x22, 0x10, 0x08, 0x6e, 0x18, 0x43, 0x08, 0xfc, | ||
| 2597 | 0x60, 0x0c, 0x41, 0xf0, 0x83, 0x31, 0x84, 0x81, 0x0f, 0x46, 0x0c, 0x0a, | ||
| 2598 | 0x23, 0x30, 0x05, 0x21, 0x18, 0x31, 0x28, 0x8c, 0xe0, 0x14, 0x88, 0x60, | ||
| 2599 | 0xb8, 0x21, 0xb8, 0x84, 0x59, 0x06, 0xe3, 0x08, 0x06, 0x19, 0x8e, 0x6c, | ||
| 2600 | 0x0c, 0x6c, 0x40, 0x03, 0xf9, 0x58, 0x80, 0xc1, 0xc7, 0x8a, 0x34, 0x90, | ||
| 2601 | 0x8f, 0x05, 0x1a, 0x7c, 0x6c, 0x08, 0xe8, 0x33, 0xc7, 0x60, 0x06, 0x81, | ||
| 2602 | 0x2a, 0x0c, 0x32, 0x04, 0x67, 0xb0, 0x06, 0x16, 0x20, 0xf2, 0x19, 0x64, | ||
| 2603 | 0x08, 0xd2, 0xc0, 0x0d, 0x66, 0x09, 0x8e, 0x81, 0x8a, 0x40, 0x30, 0xc4, | ||
| 2604 | 0xa0, 0x98, 0x65, 0x40, 0x92, 0x6c, 0x90, 0x21, 0x20, 0x03, 0x37, 0x18, | ||
| 2605 | 0x31, 0x28, 0x8c, 0xe0, 0x16, 0x02, 0x34, 0x98, 0x63, 0x70, 0x83, 0x20, | ||
| 2606 | 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xc8, 0x85, 0x21, 0x0d, 0xe6, 0x18, 0x84, | ||
| 2607 | 0x40, 0x16, 0x46, 0x0c, 0x0a, 0x23, 0xd8, 0x85, 0x42, 0x0d, 0xe6, 0x18, | ||
| 2608 | 0x84, 0x20, 0x16, 0x66, 0x09, 0x92, 0x81, 0x92, 0x80, 0x14, 0x02, 0x57, | ||
| 2609 | 0x10, 0x04, 0x04, 0x3a, 0x06, 0x19, 0x02, 0x36, 0xb0, 0x83, 0x0c, 0x00, | ||
| 2610 | 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 2611 | }; | ||
| 2612 | const unsigned int sdl_metallib_len = 31301; | ||
diff --git a/SDL-3.2.8/src/render/metal/SDL_shaders_metal_tvsimulator.h b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_tvsimulator.h new file mode 100644 index 0000000..f152da3 --- /dev/null +++ b/SDL-3.2.8/src/render/metal/SDL_shaders_metal_tvsimulator.h | |||
| @@ -0,0 +1,3155 @@ | |||
| 1 | const unsigned char sdl_metallib[] = { | ||
| 2 | 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 3 | 0x00, 0x00, 0x00, 0x00, 0xbd, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 4 | 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x03, 0x00, 0x00, | ||
| 5 | 0x00, 0x00, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 6 | 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, | ||
| 7 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 8 | 0x3d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f, 0x00, 0x00, | ||
| 9 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, | ||
| 10 | 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, | ||
| 11 | 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, | ||
| 12 | 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, | ||
| 13 | 0x15, 0xf9, 0x4d, 0x6f, 0xe5, 0x9c, 0xb5, 0x9e, 0xfb, 0x24, 0xc0, 0x2a, | ||
| 14 | 0x04, 0x12, 0xb6, 0x3d, 0xce, 0x01, 0xe2, 0xef, 0x83, 0xef, 0x5c, 0xac, | ||
| 15 | 0x5a, 0xb2, 0xc9, 0xf0, 0xc8, 0xba, 0xc9, 0x2b, 0x4d, 0x44, 0x53, 0x5a, | ||
| 16 | 0x08, 0x00, 0xa0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x46, | ||
| 17 | 0x46, 0x54, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 19 | 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, 0x00, | ||
| 20 | 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x85, 0x00, | ||
| 21 | 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, | ||
| 22 | 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, | ||
| 23 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 24 | 0x00, 0x52, 0xb6, 0xb7, 0xe5, 0x86, 0x26, 0xb7, 0x1a, 0x21, 0xaf, 0xe3, | ||
| 25 | 0x79, 0x7a, 0x10, 0xe2, 0x0b, 0xc0, 0x31, 0xb4, 0x53, 0x24, 0xfd, 0x59, | ||
| 26 | 0xdf, 0x13, 0x54, 0xe6, 0x9f, 0x33, 0x99, 0x7a, 0x96, 0x4d, 0x44, 0x53, | ||
| 27 | 0x5a, 0x08, 0x00, 0xb0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, | ||
| 28 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 29 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0e, 0x00, | ||
| 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, | ||
| 31 | 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x88, | ||
| 32 | 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, | ||
| 33 | 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, | ||
| 34 | 0x65, 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, | ||
| 35 | 0x41, 0x53, 0x48, 0x20, 0x00, 0x52, 0x06, 0xe9, 0x1b, 0x32, 0x0a, 0xb5, | ||
| 36 | 0xca, 0xb9, 0x78, 0x6c, 0x25, 0x2c, 0xfe, 0x03, 0x5b, 0x15, 0xc9, 0x22, | ||
| 37 | 0xfe, 0xf9, 0x65, 0x38, 0x46, 0x53, 0x98, 0xa9, 0x8a, 0xea, 0xbd, 0x05, | ||
| 38 | 0x56, 0x4d, 0x44, 0x53, 0x5a, 0x08, 0x00, 0x10, 0x0e, 0x00, 0x00, 0x00, | ||
| 39 | 0x00, 0x00, 0x00, 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x66, 0x00, 0x00, | ||
| 40 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 41 | 0x00, 0x50, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, | ||
| 42 | 0x53, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, | ||
| 43 | 0x4e, 0x44, 0x54, 0x87, 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, | ||
| 44 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, | ||
| 45 | 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, | ||
| 46 | 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x35, 0x0e, 0x3c, 0xe0, | ||
| 47 | 0xce, 0x53, 0x67, 0x6e, 0xfb, 0xaf, 0x12, 0x13, 0x2f, 0x9a, 0x35, 0x08, | ||
| 48 | 0x2a, 0x4e, 0xd6, 0xe8, 0xa9, 0xff, 0xce, 0xe6, 0x90, 0x33, 0xa6, 0x4b, | ||
| 49 | 0xb3, 0xc1, 0x2d, 0x79, 0x4d, 0x44, 0x53, 0x5a, 0x08, 0x00, 0x50, 0x1f, | ||
| 50 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, | ||
| 51 | 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, | ||
| 52 | 0x00, 0x00, 0x00, 0x00, 0x60, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 53 | 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, | ||
| 54 | 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x86, 0x00, 0x00, 0x00, 0x4e, 0x41, | ||
| 55 | 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x59, 0x55, 0x56, 0x5f, | ||
| 56 | 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, | ||
| 57 | 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0xa7, 0x01, | ||
| 58 | 0x7b, 0x12, 0xea, 0xf0, 0xa5, 0x6a, 0x6b, 0x4f, 0xc0, 0x6d, 0xb6, 0xea, | ||
| 59 | 0x5f, 0xd2, 0x67, 0xf6, 0x0d, 0xb4, 0x84, 0x9a, 0x83, 0xef, 0xdf, 0x35, | ||
| 60 | 0x42, 0x30, 0xb3, 0x5b, 0x2f, 0x4a, 0x4d, 0x44, 0x53, 0x5a, 0x08, 0x00, | ||
| 61 | 0x10, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x46, 0x46, 0x54, | ||
| 62 | 0x18, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, | ||
| 63 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x4a, 0x00, 0x00, 0x00, 0x00, | ||
| 64 | 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, | ||
| 65 | 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x87, 0x00, 0x00, 0x00, | ||
| 66 | 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x4e, 0x56, | ||
| 67 | 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, | ||
| 68 | 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20, | ||
| 69 | 0x00, 0x01, 0x40, 0xa0, 0xf0, 0xd1, 0x67, 0x2d, 0x43, 0x1e, 0xf0, 0x7f, | ||
| 70 | 0xf2, 0x38, 0xda, 0xd8, 0x27, 0x85, 0xad, 0x09, 0xbf, 0x29, 0x25, 0x29, | ||
| 71 | 0x69, 0xde, 0x09, 0xb7, 0x80, 0xe9, 0x50, 0xc7, 0x35, 0x4d, 0x44, 0x53, | ||
| 72 | 0x5a, 0x08, 0x00, 0xc0, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, | ||
| 73 | 0x46, 0x46, 0x54, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 74 | 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6c, 0x00, | ||
| 75 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x02, | ||
| 76 | 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x45, | ||
| 77 | 0x4e, 0x44, 0x54, 0x29, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x15, | ||
| 78 | 0x00, 0x02, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, | ||
| 79 | 0x00, 0x80, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x56, 0x41, | ||
| 80 | 0x54, 0x59, 0x04, 0x00, 0x02, 0x00, 0x04, 0x06, 0x45, 0x4e, 0x44, 0x54, | ||
| 81 | 0x35, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54, 0x20, 0x00, 0x03, 0x00, | ||
| 82 | 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x80, 0x63, | ||
| 83 | 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, | ||
| 84 | 0x6f, 0x72, 0x64, 0x00, 0x02, 0x80, 0x56, 0x41, 0x54, 0x59, 0x05, 0x00, | ||
| 85 | 0x03, 0x00, 0x04, 0x06, 0x04, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 86 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 87 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 88 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 89 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 90 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, | ||
| 91 | 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, | ||
| 92 | 0x00, 0x45, 0x4e, 0x44, 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 93 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x8c, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 94 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 95 | 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, 0xc8, 0x14, 0x00, 0x00, | ||
| 96 | 0x00, 0x21, 0x0c, 0x00, 0x00, 0x66, 0x03, 0x00, 0x00, 0x0b, 0x02, 0x21, | ||
| 97 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 98 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 99 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 100 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 101 | 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 102 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, 0x90, 0x91, 0x22, 0xc4, | ||
| 103 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, | ||
| 104 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 105 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, | ||
| 106 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 107 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 108 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 109 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 110 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 111 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 112 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 113 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 114 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 115 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 116 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 117 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 118 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 119 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 120 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 121 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 122 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 123 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 124 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 125 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 126 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 127 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 128 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 129 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 130 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 131 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 132 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 133 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 134 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 135 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 136 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 137 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 138 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x78, | ||
| 139 | 0xc2, 0x00, 0x2c, 0x40, 0x15, 0xa4, 0x01, 0x28, 0x0c, 0xe1, 0x90, 0x0e, | ||
| 140 | 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, | ||
| 141 | 0x6d, 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe1, 0xc0, 0x0e, 0xe9, 0x10, 0x0e, | ||
| 142 | 0xf3, 0x00, 0x6c, 0xf0, 0x06, 0x02, 0x58, 0x80, 0x2a, 0x48, 0x03, 0x50, | ||
| 143 | 0x18, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, | ||
| 144 | 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, 0x1d, 0xde, 0xa1, 0x0d, 0xc2, 0x81, | ||
| 145 | 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 146 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 147 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 148 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 149 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 150 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x60, 0x87, 0x10, 0xc0, | ||
| 151 | 0x30, 0x82, 0x00, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 152 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 153 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 154 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x52, 0x88, | ||
| 155 | 0x11, 0x8c, 0xa1, 0x33, 0x10, 0x30, 0x47, 0x00, 0x06, 0x29, 0xa0, 0xe6, | ||
| 156 | 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00, | ||
| 157 | 0x00, 0x13, 0xc0, 0x20, 0x1c, 0xd2, 0x41, 0x1e, 0xec, 0x80, 0x0e, 0xda, | ||
| 158 | 0x20, 0x1c, 0xe0, 0x01, 0x1e, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xec, | ||
| 159 | 0xe1, 0x1d, 0xe6, 0x21, 0x0e, 0xe6, 0xc0, 0x0d, 0xe0, 0xc0, 0x0d, 0xe0, | ||
| 160 | 0xa0, 0x0d, 0xe6, 0x21, 0x1d, 0xda, 0xa1, 0x1e, 0xd8, 0x21, 0x1c, 0xe8, | ||
| 161 | 0xe1, 0x1d, 0xe4, 0x61, 0xc3, 0x6d, 0x94, 0x43, 0x1b, 0xc0, 0x83, 0x1e, | ||
| 162 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 163 | 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1e, 0xe0, 0x81, 0x1e, 0xe0, 0x41, 0x1b, | ||
| 164 | 0xa4, 0x03, 0x1e, 0xe8, 0x01, 0x1e, 0xe8, 0x01, 0x1e, 0xb4, 0x41, 0x3a, | ||
| 165 | 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 166 | 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, | ||
| 167 | 0xcc, 0x81, 0x1c, 0xb4, 0x41, 0x3a, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, | ||
| 168 | 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x39, 0xcc, 0x81, 0x1c, | ||
| 169 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x39, | ||
| 170 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 171 | 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, | ||
| 172 | 0xc4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x01, 0x1d, 0xe8, 0xc1, 0x1c, | ||
| 173 | 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xcc, 0x81, 0x1c, | ||
| 174 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, | ||
| 175 | 0xd0, 0x01, 0x1e, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 176 | 0xb4, 0x81, 0x3d, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, | ||
| 177 | 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xe4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, | ||
| 178 | 0xc8, 0x01, 0x1e, 0xe8, 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xb4, 0x81, 0x3d, | ||
| 179 | 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, | ||
| 180 | 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xd8, 0x43, 0x1c, 0xe4, 0x81, 0x1c, | ||
| 181 | 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, | ||
| 182 | 0xb4, 0x81, 0x3d, 0xc8, 0x41, 0x1d, 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, | ||
| 183 | 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x41, 0x1b, 0xd8, 0x43, 0x1d, | ||
| 184 | 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, | ||
| 185 | 0xc4, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xc4, 0x01, 0x1c, 0xc8, 0x01, 0x1d, | ||
| 186 | 0xe8, 0x41, 0x1c, 0xc0, 0x81, 0x1c, 0xd0, 0x81, 0x1e, 0xc4, 0x01, 0x1c, | ||
| 187 | 0xc8, 0x01, 0x1d, 0xb4, 0x81, 0x3b, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 188 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x46, 0x08, 0x43, 0x42, 0x6c, 0x57, 0xfe, | ||
| 189 | 0xac, 0xb3, 0x20, 0xc3, 0x5f, 0x11, 0xd1, 0x44, 0x5c, 0x43, 0x22, 0x00, | ||
| 190 | 0x3a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, | ||
| 191 | 0x62, 0x83, 0x40, 0x51, 0xb4, 0x01, 0x00, 0x80, 0x2c, 0x10, 0x00, 0x00, | ||
| 192 | 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, | ||
| 193 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x52, 0x45, 0x50, 0x02, | ||
| 194 | 0x85, 0x30, 0x02, 0x50, 0x80, 0x01, 0x05, 0x52, 0x06, 0xc4, 0x46, 0x00, | ||
| 195 | 0x68, 0x8d, 0x25, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, | ||
| 196 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 197 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 198 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 199 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 200 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 201 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 202 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 203 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 204 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 205 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 206 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 207 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 208 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 209 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 210 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 211 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 212 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 213 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 214 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 215 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 216 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 217 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 218 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 219 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 220 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 221 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 222 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 223 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 224 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 225 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 226 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 227 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 228 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 229 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 230 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 231 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 232 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 233 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 234 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 235 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 236 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 237 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 238 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 239 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 240 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 241 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 242 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 243 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 244 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 245 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 246 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 247 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 248 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 249 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 250 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 251 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0xd1, 0x00, 0x00, | ||
| 252 | 0x00, 0x32, 0x9a, 0x08, 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, | ||
| 253 | 0x11, 0x32, 0x64, 0xd4, 0x3c, 0xec, 0x7c, 0x00, 0x00, 0x8b, 0x12, 0x07, | ||
| 254 | 0xc5, 0xc6, 0x91, 0x01, 0x13, 0x19, 0x0c, 0x12, 0x59, 0x85, 0x53, 0x24, | ||
| 255 | 0x90, 0xe4, 0x19, 0xca, 0x83, 0x44, 0x17, 0xa2, 0x24, 0x53, 0x44, 0x4b, | ||
| 256 | 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, | ||
| 257 | 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, | ||
| 258 | 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, | ||
| 259 | 0x6e, 0x20, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, | ||
| 260 | 0x28, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, | ||
| 261 | 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, | ||
| 262 | 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, | ||
| 263 | 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, | ||
| 264 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 265 | 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, | ||
| 266 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 267 | 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, | ||
| 268 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, | ||
| 269 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x70, | ||
| 270 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x61, | ||
| 271 | 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, | ||
| 272 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, | ||
| 273 | 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, | ||
| 274 | 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, | ||
| 275 | 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 276 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, | ||
| 277 | 0x76, 0x34, 0x5f, 0x66, 0x29, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x61, 0x69, | ||
| 278 | 0x72, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, | ||
| 279 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, | ||
| 280 | 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, | ||
| 281 | 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, | ||
| 282 | 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, | ||
| 283 | 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x5f, 0x5f, | ||
| 284 | 0x61, 0x69, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, | ||
| 285 | 0x64, 0x65, 0x72, 0x5f, 0x5f, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, | ||
| 286 | 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, | ||
| 287 | 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, | ||
| 288 | 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, 0x72, | ||
| 289 | 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, | ||
| 290 | 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, | ||
| 291 | 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, | ||
| 292 | 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x70, 0x72, 0x6f, | ||
| 293 | 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, | ||
| 294 | 0x66, 0x6f, 0x72, 0x6d, 0x00, 0xc4, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 295 | 0x00, 0x30, 0x82, 0xa0, 0x04, 0x23, 0x08, 0x4b, 0x32, 0x82, 0xa0, 0x08, | ||
| 296 | 0x23, 0x08, 0xca, 0x30, 0x82, 0xa0, 0x10, 0x23, 0x08, 0x08, 0x30, 0x82, | ||
| 297 | 0xa0, 0x14, 0x23, 0x08, 0x8a, 0x31, 0x82, 0xa0, 0x1c, 0x33, 0x0c, 0x5f, | ||
| 298 | 0x00, 0x06, 0x33, 0x0c, 0x61, 0x20, 0x88, 0xc1, 0x0c, 0xc1, 0x30, 0xc3, | ||
| 299 | 0xf0, 0x7d, 0x63, 0x30, 0x03, 0x41, 0x84, 0x41, 0x18, 0x8c, 0xc1, 0x0c, | ||
| 300 | 0x41, 0x31, 0x43, 0x60, 0xcc, 0x10, 0x1c, 0x33, 0x14, 0x48, 0xa2, 0x2c, | ||
| 301 | 0xcc, 0x0c, 0x46, 0xe3, 0x24, 0xca, 0xf2, 0xcc, 0x50, 0x40, 0x49, 0xb4, | ||
| 302 | 0x48, 0x33, 0x0c, 0x70, 0x10, 0x07, 0x72, 0x30, 0x83, 0x32, 0x06, 0x13, | ||
| 303 | 0x35, 0x06, 0x61, 0x50, 0x25, 0xd6, 0xc2, 0xcc, 0xa0, 0x84, 0xc1, 0x44, | ||
| 304 | 0x85, 0x41, 0x18, 0x54, 0x89, 0xb2, 0x3c, 0x33, 0x40, 0xdf, 0x85, 0x95, | ||
| 305 | 0x01, 0xf5, 0x85, 0x41, 0xa6, 0x95, 0xc1, 0x66, 0x06, 0x09, 0xb7, 0x74, | ||
| 306 | 0x33, 0x40, 0x67, 0x70, 0x61, 0x65, 0x40, 0x9d, 0x41, 0x18, 0x64, 0x5a, | ||
| 307 | 0x19, 0x6c, 0x66, 0x90, 0x70, 0x8b, 0x37, 0x03, 0x41, 0x07, 0x75, 0x60, | ||
| 308 | 0x07, 0x77, 0x30, 0xc3, 0x40, 0x06, 0x73, 0x80, 0x07, 0xb5, 0x01, 0x1c, | ||
| 309 | 0xc7, 0x71, 0x1c, 0xc7, 0x71, 0x1c, 0x1a, 0xb8, 0x81, 0x85, 0x06, 0x7a, | ||
| 310 | 0x60, 0x59, 0x96, 0x1b, 0xd0, 0x81, 0x1b, 0xd0, 0x81, 0x2f, 0xf8, 0x02, | ||
| 311 | 0x4a, 0xd0, 0x04, 0x28, 0xc8, 0x48, 0x60, 0x82, 0x2e, 0x62, 0x63, 0xb3, | ||
| 312 | 0x6b, 0x73, 0x69, 0x7b, 0x23, 0xab, 0x63, 0x2b, 0x73, 0x31, 0x63, 0x0b, | ||
| 313 | 0x3b, 0x9b, 0x1b, 0x45, 0x38, 0x03, 0x34, 0x38, 0x85, 0x8d, 0xcd, 0xae, | ||
| 314 | 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x94, 0x20, 0x0d, 0x6e, 0x09, | ||
| 315 | 0x4b, 0x93, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, | ||
| 316 | 0x50, 0x83, 0xa3, 0xc2, 0xd2, 0xe4, 0x5c, 0xd8, 0xc2, 0xdc, 0xce, 0xea, | ||
| 317 | 0xc2, 0xce, 0xca, 0xbe, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x46, | ||
| 318 | 0x09, 0xd6, 0xe0, 0xa6, 0xb0, 0x34, 0x39, 0x97, 0xb1, 0xb7, 0x36, 0xb8, | ||
| 319 | 0x34, 0xb6, 0xb2, 0xaf, 0x37, 0x38, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x51, | ||
| 320 | 0x06, 0x36, 0x68, 0x03, 0x37, 0x38, 0x25, 0x2c, 0x4d, 0xce, 0xc5, 0xae, | ||
| 321 | 0x4c, 0x8e, 0xae, 0x0c, 0x6f, 0x94, 0x00, 0x0f, 0x00, 0xa9, 0x18, 0x00, | ||
| 322 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, | ||
| 323 | 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, | ||
| 324 | 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, | ||
| 325 | 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 326 | 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, | ||
| 327 | 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, | ||
| 328 | 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, | ||
| 329 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, | ||
| 330 | 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, | ||
| 331 | 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, | ||
| 332 | 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, | ||
| 333 | 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, | ||
| 334 | 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, | ||
| 335 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, | ||
| 336 | 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, | ||
| 337 | 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x8c, 0x00, 0x00, | ||
| 338 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, | ||
| 339 | 0x00, 0xc4, 0x4a, 0xa0, 0x0c, 0x8a, 0x80, 0xdc, 0x08, 0xc0, 0x58, 0x44, | ||
| 340 | 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, 0x0c, | ||
| 341 | 0x03, 0x81, 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0xa3, 0x30, 0x03, 0x30, | ||
| 342 | 0x03, 0x40, 0x62, 0x06, 0x80, 0xc6, 0x0c, 0x00, 0x00, 0xf1, 0x30, 0x00, | ||
| 343 | 0x00, 0x2c, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0x08, | ||
| 344 | 0x3d, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x23, 0x06, 0x96, 0x05, 0x00, 0x00, | ||
| 345 | 0x00, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, | ||
| 346 | 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, | ||
| 347 | 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x61, 0x69, 0x72, 0x2d, 0x61, | ||
| 348 | 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, | ||
| 349 | 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, | ||
| 350 | 0x72, 0x74, 0x65, 0x78, 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, | ||
| 351 | 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, | ||
| 352 | 0x28, 0x33, 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 353 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x32, | ||
| 354 | 0x29, 0x13, 0x04, 0x06, 0x59, 0x21, 0x80, 0x02, 0x1f, 0xac, 0x18, 0x42, | ||
| 355 | 0x01, 0x14, 0xfa, 0x60, 0xc5, 0x20, 0x0a, 0xa0, 0xe0, 0x07, 0x1b, 0x82, | ||
| 356 | 0x3d, 0xd8, 0x30, 0xe8, 0xc1, 0x28, 0xfc, 0xc1, 0x86, 0x81, 0x14, 0x48, | ||
| 357 | 0xe1, 0x0f, 0x36, 0x04, 0xa1, 0xb0, 0x21, 0x10, 0x05, 0x00, 0x00, 0x00, | ||
| 358 | 0x00, 0xbb, 0x10, 0x8d, 0x64, 0x49, 0x14, 0x84, 0xb2, 0x0b, 0x01, 0x51, | ||
| 359 | 0x18, 0x45, 0x41, 0x28, 0x83, 0x0c, 0xc3, 0xd1, 0x98, 0x10, 0x88, 0xff, | ||
| 360 | 0x2e, 0x04, 0x85, 0x71, 0x12, 0x05, 0xa1, 0x0c, 0x32, 0x1c, 0x0c, 0x64, | ||
| 361 | 0x42, 0x20, 0xfe, 0x16, 0x14, 0xe0, 0xbf, 0x0b, 0x91, 0x75, 0x61, 0x50, | ||
| 362 | 0x51, 0x10, 0xca, 0x20, 0x03, 0x13, 0x51, 0x26, 0x04, 0xe2, 0x6f, 0x45, | ||
| 363 | 0x00, 0xfe, 0xbb, 0x10, 0x9e, 0x18, 0x98, 0xc1, 0x46, 0x41, 0x28, 0x83, | ||
| 364 | 0x0c, 0x91, 0x85, 0x99, 0x10, 0x88, 0xbf, 0x15, 0x01, 0xf8, 0xef, 0x42, | ||
| 365 | 0x88, 0xc1, 0x19, 0xac, 0x41, 0x18, 0x50, 0x10, 0xca, 0x20, 0x43, 0xa0, | ||
| 366 | 0x81, 0x81, 0x05, 0x95, 0xf8, 0x0f, 0x32, 0x0c, 0x5d, 0x18, 0x58, 0x30, | ||
| 367 | 0x89, 0xbf, 0x0d, 0x01, 0xf8, 0x0f, 0x32, 0x18, 0x60, 0x30, 0x06, 0x16, | ||
| 368 | 0x44, 0xe2, 0x6f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc9, 0x18, 0x94, 0x81, | ||
| 369 | 0x05, 0x8f, 0xf8, 0xdb, 0x10, 0x80, 0xff, 0x2e, 0xc4, 0x1b, 0xd0, 0x01, | ||
| 370 | 0x1e, 0xb4, 0x01, 0x05, 0xa1, 0x0c, 0x32, 0x04, 0x67, 0xd0, 0x06, 0x16, | ||
| 371 | 0x88, 0x81, 0xf8, 0x0f, 0x32, 0x0c, 0x6a, 0xe0, 0x06, 0x16, 0x80, 0x81, | ||
| 372 | 0xf8, 0x0f, 0x32, 0x14, 0x6c, 0xf0, 0x06, 0x16, 0x74, 0xe2, 0x3f, 0xc8, | ||
| 373 | 0x70, 0xb8, 0x01, 0x1c, 0x58, 0xa0, 0x89, 0xff, 0x20, 0x03, 0x1f, 0xb4, | ||
| 374 | 0x41, 0x1d, 0x58, 0x16, 0x88, 0xff, 0x20, 0x83, 0x1f, 0xbc, 0x81, 0x1d, | ||
| 375 | 0x98, 0x13, 0x88, 0xbf, 0x25, 0x03, 0xf8, 0x5b, 0xc0, 0x80, 0xbf, 0x05, | ||
| 376 | 0x09, 0xf8, 0x5b, 0x80, 0x80, 0xbf, 0x05, 0x05, 0xf8, 0xcf, 0x36, 0xdc, | ||
| 377 | 0x41, 0x00, 0xcc, 0x36, 0x04, 0xa5, 0x10, 0xcc, 0x36, 0x04, 0x7c, 0x20, | ||
| 378 | 0x64, 0x10, 0x10, 0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, | ||
| 379 | 0x20, 0x85, 0xa3, 0x14, 0x10, 0x53, 0xd8, 0x72, 0x0c, 0x01, 0x29, 0x1c, | ||
| 380 | 0xa6, 0x80, 0x94, 0xc2, 0x96, 0xe3, 0x08, 0x48, 0xe1, 0x30, 0x05, 0xa4, | ||
| 381 | 0x14, 0xb6, 0x1c, 0x4c, 0x40, 0x0a, 0x87, 0x29, 0x20, 0xa5, 0xb0, 0xe5, | ||
| 382 | 0x88, 0x02, 0x52, 0x38, 0x4c, 0x01, 0x29, 0x85, 0x2d, 0x87, 0x15, 0x90, | ||
| 383 | 0xc2, 0x51, 0x0a, 0x88, 0x29, 0x6c, 0x39, 0xc6, 0x20, 0x20, 0x85, 0xa3, | ||
| 384 | 0x14, 0x10, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 385 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xda, | ||
| 386 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, | ||
| 387 | 0x00, 0x1f, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0xf0, 0x00, 0x00, 0x00, | ||
| 388 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 389 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 390 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 391 | 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, | ||
| 392 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 393 | 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, | ||
| 394 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 395 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 396 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 397 | 0xff, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, | ||
| 398 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0x79, 0x00, 0x00, 0x00, | ||
| 399 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x76, | ||
| 400 | 0x65, 0x72, 0x74, 0x65, 0x78, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 401 | 0x30, 0x34, 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, | ||
| 402 | 0x65, 0x2d, 0x74, 0x76, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, | ||
| 403 | 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, | ||
| 404 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 405 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x90, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 406 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 407 | 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, 0xc8, 0x14, 0x00, 0x00, | ||
| 408 | 0x00, 0x21, 0x0c, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x0b, 0x02, 0x21, | ||
| 409 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 410 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 411 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, | ||
| 412 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 413 | 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 414 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, 0x90, 0x91, 0x22, 0xc4, | ||
| 415 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, | ||
| 416 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x1b, 0x7e, 0x24, | ||
| 417 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x08, 0x07, 0x78, | ||
| 418 | 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, | ||
| 419 | 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, | ||
| 420 | 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, | ||
| 421 | 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, | ||
| 422 | 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, | ||
| 423 | 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x80, 0x38, 0x90, 0x03, 0x3c, | ||
| 424 | 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x48, 0x07, 0x76, | ||
| 425 | 0xa0, 0x87, 0x74, 0x70, 0x87, 0x79, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 426 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 427 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 428 | 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 429 | 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, | ||
| 430 | 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 431 | 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, | ||
| 432 | 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0xa0, 0x07, 0x79, | ||
| 433 | 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, | ||
| 434 | 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 435 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, | ||
| 436 | 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, | ||
| 437 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 438 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, | ||
| 439 | 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, | ||
| 440 | 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 441 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 442 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, | ||
| 443 | 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 444 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, | ||
| 445 | 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, | ||
| 446 | 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 447 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, | ||
| 448 | 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, | ||
| 449 | 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, | ||
| 450 | 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x78, | ||
| 451 | 0x02, 0x01, 0x2c, 0x40, 0x15, 0xa4, 0x01, 0x28, 0x0c, 0xe1, 0x90, 0x0e, | ||
| 452 | 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, | ||
| 453 | 0x6d, 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe1, 0xc0, 0x0e, 0xe9, 0x10, 0x0e, | ||
| 454 | 0xf3, 0x00, 0x6c, 0xf0, 0x86, 0x02, 0x58, 0x80, 0x2a, 0x48, 0x03, 0x50, | ||
| 455 | 0x18, 0xc2, 0x21, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, | ||
| 456 | 0x1c, 0xca, 0x41, 0x1e, 0xda, 0xc0, 0x1d, 0xde, 0xa1, 0x0d, 0xc2, 0x81, | ||
| 457 | 0x1d, 0xd2, 0x21, 0x1c, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 458 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, | ||
| 459 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, | ||
| 460 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, | ||
| 461 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, | ||
| 462 | 0x4c, 0x10, 0x40, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, | ||
| 463 | 0x76, 0x08, 0x41, 0x24, 0x41, 0x98, 0xc9, 0x9a, 0x07, 0x7a, 0x90, 0x87, | ||
| 464 | 0x7a, 0x18, 0x07, 0x7a, 0x70, 0x83, 0x76, 0x28, 0x07, 0x7a, 0x08, 0x07, | ||
| 465 | 0x76, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x79, 0x48, 0x07, | ||
| 466 | 0x7c, 0x70, 0x03, 0x38, 0x40, 0x01, 0x19, 0x44, 0x28, 0x84, 0x62, 0x0c, | ||
| 467 | 0x11, 0x84, 0x31, 0x74, 0x06, 0x02, 0xe6, 0x08, 0xc0, 0x20, 0x05, 0xd4, | ||
| 468 | 0x1c, 0x01, 0x28, 0x0c, 0x22, 0x04, 0xc2, 0x30, 0x02, 0xa1, 0x8c, 0x00, | ||
| 469 | 0x00, 0x13, 0xc0, 0x20, 0x1c, 0xd2, 0x41, 0x1e, 0xec, 0x80, 0x0e, 0xda, | ||
| 470 | 0x20, 0x1c, 0xe0, 0x01, 0x1e, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xec, | ||
| 471 | 0xe1, 0x1d, 0xe6, 0x21, 0x0e, 0xe6, 0xc0, 0x0d, 0xe0, 0xc0, 0x0d, 0xe0, | ||
| 472 | 0xa0, 0x0d, 0xe6, 0x21, 0x1d, 0xda, 0xa1, 0x1e, 0xd8, 0x21, 0x1c, 0xe8, | ||
| 473 | 0xe1, 0x1d, 0xe4, 0x61, 0xc3, 0x6d, 0x94, 0x43, 0x1b, 0xc0, 0x83, 0x1e, | ||
| 474 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 475 | 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1e, 0xe0, 0x81, 0x1e, 0xe0, 0x41, 0x1b, | ||
| 476 | 0xa4, 0x03, 0x1e, 0xe8, 0x01, 0x1e, 0xe8, 0x01, 0x1e, 0xb4, 0x41, 0x3a, | ||
| 477 | 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 478 | 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, | ||
| 479 | 0xcc, 0x81, 0x1c, 0xb4, 0x41, 0x3a, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, | ||
| 480 | 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x39, 0xcc, 0x81, 0x1c, | ||
| 481 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x39, | ||
| 482 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 483 | 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, | ||
| 484 | 0xc4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x01, 0x1d, 0xe8, 0xc1, 0x1c, | ||
| 485 | 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xcc, 0x81, 0x1c, | ||
| 486 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, | ||
| 487 | 0xd0, 0x01, 0x1e, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 488 | 0xb4, 0x81, 0x3d, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, | ||
| 489 | 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xe4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, | ||
| 490 | 0xc8, 0x01, 0x1e, 0xe8, 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xb4, 0x81, 0x3d, | ||
| 491 | 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, | ||
| 492 | 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xd8, 0x43, 0x1c, 0xe4, 0x81, 0x1c, | ||
| 493 | 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, | ||
| 494 | 0xb4, 0x81, 0x3d, 0xc8, 0x41, 0x1d, 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, | ||
| 495 | 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x41, 0x1b, 0xd8, 0x43, 0x1d, | ||
| 496 | 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, | ||
| 497 | 0xc4, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xc4, 0x01, 0x1c, 0xc8, 0x01, 0x1d, | ||
| 498 | 0xe8, 0x41, 0x1c, 0xc0, 0x81, 0x1c, 0xd0, 0x81, 0x1e, 0xc4, 0x01, 0x1c, | ||
| 499 | 0xc8, 0x01, 0x1d, 0xb4, 0x81, 0x3b, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 500 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x46, 0x08, 0x43, 0x3e, 0x6c, 0x57, 0xfe, | ||
| 501 | 0x9c, 0xf3, 0x60, 0x7f, 0x45, 0x44, 0x13, 0x71, 0x0d, 0x89, 0x80, 0xe7, | ||
| 502 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x89, | ||
| 503 | 0x0d, 0x02, 0x45, 0xd5, 0x06, 0x00, 0x00, 0xb2, 0x40, 0x0a, 0x00, 0x00, | ||
| 504 | 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 505 | 0x47, 0xc6, 0x04, 0x43, 0x52, 0x45, 0x50, 0x02, 0x85, 0x30, 0x02, 0x50, | ||
| 506 | 0x06, 0x05, 0x18, 0x50, 0x20, 0xc4, 0x46, 0x00, 0x68, 0x8d, 0x25, 0x48, | ||
| 507 | 0x02, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 508 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 509 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 510 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 511 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 512 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 513 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 514 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 515 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 516 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 517 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 518 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 519 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 520 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 521 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 522 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 523 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 524 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 525 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 526 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 527 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 528 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 529 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 530 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 531 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 532 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 533 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 534 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 535 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 536 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 537 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 538 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 539 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 540 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 541 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 542 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 543 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 544 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 545 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 546 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 547 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 548 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 549 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 550 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 551 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 552 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 553 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 554 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 555 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 556 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 557 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 558 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 559 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 560 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 561 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 562 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 563 | 0x00, 0x79, 0x20, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 564 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 565 | 0x3a, 0x8c, 0x7d, 0x00, 0x00, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x01, | ||
| 566 | 0x13, 0x19, 0x0c, 0x12, 0x59, 0x45, 0x66, 0x20, 0x90, 0xe4, 0x29, 0x0f, | ||
| 567 | 0x12, 0x5d, 0x88, 0x92, 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 568 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 569 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 570 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 571 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 572 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 573 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 574 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 575 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 576 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 577 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 578 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 579 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 580 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 581 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, | ||
| 582 | 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 583 | 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, 0x61, | ||
| 584 | 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, | ||
| 585 | 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, | ||
| 586 | 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x6f, 0x75, 0x74, | ||
| 587 | 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, | ||
| 588 | 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, | ||
| 589 | 0x29, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, | ||
| 590 | 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, | ||
| 591 | 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 592 | 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x61, 0x69, 0x72, | ||
| 593 | 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6e, 0x70, 0x75, | ||
| 594 | 0x74, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, | ||
| 595 | 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 596 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x61, 0x69, 0x72, 0x5f, 0x70, | ||
| 597 | 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x5f, | ||
| 598 | 0x29, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, | ||
| 599 | 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, | ||
| 600 | 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, | ||
| 601 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, | ||
| 602 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 603 | 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, | ||
| 604 | 0x7a, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x70, 0x72, | ||
| 605 | 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, | ||
| 606 | 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x04, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 607 | 0x00, 0x30, 0x82, 0xa0, 0x04, 0x23, 0x08, 0x4b, 0x32, 0x82, 0xa0, 0x08, | ||
| 608 | 0x23, 0x08, 0xca, 0x30, 0x82, 0xa0, 0x10, 0x23, 0x08, 0x08, 0x30, 0x82, | ||
| 609 | 0xa0, 0x14, 0x23, 0x08, 0x8a, 0x31, 0x82, 0xa0, 0x1c, 0x33, 0x0c, 0x5e, | ||
| 610 | 0xf0, 0xcd, 0x30, 0x80, 0x81, 0x10, 0x06, 0x33, 0x04, 0xc3, 0x0c, 0x83, | ||
| 611 | 0xe7, 0x89, 0xc1, 0x0c, 0x04, 0x01, 0x06, 0x60, 0x20, 0x06, 0x33, 0x04, | ||
| 612 | 0xc5, 0x0c, 0x81, 0x31, 0x43, 0x70, 0xcc, 0x50, 0x20, 0x89, 0xb2, 0x30, | ||
| 613 | 0x33, 0x18, 0x8d, 0x93, 0x28, 0xcb, 0x33, 0x83, 0xd1, 0x40, 0x49, 0xb4, | ||
| 614 | 0x48, 0x33, 0x0c, 0x6f, 0x00, 0x07, 0x71, 0x30, 0x83, 0x22, 0x06, 0x13, | ||
| 615 | 0x25, 0x06, 0x60, 0x50, 0x25, 0xd1, 0xc2, 0xcc, 0xa0, 0x80, 0xc1, 0x44, | ||
| 616 | 0x81, 0x01, 0x18, 0x54, 0x89, 0xb2, 0x3c, 0x33, 0x28, 0xde, 0x44, 0x79, | ||
| 617 | 0x60, 0x50, 0x25, 0xd1, 0x22, 0xcd, 0x00, 0x91, 0x81, 0x75, 0x95, 0x01, | ||
| 618 | 0xe5, 0x81, 0x01, 0x96, 0x95, 0x81, 0x66, 0x06, 0xc9, 0xb6, 0x70, 0x33, | ||
| 619 | 0x40, 0x61, 0x60, 0x5d, 0x65, 0x40, 0x91, 0x01, 0x18, 0x60, 0x59, 0x19, | ||
| 620 | 0x68, 0x66, 0x90, 0x6c, 0x4b, 0x37, 0x43, 0x31, 0x07, 0x74, 0x50, 0x07, | ||
| 621 | 0x76, 0x70, 0x07, 0x33, 0x0c, 0x63, 0x20, 0x07, 0x78, 0x50, 0x1c, 0xc0, | ||
| 622 | 0x71, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x89, 0x81, 0x1b, 0x58, 0x68, 0xa0, | ||
| 623 | 0x07, 0x96, 0x65, 0xb9, 0x01, 0x1d, 0xd0, 0x01, 0x1d, 0xf8, 0x82, 0x2f, | ||
| 624 | 0xc8, 0x82, 0x4b, 0xd0, 0x04, 0x2b, 0xc8, 0x48, 0x60, 0x82, 0x2e, 0x62, | ||
| 625 | 0x63, 0xb3, 0x6b, 0x73, 0x69, 0x7b, 0x23, 0xab, 0x63, 0x2b, 0x73, 0x31, | ||
| 626 | 0x63, 0x0b, 0x3b, 0x9b, 0x1b, 0x45, 0x30, 0x83, 0x33, 0x38, 0x85, 0x8d, | ||
| 627 | 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x94, 0x00, 0x0d, | ||
| 628 | 0x6e, 0x09, 0x4b, 0x93, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, | ||
| 629 | 0x1b, 0x25, 0x48, 0x83, 0xa3, 0xc2, 0xd2, 0xe4, 0x5c, 0xd8, 0xc2, 0xdc, | ||
| 630 | 0xce, 0xea, 0xc2, 0xce, 0xca, 0xbe, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, | ||
| 631 | 0xdc, 0x46, 0x09, 0xd4, 0xe0, 0xa6, 0xb0, 0x34, 0x39, 0x97, 0xb1, 0xb7, | ||
| 632 | 0x36, 0xb8, 0x34, 0xb6, 0xb2, 0xaf, 0x37, 0x38, 0xba, 0xb4, 0x37, 0xb7, | ||
| 633 | 0xb9, 0x51, 0x86, 0x35, 0x60, 0x83, 0x36, 0x38, 0x25, 0x2c, 0x4d, 0xce, | ||
| 634 | 0xc5, 0xae, 0x4c, 0x8e, 0xae, 0x0c, 0x6f, 0x94, 0x00, 0x0f, 0x00, 0x00, | ||
| 635 | 0x00, 0xa9, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, | ||
| 636 | 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, | ||
| 637 | 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, | ||
| 638 | 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, | ||
| 639 | 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, | ||
| 640 | 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, | ||
| 641 | 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, | ||
| 642 | 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, | ||
| 643 | 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, | ||
| 644 | 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, | ||
| 645 | 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, | ||
| 646 | 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, | ||
| 647 | 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, | ||
| 648 | 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, | ||
| 649 | 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, | ||
| 650 | 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 651 | 0x00, 0x8a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 652 | 0x00, 0x09, 0x00, 0x00, 0x00, 0xc4, 0x4a, 0xa0, 0x0c, 0x8a, 0x80, 0xdc, | ||
| 653 | 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, | ||
| 654 | 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x85, 0x19, 0x80, 0x19, 0x00, 0x12, 0x33, | ||
| 655 | 0x00, 0x34, 0x66, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x2c, 0x00, 0x00, | ||
| 656 | 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0xc8, 0x3c, 0x00, 0x00, 0x00, | ||
| 657 | 0x00, 0xcf, 0x13, 0x06, 0x96, 0x05, 0x00, 0x00, 0x00, 0x6f, 0x6d, 0x6e, | ||
| 658 | 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, | ||
| 659 | 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, | ||
| 660 | 0x42, 0x41, 0x41, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 661 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, | ||
| 662 | 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x29, | ||
| 663 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 664 | 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x34, 0x29, 0x61, 0x69, | ||
| 665 | 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, | ||
| 666 | 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x00, 0x13, 0x04, 0x06, | ||
| 667 | 0x59, 0x21, 0x80, 0x02, 0x1f, 0xac, 0x18, 0x42, 0x01, 0x14, 0xfa, 0x60, | ||
| 668 | 0xc5, 0x20, 0x0a, 0xa0, 0xe0, 0x07, 0x1b, 0x82, 0x3d, 0xd8, 0x30, 0xe8, | ||
| 669 | 0xc1, 0x28, 0xfc, 0xc1, 0x86, 0x81, 0x14, 0x48, 0xe1, 0x0f, 0x36, 0x04, | ||
| 670 | 0xa1, 0xb0, 0x21, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x10, 0x8c, | ||
| 671 | 0x64, 0x49, 0x14, 0x84, 0xb2, 0x0b, 0xf1, 0x50, 0x18, 0x45, 0x41, 0x28, | ||
| 672 | 0x83, 0x0c, 0xc3, 0xc1, 0x98, 0x10, 0x88, 0xff, 0x2e, 0xc4, 0x84, 0x71, | ||
| 673 | 0x11, 0x05, 0xa1, 0x0c, 0x32, 0x1c, 0xcc, 0x63, 0x42, 0x20, 0xfe, 0x16, | ||
| 674 | 0x14, 0xe0, 0xbf, 0x0b, 0x81, 0x75, 0x61, 0x40, 0x51, 0x10, 0xca, 0x20, | ||
| 675 | 0x03, 0x13, 0x4d, 0x26, 0x04, 0xe2, 0x6f, 0x45, 0x00, 0xfe, 0xbb, 0x10, | ||
| 676 | 0x9d, 0x18, 0x98, 0x81, 0x46, 0x41, 0x28, 0x83, 0x0c, 0x91, 0x75, 0x99, | ||
| 677 | 0x10, 0x88, 0xbf, 0x15, 0x01, 0xf8, 0xef, 0x42, 0x84, 0xc1, 0x19, 0xac, | ||
| 678 | 0x01, 0x18, 0x50, 0x10, 0xca, 0x20, 0x43, 0xa0, 0x7d, 0x16, 0x54, 0xe2, | ||
| 679 | 0x3f, 0xc8, 0x30, 0x74, 0x60, 0x60, 0xc1, 0x24, 0xfe, 0x36, 0x04, 0xe0, | ||
| 680 | 0x3f, 0xc8, 0x60, 0x80, 0x81, 0x18, 0x58, 0x10, 0x89, 0xbf, 0x0d, 0x01, | ||
| 681 | 0xf8, 0x0f, 0x32, 0x24, 0x63, 0x40, 0x06, 0x16, 0x3c, 0xe2, 0x6f, 0x43, | ||
| 682 | 0x00, 0xfe, 0xbb, 0x10, 0x6e, 0x40, 0x07, 0x78, 0xc0, 0x06, 0x14, 0x84, | ||
| 683 | 0x32, 0xc8, 0x10, 0x9c, 0x01, 0x1b, 0x58, 0x20, 0x06, 0xe2, 0x3f, 0xc8, | ||
| 684 | 0x30, 0xa8, 0x41, 0x1b, 0x58, 0x00, 0x06, 0xe2, 0x3f, 0xc8, 0x50, 0xb0, | ||
| 685 | 0x81, 0x1b, 0x58, 0xd0, 0x89, 0xff, 0x20, 0xc3, 0xe1, 0x06, 0x6f, 0x60, | ||
| 686 | 0x81, 0x26, 0xfe, 0x83, 0x0c, 0x7c, 0xe0, 0x06, 0x74, 0x60, 0x59, 0x20, | ||
| 687 | 0xfe, 0x83, 0x0c, 0x7e, 0x00, 0x07, 0x75, 0x60, 0x4e, 0x20, 0xfe, 0x96, | ||
| 688 | 0x0c, 0xe0, 0x6f, 0x01, 0x03, 0xfe, 0x16, 0x24, 0xe0, 0x6f, 0x01, 0x02, | ||
| 689 | 0xfe, 0x16, 0x14, 0xe0, 0x3f, 0xdb, 0x60, 0x07, 0x01, 0x30, 0xdb, 0x10, | ||
| 690 | 0x94, 0x42, 0x30, 0xdb, 0x10, 0x94, 0x82, 0x90, 0x41, 0x40, 0x0c, 0x00, | ||
| 691 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, 0x20, 0x85, 0xa3, 0x14, | ||
| 692 | 0x10, 0x53, 0xd8, 0x72, 0x0c, 0x01, 0x29, 0x1c, 0xa6, 0x80, 0x94, 0xc2, | ||
| 693 | 0x96, 0xe3, 0x08, 0x48, 0xe1, 0x30, 0x05, 0xa4, 0x14, 0xb6, 0x1c, 0x4c, | ||
| 694 | 0x40, 0x0a, 0x87, 0x29, 0x20, 0xa5, 0xb0, 0xe5, 0x88, 0x02, 0x52, 0x38, | ||
| 695 | 0x4c, 0x01, 0x29, 0x85, 0x2d, 0x87, 0x15, 0x90, 0xc2, 0x51, 0x0a, 0x88, | ||
| 696 | 0x29, 0x6c, 0x39, 0xc6, 0x20, 0x20, 0x85, 0xa3, 0x14, 0x10, 0x53, 0x00, | ||
| 697 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 698 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xde, 0x05, 0x00, 0x00, 0x00, | ||
| 699 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x1f, 0x00, 0x00, | ||
| 700 | 0x00, 0x12, 0x03, 0x94, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 701 | 0x00, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, | ||
| 702 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 703 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, | ||
| 704 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, | ||
| 705 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 706 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 707 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 708 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 709 | 0x00, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, | ||
| 710 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 711 | 0x00, 0x12, 0x03, 0x94, 0x78, 0x00, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, | ||
| 712 | 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, | ||
| 713 | 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, 0x72, | ||
| 714 | 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, 0x74, 0x76, 0x6f, | ||
| 715 | 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, | ||
| 716 | 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 717 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 718 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, | ||
| 719 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, | ||
| 720 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, | ||
| 721 | 0xc8, 0x14, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x41, 0x03, 0x00, | ||
| 722 | 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 723 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 724 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 725 | 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, | ||
| 726 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, | ||
| 727 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, | ||
| 728 | 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 729 | 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x71, 0x00, 0x00, | ||
| 730 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0x03, | ||
| 731 | 0x40, 0x02, 0x28, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, | ||
| 732 | 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 733 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 734 | 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, | ||
| 735 | 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, | ||
| 736 | 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, | ||
| 737 | 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 738 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 739 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 740 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 741 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, | ||
| 742 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, | ||
| 743 | 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, | ||
| 744 | 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, | ||
| 745 | 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 746 | 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, | ||
| 747 | 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, | ||
| 748 | 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, | ||
| 749 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, | ||
| 750 | 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 751 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 752 | 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, | ||
| 753 | 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, | ||
| 754 | 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, | ||
| 755 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 756 | 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, | ||
| 757 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 758 | 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, | ||
| 759 | 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 760 | 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 761 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, | ||
| 762 | 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, | ||
| 763 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 764 | 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0xe0, 0x09, 0x03, 0xb0, 0x00, 0x55, 0x90, | ||
| 765 | 0x06, 0x60, 0x30, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, | ||
| 766 | 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 767 | 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0x00, 0x49, 0x18, 0x00, | ||
| 768 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, | ||
| 769 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, | ||
| 770 | 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, | ||
| 771 | 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, | ||
| 772 | 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x67, 0x49, 0x53, 0x44, | ||
| 773 | 0x09, 0x93, 0xcf, 0x1e, 0xc0, 0x40, 0x44, 0x9c, 0xd3, 0x48, 0x13, 0xd0, | ||
| 774 | 0x4c, 0x12, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, 0x11, 0x06, 0xa1, 0x10, | ||
| 775 | 0x21, 0x41, 0x54, 0x03, 0x01, 0x73, 0x04, 0x60, 0x90, 0x02, 0x38, 0x47, | ||
| 776 | 0x00, 0x0a, 0x83, 0x08, 0x80, 0x30, 0x8c, 0x30, 0x00, 0xc3, 0x08, 0x04, | ||
| 777 | 0x32, 0x02, 0x00, 0x00, 0x00, 0x13, 0xc0, 0x20, 0x1c, 0xd2, 0x41, 0x1e, | ||
| 778 | 0xec, 0x80, 0x0e, 0xda, 0x20, 0x1c, 0xe0, 0x01, 0x1e, 0xd8, 0xa1, 0x1c, | ||
| 779 | 0xda, 0x80, 0x1e, 0xec, 0xe1, 0x1d, 0xe6, 0x21, 0x0e, 0xe6, 0xc0, 0x0d, | ||
| 780 | 0xe0, 0xc0, 0x0d, 0xe0, 0xa0, 0x0d, 0xe6, 0x21, 0x1d, 0xda, 0xa1, 0x1e, | ||
| 781 | 0xd8, 0x21, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x61, 0xc3, 0x6d, 0x94, 0x43, | ||
| 782 | 0x1b, 0xc0, 0x83, 0x1e, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, | ||
| 783 | 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1e, 0xe0, 0x81, | ||
| 784 | 0x1e, 0xe0, 0x41, 0x1b, 0xa4, 0x03, 0x1e, 0xe8, 0x01, 0x1e, 0xe8, 0x01, | ||
| 785 | 0x1e, 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, | ||
| 786 | 0x1e, 0xc4, 0x81, 0x1d, 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, | ||
| 787 | 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x41, 0x3a, 0xd8, 0x01, | ||
| 788 | 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, | ||
| 789 | 0x39, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, | ||
| 790 | 0x1c, 0xb4, 0x81, 0x39, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, | ||
| 791 | 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1d, 0xe8, 0x41, | ||
| 792 | 0x1c, 0xd8, 0x81, 0x1e, 0xc4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x01, | ||
| 793 | 0x1d, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, | ||
| 794 | 0x3d, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, | ||
| 795 | 0x1c, 0xb4, 0x81, 0x3d, 0xd0, 0x01, 0x1e, 0xe8, 0x81, 0x1d, 0xd0, 0x81, | ||
| 796 | 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xd8, 0x01, 0x1d, 0xe8, 0x81, | ||
| 797 | 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xe4, 0x81, | ||
| 798 | 0x1d, 0xe8, 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xe8, 0x41, 0x1c, 0xc8, 0x01, | ||
| 799 | 0x1e, 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, | ||
| 800 | 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xd8, 0x43, | ||
| 801 | 0x1c, 0xe4, 0x81, 0x1c, 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, 0xe8, 0x81, | ||
| 802 | 0x1c, 0xd4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x41, 0x1d, 0xd8, 0x81, | ||
| 803 | 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x41, | ||
| 804 | 0x1b, 0xd8, 0x43, 0x1d, 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, | ||
| 805 | 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xc4, 0x01, | ||
| 806 | 0x1c, 0xc8, 0x01, 0x1d, 0xe8, 0x41, 0x1c, 0xc0, 0x81, 0x1c, 0xd0, 0x81, | ||
| 807 | 0x1e, 0xc4, 0x01, 0x1c, 0xc8, 0x01, 0x1d, 0xb4, 0x81, 0x3b, 0xe0, 0x81, | ||
| 808 | 0x1e, 0xc4, 0x81, 0x1d, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x46, 0x08, 0x43, | ||
| 809 | 0x4a, 0x6c, 0x57, 0xfe, 0xac, 0xb3, 0x20, 0xc3, 0x5f, 0x44, 0x80, 0xc1, | ||
| 810 | 0x10, 0xcd, 0x34, 0x24, 0x02, 0xa4, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, | ||
| 811 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x24, 0x36, 0x08, 0x14, 0x1d, 0x1a, 0x00, | ||
| 812 | 0x00, 0xc8, 0x02, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 813 | 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 814 | 0xc2, 0x22, 0x28, 0x81, 0x42, 0x18, 0x01, 0x28, 0xa0, 0x82, 0x28, 0x8c, | ||
| 815 | 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0xd2, 0x11, 0x80, 0x42, 0x28, 0x88, | ||
| 816 | 0xc2, 0x28, 0x90, 0x42, 0x29, 0x98, 0xc2, 0xa1, 0x1c, 0x4b, 0x90, 0x04, | ||
| 817 | 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, | ||
| 818 | 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, | ||
| 819 | 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, | ||
| 820 | 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, | ||
| 821 | 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, | ||
| 822 | 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, | ||
| 823 | 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, | ||
| 824 | 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, | ||
| 825 | 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, | ||
| 826 | 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, | ||
| 827 | 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, | ||
| 828 | 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, | ||
| 829 | 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, | ||
| 830 | 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, | ||
| 831 | 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, | ||
| 832 | 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, | ||
| 833 | 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, | ||
| 834 | 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, | ||
| 835 | 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, | ||
| 836 | 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, | ||
| 837 | 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, | ||
| 838 | 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, | ||
| 839 | 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, | ||
| 840 | 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, | ||
| 841 | 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, | ||
| 842 | 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, | ||
| 843 | 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, | ||
| 844 | 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, | ||
| 845 | 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, | ||
| 846 | 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, | ||
| 847 | 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, | ||
| 848 | 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, | ||
| 849 | 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, | ||
| 850 | 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, | ||
| 851 | 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, | ||
| 852 | 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, | ||
| 853 | 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, | ||
| 854 | 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, | ||
| 855 | 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, | ||
| 856 | 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, | ||
| 857 | 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, | ||
| 858 | 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, | ||
| 859 | 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, | ||
| 860 | 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, | ||
| 861 | 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, | ||
| 862 | 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, | ||
| 863 | 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, | ||
| 864 | 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, | ||
| 865 | 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, | ||
| 866 | 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, | ||
| 867 | 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, | ||
| 868 | 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, | ||
| 869 | 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, | ||
| 870 | 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, | ||
| 871 | 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, | ||
| 872 | 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x20, 0x00, | ||
| 873 | 0x00, 0xf6, 0x00, 0x00, 0x00, 0x32, 0x9a, 0x08, 0x14, 0x02, 0x85, 0x8c, | ||
| 874 | 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, 0xca, 0x00, 0x0c, 0x66, | ||
| 875 | 0x09, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x41, 0x14, 0x19, 0x52, 0xa6, | ||
| 876 | 0x3c, 0x06, 0x83, 0x58, 0x85, 0xf2, 0x48, 0x08, 0x55, 0x30, 0x8c, 0xb2, | ||
| 877 | 0x38, 0xcf, 0xf3, 0x44, 0xd7, 0x13, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4b, | ||
| 878 | 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, | ||
| 879 | 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, | ||
| 880 | 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, | ||
| 881 | 0x6e, 0x20, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, | ||
| 882 | 0x28, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, | ||
| 883 | 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, | ||
| 884 | 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, | ||
| 885 | 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, | ||
| 886 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 887 | 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, | ||
| 888 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 889 | 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, | ||
| 890 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, | ||
| 891 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, | ||
| 892 | 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, | ||
| 893 | 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 894 | 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, | ||
| 895 | 0x69, 0x72, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, | ||
| 896 | 0x69, 0x6e, 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, | ||
| 897 | 0x65, 0x64, 0x28, 0x38, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, | ||
| 898 | 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x65, | ||
| 899 | 0x6e, 0x74, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, | ||
| 900 | 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, | ||
| 901 | 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, | ||
| 902 | 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x67, 0x65, 0x6e, | ||
| 903 | 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, | ||
| 904 | 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, 0x63, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 905 | 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, | ||
| 906 | 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, | ||
| 907 | 0x65, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, | ||
| 908 | 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, 0x2e, 0x72, | ||
| 909 | 0x65, 0x61, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, | ||
| 910 | 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x66, | ||
| 911 | 0x6c, 0x6f, 0x61, 0x74, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, 0x75, | ||
| 912 | 0x74, 0x70, 0x75, 0x74, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, | ||
| 913 | 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, | ||
| 914 | 0x70, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, | ||
| 915 | 0x65, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, | ||
| 916 | 0x68, 0x6f, 0x64, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, | ||
| 917 | 0x61, 0x63, 0x74, 0x6f, 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, | ||
| 918 | 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, 0x64, 0x72, | ||
| 919 | 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, | ||
| 920 | 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 921 | 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, | ||
| 922 | 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, | ||
| 923 | 0x73, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, | ||
| 924 | 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x00, 0x44, 0x64, 0x00, | ||
| 925 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0x80, 0x04, 0x23, 0x08, 0x09, | ||
| 926 | 0x35, 0x82, 0x80, 0x08, 0x23, 0x08, 0xc8, 0x30, 0x82, 0x80, 0x10, 0x23, | ||
| 927 | 0x08, 0x06, 0x30, 0x82, 0x80, 0x14, 0x23, 0x08, 0x88, 0x31, 0x82, 0x80, | ||
| 928 | 0x1c, 0x23, 0x08, 0x08, 0x32, 0x82, 0x80, 0x24, 0x23, 0x08, 0x88, 0x32, | ||
| 929 | 0x82, 0x80, 0x2c, 0x33, 0x0c, 0x66, 0x10, 0x9c, 0xc1, 0x0c, 0x03, 0x1a, | ||
| 930 | 0x08, 0x69, 0x30, 0x43, 0x30, 0xcc, 0x30, 0x98, 0x81, 0x19, 0xa8, 0xc1, | ||
| 931 | 0x0c, 0x04, 0x81, 0x06, 0x68, 0xa0, 0x06, 0x33, 0x04, 0xc5, 0x0c, 0x81, | ||
| 932 | 0x31, 0x43, 0x70, 0xcc, 0x50, 0x20, 0x6a, 0xa0, 0x06, 0x89, 0x32, 0x43, | ||
| 933 | 0xb0, 0x07, 0x33, 0x24, 0x6a, 0xb0, 0x30, 0x8d, 0x93, 0x3c, 0x50, 0x34, | ||
| 934 | 0x43, 0x82, 0x06, 0x8b, 0xd4, 0x38, 0x89, 0x02, 0x4d, 0x33, 0xa0, 0x81, | ||
| 935 | 0x1a, 0xa4, 0x81, 0x1a, 0x64, 0x5a, 0x1a, 0xa4, 0x81, 0x1a, 0x64, 0x5b, | ||
| 936 | 0x1b, 0xa4, 0x81, 0x1a, 0x64, 0x9c, 0x1b, 0xa4, 0x81, 0x1a, 0x64, 0xdd, | ||
| 937 | 0x1b, 0xa4, 0x81, 0x1a, 0x64, 0x1e, 0x1c, 0xa4, 0x81, 0x1a, 0x64, 0x5f, | ||
| 938 | 0x1c, 0xa4, 0x81, 0x1a, 0x64, 0x60, 0x20, 0x07, 0x69, 0xa0, 0x06, 0x59, | ||
| 939 | 0x18, 0xcc, 0x20, 0x99, 0x01, 0x55, 0xb1, 0x81, 0xa5, 0x06, 0x68, 0x70, | ||
| 940 | 0x61, 0x7f, 0x20, 0x06, 0x6c, 0x30, 0x06, 0x69, 0x90, 0x90, 0x01, 0x54, | ||
| 941 | 0x06, 0x33, 0x0c, 0x7d, 0xe0, 0x07, 0xa0, 0x30, 0xc3, 0xb0, 0x06, 0x7c, | ||
| 942 | 0x10, 0x0a, 0xd5, 0x01, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, | ||
| 943 | 0x71, 0x9c, 0x1b, 0xb8, 0x81, 0x45, 0x07, 0x7a, 0x60, 0x59, 0x96, 0x1e, | ||
| 944 | 0x70, 0xac, 0xc0, 0x0a, 0x62, 0xe3, 0x17, 0x74, 0x20, 0x23, 0x81, 0x09, | ||
| 945 | 0xba, 0x88, 0x8d, 0xcd, 0xae, 0xcd, 0xa5, 0xed, 0x8d, 0xac, 0x8e, 0xad, | ||
| 946 | 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, 0x14, 0x41, 0x0e, 0xe6, 0xe0, | ||
| 947 | 0x14, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32, 0x37, 0xba, 0x51, | ||
| 948 | 0x02, 0x3a, 0xb8, 0x25, 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, 0x6e, 0x2e, | ||
| 949 | 0xed, 0xcd, 0x6d, 0x94, 0xa0, 0x0e, 0x8e, 0x0a, 0x4b, 0x93, 0x73, 0x61, | ||
| 950 | 0x0b, 0x73, 0x3b, 0xab, 0x0b, 0x3b, 0x2b, 0xfb, 0xb2, 0x2b, 0x93, 0x9b, | ||
| 951 | 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0xb0, 0x83, 0x9b, 0xc2, 0xd2, 0xe4, 0x5c, | ||
| 952 | 0xc6, 0xde, 0xda, 0xe0, 0xd2, 0xd8, 0xca, 0xbe, 0xde, 0xe0, 0xe8, 0xd2, | ||
| 953 | 0xde, 0xdc, 0xe6, 0x46, 0x19, 0xee, 0x00, 0x0f, 0xf2, 0xe0, 0x98, 0xb0, | ||
| 954 | 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, 0xb6, 0x32, 0x37, 0xba, 0x51, | ||
| 955 | 0x82, 0x50, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, | ||
| 956 | 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, | ||
| 957 | 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, | ||
| 958 | 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, | ||
| 959 | 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, | ||
| 960 | 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, | ||
| 961 | 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, | ||
| 962 | 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 963 | 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, | ||
| 964 | 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, | ||
| 965 | 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, | ||
| 966 | 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, | ||
| 967 | 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, | ||
| 968 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, | ||
| 969 | 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, | ||
| 970 | 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, | ||
| 971 | 0x00, 0x61, 0x20, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, | ||
| 972 | 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x84, 0x65, 0x30, | ||
| 973 | 0x03, 0x40, 0x5a, 0x06, 0xd4, 0x73, 0x10, 0x04, 0x41, 0x64, 0x04, 0x63, | ||
| 974 | 0x04, 0x20, 0x08, 0x82, 0xf8, 0x47, 0x3c, 0x03, 0x00, 0xf1, 0x30, 0x00, | ||
| 975 | 0x00, 0x38, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0x48, | ||
| 976 | 0x3d, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf3, 0x90, 0x81, 0x05, 0x00, 0x00, | ||
| 977 | 0x00, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, | ||
| 978 | 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, | ||
| 979 | 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, | ||
| 980 | 0x72, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, | ||
| 981 | 0x54, 0x42, 0x41, 0x41, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, | ||
| 982 | 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, | ||
| 983 | 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, | ||
| 984 | 0x65, 0x6e, 0x74, 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, | ||
| 985 | 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, | ||
| 986 | 0x32, 0x29, 0x00, 0x00, 0x00, 0x13, 0x04, 0x85, 0x99, 0x20, 0x28, 0xcd, | ||
| 987 | 0x04, 0x41, 0x71, 0x26, 0x08, 0xca, 0x33, 0x41, 0x50, 0xa0, 0x09, 0x82, | ||
| 988 | 0x12, 0x4d, 0x10, 0x14, 0x69, 0x82, 0xa0, 0x4c, 0x2b, 0x04, 0x58, 0x30, | ||
| 989 | 0x85, 0x15, 0x43, 0x2c, 0xc0, 0xc2, 0x29, 0x6c, 0x08, 0x4a, 0x61, 0xc3, | ||
| 990 | 0x40, 0x0a, 0xb2, 0x80, 0x0a, 0x1b, 0x86, 0x6c, 0x16, 0x50, 0x61, 0x43, | ||
| 991 | 0x34, 0x0a, 0xb4, 0x80, 0x0a, 0xb4, 0x90, 0x0a, 0xb4, 0xa0, 0x0a, 0xb4, | ||
| 992 | 0xb0, 0x0a, 0xb4, 0xc0, 0x0a, 0xb4, 0xd0, 0x0a, 0xb4, 0xe0, 0x0a, 0xb4, | ||
| 993 | 0xf0, 0x0a, 0x1b, 0x86, 0x5a, 0xa0, 0x85, 0x55, 0xd8, 0x10, 0xc4, 0x02, | ||
| 994 | 0x00, 0x7b, 0x86, 0x43, 0x32, 0x28, 0x80, 0x31, 0xc7, 0x30, 0x04, 0xd4, | ||
| 995 | 0x20, 0x43, 0x40, 0x18, 0x73, 0x0c, 0x81, 0x81, 0x58, 0xd0, 0x88, 0x7f, | ||
| 996 | 0x06, 0x01, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x8a, 0x20, | ||
| 997 | 0xa8, 0x85, 0xc3, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 998 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xf3, | ||
| 999 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, | ||
| 1000 | 0x00, 0x1f, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0xf0, 0x00, 0x00, 0x00, | ||
| 1001 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 1002 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 1003 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 1004 | 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, | ||
| 1005 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1006 | 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, | ||
| 1007 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 1008 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1009 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1010 | 0xff, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, | ||
| 1011 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0x7b, 0x00, 0x00, 0x00, | ||
| 1012 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x66, | ||
| 1013 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x33, 0x32, 0x30, 0x32, 0x33, | ||
| 1014 | 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, | ||
| 1015 | 0x70, 0x6c, 0x65, 0x2d, 0x74, 0x76, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, | ||
| 1016 | 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, | ||
| 1017 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 1018 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x30, 0x1f, 0x00, | ||
| 1019 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, | ||
| 1020 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, | ||
| 1021 | 0xc8, 0x14, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x04, 0x07, 0x00, | ||
| 1022 | 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1023 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 1024 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 1025 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 1026 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, | ||
| 1027 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, | ||
| 1028 | 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 1029 | 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x64, 0x01, 0x00, | ||
| 1030 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, | ||
| 1031 | 0x40, 0x02, 0x2a, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, | ||
| 1032 | 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1033 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1034 | 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, | ||
| 1035 | 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, | ||
| 1036 | 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, | ||
| 1037 | 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1038 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 1039 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 1040 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 1041 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, | ||
| 1042 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, | ||
| 1043 | 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, | ||
| 1044 | 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, | ||
| 1045 | 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 1046 | 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, | ||
| 1047 | 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, | ||
| 1048 | 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, | ||
| 1049 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, | ||
| 1050 | 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 1051 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1052 | 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, | ||
| 1053 | 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, | ||
| 1054 | 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, | ||
| 1055 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 1056 | 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, | ||
| 1057 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1058 | 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, | ||
| 1059 | 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 1060 | 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 1061 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, | ||
| 1062 | 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, | ||
| 1063 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 1064 | 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0xe0, 0x09, 0x04, 0xb0, 0x00, 0x55, 0x90, | ||
| 1065 | 0x06, 0x60, 0x30, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, | ||
| 1066 | 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 1067 | 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0xc1, 0x18, 0x0a, | ||
| 1068 | 0x60, 0x01, 0xaa, 0x0d, 0x06, 0x61, 0x00, 0x0b, 0x50, 0x6d, 0x08, 0x93, | ||
| 1069 | 0xe2, 0xff, 0xff, 0xff, 0xff, 0x07, 0x60, 0x0d, 0x00, 0x09, 0xa8, 0x88, | ||
| 1070 | 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, | ||
| 1071 | 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 1072 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1073 | 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, | ||
| 1074 | 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, | ||
| 1075 | 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x88, 0x03, | ||
| 1076 | 0x39, 0xc0, 0x03, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x71, 0xa8, 0x87, | ||
| 1077 | 0x74, 0x60, 0x07, 0x7a, 0x48, 0x07, 0x77, 0x98, 0x07, 0x80, 0x70, 0x87, | ||
| 1078 | 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, | ||
| 1079 | 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, | ||
| 1080 | 0x72, 0x60, 0x87, 0x74, 0x68, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, | ||
| 1081 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 1082 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 1083 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, | ||
| 1084 | 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, | ||
| 1085 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, | ||
| 1086 | 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, | ||
| 1087 | 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, | ||
| 1088 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, | ||
| 1089 | 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, | ||
| 1090 | 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, | ||
| 1091 | 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, | ||
| 1092 | 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, | ||
| 1093 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1094 | 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, | ||
| 1095 | 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, | ||
| 1096 | 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, | ||
| 1097 | 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, | ||
| 1098 | 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, | ||
| 1099 | 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, | ||
| 1100 | 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, | ||
| 1101 | 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, | ||
| 1102 | 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, | ||
| 1103 | 0x60, 0x43, 0x62, 0x08, 0xc0, 0x02, 0x54, 0x41, 0x1a, 0x80, 0xc1, 0x06, | ||
| 1104 | 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a, 0x83, 0x8f, | ||
| 1105 | 0x20, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, | ||
| 1106 | 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, | ||
| 1107 | 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 1108 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, | ||
| 1109 | 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, | ||
| 1110 | 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, | ||
| 1111 | 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x90, 0x07, 0x76, 0x00, | ||
| 1112 | 0x0c, 0xee, 0xf0, 0x0e, 0x6d, 0x20, 0x0e, 0xf5, 0x90, 0x0e, 0xec, 0x40, | ||
| 1113 | 0x0f, 0xe9, 0xe0, 0x0e, 0xf3, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, | ||
| 1114 | 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, | ||
| 1115 | 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, | ||
| 1116 | 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 1117 | 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, | ||
| 1118 | 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, | ||
| 1119 | 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, | ||
| 1120 | 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0x0f, 0xf2, 0x50, | ||
| 1121 | 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, | ||
| 1122 | 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, | ||
| 1123 | 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, | ||
| 1124 | 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, | ||
| 1125 | 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, | ||
| 1126 | 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, | ||
| 1127 | 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, | ||
| 1128 | 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, | ||
| 1129 | 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, | ||
| 1130 | 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, | ||
| 1131 | 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, | ||
| 1132 | 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, | ||
| 1133 | 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, | ||
| 1134 | 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, | ||
| 1135 | 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, | ||
| 1136 | 0x0e, 0x00, 0x1e, 0x00, 0x44, 0x3d, 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, | ||
| 1137 | 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, | ||
| 1138 | 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x92, | ||
| 1139 | 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x36, 0x00, 0xd6, 0x00, 0x90, 0x80, | ||
| 1140 | 0x6a, 0x83, 0xa1, 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x45, 0x00, 0x16, | ||
| 1141 | 0xa0, 0xda, 0xa0, 0x30, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x6d, 0x00, | ||
| 1142 | 0xac, 0x01, 0x20, 0x01, 0xd5, 0x86, 0xa9, 0xf9, 0xff, 0xff, 0xff, 0xff, | ||
| 1143 | 0x01, 0x58, 0x03, 0x40, 0x19, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1c, 0xea, | ||
| 1144 | 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, 0x01, 0xd8, 0x50, | ||
| 1145 | 0x38, 0x42, 0x90, 0x06, 0x60, 0xb0, 0xc1, 0x78, 0xfe, 0xff, 0xff, 0xff, | ||
| 1146 | 0x7f, 0x00, 0x24, 0x80, 0xda, 0x10, 0x41, 0xff, 0xff, 0xff, 0xff, 0x3f, | ||
| 1147 | 0x00, 0xca, 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe9, 0xc0, | ||
| 1148 | 0x0e, 0xf4, 0x90, 0x0e, 0xee, 0x30, 0x0f, 0x00, 0x00, 0x49, 0x18, 0x00, | ||
| 1149 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x42, | ||
| 1150 | 0x61, 0x4c, 0x08, 0x8e, 0x09, 0x01, 0x32, 0x61, 0x48, 0x94, 0x65, 0xc2, | ||
| 1151 | 0xc0, 0x28, 0xcb, 0x04, 0xa1, 0x71, 0x26, 0x04, 0xcf, 0x84, 0x00, 0x02, | ||
| 1152 | 0x00, 0x89, 0x20, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, | ||
| 1153 | 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, | ||
| 1154 | 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, | ||
| 1155 | 0x4c, 0x10, 0xb4, 0xc1, 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, | ||
| 1156 | 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, | ||
| 1157 | 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 1158 | 0x00, 0x80, 0x41, 0x84, 0x41, 0x38, 0x4a, 0x9a, 0x22, 0x4a, 0x98, 0xfc, | ||
| 1159 | 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, 0xdf, 0x1e, 0xfe, 0x69, 0x8c, 0x00, | ||
| 1160 | 0x18, 0x44, 0x28, 0x82, 0x8b, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x25, | ||
| 1161 | 0x80, 0x79, 0x16, 0x22, 0xfa, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x10, | ||
| 1162 | 0xca, 0x11, 0x04, 0x81, 0x40, 0x18, 0x08, 0x25, 0x65, 0x08, 0x02, 0x82, | ||
| 1163 | 0x96, 0x61, 0x84, 0x01, 0x28, 0x44, 0xd3, 0x34, 0x0d, 0x39, 0x65, 0x00, | ||
| 1164 | 0x00, 0x80, 0xa0, 0x22, 0x00, 0x00, 0x49, 0x73, 0x04, 0x41, 0x11, 0x28, | ||
| 1165 | 0x80, 0xaa, 0x32, 0x00, 0x4d, 0x43, 0x57, 0x31, 0x9a, 0x06, 0x00, 0x00, | ||
| 1166 | 0x80, 0xb2, 0x32, 0x34, 0x4d, 0x43, 0x5b, 0x11, 0x9a, 0x86, 0xba, 0x39, | ||
| 1167 | 0x02, 0xc4, 0x08, 0xc1, 0x37, 0x47, 0x00, 0x06, 0xc3, 0x08, 0x42, 0x18, | ||
| 1168 | 0x14, 0x05, 0x34, 0x10, 0x81, 0x12, 0x29, 0x00, 0x08, 0x69, 0x1c, 0x08, | ||
| 1169 | 0x48, 0x81, 0x70, 0x04, 0x60, 0x8e, 0x00, 0x14, 0x06, 0x11, 0x00, 0x61, | ||
| 1170 | 0x0a, 0x60, 0x18, 0x61, 0x08, 0x83, 0x61, 0x04, 0x22, 0x0c, 0x00, 0x00, | ||
| 1171 | 0x00, 0x13, 0xc0, 0x20, 0x1c, 0xd2, 0x41, 0x1e, 0xec, 0x80, 0x0e, 0xda, | ||
| 1172 | 0x20, 0x1c, 0xe0, 0x01, 0x1e, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xec, | ||
| 1173 | 0xe1, 0x1d, 0xe6, 0x21, 0x0e, 0xe6, 0xc0, 0x0d, 0xe0, 0xc0, 0x0d, 0xe0, | ||
| 1174 | 0xa0, 0x0d, 0xe6, 0x21, 0x1d, 0xda, 0xa1, 0x1e, 0xd8, 0x21, 0x1c, 0xe8, | ||
| 1175 | 0xe1, 0x1d, 0xe4, 0x61, 0xc3, 0x6d, 0x94, 0x43, 0x1b, 0xc0, 0x83, 0x1e, | ||
| 1176 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 1177 | 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1e, 0xe0, 0x81, 0x1e, 0xe0, 0x41, 0x1b, | ||
| 1178 | 0xa4, 0x03, 0x1e, 0xe8, 0x01, 0x1e, 0xe8, 0x01, 0x1e, 0xb4, 0x41, 0x3a, | ||
| 1179 | 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 1180 | 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, | ||
| 1181 | 0xcc, 0x81, 0x1c, 0xb4, 0x41, 0x3a, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, | ||
| 1182 | 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x39, 0xcc, 0x81, 0x1c, | ||
| 1183 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x39, | ||
| 1184 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 1185 | 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, | ||
| 1186 | 0xc4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x01, 0x1d, 0xe8, 0xc1, 0x1c, | ||
| 1187 | 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xcc, 0x81, 0x1c, | ||
| 1188 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, | ||
| 1189 | 0xd0, 0x01, 0x1e, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 1190 | 0xb4, 0x81, 0x3d, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, | ||
| 1191 | 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xe4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, | ||
| 1192 | 0xc8, 0x01, 0x1e, 0xe8, 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xb4, 0x81, 0x3d, | ||
| 1193 | 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, | ||
| 1194 | 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xd8, 0x43, 0x1c, 0xe4, 0x81, 0x1c, | ||
| 1195 | 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, | ||
| 1196 | 0xb4, 0x81, 0x3d, 0xc8, 0x41, 0x1d, 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, | ||
| 1197 | 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x41, 0x1b, 0xd8, 0x43, 0x1d, | ||
| 1198 | 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, | ||
| 1199 | 0xc4, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xc4, 0x01, 0x1c, 0xc8, 0x01, 0x1d, | ||
| 1200 | 0xe8, 0x41, 0x1c, 0xc0, 0x81, 0x1c, 0xd0, 0x81, 0x1e, 0xc4, 0x01, 0x1c, | ||
| 1201 | 0xc8, 0x01, 0x1d, 0xb4, 0x81, 0x3b, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 1202 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x46, 0x08, 0x43, 0x46, 0x6c, 0x57, 0xfe, | ||
| 1203 | 0x9c, 0xf3, 0x60, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0xd3, 0x90, 0x08, | ||
| 1204 | 0x88, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 1205 | 0x18, 0x12, 0x45, 0x78, 0xb0, 0x20, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x04, | ||
| 1206 | 0x00, 0x00, 0x00, 0xc0, 0x90, 0x28, 0x15, 0x28, 0x07, 0x08, 0x80, 0x01, | ||
| 1207 | 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x86, 0x44, 0xbd, 0x00, 0x41, | ||
| 1208 | 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x24, | ||
| 1209 | 0x6a, 0x87, 0x48, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 1210 | 0x00, 0x80, 0x21, 0x91, 0x3f, 0x58, 0x15, 0x10, 0x00, 0x03, 0x00, 0x00, | ||
| 1211 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x89, 0x68, 0xa2, 0xb9, 0x80, 0x00, | ||
| 1212 | 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x48, 0x14, 0x16, | ||
| 1213 | 0x59, 0x86, 0x00, 0x03, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 1214 | 0x43, 0x22, 0xbd, 0x88, 0x20, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, | ||
| 1215 | 0x00, 0x00, 0x00, 0x18, 0x12, 0xad, 0x86, 0xb4, 0x01, 0x01, 0x30, 0x00, | ||
| 1216 | 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa8, 0x37, 0xa6, 0x0e, | ||
| 1217 | 0x08, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x86, 0x44, | ||
| 1218 | 0xf0, 0x31, 0x6d, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, | ||
| 1219 | 0x00, 0x30, 0x24, 0x1a, 0x91, 0x6d, 0x0c, 0x80, 0x00, 0x28, 0x00, 0x00, | ||
| 1220 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x62, 0x83, 0x40, 0xd1, 0x82, 0x03, | ||
| 1221 | 0x00, 0x80, 0x2c, 0x10, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, | ||
| 1222 | 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, | ||
| 1223 | 0x0a, 0x8b, 0xa0, 0x04, 0x0a, 0x61, 0x04, 0xa0, 0x0c, 0x0a, 0xa8, 0x20, | ||
| 1224 | 0x0a, 0xa3, 0x40, 0x0a, 0xa5, 0x60, 0x0a, 0xa7, 0x14, 0x08, 0x1d, 0x01, | ||
| 1225 | 0x28, 0x84, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0x32, | ||
| 1226 | 0xc7, 0x12, 0x24, 0x01, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 1227 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 1228 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 1229 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 1230 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 1231 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 1232 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 1233 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 1234 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 1235 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 1236 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 1237 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 1238 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 1239 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 1240 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 1241 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 1242 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 1243 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 1244 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 1245 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 1246 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 1247 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 1248 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 1249 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 1250 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 1251 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 1252 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 1253 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 1254 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 1255 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 1256 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 1257 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 1258 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 1259 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 1260 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 1261 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 1262 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 1263 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 1264 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 1265 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 1266 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 1267 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 1268 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 1269 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 1270 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 1271 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 1272 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 1273 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 1274 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 1275 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 1276 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 1277 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 1278 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 1279 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 1280 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 1281 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 1282 | 0x00, 0x79, 0x20, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 1283 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 1284 | 0xde, 0x00, 0x0d, 0x48, 0x0b, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x41, | ||
| 1285 | 0x14, 0x19, 0x8c, 0x22, 0x31, 0x88, 0x64, 0x3d, 0x45, 0x66, 0x20, 0xca, | ||
| 1286 | 0x23, 0x21, 0x54, 0xc1, 0x30, 0xca, 0xe2, 0x3c, 0xcf, 0x13, 0x5d, 0x4f, | ||
| 1287 | 0xb0, 0x28, 0xd8, 0xb0, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4b, | ||
| 1288 | 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, | ||
| 1289 | 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, | ||
| 1290 | 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, | ||
| 1291 | 0x6e, 0x20, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, | ||
| 1292 | 0x28, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, | ||
| 1293 | 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, | ||
| 1294 | 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, | ||
| 1295 | 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, | ||
| 1296 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 1297 | 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, | ||
| 1298 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 1299 | 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, | ||
| 1300 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, | ||
| 1301 | 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, | ||
| 1302 | 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, | ||
| 1303 | 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 1304 | 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, | ||
| 1305 | 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, | ||
| 1306 | 0x69, 0x72, 0x2e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x69, 0x72, | ||
| 1307 | 0x2e, 0x6e, 0x6f, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, | ||
| 1308 | 0x69, 0x76, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, | ||
| 1309 | 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, | ||
| 1310 | 0x69, 0x72, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, | ||
| 1311 | 0x69, 0x6e, 0x70, 0x75, 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, | ||
| 1312 | 0x65, 0x64, 0x28, 0x35, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, | ||
| 1313 | 0x5f, 0x66, 0x29, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, 0x70, | ||
| 1314 | 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, | ||
| 1315 | 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, | ||
| 1316 | 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, | ||
| 1317 | 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 1318 | 0x72, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, | ||
| 1319 | 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, | ||
| 1320 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, | ||
| 1321 | 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, | ||
| 1322 | 0x2e, 0x72, 0x65, 0x61, 0x64, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, | ||
| 1323 | 0x75, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, | ||
| 1324 | 0x6f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, | ||
| 1325 | 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, | ||
| 1326 | 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, | ||
| 1327 | 0x74, 0x79, 0x70, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, | ||
| 1328 | 0x61, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, | ||
| 1329 | 0x65, 0x74, 0x68, 0x6f, 0x64, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, | ||
| 1330 | 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, | ||
| 1331 | 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, | ||
| 1332 | 0x64, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, | ||
| 1333 | 0x6e, 0x74, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, | ||
| 1334 | 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, | ||
| 1335 | 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, | ||
| 1336 | 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, | ||
| 1337 | 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x61, 0x69, | ||
| 1338 | 0x72, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x61, 0x69, 0x72, | ||
| 1339 | 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x78, 0x74, 0x75, | ||
| 1340 | 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, | ||
| 1341 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x61, 0x69, | ||
| 1342 | 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x6d, | ||
| 1343 | 0x70, 0x6c, 0x65, 0x72, 0x73, 0x24, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1344 | 0x00, 0x30, 0x82, 0x10, 0x06, 0xcd, 0x08, 0x82, 0x19, 0x88, 0xc1, 0x08, | ||
| 1345 | 0x42, 0x18, 0x38, 0x23, 0x08, 0x61, 0xf0, 0x8c, 0x20, 0x84, 0x01, 0x34, | ||
| 1346 | 0x82, 0xa0, 0x00, 0x23, 0x08, 0x61, 0x10, 0x8d, 0x20, 0x84, 0x81, 0x34, | ||
| 1347 | 0x82, 0x10, 0x06, 0xd3, 0x08, 0x42, 0x18, 0x50, 0x23, 0x08, 0x61, 0x50, | ||
| 1348 | 0x8d, 0x20, 0x84, 0x81, 0x35, 0x82, 0x10, 0x06, 0xd7, 0x08, 0x42, 0x18, | ||
| 1349 | 0x60, 0x23, 0x08, 0x61, 0x90, 0xcd, 0x30, 0xc0, 0x41, 0x10, 0x07, 0x33, | ||
| 1350 | 0x0c, 0x72, 0x20, 0xcc, 0xc1, 0x0c, 0xc1, 0x30, 0xc3, 0x00, 0x07, 0x70, | ||
| 1351 | 0x40, 0x07, 0x33, 0x10, 0x84, 0x1c, 0xc8, 0x01, 0x1d, 0xcc, 0x10, 0x14, | ||
| 1352 | 0x33, 0x04, 0xc6, 0x0c, 0xc1, 0x31, 0x43, 0x81, 0xd0, 0x01, 0x1d, 0x24, | ||
| 1353 | 0xca, 0x0c, 0xc1, 0x29, 0xcc, 0x80, 0xd0, 0xc1, 0xc2, 0x34, 0x89, 0xe2, | ||
| 1354 | 0x3c, 0x33, 0x24, 0x72, 0x00, 0x45, 0x8c, 0x94, 0x28, 0xce, 0x34, 0x43, | ||
| 1355 | 0x02, 0x07, 0x10, 0xc5, 0x48, 0x49, 0xe5, 0x58, 0x33, 0xa0, 0x01, 0x1d, | ||
| 1356 | 0xcc, 0x01, 0x1d, 0x70, 0xdd, 0x1c, 0xcc, 0x01, 0x1d, 0x70, 0x1e, 0x1e, | ||
| 1357 | 0xcc, 0x01, 0x1d, 0x70, 0x5f, 0x1e, 0xcc, 0x01, 0x1d, 0x70, 0x60, 0xa0, | ||
| 1358 | 0x07, 0x73, 0x40, 0x07, 0x5c, 0x18, 0xec, 0xc1, 0x1c, 0xd0, 0x01, 0x27, | ||
| 1359 | 0x06, 0x7c, 0x30, 0x07, 0x74, 0xc0, 0x8d, 0x41, 0x1f, 0xcc, 0x01, 0x1d, | ||
| 1360 | 0x70, 0x64, 0x30, 0x83, 0x64, 0x07, 0x17, 0x76, 0x07, 0x19, 0x1d, 0xc8, | ||
| 1361 | 0x81, 0xb6, 0xb1, 0x42, 0x19, 0xdc, 0x81, 0x19, 0xcc, 0x41, 0x72, 0x06, | ||
| 1362 | 0x0e, 0x1a, 0xcc, 0xa0, 0xcc, 0x41, 0x1a, 0x64, 0x74, 0x20, 0x07, 0x6a, | ||
| 1363 | 0x90, 0xac, 0x81, 0xc3, 0x06, 0x33, 0x24, 0x7e, 0xd0, 0x06, 0x19, 0x1d, | ||
| 1364 | 0xc8, 0x41, 0xe2, 0x06, 0xce, 0x1b, 0xcc, 0x60, 0xa4, 0x82, 0x2a, 0xac, | ||
| 1365 | 0x42, 0x2b, 0xb8, 0xc2, 0x2b, 0xcc, 0x30, 0xd4, 0x01, 0x2a, 0xc0, 0x42, | ||
| 1366 | 0x89, 0x01, 0x20, 0x06, 0x68, 0x20, 0x06, 0x62, 0x20, 0x06, 0x9c, 0x18, | ||
| 1367 | 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, | ||
| 1368 | 0xb8, 0x81, 0x1b, 0x58, 0x74, 0xa0, 0x07, 0x96, 0x65, 0xe9, 0x01, 0x67, | ||
| 1369 | 0x0a, 0xac, 0xc0, 0x0a, 0x74, 0xe3, 0x17, 0xf6, 0xa0, 0x0e, 0xb8, 0x20, | ||
| 1370 | 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, 0xcd, 0xae, 0xcd, 0xa5, 0xed, 0x8d, | ||
| 1371 | 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, 0x14, 0xc1, | ||
| 1372 | 0x0f, 0xfe, 0xe0, 0x14, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32, | ||
| 1373 | 0x37, 0xba, 0x51, 0x02, 0x50, 0xb8, 0x25, 0x2c, 0x4d, 0xce, 0xc5, 0xae, | ||
| 1374 | 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x94, 0x20, 0x14, 0x8e, 0x0a, 0x4b, | ||
| 1375 | 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, 0xab, 0x0b, 0x3b, 0x2b, 0xfb, 0xb2, | ||
| 1376 | 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0x10, 0x85, 0x9b, 0xc2, | ||
| 1377 | 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, 0xe0, 0xd2, 0xd8, 0xca, 0xbe, 0xde, | ||
| 1378 | 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0x46, 0x19, 0x46, 0x81, 0x14, 0x4a, | ||
| 1379 | 0xe1, 0x98, 0xb0, 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, 0xb6, 0x32, | ||
| 1380 | 0x37, 0xba, 0x51, 0x02, 0x58, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, | ||
| 1381 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, | ||
| 1382 | 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, | ||
| 1383 | 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, | ||
| 1384 | 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 1385 | 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, | ||
| 1386 | 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, | ||
| 1387 | 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, | ||
| 1388 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, | ||
| 1389 | 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, | ||
| 1390 | 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, | ||
| 1391 | 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, | ||
| 1392 | 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, | ||
| 1393 | 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, | ||
| 1394 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, | ||
| 1395 | 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, | ||
| 1396 | 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3e, 0x00, 0x00, | ||
| 1397 | 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 1398 | 0x00, 0x44, 0xd5, 0xc0, 0x08, 0x00, 0x89, 0x23, 0x00, 0x04, 0x8c, 0x00, | ||
| 1399 | 0x00, 0xf1, 0x30, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, | ||
| 1400 | 0x90, 0x51, 0x12, 0x44, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x63, 0x80, 0x61, | ||
| 1401 | 0x16, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, | ||
| 1402 | 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, | ||
| 1403 | 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x29, | ||
| 1404 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 1405 | 0x6f, 0x70, 0x65, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, | ||
| 1406 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 1407 | 0x6f, 0x70, 0x65, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x73, | ||
| 1408 | 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, | ||
| 1409 | 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x00, 0x00, | ||
| 1410 | 0x00, 0x2b, 0x04, 0x5b, 0x90, 0x85, 0x15, 0xc3, 0x2d, 0xd8, 0xc2, 0x2c, | ||
| 1411 | 0xac, 0x18, 0x70, 0xc1, 0x16, 0x68, 0x61, 0xc5, 0x90, 0x0b, 0xb6, 0x50, | ||
| 1412 | 0x0b, 0x1b, 0x04, 0x5c, 0xb8, 0x85, 0x0d, 0x41, 0x2e, 0x00, 0x00, 0x00, | ||
| 1413 | 0x00, 0x23, 0x06, 0x8d, 0x11, 0x82, 0x60, 0x30, 0x06, 0x61, 0x60, 0x14, | ||
| 1414 | 0x08, 0x21, 0x0c, 0x41, 0xd0, 0x8d, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x71, | ||
| 1415 | 0xc4, 0x20, 0x58, 0xf8, 0xc7, 0xe2, 0x06, 0x41, 0x62, 0x01, 0x23, 0xfe, | ||
| 1416 | 0x19, 0x04, 0xc4, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x0a, 0xe0, | ||
| 1417 | 0xc8, 0x05, 0x44, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 1418 | 0x00, 0xe3, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, | ||
| 1419 | 0x00, 0x4f, 0x00, 0x00, 0x00, 0x14, 0x96, 0xc3, 0x0c, 0x40, 0x31, 0x10, | ||
| 1420 | 0x5a, 0x02, 0x45, 0x40, 0xeb, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, 0xc4, | ||
| 1421 | 0xce, 0x41, 0x40, 0x4e, 0x63, 0x06, 0x63, 0x11, 0x40, 0x20, 0x1c, 0x04, | ||
| 1422 | 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x18, 0x81, 0x2c, 0xba, 0x3d, | ||
| 1423 | 0x0d, 0x06, 0x63, 0x04, 0xb5, 0x5a, 0xab, 0xed, 0x37, 0x46, 0xd0, 0xc7, | ||
| 1424 | 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0x6e, 0x1f, 0x8b, 0xb6, 0x2f, 0x8c, 0x11, | ||
| 1425 | 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, | ||
| 1426 | 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, | ||
| 1427 | 0x8d, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, 0xce, 0x9a, 0x73, | ||
| 1428 | 0x08, 0x06, 0x23, 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, 0x8c, | ||
| 1429 | 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x03, 0x40, 0xc1, 0x0c, 0xc0, | ||
| 1430 | 0x0c, 0xc0, 0x1c, 0xc4, 0x1c, 0xe4, 0xc1, 0x1c, 0xf0, 0x01, 0x35, 0x33, | ||
| 1431 | 0x00, 0x23, 0x00, 0x33, 0x00, 0x63, 0x0d, 0x20, 0x08, 0x82, 0xf8, 0x07, | ||
| 1432 | 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x37, 0xd6, 0xc0, 0xb6, | ||
| 1433 | 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, 0xc7, 0xb6, 0xf3, 0x4f, 0x7a, | ||
| 1434 | 0x63, 0x0d, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, 0xd6, 0xbf, | ||
| 1435 | 0x00, 0x82, 0x20, 0x5b, 0xff, 0xc2, 0x58, 0x03, 0x08, 0x82, 0x6b, 0x0e, | ||
| 1436 | 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x80, 0x20, 0xb8, 0xe6, 0x60, 0x30, | ||
| 1437 | 0xd6, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, | ||
| 1438 | 0x20, 0x48, 0xb7, 0x39, 0x18, 0x8c, 0x35, 0xac, 0x23, 0x1e, 0xb3, 0x60, | ||
| 1439 | 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x3a, 0xe2, 0x31, 0x0b, 0x06, 0x63, | ||
| 1440 | 0x0d, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, 0x63, 0x00, | ||
| 1441 | 0x82, 0x30, 0x1e, 0x8e, 0xc1, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, 0x81, | ||
| 1442 | 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, 0xc3, | ||
| 1443 | 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, 0x71, | ||
| 1444 | 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, 0x1b, | ||
| 1445 | 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x00, 0xf1, 0x30, 0x00, | ||
| 1446 | 0x00, 0x32, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x0e, 0xc4, | ||
| 1447 | 0x1d, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf3, 0x00, 0x00, 0x5f, 0x5a, 0x54, | ||
| 1448 | 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, | ||
| 1449 | 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, | ||
| 1450 | 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, | ||
| 1451 | 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, | ||
| 1452 | 0x00, 0x13, 0x04, 0x34, 0xd0, 0x26, 0x08, 0x68, 0xb0, 0x4d, 0x10, 0xd0, | ||
| 1453 | 0x80, 0x9b, 0x20, 0xa0, 0x41, 0x37, 0x41, 0x40, 0x03, 0x6f, 0x82, 0x80, | ||
| 1454 | 0x06, 0xdf, 0x04, 0x01, 0x0d, 0xc0, 0x60, 0x82, 0x80, 0x06, 0x61, 0xb0, | ||
| 1455 | 0x21, 0xa0, 0x85, 0x0d, 0xc3, 0x2c, 0xf4, 0x42, 0x2d, 0x6c, 0x18, 0x38, | ||
| 1456 | 0x5f, 0xa8, 0x85, 0x0d, 0x91, 0x2c, 0xfc, 0x42, 0x2d, 0xfc, 0x82, 0x2d, | ||
| 1457 | 0xfc, 0xc2, 0x2d, 0xfc, 0x02, 0x2e, 0xfc, 0x42, 0x2e, 0xfc, 0x82, 0x2e, | ||
| 1458 | 0xfc, 0xc2, 0x2e, 0xfc, 0x02, 0x2f, 0x6c, 0x18, 0xc0, 0xe1, 0x17, 0x6e, | ||
| 1459 | 0x61, 0xc3, 0x00, 0x0e, 0xbf, 0xc0, 0x0b, 0x1b, 0x06, 0x70, 0xf8, 0x85, | ||
| 1460 | 0x5c, 0xd8, 0x30, 0x80, 0xc3, 0x2f, 0xe8, 0xc2, 0x86, 0x01, 0x1c, 0x7e, | ||
| 1461 | 0x61, 0x17, 0x36, 0x0c, 0xe0, 0xf0, 0x0b, 0xb6, 0xb0, 0x61, 0x00, 0x87, | ||
| 1462 | 0x5f, 0xc0, 0x85, 0x0d, 0x03, 0x38, 0xfc, 0x42, 0x2d, 0x00, 0x00, 0x00, | ||
| 1463 | 0x00, 0x7b, 0x18, 0xd2, 0x60, 0x0e, 0x40, 0x81, 0x02, 0x60, 0x0c, 0x47, | ||
| 1464 | 0x04, 0x55, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0xb4, 0xc1, | ||
| 1465 | 0x64, 0x06, 0x7b, 0x18, 0xda, 0xe0, 0x0e, 0xd8, 0x80, 0x02, 0x60, 0x8c, | ||
| 1466 | 0x18, 0x18, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x74, 0xa9, 0x30, 0x8c, 0x18, | ||
| 1467 | 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x6c, 0xab, 0x10, 0x40, 0x16, 0x40, | ||
| 1468 | 0xe0, 0x3f, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0xb1, 0xad, 0x42, | ||
| 1469 | 0x50, 0xd9, 0x10, 0x89, 0xbf, 0x45, 0x41, 0xf8, 0xdb, 0x10, 0x90, 0xff, | ||
| 1470 | 0x88, 0x81, 0x81, 0x84, 0x20, 0x58, 0xf8, 0x47, 0x07, 0x0b, 0xc1, 0x88, | ||
| 1471 | 0xc1, 0x81, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0x26, 0x0b, 0xc1, 0x64, 0xc1, | ||
| 1472 | 0x24, 0xfe, 0x73, 0x0c, 0xdd, 0x32, 0x0a, 0x83, 0x0c, 0x81, 0x37, 0x07, | ||
| 1473 | 0x36, 0x04, 0xe4, 0x3f, 0xc8, 0x10, 0x80, 0x01, 0x1d, 0x0c, 0x32, 0x04, | ||
| 1474 | 0x7e, 0x40, 0x07, 0xb3, 0x04, 0xc2, 0x40, 0x45, 0x20, 0x04, 0xfe, 0x00, | ||
| 1475 | 0xec, 0x61, 0xf8, 0x83, 0x54, 0xa0, 0x05, 0x0a, 0x80, 0x31, 0x1c, 0x11, | ||
| 1476 | 0xb0, 0x81, 0xe3, 0x1f, 0xb3, 0x0c, 0x03, 0x11, 0x0c, 0x32, 0x10, 0x69, | ||
| 1477 | 0xc0, 0x07, 0x7b, 0x18, 0x46, 0xa1, 0x15, 0x5c, 0x81, 0x02, 0x60, 0xec, | ||
| 1478 | 0x61, 0x28, 0x85, 0x57, 0x10, 0x05, 0x0a, 0x80, 0x31, 0x62, 0xa0, 0x24, | ||
| 1479 | 0x31, 0x08, 0x16, 0xfe, 0x91, 0x91, 0x43, 0xd1, 0x1d, 0x43, 0x30, 0xc8, | ||
| 1480 | 0x10, 0xb0, 0x01, 0x28, 0x0c, 0x32, 0x04, 0x0b, 0x28, 0xcc, 0x12, 0x10, | ||
| 1481 | 0x03, 0x15, 0x81, 0x30, 0x60, 0xc2, 0x70, 0x44, 0x18, 0xf0, 0x41, 0xe0, | ||
| 1482 | 0x1f, 0xb3, 0x0c, 0xc5, 0x14, 0xec, 0x61, 0x60, 0x05, 0x5b, 0x10, 0x07, | ||
| 1483 | 0x0a, 0x80, 0x31, 0x1c, 0x11, 0xfc, 0x41, 0xe0, 0x1f, 0xb3, 0x0c, 0xc6, | ||
| 1484 | 0x11, 0x0c, 0x32, 0x14, 0x76, 0x90, 0x0a, 0x7b, 0x18, 0x60, 0x41, 0x17, | ||
| 1485 | 0xc6, 0x81, 0x02, 0x60, 0xcc, 0x31, 0xd8, 0x41, 0xc0, 0x0b, 0x83, 0x0c, | ||
| 1486 | 0xc1, 0x1d, 0xb0, 0x82, 0x05, 0x85, 0xf8, 0x0f, 0x32, 0x04, 0x79, 0xd0, | ||
| 1487 | 0x0a, 0xb3, 0x04, 0x6d, 0xb0, 0x87, 0xc1, 0x16, 0xc0, 0x41, 0x1d, 0x28, | ||
| 1488 | 0x00, 0xc6, 0x1e, 0x06, 0x5c, 0x10, 0x87, 0x75, 0xa0, 0x00, 0x18, 0x83, | ||
| 1489 | 0x0c, 0x50, 0x28, 0xc8, 0xc2, 0x88, 0x41, 0x81, 0x84, 0x20, 0x18, 0x54, | ||
| 1490 | 0xfa, 0x40, 0xcc, 0x32, 0x20, 0x52, 0x30, 0x86, 0x20, 0x99, 0xc3, 0x70, | ||
| 1491 | 0x44, 0xd0, 0x0a, 0x8a, 0x7f, 0xcc, 0x32, 0x28, 0x49, 0x60, 0x42, 0x2b, | ||
| 1492 | 0x88, 0xff, 0x2c, 0xc1, 0x62, 0x43, 0x2b, 0x80, 0xff, 0x88, 0x81, 0x81, | ||
| 1493 | 0x84, 0x20, 0x58, 0xf8, 0x87, 0x04, 0x12, 0x81, 0x05, 0xae, 0x20, 0xfe, | ||
| 1494 | 0x23, 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0xd0, 0x48, 0x04, 0xae, | ||
| 1495 | 0x30, 0x4b, 0xb0, 0x0c, 0x54, 0x00, 0x4a, 0x22, 0x28, 0x73, 0x0c, 0xaa, | ||
| 1496 | 0x10, 0xb8, 0xc3, 0x18, 0xc2, 0x16, 0x0e, 0xc3, 0x11, 0x81, 0x2d, 0x28, | ||
| 1497 | 0xfe, 0x31, 0xcb, 0xd0, 0x30, 0x81, 0x09, 0xb6, 0x20, 0xfe, 0xb3, 0x04, | ||
| 1498 | 0x8e, 0x0d, 0xb6, 0x00, 0xfe, 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, | ||
| 1499 | 0x1f, 0x52, 0x4a, 0x04, 0x16, 0xdc, 0x82, 0xf8, 0x8f, 0x18, 0x1c, 0x48, | ||
| 1500 | 0x08, 0x82, 0x85, 0x7f, 0x40, 0x2c, 0x11, 0xdc, 0xc2, 0x2c, 0x81, 0x33, | ||
| 1501 | 0x50, 0x01, 0x28, 0x8c, 0xd0, 0xcc, 0x31, 0x24, 0x41, 0x3a, 0x8c, 0x21, | ||
| 1502 | 0x90, 0x41, 0x3a, 0x0c, 0x47, 0x04, 0xbf, 0xa0, 0xf8, 0xc7, 0x2c, 0x03, | ||
| 1503 | 0xf4, 0x04, 0x26, 0xfc, 0x82, 0xf8, 0xcf, 0x12, 0x44, 0x36, 0xfc, 0x02, | ||
| 1504 | 0xf8, 0x8f, 0x18, 0x18, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x48, 0x32, 0x11, | ||
| 1505 | 0x58, 0x00, 0x0e, 0xe2, 0x3f, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, | ||
| 1506 | 0x01, 0xd5, 0x44, 0x00, 0x0e, 0xb3, 0x04, 0xd1, 0x40, 0x05, 0xa0, 0x3c, | ||
| 1507 | 0x02, 0x34, 0xc7, 0x90, 0x04, 0xf1, 0x30, 0x4b, 0x20, 0x0d, 0x54, 0x04, | ||
| 1508 | 0x42, 0xa4, 0x07, 0xc7, 0x20, 0x43, 0xf0, 0x0b, 0xf2, 0x30, 0xc7, 0xd0, | ||
| 1509 | 0x0b, 0x60, 0x30, 0x12, 0x83, 0x0c, 0x81, 0x2f, 0xcc, 0x83, 0x0d, 0x81, | ||
| 1510 | 0xf8, 0x0f, 0x32, 0x04, 0xe0, 0x40, 0x0f, 0xb3, 0x04, 0x6d, 0x30, 0x1c, | ||
| 1511 | 0x31, 0x0b, 0xe6, 0x10, 0xf8, 0xc7, 0x2c, 0x03, 0x05, 0x06, 0xc1, 0x20, | ||
| 1512 | 0x03, 0x1d, 0x94, 0x03, 0x3e, 0xec, 0x61, 0xf8, 0x87, 0x94, 0x98, 0x09, | ||
| 1513 | 0x0a, 0x80, 0xb1, 0x87, 0x21, 0x24, 0x56, 0x82, 0x26, 0x28, 0x00, 0xc6, | ||
| 1514 | 0x1c, 0xc3, 0x39, 0x04, 0x2d, 0x31, 0xc8, 0x10, 0xa0, 0x43, 0x3f, 0x58, | ||
| 1515 | 0x70, 0x88, 0xff, 0x20, 0x43, 0xa0, 0x0e, 0xfe, 0x30, 0x62, 0x50, 0x20, | ||
| 1516 | 0x21, 0x08, 0x06, 0x95, 0x59, 0x1c, 0xb3, 0x0c, 0x5f, 0x15, 0x8c, 0x21, | ||
| 1517 | 0x0c, 0x32, 0x31, 0x1c, 0x11, 0xfc, 0x83, 0xe2, 0x1f, 0xb3, 0x0c, 0x97, | ||
| 1518 | 0x15, 0x98, 0xf0, 0x0f, 0xe2, 0x3f, 0x4b, 0x80, 0x8d, 0x18, 0x18, 0x48, | ||
| 1519 | 0x08, 0x82, 0x85, 0x7f, 0x48, 0x6b, 0x31, 0x8c, 0x18, 0x1c, 0x48, 0x08, | ||
| 1520 | 0x82, 0x85, 0x7f, 0x40, 0x6d, 0x11, 0x80, 0x84, 0x05, 0x20, 0x21, 0xfe, | ||
| 1521 | 0x16, 0x80, 0x04, 0xf8, 0xcf, 0x12, 0x60, 0x03, 0x15, 0x80, 0x62, 0x09, | ||
| 1522 | 0xd7, 0x1c, 0x83, 0x3c, 0x04, 0x3a, 0x31, 0x86, 0xc0, 0xb4, 0xc4, 0x70, | ||
| 1523 | 0x44, 0x80, 0x12, 0x8a, 0x7f, 0xcc, 0x32, 0x68, 0x59, 0x60, 0x02, 0x4a, | ||
| 1524 | 0x88, 0xff, 0x2c, 0xc1, 0x36, 0x62, 0x60, 0x20, 0x21, 0x08, 0x16, 0xfe, | ||
| 1525 | 0x21, 0xd1, 0xc5, 0x30, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x01, | ||
| 1526 | 0xd9, 0x45, 0x90, 0x12, 0x16, 0xa4, 0x84, 0xf8, 0x5b, 0x90, 0x12, 0xe0, | ||
| 1527 | 0x3f, 0x4b, 0xb0, 0x0d, 0x54, 0x00, 0x4a, 0x26, 0x68, 0x73, 0x0c, 0x49, | ||
| 1528 | 0x50, 0x13, 0x63, 0x08, 0x55, 0x4d, 0x0c, 0x47, 0x04, 0x31, 0xa1, 0xf8, | ||
| 1529 | 0xc7, 0x2c, 0x43, 0xc7, 0x05, 0x26, 0xc4, 0x84, 0xf8, 0xcf, 0x12, 0x78, | ||
| 1530 | 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x52, 0x5f, 0x0c, 0x23, | ||
| 1531 | 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0xd0, 0x5f, 0x04, 0x32, 0x61, | ||
| 1532 | 0x81, 0x4c, 0x88, 0xbf, 0x05, 0x32, 0x01, 0xfe, 0xb3, 0x04, 0xde, 0x40, | ||
| 1533 | 0x05, 0xa0, 0x70, 0x42, 0x37, 0xc7, 0x90, 0x04, 0x3d, 0x31, 0x62, 0x80, | ||
| 1534 | 0x20, 0x21, 0x08, 0x16, 0xfe, 0xe1, 0x94, 0x46, 0x60, 0x12, 0x24, 0x31, | ||
| 1535 | 0xc8, 0x10, 0xa0, 0x04, 0x4f, 0xcc, 0x12, 0x7c, 0x03, 0x15, 0x81, 0x1f, | ||
| 1536 | 0x50, 0x82, 0x37, 0xc8, 0x10, 0xb4, 0x84, 0x4f, 0xcc, 0x12, 0xb4, 0xc1, | ||
| 1537 | 0x2c, 0x43, 0x18, 0xb4, 0x01, 0x3f, 0x0c, 0x32, 0xf4, 0x82, 0x4b, 0x84, | ||
| 1538 | 0xc5, 0x88, 0xc1, 0x81, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0x65, 0x1a, 0x81, | ||
| 1539 | 0x48, 0xcc, 0x31, 0xac, 0x44, 0x30, 0x17, 0x23, 0x06, 0x07, 0x12, 0x82, | ||
| 1540 | 0x60, 0xe1, 0x1f, 0x17, 0x6a, 0x0c, 0x23, 0x31, 0xc7, 0x20, 0x04, 0x67, | ||
| 1541 | 0x31, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x71, 0xa9, 0x46, 0x41, | ||
| 1542 | 0x12, 0x73, 0x0c, 0x42, 0x80, 0x16, 0x83, 0x0c, 0x81, 0x4c, 0x98, 0xc5, | ||
| 1543 | 0x20, 0x43, 0x50, 0x0e, 0x66, 0xb1, 0x87, 0x01, 0x2e, 0xf4, 0x82, 0x34, | ||
| 1544 | 0x28, 0x00, 0xc6, 0x1e, 0x06, 0xb9, 0xe0, 0x8b, 0xd2, 0xa0, 0x00, 0x18, | ||
| 1545 | 0x73, 0x0c, 0x38, 0x11, 0xf8, 0xc5, 0x20, 0x43, 0x90, 0x13, 0x6e, 0x61, | ||
| 1546 | 0x41, 0x22, 0xfe, 0x83, 0x0c, 0xc1, 0x4e, 0xbc, 0xc5, 0x88, 0x41, 0x81, | ||
| 1547 | 0x84, 0x20, 0x18, 0x54, 0xb7, 0x71, 0xcc, 0x32, 0xb0, 0x81, 0x18, 0x04, | ||
| 1548 | 0x63, 0x08, 0xc3, 0x68, 0x0c, 0x47, 0x04, 0x70, 0xa1, 0xf8, 0xc7, 0x2c, | ||
| 1549 | 0x03, 0x19, 0x8c, 0x41, 0x60, 0x02, 0x5c, 0x88, 0xff, 0x2c, 0x41, 0x19, | ||
| 1550 | 0x8c, 0x18, 0x18, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x48, 0xbc, 0x31, 0x8c, | ||
| 1551 | 0x18, 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x40, 0xbe, 0x11, 0xc4, 0x85, | ||
| 1552 | 0x05, 0x71, 0x21, 0xfe, 0x16, 0xc4, 0x05, 0xf8, 0xcf, 0x12, 0x94, 0xc1, | ||
| 1553 | 0x40, 0x05, 0xa0, 0x8c, 0x81, 0x40, 0x06, 0x73, 0x0c, 0x63, 0x11, 0xac, | ||
| 1554 | 0xc6, 0x18, 0x02, 0xe3, 0x17, 0xc3, 0x11, 0x41, 0x5e, 0x28, 0xfe, 0x31, | ||
| 1555 | 0xcb, 0x70, 0x06, 0x66, 0x10, 0x98, 0x90, 0x17, 0xe2, 0x3f, 0x4b, 0x80, | ||
| 1556 | 0x06, 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x52, 0x79, 0x0c, | ||
| 1557 | 0x23, 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0xd0, 0x79, 0x04, 0x7a, | ||
| 1558 | 0x61, 0x81, 0x5e, 0x88, 0xbf, 0x05, 0x7a, 0x01, 0xfe, 0xb3, 0x04, 0x68, | ||
| 1559 | 0x30, 0x50, 0x01, 0x28, 0x66, 0x20, 0x9c, 0xc1, 0x1c, 0x43, 0x12, 0x98, | ||
| 1560 | 0xc6, 0x18, 0x42, 0x65, 0x1a, 0xc3, 0x11, 0x81, 0x68, 0x28, 0xfe, 0x31, | ||
| 1561 | 0xcb, 0xa0, 0x06, 0x69, 0x10, 0x98, 0x20, 0x1a, 0xe2, 0x3f, 0x4b, 0xb0, | ||
| 1562 | 0x06, 0x23, 0x06, 0x06, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x92, 0x7b, 0x0c, | ||
| 1563 | 0x23, 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x10, 0x7c, 0x04, 0xa3, | ||
| 1564 | 0x61, 0xc1, 0x68, 0x88, 0xbf, 0x05, 0xa3, 0x01, 0xfe, 0xb3, 0x04, 0x6b, | ||
| 1565 | 0x30, 0x50, 0x01, 0x28, 0x69, 0x20, 0xa8, 0xc1, 0x1c, 0x43, 0x12, 0xb8, | ||
| 1566 | 0xc6, 0x88, 0x01, 0x82, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x63, 0x1f, 0xc1, | ||
| 1567 | 0x5d, 0xd4, 0xc5, 0x20, 0x43, 0x90, 0x17, 0xad, 0x31, 0x4b, 0xc0, 0x06, | ||
| 1568 | 0x03, 0x15, 0x81, 0x1f, 0x84, 0x81, 0xb0, 0x06, 0x83, 0x0c, 0x81, 0x5f, | ||
| 1569 | 0xbc, 0xc6, 0x2c, 0x41, 0x1b, 0x0c, 0xb4, 0x04, 0x3c, 0x62, 0xf0, 0x88, | ||
| 1570 | 0xc4, 0x23, 0x9f, 0x2c, 0xb0, 0x01, 0x8f, 0x80, 0xc1, 0x40, 0x4b, 0x80, | ||
| 1571 | 0x22, 0x86, 0x5e, 0x48, 0xe6, 0xf0, 0x11, 0x6c, 0xc0, 0x2f, 0x60, 0x30, | ||
| 1572 | 0xc8, 0x10, 0x08, 0xb1, 0x91, 0x41, 0x40, 0x0c, 0x00, 0x12, 0x00, 0x00, | ||
| 1573 | 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x83, 0x11, 0x84, 0xc3, 0x96, | ||
| 1574 | 0x21, 0x0b, 0xc4, 0x61, 0xcb, 0xe0, 0x05, 0xe3, 0xb0, 0x65, 0x00, 0x83, | ||
| 1575 | 0x80, 0x1c, 0xb6, 0x0c, 0x69, 0x10, 0x94, 0xc3, 0x96, 0xc1, 0x0d, 0x02, | ||
| 1576 | 0x73, 0xd8, 0x32, 0xd4, 0x41, 0x70, 0x0e, 0x5b, 0x86, 0x3b, 0x08, 0xcc, | ||
| 1577 | 0x61, 0xcb, 0xb0, 0x0e, 0xc1, 0x39, 0x6c, 0x19, 0xda, 0x21, 0x30, 0x87, | ||
| 1578 | 0x2d, 0x43, 0x5a, 0x04, 0xe7, 0xb0, 0x65, 0x58, 0x8b, 0xc0, 0x1c, 0x00, | ||
| 1579 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x73, 0x00, 0x00, | ||
| 1580 | 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, | ||
| 1581 | 0x00, 0x14, 0xce, 0x00, 0x10, 0x5a, 0x02, 0x45, 0x40, 0xeb, 0x58, 0x03, | ||
| 1582 | 0x10, 0x08, 0x23, 0x00, 0xc4, 0xce, 0x41, 0x40, 0x4e, 0x83, 0x06, 0x04, | ||
| 1583 | 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, | ||
| 1584 | 0x08, 0x06, 0x23, 0x00, 0x14, 0xcc, 0x00, 0xcc, 0x00, 0x50, 0x33, 0x03, | ||
| 1585 | 0x30, 0xd6, 0xc0, 0xb2, 0x67, 0x28, 0x7f, 0xa8, 0x5f, 0xc6, 0xea, 0x97, | ||
| 1586 | 0x9f, 0xba, 0x38, 0x7b, 0x63, 0x0d, 0x7a, 0x0d, 0xee, 0xb8, 0xa7, 0xe2, | ||
| 1587 | 0xb9, 0x6d, 0x7f, 0x6f, 0x9f, 0xd2, 0xa3, 0x37, 0xd6, 0xb0, 0xce, 0x31, | ||
| 1588 | 0x8b, 0x7a, 0x69, 0x08, 0xa3, 0xbb, 0x77, 0xb7, 0xb1, 0x6a, 0x7f, 0x63, | ||
| 1589 | 0x0d, 0x62, 0x2e, 0xa6, 0xfd, 0x07, 0x96, 0x3c, 0x1b, 0xff, 0xc2, 0x98, | ||
| 1590 | 0xae, 0x6a, 0xee, 0x0b, 0x63, 0x0d, 0xff, 0x4c, 0xfa, 0xbf, 0x2f, 0xd0, | ||
| 1591 | 0x35, 0x28, 0xe6, 0x5f, 0x0b, 0xc7, 0x31, 0xe8, 0x0b, 0x63, 0x0d, 0x73, | ||
| 1592 | 0xdf, 0xa6, 0xa9, 0x2f, 0xb4, 0x6e, 0xc8, 0xf3, 0xbe, 0xc0, 0xe7, 0xac, | ||
| 1593 | 0x8f, 0x7f, 0x00, 0x00, 0x00, 0x83, 0x0c, 0xd7, 0xd1, 0x0c, 0x47, 0x58, | ||
| 1594 | 0x4d, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0xcc, 0x31, 0x24, 0x96, 0x18, | ||
| 1595 | 0x0c, 0x32, 0x04, 0x4a, 0x64, 0xc1, 0x26, 0xfe, 0x83, 0x0c, 0x01, 0x23, | ||
| 1596 | 0xcd, 0x12, 0x24, 0xc3, 0x11, 0x5b, 0x14, 0xf8, 0xc7, 0x2c, 0xc3, 0x90, | ||
| 1597 | 0x04, 0xc3, 0x11, 0x9d, 0x14, 0xf8, 0xc7, 0x2c, 0x03, 0x51, 0x04, 0x23, | ||
| 1598 | 0x06, 0x07, 0x12, 0x82, 0x60, 0xe1, 0x1f, 0x17, 0x1f, 0x7c, 0xce, 0x1c, | ||
| 1599 | 0x43, 0x14, 0xa4, 0xc1, 0x88, 0xc1, 0x81, 0x84, 0x20, 0x58, 0xf8, 0xc7, | ||
| 1600 | 0xe5, 0x07, 0x61, 0xf0, 0xcc, 0x31, 0x08, 0x01, 0x37, 0x62, 0x70, 0x20, | ||
| 1601 | 0x21, 0x08, 0x16, 0xfe, 0x71, 0x81, 0xc2, 0x18, 0x40, 0x73, 0x0c, 0x42, | ||
| 1602 | 0xd0, 0xcd, 0x12, 0x14, 0x03, 0x15, 0x81, 0x40, 0x70, 0xc3, 0x18, 0x42, | ||
| 1603 | 0xf0, 0x06, 0x63, 0x08, 0x42, 0x18, 0x8c, 0x21, 0x0c, 0x61, 0x30, 0x62, | ||
| 1604 | 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x01, 0x91, 0x82, 0x10, 0x8c, 0x18, | ||
| 1605 | 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x40, 0xa5, 0x40, 0x04, 0xc3, 0x11, | ||
| 1606 | 0x81, 0x27, 0xf8, 0xc7, 0x2c, 0x83, 0x71, 0x04, 0x83, 0x0c, 0x87, 0x47, | ||
| 1607 | 0x06, 0x36, 0xa8, 0x81, 0xf8, 0x5b, 0x30, 0x06, 0xe0, 0x6f, 0xc5, 0x1a, | ||
| 1608 | 0x88, 0xbf, 0x05, 0x65, 0x00, 0xfe, 0x36, 0x04, 0xe4, 0x3f, 0xc7, 0x20, | ||
| 1609 | 0x06, 0xc1, 0x1e, 0x0c, 0x32, 0x04, 0x63, 0xa0, 0x06, 0x16, 0x20, 0xe2, | ||
| 1610 | 0x3f, 0xc8, 0x10, 0x94, 0xc1, 0x1a, 0xcc, 0x12, 0x1c, 0x03, 0x15, 0x81, | ||
| 1611 | 0x60, 0x88, 0x41, 0x31, 0xcb, 0x80, 0x24, 0xd9, 0x20, 0x43, 0x90, 0x06, | ||
| 1612 | 0x6f, 0x30, 0x62, 0x70, 0x20, 0x21, 0x08, 0x16, 0xfe, 0x71, 0xd5, 0x42, | ||
| 1613 | 0x40, 0x06, 0x73, 0x0c, 0x6a, 0x10, 0x88, 0xc2, 0x88, 0xc1, 0x81, 0x84, | ||
| 1614 | 0x20, 0x58, 0xf8, 0xc7, 0x75, 0x0b, 0x43, 0x19, 0xcc, 0x31, 0x08, 0x41, | ||
| 1615 | 0x1d, 0x8c, 0x18, 0x1c, 0x48, 0x08, 0x82, 0x85, 0x7f, 0x5c, 0xb9, 0x50, | ||
| 1616 | 0x98, 0xc1, 0x1c, 0x83, 0x10, 0xd8, 0xc1, 0x2c, 0x41, 0x32, 0x50, 0x12, | ||
| 1617 | 0x90, 0x42, 0xe0, 0x0a, 0x82, 0x80, 0x40, 0xc7, 0x20, 0x43, 0x10, 0x07, | ||
| 1618 | 0x77, 0x90, 0x01, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 1619 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xeb, 0x08, 0x18, 0xb0, 0x9a, | ||
| 1620 | 0x80, 0x07, 0x90, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, | ||
| 1621 | 0x00, 0x67, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0x30, 0x03, 0x00, 0x00, | ||
| 1622 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 1623 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 1624 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1625 | 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, | ||
| 1626 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1627 | 0x00, 0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, | ||
| 1628 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1629 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1630 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1631 | 0xff, 0x00, 0x24, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 1632 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1633 | 0xff, 0x00, 0x30, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 1634 | 0x00, 0x49, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1635 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 1636 | 0x00, 0x5d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1637 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1638 | 0x00, 0x6d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1639 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 1640 | 0x00, 0x7e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1641 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 1642 | 0x00, 0x94, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1643 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, | ||
| 1644 | 0x00, 0xa1, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1645 | 0xff, 0x00, 0x30, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 1646 | 0x00, 0xba, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1647 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 1648 | 0x00, 0xcb, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1649 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1650 | 0x00, 0xdd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1651 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1652 | 0x00, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1653 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, | ||
| 1654 | 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 1655 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, | ||
| 1656 | 0x00, 0x55, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0xa7, 0x02, 0x00, 0x00, | ||
| 1657 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, | ||
| 1658 | 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x5a, 0x31, 0x34, 0x47, 0x65, | ||
| 1659 | 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 1660 | 0x44, 0x76, 0x34, 0x5f, 0x66, 0x52, 0x55, 0x31, 0x31, 0x4d, 0x54, 0x4c, | ||
| 1661 | 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x4b, 0x31, 0x35, 0x53, | ||
| 1662 | 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, | ||
| 1663 | 0x74, 0x73, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, | ||
| 1664 | 0x6c, 0x61, 0x6d, 0x70, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, | ||
| 1665 | 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x66, | ||
| 1666 | 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, | ||
| 1667 | 0x61, 0x62, 0x73, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 1668 | 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x2e, 0x75, 0x2e, 0x69, 0x31, 0x2e, | ||
| 1669 | 0x66, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x64, 0x6f, 0x74, | ||
| 1670 | 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x5f, 0x5a, 0x31, 0x32, 0x41, 0x70, | ||
| 1671 | 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x44, 0x76, | ||
| 1672 | 0x33, 0x5f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 1673 | 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x33, 0x32, | ||
| 1674 | 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, | ||
| 1675 | 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 1676 | 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, 0x76, 0x33, 0x66, 0x33, | ||
| 1677 | 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, | ||
| 1678 | 0x61, 0x78, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, | ||
| 1679 | 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, | ||
| 1680 | 0x72, 0x65, 0x5f, 0x32, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x33, | ||
| 1681 | 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, 0x72, 0x36, | ||
| 1682 | 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, 0x74, 0x76, 0x6f, 0x73, | ||
| 1683 | 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, | ||
| 1684 | 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1685 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, | ||
| 1686 | 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xfc, 0x21, 0x00, | ||
| 1687 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, | ||
| 1688 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, | ||
| 1689 | 0xc8, 0x14, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0xa9, 0x07, 0x00, | ||
| 1690 | 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 1691 | 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, | ||
| 1692 | 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, | ||
| 1693 | 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, | ||
| 1694 | 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, | ||
| 1695 | 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, | ||
| 1696 | 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, | ||
| 1697 | 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x6e, 0x01, 0x00, | ||
| 1698 | 0x00, 0x1b, 0xc2, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, | ||
| 1699 | 0x40, 0x02, 0x2a, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, | ||
| 1700 | 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1701 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1702 | 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, | ||
| 1703 | 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, | ||
| 1704 | 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, | ||
| 1705 | 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1706 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 1707 | 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, | ||
| 1708 | 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, | ||
| 1709 | 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, | ||
| 1710 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, | ||
| 1711 | 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, | ||
| 1712 | 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, | ||
| 1713 | 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 1714 | 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, | ||
| 1715 | 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, | ||
| 1716 | 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, | ||
| 1717 | 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, | ||
| 1718 | 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, | ||
| 1719 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1720 | 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, | ||
| 1721 | 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, | ||
| 1722 | 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, | ||
| 1723 | 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, | ||
| 1724 | 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, | ||
| 1725 | 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, | ||
| 1726 | 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, | ||
| 1727 | 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, | ||
| 1728 | 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, | ||
| 1729 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, | ||
| 1730 | 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, | ||
| 1731 | 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, | ||
| 1732 | 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0xe0, 0x09, 0x04, 0xb0, 0x00, 0x55, 0x90, | ||
| 1733 | 0x06, 0x60, 0x30, 0x84, 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, | ||
| 1734 | 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 1735 | 0x84, 0x03, 0x3b, 0xa4, 0x43, 0x38, 0xcc, 0x03, 0xb0, 0xc1, 0x1b, 0x0a, | ||
| 1736 | 0x60, 0x01, 0xaa, 0x20, 0x0d, 0x40, 0x61, 0x08, 0x87, 0x74, 0x90, 0x87, | ||
| 1737 | 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x03, | ||
| 1738 | 0x77, 0x78, 0x87, 0x36, 0x08, 0x07, 0x76, 0x48, 0x87, 0x70, 0x98, 0x07, | ||
| 1739 | 0x60, 0x83, 0x41, 0x18, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x02, 0x01, 0x16, | ||
| 1740 | 0xa0, 0xda, 0x10, 0x26, 0xc6, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0x1a, | ||
| 1741 | 0x00, 0x12, 0x50, 0x11, 0xe1, 0x00, 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, | ||
| 1742 | 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, | ||
| 1743 | 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, | ||
| 1744 | 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, | ||
| 1745 | 0x94, 0xc3, 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, | ||
| 1746 | 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, | ||
| 1747 | 0xa0, 0x03, 0x10, 0x07, 0x72, 0x80, 0x07, 0xc0, 0xe0, 0x0e, 0xef, 0xd0, | ||
| 1748 | 0x06, 0xe2, 0x50, 0x0f, 0xe9, 0xc0, 0x0e, 0xf4, 0x90, 0x0e, 0xee, 0x30, | ||
| 1749 | 0x0f, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, | ||
| 1750 | 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, | ||
| 1751 | 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x00, 0x3d, | ||
| 1752 | 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x39, | ||
| 1753 | 0xc8, 0x43, 0x38, 0xb4, 0x43, 0x39, 0xb4, 0x01, 0x3c, 0xbc, 0x43, 0x3a, | ||
| 1754 | 0xb8, 0x03, 0x3d, 0x94, 0x83, 0x3c, 0xb4, 0x41, 0x39, 0xb0, 0x43, 0x3a, | ||
| 1755 | 0xb4, 0x43, 0x1b, 0xb8, 0xc3, 0x3b, 0xb8, 0x43, 0x1b, 0xb0, 0x43, 0x39, | ||
| 1756 | 0x84, 0x83, 0x39, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, | ||
| 1757 | 0x0e, 0xef, 0xd0, 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, | ||
| 1758 | 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, | ||
| 1759 | 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, | ||
| 1760 | 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, | ||
| 1761 | 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, | ||
| 1762 | 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, 0x70, 0x0e, 0xee, 0x50, | ||
| 1763 | 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, | ||
| 1764 | 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, | ||
| 1765 | 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, | ||
| 1766 | 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, 0x3a, 0xb8, 0xc3, 0x39, | ||
| 1767 | 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, | ||
| 1768 | 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, 0xeb, 0xd0, | ||
| 1769 | 0x06, 0xf0, 0x20, 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, | ||
| 1770 | 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, | ||
| 1771 | 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, | ||
| 1772 | 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, | ||
| 1773 | 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, | ||
| 1774 | 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0x86, 0xe4, 0x10, 0x80, 0x05, 0xa8, 0x82, | ||
| 1775 | 0x34, 0x00, 0x83, 0x0d, 0x06, 0xf2, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, | ||
| 1776 | 0x01, 0xd4, 0x06, 0x1f, 0x49, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x24, | ||
| 1777 | 0xa0, 0x22, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, | ||
| 1778 | 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, | ||
| 1779 | 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1780 | 0x72, 0x00, 0x88, 0x76, 0x48, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, | ||
| 1781 | 0x73, 0x08, 0x07, 0x76, 0x68, 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, | ||
| 1782 | 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, 0x07, 0x7a, 0x40, 0x07, | ||
| 1783 | 0x20, 0x0f, 0xec, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1c, 0xea, | ||
| 1784 | 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, 0x01, 0x20, 0xdc, | ||
| 1785 | 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, | ||
| 1786 | 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, | ||
| 1787 | 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1788 | 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, | ||
| 1789 | 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, | ||
| 1790 | 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, | ||
| 1791 | 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, | ||
| 1792 | 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1793 | 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, | ||
| 1794 | 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, | ||
| 1795 | 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, | ||
| 1796 | 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, | ||
| 1797 | 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, | ||
| 1798 | 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, | ||
| 1799 | 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, | ||
| 1800 | 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, | ||
| 1801 | 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, | ||
| 1802 | 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, | ||
| 1803 | 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, | ||
| 1804 | 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, | ||
| 1805 | 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, | ||
| 1806 | 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, | ||
| 1807 | 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, 0x7a, 0x70, 0x87, | ||
| 1808 | 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, | ||
| 1809 | 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, | ||
| 1810 | 0x01, 0xd8, 0xa0, 0x28, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x6d, 0x00, | ||
| 1811 | 0xac, 0x01, 0x20, 0x01, 0xd5, 0x06, 0x63, 0x09, 0x80, 0x05, 0xa8, 0x36, | ||
| 1812 | 0x18, 0x8c, 0x00, 0x2c, 0x40, 0xb5, 0x41, 0x69, 0xfe, 0xff, 0xff, 0xff, | ||
| 1813 | 0x7f, 0x00, 0xda, 0x00, 0x58, 0x03, 0x40, 0x02, 0xaa, 0x0d, 0x86, 0xf3, | ||
| 1814 | 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd4, 0x86, 0xe9, 0xf9, 0xff, | ||
| 1815 | 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, 0x40, 0x19, 0xdc, 0xe1, 0x1d, 0xda, | ||
| 1816 | 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, | ||
| 1817 | 0x01, 0xd8, 0x50, 0x40, 0x42, 0x90, 0x06, 0x60, 0xb0, 0x21, 0x8a, 0xfe, | ||
| 1818 | 0xff, 0xff, 0xff, 0x7f, 0x00, 0x94, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, 0xc4, | ||
| 1819 | 0xa1, 0x1e, 0xd2, 0x81, 0x1d, 0xe8, 0x21, 0x1d, 0xdc, 0x61, 0x1e, 0x00, | ||
| 1820 | 0x00, 0x49, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, | ||
| 1821 | 0x18, 0x88, 0x62, 0x82, 0x60, 0x1c, 0x13, 0x02, 0x64, 0x42, 0x90, 0x4c, | ||
| 1822 | 0x18, 0x94, 0x85, 0x99, 0x30, 0x34, 0x0b, 0x33, 0x21, 0x70, 0x26, 0x08, | ||
| 1823 | 0x0f, 0x34, 0x21, 0x88, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, | ||
| 1824 | 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, | ||
| 1825 | 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, | ||
| 1826 | 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xe0, 0xc1, 0x0c, 0xc0, 0x30, 0x02, | ||
| 1827 | 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, | ||
| 1828 | 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, 0x34, 0x93, 0x84, 0x10, | ||
| 1829 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, 0x41, 0x18, 0x46, 0x18, | ||
| 1830 | 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, | ||
| 1831 | 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, | ||
| 1832 | 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, | ||
| 1833 | 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, 0xec, 0xbe, 0x1d, 0x21, | ||
| 1834 | 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, 0x84, 0xa3, 0xa4, 0x29, | ||
| 1835 | 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0xf8, 0xed, 0xe1, | ||
| 1836 | 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0x38, 0x4d, 0x9a, 0x22, 0x4a, | ||
| 1837 | 0x98, 0xfc, 0x7f, 0x22, 0xae, 0x89, 0x8a, 0x88, 0xdf, 0x1e, 0x7e, 0x20, | ||
| 1838 | 0x8a, 0x00, 0xec, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x26, 0xb8, 0x48, | ||
| 1839 | 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, 0x7f, | ||
| 1840 | 0x1a, 0x23, 0x00, 0x06, 0x11, 0x1c, 0xa1, 0x24, 0x41, 0x10, 0x08, 0x44, | ||
| 1841 | 0xb2, 0x34, 0x0f, 0x41, 0x65, 0x08, 0x02, 0x82, 0xa4, 0x42, 0x14, 0x45, | ||
| 1842 | 0x51, 0x10, 0x55, 0x06, 0x00, 0x00, 0xc8, 0x2a, 0x02, 0x00, 0x10, 0x36, | ||
| 1843 | 0x47, 0x10, 0x14, 0x41, 0x03, 0x68, 0x2b, 0x03, 0x50, 0x14, 0xd4, 0x15, | ||
| 1844 | 0xa3, 0x28, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x43, 0x51, 0x14, 0x14, 0x16, | ||
| 1845 | 0xa1, 0x28, 0x68, 0x9c, 0x23, 0x40, 0x8c, 0x10, 0x94, 0x73, 0x04, 0x60, | ||
| 1846 | 0x30, 0x8c, 0x20, 0x9c, 0x41, 0x59, 0xcc, 0xe6, 0x11, 0x4e, 0x0d, 0xd5, | ||
| 1847 | 0x00, 0xe0, 0xa4, 0xb4, 0x28, 0xe6, 0xf2, 0x08, 0x1a, 0xaa, 0x01, 0xc0, | ||
| 1848 | 0x49, 0xeb, 0x40, 0x40, 0x0a, 0x9c, 0x73, 0x04, 0xa0, 0x30, 0x8c, 0x30, | ||
| 1849 | 0x9c, 0xc1, 0x20, 0x42, 0x20, 0x0c, 0x22, 0x1c, 0xc2, 0x20, 0x42, 0x21, | ||
| 1850 | 0x8c, 0x00, 0x0c, 0x22, 0x00, 0xc2, 0x14, 0xc0, 0x30, 0x02, 0x71, 0x06, | ||
| 1851 | 0x00, 0x13, 0xc0, 0x20, 0x1c, 0xd2, 0x41, 0x1e, 0xec, 0x80, 0x0e, 0xda, | ||
| 1852 | 0x20, 0x1c, 0xe0, 0x01, 0x1e, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xec, | ||
| 1853 | 0xe1, 0x1d, 0xe6, 0x21, 0x0e, 0xe6, 0xc0, 0x0d, 0xe0, 0xc0, 0x0d, 0xe0, | ||
| 1854 | 0xa0, 0x0d, 0xe6, 0x21, 0x1d, 0xda, 0xa1, 0x1e, 0xd8, 0x21, 0x1c, 0xe8, | ||
| 1855 | 0xe1, 0x1d, 0xe4, 0x61, 0xc3, 0x6d, 0x94, 0x43, 0x1b, 0xc0, 0x83, 0x1e, | ||
| 1856 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 1857 | 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1e, 0xe0, 0x81, 0x1e, 0xe0, 0x41, 0x1b, | ||
| 1858 | 0xa4, 0x03, 0x1e, 0xe8, 0x01, 0x1e, 0xe8, 0x01, 0x1e, 0xb4, 0x41, 0x3a, | ||
| 1859 | 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 1860 | 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, | ||
| 1861 | 0xcc, 0x81, 0x1c, 0xb4, 0x41, 0x3a, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, | ||
| 1862 | 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x39, 0xcc, 0x81, 0x1c, | ||
| 1863 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x39, | ||
| 1864 | 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 1865 | 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, 0x1e, | ||
| 1866 | 0xc4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x01, 0x1d, 0xe8, 0xc1, 0x1c, | ||
| 1867 | 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xcc, 0x81, 0x1c, | ||
| 1868 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, 0x3d, | ||
| 1869 | 0xd0, 0x01, 0x1e, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, | ||
| 1870 | 0xb4, 0x81, 0x3d, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, | ||
| 1871 | 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xe4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, | ||
| 1872 | 0xc8, 0x01, 0x1e, 0xe8, 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xb4, 0x81, 0x3d, | ||
| 1873 | 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, | ||
| 1874 | 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xd8, 0x43, 0x1c, 0xe4, 0x81, 0x1c, | ||
| 1875 | 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, | ||
| 1876 | 0xb4, 0x81, 0x3d, 0xc8, 0x41, 0x1d, 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, | ||
| 1877 | 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x41, 0x1b, 0xd8, 0x43, 0x1d, | ||
| 1878 | 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, | ||
| 1879 | 0xc4, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xc4, 0x01, 0x1c, 0xc8, 0x01, 0x1d, | ||
| 1880 | 0xe8, 0x41, 0x1c, 0xc0, 0x81, 0x1c, 0xd0, 0x81, 0x1e, 0xc4, 0x01, 0x1c, | ||
| 1881 | 0xc8, 0x01, 0x1d, 0xb4, 0x81, 0x3b, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1d, | ||
| 1882 | 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x46, 0x08, 0x43, 0x42, 0x6c, 0x57, 0xfe, | ||
| 1883 | 0xb2, 0xfb, 0xfe, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x43, 0x22, 0x00, | ||
| 1884 | 0x82, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, | ||
| 1885 | 0x48, 0x04, 0xe1, 0x81, 0x84, 0x00, 0x83, 0x00, 0x00, 0x00, 0x10, 0x00, | ||
| 1886 | 0x00, 0x00, 0x00, 0x43, 0x22, 0x54, 0xa0, 0x28, 0x20, 0x00, 0x06, 0x00, | ||
| 1887 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x12, 0xf1, 0x02, 0x64, 0x01, | ||
| 1888 | 0x01, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x88, | ||
| 1889 | 0x1d, 0x22, 0x0c, 0x08, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 1890 | 0x00, 0x86, 0x44, 0xfd, 0x60, 0x6d, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
| 1891 | 0x02, 0x00, 0x00, 0x00, 0x30, 0x24, 0x9a, 0x89, 0xa6, 0x03, 0x02, 0x60, | ||
| 1892 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, 0x11, 0x58, 0x64, | ||
| 1893 | 0x1f, 0x02, 0x0c, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
| 1894 | 0x89, 0xf2, 0x22, 0xb2, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, | ||
| 1895 | 0x00, 0x00, 0x60, 0x48, 0xa4, 0x1a, 0x52, 0x18, 0x00, 0x01, 0x30, 0x00, | ||
| 1896 | 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x88, 0x37, 0xa6, 0x31, | ||
| 1897 | 0x00, 0x02, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, | ||
| 1898 | 0xd1, 0x7b, 0x4c, 0x61, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x20, 0x00, | ||
| 1899 | 0x00, 0x00, 0x00, 0x43, 0x22, 0x11, 0x09, 0x83, 0x34, 0x00, 0x02, 0xa0, | ||
| 1900 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, 0xd1, 0x98, 0x6c, | ||
| 1901 | 0x6b, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, | ||
| 1902 | 0x12, 0x1b, 0x04, 0x8a, 0xaa, 0x1e, 0x00, 0x00, 0x64, 0x81, 0x00, 0x00, | ||
| 1903 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, | ||
| 1904 | 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x3a, 0x8b, 0xa0, 0x04, | ||
| 1905 | 0x0a, 0x61, 0x04, 0xa0, 0x0c, 0x0a, 0xa8, 0x20, 0x0a, 0xa3, 0x40, 0x0a, | ||
| 1906 | 0xa5, 0x60, 0x0a, 0xa7, 0x00, 0x03, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, | ||
| 1907 | 0xe8, 0x1d, 0x01, 0x28, 0x84, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, | ||
| 1908 | 0x29, 0x1c, 0x72, 0xc7, 0x12, 0x24, 0x01, 0x00, 0x00, 0xb1, 0x18, 0x00, | ||
| 1909 | 0x00, 0xa5, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, | ||
| 1910 | 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, | ||
| 1911 | 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, | ||
| 1912 | 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, | ||
| 1913 | 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, | ||
| 1914 | 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, | ||
| 1915 | 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, | ||
| 1916 | 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, | ||
| 1917 | 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, | ||
| 1918 | 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, | ||
| 1919 | 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, | ||
| 1920 | 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, | ||
| 1921 | 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, | ||
| 1922 | 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, | ||
| 1923 | 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, | ||
| 1924 | 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, | ||
| 1925 | 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, | ||
| 1926 | 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, | ||
| 1927 | 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, | ||
| 1928 | 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, | ||
| 1929 | 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, | ||
| 1930 | 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, | ||
| 1931 | 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, | ||
| 1932 | 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, | ||
| 1933 | 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, | ||
| 1934 | 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, | ||
| 1935 | 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, | ||
| 1936 | 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, | ||
| 1937 | 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, | ||
| 1938 | 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, | ||
| 1939 | 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, | ||
| 1940 | 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 1941 | 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, | ||
| 1942 | 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, | ||
| 1943 | 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, | ||
| 1944 | 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, | ||
| 1945 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, | ||
| 1946 | 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, | ||
| 1947 | 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, | ||
| 1948 | 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, | ||
| 1949 | 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, | ||
| 1950 | 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, | ||
| 1951 | 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, | ||
| 1952 | 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, | ||
| 1953 | 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, | ||
| 1954 | 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, | ||
| 1955 | 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, | ||
| 1956 | 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, | ||
| 1957 | 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, | ||
| 1958 | 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, | ||
| 1959 | 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, | ||
| 1960 | 0x10, 0x0e, 0xf0, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, | ||
| 1961 | 0x90, 0x0e, 0xf4, 0x50, 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, | ||
| 1962 | 0x07, 0x37, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, | ||
| 1963 | 0x07, 0x77, 0xf8, 0x85, 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, | ||
| 1964 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0x50, 0x01, 0x00, | ||
| 1965 | 0x00, 0x32, 0x9a, 0x08, 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, | ||
| 1966 | 0x11, 0x32, 0x64, 0xd4, 0xee, 0x80, 0x0d, 0x6a, 0x0c, 0x8b, 0x12, 0x07, | ||
| 1967 | 0xc5, 0xc6, 0x91, 0x41, 0x14, 0x19, 0x8c, 0x22, 0x31, 0x88, 0x64, 0x3d, | ||
| 1968 | 0x45, 0x66, 0x20, 0xca, 0x23, 0x21, 0x54, 0xc1, 0x30, 0xca, 0xe2, 0x3c, | ||
| 1969 | 0xcf, 0x13, 0x5d, 0x4f, 0x60, 0x18, 0x88, 0x91, 0x18, 0x8b, 0x82, 0x11, | ||
| 1970 | 0x5e, 0xb1, 0x1c, 0x01, 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 1971 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 1972 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 1973 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 1974 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 1975 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 1976 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 1977 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 1978 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 1979 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 1980 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 1981 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 1982 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 1983 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 1984 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, | ||
| 1985 | 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x61, 0x69, 0x72, 0x2e, | ||
| 1986 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, | ||
| 1987 | 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x70, | ||
| 1988 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 1989 | 0x65, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x6e, 0x6f, 0x5f, | ||
| 1990 | 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, | ||
| 1991 | 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x70, | ||
| 1992 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 1993 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, | ||
| 1994 | 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, | ||
| 1995 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, 0x61, | ||
| 1996 | 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, | ||
| 1997 | 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 1998 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 1999 | 0x72, 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x66, 0x6c, 0x6f, 0x61, | ||
| 2000 | 0x74, 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x61, 0x69, | ||
| 2001 | 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 2002 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, | ||
| 2003 | 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, | ||
| 2004 | 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, | ||
| 2005 | 0x64, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, | ||
| 2006 | 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x66, 0x6c, 0x6f, | ||
| 2007 | 0x61, 0x74, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, 0x75, 0x74, 0x70, | ||
| 2008 | 0x75, 0x74, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, | ||
| 2009 | 0x70, 0x65, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 2010 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x74, | ||
| 2011 | 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, | ||
| 2012 | 0x64, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, | ||
| 2013 | 0x74, 0x6f, 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, | ||
| 2014 | 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, 0x64, 0x72, 0x5f, 0x77, | ||
| 2015 | 0x68, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x61, 0x69, | ||
| 2016 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, | ||
| 2017 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 2018 | 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, | ||
| 2019 | 0x7a, 0x65, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, | ||
| 2020 | 0x74, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, | ||
| 2021 | 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, | ||
| 2022 | 0x78, 0x33, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x59, 0x55, 0x56, 0x44, | ||
| 2023 | 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x61, | ||
| 2024 | 0x69, 0x72, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x61, 0x69, | ||
| 2025 | 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x78, 0x74, | ||
| 2026 | 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, | ||
| 2027 | 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x59, | ||
| 2028 | 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x5f, 0x61, 0x72, | ||
| 2029 | 0x72, 0x61, 0x79, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, 0x20, 0x73, | ||
| 2030 | 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x55, 0x56, 0x61, | ||
| 2031 | 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, | ||
| 2032 | 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x00, 0x00, 0x00, 0xe4, 0xa8, 0x00, | ||
| 2033 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0x70, 0x06, 0xce, 0x08, 0x82, | ||
| 2034 | 0x1b, 0x9c, 0xc1, 0x08, 0xc2, 0x19, 0x3c, 0x23, 0x08, 0x67, 0x00, 0x8d, | ||
| 2035 | 0x20, 0x9c, 0x41, 0x34, 0x82, 0x10, 0x01, 0x23, 0x08, 0x67, 0x20, 0x8d, | ||
| 2036 | 0x20, 0x9c, 0xc1, 0x34, 0x82, 0x70, 0x06, 0xd4, 0x08, 0xc2, 0x19, 0x54, | ||
| 2037 | 0x23, 0x08, 0x67, 0x60, 0x8d, 0x20, 0x9c, 0xc1, 0x35, 0x82, 0x70, 0x06, | ||
| 2038 | 0xd8, 0x08, 0xc2, 0x19, 0x64, 0x23, 0x08, 0x67, 0xa0, 0x8d, 0x20, 0x9c, | ||
| 2039 | 0xc1, 0x36, 0x82, 0x70, 0x06, 0xdc, 0x08, 0xc2, 0x19, 0x74, 0x23, 0x08, | ||
| 2040 | 0x67, 0xe0, 0xcd, 0x30, 0xe0, 0x41, 0x90, 0x07, 0x33, 0x0c, 0x7a, 0x20, | ||
| 2041 | 0xec, 0xc1, 0x0c, 0xc1, 0x30, 0xc3, 0x80, 0x07, 0x78, 0xc0, 0x07, 0x33, | ||
| 2042 | 0x10, 0x84, 0x1e, 0xe8, 0x01, 0x1f, 0xcc, 0x10, 0x14, 0x33, 0x04, 0xc6, | ||
| 2043 | 0x0c, 0xc1, 0x31, 0x43, 0x81, 0xf0, 0x01, 0x1f, 0x24, 0xca, 0x0c, 0xc1, | ||
| 2044 | 0x2c, 0xcc, 0x80, 0xf0, 0xc1, 0xc2, 0x34, 0x89, 0xe2, 0x3c, 0x33, 0x24, | ||
| 2045 | 0x7a, 0x00, 0x45, 0x8c, 0x94, 0x28, 0xce, 0x34, 0x43, 0x82, 0x07, 0x10, | ||
| 2046 | 0xc5, 0x48, 0x49, 0xe5, 0x58, 0x33, 0xa0, 0x01, 0x1f, 0xec, 0x01, 0x1f, | ||
| 2047 | 0x70, 0xdd, 0x1e, 0xec, 0x01, 0x1f, 0x70, 0x1e, 0x28, 0xec, 0x01, 0x1f, | ||
| 2048 | 0x70, 0x5f, 0x28, 0xec, 0x01, 0x1f, 0x70, 0x60, 0x20, 0x0a, 0x7b, 0xc0, | ||
| 2049 | 0x07, 0x5c, 0x18, 0x8c, 0xc2, 0x1e, 0xf0, 0x01, 0x27, 0x06, 0xa4, 0xb0, | ||
| 2050 | 0x07, 0x7c, 0xc0, 0x8d, 0x41, 0x29, 0xec, 0x01, 0x1f, 0x70, 0x64, 0x30, | ||
| 2051 | 0x83, 0xe4, 0x07, 0x17, 0xf6, 0x07, 0x19, 0x1f, 0xe8, 0x81, 0xb6, 0xe1, | ||
| 2052 | 0x42, 0x19, 0xfc, 0x81, 0x19, 0xec, 0x41, 0x72, 0x06, 0x0e, 0x1a, 0xcc, | ||
| 2053 | 0xa0, 0xf0, 0x81, 0x28, 0xf0, 0x41, 0x1a, 0xa8, 0x81, 0x28, 0x9c, 0x02, | ||
| 2054 | 0x1f, 0xac, 0x01, 0x1b, 0xcc, 0x20, 0xed, 0xc1, 0x85, 0x99, 0x42, 0xa6, | ||
| 2055 | 0x07, 0x7a, 0xa0, 0x6d, 0xba, 0x50, 0x06, 0xa6, 0x60, 0x06, 0xa2, 0x90, | ||
| 2056 | 0xb4, 0x81, 0xe3, 0x06, 0x33, 0x28, 0xa8, 0xf0, 0x06, 0x19, 0x1f, 0xe8, | ||
| 2057 | 0x01, 0x1c, 0x24, 0x71, 0xe0, 0xc8, 0xc1, 0x0c, 0x4a, 0x2a, 0xbc, 0x41, | ||
| 2058 | 0xa6, 0x07, 0x7a, 0x00, 0x07, 0xc9, 0x1c, 0x38, 0x74, 0x30, 0x43, 0xa2, | ||
| 2059 | 0x0a, 0x75, 0x90, 0xf1, 0x81, 0x1e, 0x24, 0x76, 0xe0, 0xdc, 0xc1, 0x0c, | ||
| 2060 | 0x48, 0x2d, 0xd8, 0xc2, 0x2d, 0xe4, 0xc2, 0x2e, 0xf0, 0x42, 0x2f, 0xf8, | ||
| 2061 | 0xc2, 0x0c, 0x43, 0x1f, 0xd0, 0xc2, 0x2f, 0x54, 0x1a, 0x00, 0x62, 0x80, | ||
| 2062 | 0x06, 0x62, 0x20, 0x06, 0x62, 0xc0, 0x89, 0x81, 0x18, 0x88, 0x81, 0x18, | ||
| 2063 | 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, | ||
| 2064 | 0x88, 0x81, 0x1b, 0xb8, 0x81, 0x45, 0x07, 0x7a, 0x60, 0x59, 0x96, 0x1e, | ||
| 2065 | 0x70, 0xa6, 0xc0, 0x0a, 0xac, 0x40, 0x37, 0x7e, 0x81, 0x12, 0x7e, 0x61, | ||
| 2066 | 0x0f, 0xf6, 0xa0, 0x0e, 0xf0, 0x20, 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, | ||
| 2067 | 0xcd, 0xae, 0xcd, 0xa5, 0xed, 0x8d, 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, | ||
| 2068 | 0x2d, 0xec, 0x6c, 0x6e, 0x14, 0x41, 0x15, 0x56, 0xe1, 0x14, 0x36, 0x36, | ||
| 2069 | 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32, 0x37, 0xba, 0x51, 0x02, 0x56, 0xb8, | ||
| 2070 | 0x25, 0x2c, 0x4d, 0xce, 0xc5, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, | ||
| 2071 | 0x94, 0xa0, 0x15, 0x8e, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, | ||
| 2072 | 0xab, 0x0b, 0x3b, 0x2b, 0xfb, 0xb2, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, | ||
| 2073 | 0x1b, 0x25, 0x70, 0x85, 0x9b, 0xc2, 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, | ||
| 2074 | 0xe0, 0xd2, 0xd8, 0xca, 0xbe, 0xde, 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, | ||
| 2075 | 0x46, 0x19, 0x5e, 0x01, 0x16, 0x62, 0xe1, 0x98, 0xb0, 0x34, 0x39, 0x17, | ||
| 2076 | 0x33, 0xb9, 0xb0, 0xb3, 0xb6, 0x32, 0x37, 0xba, 0x51, 0x82, 0x5f, 0x00, | ||
| 2077 | 0x00, 0xa9, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, | ||
| 2078 | 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, | ||
| 2079 | 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, | ||
| 2080 | 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, | ||
| 2081 | 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, | ||
| 2082 | 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, | ||
| 2083 | 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, | ||
| 2084 | 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, | ||
| 2085 | 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, | ||
| 2086 | 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, | ||
| 2087 | 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, | ||
| 2088 | 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, | ||
| 2089 | 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, | ||
| 2090 | 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, | ||
| 2091 | 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, | ||
| 2092 | 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 2093 | 0x00, 0x8c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, | ||
| 2094 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0xa4, 0xd5, 0xc0, 0x08, 0x00, 0x9d, 0x33, | ||
| 2095 | 0x00, 0x84, 0x8e, 0x00, 0xd0, 0x5b, 0x02, 0x45, 0x40, 0xf0, 0x58, 0x03, | ||
| 2096 | 0x10, 0x08, 0x73, 0x0c, 0x91, 0x1c, 0xc8, 0x01, 0x01, 0x23, 0x00, 0x33, | ||
| 2097 | 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x47, 0xc1, 0x0c, 0xc0, 0x0c, | ||
| 2098 | 0xc0, 0x1c, 0x44, 0x1e, 0xe4, 0x41, 0x1e, 0xe8, 0x01, 0x00, 0x00, 0x00, | ||
| 2099 | 0x00, 0xf1, 0x30, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, | ||
| 2100 | 0x90, 0x51, 0x16, 0x88, 0x49, 0x00, 0x00, 0x00, 0x00, 0x62, 0x80, 0x61, | ||
| 2101 | 0x96, 0x05, 0x00, 0x00, 0x00, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, | ||
| 2102 | 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x28, 0x53, 0x44, | ||
| 2103 | 0x4c, 0x5f, 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, | ||
| 2104 | 0x6e, 0x74, 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 2105 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, | ||
| 2106 | 0x65, 0x72, 0x73, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 2107 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x75, | ||
| 2108 | 0x72, 0x65, 0x73, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, | ||
| 2109 | 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x34, | ||
| 2110 | 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, | ||
| 2111 | 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x00, | ||
| 2112 | 0x00, 0x2b, 0x04, 0x73, 0x08, 0x87, 0x15, 0xc3, 0x39, 0x98, 0x83, 0x38, | ||
| 2113 | 0xac, 0x18, 0xd0, 0xc1, 0x1c, 0xc6, 0x61, 0xc5, 0x90, 0x0e, 0xe6, 0x40, | ||
| 2114 | 0x0e, 0x2b, 0x06, 0x75, 0x30, 0x87, 0x72, 0xd8, 0x20, 0xa0, 0xc3, 0x39, | ||
| 2115 | 0x6c, 0x10, 0xd4, 0x21, 0x1d, 0x36, 0x04, 0xe9, 0xb0, 0x61, 0x50, 0x07, | ||
| 2116 | 0x74, 0x38, 0x07, 0x00, 0x00, 0x23, 0x06, 0x8d, 0x11, 0x82, 0x60, 0xb0, | ||
| 2117 | 0x06, 0x71, 0x10, 0x3d, 0x94, 0xb3, 0x34, 0x86, 0xd1, 0x06, 0xa3, 0x09, | ||
| 2118 | 0x01, 0x30, 0x62, 0xe0, 0x18, 0x21, 0x08, 0x06, 0x69, 0x40, 0x07, 0x52, | ||
| 2119 | 0x64, 0xbd, 0x01, 0xd4, 0x3c, 0x08, 0xf2, 0x06, 0xa3, 0x09, 0x01, 0x30, | ||
| 2120 | 0x86, 0x10, 0x8c, 0xc1, 0x20, 0x03, 0x71, 0x30, 0x73, 0x0c, 0x81, 0x00, | ||
| 2121 | 0x8d, 0x18, 0x38, 0x46, 0x08, 0x82, 0x41, 0x1a, 0xe4, 0xc1, 0x65, 0x6d, | ||
| 2122 | 0x76, 0x50, 0x49, 0x54, 0xd3, 0xd0, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x21, | ||
| 2123 | 0x04, 0x68, 0x30, 0xc7, 0x40, 0x04, 0xd3, 0x75, 0xf1, 0x52, 0x10, 0x94, | ||
| 2124 | 0x41, 0x86, 0x00, 0xaa, 0x8c, 0x08, 0xc0, 0x7f, 0x23, 0x43, 0x18, 0xb8, | ||
| 2125 | 0x81, 0x1f, 0x5c, 0x10, 0x2f, 0x05, 0x41, 0x19, 0x64, 0x08, 0x2a, 0x6d, | ||
| 2126 | 0xc4, 0xe0, 0x38, 0x42, 0x10, 0x2c, 0xfc, 0xa3, 0x5b, 0x85, 0x22, 0xd8, | ||
| 2127 | 0x48, 0x61, 0x06, 0x73, 0x30, 0x0a, 0xa1, 0xe0, 0x5d, 0x10, 0x2f, 0x05, | ||
| 2128 | 0x41, 0x19, 0x64, 0x08, 0xb4, 0x6f, 0xc4, 0xe0, 0x38, 0x42, 0x10, 0x2c, | ||
| 2129 | 0xfc, 0xa3, 0x83, 0x05, 0x25, 0xd8, 0x48, 0xb1, 0x06, 0x78, 0x80, 0x0a, | ||
| 2130 | 0xa6, 0x20, 0x06, 0x17, 0xc4, 0x4b, 0x41, 0x50, 0x06, 0x19, 0x82, 0x8f, | ||
| 2131 | 0x0c, 0x46, 0x0c, 0x8e, 0x23, 0x04, 0xc1, 0xc2, 0x3f, 0xba, 0x5a, 0x78, | ||
| 2132 | 0x82, 0x39, 0x86, 0x6f, 0xe9, 0x83, 0x39, 0x86, 0xe0, 0x48, 0x83, 0x39, | ||
| 2133 | 0x86, 0x60, 0x48, 0x83, 0x11, 0x83, 0x03, 0x89, 0x41, 0xb0, 0xf0, 0x0f, | ||
| 2134 | 0xc9, 0x17, 0x02, 0x3a, 0xb0, 0xe0, 0x0e, 0xc4, 0x3f, 0x83, 0x80, 0x18, | ||
| 2135 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x0a, 0xe0, 0x50, 0x07, 0x64, 0x1d, | ||
| 2136 | 0xb6, 0x14, 0xc2, 0xa1, 0x0e, 0xc8, 0x3a, 0x6c, 0x29, 0x8e, 0x43, 0x1d, | ||
| 2137 | 0x90, 0x75, 0xd8, 0x52, 0x30, 0x07, 0x3b, 0x20, 0xed, 0xb0, 0xa5, 0x88, | ||
| 2138 | 0x0e, 0x76, 0x40, 0xda, 0x61, 0x4b, 0x61, 0x1d, 0xec, 0x80, 0xb4, 0xc3, | ||
| 2139 | 0x96, 0x62, 0x3b, 0xd8, 0x01, 0x69, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2140 | 0x00, 0x61, 0x20, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00, 0x13, 0x04, 0x6e, | ||
| 2141 | 0x10, 0x0b, 0x04, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x74, 0xce, 0x00, | ||
| 2142 | 0xd0, 0x5b, 0x02, 0x45, 0x40, 0xf0, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, | ||
| 2143 | 0x74, 0xcf, 0x41, 0x44, 0x8f, 0xa3, 0x06, 0x63, 0x11, 0x40, 0x20, 0x1c, | ||
| 2144 | 0x04, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, 0x18, 0x81, 0x2c, 0xba, | ||
| 2145 | 0x3d, 0x0d, 0x06, 0x63, 0x04, 0xb5, 0x5a, 0xab, 0xed, 0x37, 0x46, 0xd0, | ||
| 2146 | 0xc7, 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0x6e, 0x1f, 0x8b, 0xb6, 0x2f, 0x8c, | ||
| 2147 | 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, | ||
| 2148 | 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0xdb, 0xc7, 0xa2, | ||
| 2149 | 0xed, 0x8d, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, 0xce, 0x9a, | ||
| 2150 | 0x73, 0x08, 0x06, 0x23, 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, | ||
| 2151 | 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, 0x03, 0x40, 0xc1, 0x0c, | ||
| 2152 | 0xc0, 0x0c, 0xc0, 0x1c, 0x84, 0x1d, 0xf0, 0x81, 0x1d, 0xfc, 0x01, 0x15, | ||
| 2153 | 0x33, 0x00, 0x23, 0x00, 0x33, 0x00, 0x63, 0x0d, 0x20, 0x08, 0x82, 0xf8, | ||
| 2154 | 0x07, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x37, 0xd6, 0xc0, | ||
| 2155 | 0xb6, 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, 0xc7, 0xb6, 0xf3, 0x4f, | ||
| 2156 | 0x7a, 0x63, 0x0d, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x80, 0x20, 0xc8, 0xd6, | ||
| 2157 | 0xbf, 0x00, 0x82, 0x20, 0x5b, 0xff, 0xc2, 0x58, 0x03, 0x08, 0x82, 0x6b, | ||
| 2158 | 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x80, 0x20, 0xb8, 0xe6, 0x60, | ||
| 2159 | 0x30, 0xd6, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, 0x08, 0xd2, 0x6d, 0x0e, | ||
| 2160 | 0x06, 0x20, 0x48, 0xb7, 0x39, 0x18, 0x8c, 0x35, 0xac, 0x23, 0x1e, 0xb3, | ||
| 2161 | 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x3a, 0xe2, 0x31, 0x0b, 0x06, | ||
| 2162 | 0x63, 0x0d, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, 0x20, 0x8c, 0x87, 0x63, | ||
| 2163 | 0x00, 0x82, 0x30, 0x1e, 0x8e, 0xc1, 0x58, 0x83, 0x98, 0x8b, 0x69, 0xff, | ||
| 2164 | 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x58, | ||
| 2165 | 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, 0x8a, 0xf9, 0xd7, 0xc2, | ||
| 2166 | 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, 0x69, 0xea, 0x0b, 0xad, | ||
| 2167 | 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, 0x1f, 0x00, 0x00, 0x00, | ||
| 2168 | 0x00, 0xf1, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x22, 0x47, 0xc8, | ||
| 2169 | 0x90, 0x51, 0x0e, 0xc4, 0x1d, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf3, 0x00, | ||
| 2170 | 0x00, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, | ||
| 2171 | 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, | ||
| 2172 | 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, | ||
| 2173 | 0x72, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, | ||
| 2174 | 0x54, 0x42, 0x41, 0x41, 0x00, 0x13, 0x84, 0x37, 0xf8, 0x26, 0x08, 0x6f, | ||
| 2175 | 0x00, 0x06, 0x13, 0x84, 0x37, 0x08, 0x83, 0x09, 0xc2, 0x1b, 0x88, 0xc1, | ||
| 2176 | 0x04, 0xe1, 0x0d, 0xc6, 0x60, 0x82, 0xf0, 0x06, 0x64, 0x30, 0x41, 0x78, | ||
| 2177 | 0x83, 0x32, 0x98, 0x20, 0xbc, 0x81, 0x19, 0x6c, 0x08, 0xc6, 0x61, 0xc3, | ||
| 2178 | 0x20, 0x0e, 0xec, 0x40, 0x0e, 0x1b, 0x06, 0xae, 0x1d, 0xc8, 0x61, 0x43, | ||
| 2179 | 0x14, 0x0e, 0xee, 0x40, 0x0e, 0xee, 0x50, 0x0e, 0xee, 0x60, 0x0e, 0xee, | ||
| 2180 | 0x70, 0x0e, 0xee, 0x80, 0x0e, 0xee, 0x90, 0x0e, 0xee, 0xa0, 0x0e, 0xee, | ||
| 2181 | 0xb0, 0x0e, 0x1b, 0x86, 0x77, 0x70, 0x07, 0x73, 0xd8, 0x30, 0xbc, 0x83, | ||
| 2182 | 0x3b, 0xac, 0xc3, 0x86, 0xe1, 0x1d, 0xdc, 0x01, 0x1d, 0x36, 0x0c, 0xef, | ||
| 2183 | 0xe0, 0x0e, 0xe9, 0xb0, 0x61, 0x78, 0x07, 0x77, 0x50, 0x87, 0x0d, 0xc3, | ||
| 2184 | 0x3b, 0xb8, 0x43, 0x39, 0x6c, 0x18, 0xde, 0xc1, 0x1d, 0xce, 0x61, 0xc3, | ||
| 2185 | 0xf0, 0x0e, 0xee, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x18, 0xce, | ||
| 2186 | 0x20, 0x0e, 0x44, 0x81, 0x02, 0x60, 0x0c, 0x47, 0x04, 0x55, 0xe0, 0x1f, | ||
| 2187 | 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0xac, 0xc1, 0x64, 0x06, 0x7b, 0x18, | ||
| 2188 | 0xd6, 0xa0, 0x0e, 0xec, 0x80, 0x02, 0x60, 0x8c, 0x18, 0x18, 0x47, 0x08, | ||
| 2189 | 0x82, 0x85, 0x7f, 0x8c, 0x01, 0x2b, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, | ||
| 2190 | 0x60, 0xe1, 0x1f, 0x61, 0xe0, 0x0a, 0x01, 0x64, 0x01, 0x04, 0xfe, 0x23, | ||
| 2191 | 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x61, 0xe0, 0x0a, 0x41, 0x65, | ||
| 2192 | 0x43, 0x24, 0xfe, 0x16, 0x05, 0xe1, 0x6f, 0x43, 0x40, 0xfe, 0x23, 0x06, | ||
| 2193 | 0xc6, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x63, 0x30, 0x0b, 0xc1, 0x88, 0xc1, | ||
| 2194 | 0x71, 0x84, 0x20, 0x58, 0xf8, 0x47, 0x18, 0xd4, 0x42, 0x30, 0x59, 0x30, | ||
| 2195 | 0x89, 0xff, 0x1c, 0x43, 0xb7, 0x84, 0xc2, 0x20, 0x43, 0xe0, 0xcd, 0x81, | ||
| 2196 | 0x0d, 0x01, 0xf9, 0x0f, 0x32, 0x04, 0x60, 0x40, 0x07, 0x83, 0x0c, 0x01, | ||
| 2197 | 0x1f, 0xd0, 0xc1, 0x2c, 0x81, 0x30, 0x50, 0x11, 0x08, 0x81, 0x3e, 0x00, | ||
| 2198 | 0x7b, 0x18, 0xfa, 0xe0, 0x14, 0x6c, 0x81, 0x02, 0x60, 0x0c, 0x47, 0x04, | ||
| 2199 | 0x6c, 0xe0, 0xf8, 0xc7, 0x2c, 0xc3, 0x40, 0x04, 0x83, 0x0c, 0x44, 0x1a, | ||
| 2200 | 0xf0, 0xc1, 0x1e, 0x86, 0x50, 0x58, 0x05, 0x57, 0xa0, 0x00, 0x18, 0x7b, | ||
| 2201 | 0x18, 0x46, 0xa1, 0x15, 0x5e, 0x81, 0x02, 0x60, 0x8c, 0x18, 0x28, 0x49, | ||
| 2202 | 0x0c, 0x82, 0x85, 0x7f, 0x7c, 0xe7, 0x50, 0x74, 0xc7, 0x10, 0x0c, 0x32, | ||
| 2203 | 0x04, 0x6c, 0x00, 0x0a, 0x83, 0x0c, 0xc1, 0x02, 0x0a, 0xb3, 0x04, 0xc4, | ||
| 2204 | 0x40, 0x45, 0x20, 0x0c, 0x98, 0x30, 0x1c, 0x11, 0x06, 0x7c, 0x10, 0xf8, | ||
| 2205 | 0xc7, 0x2c, 0x43, 0x31, 0x05, 0x7b, 0x18, 0x54, 0x81, 0x16, 0xc8, 0x81, | ||
| 2206 | 0x02, 0x60, 0x0c, 0x47, 0x04, 0x7f, 0x10, 0xf8, 0xc7, 0x2c, 0x83, 0x71, | ||
| 2207 | 0x04, 0x83, 0x0c, 0x85, 0x1d, 0xa4, 0xc2, 0x1e, 0x06, 0x57, 0xc0, 0x85, | ||
| 2208 | 0x72, 0xa0, 0x00, 0x18, 0x73, 0x0c, 0x76, 0x10, 0xe8, 0xc2, 0x20, 0x43, | ||
| 2209 | 0x70, 0x07, 0xac, 0x60, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x41, 0x1e, 0xb4, | ||
| 2210 | 0xc2, 0x2c, 0x41, 0x1b, 0xec, 0x61, 0xa0, 0x05, 0x5f, 0x60, 0x07, 0x0a, | ||
| 2211 | 0x80, 0xb1, 0x87, 0xc1, 0x16, 0xc0, 0xa1, 0x1d, 0x28, 0x00, 0xc6, 0x20, | ||
| 2212 | 0x03, 0x14, 0x0a, 0xb2, 0x30, 0x62, 0x50, 0x1c, 0x21, 0x08, 0x06, 0x5b, | ||
| 2213 | 0x3f, 0x10, 0xb3, 0x0c, 0x88, 0x14, 0x8c, 0x21, 0x48, 0xe4, 0x30, 0x1c, | ||
| 2214 | 0x11, 0xb4, 0x82, 0xe2, 0x1f, 0xb3, 0x0c, 0x4a, 0x12, 0x98, 0xd0, 0x0a, | ||
| 2215 | 0xe2, 0x3f, 0x4b, 0xb0, 0xd8, 0xd0, 0x0a, 0xe0, 0x3f, 0x62, 0x60, 0x1c, | ||
| 2216 | 0x21, 0x08, 0x16, 0xfe, 0x81, 0x8d, 0x44, 0x60, 0x81, 0x2b, 0x88, 0xff, | ||
| 2217 | 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x65, 0x12, 0x81, 0x2b, | ||
| 2218 | 0xcc, 0x12, 0x2c, 0x03, 0x15, 0x80, 0x92, 0x08, 0xca, 0x1c, 0x83, 0x2a, | ||
| 2219 | 0x04, 0xec, 0x30, 0x86, 0xb0, 0x85, 0xc3, 0x70, 0x44, 0x60, 0x0b, 0x8a, | ||
| 2220 | 0x7f, 0xcc, 0x32, 0x34, 0x4c, 0x60, 0x82, 0x2d, 0x88, 0xff, 0x2c, 0x81, | ||
| 2221 | 0x63, 0x83, 0x2d, 0x80, 0xff, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, | ||
| 2222 | 0x07, 0xc6, 0x12, 0x81, 0x05, 0xb7, 0x20, 0xfe, 0x23, 0x06, 0xc7, 0x11, | ||
| 2223 | 0x82, 0x60, 0xe1, 0x1f, 0xd6, 0x4b, 0x04, 0xb7, 0x30, 0x4b, 0xe0, 0x0c, | ||
| 2224 | 0x54, 0x00, 0x0a, 0x23, 0x34, 0x73, 0x0c, 0x49, 0x90, 0x0e, 0x63, 0x08, | ||
| 2225 | 0x64, 0x90, 0x0e, 0xc3, 0x11, 0xc1, 0x2f, 0x28, 0xfe, 0x31, 0xcb, 0x00, | ||
| 2226 | 0x3d, 0x81, 0x09, 0xbf, 0x20, 0xfe, 0xb3, 0x04, 0x91, 0x0d, 0xbf, 0x00, | ||
| 2227 | 0xfe, 0x23, 0x06, 0xc6, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x58, 0x4d, 0x04, | ||
| 2228 | 0x16, 0x80, 0x83, 0xf8, 0x8f, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, | ||
| 2229 | 0x58, 0x38, 0x11, 0x80, 0xc3, 0x2c, 0x41, 0x34, 0x50, 0x01, 0x28, 0x8f, | ||
| 2230 | 0x00, 0xcd, 0x31, 0x24, 0x41, 0x3c, 0xcc, 0x12, 0x48, 0x03, 0x15, 0x81, | ||
| 2231 | 0x10, 0xe9, 0xc1, 0x31, 0xc8, 0x10, 0xfc, 0x82, 0x3c, 0xcc, 0x31, 0xf4, | ||
| 2232 | 0x02, 0x18, 0x84, 0xc4, 0x20, 0x43, 0xe0, 0x0b, 0xf3, 0x60, 0x43, 0x20, | ||
| 2233 | 0xfe, 0x83, 0x0c, 0x01, 0x38, 0xd0, 0xc3, 0x2c, 0x41, 0x1b, 0x0c, 0x47, | ||
| 2234 | 0xcc, 0x82, 0x39, 0x04, 0xfe, 0x31, 0xcb, 0x40, 0x81, 0x41, 0x30, 0xc8, | ||
| 2235 | 0x40, 0x07, 0xe5, 0x80, 0x0f, 0x7b, 0x18, 0xfa, 0xe1, 0x24, 0x6a, 0x82, | ||
| 2236 | 0x02, 0x60, 0xec, 0x61, 0xf8, 0x87, 0x94, 0xb0, 0x09, 0x0a, 0x80, 0x31, | ||
| 2237 | 0xc7, 0x70, 0x0e, 0xc1, 0x4a, 0x0c, 0x32, 0x04, 0xe8, 0xd0, 0x0f, 0x16, | ||
| 2238 | 0x1c, 0xe2, 0x3f, 0xc8, 0x10, 0xa8, 0x83, 0x3f, 0x8c, 0x18, 0x14, 0x47, | ||
| 2239 | 0x08, 0x82, 0xc1, 0x96, 0x16, 0xc7, 0x2c, 0xc3, 0x57, 0x05, 0x63, 0x08, | ||
| 2240 | 0x03, 0x4c, 0x0c, 0x47, 0x04, 0xff, 0xa0, 0xf8, 0xc7, 0x2c, 0xc3, 0x65, | ||
| 2241 | 0x05, 0x26, 0xfc, 0x83, 0xf8, 0xcf, 0x12, 0x60, 0x23, 0x06, 0xc6, 0x11, | ||
| 2242 | 0x82, 0x60, 0xe1, 0x1f, 0x98, 0x5b, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, | ||
| 2243 | 0x60, 0xe1, 0x1f, 0x16, 0x5c, 0x04, 0x20, 0x61, 0x01, 0x48, 0x88, 0xbf, | ||
| 2244 | 0x05, 0x20, 0x01, 0xfe, 0xb3, 0x04, 0xd8, 0x40, 0x05, 0xa0, 0x58, 0xc2, | ||
| 2245 | 0x35, 0xc7, 0x20, 0x0f, 0x01, 0x4e, 0x8c, 0x21, 0x30, 0x2d, 0x31, 0x1c, | ||
| 2246 | 0x11, 0xa0, 0x84, 0xe2, 0x1f, 0xb3, 0x0c, 0x5a, 0x16, 0x98, 0x80, 0x12, | ||
| 2247 | 0xe2, 0x3f, 0x4b, 0xb0, 0x8d, 0x18, 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, | ||
| 2248 | 0x60, 0x77, 0x31, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x58, | ||
| 2249 | 0x79, 0x11, 0xa4, 0x84, 0x05, 0x29, 0x21, 0xfe, 0x16, 0xa4, 0x04, 0xf8, | ||
| 2250 | 0xcf, 0x12, 0x6c, 0x03, 0x15, 0x80, 0x92, 0x09, 0xda, 0x1c, 0x43, 0x12, | ||
| 2251 | 0xd4, 0xc4, 0x18, 0x42, 0x55, 0x13, 0xc3, 0x11, 0x41, 0x4c, 0x28, 0xfe, | ||
| 2252 | 0x31, 0xcb, 0xd0, 0x71, 0x81, 0x09, 0x31, 0x21, 0xfe, 0xb3, 0x04, 0xde, | ||
| 2253 | 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x06, 0x1a, 0xc3, 0x88, | ||
| 2254 | 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x25, 0x1a, 0x81, 0x4c, 0x58, | ||
| 2255 | 0x20, 0x13, 0xe2, 0x6f, 0x81, 0x4c, 0x80, 0xff, 0x2c, 0x81, 0x37, 0x50, | ||
| 2256 | 0x01, 0x28, 0x9c, 0xd0, 0xcd, 0x31, 0x24, 0x41, 0x4f, 0x8c, 0x18, 0x20, | ||
| 2257 | 0x47, 0x08, 0x82, 0x85, 0x7f, 0x50, 0xa8, 0x11, 0x98, 0x04, 0x49, 0x0c, | ||
| 2258 | 0x32, 0x04, 0x28, 0xc1, 0x13, 0xb3, 0x04, 0xdf, 0x40, 0x45, 0xe0, 0x07, | ||
| 2259 | 0x94, 0xe0, 0x0d, 0x32, 0x04, 0x2d, 0xe1, 0x13, 0xb3, 0x04, 0x6d, 0x30, | ||
| 2260 | 0xcb, 0x10, 0x06, 0x6d, 0xc0, 0x0f, 0x83, 0x0c, 0xbd, 0xe0, 0x12, 0x61, | ||
| 2261 | 0x31, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xd1, 0xa5, 0x46, 0x20, | ||
| 2262 | 0x12, 0x73, 0x0c, 0x2b, 0x11, 0xc4, 0xc5, 0x88, 0xc1, 0x71, 0x84, 0x20, | ||
| 2263 | 0x58, 0xf8, 0x47, 0xb7, 0x1a, 0xc3, 0x48, 0xcc, 0x31, 0x08, 0xc1, 0x59, | ||
| 2264 | 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x74, 0xad, 0x51, 0x90, | ||
| 2265 | 0xc4, 0x1c, 0x83, 0x10, 0xa0, 0xc5, 0x20, 0x43, 0x20, 0x13, 0x66, 0x31, | ||
| 2266 | 0xc8, 0x10, 0x94, 0x83, 0x59, 0xec, 0x61, 0x70, 0x0b, 0xbc, 0x30, 0x0d, | ||
| 2267 | 0x0a, 0x80, 0xb1, 0x87, 0x01, 0x2e, 0xf4, 0xe2, 0x34, 0x28, 0x00, 0xc6, | ||
| 2268 | 0x1c, 0x03, 0x4e, 0x04, 0x7c, 0x31, 0xc8, 0x10, 0xe4, 0x84, 0x5b, 0x58, | ||
| 2269 | 0x90, 0x88, 0xff, 0x20, 0x43, 0xb0, 0x13, 0x6f, 0x31, 0x62, 0x50, 0x1c, | ||
| 2270 | 0x21, 0x08, 0x06, 0x9b, 0x6e, 0x1c, 0xb3, 0x0c, 0x6c, 0x20, 0x06, 0xc1, | ||
| 2271 | 0x18, 0xc2, 0x10, 0x1a, 0xc3, 0x11, 0x01, 0x5c, 0x28, 0xfe, 0x31, 0xcb, | ||
| 2272 | 0x40, 0x06, 0x63, 0x10, 0x98, 0x00, 0x17, 0xe2, 0x3f, 0x4b, 0x50, 0x06, | ||
| 2273 | 0x23, 0x06, 0xc6, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0xd8, 0x6f, 0x0c, 0x23, | ||
| 2274 | 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x56, 0x78, 0x04, 0x71, 0x61, | ||
| 2275 | 0x41, 0x5c, 0x88, 0xbf, 0x05, 0x71, 0x01, 0xfe, 0xb3, 0x04, 0x65, 0x30, | ||
| 2276 | 0x50, 0x01, 0x28, 0x63, 0x20, 0x90, 0xc1, 0x1c, 0xc3, 0x58, 0x04, 0xa9, | ||
| 2277 | 0x31, 0x86, 0xc0, 0xf8, 0xc5, 0x70, 0x44, 0x90, 0x17, 0x8a, 0x7f, 0xcc, | ||
| 2278 | 0x32, 0x9c, 0x81, 0x19, 0x04, 0x26, 0xe4, 0x85, 0xf8, 0xcf, 0x12, 0xa0, | ||
| 2279 | 0xc1, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x86, 0x1e, 0xc3, | ||
| 2280 | 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0xa5, 0x1e, 0x81, 0x5e, | ||
| 2281 | 0x58, 0xa0, 0x17, 0xe2, 0x6f, 0x81, 0x5e, 0x80, 0xff, 0x2c, 0x01, 0x1a, | ||
| 2282 | 0x0c, 0x54, 0x00, 0x8a, 0x19, 0x08, 0x67, 0x30, 0xc7, 0x90, 0x04, 0xa6, | ||
| 2283 | 0x31, 0x86, 0x50, 0x99, 0xc6, 0x70, 0x44, 0x20, 0x1a, 0x8a, 0x7f, 0xcc, | ||
| 2284 | 0x32, 0xa8, 0x41, 0x1a, 0x04, 0x26, 0x88, 0x86, 0xf8, 0xcf, 0x12, 0xac, | ||
| 2285 | 0xc1, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x16, 0x1f, 0xc3, | ||
| 2286 | 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x35, 0x1f, 0xc1, 0x68, | ||
| 2287 | 0x58, 0x30, 0x1a, 0xe2, 0x6f, 0xc1, 0x68, 0x80, 0xff, 0x2c, 0xc1, 0x1a, | ||
| 2288 | 0x0c, 0x54, 0x00, 0x4a, 0x1a, 0x08, 0x6a, 0x30, 0xc7, 0x90, 0x04, 0xae, | ||
| 2289 | 0x31, 0x62, 0x80, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xe5, 0x47, 0x70, | ||
| 2290 | 0x17, 0x75, 0x31, 0xc8, 0x10, 0xe4, 0x45, 0x6b, 0xcc, 0x12, 0xb0, 0xc1, | ||
| 2291 | 0x40, 0x45, 0xe0, 0x07, 0x61, 0x20, 0xac, 0xc1, 0x20, 0x43, 0xe0, 0x17, | ||
| 2292 | 0xaf, 0x31, 0x4b, 0xd0, 0x06, 0x03, 0x2d, 0x01, 0x8f, 0x18, 0x3c, 0x22, | ||
| 2293 | 0xf1, 0xc8, 0x27, 0x0b, 0x6c, 0xc0, 0x23, 0x60, 0x30, 0xd0, 0x12, 0xa0, | ||
| 2294 | 0x88, 0xa1, 0x17, 0x92, 0x39, 0x7c, 0x04, 0x1b, 0xf0, 0x0b, 0x18, 0x0c, | ||
| 2295 | 0x32, 0x04, 0x42, 0x6c, 0x64, 0x10, 0x10, 0x03, 0x00, 0x12, 0x00, 0x00, | ||
| 2296 | 0x00, 0x5b, 0x86, 0x20, 0x78, 0x87, 0x2d, 0x83, 0x11, 0xc0, 0xc3, 0x96, | ||
| 2297 | 0x21, 0x0b, 0xe2, 0x61, 0xcb, 0xe0, 0x05, 0xf2, 0xb0, 0x65, 0x00, 0x83, | ||
| 2298 | 0x60, 0x1e, 0xb6, 0x0c, 0x69, 0x10, 0xd0, 0xc3, 0x96, 0xc1, 0x0d, 0x82, | ||
| 2299 | 0x7a, 0xd8, 0x32, 0xd4, 0x41, 0x60, 0x0f, 0x5b, 0x86, 0x3b, 0x08, 0xea, | ||
| 2300 | 0x61, 0xcb, 0xb0, 0x0e, 0x81, 0x3d, 0x6c, 0x19, 0xda, 0x21, 0xa8, 0x87, | ||
| 2301 | 0x2d, 0x43, 0x5a, 0x04, 0xf6, 0xb0, 0x65, 0x58, 0x8b, 0xa0, 0x1e, 0x00, | ||
| 2302 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x73, 0x00, 0x00, | ||
| 2303 | 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, | ||
| 2304 | 0x00, 0x74, 0xce, 0x00, 0xd0, 0x5b, 0x02, 0x45, 0x40, 0xf0, 0x58, 0x03, | ||
| 2305 | 0x10, 0x08, 0x23, 0x00, 0x74, 0xcf, 0x41, 0x44, 0x8f, 0xd3, 0x06, 0x04, | ||
| 2306 | 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, | ||
| 2307 | 0x08, 0x06, 0x23, 0x00, 0x14, 0xcc, 0x00, 0xcc, 0x00, 0x50, 0x31, 0x03, | ||
| 2308 | 0x30, 0xd6, 0xc0, 0xb2, 0x67, 0x28, 0x7f, 0xa8, 0x5f, 0xc6, 0xea, 0x97, | ||
| 2309 | 0x9f, 0xba, 0x38, 0x7b, 0x63, 0x0d, 0x7a, 0x0d, 0xee, 0xb8, 0xa7, 0xe2, | ||
| 2310 | 0xb9, 0x6d, 0x7f, 0x6f, 0x9f, 0xd2, 0xa3, 0x37, 0xd6, 0xb0, 0xce, 0x31, | ||
| 2311 | 0x8b, 0x7a, 0x69, 0x08, 0xa3, 0xbb, 0x77, 0xb7, 0xb1, 0x6a, 0x7f, 0x63, | ||
| 2312 | 0x0d, 0x62, 0x2e, 0xa6, 0xfd, 0x07, 0x96, 0x3c, 0x1b, 0xff, 0xc2, 0x98, | ||
| 2313 | 0xae, 0x6a, 0xee, 0x0b, 0x63, 0x0d, 0xff, 0x4c, 0xfa, 0xbf, 0x2f, 0xd0, | ||
| 2314 | 0x35, 0x28, 0xe6, 0x5f, 0x0b, 0xc7, 0x31, 0xe8, 0x0b, 0x63, 0x0d, 0x73, | ||
| 2315 | 0xdf, 0xa6, 0xa9, 0x2f, 0xb4, 0x6e, 0xc8, 0xf3, 0xbe, 0xc0, 0xe7, 0xac, | ||
| 2316 | 0x8f, 0x7f, 0x00, 0x00, 0x00, 0x83, 0x0c, 0xd7, 0xd1, 0x0c, 0x47, 0x58, | ||
| 2317 | 0x4d, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0xcc, 0x31, 0x24, 0x96, 0x18, | ||
| 2318 | 0x0c, 0x32, 0x04, 0x4a, 0x64, 0xc1, 0x26, 0xfe, 0x83, 0x0c, 0x01, 0x23, | ||
| 2319 | 0xcd, 0x12, 0x24, 0xc3, 0x11, 0x5b, 0x14, 0xf8, 0xc7, 0x2c, 0xc3, 0x90, | ||
| 2320 | 0x04, 0xc3, 0x11, 0x9d, 0x14, 0xf8, 0xc7, 0x2c, 0x03, 0x51, 0x04, 0x23, | ||
| 2321 | 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x5d, 0x28, 0x7c, 0xce, 0x1c, | ||
| 2322 | 0x43, 0x14, 0xa4, 0xc1, 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x47, | ||
| 2323 | 0x37, 0x0a, 0x61, 0xf0, 0xcc, 0x31, 0x08, 0x01, 0x37, 0x62, 0x70, 0x1c, | ||
| 2324 | 0x21, 0x08, 0x16, 0xfe, 0xd1, 0x95, 0xc2, 0x18, 0x40, 0x73, 0x0c, 0x42, | ||
| 2325 | 0xd0, 0xcd, 0x12, 0x14, 0x03, 0x15, 0x81, 0x40, 0x70, 0xc3, 0x18, 0x42, | ||
| 2326 | 0xf0, 0x06, 0x63, 0x08, 0x42, 0x18, 0x8c, 0x21, 0x0c, 0x61, 0x30, 0x62, | ||
| 2327 | 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0xa5, 0x82, 0x10, 0x8c, 0x18, | ||
| 2328 | 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x58, 0xaa, 0x40, 0x04, 0xc3, 0x11, | ||
| 2329 | 0x81, 0x27, 0xf8, 0xc7, 0x2c, 0x83, 0x71, 0x04, 0x83, 0x0c, 0x87, 0x47, | ||
| 2330 | 0x06, 0x36, 0xa8, 0x81, 0xf8, 0x5b, 0x30, 0x06, 0xe0, 0x6f, 0xc5, 0x1a, | ||
| 2331 | 0x88, 0xbf, 0x05, 0x65, 0x00, 0xfe, 0x36, 0x04, 0xe4, 0x3f, 0xc7, 0x20, | ||
| 2332 | 0x06, 0xc1, 0x1e, 0x0c, 0x32, 0x04, 0x63, 0xa0, 0x06, 0x16, 0x20, 0xe2, | ||
| 2333 | 0x3f, 0xc8, 0x10, 0x94, 0xc1, 0x1a, 0xcc, 0x12, 0x1c, 0x03, 0x15, 0x81, | ||
| 2334 | 0x60, 0x88, 0x41, 0x31, 0xcb, 0x80, 0x24, 0xd9, 0x20, 0x43, 0x90, 0x06, | ||
| 2335 | 0x6f, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xd1, 0xe9, 0x42, | ||
| 2336 | 0x40, 0x06, 0x73, 0x0c, 0x6a, 0x10, 0x88, 0xc2, 0x88, 0xc1, 0x71, 0x84, | ||
| 2337 | 0x20, 0x58, 0xf8, 0x47, 0xc7, 0x0b, 0x43, 0x19, 0xcc, 0x31, 0x08, 0x41, | ||
| 2338 | 0x1d, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x74, 0xbe, 0x50, | ||
| 2339 | 0x98, 0xc1, 0x1c, 0x83, 0x10, 0xd8, 0xc1, 0x2c, 0x41, 0x32, 0x50, 0x12, | ||
| 2340 | 0x90, 0x42, 0xe0, 0x0a, 0x82, 0x80, 0x40, 0xc7, 0x20, 0x43, 0x10, 0x07, | ||
| 2341 | 0x77, 0x90, 0x01, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 2342 | 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xc0, 0x09, 0x18, 0xe0, 0xac, | ||
| 2343 | 0x80, 0x07, 0xb5, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, | ||
| 2344 | 0x00, 0x6d, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0x68, 0x03, 0x00, 0x00, | ||
| 2345 | 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, | ||
| 2346 | 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 2347 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, | ||
| 2348 | 0x00, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, | ||
| 2349 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 2350 | 0x00, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, | ||
| 2351 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, | ||
| 2352 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 2353 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2354 | 0xff, 0x00, 0x24, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 2355 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2356 | 0xff, 0x00, 0x30, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 2357 | 0x00, 0x48, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2358 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 2359 | 0x00, 0x5c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2360 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 2361 | 0x00, 0x6c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2362 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 2363 | 0x00, 0x7d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2364 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 2365 | 0x00, 0x93, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2366 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, | ||
| 2367 | 0x00, 0xa0, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2368 | 0xff, 0x00, 0x30, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 2369 | 0x00, 0xb9, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2370 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 2371 | 0x00, 0xca, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2372 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 2373 | 0x00, 0xdc, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2374 | 0xff, 0x08, 0x24, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 2375 | 0x00, 0xef, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2376 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, | ||
| 2377 | 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2378 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, | ||
| 2379 | 0x00, 0x23, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2380 | 0xff, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, | ||
| 2381 | 0x00, 0x5d, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, 0xe7, 0x02, 0x00, 0x00, | ||
| 2382 | 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, | ||
| 2383 | 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x5a, 0x31, 0x34, 0x47, 0x65, 0x74, | ||
| 2384 | 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x44, | ||
| 2385 | 0x76, 0x34, 0x5f, 0x66, 0x52, 0x55, 0x31, 0x31, 0x4d, 0x54, 0x4c, 0x63, | ||
| 2386 | 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x4b, 0x31, 0x35, 0x53, 0x68, | ||
| 2387 | 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, | ||
| 2388 | 0x73, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, | ||
| 2389 | 0x61, 0x6d, 0x70, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, | ||
| 2390 | 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x66, 0x33, | ||
| 2391 | 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x61, | ||
| 2392 | 0x62, 0x73, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, | ||
| 2393 | 0x6e, 0x76, 0x65, 0x72, 0x74, 0x2e, 0x75, 0x2e, 0x69, 0x31, 0x2e, 0x66, | ||
| 2394 | 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x64, 0x6f, 0x74, 0x2e, | ||
| 2395 | 0x76, 0x33, 0x66, 0x33, 0x32, 0x5f, 0x5a, 0x31, 0x32, 0x41, 0x70, 0x70, | ||
| 2396 | 0x6c, 0x79, 0x54, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x44, 0x76, 0x33, | ||
| 2397 | 0x5f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 2398 | 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x33, 0x32, 0x61, | ||
| 2399 | 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x77, 0x2e, | ||
| 2400 | 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, | ||
| 2401 | 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, | ||
| 2402 | 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, | ||
| 2403 | 0x78, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x73, | ||
| 2404 | 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, | ||
| 2405 | 0x65, 0x5f, 0x32, 0x64, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x76, | ||
| 2406 | 0x34, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, | ||
| 2407 | 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x32, | ||
| 2408 | 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x33, 0x32, 0x30, 0x32, 0x33, | ||
| 2409 | 0x2e, 0x34, 0x30, 0x34, 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, | ||
| 2410 | 0x70, 0x6c, 0x65, 0x2d, 0x74, 0x76, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, | ||
| 2411 | 0x2e, 0x30, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, | ||
| 2412 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, | ||
| 2413 | 0x00, 0x14, 0x00, 0x00, 0x00, 0xa4, 0x22, 0x00, 0x00, 0xff, 0xff, 0xff, | ||
| 2414 | 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, | ||
| 2415 | 0x00, 0x62, 0x0c, 0x30, 0x24, 0x80, 0x10, 0x05, 0xc8, 0x14, 0x00, 0x00, | ||
| 2416 | 0x00, 0x21, 0x0c, 0x00, 0x00, 0xe1, 0x07, 0x00, 0x00, 0x0b, 0x02, 0x21, | ||
| 2417 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, | ||
| 2418 | 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, | ||
| 2419 | 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, | ||
| 2420 | 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, | ||
| 2421 | 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, | ||
| 2422 | 0xa5, 0x00, 0x19, 0x32, 0x42, 0x04, 0x49, 0x0e, 0x90, 0x11, 0x23, 0xc4, | ||
| 2423 | 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, | ||
| 2424 | 0x06, 0x51, 0x18, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0x1b, 0xc2, 0x24, | ||
| 2425 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x58, 0x03, 0x40, 0x02, 0x2a, 0x22, | ||
| 2426 | 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, | ||
| 2427 | 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, | ||
| 2428 | 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, | ||
| 2429 | 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x38, 0x87, 0x70, | ||
| 2430 | 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, | ||
| 2431 | 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, 0xe2, 0x40, | ||
| 2432 | 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1c, 0xea, 0x21, | ||
| 2433 | 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, 0x1d, 0xe6, 0x01, 0x20, 0xdc, 0xe1, | ||
| 2434 | 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, | ||
| 2435 | 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, | ||
| 2436 | 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, | ||
| 2437 | 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, | ||
| 2438 | 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, | ||
| 2439 | 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, | ||
| 2440 | 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, | ||
| 2441 | 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, | ||
| 2442 | 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, | ||
| 2443 | 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, | ||
| 2444 | 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, | ||
| 2445 | 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, | ||
| 2446 | 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, | ||
| 2447 | 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, | ||
| 2448 | 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, | ||
| 2449 | 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, | ||
| 2450 | 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, | ||
| 2451 | 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, | ||
| 2452 | 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, | ||
| 2453 | 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, | ||
| 2454 | 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, | ||
| 2455 | 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, | ||
| 2456 | 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, | ||
| 2457 | 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, | ||
| 2458 | 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 2459 | 0xd8, 0xe0, 0x09, 0x04, 0xb0, 0x00, 0x55, 0x90, 0x06, 0x60, 0x30, 0x84, | ||
| 2460 | 0x43, 0x3a, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, | ||
| 2461 | 0x83, 0x3c, 0xb4, 0x81, 0x3b, 0xbc, 0x43, 0x1b, 0x84, 0x03, 0x3b, 0xa4, | ||
| 2462 | 0x43, 0x38, 0xcc, 0x03, 0xb0, 0xc1, 0x1b, 0x0a, 0x60, 0x01, 0xaa, 0x20, | ||
| 2463 | 0x0d, 0x40, 0x61, 0x08, 0x87, 0x74, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, | ||
| 2464 | 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x03, 0x77, 0x78, 0x87, 0x36, | ||
| 2465 | 0x08, 0x07, 0x76, 0x48, 0x87, 0x70, 0x98, 0x07, 0x60, 0x83, 0x41, 0x20, | ||
| 2466 | 0xc0, 0x02, 0x54, 0x1b, 0xc2, 0xa4, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, | ||
| 2467 | 0x58, 0x03, 0x40, 0x02, 0x2a, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, | ||
| 2468 | 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, | ||
| 2469 | 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, | ||
| 2470 | 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, | ||
| 2471 | 0x60, 0x87, 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, | ||
| 2472 | 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, | ||
| 2473 | 0xa0, 0x07, 0x74, 0x00, 0xe2, 0x40, 0x0e, 0xf0, 0x00, 0x18, 0xdc, 0xe1, | ||
| 2474 | 0x1d, 0xda, 0x40, 0x1c, 0xea, 0x21, 0x1d, 0xd8, 0x81, 0x1e, 0xd2, 0xc1, | ||
| 2475 | 0x1d, 0xe6, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, | ||
| 2476 | 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, | ||
| 2477 | 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, | ||
| 2478 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 2479 | 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, | ||
| 2480 | 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, | ||
| 2481 | 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, | ||
| 2482 | 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, | ||
| 2483 | 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, | ||
| 2484 | 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, | ||
| 2485 | 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, | ||
| 2486 | 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, | ||
| 2487 | 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, | ||
| 2488 | 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, | ||
| 2489 | 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, | ||
| 2490 | 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, | ||
| 2491 | 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, | ||
| 2492 | 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, | ||
| 2493 | 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, | ||
| 2494 | 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, | ||
| 2495 | 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, | ||
| 2496 | 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, | ||
| 2497 | 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, | ||
| 2498 | 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, | ||
| 2499 | 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, | ||
| 2500 | 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0x90, 0x18, 0x02, 0xb0, 0x00, | ||
| 2501 | 0x55, 0x90, 0x06, 0x60, 0xb0, 0xc1, 0x38, 0xfe, 0xff, 0xff, 0xff, 0x7f, | ||
| 2502 | 0x00, 0x24, 0x80, 0xda, 0xe0, 0x23, 0xc8, 0xff, 0xff, 0xff, 0xff, 0x0f, | ||
| 2503 | 0x80, 0x04, 0x54, 0x44, 0x38, 0xc0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, | ||
| 2504 | 0x43, 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, 0x39, 0xc0, | ||
| 2505 | 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, | ||
| 2506 | 0xf5, 0x50, 0x0e, 0x00, 0xd1, 0x0e, 0xe9, 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, | ||
| 2507 | 0xe5, 0x70, 0x0e, 0xe1, 0xc0, 0x0e, 0x6d, 0x60, 0x0f, 0xe5, 0x30, 0x0e, | ||
| 2508 | 0xf4, 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xf7, 0x90, 0x0e, 0xe4, 0x40, 0x0f, | ||
| 2509 | 0xe8, 0x00, 0xe4, 0x81, 0x1d, 0x00, 0x83, 0x3b, 0xbc, 0x43, 0x1b, 0x88, | ||
| 2510 | 0x43, 0x3d, 0xa4, 0x03, 0x3b, 0xd0, 0x43, 0x3a, 0xb8, 0xc3, 0x3c, 0x00, | ||
| 2511 | 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, | ||
| 2512 | 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, | ||
| 2513 | 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, | ||
| 2514 | 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, | ||
| 2515 | 0xe1, 0xd0, 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, | ||
| 2516 | 0xf4, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, | ||
| 2517 | 0x6d, 0xe0, 0x0e, 0xef, 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, | ||
| 2518 | 0xe6, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, | ||
| 2519 | 0x43, 0x1b, 0xa4, 0x83, 0x3b, 0x98, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, | ||
| 2520 | 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, | ||
| 2521 | 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, | ||
| 2522 | 0xee, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, | ||
| 2523 | 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, | ||
| 2524 | 0xc3, 0x3b, 0xb4, 0xc1, 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, | ||
| 2525 | 0x43, 0x1b, 0xe8, 0x43, 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, | ||
| 2526 | 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, | ||
| 2527 | 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x40, 0x0f, | ||
| 2528 | 0xf2, 0x10, 0x0e, 0xf0, 0x00, 0x0f, 0xe9, 0xe0, 0x0e, 0xe7, 0xd0, 0x06, | ||
| 2529 | 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, | ||
| 2530 | 0x03, 0x40, 0xcc, 0x03, 0x3d, 0x84, 0xc3, 0x38, 0xac, 0x43, 0x1b, 0xc0, | ||
| 2531 | 0x83, 0x3c, 0xbc, 0x03, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, | ||
| 2532 | 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xb4, | ||
| 2533 | 0xc1, 0x3c, 0xa4, 0x83, 0x3e, 0x94, 0x03, 0x80, 0x07, 0x00, 0x51, 0x0f, | ||
| 2534 | 0xee, 0x30, 0x0f, 0xe1, 0x60, 0x0e, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, | ||
| 2535 | 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, | ||
| 2536 | 0x43, 0x39, 0x00, 0x1b, 0x94, 0xe4, 0xff, 0xff, 0xff, 0xff, 0x07, 0xa0, | ||
| 2537 | 0x0d, 0x80, 0x35, 0x00, 0x24, 0xa0, 0xda, 0x60, 0x28, 0x01, 0xb0, 0x00, | ||
| 2538 | 0xd5, 0x06, 0x63, 0x11, 0x80, 0x05, 0xa8, 0x36, 0x28, 0xcc, 0xff, 0xff, | ||
| 2539 | 0xff, 0xff, 0x0f, 0x40, 0x1b, 0x00, 0x6b, 0x00, 0x48, 0x40, 0xb5, 0xc1, | ||
| 2540 | 0x68, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x24, 0x80, 0xda, 0x30, 0x39, | ||
| 2541 | 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x6b, 0x00, 0x28, 0x83, 0x3b, 0xbc, | ||
| 2542 | 0x43, 0x1b, 0x88, 0x43, 0x3d, 0xa4, 0x03, 0x3b, 0xd0, 0x43, 0x3a, 0xb8, | ||
| 2543 | 0xc3, 0x3c, 0x00, 0x1b, 0x8a, 0x47, 0x08, 0xd2, 0x00, 0x0c, 0x36, 0x44, | ||
| 2544 | 0xd0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x32, 0xb8, 0xc3, 0x3b, 0xb4, | ||
| 2545 | 0x81, 0x38, 0xd4, 0x43, 0x3a, 0xb0, 0x03, 0x3d, 0xa4, 0x83, 0x3b, 0xcc, | ||
| 2546 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, | ||
| 2547 | 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x42, 0x61, 0x4c, 0x08, 0x8e, | ||
| 2548 | 0x09, 0x01, 0x32, 0x61, 0x48, 0x94, 0x65, 0xc2, 0xc0, 0x28, 0xcb, 0x84, | ||
| 2549 | 0xa0, 0x99, 0x20, 0x38, 0xcf, 0x84, 0x00, 0x02, 0x00, 0x89, 0x20, 0x00, | ||
| 2550 | 0x00, 0x48, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, | ||
| 2551 | 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, | ||
| 2552 | 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xd0, 0xc1, | ||
| 2553 | 0x0c, 0xc0, 0x30, 0x02, 0x01, 0x0c, 0x23, 0x08, 0xc0, 0x59, 0xd2, 0x14, | ||
| 2554 | 0x51, 0xc2, 0xe4, 0xb3, 0x07, 0x30, 0x10, 0x11, 0xe7, 0x34, 0xd2, 0x04, | ||
| 2555 | 0x34, 0x93, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x84, | ||
| 2556 | 0x41, 0x18, 0x46, 0x18, 0x80, 0x1c, 0x28, 0x66, 0xa2, 0xe6, 0x81, 0x1e, | ||
| 2557 | 0xe4, 0xa1, 0x1e, 0xc6, 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, | ||
| 2558 | 0xc2, 0x81, 0x1d, 0xf4, 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, | ||
| 2559 | 0xd2, 0x01, 0x1f, 0x50, 0x60, 0x1c, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0xbe, | ||
| 2560 | 0xec, 0xbe, 0x1d, 0x21, 0x38, 0x03, 0x81, 0x84, 0xe2, 0x18, 0x44, 0x40, | ||
| 2561 | 0x84, 0xa3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xff, 0x27, 0xe2, 0x9a, 0xa8, | ||
| 2562 | 0x88, 0xf8, 0xed, 0xe1, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x04, 0x25, 0xb8, | ||
| 2563 | 0x48, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x5f, 0x02, 0x98, 0x67, 0x21, 0xa2, | ||
| 2564 | 0x7f, 0x1a, 0x23, 0x00, 0x06, 0x11, 0x18, 0xa1, 0x24, 0x41, 0x10, 0x08, | ||
| 2565 | 0x44, 0xb2, 0x2c, 0x0d, 0x39, 0x65, 0x08, 0x02, 0x82, 0xa0, 0x42, 0x14, | ||
| 2566 | 0x45, 0x51, 0x90, 0x54, 0x06, 0x00, 0x00, 0x88, 0x2a, 0x02, 0x00, 0x90, | ||
| 2567 | 0x35, 0x47, 0x10, 0x14, 0x01, 0x03, 0x28, 0x2b, 0x03, 0x50, 0x14, 0xb4, | ||
| 2568 | 0x15, 0xa3, 0x28, 0x00, 0x00, 0x00, 0xa8, 0x2b, 0x43, 0x51, 0x14, 0xf4, | ||
| 2569 | 0x15, 0xa1, 0x28, 0x28, 0x9c, 0x23, 0x40, 0x8c, 0x10, 0x8c, 0x73, 0x04, | ||
| 2570 | 0x60, 0x30, 0x8c, 0x20, 0x94, 0x41, 0x51, 0xc8, 0xa5, 0x11, 0x30, 0x13, | ||
| 2571 | 0x03, 0x80, 0x92, 0xce, 0x81, 0x80, 0x14, 0x28, 0xe7, 0x08, 0x40, 0x61, | ||
| 2572 | 0x10, 0x01, 0x10, 0xa6, 0x00, 0x46, 0x00, 0x86, 0x11, 0x86, 0x32, 0x18, | ||
| 2573 | 0x44, 0x08, 0x84, 0x41, 0x84, 0x43, 0x18, 0x44, 0x28, 0x84, 0x61, 0x04, | ||
| 2574 | 0xa2, 0x0c, 0x00, 0x00, 0x00, 0x13, 0xc0, 0x20, 0x1c, 0xd2, 0x41, 0x1e, | ||
| 2575 | 0xec, 0x80, 0x0e, 0xda, 0x20, 0x1c, 0xe0, 0x01, 0x1e, 0xd8, 0xa1, 0x1c, | ||
| 2576 | 0xda, 0x80, 0x1e, 0xec, 0xe1, 0x1d, 0xe6, 0x21, 0x0e, 0xe6, 0xc0, 0x0d, | ||
| 2577 | 0xe0, 0xc0, 0x0d, 0xe0, 0xa0, 0x0d, 0xe6, 0x21, 0x1d, 0xda, 0xa1, 0x1e, | ||
| 2578 | 0xd8, 0x21, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x61, 0xc3, 0x6d, 0x94, 0x43, | ||
| 2579 | 0x1b, 0xc0, 0x83, 0x1e, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, | ||
| 2580 | 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1e, 0xe0, 0x81, | ||
| 2581 | 0x1e, 0xe0, 0x41, 0x1b, 0xa4, 0x03, 0x1e, 0xe8, 0x01, 0x1e, 0xe8, 0x01, | ||
| 2582 | 0x1e, 0xb4, 0x41, 0x3a, 0xc4, 0x81, 0x1d, 0xe8, 0x41, 0x1c, 0xd8, 0x81, | ||
| 2583 | 0x1e, 0xc4, 0x81, 0x1d, 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, | ||
| 2584 | 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x41, 0x3a, 0xd8, 0x01, | ||
| 2585 | 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, | ||
| 2586 | 0x39, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, | ||
| 2587 | 0x1c, 0xb4, 0x81, 0x39, 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x81, | ||
| 2588 | 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1d, 0xe8, 0x41, | ||
| 2589 | 0x1c, 0xd8, 0x81, 0x1e, 0xc4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x01, | ||
| 2590 | 0x1d, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x81, | ||
| 2591 | 0x3d, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, | ||
| 2592 | 0x1c, 0xb4, 0x81, 0x3d, 0xd0, 0x01, 0x1e, 0xe8, 0x81, 0x1d, 0xd0, 0x81, | ||
| 2593 | 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xd8, 0x01, 0x1d, 0xe8, 0x81, | ||
| 2594 | 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x81, 0x3d, 0xe4, 0x81, | ||
| 2595 | 0x1d, 0xe8, 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xe8, 0x41, 0x1c, 0xc8, 0x01, | ||
| 2596 | 0x1e, 0xb4, 0x81, 0x3d, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, | ||
| 2597 | 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xd8, 0x43, | ||
| 2598 | 0x1c, 0xe4, 0x81, 0x1c, 0xe8, 0x81, 0x1c, 0xd4, 0x81, 0x1d, 0xe8, 0x81, | ||
| 2599 | 0x1c, 0xd4, 0x81, 0x1d, 0xb4, 0x81, 0x3d, 0xc8, 0x41, 0x1d, 0xd8, 0x81, | ||
| 2600 | 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x81, 0x1e, 0xc8, 0x41, 0x1d, 0xd8, 0x41, | ||
| 2601 | 0x1b, 0xd8, 0x43, 0x1d, 0xc4, 0x81, 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, | ||
| 2602 | 0x1c, 0xe8, 0x41, 0x1d, 0xc4, 0x81, 0x1c, 0xb4, 0x81, 0x3d, 0xc4, 0x01, | ||
| 2603 | 0x1c, 0xc8, 0x01, 0x1d, 0xe8, 0x41, 0x1c, 0xc0, 0x81, 0x1c, 0xd0, 0x81, | ||
| 2604 | 0x1e, 0xc4, 0x01, 0x1c, 0xc8, 0x01, 0x1d, 0xb4, 0x81, 0x3b, 0xe0, 0x81, | ||
| 2605 | 0x1e, 0xc4, 0x81, 0x1d, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x46, 0x08, 0x43, | ||
| 2606 | 0x46, 0x6c, 0x57, 0xfe, 0xe7, 0x5b, 0xdb, 0x7f, 0x11, 0x01, 0x06, 0x43, | ||
| 2607 | 0x34, 0xd3, 0x90, 0x08, 0x88, 0x1c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 2608 | 0x01, 0x00, 0x00, 0x00, 0x18, 0x12, 0x45, 0x78, 0x00, 0x21, 0xc0, 0x20, | ||
| 2609 | 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x28, 0x15, 0x28, | ||
| 2610 | 0x09, 0x08, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x86, | ||
| 2611 | 0x44, 0xbd, 0x00, 0x51, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, | ||
| 2612 | 0x00, 0x00, 0x30, 0x24, 0x6a, 0x87, 0xc8, 0x02, 0x02, 0x60, 0x00, 0x00, | ||
| 2613 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x21, 0x91, 0x3f, 0x58, 0x19, 0x10, | ||
| 2614 | 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x89, 0x68, | ||
| 2615 | 0xa2, 0xd9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 2616 | 0x60, 0x48, 0x14, 0x16, 0x59, 0x87, 0x00, 0x03, 0x01, 0x00, 0x00, 0x10, | ||
| 2617 | 0x00, 0x00, 0x00, 0x00, 0x43, 0x22, 0xbd, 0x88, 0x28, 0x20, 0x00, 0x06, | ||
| 2618 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x12, 0xad, 0x86, 0xf4, | ||
| 2619 | 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc0, 0x90, | ||
| 2620 | 0xa8, 0x37, 0xa6, 0x30, 0x00, 0x02, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, | ||
| 2621 | 0x00, 0x00, 0x80, 0x21, 0x11, 0x7c, 0x4c, 0x1f, 0x10, 0x00, 0x03, 0x00, | ||
| 2622 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x89, 0x46, 0x64, 0x3b, 0x03, | ||
| 2623 | 0x20, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0xd8, | ||
| 2624 | 0x20, 0x50, 0x54, 0xfc, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x10, 0x00, 0x00, | ||
| 2625 | 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, | ||
| 2626 | 0x47, 0xc6, 0x04, 0x43, 0x2a, 0x8b, 0xa0, 0x04, 0x0a, 0x61, 0x04, 0xa0, | ||
| 2627 | 0x0c, 0x0a, 0xa8, 0x20, 0x0a, 0xa3, 0x40, 0x0a, 0xa5, 0x60, 0x0a, 0xa7, | ||
| 2628 | 0x00, 0x03, 0x0a, 0xac, 0x14, 0x8a, 0xa1, 0x1c, 0x68, 0x1d, 0x01, 0x28, | ||
| 2629 | 0x84, 0x82, 0x28, 0x8c, 0x02, 0x29, 0x94, 0x82, 0x29, 0x1c, 0x52, 0xc7, | ||
| 2630 | 0x12, 0x24, 0x01, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xa5, 0x00, 0x00, | ||
| 2631 | 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, | ||
| 2632 | 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, | ||
| 2633 | 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, | ||
| 2634 | 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, | ||
| 2635 | 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, | ||
| 2636 | 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, | ||
| 2637 | 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, | ||
| 2638 | 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, | ||
| 2639 | 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, | ||
| 2640 | 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, | ||
| 2641 | 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, | ||
| 2642 | 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, | ||
| 2643 | 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, | ||
| 2644 | 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, | ||
| 2645 | 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, | ||
| 2646 | 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, | ||
| 2647 | 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, | ||
| 2648 | 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, | ||
| 2649 | 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, | ||
| 2650 | 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, | ||
| 2651 | 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, | ||
| 2652 | 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, | ||
| 2653 | 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, | ||
| 2654 | 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, | ||
| 2655 | 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, | ||
| 2656 | 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, | ||
| 2657 | 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, | ||
| 2658 | 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, | ||
| 2659 | 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, | ||
| 2660 | 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, | ||
| 2661 | 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, | ||
| 2662 | 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, | ||
| 2663 | 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, | ||
| 2664 | 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, | ||
| 2665 | 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, | ||
| 2666 | 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, | ||
| 2667 | 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, | ||
| 2668 | 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, | ||
| 2669 | 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, | ||
| 2670 | 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, | ||
| 2671 | 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, | ||
| 2672 | 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, | ||
| 2673 | 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, | ||
| 2674 | 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, | ||
| 2675 | 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, | ||
| 2676 | 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, | ||
| 2677 | 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, | ||
| 2678 | 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, | ||
| 2679 | 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, | ||
| 2680 | 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, | ||
| 2681 | 0x77, 0x70, 0x87, 0x19, 0xce, 0x87, 0x0e, 0xe5, 0x10, 0x0e, 0xf0, 0x10, | ||
| 2682 | 0x0e, 0xec, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x50, | ||
| 2683 | 0x0e, 0x33, 0x28, 0x30, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x30, 0x87, | ||
| 2684 | 0x7a, 0x70, 0x87, 0x71, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77, 0xf8, 0x85, | ||
| 2685 | 0x73, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x78, 0x98, 0x07, 0x00, 0x00, 0x00, | ||
| 2686 | 0x00, 0x79, 0x20, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x32, 0x9a, 0x08, | ||
| 2687 | 0x14, 0x02, 0x85, 0x8c, 0x27, 0x46, 0x46, 0xc8, 0x11, 0x32, 0x64, 0xd4, | ||
| 2688 | 0xf2, 0x00, 0x0e, 0xdc, 0x0c, 0x8b, 0x12, 0x07, 0xc5, 0xc6, 0x91, 0x41, | ||
| 2689 | 0x14, 0x19, 0x8c, 0x22, 0x31, 0x88, 0x64, 0x3d, 0x45, 0x66, 0x20, 0xca, | ||
| 2690 | 0x23, 0x21, 0x54, 0xc1, 0x30, 0xca, 0xe2, 0x3c, 0xcf, 0x13, 0x5d, 0x4f, | ||
| 2691 | 0x60, 0x18, 0x88, 0x91, 0x18, 0x8b, 0x82, 0x11, 0xc5, 0x72, 0x04, 0xd5, | ||
| 2692 | 0xf3, 0x00, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4b, 0x20, 0x56, 0x65, 0x72, | ||
| 2693 | 0x73, 0x69, 0x6f, 0x6e, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, | ||
| 2694 | 0x7a, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, | ||
| 2695 | 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, | ||
| 2696 | 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, 0x20, 0x28, 0x6d, 0x65, 0x74, | ||
| 2697 | 0x61, 0x6c, 0x66, 0x65, 0x2d, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, | ||
| 2698 | 0x30, 0x34, 0x29, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x61, 0x69, 0x72, 0x2e, | ||
| 2699 | 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, | ||
| 2700 | 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, | ||
| 2701 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, | ||
| 2702 | 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 2703 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, | ||
| 2704 | 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, | ||
| 2705 | 0x65, 0x72, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, | ||
| 2706 | 0x62, 0x6c, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, | ||
| 2707 | 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x61, 0x69, 0x72, 0x2e, | ||
| 2708 | 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, | ||
| 2709 | 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x61, 0x69, 0x72, 0x2e, 0x70, | ||
| 2710 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, | ||
| 2711 | 0x65, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x6e, 0x6f, 0x5f, | ||
| 2712 | 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, | ||
| 2713 | 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x70, | ||
| 2714 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x66, | ||
| 2715 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, | ||
| 2716 | 0x74, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x35, | ||
| 2717 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x29, 0x61, | ||
| 2718 | 0x69, 0x72, 0x2e, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, | ||
| 2719 | 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x65, 0x72, | ||
| 2720 | 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, | ||
| 2721 | 0x72, 0x64, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x66, 0x6c, 0x6f, 0x61, | ||
| 2722 | 0x74, 0x32, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x61, 0x69, | ||
| 2723 | 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x61, 0x69, 0x72, 0x2e, | ||
| 2724 | 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x61, | ||
| 2725 | 0x69, 0x72, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, | ||
| 2726 | 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, | ||
| 2727 | 0x64, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, | ||
| 2728 | 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x66, 0x6c, 0x6f, | ||
| 2729 | 0x61, 0x74, 0x73, 0x63, 0x52, 0x47, 0x42, 0x5f, 0x6f, 0x75, 0x74, 0x70, | ||
| 2730 | 0x75, 0x74, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, | ||
| 2731 | 0x70, 0x65, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, | ||
| 2732 | 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x74, | ||
| 2733 | 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, | ||
| 2734 | 0x64, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x61, 0x63, | ||
| 2735 | 0x74, 0x6f, 0x72, 0x31, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f, | ||
| 2736 | 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x73, 0x64, 0x72, 0x5f, 0x77, | ||
| 2737 | 0x68, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x61, 0x69, | ||
| 2738 | 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, | ||
| 2739 | 0x69, 0x7a, 0x65, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, | ||
| 2740 | 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, | ||
| 2741 | 0x7a, 0x65, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, | ||
| 2742 | 0x74, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, | ||
| 2743 | 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, | ||
| 2744 | 0x78, 0x33, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x59, 0x55, 0x56, 0x44, | ||
| 2745 | 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x61, | ||
| 2746 | 0x69, 0x72, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x61, 0x69, | ||
| 2747 | 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x78, 0x74, | ||
| 2748 | 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2c, | ||
| 2749 | 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3e, 0x74, 0x65, 0x78, 0x59, | ||
| 2750 | 0x74, 0x65, 0x78, 0x55, 0x56, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, | ||
| 2751 | 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, | ||
| 2752 | 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, | ||
| 2753 | 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x6d, 0x6e, | ||
| 2754 | 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, | ||
| 2755 | 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, | ||
| 2756 | 0x42, 0x41, 0x41, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 2757 | 0x00, 0x30, 0x82, 0x50, 0x06, 0xcd, 0x08, 0x82, 0x1a, 0x98, 0xc1, 0x08, | ||
| 2758 | 0x42, 0x19, 0x38, 0x23, 0x08, 0x65, 0xf0, 0x8c, 0x20, 0x94, 0x01, 0x34, | ||
| 2759 | 0x82, 0xf0, 0x00, 0x23, 0x08, 0x65, 0x10, 0x8d, 0x20, 0x94, 0x81, 0x34, | ||
| 2760 | 0x82, 0x50, 0x06, 0xd3, 0x08, 0x42, 0x19, 0x50, 0x23, 0x08, 0x65, 0x50, | ||
| 2761 | 0x8d, 0x20, 0x94, 0x81, 0x35, 0x82, 0x50, 0x06, 0xd7, 0x08, 0x42, 0x19, | ||
| 2762 | 0x60, 0x23, 0x08, 0x65, 0x90, 0x8d, 0x20, 0x94, 0x81, 0x36, 0x82, 0x50, | ||
| 2763 | 0x06, 0xdb, 0x08, 0x42, 0x19, 0x70, 0x23, 0x08, 0x65, 0xd0, 0x8d, 0x20, | ||
| 2764 | 0xac, 0x81, 0x37, 0x82, 0xb0, 0x06, 0xdf, 0x08, 0xc2, 0x1a, 0x80, 0xc1, | ||
| 2765 | 0x08, 0xc2, 0x1a, 0x84, 0xc1, 0x08, 0xc2, 0x1a, 0x88, 0xc1, 0x08, 0xc2, | ||
| 2766 | 0x1a, 0x8c, 0xc1, 0x08, 0xc2, 0x1a, 0x90, 0xc1, 0x08, 0xc2, 0x1a, 0x94, | ||
| 2767 | 0xc1, 0x0c, 0x83, 0x1e, 0x04, 0x7b, 0x30, 0xc3, 0xc0, 0x07, 0x42, 0x1f, | ||
| 2768 | 0xcc, 0x10, 0x0c, 0x33, 0x0c, 0x7a, 0xa0, 0x07, 0x7e, 0x30, 0x03, 0x41, | ||
| 2769 | 0xf0, 0x01, 0x1f, 0xf8, 0xc1, 0x0c, 0x41, 0x31, 0x43, 0x60, 0xcc, 0x10, | ||
| 2770 | 0x1c, 0x33, 0x14, 0x88, 0x1f, 0xf8, 0x41, 0xa2, 0xcc, 0x10, 0xf4, 0xc2, | ||
| 2771 | 0x0c, 0x88, 0x1f, 0x2c, 0x4c, 0x93, 0x28, 0xce, 0x33, 0x43, 0xc2, 0x07, | ||
| 2772 | 0x50, 0xc4, 0x48, 0x89, 0xe2, 0x4c, 0x33, 0x24, 0x7a, 0x00, 0x51, 0x8c, | ||
| 2773 | 0x94, 0x54, 0x8e, 0x35, 0x03, 0x1a, 0xf8, 0x41, 0x1f, 0xf8, 0x01, 0xd7, | ||
| 2774 | 0xf5, 0x41, 0x1f, 0xf8, 0x01, 0xe7, 0x89, 0x42, 0x1f, 0xf8, 0x01, 0xf7, | ||
| 2775 | 0x8d, 0x42, 0x1f, 0xf8, 0x01, 0x07, 0x06, 0xa4, 0xd0, 0x07, 0x7e, 0xc0, | ||
| 2776 | 0x85, 0x41, 0x29, 0xf4, 0x81, 0x1f, 0x70, 0x62, 0x60, 0x0a, 0x7d, 0xe0, | ||
| 2777 | 0x07, 0xdc, 0x18, 0x9c, 0x42, 0x1f, 0xf8, 0x01, 0x47, 0x06, 0x33, 0x48, | ||
| 2778 | 0xa0, 0x70, 0x61, 0xa1, 0x90, 0xf9, 0x01, 0x1f, 0x68, 0x9b, 0x38, 0x94, | ||
| 2779 | 0x41, 0x28, 0x98, 0x41, 0x1f, 0x24, 0x67, 0xe0, 0xa0, 0xc1, 0x0c, 0x8a, | ||
| 2780 | 0x1f, 0x90, 0x82, 0x1f, 0xa4, 0x81, 0x1a, 0x90, 0x42, 0x2a, 0xf8, 0xc1, | ||
| 2781 | 0x1a, 0xb0, 0xc1, 0x0c, 0x52, 0x1f, 0x5c, 0x18, 0x2a, 0x64, 0x7c, 0xc0, | ||
| 2782 | 0x07, 0xda, 0x46, 0x0e, 0x65, 0x80, 0x0a, 0x66, 0x40, 0x0a, 0x49, 0x1b, | ||
| 2783 | 0x38, 0x6e, 0x30, 0x83, 0xa2, 0x0a, 0x6f, 0x90, 0xf9, 0x01, 0x1f, 0xc0, | ||
| 2784 | 0x41, 0x12, 0x07, 0x8e, 0x1c, 0xcc, 0xa0, 0xac, 0xc2, 0x1b, 0x64, 0x7c, | ||
| 2785 | 0xc0, 0x07, 0x70, 0x90, 0xc4, 0x81, 0x33, 0x07, 0x33, 0x24, 0xac, 0x40, | ||
| 2786 | 0x07, 0x99, 0x1f, 0xf0, 0x41, 0x52, 0x07, 0x8e, 0x1d, 0xcc, 0x80, 0xfc, | ||
| 2787 | 0x02, 0x38, 0x84, 0xc3, 0x38, 0x94, 0x83, 0x39, 0x9c, 0x03, 0x3a, 0xcc, | ||
| 2788 | 0x30, 0xfc, 0x81, 0x2f, 0xa4, 0xc3, 0x0c, 0x41, 0x1e, 0xcc, 0x30, 0xe0, | ||
| 2789 | 0xc1, 0x3a, 0xb4, 0xc2, 0x0c, 0x03, 0xc7, 0x0e, 0xad, 0x30, 0x43, 0x74, | ||
| 2790 | 0x07, 0xed, 0xd0, 0x0a, 0xed, 0xe0, 0x0a, 0xed, 0xf0, 0x0a, 0xed, 0x00, | ||
| 2791 | 0x0b, 0xed, 0x10, 0x0b, 0xed, 0x20, 0x0b, 0xed, 0x30, 0x0b, 0xed, 0x40, | ||
| 2792 | 0x0b, 0x33, 0x0c, 0xee, 0xd0, 0x0e, 0xae, 0x50, 0x76, 0x00, 0x88, 0x01, | ||
| 2793 | 0x1a, 0x88, 0x81, 0x18, 0x88, 0x01, 0x27, 0x06, 0x62, 0x20, 0x06, 0x62, | ||
| 2794 | 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, | ||
| 2795 | 0x20, 0x06, 0x62, 0x20, 0x06, 0x68, 0x80, 0x06, 0x68, 0x80, 0x06, 0x68, | ||
| 2796 | 0x80, 0x06, 0x6e, 0xe0, 0x06, 0x16, 0x1d, 0xe8, 0x81, 0x65, 0x59, 0x7a, | ||
| 2797 | 0xc0, 0x99, 0x02, 0x2b, 0xb0, 0x02, 0xdd, 0xf8, 0x05, 0x4a, 0xf8, 0x85, | ||
| 2798 | 0x3d, 0xd8, 0x83, 0x3a, 0xc0, 0x03, 0x1d, 0x70, 0x74, 0xe0, 0x06, 0xbc, | ||
| 2799 | 0x21, 0x23, 0x81, 0x09, 0xba, 0x88, 0x8d, 0xcd, 0xae, 0xcd, 0xa5, 0xed, | ||
| 2800 | 0x8d, 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, 0x14, | ||
| 2801 | 0x81, 0x16, 0x6a, 0xe1, 0x14, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, | ||
| 2802 | 0x32, 0x37, 0xba, 0x51, 0x02, 0x5b, 0xb8, 0x25, 0x2c, 0x4d, 0xce, 0xc5, | ||
| 2803 | 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x94, 0xe0, 0x16, 0x8e, 0x0a, | ||
| 2804 | 0x4b, 0x93, 0x73, 0x61, 0x0b, 0x73, 0x3b, 0xab, 0x0b, 0x3b, 0x2b, 0xfb, | ||
| 2805 | 0xb2, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x1b, 0x25, 0xc0, 0x85, 0x9b, | ||
| 2806 | 0xc2, 0xd2, 0xe4, 0x5c, 0xc6, 0xde, 0xda, 0xe0, 0xd2, 0xd8, 0xca, 0xbe, | ||
| 2807 | 0xde, 0xe0, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0x46, 0x19, 0x72, 0x41, 0x17, | ||
| 2808 | 0x76, 0xe1, 0x98, 0xb0, 0x34, 0x39, 0x17, 0x33, 0xb9, 0xb0, 0xb3, 0xb6, | ||
| 2809 | 0x32, 0x37, 0xba, 0x51, 0x82, 0x74, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, | ||
| 2810 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, | ||
| 2811 | 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, | ||
| 2812 | 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, | ||
| 2813 | 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, | ||
| 2814 | 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, | ||
| 2815 | 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, | ||
| 2816 | 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, | ||
| 2817 | 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, | ||
| 2818 | 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, | ||
| 2819 | 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, | ||
| 2820 | 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, | ||
| 2821 | 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, | ||
| 2822 | 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, | ||
| 2823 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, | ||
| 2824 | 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, | ||
| 2825 | 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xd9, 0x00, 0x00, | ||
| 2826 | 0x00, 0x13, 0x04, 0x45, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 2827 | 0x00, 0x84, 0xd5, 0xc0, 0x08, 0x00, 0x95, 0x33, 0x00, 0x64, 0x8e, 0x00, | ||
| 2828 | 0x8c, 0x25, 0x04, 0x00, 0xad, 0x25, 0x50, 0x04, 0x65, 0x40, 0xef, 0x58, | ||
| 2829 | 0x03, 0x10, 0x08, 0x73, 0x0c, 0x50, 0x1c, 0xc4, 0xc1, 0x1c, 0x03, 0xe4, | ||
| 2830 | 0xc4, 0xc1, 0x58, 0x03, 0x30, 0x10, 0x04, 0x8c, 0x00, 0x8c, 0x11, 0x80, | ||
| 2831 | 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x63, | ||
| 2832 | 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, 0xcc, 0x00, 0x50, 0x30, 0x03, 0x30, | ||
| 2833 | 0x03, 0x30, 0x07, 0xc1, 0x07, 0x7b, 0xc0, 0x07, 0x7f, 0x40, 0xc2, 0x0c, | ||
| 2834 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x34, 0x00, 0x00, | ||
| 2835 | 0x00, 0x22, 0x47, 0xc8, 0x90, 0x51, 0x16, 0xc8, 0x49, 0x00, 0x00, 0x00, | ||
| 2836 | 0x00, 0x63, 0x60, 0x61, 0x98, 0x05, 0x00, 0x00, 0x00, 0x61, 0x69, 0x72, | ||
| 2837 | 0x2d, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, | ||
| 2838 | 0x73, 0x28, 0x53, 0x44, 0x4c, 0x5f, 0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, | ||
| 2839 | 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x61, 0x69, 0x72, 0x2d, | ||
| 2840 | 0x61, 0x6c, 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, | ||
| 2841 | 0x61, 0x72, 0x67, 0x28, 0x33, 0x29, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, | ||
| 2842 | 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x73, 0x61, | ||
| 2843 | 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x73, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, | ||
| 2844 | 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x74, 0x65, | ||
| 2845 | 0x78, 0x74, 0x75, 0x72, 0x65, 0x73, 0x61, 0x69, 0x72, 0x2d, 0x61, 0x6c, | ||
| 2846 | 0x69, 0x61, 0x73, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2d, 0x61, 0x72, | ||
| 2847 | 0x67, 0x28, 0x34, 0x29, 0x00, 0x2b, 0x84, 0x7a, 0x80, 0x87, 0x15, 0x83, | ||
| 2848 | 0x3d, 0xd4, 0x43, 0x3c, 0xac, 0x18, 0xee, 0xa1, 0x1e, 0xe4, 0x61, 0xc5, | ||
| 2849 | 0x80, 0x0f, 0xf5, 0x30, 0x0f, 0x2b, 0x86, 0x7c, 0xa8, 0x07, 0x7a, 0xd8, | ||
| 2850 | 0x10, 0xd8, 0xc3, 0x86, 0x21, 0x1f, 0xf0, 0xe1, 0x1e, 0x36, 0x08, 0xf8, | ||
| 2851 | 0x70, 0x0f, 0x1b, 0x04, 0x7b, 0xc8, 0x87, 0x0d, 0x41, 0x3e, 0x6c, 0x18, | ||
| 2852 | 0xec, 0x01, 0x1f, 0xee, 0x01, 0x7b, 0x18, 0x34, 0x33, 0xb0, 0x03, 0x0a, | ||
| 2853 | 0x80, 0x31, 0x1c, 0x11, 0x24, 0x81, 0x7f, 0xcc, 0x32, 0x04, 0x42, 0x30, | ||
| 2854 | 0x62, 0xd0, 0x18, 0x21, 0x08, 0x06, 0x67, 0xb0, 0x07, 0x5b, 0xe6, 0x61, | ||
| 2855 | 0xd5, 0xc5, 0x30, 0x77, 0x30, 0x9a, 0x10, 0x00, 0x23, 0x06, 0x8d, 0x11, | ||
| 2856 | 0x82, 0x60, 0x70, 0x06, 0x7d, 0xc0, 0x6d, 0x60, 0xa0, 0x5d, 0x99, 0xe3, | ||
| 2857 | 0xe4, 0xc1, 0x68, 0x42, 0x00, 0x0c, 0x32, 0x0c, 0xca, 0x34, 0xc8, 0x20, | ||
| 2858 | 0x30, 0xd3, 0x20, 0x83, 0x10, 0x4c, 0x37, 0x06, 0xf0, 0x52, 0x10, 0x94, | ||
| 2859 | 0x41, 0x86, 0x00, 0xca, 0x8c, 0x08, 0xc0, 0x7f, 0x23, 0xc3, 0x19, 0xd0, | ||
| 2860 | 0x01, 0x29, 0x5c, 0x00, 0x2f, 0x05, 0x41, 0x19, 0x64, 0x08, 0x2a, 0x6f, | ||
| 2861 | 0xc4, 0xe0, 0x38, 0x42, 0x10, 0x2c, 0xfc, 0x63, 0x83, 0x85, 0x22, 0x98, | ||
| 2862 | 0x63, 0xb0, 0x82, 0x3c, 0xd8, 0x48, 0xd1, 0x06, 0x7a, 0xa0, 0x0a, 0xa8, | ||
| 2863 | 0x40, 0x06, 0x17, 0xc0, 0x4b, 0x41, 0x50, 0x06, 0x19, 0x82, 0x8d, 0x0c, | ||
| 2864 | 0x46, 0x0c, 0x8e, 0x23, 0x04, 0xc1, 0xc2, 0x3f, 0x36, 0x5b, 0x58, 0x82, | ||
| 2865 | 0x39, 0x06, 0x23, 0x48, 0x83, 0x8d, 0x14, 0x73, 0x00, 0x0a, 0xb0, 0xe0, | ||
| 2866 | 0x0a, 0x69, 0x70, 0x01, 0xbc, 0x14, 0x04, 0x65, 0x90, 0x21, 0x08, 0x03, | ||
| 2867 | 0x35, 0x18, 0x31, 0x38, 0x8e, 0x10, 0x04, 0x0b, 0xff, 0xd8, 0x78, 0x21, | ||
| 2868 | 0x0a, 0xe6, 0x18, 0x8c, 0xc0, 0x0d, 0x66, 0x09, 0x88, 0xe1, 0x88, 0xcf, | ||
| 2869 | 0x0c, 0x02, 0xff, 0x98, 0x65, 0x18, 0x88, 0x60, 0xc4, 0xa0, 0x31, 0x42, | ||
| 2870 | 0x10, 0x0c, 0xce, 0x20, 0x17, 0xf2, 0xe0, 0x0e, 0xf8, 0xc0, 0x0e, 0xe6, | ||
| 2871 | 0xa0, 0x0e, 0xd4, 0x40, 0x0d, 0x6a, 0x61, 0x34, 0x21, 0x00, 0x46, 0x0c, | ||
| 2872 | 0x1a, 0x23, 0x04, 0xc1, 0xe0, 0x0c, 0x76, 0x41, 0x0f, 0xf2, 0xc0, 0x0f, | ||
| 2873 | 0xf0, 0xa0, 0x0e, 0xee, 0x80, 0x0d, 0xd8, 0xe0, 0x16, 0x46, 0x13, 0x02, | ||
| 2874 | 0x60, 0x90, 0x21, 0x48, 0x03, 0x3b, 0x18, 0x64, 0x20, 0xd2, 0x40, 0x0e, | ||
| 2875 | 0x06, 0x19, 0x04, 0x34, 0x90, 0x83, 0x41, 0x06, 0x21, 0x90, 0x83, 0x13, | ||
| 2876 | 0x05, 0x78, 0x29, 0x08, 0xca, 0x20, 0x43, 0xf0, 0x06, 0x78, 0x60, 0x44, | ||
| 2877 | 0x00, 0xfe, 0x1b, 0x19, 0x4c, 0x61, 0x16, 0xc6, 0xe1, 0x02, 0x78, 0x29, | ||
| 2878 | 0x08, 0xca, 0x20, 0x43, 0x40, 0x07, 0x7d, 0x30, 0x62, 0x70, 0x1c, 0x21, | ||
| 2879 | 0x08, 0x16, 0xfe, 0xb1, 0xbd, 0x43, 0x11, 0xcc, 0x31, 0xd4, 0x41, 0x80, | ||
| 2880 | 0x0b, 0x1b, 0x29, 0x58, 0x21, 0x17, 0xd2, 0xe1, 0x1c, 0x46, 0xe1, 0x02, | ||
| 2881 | 0x78, 0x29, 0x08, 0xca, 0x20, 0x43, 0xa0, 0x07, 0xa3, 0x30, 0x62, 0x70, | ||
| 2882 | 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xb1, 0xd5, 0xc3, 0x12, 0xcc, 0x31, 0x18, | ||
| 2883 | 0x01, 0x2a, 0x6c, 0xa4, 0x90, 0x85, 0x5f, 0x78, 0x87, 0x76, 0x40, 0x85, | ||
| 2884 | 0x0b, 0xe0, 0xa5, 0x20, 0x28, 0x83, 0x0c, 0x01, 0x28, 0xa4, 0xc2, 0x88, | ||
| 2885 | 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0xb6, 0x0f, 0x51, 0x30, 0xc7, | ||
| 2886 | 0x60, 0x04, 0xad, 0x30, 0x4b, 0x40, 0x0c, 0x74, 0x04, 0xa0, 0x10, 0x08, | ||
| 2887 | 0x83, 0x48, 0x08, 0x73, 0x0c, 0x01, 0x2a, 0xb8, 0xc2, 0x88, 0xc1, 0x81, | ||
| 2888 | 0xc4, 0x20, 0x58, 0xf8, 0x07, 0x44, 0x12, 0xc1, 0x2e, 0x58, 0xe0, 0x0b, | ||
| 2889 | 0xe2, 0x9f, 0x41, 0x40, 0x0c, 0x19, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x20, | ||
| 2890 | 0x70, 0x87, 0x23, 0x1f, 0x10, 0x7d, 0xd8, 0x52, 0x10, 0xc7, 0x3e, 0x20, | ||
| 2891 | 0xfc, 0xb0, 0xa5, 0x30, 0x8e, 0x7d, 0x40, 0xf8, 0x61, 0x4b, 0xc1, 0x1c, | ||
| 2892 | 0xfd, 0x80, 0xf8, 0xc3, 0x96, 0x22, 0x3a, 0xfa, 0x01, 0xf1, 0x87, 0x2d, | ||
| 2893 | 0xc5, 0x75, 0xf4, 0x03, 0xe2, 0x0f, 0x5b, 0x8a, 0xee, 0xe8, 0x07, 0xc4, | ||
| 2894 | 0x1f, 0xb6, 0x14, 0x64, 0x70, 0xec, 0x03, 0xc2, 0x0f, 0x5b, 0x0a, 0x33, | ||
| 2895 | 0x38, 0xf6, 0x01, 0xe1, 0x87, 0x2d, 0x45, 0x1b, 0x1c, 0xfd, 0x80, 0xf8, | ||
| 2896 | 0xc3, 0x96, 0x42, 0x0e, 0x8e, 0x7e, 0x40, 0xfc, 0x61, 0x4b, 0x81, 0x07, | ||
| 2897 | 0x47, 0x3f, 0x20, 0xfe, 0xb0, 0xa5, 0xf0, 0x83, 0xa3, 0x1f, 0x10, 0x7f, | ||
| 2898 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xbe, 0x01, 0x00, | ||
| 2899 | 0x00, 0x13, 0x04, 0x6e, 0x10, 0x0b, 0x04, 0x00, 0x00, 0x4f, 0x00, 0x00, | ||
| 2900 | 0x00, 0x54, 0xce, 0x00, 0xd0, 0x5a, 0x02, 0x45, 0x40, 0xef, 0x58, 0x03, | ||
| 2901 | 0x10, 0x08, 0x23, 0x00, 0x34, 0xcf, 0x41, 0x40, 0x4e, 0x93, 0x06, 0x63, | ||
| 2902 | 0x11, 0x40, 0x20, 0x1c, 0x04, 0x8c, 0x11, 0xf0, 0xf0, 0xaa, 0xd3, 0xdd, | ||
| 2903 | 0x18, 0x81, 0x2c, 0xba, 0x3d, 0x0d, 0x06, 0x63, 0x04, 0xb5, 0x5a, 0xab, | ||
| 2904 | 0xed, 0x37, 0x46, 0xd0, 0xc7, 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0x6e, 0x1f, | ||
| 2905 | 0x8b, 0xb6, 0x2f, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x81, | ||
| 2906 | 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0xc4, 0x3c, 0xd8, 0xe7, 0xde, 0x18, | ||
| 2907 | 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11, 0xbc, 0x7b, 0x5a, 0xde, 0xdf, | ||
| 2908 | 0x18, 0x81, 0xce, 0x9a, 0x73, 0x08, 0x06, 0x23, 0x00, 0x63, 0x04, 0x20, | ||
| 2909 | 0x08, 0x82, 0x24, 0x18, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x82, 0x60, 0x30, | ||
| 2910 | 0x03, 0x40, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x1c, 0x44, 0x1d, 0xec, 0x41, | ||
| 2911 | 0x1d, 0xf8, 0x01, 0x15, 0x33, 0x00, 0x23, 0x00, 0x33, 0x00, 0x63, 0x0d, | ||
| 2912 | 0x20, 0x08, 0x82, 0xf8, 0x07, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, | ||
| 2913 | 0xf8, 0x37, 0xd6, 0xc0, 0xb6, 0xf3, 0x4f, 0x7a, 0x6c, 0x3b, 0xff, 0xa4, | ||
| 2914 | 0xc7, 0xb6, 0xf3, 0x4f, 0x7a, 0x63, 0x0d, 0x20, 0x08, 0xb2, 0xf5, 0x2f, | ||
| 2915 | 0x80, 0x20, 0xc8, 0xd6, 0xbf, 0x00, 0x82, 0x20, 0x5b, 0xff, 0xc2, 0x58, | ||
| 2916 | 0x03, 0x08, 0x82, 0x6b, 0x0e, 0x06, 0x20, 0x08, 0xae, 0x39, 0x18, 0x80, | ||
| 2917 | 0x20, 0xb8, 0xe6, 0x60, 0x30, 0xd6, 0x00, 0x82, 0x74, 0x9b, 0x83, 0x01, | ||
| 2918 | 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x20, 0x48, 0xb7, 0x39, 0x18, 0x8c, 0x35, | ||
| 2919 | 0xac, 0x23, 0x1e, 0xb3, 0x60, 0xb0, 0x8e, 0x78, 0xcc, 0x82, 0xc1, 0x3a, | ||
| 2920 | 0xe2, 0x31, 0x0b, 0x06, 0x63, 0x0d, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x80, | ||
| 2921 | 0x20, 0x8c, 0x87, 0x63, 0x00, 0x82, 0x30, 0x1e, 0x8e, 0xc1, 0x58, 0x83, | ||
| 2922 | 0x98, 0x8b, 0x69, 0xff, 0x81, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0xa6, 0xab, | ||
| 2923 | 0x9a, 0xfb, 0xc2, 0x58, 0xc3, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x74, 0x0d, | ||
| 2924 | 0x8a, 0xf9, 0xd7, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x58, 0xc3, 0xdc, 0xb7, | ||
| 2925 | 0x69, 0xea, 0x0b, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0xf0, 0x39, 0xeb, 0xe3, | ||
| 2926 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, | ||
| 2927 | 0x00, 0x1b, 0x06, 0x77, 0x68, 0x87, 0x57, 0xd8, 0x30, 0xb8, 0x43, 0x3b, | ||
| 2928 | 0xd0, 0xc2, 0x86, 0xc1, 0x1d, 0xda, 0x21, 0x16, 0x36, 0x0c, 0xee, 0xd0, | ||
| 2929 | 0x0e, 0xb2, 0xb0, 0x61, 0x70, 0x87, 0x76, 0x98, 0x85, 0x0d, 0x83, 0x3b, | ||
| 2930 | 0xb4, 0x03, 0x2c, 0x6c, 0x18, 0xdc, 0xa1, 0x1d, 0x5a, 0x01, 0x00, 0x00, | ||
| 2931 | 0x00, 0x7b, 0x18, 0xce, 0x20, 0x0e, 0x44, 0x81, 0x02, 0x60, 0x0c, 0x47, | ||
| 2932 | 0x04, 0x55, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0x0c, 0x32, 0xac, 0xc1, | ||
| 2933 | 0x64, 0x06, 0x7b, 0x18, 0xd6, 0xa0, 0x0e, 0xec, 0x80, 0x02, 0x60, 0x8c, | ||
| 2934 | 0x18, 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x84, 0xc1, 0x2a, 0x0c, 0x23, | ||
| 2935 | 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x5f, 0x2b, 0x04, 0x90, 0x05, | ||
| 2936 | 0x10, 0xf8, 0x8f, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x7c, 0xad, | ||
| 2937 | 0x10, 0x54, 0x36, 0x44, 0xe2, 0x6f, 0x51, 0x10, 0xfe, 0x36, 0x04, 0xe4, | ||
| 2938 | 0x3f, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x11, 0x06, 0xb2, 0x10, | ||
| 2939 | 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x7c, 0xb4, 0x10, 0x4c, | ||
| 2940 | 0x16, 0x4c, 0xe2, 0x3f, 0xc7, 0xd0, 0x2d, 0xa1, 0x30, 0xc8, 0x10, 0x78, | ||
| 2941 | 0x73, 0x60, 0x43, 0x40, 0xfe, 0x83, 0x0c, 0x01, 0x18, 0xd0, 0xc1, 0x20, | ||
| 2942 | 0x43, 0xc0, 0x07, 0x74, 0x30, 0x4b, 0x20, 0x0c, 0x54, 0x04, 0x42, 0xa0, | ||
| 2943 | 0x0f, 0xc0, 0x1e, 0x86, 0x3e, 0x38, 0x05, 0x5b, 0xa0, 0x00, 0x18, 0xc3, | ||
| 2944 | 0x11, 0x01, 0x1b, 0x38, 0xfe, 0x31, 0xcb, 0x30, 0x10, 0xc1, 0x20, 0x03, | ||
| 2945 | 0x91, 0x06, 0x7c, 0xb0, 0x87, 0x21, 0x14, 0x56, 0xc1, 0x15, 0x28, 0x00, | ||
| 2946 | 0xc6, 0x1e, 0x86, 0x51, 0x68, 0x85, 0x57, 0xa0, 0x00, 0x18, 0x23, 0x06, | ||
| 2947 | 0x4a, 0x12, 0x83, 0x60, 0xe1, 0x1f, 0x9d, 0x39, 0x14, 0xdd, 0x31, 0x04, | ||
| 2948 | 0x83, 0x0c, 0x01, 0x1b, 0x80, 0xc2, 0x20, 0x43, 0xb0, 0x80, 0xc2, 0x2c, | ||
| 2949 | 0x01, 0x31, 0x50, 0x11, 0x08, 0x03, 0x26, 0x0c, 0x47, 0x84, 0x01, 0x1f, | ||
| 2950 | 0x04, 0xfe, 0x31, 0xcb, 0x50, 0x4c, 0xc1, 0x1e, 0x06, 0x55, 0xa0, 0x05, | ||
| 2951 | 0x72, 0xa0, 0x00, 0x18, 0xc3, 0x11, 0xc1, 0x1f, 0x04, 0xfe, 0x31, 0xcb, | ||
| 2952 | 0x60, 0x1c, 0xc1, 0x20, 0x43, 0x61, 0x07, 0xa9, 0xb0, 0x87, 0xc1, 0x15, | ||
| 2953 | 0x70, 0xa1, 0x1c, 0x28, 0x00, 0xc6, 0x1c, 0x83, 0x1d, 0x04, 0xba, 0x30, | ||
| 2954 | 0xc8, 0x10, 0xdc, 0x01, 0x2b, 0x58, 0x50, 0x88, 0xff, 0x20, 0x43, 0x90, | ||
| 2955 | 0x07, 0xad, 0x30, 0x4b, 0xd0, 0x06, 0x7b, 0x18, 0x68, 0xc1, 0x17, 0xd8, | ||
| 2956 | 0x81, 0x02, 0x60, 0xec, 0x61, 0xb0, 0x05, 0x70, 0x68, 0x07, 0x0a, 0x80, | ||
| 2957 | 0x31, 0xc8, 0x00, 0x85, 0x82, 0x2c, 0x8c, 0x18, 0x14, 0x47, 0x08, 0x82, | ||
| 2958 | 0x41, 0xc6, 0x0f, 0xc4, 0x2c, 0x03, 0x22, 0x05, 0x63, 0x08, 0x12, 0x39, | ||
| 2959 | 0x0c, 0x47, 0x04, 0xad, 0xa0, 0xf8, 0xc7, 0x2c, 0x83, 0x92, 0x04, 0x26, | ||
| 2960 | 0xb4, 0x82, 0xf8, 0xcf, 0x12, 0x2c, 0x36, 0xb4, 0x02, 0xf8, 0x8f, 0x18, | ||
| 2961 | 0x18, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x58, 0x22, 0x11, 0x58, 0xe0, 0x0a, | ||
| 2962 | 0xe2, 0x3f, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0x95, 0x44, | ||
| 2963 | 0xe0, 0x0a, 0xb3, 0x04, 0xcb, 0x40, 0x05, 0xa0, 0x24, 0x82, 0x32, 0xc7, | ||
| 2964 | 0xa0, 0x0a, 0x01, 0x3b, 0x8c, 0x21, 0x6c, 0xe1, 0x30, 0x1c, 0x11, 0xd8, | ||
| 2965 | 0x82, 0xe2, 0x1f, 0xb3, 0x0c, 0x0d, 0x13, 0x98, 0x60, 0x0b, 0xe2, 0x3f, | ||
| 2966 | 0x4b, 0xe0, 0xd8, 0x60, 0x0b, 0xe0, 0x3f, 0x62, 0x60, 0x1c, 0x21, 0x08, | ||
| 2967 | 0x16, 0xfe, 0x61, 0xad, 0x44, 0x60, 0xc1, 0x2d, 0x88, 0xff, 0x88, 0xc1, | ||
| 2968 | 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0xe5, 0x12, 0xc1, 0x2d, 0xcc, 0x12, | ||
| 2969 | 0x38, 0x03, 0x15, 0x80, 0xc2, 0x08, 0xcd, 0x1c, 0x43, 0x12, 0xa4, 0xc3, | ||
| 2970 | 0x18, 0x02, 0x19, 0xa4, 0xc3, 0x70, 0x44, 0xf0, 0x0b, 0x8a, 0x7f, 0xcc, | ||
| 2971 | 0x32, 0x40, 0x4f, 0x60, 0xc2, 0x2f, 0x88, 0xff, 0x2c, 0x41, 0x64, 0xc3, | ||
| 2972 | 0x2f, 0x80, 0xff, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0x45, | ||
| 2973 | 0x13, 0x81, 0x05, 0xe0, 0x20, 0xfe, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, | ||
| 2974 | 0xe1, 0x1f, 0xd4, 0x4d, 0x04, 0xe0, 0x30, 0x4b, 0x10, 0x0d, 0x54, 0x00, | ||
| 2975 | 0xca, 0x23, 0x40, 0x73, 0x0c, 0x49, 0x10, 0x0f, 0xb3, 0x04, 0xd2, 0x40, | ||
| 2976 | 0x45, 0x20, 0x44, 0x7a, 0x70, 0x0c, 0x32, 0x04, 0xbf, 0x20, 0x0f, 0x73, | ||
| 2977 | 0x0c, 0xbd, 0x00, 0x06, 0x21, 0x31, 0xc8, 0x10, 0xf8, 0xc2, 0x3c, 0xd8, | ||
| 2978 | 0x10, 0x88, 0xff, 0x20, 0x43, 0x00, 0x0e, 0xf4, 0x30, 0x4b, 0xd0, 0x06, | ||
| 2979 | 0xc3, 0x11, 0xb3, 0x60, 0x0e, 0x81, 0x7f, 0xcc, 0x32, 0x50, 0x60, 0x10, | ||
| 2980 | 0x0c, 0x32, 0xd0, 0x41, 0x39, 0xe0, 0xc3, 0x1e, 0x86, 0x7e, 0x38, 0x89, | ||
| 2981 | 0x9a, 0xa0, 0x00, 0x18, 0x7b, 0x18, 0xfe, 0x21, 0x25, 0x6c, 0x82, 0x02, | ||
| 2982 | 0x60, 0xcc, 0x31, 0x9c, 0x43, 0xb0, 0x12, 0x83, 0x0c, 0x01, 0x3a, 0xf4, | ||
| 2983 | 0x83, 0x05, 0x87, 0xf8, 0x0f, 0x32, 0x04, 0xea, 0xe0, 0x0f, 0x23, 0x06, | ||
| 2984 | 0xc5, 0x11, 0x82, 0x60, 0x90, 0xa1, 0xc5, 0x31, 0xcb, 0xf0, 0x55, 0xc1, | ||
| 2985 | 0x18, 0xc2, 0x00, 0x13, 0xc3, 0x11, 0xc1, 0x3f, 0x28, 0xfe, 0x31, 0xcb, | ||
| 2986 | 0x70, 0x59, 0x81, 0x09, 0xff, 0x20, 0xfe, 0xb3, 0x04, 0xd8, 0x88, 0x81, | ||
| 2987 | 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0xd5, 0x16, 0xc3, 0x88, 0xc1, 0x71, | ||
| 2988 | 0x84, 0x20, 0x58, 0xf8, 0x07, 0xf5, 0x16, 0x01, 0x48, 0x58, 0x00, 0x12, | ||
| 2989 | 0xe2, 0x6f, 0x01, 0x48, 0x80, 0xff, 0x2c, 0x01, 0x36, 0x50, 0x01, 0x28, | ||
| 2990 | 0x96, 0x70, 0xcd, 0x31, 0xc8, 0x43, 0x80, 0x13, 0x63, 0x08, 0x4c, 0x4b, | ||
| 2991 | 0x0c, 0x47, 0x04, 0x28, 0xa1, 0xf8, 0xc7, 0x2c, 0x83, 0x96, 0x05, 0x26, | ||
| 2992 | 0xa0, 0x84, 0xf8, 0xcf, 0x12, 0x6c, 0x23, 0x06, 0xc6, 0x11, 0x82, 0x60, | ||
| 2993 | 0xe1, 0x1f, 0x96, 0x5d, 0x0c, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, | ||
| 2994 | 0x1f, 0x14, 0x5e, 0x04, 0x29, 0x61, 0x41, 0x4a, 0x88, 0xbf, 0x05, 0x29, | ||
| 2995 | 0x01, 0xfe, 0xb3, 0x04, 0xdb, 0x40, 0x05, 0xa0, 0x64, 0x82, 0x36, 0xc7, | ||
| 2996 | 0x90, 0x04, 0x35, 0x31, 0x86, 0x50, 0xd5, 0xc4, 0x70, 0x44, 0x10, 0x13, | ||
| 2997 | 0x8a, 0x7f, 0xcc, 0x32, 0x74, 0x5c, 0x60, 0x42, 0x4c, 0x88, 0xff, 0x2c, | ||
| 2998 | 0x81, 0x37, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0xfd, 0xc5, | ||
| 2999 | 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0x85, 0x46, 0x20, | ||
| 3000 | 0x13, 0x16, 0xc8, 0x84, 0xf8, 0x5b, 0x20, 0x13, 0xe0, 0x3f, 0x4b, 0xe0, | ||
| 3001 | 0x0d, 0x54, 0x00, 0x0a, 0x27, 0x74, 0x73, 0x0c, 0x49, 0xd0, 0x13, 0x23, | ||
| 3002 | 0x06, 0xc8, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0xd2, 0x69, 0x04, 0x26, 0x41, | ||
| 3003 | 0x12, 0x83, 0x0c, 0x01, 0x4a, 0xf0, 0xc4, 0x2c, 0xc1, 0x37, 0x50, 0x11, | ||
| 3004 | 0xf8, 0x01, 0x25, 0x78, 0x83, 0x0c, 0x41, 0x4b, 0xf8, 0xc4, 0x2c, 0x41, | ||
| 3005 | 0x1b, 0xcc, 0x32, 0x84, 0x41, 0x1b, 0xf0, 0xc3, 0x20, 0x43, 0x2f, 0xb8, | ||
| 3006 | 0x44, 0x58, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x6c, 0xa8, | ||
| 3007 | 0x11, 0x88, 0xc4, 0x1c, 0xc3, 0x4a, 0x04, 0x71, 0x31, 0x62, 0x70, 0x1c, | ||
| 3008 | 0x21, 0x08, 0x16, 0xfe, 0xb1, 0xa9, 0xc6, 0x30, 0x12, 0x73, 0x0c, 0x42, | ||
| 3009 | 0x70, 0x16, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x1b, 0x6b, | ||
| 3010 | 0x14, 0x24, 0x31, 0xc7, 0x20, 0x04, 0x68, 0x31, 0xc8, 0x10, 0xc8, 0x84, | ||
| 3011 | 0x59, 0x0c, 0x32, 0x04, 0xe5, 0x60, 0x16, 0x7b, 0x18, 0xdc, 0x02, 0x2f, | ||
| 3012 | 0x4c, 0x83, 0x02, 0x60, 0xec, 0x61, 0x80, 0x0b, 0xbd, 0x38, 0x0d, 0x0a, | ||
| 3013 | 0x80, 0x31, 0xc7, 0x80, 0x13, 0x01, 0x5f, 0x0c, 0x32, 0x04, 0x39, 0xe1, | ||
| 3014 | 0x16, 0x16, 0x24, 0xe2, 0x3f, 0xc8, 0x10, 0xec, 0xc4, 0x5b, 0x8c, 0x18, | ||
| 3015 | 0x14, 0x47, 0x08, 0x82, 0x41, 0x96, 0x1b, 0xc7, 0x2c, 0x03, 0x1b, 0x88, | ||
| 3016 | 0x41, 0x30, 0x86, 0x30, 0x84, 0xc6, 0x70, 0x44, 0x00, 0x17, 0x8a, 0x7f, | ||
| 3017 | 0xcc, 0x32, 0x90, 0xc1, 0x18, 0x04, 0x26, 0xc0, 0x85, 0xf8, 0xcf, 0x12, | ||
| 3018 | 0x94, 0xc1, 0x88, 0x81, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x87, 0xe5, 0x1b, | ||
| 3019 | 0xc3, 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x05, 0x1e, 0x41, | ||
| 3020 | 0x5c, 0x58, 0x10, 0x17, 0xe2, 0x6f, 0x41, 0x5c, 0x80, 0xff, 0x2c, 0x41, | ||
| 3021 | 0x19, 0x0c, 0x54, 0x00, 0xca, 0x18, 0x08, 0x64, 0x30, 0xc7, 0x30, 0x16, | ||
| 3022 | 0x41, 0x6a, 0x8c, 0x21, 0x30, 0x7e, 0x31, 0x1c, 0x11, 0xe4, 0x85, 0xe2, | ||
| 3023 | 0x1f, 0xb3, 0x0c, 0x67, 0x60, 0x06, 0x81, 0x09, 0x79, 0x21, 0xfe, 0xb3, | ||
| 3024 | 0x04, 0x68, 0x30, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0x9d, | ||
| 3025 | 0xc7, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xa5, 0x47, | ||
| 3026 | 0xa0, 0x17, 0x16, 0xe8, 0x85, 0xf8, 0x5b, 0xa0, 0x17, 0xe0, 0x3f, 0x4b, | ||
| 3027 | 0x80, 0x06, 0x03, 0x15, 0x80, 0x62, 0x06, 0xc2, 0x19, 0xcc, 0x31, 0x24, | ||
| 3028 | 0x81, 0x69, 0x8c, 0x21, 0x54, 0xa6, 0x31, 0x1c, 0x11, 0x88, 0x86, 0xe2, | ||
| 3029 | 0x1f, 0xb3, 0x0c, 0x6a, 0x90, 0x06, 0x81, 0x09, 0xa2, 0x21, 0xfe, 0xb3, | ||
| 3030 | 0x04, 0x6b, 0x30, 0x62, 0x60, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x61, 0xc1, | ||
| 3031 | 0xc7, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xc9, 0x47, | ||
| 3032 | 0x30, 0x1a, 0x16, 0x8c, 0x86, 0xf8, 0x5b, 0x30, 0x1a, 0xe0, 0x3f, 0x4b, | ||
| 3033 | 0xb0, 0x06, 0x03, 0x15, 0x80, 0x92, 0x06, 0x82, 0x1a, 0xcc, 0x31, 0x24, | ||
| 3034 | 0x81, 0x6b, 0x8c, 0x18, 0x20, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x48, 0xf8, | ||
| 3035 | 0x11, 0xdc, 0x45, 0x5d, 0x0c, 0x32, 0x04, 0x79, 0xd1, 0x1a, 0xb3, 0x04, | ||
| 3036 | 0x6c, 0x30, 0x50, 0x11, 0xf8, 0x41, 0x18, 0x08, 0x6b, 0x30, 0xc8, 0x10, | ||
| 3037 | 0xf8, 0xc5, 0x6b, 0xcc, 0x12, 0xb4, 0xc1, 0x40, 0x4b, 0xc0, 0x23, 0x06, | ||
| 3038 | 0x8f, 0x48, 0x3c, 0xf2, 0xc9, 0x02, 0x1b, 0xf0, 0x08, 0x18, 0x0c, 0xb4, | ||
| 3039 | 0x04, 0x28, 0x62, 0xe8, 0x85, 0x64, 0x0e, 0x1f, 0xc1, 0x06, 0xfc, 0x02, | ||
| 3040 | 0x06, 0x83, 0x0c, 0x81, 0x10, 0x1b, 0x19, 0x04, 0xc4, 0x00, 0x00, 0x00, | ||
| 3041 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x78, 0x87, 0x2d, 0x83, | ||
| 3042 | 0x11, 0xc0, 0xc3, 0x96, 0x21, 0x0b, 0xe2, 0x61, 0xcb, 0xe0, 0x05, 0xf2, | ||
| 3043 | 0xb0, 0x65, 0x00, 0x83, 0x60, 0x1e, 0xb6, 0x0c, 0x69, 0x10, 0xb8, 0xc3, | ||
| 3044 | 0x96, 0xc1, 0x0d, 0x02, 0x7a, 0xd8, 0x32, 0xd4, 0x41, 0x50, 0x0f, 0x5b, | ||
| 3045 | 0x86, 0x3b, 0x08, 0xe8, 0x61, 0xcb, 0xb0, 0x0e, 0x41, 0x3d, 0x6c, 0x19, | ||
| 3046 | 0xda, 0x21, 0xa0, 0x87, 0x2d, 0x43, 0x5a, 0x04, 0xf5, 0xb0, 0x65, 0x58, | ||
| 3047 | 0x8b, 0x80, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, | ||
| 3048 | 0x00, 0x73, 0x00, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c, 0x10, 0x00, 0x00, | ||
| 3049 | 0x00, 0x25, 0x00, 0x00, 0x00, 0x54, 0xce, 0x00, 0xd0, 0x5a, 0x02, 0x45, | ||
| 3050 | 0x40, 0xef, 0x58, 0x03, 0x10, 0x08, 0x23, 0x00, 0x34, 0xcf, 0x41, 0x40, | ||
| 3051 | 0x4e, 0xc3, 0x06, 0x04, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x18, | ||
| 3052 | 0x01, 0x08, 0x82, 0x20, 0x08, 0x06, 0x23, 0x00, 0x14, 0xcc, 0x00, 0xcc, | ||
| 3053 | 0x00, 0x50, 0x31, 0x03, 0x30, 0xd6, 0xc0, 0xb2, 0x67, 0x28, 0x7f, 0xa8, | ||
| 3054 | 0x5f, 0xc6, 0xea, 0x97, 0x9f, 0xba, 0x38, 0x7b, 0x63, 0x0d, 0x7a, 0x0d, | ||
| 3055 | 0xee, 0xb8, 0xa7, 0xe2, 0xb9, 0x6d, 0x7f, 0x6f, 0x9f, 0xd2, 0xa3, 0x37, | ||
| 3056 | 0xd6, 0xb0, 0xce, 0x31, 0x8b, 0x7a, 0x69, 0x08, 0xa3, 0xbb, 0x77, 0xb7, | ||
| 3057 | 0xb1, 0x6a, 0x7f, 0x63, 0x0d, 0x62, 0x2e, 0xa6, 0xfd, 0x07, 0x96, 0x3c, | ||
| 3058 | 0x1b, 0xff, 0xc2, 0x98, 0xae, 0x6a, 0xee, 0x0b, 0x63, 0x0d, 0xff, 0x4c, | ||
| 3059 | 0xfa, 0xbf, 0x2f, 0xd0, 0x35, 0x28, 0xe6, 0x5f, 0x0b, 0xc7, 0x31, 0xe8, | ||
| 3060 | 0x0b, 0x63, 0x0d, 0x73, 0xdf, 0xa6, 0xa9, 0x2f, 0xb4, 0x6e, 0xc8, 0xf3, | ||
| 3061 | 0xbe, 0xc0, 0xe7, 0xac, 0x8f, 0x7f, 0x00, 0x00, 0x00, 0x83, 0x0c, 0xd7, | ||
| 3062 | 0xd1, 0x0c, 0x47, 0x58, 0x4d, 0xe0, 0x1f, 0xb3, 0x0c, 0x81, 0x10, 0xcc, | ||
| 3063 | 0x31, 0x24, 0x96, 0x18, 0x0c, 0x32, 0x04, 0x4a, 0x64, 0xc1, 0x26, 0xfe, | ||
| 3064 | 0x83, 0x0c, 0x01, 0x23, 0xcd, 0x12, 0x24, 0xc3, 0x11, 0x5b, 0x14, 0xf8, | ||
| 3065 | 0xc7, 0x2c, 0xc3, 0x90, 0x04, 0xc3, 0x11, 0x9d, 0x14, 0xf8, 0xc7, 0x2c, | ||
| 3066 | 0x03, 0x51, 0x04, 0x23, 0x06, 0xc7, 0x11, 0x82, 0x60, 0xe1, 0x1f, 0x1b, | ||
| 3067 | 0x28, 0x7c, 0xce, 0x1c, 0x43, 0x14, 0xa4, 0xc1, 0x88, 0xc1, 0x71, 0x84, | ||
| 3068 | 0x20, 0x58, 0xf8, 0xc7, 0x26, 0x0a, 0x61, 0xf0, 0xcc, 0x31, 0x08, 0x01, | ||
| 3069 | 0x37, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0xb1, 0x91, 0xc2, 0x18, | ||
| 3070 | 0x40, 0x73, 0x0c, 0x42, 0xd0, 0xcd, 0x12, 0x14, 0x03, 0x15, 0x81, 0x40, | ||
| 3071 | 0x70, 0xc3, 0x18, 0x42, 0xf0, 0x06, 0x63, 0x08, 0x42, 0x18, 0x8c, 0x21, | ||
| 3072 | 0x0c, 0x61, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, 0xfe, 0x41, 0xa1, | ||
| 3073 | 0x82, 0x10, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, 0x7f, 0x50, 0xa9, | ||
| 3074 | 0x40, 0x04, 0xc3, 0x11, 0x81, 0x27, 0xf8, 0xc7, 0x2c, 0x83, 0x71, 0x04, | ||
| 3075 | 0x83, 0x0c, 0x87, 0x47, 0x06, 0x36, 0xa8, 0x81, 0xf8, 0x5b, 0x30, 0x06, | ||
| 3076 | 0xe0, 0x6f, 0xc5, 0x1a, 0x88, 0xbf, 0x05, 0x65, 0x00, 0xfe, 0x36, 0x04, | ||
| 3077 | 0xe4, 0x3f, 0xc7, 0x20, 0x06, 0xc1, 0x1e, 0x0c, 0x32, 0x04, 0x63, 0xa0, | ||
| 3078 | 0x06, 0x16, 0x20, 0xe2, 0x3f, 0xc8, 0x10, 0x94, 0xc1, 0x1a, 0xcc, 0x12, | ||
| 3079 | 0x1c, 0x03, 0x15, 0x81, 0x60, 0x88, 0x41, 0x31, 0xcb, 0x80, 0x24, 0xd9, | ||
| 3080 | 0x20, 0x43, 0x90, 0x06, 0x6f, 0x30, 0x62, 0x70, 0x1c, 0x21, 0x08, 0x16, | ||
| 3081 | 0xfe, 0xb1, 0xe5, 0x42, 0x40, 0x06, 0x73, 0x0c, 0x6a, 0x10, 0x88, 0xc2, | ||
| 3082 | 0x88, 0xc1, 0x71, 0x84, 0x20, 0x58, 0xf8, 0xc7, 0xb6, 0x0b, 0x43, 0x19, | ||
| 3083 | 0xcc, 0x31, 0x08, 0x41, 0x1d, 0x8c, 0x18, 0x1c, 0x47, 0x08, 0x82, 0x85, | ||
| 3084 | 0x7f, 0x6c, 0xbd, 0x50, 0x98, 0xc1, 0x1c, 0x83, 0x10, 0xd8, 0xc1, 0x2c, | ||
| 3085 | 0x41, 0x32, 0x50, 0x12, 0x90, 0x42, 0xe0, 0x0a, 0x82, 0x80, 0x40, 0xc7, | ||
| 3086 | 0x20, 0x43, 0x10, 0x07, 0x77, 0x90, 0x01, 0x00, 0x00, 0x71, 0x20, 0x00, | ||
| 3087 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xd2, | ||
| 3088 | 0x09, 0x18, 0xd0, 0xba, 0x80, 0x07, 0xed, 0x0e, 0x00, 0x00, 0x00, 0x00, | ||
| 3089 | 0x00, 0x65, 0x0c, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, | ||
| 3090 | 0x30, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, | ||
| 3091 | 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
| 3092 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, | ||
| 3093 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3094 | 0x00, 0x27, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3095 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3096 | 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3097 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3098 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3099 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x24, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3100 | 0x00, 0x38, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, | ||
| 3101 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x49, 0x00, 0x00, | ||
| 3102 | 0x00, 0x14, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, | ||
| 3103 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x5d, 0x00, 0x00, | ||
| 3104 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 3105 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x6d, 0x00, 0x00, | ||
| 3106 | 0x00, 0x11, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3107 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x7e, 0x00, 0x00, | ||
| 3108 | 0x00, 0x16, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, | ||
| 3109 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x94, 0x00, 0x00, | ||
| 3110 | 0x00, 0x0d, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, | ||
| 3111 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xa1, 0x00, 0x00, | ||
| 3112 | 0x00, 0x19, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, | ||
| 3113 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0xba, 0x00, 0x00, | ||
| 3114 | 0x00, 0x11, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, | ||
| 3115 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xcb, 0x00, 0x00, | ||
| 3116 | 0x00, 0x12, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, | ||
| 3117 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xdd, 0x00, 0x00, | ||
| 3118 | 0x00, 0x13, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 3119 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xf0, 0x00, 0x00, | ||
| 3120 | 0x00, 0x13, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, | ||
| 3121 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x03, 0x01, 0x00, | ||
| 3122 | 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, | ||
| 3123 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 3124 | 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x12, 0x03, 0x94, | ||
| 3125 | 0xa7, 0x02, 0x00, 0x00, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x4e, 0x56, 0x31, | ||
| 3126 | 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x5a, | ||
| 3127 | 0x31, 0x34, 0x47, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, | ||
| 3128 | 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x76, 0x34, 0x5f, 0x66, 0x52, 0x55, 0x31, | ||
| 3129 | 0x31, 0x4d, 0x54, 0x4c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, | ||
| 3130 | 0x4b, 0x31, 0x35, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, | ||
| 3131 | 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 3132 | 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x2e, 0x76, 0x33, 0x66, | ||
| 3133 | 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, | ||
| 3134 | 0x6f, 0x77, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, | ||
| 3135 | 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, 0x66, 0x33, 0x32, 0x61, | ||
| 3136 | 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x2e, 0x75, | ||
| 3137 | 0x2e, 0x69, 0x31, 0x2e, 0x66, 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, | ||
| 3138 | 0x2e, 0x64, 0x6f, 0x74, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x5f, 0x5a, | ||
| 3139 | 0x31, 0x32, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x6e, 0x65, 0x6d, | ||
| 3140 | 0x61, 0x70, 0x44, 0x76, 0x33, 0x5f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61, | ||
| 3141 | 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, | ||
| 3142 | 0x2e, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, | ||
| 3143 | 0x5f, 0x70, 0x6f, 0x77, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, | ||
| 3144 | 0x72, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x61, 0x62, 0x73, 0x2e, | ||
| 3145 | 0x76, 0x33, 0x66, 0x33, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x66, 0x61, 0x73, | ||
| 3146 | 0x74, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x33, 0x66, 0x33, 0x32, | ||
| 3147 | 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, | ||
| 3148 | 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x32, 0x64, 0x2e, 0x76, 0x34, | ||
| 3149 | 0x66, 0x33, 0x32, 0x33, 0x32, 0x30, 0x32, 0x33, 0x2e, 0x34, 0x30, 0x34, | ||
| 3150 | 0x61, 0x69, 0x72, 0x36, 0x34, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2d, | ||
| 3151 | 0x74, 0x76, 0x6f, 0x73, 0x31, 0x33, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x73, | ||
| 3152 | 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, | ||
| 3153 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||
| 3154 | }; | ||
| 3155 | const unsigned int sdl_metallib_len = 37821; | ||
diff --git a/SDL-3.2.8/src/render/metal/build-metal-shaders.sh b/SDL-3.2.8/src/render/metal/build-metal-shaders.sh new file mode 100755 index 0000000..e00235c --- /dev/null +++ b/SDL-3.2.8/src/render/metal/build-metal-shaders.sh | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | |||
| 3 | set -x | ||
| 4 | set -e | ||
| 5 | cd `dirname "$0"` | ||
| 6 | |||
| 7 | generate_shaders() | ||
| 8 | { | ||
| 9 | fileplatform=$1 | ||
| 10 | compileplatform=$2 | ||
| 11 | sdkplatform=$3 | ||
| 12 | minversion=$4 | ||
| 13 | xcrun -sdk $sdkplatform metal -c -std=$compileplatform-metal1.1 -m$sdkplatform-version-min=$minversion -Wall -O3 -o ./sdl.air ./SDL_shaders_metal.metal || exit $? | ||
| 14 | xcrun -sdk $sdkplatform metal-ar rc sdl.metalar sdl.air || exit $? | ||
| 15 | xcrun -sdk $sdkplatform metallib -o sdl.metallib sdl.metalar || exit $? | ||
| 16 | xxd -i sdl.metallib | perl -w -p -e 's/\Aunsigned /const unsigned /;' >./SDL_shaders_metal_$fileplatform.h | ||
| 17 | rm -f sdl.air sdl.metalar sdl.metallib | ||
| 18 | } | ||
| 19 | |||
| 20 | generate_shaders macos macos macosx 10.11 | ||
| 21 | generate_shaders ios ios iphoneos 8.0 | ||
| 22 | generate_shaders iphonesimulator ios iphonesimulator 8.0 | ||
| 23 | generate_shaders tvos ios appletvos 9.0 | ||
| 24 | generate_shaders tvsimulator ios appletvsimulator 9.0 | ||
diff --git a/SDL-3.2.8/src/render/opengl/SDL_glfuncs.h b/SDL-3.2.8/src/render/opengl/SDL_glfuncs.h new file mode 100644 index 0000000..7e9f265 --- /dev/null +++ b/SDL-3.2.8/src/render/opengl/SDL_glfuncs.h | |||
| @@ -0,0 +1,476 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | /* list of OpenGL functions sorted alphabetically | ||
| 23 | If you need to use a GL function from the SDL video subsystem, | ||
| 24 | change its entry from SDL_PROC_UNUSED to SDL_PROC and rebuild. | ||
| 25 | */ | ||
| 26 | #define SDL_PROC_UNUSED(ret, func, params) | ||
| 27 | |||
| 28 | SDL_PROC_UNUSED(void, glAccum, (GLenum, GLfloat)) | ||
| 29 | SDL_PROC_UNUSED(void, glAlphaFunc, (GLenum, GLclampf)) | ||
| 30 | SDL_PROC_UNUSED(GLboolean, glAreTexturesResident, | ||
| 31 | (GLsizei, const GLuint *, GLboolean *)) | ||
| 32 | SDL_PROC_UNUSED(void, glArrayElement, (GLint)) | ||
| 33 | SDL_PROC(void, glBegin, (GLenum)) | ||
| 34 | SDL_PROC(void, glBindTexture, (GLenum, GLuint)) | ||
| 35 | SDL_PROC_UNUSED(void, glBitmap, | ||
| 36 | (GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, | ||
| 37 | const GLubyte *)) | ||
| 38 | SDL_PROC(void, glBlendEquation, (GLenum)) | ||
| 39 | SDL_PROC_UNUSED(void, glBlendFunc, (GLenum, GLenum)) | ||
| 40 | SDL_PROC(void, glBlendFuncSeparate, (GLenum, GLenum, GLenum, GLenum)) | ||
| 41 | SDL_PROC_UNUSED(void, glCallList, (GLuint)) | ||
| 42 | SDL_PROC_UNUSED(void, glCallLists, (GLsizei, GLenum, const GLvoid *)) | ||
| 43 | SDL_PROC(void, glClear, (GLbitfield)) | ||
| 44 | SDL_PROC_UNUSED(void, glClearAccum, (GLfloat, GLfloat, GLfloat, GLfloat)) | ||
| 45 | SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf)) | ||
| 46 | SDL_PROC_UNUSED(void, glClearDepth, (GLclampd)) | ||
| 47 | SDL_PROC_UNUSED(void, glClearIndex, (GLfloat)) | ||
| 48 | SDL_PROC_UNUSED(void, glClearStencil, (GLint)) | ||
| 49 | SDL_PROC_UNUSED(void, glClipPlane, (GLenum, const GLdouble *)) | ||
| 50 | SDL_PROC_UNUSED(void, glColor3b, (GLbyte, GLbyte, GLbyte)) | ||
| 51 | SDL_PROC_UNUSED(void, glColor3bv, (const GLbyte *)) | ||
| 52 | SDL_PROC_UNUSED(void, glColor3d, (GLdouble, GLdouble, GLdouble)) | ||
| 53 | SDL_PROC_UNUSED(void, glColor3dv, (const GLdouble *)) | ||
| 54 | SDL_PROC_UNUSED(void, glColor3f, (GLfloat, GLfloat, GLfloat)) | ||
| 55 | SDL_PROC(void, glColor3fv, (const GLfloat *)) | ||
| 56 | SDL_PROC_UNUSED(void, glColor3i, (GLint, GLint, GLint)) | ||
| 57 | SDL_PROC_UNUSED(void, glColor3iv, (const GLint *)) | ||
| 58 | SDL_PROC_UNUSED(void, glColor3s, (GLshort, GLshort, GLshort)) | ||
| 59 | SDL_PROC_UNUSED(void, glColor3sv, (const GLshort *)) | ||
| 60 | SDL_PROC_UNUSED(void, glColor3ub, (GLubyte, GLubyte, GLubyte)) | ||
| 61 | SDL_PROC_UNUSED(void, glColor3ubv, (const GLubyte *)) | ||
| 62 | SDL_PROC_UNUSED(void, glColor3ui, (GLuint, GLuint, GLuint)) | ||
| 63 | SDL_PROC_UNUSED(void, glColor3uiv, (const GLuint *)) | ||
| 64 | SDL_PROC_UNUSED(void, glColor3us, (GLushort, GLushort, GLushort)) | ||
| 65 | SDL_PROC_UNUSED(void, glColor3usv, (const GLushort *)) | ||
| 66 | SDL_PROC_UNUSED(void, glColor4b, (GLbyte, GLbyte, GLbyte, GLbyte)) | ||
| 67 | SDL_PROC_UNUSED(void, glColor4bv, (const GLbyte *)) | ||
| 68 | SDL_PROC_UNUSED(void, glColor4d, (GLdouble, GLdouble, GLdouble, GLdouble)) | ||
| 69 | SDL_PROC_UNUSED(void, glColor4dv, (const GLdouble *)) | ||
| 70 | SDL_PROC(void, glColor4f, (GLfloat, GLfloat, GLfloat, GLfloat)) | ||
| 71 | SDL_PROC_UNUSED(void, glColor4fv, (const GLfloat *)) | ||
| 72 | SDL_PROC_UNUSED(void, glColor4i, (GLint, GLint, GLint, GLint)) | ||
| 73 | SDL_PROC_UNUSED(void, glColor4iv, (const GLint *)) | ||
| 74 | SDL_PROC_UNUSED(void, glColor4s, (GLshort, GLshort, GLshort, GLshort)) | ||
| 75 | SDL_PROC_UNUSED(void, glColor4sv, (const GLshort *)) | ||
| 76 | SDL_PROC(void, glColor4ub, | ||
| 77 | (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)) | ||
| 78 | SDL_PROC_UNUSED(void, glColor4ubv, (const GLubyte *v)) | ||
| 79 | SDL_PROC_UNUSED(void, glColor4ui, | ||
| 80 | (GLuint red, GLuint green, GLuint blue, GLuint alpha)) | ||
| 81 | SDL_PROC_UNUSED(void, glColor4uiv, (const GLuint *v)) | ||
| 82 | SDL_PROC_UNUSED(void, glColor4us, | ||
| 83 | (GLushort red, GLushort green, GLushort blue, GLushort alpha)) | ||
| 84 | SDL_PROC_UNUSED(void, glColor4usv, (const GLushort *v)) | ||
| 85 | SDL_PROC_UNUSED(void, glColorMask, | ||
| 86 | (GLboolean red, GLboolean green, GLboolean blue, | ||
| 87 | GLboolean alpha)) | ||
| 88 | SDL_PROC_UNUSED(void, glColorMaterial, (GLenum face, GLenum mode)) | ||
| 89 | SDL_PROC(void, glColorPointer, | ||
| 90 | (GLint size, GLenum type, GLsizei stride, | ||
| 91 | const GLvoid *pointer)) | ||
| 92 | SDL_PROC_UNUSED(void, glCopyPixels, | ||
| 93 | (GLint x, GLint y, GLsizei width, GLsizei height, | ||
| 94 | GLenum type)) | ||
| 95 | SDL_PROC_UNUSED(void, glCopyTexImage1D, | ||
| 96 | (GLenum target, GLint level, GLenum internalFormat, GLint x, | ||
| 97 | GLint y, GLsizei width, GLint border)) | ||
| 98 | SDL_PROC_UNUSED(void, glCopyTexImage2D, | ||
| 99 | (GLenum target, GLint level, GLenum internalFormat, GLint x, | ||
| 100 | GLint y, GLsizei width, GLsizei height, GLint border)) | ||
| 101 | SDL_PROC_UNUSED(void, glCopyTexSubImage1D, | ||
| 102 | (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, | ||
| 103 | GLsizei width)) | ||
| 104 | SDL_PROC_UNUSED(void, glCopyTexSubImage2D, | ||
| 105 | (GLenum target, GLint level, GLint xoffset, GLint yoffset, | ||
| 106 | GLint x, GLint y, GLsizei width, GLsizei height)) | ||
| 107 | SDL_PROC_UNUSED(void, glCullFace, (GLenum mode)) | ||
| 108 | SDL_PROC_UNUSED(void, glDeleteLists, (GLuint list, GLsizei range)) | ||
| 109 | SDL_PROC(void, glDeleteTextures, (GLsizei n, const GLuint *textures)) | ||
| 110 | SDL_PROC(void, glDepthFunc, (GLenum func)) | ||
| 111 | SDL_PROC_UNUSED(void, glDepthMask, (GLboolean flag)) | ||
| 112 | SDL_PROC_UNUSED(void, glDepthRange, (GLclampd zNear, GLclampd zFar)) | ||
| 113 | SDL_PROC(void, glDisable, (GLenum cap)) | ||
| 114 | SDL_PROC(void, glDisableClientState, (GLenum array)) | ||
| 115 | SDL_PROC(void, glDrawArrays, (GLenum mode, GLint first, GLsizei count)) | ||
| 116 | SDL_PROC_UNUSED(void, glDrawBuffer, (GLenum mode)) | ||
| 117 | SDL_PROC_UNUSED(void, glDrawElements, | ||
| 118 | (GLenum mode, GLsizei count, GLenum type, | ||
| 119 | const GLvoid *indices)) | ||
| 120 | SDL_PROC(void, glDrawPixels, | ||
| 121 | (GLsizei width, GLsizei height, GLenum format, GLenum type, | ||
| 122 | const GLvoid *pixels)) | ||
| 123 | SDL_PROC_UNUSED(void, glEdgeFlag, (GLboolean flag)) | ||
| 124 | SDL_PROC_UNUSED(void, glEdgeFlagPointer, | ||
| 125 | (GLsizei stride, const GLvoid *pointer)) | ||
| 126 | SDL_PROC_UNUSED(void, glEdgeFlagv, (const GLboolean *flag)) | ||
| 127 | SDL_PROC(void, glEnable, (GLenum cap)) | ||
| 128 | SDL_PROC(void, glEnableClientState, (GLenum array)) | ||
| 129 | SDL_PROC(void, glEnd, (void)) | ||
| 130 | SDL_PROC_UNUSED(void, glEndList, (void)) | ||
| 131 | SDL_PROC_UNUSED(void, glEvalCoord1d, (GLdouble u)) | ||
| 132 | SDL_PROC_UNUSED(void, glEvalCoord1dv, (const GLdouble *u)) | ||
| 133 | SDL_PROC_UNUSED(void, glEvalCoord1f, (GLfloat u)) | ||
| 134 | SDL_PROC_UNUSED(void, glEvalCoord1fv, (const GLfloat *u)) | ||
| 135 | SDL_PROC_UNUSED(void, glEvalCoord2d, (GLdouble u, GLdouble v)) | ||
| 136 | SDL_PROC_UNUSED(void, glEvalCoord2dv, (const GLdouble *u)) | ||
| 137 | SDL_PROC_UNUSED(void, glEvalCoord2f, (GLfloat u, GLfloat v)) | ||
| 138 | SDL_PROC_UNUSED(void, glEvalCoord2fv, (const GLfloat *u)) | ||
| 139 | SDL_PROC_UNUSED(void, glEvalMesh1, (GLenum mode, GLint i1, GLint i2)) | ||
| 140 | SDL_PROC_UNUSED(void, glEvalMesh2, | ||
| 141 | (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)) | ||
| 142 | SDL_PROC_UNUSED(void, glEvalPoint1, (GLint i)) | ||
| 143 | SDL_PROC_UNUSED(void, glEvalPoint2, (GLint i, GLint j)) | ||
| 144 | SDL_PROC_UNUSED(void, glFeedbackBuffer, | ||
| 145 | (GLsizei size, GLenum type, GLfloat *buffer)) | ||
| 146 | SDL_PROC_UNUSED(void, glFinish, (void)) | ||
| 147 | SDL_PROC_UNUSED(void, glFlush, (void)) | ||
| 148 | SDL_PROC_UNUSED(void, glFogf, (GLenum pname, GLfloat param)) | ||
| 149 | SDL_PROC_UNUSED(void, glFogfv, (GLenum pname, const GLfloat *params)) | ||
| 150 | SDL_PROC_UNUSED(void, glFogi, (GLenum pname, GLint param)) | ||
| 151 | SDL_PROC_UNUSED(void, glFogiv, (GLenum pname, const GLint *params)) | ||
| 152 | SDL_PROC_UNUSED(void, glFrontFace, (GLenum mode)) | ||
| 153 | SDL_PROC_UNUSED(void, glFrustum, | ||
| 154 | (GLdouble left, GLdouble right, GLdouble bottom, | ||
| 155 | GLdouble top, GLdouble zNear, GLdouble zFar)) | ||
| 156 | SDL_PROC_UNUSED(GLuint, glGenLists, (GLsizei range)) | ||
| 157 | SDL_PROC(void, glGenTextures, (GLsizei n, GLuint *textures)) | ||
| 158 | SDL_PROC_UNUSED(void, glGetBooleanv, (GLenum pname, GLboolean *params)) | ||
| 159 | SDL_PROC_UNUSED(void, glGetClipPlane, (GLenum plane, GLdouble *equation)) | ||
| 160 | SDL_PROC_UNUSED(void, glGetDoublev, (GLenum pname, GLdouble *params)) | ||
| 161 | SDL_PROC(GLenum, glGetError, (void)) | ||
| 162 | SDL_PROC(void, glGetFloatv, (GLenum pname, GLfloat *params)) | ||
| 163 | SDL_PROC(void, glGetIntegerv, (GLenum pname, GLint *params)) | ||
| 164 | SDL_PROC_UNUSED(void, glGetLightfv, | ||
| 165 | (GLenum light, GLenum pname, GLfloat *params)) | ||
| 166 | SDL_PROC_UNUSED(void, glGetLightiv, | ||
| 167 | (GLenum light, GLenum pname, GLint *params)) | ||
| 168 | SDL_PROC_UNUSED(void, glGetMapdv, (GLenum target, GLenum query, GLdouble *v)) | ||
| 169 | SDL_PROC_UNUSED(void, glGetMapfv, (GLenum target, GLenum query, GLfloat *v)) | ||
| 170 | SDL_PROC_UNUSED(void, glGetMapiv, (GLenum target, GLenum query, GLint *v)) | ||
| 171 | SDL_PROC_UNUSED(void, glGetMaterialfv, | ||
| 172 | (GLenum face, GLenum pname, GLfloat *params)) | ||
| 173 | SDL_PROC_UNUSED(void, glGetMaterialiv, | ||
| 174 | (GLenum face, GLenum pname, GLint *params)) | ||
| 175 | SDL_PROC_UNUSED(void, glGetPixelMapfv, (GLenum map, GLfloat *values)) | ||
| 176 | SDL_PROC_UNUSED(void, glGetPixelMapuiv, (GLenum map, GLuint *values)) | ||
| 177 | SDL_PROC_UNUSED(void, glGetPixelMapusv, (GLenum map, GLushort *values)) | ||
| 178 | SDL_PROC(void, glGetPointerv, (GLenum pname, GLvoid **params)) | ||
| 179 | SDL_PROC_UNUSED(void, glGetPolygonStipple, (GLubyte * mask)) | ||
| 180 | SDL_PROC(const GLubyte *, glGetString, (GLenum name)) | ||
| 181 | SDL_PROC_UNUSED(void, glGetTexEnvfv, | ||
| 182 | (GLenum target, GLenum pname, GLfloat *params)) | ||
| 183 | SDL_PROC_UNUSED(void, glGetTexEnviv, | ||
| 184 | (GLenum target, GLenum pname, GLint *params)) | ||
| 185 | SDL_PROC_UNUSED(void, glGetTexGendv, | ||
| 186 | (GLenum coord, GLenum pname, GLdouble *params)) | ||
| 187 | SDL_PROC_UNUSED(void, glGetTexGenfv, | ||
| 188 | (GLenum coord, GLenum pname, GLfloat *params)) | ||
| 189 | SDL_PROC_UNUSED(void, glGetTexGeniv, | ||
| 190 | (GLenum coord, GLenum pname, GLint *params)) | ||
| 191 | SDL_PROC_UNUSED(void, glGetTexImage, | ||
| 192 | (GLenum target, GLint level, GLenum format, GLenum type, | ||
| 193 | GLvoid *pixels)) | ||
| 194 | SDL_PROC_UNUSED(void, glGetTexLevelParameterfv, | ||
| 195 | (GLenum target, GLint level, GLenum pname, GLfloat *params)) | ||
| 196 | SDL_PROC_UNUSED(void, glGetTexLevelParameteriv, | ||
| 197 | (GLenum target, GLint level, GLenum pname, GLint *params)) | ||
| 198 | SDL_PROC_UNUSED(void, glGetTexParameterfv, | ||
| 199 | (GLenum target, GLenum pname, GLfloat *params)) | ||
| 200 | SDL_PROC_UNUSED(void, glGetTexParameteriv, | ||
| 201 | (GLenum target, GLenum pname, GLint *params)) | ||
| 202 | SDL_PROC_UNUSED(void, glHint, (GLenum target, GLenum mode)) | ||
| 203 | SDL_PROC_UNUSED(void, glIndexMask, (GLuint mask)) | ||
| 204 | SDL_PROC_UNUSED(void, glIndexPointer, | ||
| 205 | (GLenum type, GLsizei stride, const GLvoid *pointer)) | ||
| 206 | SDL_PROC_UNUSED(void, glIndexd, (GLdouble c)) | ||
| 207 | SDL_PROC_UNUSED(void, glIndexdv, (const GLdouble *c)) | ||
| 208 | SDL_PROC_UNUSED(void, glIndexf, (GLfloat c)) | ||
| 209 | SDL_PROC_UNUSED(void, glIndexfv, (const GLfloat *c)) | ||
| 210 | SDL_PROC_UNUSED(void, glIndexi, (GLint c)) | ||
| 211 | SDL_PROC_UNUSED(void, glIndexiv, (const GLint *c)) | ||
| 212 | SDL_PROC_UNUSED(void, glIndexs, (GLshort c)) | ||
| 213 | SDL_PROC_UNUSED(void, glIndexsv, (const GLshort *c)) | ||
| 214 | SDL_PROC_UNUSED(void, glIndexub, (GLubyte c)) | ||
| 215 | SDL_PROC_UNUSED(void, glIndexubv, (const GLubyte *c)) | ||
| 216 | SDL_PROC_UNUSED(void, glInitNames, (void)) | ||
| 217 | SDL_PROC_UNUSED(void, glInterleavedArrays, | ||
| 218 | (GLenum format, GLsizei stride, const GLvoid *pointer)) | ||
| 219 | SDL_PROC_UNUSED(GLboolean, glIsEnabled, (GLenum cap)) | ||
| 220 | SDL_PROC_UNUSED(GLboolean, glIsList, (GLuint list)) | ||
| 221 | SDL_PROC_UNUSED(GLboolean, glIsTexture, (GLuint texture)) | ||
| 222 | SDL_PROC_UNUSED(void, glLightModelf, (GLenum pname, GLfloat param)) | ||
| 223 | SDL_PROC_UNUSED(void, glLightModelfv, (GLenum pname, const GLfloat *params)) | ||
| 224 | SDL_PROC_UNUSED(void, glLightModeli, (GLenum pname, GLint param)) | ||
| 225 | SDL_PROC_UNUSED(void, glLightModeliv, (GLenum pname, const GLint *params)) | ||
| 226 | SDL_PROC_UNUSED(void, glLightf, (GLenum light, GLenum pname, GLfloat param)) | ||
| 227 | SDL_PROC_UNUSED(void, glLightfv, | ||
| 228 | (GLenum light, GLenum pname, const GLfloat *params)) | ||
| 229 | SDL_PROC_UNUSED(void, glLighti, (GLenum light, GLenum pname, GLint param)) | ||
| 230 | SDL_PROC_UNUSED(void, glLightiv, | ||
| 231 | (GLenum light, GLenum pname, const GLint *params)) | ||
| 232 | SDL_PROC_UNUSED(void, glLineStipple, (GLint factor, GLushort pattern)) | ||
| 233 | SDL_PROC(void, glLineWidth, (GLfloat width)) | ||
| 234 | SDL_PROC_UNUSED(void, glListBase, (GLuint base)) | ||
| 235 | SDL_PROC(void, glLoadIdentity, (void)) | ||
| 236 | SDL_PROC_UNUSED(void, glLoadMatrixd, (const GLdouble *m)) | ||
| 237 | SDL_PROC_UNUSED(void, glLoadMatrixf, (const GLfloat *m)) | ||
| 238 | SDL_PROC_UNUSED(void, glLoadName, (GLuint name)) | ||
| 239 | SDL_PROC_UNUSED(void, glLogicOp, (GLenum opcode)) | ||
| 240 | SDL_PROC_UNUSED(void, glMap1d, | ||
| 241 | (GLenum target, GLdouble u1, GLdouble u2, GLint stride, | ||
| 242 | GLint order, const GLdouble *points)) | ||
| 243 | SDL_PROC_UNUSED(void, glMap1f, | ||
| 244 | (GLenum target, GLfloat u1, GLfloat u2, GLint stride, | ||
| 245 | GLint order, const GLfloat *points)) | ||
| 246 | SDL_PROC_UNUSED(void, glMap2d, | ||
| 247 | (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, | ||
| 248 | GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, | ||
| 249 | GLint vorder, const GLdouble *points)) | ||
| 250 | SDL_PROC_UNUSED(void, glMap2f, | ||
| 251 | (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, | ||
| 252 | GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, | ||
| 253 | GLint vorder, const GLfloat *points)) | ||
| 254 | SDL_PROC_UNUSED(void, glMapGrid1d, (GLint un, GLdouble u1, GLdouble u2)) | ||
| 255 | SDL_PROC_UNUSED(void, glMapGrid1f, (GLint un, GLfloat u1, GLfloat u2)) | ||
| 256 | SDL_PROC_UNUSED(void, glMapGrid2d, | ||
| 257 | (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, | ||
| 258 | GLdouble v2)) | ||
| 259 | SDL_PROC_UNUSED(void, glMapGrid2f, | ||
| 260 | (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, | ||
| 261 | GLfloat v2)) | ||
| 262 | SDL_PROC_UNUSED(void, glMaterialf, (GLenum face, GLenum pname, GLfloat param)) | ||
| 263 | SDL_PROC_UNUSED(void, glMaterialfv, | ||
| 264 | (GLenum face, GLenum pname, const GLfloat *params)) | ||
| 265 | SDL_PROC_UNUSED(void, glMateriali, (GLenum face, GLenum pname, GLint param)) | ||
| 266 | SDL_PROC_UNUSED(void, glMaterialiv, | ||
| 267 | (GLenum face, GLenum pname, const GLint *params)) | ||
| 268 | SDL_PROC(void, glMatrixMode, (GLenum mode)) | ||
| 269 | SDL_PROC_UNUSED(void, glMultMatrixd, (const GLdouble *m)) | ||
| 270 | SDL_PROC_UNUSED(void, glMultMatrixf, (const GLfloat *m)) | ||
| 271 | SDL_PROC_UNUSED(void, glNewList, (GLuint list, GLenum mode)) | ||
| 272 | SDL_PROC_UNUSED(void, glNormal3b, (GLbyte nx, GLbyte ny, GLbyte nz)) | ||
| 273 | SDL_PROC_UNUSED(void, glNormal3bv, (const GLbyte *v)) | ||
| 274 | SDL_PROC_UNUSED(void, glNormal3d, (GLdouble nx, GLdouble ny, GLdouble nz)) | ||
| 275 | SDL_PROC_UNUSED(void, glNormal3dv, (const GLdouble *v)) | ||
| 276 | SDL_PROC_UNUSED(void, glNormal3f, (GLfloat nx, GLfloat ny, GLfloat nz)) | ||
| 277 | SDL_PROC_UNUSED(void, glNormal3fv, (const GLfloat *v)) | ||
| 278 | SDL_PROC_UNUSED(void, glNormal3i, (GLint nx, GLint ny, GLint nz)) | ||
| 279 | SDL_PROC_UNUSED(void, glNormal3iv, (const GLint *v)) | ||
| 280 | SDL_PROC_UNUSED(void, glNormal3s, (GLshort nx, GLshort ny, GLshort nz)) | ||
| 281 | SDL_PROC_UNUSED(void, glNormal3sv, (const GLshort *v)) | ||
| 282 | SDL_PROC_UNUSED(void, glNormalPointer, | ||
| 283 | (GLenum type, GLsizei stride, const GLvoid *pointer)) | ||
| 284 | SDL_PROC(void, glOrtho, | ||
| 285 | (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, | ||
| 286 | GLdouble zNear, GLdouble zFar)) | ||
| 287 | SDL_PROC_UNUSED(void, glPassThrough, (GLfloat token)) | ||
| 288 | SDL_PROC_UNUSED(void, glPixelMapfv, | ||
| 289 | (GLenum map, GLsizei mapsize, const GLfloat *values)) | ||
| 290 | SDL_PROC_UNUSED(void, glPixelMapuiv, | ||
| 291 | (GLenum map, GLsizei mapsize, const GLuint *values)) | ||
| 292 | SDL_PROC_UNUSED(void, glPixelMapusv, | ||
| 293 | (GLenum map, GLsizei mapsize, const GLushort *values)) | ||
| 294 | SDL_PROC_UNUSED(void, glPixelStoref, (GLenum pname, GLfloat param)) | ||
| 295 | SDL_PROC(void, glPixelStorei, (GLenum pname, GLint param)) | ||
| 296 | SDL_PROC_UNUSED(void, glPixelTransferf, (GLenum pname, GLfloat param)) | ||
| 297 | SDL_PROC_UNUSED(void, glPixelTransferi, (GLenum pname, GLint param)) | ||
| 298 | SDL_PROC_UNUSED(void, glPixelZoom, (GLfloat xfactor, GLfloat yfactor)) | ||
| 299 | SDL_PROC(void, glPointSize, (GLfloat size)) | ||
| 300 | SDL_PROC_UNUSED(void, glPolygonMode, (GLenum face, GLenum mode)) | ||
| 301 | SDL_PROC_UNUSED(void, glPolygonOffset, (GLfloat factor, GLfloat units)) | ||
| 302 | SDL_PROC_UNUSED(void, glPolygonStipple, (const GLubyte *mask)) | ||
| 303 | SDL_PROC_UNUSED(void, glPopAttrib, (void)) | ||
| 304 | SDL_PROC_UNUSED(void, glPopClientAttrib, (void)) | ||
| 305 | SDL_PROC_UNUSED(void, glPopMatrix, (void)) | ||
| 306 | SDL_PROC_UNUSED(void, glPopName, (void)) | ||
| 307 | SDL_PROC_UNUSED(void, glPrioritizeTextures, | ||
| 308 | (GLsizei n, const GLuint *textures, | ||
| 309 | const GLclampf *priorities)) | ||
| 310 | SDL_PROC_UNUSED(void, glPushAttrib, (GLbitfield mask)) | ||
| 311 | SDL_PROC_UNUSED(void, glPushClientAttrib, (GLbitfield mask)) | ||
| 312 | SDL_PROC_UNUSED(void, glPushMatrix, (void)) | ||
| 313 | SDL_PROC_UNUSED(void, glPushName, (GLuint name)) | ||
| 314 | SDL_PROC_UNUSED(void, glRasterPos2d, (GLdouble x, GLdouble y)) | ||
| 315 | SDL_PROC_UNUSED(void, glRasterPos2dv, (const GLdouble *v)) | ||
| 316 | SDL_PROC_UNUSED(void, glRasterPos2f, (GLfloat x, GLfloat y)) | ||
| 317 | SDL_PROC_UNUSED(void, glRasterPos2fv, (const GLfloat *v)) | ||
| 318 | SDL_PROC(void, glRasterPos2i, (GLint x, GLint y)) | ||
| 319 | SDL_PROC_UNUSED(void, glRasterPos2iv, (const GLint *v)) | ||
| 320 | SDL_PROC_UNUSED(void, glRasterPos2s, (GLshort x, GLshort y)) | ||
| 321 | SDL_PROC_UNUSED(void, glRasterPos2sv, (const GLshort *v)) | ||
| 322 | SDL_PROC_UNUSED(void, glRasterPos3d, (GLdouble x, GLdouble y, GLdouble z)) | ||
| 323 | SDL_PROC_UNUSED(void, glRasterPos3dv, (const GLdouble *v)) | ||
| 324 | SDL_PROC_UNUSED(void, glRasterPos3f, (GLfloat x, GLfloat y, GLfloat z)) | ||
| 325 | SDL_PROC_UNUSED(void, glRasterPos3fv, (const GLfloat *v)) | ||
| 326 | SDL_PROC_UNUSED(void, glRasterPos3i, (GLint x, GLint y, GLint z)) | ||
| 327 | SDL_PROC_UNUSED(void, glRasterPos3iv, (const GLint *v)) | ||
| 328 | SDL_PROC_UNUSED(void, glRasterPos3s, (GLshort x, GLshort y, GLshort z)) | ||
| 329 | SDL_PROC_UNUSED(void, glRasterPos3sv, (const GLshort *v)) | ||
| 330 | SDL_PROC_UNUSED(void, glRasterPos4d, | ||
| 331 | (GLdouble x, GLdouble y, GLdouble z, GLdouble w)) | ||
| 332 | SDL_PROC_UNUSED(void, glRasterPos4dv, (const GLdouble *v)) | ||
| 333 | SDL_PROC_UNUSED(void, glRasterPos4f, | ||
| 334 | (GLfloat x, GLfloat y, GLfloat z, GLfloat w)) | ||
| 335 | SDL_PROC_UNUSED(void, glRasterPos4fv, (const GLfloat *v)) | ||
| 336 | SDL_PROC_UNUSED(void, glRasterPos4i, (GLint x, GLint y, GLint z, GLint w)) | ||
| 337 | SDL_PROC_UNUSED(void, glRasterPos4iv, (const GLint *v)) | ||
| 338 | SDL_PROC_UNUSED(void, glRasterPos4s, | ||
| 339 | (GLshort x, GLshort y, GLshort z, GLshort w)) | ||
| 340 | SDL_PROC_UNUSED(void, glRasterPos4sv, (const GLshort *v)) | ||
| 341 | SDL_PROC(void, glReadBuffer, (GLenum mode)) | ||
| 342 | SDL_PROC(void, glReadPixels, | ||
| 343 | (GLint x, GLint y, GLsizei width, GLsizei height, | ||
| 344 | GLenum format, GLenum type, GLvoid *pixels)) | ||
| 345 | SDL_PROC_UNUSED(void, glRectd, | ||
| 346 | (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)) | ||
| 347 | SDL_PROC_UNUSED(void, glRectdv, (const GLdouble *v1, const GLdouble *v2)) | ||
| 348 | SDL_PROC(void, glRectf, | ||
| 349 | (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)) | ||
| 350 | SDL_PROC_UNUSED(void, glRectfv, (const GLfloat *v1, const GLfloat *v2)) | ||
| 351 | SDL_PROC_UNUSED(void, glRecti, (GLint x1, GLint y1, GLint x2, GLint y2)) | ||
| 352 | SDL_PROC_UNUSED(void, glRectiv, (const GLint *v1, const GLint *v2)) | ||
| 353 | SDL_PROC_UNUSED(void, glRects, | ||
| 354 | (GLshort x1, GLshort y1, GLshort x2, GLshort y2)) | ||
| 355 | SDL_PROC_UNUSED(void, glRectsv, (const GLshort *v1, const GLshort *v2)) | ||
| 356 | SDL_PROC_UNUSED(GLint, glRenderMode, (GLenum mode)) | ||
| 357 | SDL_PROC_UNUSED(void, glRotated, | ||
| 358 | (GLdouble angle, GLdouble x, GLdouble y, GLdouble z)) | ||
| 359 | SDL_PROC(void, glRotatef, | ||
| 360 | (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)) | ||
| 361 | SDL_PROC_UNUSED(void, glScaled, (GLdouble x, GLdouble y, GLdouble z)) | ||
| 362 | SDL_PROC_UNUSED(void, glScalef, (GLfloat x, GLfloat y, GLfloat z)) | ||
| 363 | SDL_PROC(void, glScissor, (GLint x, GLint y, GLsizei width, GLsizei height)) | ||
| 364 | SDL_PROC_UNUSED(void, glSelectBuffer, (GLsizei size, GLuint *buffer)) | ||
| 365 | SDL_PROC(void, glShadeModel, (GLenum mode)) | ||
| 366 | SDL_PROC_UNUSED(void, glStencilFunc, (GLenum func, GLint ref, GLuint mask)) | ||
| 367 | SDL_PROC_UNUSED(void, glStencilMask, (GLuint mask)) | ||
| 368 | SDL_PROC_UNUSED(void, glStencilOp, (GLenum fail, GLenum zfail, GLenum zpass)) | ||
| 369 | SDL_PROC_UNUSED(void, glTexCoord1d, (GLdouble s)) | ||
| 370 | SDL_PROC_UNUSED(void, glTexCoord1dv, (const GLdouble *v)) | ||
| 371 | SDL_PROC_UNUSED(void, glTexCoord1f, (GLfloat s)) | ||
| 372 | SDL_PROC_UNUSED(void, glTexCoord1fv, (const GLfloat *v)) | ||
| 373 | SDL_PROC_UNUSED(void, glTexCoord1i, (GLint s)) | ||
| 374 | SDL_PROC_UNUSED(void, glTexCoord1iv, (const GLint *v)) | ||
| 375 | SDL_PROC_UNUSED(void, glTexCoord1s, (GLshort s)) | ||
| 376 | SDL_PROC_UNUSED(void, glTexCoord1sv, (const GLshort *v)) | ||
| 377 | SDL_PROC_UNUSED(void, glTexCoord2d, (GLdouble s, GLdouble t)) | ||
| 378 | SDL_PROC_UNUSED(void, glTexCoord2dv, (const GLdouble *v)) | ||
| 379 | SDL_PROC(void, glTexCoord2f, (GLfloat s, GLfloat t)) | ||
| 380 | SDL_PROC_UNUSED(void, glTexCoord2fv, (const GLfloat *v)) | ||
| 381 | SDL_PROC_UNUSED(void, glTexCoord2i, (GLint s, GLint t)) | ||
| 382 | SDL_PROC_UNUSED(void, glTexCoord2iv, (const GLint *v)) | ||
| 383 | SDL_PROC_UNUSED(void, glTexCoord2s, (GLshort s, GLshort t)) | ||
| 384 | SDL_PROC_UNUSED(void, glTexCoord2sv, (const GLshort *v)) | ||
| 385 | SDL_PROC_UNUSED(void, glTexCoord3d, (GLdouble s, GLdouble t, GLdouble r)) | ||
| 386 | SDL_PROC_UNUSED(void, glTexCoord3dv, (const GLdouble *v)) | ||
| 387 | SDL_PROC_UNUSED(void, glTexCoord3f, (GLfloat s, GLfloat t, GLfloat r)) | ||
| 388 | SDL_PROC_UNUSED(void, glTexCoord3fv, (const GLfloat *v)) | ||
| 389 | SDL_PROC_UNUSED(void, glTexCoord3i, (GLint s, GLint t, GLint r)) | ||
| 390 | SDL_PROC_UNUSED(void, glTexCoord3iv, (const GLint *v)) | ||
| 391 | SDL_PROC_UNUSED(void, glTexCoord3s, (GLshort s, GLshort t, GLshort r)) | ||
| 392 | SDL_PROC_UNUSED(void, glTexCoord3sv, (const GLshort *v)) | ||
| 393 | SDL_PROC_UNUSED(void, glTexCoord4d, | ||
| 394 | (GLdouble s, GLdouble t, GLdouble r, GLdouble q)) | ||
| 395 | SDL_PROC_UNUSED(void, glTexCoord4dv, (const GLdouble *v)) | ||
| 396 | SDL_PROC_UNUSED(void, glTexCoord4f, | ||
| 397 | (GLfloat s, GLfloat t, GLfloat r, GLfloat q)) | ||
| 398 | SDL_PROC_UNUSED(void, glTexCoord4fv, (const GLfloat *v)) | ||
| 399 | SDL_PROC_UNUSED(void, glTexCoord4i, (GLint s, GLint t, GLint r, GLint q)) | ||
| 400 | SDL_PROC_UNUSED(void, glTexCoord4iv, (const GLint *v)) | ||
| 401 | SDL_PROC_UNUSED(void, glTexCoord4s, | ||
| 402 | (GLshort s, GLshort t, GLshort r, GLshort q)) | ||
| 403 | SDL_PROC_UNUSED(void, glTexCoord4sv, (const GLshort *v)) | ||
| 404 | SDL_PROC(void, glTexCoordPointer, | ||
| 405 | (GLint size, GLenum type, GLsizei stride, | ||
| 406 | const GLvoid *pointer)) | ||
| 407 | SDL_PROC(void, glTexEnvf, (GLenum target, GLenum pname, GLfloat param)) | ||
| 408 | SDL_PROC_UNUSED(void, glTexEnvfv, | ||
| 409 | (GLenum target, GLenum pname, const GLfloat *params)) | ||
| 410 | SDL_PROC_UNUSED(void, glTexEnvi, (GLenum target, GLenum pname, GLint param)) | ||
| 411 | SDL_PROC_UNUSED(void, glTexEnviv, | ||
| 412 | (GLenum target, GLenum pname, const GLint *params)) | ||
| 413 | SDL_PROC_UNUSED(void, glTexGend, (GLenum coord, GLenum pname, GLdouble param)) | ||
| 414 | SDL_PROC_UNUSED(void, glTexGendv, | ||
| 415 | (GLenum coord, GLenum pname, const GLdouble *params)) | ||
| 416 | SDL_PROC_UNUSED(void, glTexGenf, (GLenum coord, GLenum pname, GLfloat param)) | ||
| 417 | SDL_PROC_UNUSED(void, glTexGenfv, | ||
| 418 | (GLenum coord, GLenum pname, const GLfloat *params)) | ||
| 419 | SDL_PROC_UNUSED(void, glTexGeni, (GLenum coord, GLenum pname, GLint param)) | ||
| 420 | SDL_PROC_UNUSED(void, glTexGeniv, | ||
| 421 | (GLenum coord, GLenum pname, const GLint *params)) | ||
| 422 | SDL_PROC_UNUSED(void, glTexImage1D, | ||
| 423 | (GLenum target, GLint level, GLint internalformat, | ||
| 424 | GLsizei width, GLint border, GLenum format, GLenum type, | ||
| 425 | const GLvoid *pixels)) | ||
| 426 | SDL_PROC(void, glTexImage2D, | ||
| 427 | (GLenum target, GLint level, GLint internalformat, GLsizei width, | ||
| 428 | GLsizei height, GLint border, GLenum format, GLenum type, | ||
| 429 | const GLvoid *pixels)) | ||
| 430 | SDL_PROC_UNUSED(void, glTexParameterf, | ||
| 431 | (GLenum target, GLenum pname, GLfloat param)) | ||
| 432 | SDL_PROC_UNUSED(void, glTexParameterfv, | ||
| 433 | (GLenum target, GLenum pname, const GLfloat *params)) | ||
| 434 | SDL_PROC(void, glTexParameteri, (GLenum target, GLenum pname, GLint param)) | ||
| 435 | SDL_PROC_UNUSED(void, glTexParameteriv, | ||
| 436 | (GLenum target, GLenum pname, const GLint *params)) | ||
| 437 | SDL_PROC_UNUSED(void, glTexSubImage1D, | ||
| 438 | (GLenum target, GLint level, GLint xoffset, GLsizei width, | ||
| 439 | GLenum format, GLenum type, const GLvoid *pixels)) | ||
| 440 | SDL_PROC(void, glTexSubImage2D, | ||
| 441 | (GLenum target, GLint level, GLint xoffset, GLint yoffset, | ||
| 442 | GLsizei width, GLsizei height, GLenum format, GLenum type, | ||
| 443 | const GLvoid *pixels)) | ||
| 444 | SDL_PROC_UNUSED(void, glTranslated, (GLdouble x, GLdouble y, GLdouble z)) | ||
| 445 | SDL_PROC_UNUSED(void, glTranslatef, (GLfloat x, GLfloat y, GLfloat z)) | ||
| 446 | SDL_PROC_UNUSED(void, glVertex2d, (GLdouble x, GLdouble y)) | ||
| 447 | SDL_PROC_UNUSED(void, glVertex2dv, (const GLdouble *v)) | ||
| 448 | SDL_PROC(void, glVertex2f, (GLfloat x, GLfloat y)) | ||
| 449 | SDL_PROC_UNUSED(void, glVertex2fv, (const GLfloat *v)) | ||
| 450 | SDL_PROC_UNUSED(void, glVertex2i, (GLint x, GLint y)) | ||
| 451 | SDL_PROC_UNUSED(void, glVertex2iv, (const GLint *v)) | ||
| 452 | SDL_PROC_UNUSED(void, glVertex2s, (GLshort x, GLshort y)) | ||
| 453 | SDL_PROC_UNUSED(void, glVertex2sv, (const GLshort *v)) | ||
| 454 | SDL_PROC_UNUSED(void, glVertex3d, (GLdouble x, GLdouble y, GLdouble z)) | ||
| 455 | SDL_PROC_UNUSED(void, glVertex3dv, (const GLdouble *v)) | ||
| 456 | SDL_PROC_UNUSED(void, glVertex3f, (GLfloat x, GLfloat y, GLfloat z)) | ||
| 457 | SDL_PROC(void, glVertex3fv, (const GLfloat *v)) | ||
| 458 | SDL_PROC_UNUSED(void, glVertex3i, (GLint x, GLint y, GLint z)) | ||
| 459 | SDL_PROC_UNUSED(void, glVertex3iv, (const GLint *v)) | ||
| 460 | SDL_PROC_UNUSED(void, glVertex3s, (GLshort x, GLshort y, GLshort z)) | ||
| 461 | SDL_PROC_UNUSED(void, glVertex3sv, (const GLshort *v)) | ||
| 462 | SDL_PROC_UNUSED(void, glVertex4d, | ||
| 463 | (GLdouble x, GLdouble y, GLdouble z, GLdouble w)) | ||
| 464 | SDL_PROC_UNUSED(void, glVertex4dv, (const GLdouble *v)) | ||
| 465 | SDL_PROC_UNUSED(void, glVertex4f, | ||
| 466 | (GLfloat x, GLfloat y, GLfloat z, GLfloat w)) | ||
| 467 | SDL_PROC_UNUSED(void, glVertex4fv, (const GLfloat *v)) | ||
| 468 | SDL_PROC_UNUSED(void, glVertex4i, (GLint x, GLint y, GLint z, GLint w)) | ||
| 469 | SDL_PROC_UNUSED(void, glVertex4iv, (const GLint *v)) | ||
| 470 | SDL_PROC_UNUSED(void, glVertex4s, | ||
| 471 | (GLshort x, GLshort y, GLshort z, GLshort w)) | ||
| 472 | SDL_PROC_UNUSED(void, glVertex4sv, (const GLshort *v)) | ||
| 473 | SDL_PROC(void, glVertexPointer, | ||
| 474 | (GLint size, GLenum type, GLsizei stride, | ||
| 475 | const GLvoid *pointer)) | ||
| 476 | SDL_PROC(void, glViewport, (GLint x, GLint y, GLsizei width, GLsizei height)) | ||
diff --git a/SDL-3.2.8/src/render/opengl/SDL_render_gl.c b/SDL-3.2.8/src/render/opengl/SDL_render_gl.c new file mode 100644 index 0000000..d534438 --- /dev/null +++ b/SDL-3.2.8/src/render/opengl/SDL_render_gl.c | |||
| @@ -0,0 +1,1844 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_OGL | ||
| 24 | #include "../../video/SDL_sysvideo.h" // For SDL_RecreateWindow | ||
| 25 | #include <SDL3/SDL_opengl.h> | ||
| 26 | #include "../SDL_sysrender.h" | ||
| 27 | #include "SDL_shaders_gl.h" | ||
| 28 | #include "../../video/SDL_pixels_c.h" | ||
| 29 | |||
| 30 | #ifdef SDL_PLATFORM_MACOS | ||
| 31 | #include <OpenGL/OpenGL.h> | ||
| 32 | #endif | ||
| 33 | |||
| 34 | #ifdef SDL_VIDEO_VITA_PVR_OGL | ||
| 35 | #include <GL/gl.h> | ||
| 36 | #include <GL/glext.h> | ||
| 37 | #endif | ||
| 38 | |||
| 39 | /* To prevent unnecessary window recreation, | ||
| 40 | * these should match the defaults selected in SDL_GL_ResetAttributes | ||
| 41 | */ | ||
| 42 | |||
| 43 | #define RENDERER_CONTEXT_MAJOR 2 | ||
| 44 | #define RENDERER_CONTEXT_MINOR 1 | ||
| 45 | |||
| 46 | // OpenGL renderer implementation | ||
| 47 | |||
| 48 | /* Details on optimizing the texture path on macOS: | ||
| 49 | http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_texturedata/opengl_texturedata.html | ||
| 50 | */ | ||
| 51 | |||
| 52 | typedef struct GL_FBOList GL_FBOList; | ||
| 53 | |||
| 54 | struct GL_FBOList | ||
| 55 | { | ||
| 56 | Uint32 w, h; | ||
| 57 | GLuint FBO; | ||
| 58 | GL_FBOList *next; | ||
| 59 | }; | ||
| 60 | |||
| 61 | typedef struct | ||
| 62 | { | ||
| 63 | bool viewport_dirty; | ||
| 64 | SDL_Rect viewport; | ||
| 65 | SDL_Texture *texture; | ||
| 66 | SDL_Texture *target; | ||
| 67 | int drawablew; | ||
| 68 | int drawableh; | ||
| 69 | SDL_BlendMode blend; | ||
| 70 | GL_Shader shader; | ||
| 71 | const float *shader_params; | ||
| 72 | bool cliprect_enabled_dirty; | ||
| 73 | bool cliprect_enabled; | ||
| 74 | bool cliprect_dirty; | ||
| 75 | SDL_Rect cliprect; | ||
| 76 | bool texturing; | ||
| 77 | bool texturing_dirty; | ||
| 78 | bool vertex_array; | ||
| 79 | bool color_array; | ||
| 80 | bool texture_array; | ||
| 81 | bool color_dirty; | ||
| 82 | SDL_FColor color; | ||
| 83 | bool clear_color_dirty; | ||
| 84 | SDL_FColor clear_color; | ||
| 85 | } GL_DrawStateCache; | ||
| 86 | |||
| 87 | typedef struct | ||
| 88 | { | ||
| 89 | SDL_GLContext context; | ||
| 90 | |||
| 91 | bool debug_enabled; | ||
| 92 | bool GL_ARB_debug_output_supported; | ||
| 93 | int errors; | ||
| 94 | char **error_messages; | ||
| 95 | GLDEBUGPROCARB next_error_callback; | ||
| 96 | GLvoid *next_error_userparam; | ||
| 97 | |||
| 98 | GLenum textype; | ||
| 99 | |||
| 100 | bool GL_ARB_texture_non_power_of_two_supported; | ||
| 101 | bool GL_ARB_texture_rectangle_supported; | ||
| 102 | bool GL_EXT_framebuffer_object_supported; | ||
| 103 | GL_FBOList *framebuffers; | ||
| 104 | |||
| 105 | // OpenGL functions | ||
| 106 | #define SDL_PROC(ret, func, params) ret (APIENTRY *func) params; | ||
| 107 | #include "SDL_glfuncs.h" | ||
| 108 | #undef SDL_PROC | ||
| 109 | |||
| 110 | // Multitexture support | ||
| 111 | bool GL_ARB_multitexture_supported; | ||
| 112 | PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; | ||
| 113 | GLint num_texture_units; | ||
| 114 | |||
| 115 | PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; | ||
| 116 | PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT; | ||
| 117 | PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; | ||
| 118 | PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; | ||
| 119 | PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; | ||
| 120 | |||
| 121 | // Shader support | ||
| 122 | GL_ShaderContext *shaders; | ||
| 123 | |||
| 124 | GL_DrawStateCache drawstate; | ||
| 125 | } GL_RenderData; | ||
| 126 | |||
| 127 | typedef struct | ||
| 128 | { | ||
| 129 | GLuint texture; | ||
| 130 | bool texture_external; | ||
| 131 | GLfloat texw; | ||
| 132 | GLfloat texh; | ||
| 133 | GLenum format; | ||
| 134 | GLenum formattype; | ||
| 135 | GL_Shader shader; | ||
| 136 | const float *shader_params; | ||
| 137 | void *pixels; | ||
| 138 | int pitch; | ||
| 139 | SDL_Rect locked_rect; | ||
| 140 | |||
| 141 | #ifdef SDL_HAVE_YUV | ||
| 142 | // YUV texture support | ||
| 143 | bool yuv; | ||
| 144 | bool nv12; | ||
| 145 | GLuint utexture; | ||
| 146 | bool utexture_external; | ||
| 147 | GLuint vtexture; | ||
| 148 | bool vtexture_external; | ||
| 149 | #endif | ||
| 150 | |||
| 151 | GL_FBOList *fbo; | ||
| 152 | } GL_TextureData; | ||
| 153 | |||
| 154 | static const char *GL_TranslateError(GLenum error) | ||
| 155 | { | ||
| 156 | #define GL_ERROR_TRANSLATE(e) \ | ||
| 157 | case e: \ | ||
| 158 | return #e; | ||
| 159 | switch (error) { | ||
| 160 | GL_ERROR_TRANSLATE(GL_INVALID_ENUM) | ||
| 161 | GL_ERROR_TRANSLATE(GL_INVALID_VALUE) | ||
| 162 | GL_ERROR_TRANSLATE(GL_INVALID_OPERATION) | ||
| 163 | GL_ERROR_TRANSLATE(GL_OUT_OF_MEMORY) | ||
| 164 | GL_ERROR_TRANSLATE(GL_NO_ERROR) | ||
| 165 | GL_ERROR_TRANSLATE(GL_STACK_OVERFLOW) | ||
| 166 | GL_ERROR_TRANSLATE(GL_STACK_UNDERFLOW) | ||
| 167 | GL_ERROR_TRANSLATE(GL_TABLE_TOO_LARGE) | ||
| 168 | default: | ||
| 169 | return "UNKNOWN"; | ||
| 170 | } | ||
| 171 | #undef GL_ERROR_TRANSLATE | ||
| 172 | } | ||
| 173 | |||
| 174 | static void GL_ClearErrors(SDL_Renderer *renderer) | ||
| 175 | { | ||
| 176 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 177 | |||
| 178 | if (!data->debug_enabled) { | ||
| 179 | return; | ||
| 180 | } | ||
| 181 | if (data->GL_ARB_debug_output_supported) { | ||
| 182 | if (data->errors) { | ||
| 183 | int i; | ||
| 184 | for (i = 0; i < data->errors; ++i) { | ||
| 185 | SDL_free(data->error_messages[i]); | ||
| 186 | } | ||
| 187 | SDL_free(data->error_messages); | ||
| 188 | |||
| 189 | data->errors = 0; | ||
| 190 | data->error_messages = NULL; | ||
| 191 | } | ||
| 192 | } else if (data->glGetError) { | ||
| 193 | while (data->glGetError() != GL_NO_ERROR) { | ||
| 194 | // continue; | ||
| 195 | } | ||
| 196 | } | ||
| 197 | } | ||
| 198 | |||
| 199 | static bool GL_CheckAllErrors(const char *prefix, SDL_Renderer *renderer, const char *file, int line, const char *function) | ||
| 200 | { | ||
| 201 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 202 | bool result = true; | ||
| 203 | |||
| 204 | if (!data->debug_enabled) { | ||
| 205 | return true; | ||
| 206 | } | ||
| 207 | if (data->GL_ARB_debug_output_supported) { | ||
| 208 | if (data->errors) { | ||
| 209 | int i; | ||
| 210 | for (i = 0; i < data->errors; ++i) { | ||
| 211 | SDL_SetError("%s: %s (%d): %s %s", prefix, file, line, function, data->error_messages[i]); | ||
| 212 | result = false; | ||
| 213 | } | ||
| 214 | GL_ClearErrors(renderer); | ||
| 215 | } | ||
| 216 | } else { | ||
| 217 | // check gl errors (can return multiple errors) | ||
| 218 | for (;;) { | ||
| 219 | GLenum error = data->glGetError(); | ||
| 220 | if (error != GL_NO_ERROR) { | ||
| 221 | if (prefix == NULL || prefix[0] == '\0') { | ||
| 222 | prefix = "generic"; | ||
| 223 | } | ||
| 224 | SDL_SetError("%s: %s (%d): %s %s (0x%X)", prefix, file, line, function, GL_TranslateError(error), error); | ||
| 225 | result = false; | ||
| 226 | } else { | ||
| 227 | break; | ||
| 228 | } | ||
| 229 | } | ||
| 230 | } | ||
| 231 | return result; | ||
| 232 | } | ||
| 233 | |||
| 234 | #if 0 | ||
| 235 | #define GL_CheckError(prefix, renderer) | ||
| 236 | #else | ||
| 237 | #define GL_CheckError(prefix, renderer) GL_CheckAllErrors(prefix, renderer, SDL_FILE, SDL_LINE, SDL_FUNCTION) | ||
| 238 | #endif | ||
| 239 | |||
| 240 | static bool GL_LoadFunctions(GL_RenderData *data) | ||
| 241 | { | ||
| 242 | #ifdef __SDL_NOGETPROCADDR__ | ||
| 243 | #define SDL_PROC(ret, func, params) data->func = func; | ||
| 244 | #else | ||
| 245 | bool result = true; | ||
| 246 | #define SDL_PROC(ret, func, params) \ | ||
| 247 | do { \ | ||
| 248 | data->func = (ret (APIENTRY *) params)SDL_GL_GetProcAddress(#func); \ | ||
| 249 | if (!data->func) { \ | ||
| 250 | result = SDL_SetError("Couldn't load GL function %s: %s", #func, SDL_GetError()); \ | ||
| 251 | } \ | ||
| 252 | } while (0); | ||
| 253 | #endif // __SDL_NOGETPROCADDR__ | ||
| 254 | |||
| 255 | #include "SDL_glfuncs.h" | ||
| 256 | #undef SDL_PROC | ||
| 257 | return result; | ||
| 258 | } | ||
| 259 | |||
| 260 | static bool GL_ActivateRenderer(SDL_Renderer *renderer) | ||
| 261 | { | ||
| 262 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 263 | |||
| 264 | if (SDL_GL_GetCurrentContext() != data->context) { | ||
| 265 | if (!SDL_GL_MakeCurrent(renderer->window, data->context)) { | ||
| 266 | return false; | ||
| 267 | } | ||
| 268 | } | ||
| 269 | |||
| 270 | GL_ClearErrors(renderer); | ||
| 271 | |||
| 272 | return true; | ||
| 273 | } | ||
| 274 | |||
| 275 | static void APIENTRY GL_HandleDebugMessage(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char *message, const void *userParam) | ||
| 276 | { | ||
| 277 | SDL_Renderer *renderer = (SDL_Renderer *)userParam; | ||
| 278 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 279 | |||
| 280 | if (type == GL_DEBUG_TYPE_ERROR_ARB) { | ||
| 281 | // Record this error | ||
| 282 | int errors = data->errors + 1; | ||
| 283 | char **error_messages = (char **)SDL_realloc(data->error_messages, errors * sizeof(*data->error_messages)); | ||
| 284 | if (error_messages) { | ||
| 285 | data->errors = errors; | ||
| 286 | data->error_messages = error_messages; | ||
| 287 | data->error_messages[data->errors - 1] = SDL_strdup(message); | ||
| 288 | } | ||
| 289 | } | ||
| 290 | |||
| 291 | // If there's another error callback, pass it along, otherwise log it | ||
| 292 | if (data->next_error_callback) { | ||
| 293 | data->next_error_callback(source, type, id, severity, length, message, data->next_error_userparam); | ||
| 294 | } else { | ||
| 295 | if (type == GL_DEBUG_TYPE_ERROR_ARB) { | ||
| 296 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", message); | ||
| 297 | } else { | ||
| 298 | SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "%s", message); | ||
| 299 | } | ||
| 300 | } | ||
| 301 | } | ||
| 302 | |||
| 303 | static GL_FBOList *GL_GetFBO(GL_RenderData *data, Uint32 w, Uint32 h) | ||
| 304 | { | ||
| 305 | GL_FBOList *result = data->framebuffers; | ||
| 306 | |||
| 307 | while (result && ((result->w != w) || (result->h != h))) { | ||
| 308 | result = result->next; | ||
| 309 | } | ||
| 310 | |||
| 311 | if (!result) { | ||
| 312 | result = (GL_FBOList *)SDL_malloc(sizeof(GL_FBOList)); | ||
| 313 | if (result) { | ||
| 314 | result->w = w; | ||
| 315 | result->h = h; | ||
| 316 | data->glGenFramebuffersEXT(1, &result->FBO); | ||
| 317 | result->next = data->framebuffers; | ||
| 318 | data->framebuffers = result; | ||
| 319 | } | ||
| 320 | } | ||
| 321 | return result; | ||
| 322 | } | ||
| 323 | |||
| 324 | static void GL_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 325 | { | ||
| 326 | /* If the window x/y/w/h changed at all, assume the viewport has been | ||
| 327 | * changed behind our backs. x/y changes might seem weird but viewport | ||
| 328 | * resets have been observed on macOS at minimum! | ||
| 329 | */ | ||
| 330 | if (event->type == SDL_EVENT_WINDOW_RESIZED || | ||
| 331 | event->type == SDL_EVENT_WINDOW_MOVED) { | ||
| 332 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 333 | data->drawstate.viewport_dirty = true; | ||
| 334 | } | ||
| 335 | } | ||
| 336 | |||
| 337 | static GLenum GetBlendFunc(SDL_BlendFactor factor) | ||
| 338 | { | ||
| 339 | switch (factor) { | ||
| 340 | case SDL_BLENDFACTOR_ZERO: | ||
| 341 | return GL_ZERO; | ||
| 342 | case SDL_BLENDFACTOR_ONE: | ||
| 343 | return GL_ONE; | ||
| 344 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 345 | return GL_SRC_COLOR; | ||
| 346 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 347 | return GL_ONE_MINUS_SRC_COLOR; | ||
| 348 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 349 | return GL_SRC_ALPHA; | ||
| 350 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 351 | return GL_ONE_MINUS_SRC_ALPHA; | ||
| 352 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 353 | return GL_DST_COLOR; | ||
| 354 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 355 | return GL_ONE_MINUS_DST_COLOR; | ||
| 356 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 357 | return GL_DST_ALPHA; | ||
| 358 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 359 | return GL_ONE_MINUS_DST_ALPHA; | ||
| 360 | default: | ||
| 361 | return GL_INVALID_ENUM; | ||
| 362 | } | ||
| 363 | } | ||
| 364 | |||
| 365 | static GLenum GetBlendEquation(SDL_BlendOperation operation) | ||
| 366 | { | ||
| 367 | switch (operation) { | ||
| 368 | case SDL_BLENDOPERATION_ADD: | ||
| 369 | return GL_FUNC_ADD; | ||
| 370 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 371 | return GL_FUNC_SUBTRACT; | ||
| 372 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 373 | return GL_FUNC_REVERSE_SUBTRACT; | ||
| 374 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 375 | return GL_MIN; | ||
| 376 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 377 | return GL_MAX; | ||
| 378 | default: | ||
| 379 | return GL_INVALID_ENUM; | ||
| 380 | } | ||
| 381 | } | ||
| 382 | |||
| 383 | static bool GL_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 384 | { | ||
| 385 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 386 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 387 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 388 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 389 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 390 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 391 | |||
| 392 | if (GetBlendFunc(srcColorFactor) == GL_INVALID_ENUM || | ||
| 393 | GetBlendFunc(srcAlphaFactor) == GL_INVALID_ENUM || | ||
| 394 | GetBlendEquation(colorOperation) == GL_INVALID_ENUM || | ||
| 395 | GetBlendFunc(dstColorFactor) == GL_INVALID_ENUM || | ||
| 396 | GetBlendFunc(dstAlphaFactor) == GL_INVALID_ENUM || | ||
| 397 | GetBlendEquation(alphaOperation) == GL_INVALID_ENUM) { | ||
| 398 | return false; | ||
| 399 | } | ||
| 400 | if (colorOperation != alphaOperation) { | ||
| 401 | return false; | ||
| 402 | } | ||
| 403 | return true; | ||
| 404 | } | ||
| 405 | |||
| 406 | static bool convert_format(Uint32 pixel_format, GLint *internalFormat, GLenum *format, GLenum *type) | ||
| 407 | { | ||
| 408 | switch (pixel_format) { | ||
| 409 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 410 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 411 | *internalFormat = GL_RGBA8; | ||
| 412 | *format = GL_BGRA; | ||
| 413 | *type = GL_UNSIGNED_BYTE; // previously GL_UNSIGNED_INT_8_8_8_8_REV, seeing if this is better in modern times. | ||
| 414 | break; | ||
| 415 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 416 | case SDL_PIXELFORMAT_XBGR8888: | ||
| 417 | *internalFormat = GL_RGBA8; | ||
| 418 | *format = GL_RGBA; | ||
| 419 | *type = GL_UNSIGNED_BYTE; // previously GL_UNSIGNED_INT_8_8_8_8_REV, seeing if this is better in modern times. | ||
| 420 | break; | ||
| 421 | case SDL_PIXELFORMAT_YV12: | ||
| 422 | case SDL_PIXELFORMAT_IYUV: | ||
| 423 | case SDL_PIXELFORMAT_NV12: | ||
| 424 | case SDL_PIXELFORMAT_NV21: | ||
| 425 | *internalFormat = GL_LUMINANCE; | ||
| 426 | *format = GL_LUMINANCE; | ||
| 427 | *type = GL_UNSIGNED_BYTE; | ||
| 428 | break; | ||
| 429 | #ifdef SDL_PLATFORM_MACOS | ||
| 430 | case SDL_PIXELFORMAT_UYVY: | ||
| 431 | *internalFormat = GL_RGB8; | ||
| 432 | *format = GL_YCBCR_422_APPLE; | ||
| 433 | *type = GL_UNSIGNED_SHORT_8_8_APPLE; | ||
| 434 | break; | ||
| 435 | #endif | ||
| 436 | default: | ||
| 437 | return false; | ||
| 438 | } | ||
| 439 | return true; | ||
| 440 | } | ||
| 441 | |||
| 442 | static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 443 | { | ||
| 444 | GL_RenderData *renderdata = (GL_RenderData *)renderer->internal; | ||
| 445 | const GLenum textype = renderdata->textype; | ||
| 446 | GL_TextureData *data; | ||
| 447 | GLint internalFormat; | ||
| 448 | GLenum format, type; | ||
| 449 | int texture_w, texture_h; | ||
| 450 | GLenum scaleMode; | ||
| 451 | |||
| 452 | GL_ActivateRenderer(renderer); | ||
| 453 | |||
| 454 | renderdata->drawstate.texture = NULL; // we trash this state. | ||
| 455 | renderdata->drawstate.texturing_dirty = true; // we trash this state. | ||
| 456 | |||
| 457 | if (texture->access == SDL_TEXTUREACCESS_TARGET && | ||
| 458 | !renderdata->GL_EXT_framebuffer_object_supported) { | ||
| 459 | return SDL_SetError("Render targets not supported by OpenGL"); | ||
| 460 | } | ||
| 461 | |||
| 462 | if (!convert_format(texture->format, &internalFormat, &format, &type)) { | ||
| 463 | return SDL_SetError("Texture format %s not supported by OpenGL", | ||
| 464 | SDL_GetPixelFormatName(texture->format)); | ||
| 465 | } | ||
| 466 | |||
| 467 | data = (GL_TextureData *)SDL_calloc(1, sizeof(*data)); | ||
| 468 | if (!data) { | ||
| 469 | return false; | ||
| 470 | } | ||
| 471 | |||
| 472 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 473 | size_t size; | ||
| 474 | data->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 475 | size = (size_t)texture->h * data->pitch; | ||
| 476 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 477 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 478 | // Need to add size for the U and V planes | ||
| 479 | size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2); | ||
| 480 | } | ||
| 481 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 482 | texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 483 | // Need to add size for the U/V plane | ||
| 484 | size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2); | ||
| 485 | } | ||
| 486 | data->pixels = SDL_calloc(1, size); | ||
| 487 | if (!data->pixels) { | ||
| 488 | SDL_free(data); | ||
| 489 | return false; | ||
| 490 | } | ||
| 491 | } | ||
| 492 | |||
| 493 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 494 | data->fbo = GL_GetFBO(renderdata, texture->w, texture->h); | ||
| 495 | } else { | ||
| 496 | data->fbo = NULL; | ||
| 497 | } | ||
| 498 | |||
| 499 | data->texture = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER, 0); | ||
| 500 | if (data->texture) { | ||
| 501 | data->texture_external = true; | ||
| 502 | } else { | ||
| 503 | GL_CheckError("", renderer); | ||
| 504 | renderdata->glGenTextures(1, &data->texture); | ||
| 505 | if (!GL_CheckError("glGenTextures()", renderer)) { | ||
| 506 | if (data->pixels) { | ||
| 507 | SDL_free(data->pixels); | ||
| 508 | } | ||
| 509 | SDL_free(data); | ||
| 510 | return false; | ||
| 511 | } | ||
| 512 | } | ||
| 513 | texture->internal = data; | ||
| 514 | |||
| 515 | if (renderdata->GL_ARB_texture_non_power_of_two_supported) { | ||
| 516 | texture_w = texture->w; | ||
| 517 | texture_h = texture->h; | ||
| 518 | data->texw = 1.0f; | ||
| 519 | data->texh = 1.0f; | ||
| 520 | } else if (renderdata->GL_ARB_texture_rectangle_supported) { | ||
| 521 | texture_w = texture->w; | ||
| 522 | texture_h = texture->h; | ||
| 523 | data->texw = (GLfloat)texture_w; | ||
| 524 | data->texh = (GLfloat)texture_h; | ||
| 525 | } else { | ||
| 526 | texture_w = SDL_powerof2(texture->w); | ||
| 527 | texture_h = SDL_powerof2(texture->h); | ||
| 528 | data->texw = (GLfloat)(texture->w) / texture_w; | ||
| 529 | data->texh = (GLfloat)texture->h / texture_h; | ||
| 530 | } | ||
| 531 | SDL_PropertiesID props = SDL_GetTextureProperties(texture); | ||
| 532 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER, data->texture); | ||
| 533 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER, (Sint64) textype); | ||
| 534 | SDL_SetFloatProperty(props, SDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT, data->texw); | ||
| 535 | SDL_SetFloatProperty(props, SDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT, data->texh); | ||
| 536 | |||
| 537 | data->format = format; | ||
| 538 | data->formattype = type; | ||
| 539 | scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? GL_NEAREST : GL_LINEAR; | ||
| 540 | renderdata->glEnable(textype); | ||
| 541 | renderdata->glBindTexture(textype, data->texture); | ||
| 542 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, scaleMode); | ||
| 543 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, scaleMode); | ||
| 544 | #ifdef SDL_PLATFORM_MACOS | ||
| 545 | #ifndef GL_TEXTURE_STORAGE_HINT_APPLE | ||
| 546 | #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC | ||
| 547 | #endif | ||
| 548 | #ifndef STORAGE_CACHED_APPLE | ||
| 549 | #define STORAGE_CACHED_APPLE 0x85BE | ||
| 550 | #endif | ||
| 551 | #ifndef STORAGE_SHARED_APPLE | ||
| 552 | #define STORAGE_SHARED_APPLE 0x85BF | ||
| 553 | #endif | ||
| 554 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 555 | renderdata->glTexParameteri(textype, GL_TEXTURE_STORAGE_HINT_APPLE, | ||
| 556 | GL_STORAGE_SHARED_APPLE); | ||
| 557 | } else { | ||
| 558 | renderdata->glTexParameteri(textype, GL_TEXTURE_STORAGE_HINT_APPLE, | ||
| 559 | GL_STORAGE_CACHED_APPLE); | ||
| 560 | } | ||
| 561 | if (texture->access == SDL_TEXTUREACCESS_STREAMING && texture->format == SDL_PIXELFORMAT_ARGB8888 && (texture->w % 8) == 0) { | ||
| 562 | renderdata->glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE); | ||
| 563 | renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | ||
| 564 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, | ||
| 565 | (data->pitch / SDL_BYTESPERPIXEL(texture->format))); | ||
| 566 | renderdata->glTexImage2D(textype, 0, internalFormat, texture_w, | ||
| 567 | texture_h, 0, format, type, data->pixels); | ||
| 568 | renderdata->glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE); | ||
| 569 | } else | ||
| 570 | #endif | ||
| 571 | { | ||
| 572 | renderdata->glTexImage2D(textype, 0, internalFormat, texture_w, | ||
| 573 | texture_h, 0, format, type, NULL); | ||
| 574 | } | ||
| 575 | renderdata->glDisable(textype); | ||
| 576 | if (!GL_CheckError("glTexImage2D()", renderer)) { | ||
| 577 | return false; | ||
| 578 | } | ||
| 579 | |||
| 580 | #ifdef SDL_HAVE_YUV | ||
| 581 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 582 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 583 | data->yuv = true; | ||
| 584 | |||
| 585 | data->utexture = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER, 0); | ||
| 586 | if (data->utexture) { | ||
| 587 | data->utexture_external = true; | ||
| 588 | } else { | ||
| 589 | renderdata->glGenTextures(1, &data->utexture); | ||
| 590 | } | ||
| 591 | data->vtexture = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER, 0); | ||
| 592 | if (data->vtexture) { | ||
| 593 | data->vtexture_external = true; | ||
| 594 | } else { | ||
| 595 | renderdata->glGenTextures(1, &data->vtexture); | ||
| 596 | } | ||
| 597 | |||
| 598 | renderdata->glBindTexture(textype, data->utexture); | ||
| 599 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, | ||
| 600 | scaleMode); | ||
| 601 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, | ||
| 602 | scaleMode); | ||
| 603 | renderdata->glTexImage2D(textype, 0, internalFormat, (texture_w + 1) / 2, | ||
| 604 | (texture_h + 1) / 2, 0, format, type, NULL); | ||
| 605 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER, data->utexture); | ||
| 606 | |||
| 607 | renderdata->glBindTexture(textype, data->vtexture); | ||
| 608 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, | ||
| 609 | scaleMode); | ||
| 610 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, | ||
| 611 | scaleMode); | ||
| 612 | renderdata->glTexImage2D(textype, 0, internalFormat, (texture_w + 1) / 2, | ||
| 613 | (texture_h + 1) / 2, 0, format, type, NULL); | ||
| 614 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER, data->vtexture); | ||
| 615 | } | ||
| 616 | |||
| 617 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 618 | texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 619 | data->nv12 = true; | ||
| 620 | |||
| 621 | data->utexture = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER, 0); | ||
| 622 | if (data->utexture) { | ||
| 623 | data->utexture_external = true; | ||
| 624 | } else { | ||
| 625 | renderdata->glGenTextures(1, &data->utexture); | ||
| 626 | } | ||
| 627 | renderdata->glBindTexture(textype, data->utexture); | ||
| 628 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, | ||
| 629 | scaleMode); | ||
| 630 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, | ||
| 631 | scaleMode); | ||
| 632 | renderdata->glTexImage2D(textype, 0, GL_LUMINANCE_ALPHA, (texture_w + 1) / 2, | ||
| 633 | (texture_h + 1) / 2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NULL); | ||
| 634 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER, data->utexture); | ||
| 635 | } | ||
| 636 | #endif | ||
| 637 | |||
| 638 | if (texture->format == SDL_PIXELFORMAT_ABGR8888 || texture->format == SDL_PIXELFORMAT_ARGB8888) { | ||
| 639 | data->shader = SHADER_RGBA; | ||
| 640 | } else { | ||
| 641 | data->shader = SHADER_RGB; | ||
| 642 | } | ||
| 643 | |||
| 644 | #ifdef SDL_HAVE_YUV | ||
| 645 | if (data->yuv || data->nv12) { | ||
| 646 | if (data->yuv) { | ||
| 647 | data->shader = SHADER_YUV; | ||
| 648 | } else if (texture->format == SDL_PIXELFORMAT_NV12) { | ||
| 649 | if (SDL_GetHintBoolean("SDL_RENDER_OPENGL_NV12_RG_SHADER", false)) { | ||
| 650 | data->shader = SHADER_NV12_RG; | ||
| 651 | } else { | ||
| 652 | data->shader = SHADER_NV12_RA; | ||
| 653 | } | ||
| 654 | } else { | ||
| 655 | if (SDL_GetHintBoolean("SDL_RENDER_OPENGL_NV12_RG_SHADER", false)) { | ||
| 656 | data->shader = SHADER_NV21_RG; | ||
| 657 | } else { | ||
| 658 | data->shader = SHADER_NV21_RA; | ||
| 659 | } | ||
| 660 | } | ||
| 661 | data->shader_params = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8); | ||
| 662 | if (!data->shader_params) { | ||
| 663 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 664 | } | ||
| 665 | } | ||
| 666 | #endif // SDL_HAVE_YUV | ||
| 667 | |||
| 668 | return GL_CheckError("", renderer); | ||
| 669 | } | ||
| 670 | |||
| 671 | static bool GL_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 672 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 673 | { | ||
| 674 | GL_RenderData *renderdata = (GL_RenderData *)renderer->internal; | ||
| 675 | const GLenum textype = renderdata->textype; | ||
| 676 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 677 | const int texturebpp = SDL_BYTESPERPIXEL(texture->format); | ||
| 678 | |||
| 679 | SDL_assert_release(texturebpp != 0); // otherwise, division by zero later. | ||
| 680 | |||
| 681 | GL_ActivateRenderer(renderer); | ||
| 682 | |||
| 683 | renderdata->drawstate.texture = NULL; // we trash this state. | ||
| 684 | |||
| 685 | renderdata->glBindTexture(textype, data->texture); | ||
| 686 | renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | ||
| 687 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, (pitch / texturebpp)); | ||
| 688 | renderdata->glTexSubImage2D(textype, 0, rect->x, rect->y, rect->w, | ||
| 689 | rect->h, data->format, data->formattype, | ||
| 690 | pixels); | ||
| 691 | #ifdef SDL_HAVE_YUV | ||
| 692 | if (data->yuv) { | ||
| 693 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, ((pitch + 1) / 2)); | ||
| 694 | |||
| 695 | // Skip to the correct offset into the next texture | ||
| 696 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 697 | if (texture->format == SDL_PIXELFORMAT_YV12) { | ||
| 698 | renderdata->glBindTexture(textype, data->vtexture); | ||
| 699 | } else { | ||
| 700 | renderdata->glBindTexture(textype, data->utexture); | ||
| 701 | } | ||
| 702 | renderdata->glTexSubImage2D(textype, 0, rect->x / 2, rect->y / 2, | ||
| 703 | (rect->w + 1) / 2, (rect->h + 1) / 2, | ||
| 704 | data->format, data->formattype, pixels); | ||
| 705 | |||
| 706 | // Skip to the correct offset into the next texture | ||
| 707 | pixels = (const void *)((const Uint8 *)pixels + ((rect->h + 1) / 2) * ((pitch + 1) / 2)); | ||
| 708 | if (texture->format == SDL_PIXELFORMAT_YV12) { | ||
| 709 | renderdata->glBindTexture(textype, data->utexture); | ||
| 710 | } else { | ||
| 711 | renderdata->glBindTexture(textype, data->vtexture); | ||
| 712 | } | ||
| 713 | renderdata->glTexSubImage2D(textype, 0, rect->x / 2, rect->y / 2, | ||
| 714 | (rect->w + 1) / 2, (rect->h + 1) / 2, | ||
| 715 | data->format, data->formattype, pixels); | ||
| 716 | } | ||
| 717 | |||
| 718 | if (data->nv12) { | ||
| 719 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, ((pitch + 1) / 2)); | ||
| 720 | |||
| 721 | // Skip to the correct offset into the next texture | ||
| 722 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 723 | renderdata->glBindTexture(textype, data->utexture); | ||
| 724 | renderdata->glTexSubImage2D(textype, 0, rect->x / 2, rect->y / 2, | ||
| 725 | (rect->w + 1) / 2, (rect->h + 1) / 2, | ||
| 726 | GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, pixels); | ||
| 727 | } | ||
| 728 | #endif | ||
| 729 | return GL_CheckError("glTexSubImage2D()", renderer); | ||
| 730 | } | ||
| 731 | |||
| 732 | #ifdef SDL_HAVE_YUV | ||
| 733 | static bool GL_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 734 | const SDL_Rect *rect, | ||
| 735 | const Uint8 *Yplane, int Ypitch, | ||
| 736 | const Uint8 *Uplane, int Upitch, | ||
| 737 | const Uint8 *Vplane, int Vpitch) | ||
| 738 | { | ||
| 739 | GL_RenderData *renderdata = (GL_RenderData *)renderer->internal; | ||
| 740 | const GLenum textype = renderdata->textype; | ||
| 741 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 742 | |||
| 743 | GL_ActivateRenderer(renderer); | ||
| 744 | |||
| 745 | renderdata->drawstate.texture = NULL; // we trash this state. | ||
| 746 | |||
| 747 | renderdata->glBindTexture(textype, data->texture); | ||
| 748 | renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | ||
| 749 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, Ypitch); | ||
| 750 | renderdata->glTexSubImage2D(textype, 0, rect->x, rect->y, rect->w, | ||
| 751 | rect->h, data->format, data->formattype, | ||
| 752 | Yplane); | ||
| 753 | |||
| 754 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, Upitch); | ||
| 755 | renderdata->glBindTexture(textype, data->utexture); | ||
| 756 | renderdata->glTexSubImage2D(textype, 0, rect->x / 2, rect->y / 2, | ||
| 757 | (rect->w + 1) / 2, (rect->h + 1) / 2, | ||
| 758 | data->format, data->formattype, Uplane); | ||
| 759 | |||
| 760 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, Vpitch); | ||
| 761 | renderdata->glBindTexture(textype, data->vtexture); | ||
| 762 | renderdata->glTexSubImage2D(textype, 0, rect->x / 2, rect->y / 2, | ||
| 763 | (rect->w + 1) / 2, (rect->h + 1) / 2, | ||
| 764 | data->format, data->formattype, Vplane); | ||
| 765 | |||
| 766 | return GL_CheckError("glTexSubImage2D()", renderer); | ||
| 767 | } | ||
| 768 | |||
| 769 | static bool GL_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 770 | const SDL_Rect *rect, | ||
| 771 | const Uint8 *Yplane, int Ypitch, | ||
| 772 | const Uint8 *UVplane, int UVpitch) | ||
| 773 | { | ||
| 774 | GL_RenderData *renderdata = (GL_RenderData *)renderer->internal; | ||
| 775 | const GLenum textype = renderdata->textype; | ||
| 776 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 777 | |||
| 778 | GL_ActivateRenderer(renderer); | ||
| 779 | |||
| 780 | renderdata->drawstate.texture = NULL; // we trash this state. | ||
| 781 | |||
| 782 | renderdata->glBindTexture(textype, data->texture); | ||
| 783 | renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | ||
| 784 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, Ypitch); | ||
| 785 | renderdata->glTexSubImage2D(textype, 0, rect->x, rect->y, rect->w, | ||
| 786 | rect->h, data->format, data->formattype, | ||
| 787 | Yplane); | ||
| 788 | |||
| 789 | renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, UVpitch / 2); | ||
| 790 | renderdata->glBindTexture(textype, data->utexture); | ||
| 791 | renderdata->glTexSubImage2D(textype, 0, rect->x / 2, rect->y / 2, | ||
| 792 | (rect->w + 1) / 2, (rect->h + 1) / 2, | ||
| 793 | GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, UVplane); | ||
| 794 | |||
| 795 | return GL_CheckError("glTexSubImage2D()", renderer); | ||
| 796 | } | ||
| 797 | #endif | ||
| 798 | |||
| 799 | static bool GL_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 800 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 801 | { | ||
| 802 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 803 | |||
| 804 | data->locked_rect = *rect; | ||
| 805 | *pixels = | ||
| 806 | (void *)((Uint8 *)data->pixels + rect->y * data->pitch + | ||
| 807 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 808 | *pitch = data->pitch; | ||
| 809 | return true; | ||
| 810 | } | ||
| 811 | |||
| 812 | static void GL_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 813 | { | ||
| 814 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 815 | const SDL_Rect *rect; | ||
| 816 | void *pixels; | ||
| 817 | |||
| 818 | rect = &data->locked_rect; | ||
| 819 | pixels = | ||
| 820 | (void *)((Uint8 *)data->pixels + rect->y * data->pitch + | ||
| 821 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 822 | GL_UpdateTexture(renderer, texture, rect, pixels, data->pitch); | ||
| 823 | } | ||
| 824 | |||
| 825 | static void GL_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 826 | { | ||
| 827 | GL_RenderData *renderdata = (GL_RenderData *)renderer->internal; | ||
| 828 | const GLenum textype = renderdata->textype; | ||
| 829 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 830 | GLenum glScaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? GL_NEAREST : GL_LINEAR; | ||
| 831 | |||
| 832 | renderdata->glBindTexture(textype, data->texture); | ||
| 833 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 834 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 835 | |||
| 836 | #ifdef SDL_HAVE_YUV | ||
| 837 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 838 | texture->format == SDL_PIXELFORMAT_IYUV) { | ||
| 839 | renderdata->glBindTexture(textype, data->utexture); | ||
| 840 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 841 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 842 | |||
| 843 | renderdata->glBindTexture(textype, data->vtexture); | ||
| 844 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 845 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 846 | } | ||
| 847 | |||
| 848 | if (texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 849 | texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 850 | renderdata->glBindTexture(textype, data->utexture); | ||
| 851 | renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 852 | renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 853 | } | ||
| 854 | #endif | ||
| 855 | } | ||
| 856 | |||
| 857 | static bool GL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 858 | { | ||
| 859 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 860 | GL_TextureData *texturedata; | ||
| 861 | GLenum status; | ||
| 862 | |||
| 863 | GL_ActivateRenderer(renderer); | ||
| 864 | |||
| 865 | if (!data->GL_EXT_framebuffer_object_supported) { | ||
| 866 | return SDL_SetError("Render targets not supported by OpenGL"); | ||
| 867 | } | ||
| 868 | |||
| 869 | data->drawstate.viewport_dirty = true; | ||
| 870 | |||
| 871 | if (!texture) { | ||
| 872 | data->glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | ||
| 873 | return true; | ||
| 874 | } | ||
| 875 | |||
| 876 | texturedata = (GL_TextureData *)texture->internal; | ||
| 877 | data->glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, texturedata->fbo->FBO); | ||
| 878 | // TODO: check if texture pixel format allows this operation | ||
| 879 | data->glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, data->textype, texturedata->texture, 0); | ||
| 880 | // Check FBO status | ||
| 881 | status = data->glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | ||
| 882 | if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { | ||
| 883 | return SDL_SetError("glFramebufferTexture2DEXT() failed"); | ||
| 884 | } | ||
| 885 | return true; | ||
| 886 | } | ||
| 887 | |||
| 888 | /* !!! FIXME: all these Queue* calls set up the vertex buffer the way the immediate mode | ||
| 889 | !!! FIXME: renderer wants it, but this might want to operate differently if we move to | ||
| 890 | !!! FIXME: VBOs at some point. */ | ||
| 891 | static bool GL_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 892 | { | ||
| 893 | return true; // nothing to do in this backend. | ||
| 894 | } | ||
| 895 | |||
| 896 | static bool GL_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 897 | { | ||
| 898 | GLfloat *verts = (GLfloat *)SDL_AllocateRenderVertices(renderer, count * 2 * sizeof(GLfloat), 0, &cmd->data.draw.first); | ||
| 899 | int i; | ||
| 900 | |||
| 901 | if (!verts) { | ||
| 902 | return false; | ||
| 903 | } | ||
| 904 | |||
| 905 | cmd->data.draw.count = count; | ||
| 906 | for (i = 0; i < count; i++) { | ||
| 907 | *(verts++) = 0.5f + points[i].x; | ||
| 908 | *(verts++) = 0.5f + points[i].y; | ||
| 909 | } | ||
| 910 | |||
| 911 | return true; | ||
| 912 | } | ||
| 913 | |||
| 914 | static bool GL_QueueDrawLines(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 915 | { | ||
| 916 | int i; | ||
| 917 | GLfloat prevx, prevy; | ||
| 918 | const size_t vertlen = (sizeof(GLfloat) * 2) * count; | ||
| 919 | GLfloat *verts = (GLfloat *)SDL_AllocateRenderVertices(renderer, vertlen, 0, &cmd->data.draw.first); | ||
| 920 | |||
| 921 | if (!verts) { | ||
| 922 | return false; | ||
| 923 | } | ||
| 924 | cmd->data.draw.count = count; | ||
| 925 | |||
| 926 | // 0.5f offset to hit the center of the pixel. | ||
| 927 | prevx = 0.5f + points->x; | ||
| 928 | prevy = 0.5f + points->y; | ||
| 929 | *(verts++) = prevx; | ||
| 930 | *(verts++) = prevy; | ||
| 931 | |||
| 932 | /* bump the end of each line segment out a quarter of a pixel, to provoke | ||
| 933 | the diamond-exit rule. Without this, you won't just drop the last | ||
| 934 | pixel of the last line segment, but you might also drop pixels at the | ||
| 935 | edge of any given line segment along the way too. */ | ||
| 936 | for (i = 1; i < count; i++) { | ||
| 937 | const GLfloat xstart = prevx; | ||
| 938 | const GLfloat ystart = prevy; | ||
| 939 | const GLfloat xend = points[i].x + 0.5f; // 0.5f to hit pixel center. | ||
| 940 | const GLfloat yend = points[i].y + 0.5f; | ||
| 941 | // bump a little in the direction we are moving in. | ||
| 942 | const GLfloat deltax = xend - xstart; | ||
| 943 | const GLfloat deltay = yend - ystart; | ||
| 944 | const GLfloat angle = SDL_atan2f(deltay, deltax); | ||
| 945 | prevx = xend + (SDL_cosf(angle) * 0.25f); | ||
| 946 | prevy = yend + (SDL_sinf(angle) * 0.25f); | ||
| 947 | *(verts++) = prevx; | ||
| 948 | *(verts++) = prevy; | ||
| 949 | } | ||
| 950 | |||
| 951 | return true; | ||
| 952 | } | ||
| 953 | |||
| 954 | static bool GL_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 955 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 956 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 957 | float scale_x, float scale_y) | ||
| 958 | { | ||
| 959 | GL_TextureData *texturedata = NULL; | ||
| 960 | int i; | ||
| 961 | int count = indices ? num_indices : num_vertices; | ||
| 962 | GLfloat *verts; | ||
| 963 | size_t sz = 2 * sizeof(GLfloat) + 4 * sizeof(GLfloat) + (texture ? 2 : 0) * sizeof(GLfloat); | ||
| 964 | const float color_scale = cmd->data.draw.color_scale; | ||
| 965 | |||
| 966 | verts = (GLfloat *)SDL_AllocateRenderVertices(renderer, count * sz, 0, &cmd->data.draw.first); | ||
| 967 | if (!verts) { | ||
| 968 | return false; | ||
| 969 | } | ||
| 970 | |||
| 971 | if (texture) { | ||
| 972 | texturedata = (GL_TextureData *)texture->internal; | ||
| 973 | } | ||
| 974 | |||
| 975 | cmd->data.draw.count = count; | ||
| 976 | size_indices = indices ? size_indices : 0; | ||
| 977 | |||
| 978 | for (i = 0; i < count; i++) { | ||
| 979 | int j; | ||
| 980 | float *xy_; | ||
| 981 | SDL_FColor *col_; | ||
| 982 | if (size_indices == 4) { | ||
| 983 | j = ((const Uint32 *)indices)[i]; | ||
| 984 | } else if (size_indices == 2) { | ||
| 985 | j = ((const Uint16 *)indices)[i]; | ||
| 986 | } else if (size_indices == 1) { | ||
| 987 | j = ((const Uint8 *)indices)[i]; | ||
| 988 | } else { | ||
| 989 | j = i; | ||
| 990 | } | ||
| 991 | |||
| 992 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 993 | |||
| 994 | *(verts++) = xy_[0] * scale_x; | ||
| 995 | *(verts++) = xy_[1] * scale_y; | ||
| 996 | |||
| 997 | col_ = (SDL_FColor *)((char *)color + j * color_stride); | ||
| 998 | *(verts++) = col_->r * color_scale; | ||
| 999 | *(verts++) = col_->g * color_scale; | ||
| 1000 | *(verts++) = col_->b * color_scale; | ||
| 1001 | *(verts++) = col_->a; | ||
| 1002 | |||
| 1003 | if (texture) { | ||
| 1004 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 1005 | *(verts++) = uv_[0] * texturedata->texw; | ||
| 1006 | *(verts++) = uv_[1] * texturedata->texh; | ||
| 1007 | } | ||
| 1008 | } | ||
| 1009 | return true; | ||
| 1010 | } | ||
| 1011 | |||
| 1012 | static bool SetDrawState(GL_RenderData *data, const SDL_RenderCommand *cmd, const GL_Shader shader, const float *shader_params) | ||
| 1013 | { | ||
| 1014 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 1015 | bool vertex_array; | ||
| 1016 | bool color_array; | ||
| 1017 | bool texture_array; | ||
| 1018 | |||
| 1019 | if (data->drawstate.viewport_dirty) { | ||
| 1020 | const bool istarget = data->drawstate.target != NULL; | ||
| 1021 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1022 | data->glMatrixMode(GL_PROJECTION); | ||
| 1023 | data->glLoadIdentity(); | ||
| 1024 | data->glViewport(viewport->x, | ||
| 1025 | istarget ? viewport->y : (data->drawstate.drawableh - viewport->y - viewport->h), | ||
| 1026 | viewport->w, viewport->h); | ||
| 1027 | if (viewport->w && viewport->h) { | ||
| 1028 | data->glOrtho((GLdouble)0, (GLdouble)viewport->w, | ||
| 1029 | (GLdouble)(istarget ? 0 : viewport->h), | ||
| 1030 | (GLdouble)(istarget ? viewport->h : 0), | ||
| 1031 | 0.0, 1.0); | ||
| 1032 | } | ||
| 1033 | data->glMatrixMode(GL_MODELVIEW); | ||
| 1034 | data->drawstate.viewport_dirty = false; | ||
| 1035 | } | ||
| 1036 | |||
| 1037 | if (data->drawstate.cliprect_enabled_dirty) { | ||
| 1038 | if (!data->drawstate.cliprect_enabled) { | ||
| 1039 | data->glDisable(GL_SCISSOR_TEST); | ||
| 1040 | } else { | ||
| 1041 | data->glEnable(GL_SCISSOR_TEST); | ||
| 1042 | } | ||
| 1043 | data->drawstate.cliprect_enabled_dirty = false; | ||
| 1044 | } | ||
| 1045 | |||
| 1046 | if (data->drawstate.cliprect_enabled && data->drawstate.cliprect_dirty) { | ||
| 1047 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1048 | const SDL_Rect *rect = &data->drawstate.cliprect; | ||
| 1049 | data->glScissor(viewport->x + rect->x, | ||
| 1050 | data->drawstate.target ? viewport->y + rect->y : data->drawstate.drawableh - viewport->y - rect->y - rect->h, | ||
| 1051 | rect->w, rect->h); | ||
| 1052 | data->drawstate.cliprect_dirty = false; | ||
| 1053 | } | ||
| 1054 | |||
| 1055 | if (blend != data->drawstate.blend) { | ||
| 1056 | if (blend == SDL_BLENDMODE_NONE) { | ||
| 1057 | data->glDisable(GL_BLEND); | ||
| 1058 | } else { | ||
| 1059 | data->glEnable(GL_BLEND); | ||
| 1060 | data->glBlendFuncSeparate(GetBlendFunc(SDL_GetBlendModeSrcColorFactor(blend)), | ||
| 1061 | GetBlendFunc(SDL_GetBlendModeDstColorFactor(blend)), | ||
| 1062 | GetBlendFunc(SDL_GetBlendModeSrcAlphaFactor(blend)), | ||
| 1063 | GetBlendFunc(SDL_GetBlendModeDstAlphaFactor(blend))); | ||
| 1064 | data->glBlendEquation(GetBlendEquation(SDL_GetBlendModeColorOperation(blend))); | ||
| 1065 | } | ||
| 1066 | data->drawstate.blend = blend; | ||
| 1067 | } | ||
| 1068 | |||
| 1069 | if (data->shaders && | ||
| 1070 | (shader != data->drawstate.shader || shader_params != data->drawstate.shader_params)) { | ||
| 1071 | GL_SelectShader(data->shaders, shader, shader_params); | ||
| 1072 | data->drawstate.shader = shader; | ||
| 1073 | data->drawstate.shader_params = shader_params; | ||
| 1074 | } | ||
| 1075 | |||
| 1076 | if (data->drawstate.texturing_dirty || ((cmd->data.draw.texture != NULL) != data->drawstate.texturing)) { | ||
| 1077 | if (!cmd->data.draw.texture) { | ||
| 1078 | data->glDisable(data->textype); | ||
| 1079 | data->drawstate.texturing = false; | ||
| 1080 | } else { | ||
| 1081 | data->glEnable(data->textype); | ||
| 1082 | data->drawstate.texturing = true; | ||
| 1083 | } | ||
| 1084 | data->drawstate.texturing_dirty = false; | ||
| 1085 | } | ||
| 1086 | |||
| 1087 | vertex_array = cmd->command == SDL_RENDERCMD_DRAW_POINTS || cmd->command == SDL_RENDERCMD_DRAW_LINES || cmd->command == SDL_RENDERCMD_GEOMETRY; | ||
| 1088 | color_array = cmd->command == SDL_RENDERCMD_GEOMETRY; | ||
| 1089 | texture_array = cmd->data.draw.texture != NULL; | ||
| 1090 | |||
| 1091 | if (vertex_array != data->drawstate.vertex_array) { | ||
| 1092 | if (vertex_array) { | ||
| 1093 | data->glEnableClientState(GL_VERTEX_ARRAY); | ||
| 1094 | } else { | ||
| 1095 | data->glDisableClientState(GL_VERTEX_ARRAY); | ||
| 1096 | } | ||
| 1097 | data->drawstate.vertex_array = vertex_array; | ||
| 1098 | } | ||
| 1099 | |||
| 1100 | if (color_array != data->drawstate.color_array) { | ||
| 1101 | if (color_array) { | ||
| 1102 | data->glEnableClientState(GL_COLOR_ARRAY); | ||
| 1103 | } else { | ||
| 1104 | data->glDisableClientState(GL_COLOR_ARRAY); | ||
| 1105 | } | ||
| 1106 | data->drawstate.color_array = color_array; | ||
| 1107 | } | ||
| 1108 | |||
| 1109 | /* This is a little awkward but should avoid texcoord arrays getting into | ||
| 1110 | a bad state if the application is manually binding textures */ | ||
| 1111 | if (texture_array != data->drawstate.texture_array) { | ||
| 1112 | if (texture_array) { | ||
| 1113 | data->glEnableClientState(GL_TEXTURE_COORD_ARRAY); | ||
| 1114 | } else { | ||
| 1115 | data->glDisableClientState(GL_TEXTURE_COORD_ARRAY); | ||
| 1116 | } | ||
| 1117 | data->drawstate.texture_array = texture_array; | ||
| 1118 | } | ||
| 1119 | |||
| 1120 | return true; | ||
| 1121 | } | ||
| 1122 | |||
| 1123 | static bool SetTextureAddressMode(GL_RenderData *data, GLenum textype, SDL_TextureAddressMode addressMode) | ||
| 1124 | { | ||
| 1125 | switch (addressMode) { | ||
| 1126 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 1127 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | ||
| 1128 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | ||
| 1129 | break; | ||
| 1130 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 1131 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_S, GL_REPEAT); | ||
| 1132 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_T, GL_REPEAT); | ||
| 1133 | break; | ||
| 1134 | default: | ||
| 1135 | return SDL_SetError("Unknown texture address mode: %d", addressMode); | ||
| 1136 | } | ||
| 1137 | return true; | ||
| 1138 | } | ||
| 1139 | |||
| 1140 | static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd) | ||
| 1141 | { | ||
| 1142 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 1143 | const GL_TextureData *texturedata = (GL_TextureData *)texture->internal; | ||
| 1144 | |||
| 1145 | SetDrawState(data, cmd, texturedata->shader, texturedata->shader_params); | ||
| 1146 | |||
| 1147 | if (texture != data->drawstate.texture) { | ||
| 1148 | const GLenum textype = data->textype; | ||
| 1149 | #ifdef SDL_HAVE_YUV | ||
| 1150 | if (texturedata->yuv) { | ||
| 1151 | if (data->GL_ARB_multitexture_supported) { | ||
| 1152 | data->glActiveTextureARB(GL_TEXTURE2_ARB); | ||
| 1153 | } | ||
| 1154 | data->glBindTexture(textype, texturedata->vtexture); | ||
| 1155 | |||
| 1156 | if (!SetTextureAddressMode(data, textype, cmd->data.draw.texture_address_mode)) { | ||
| 1157 | return false; | ||
| 1158 | } | ||
| 1159 | |||
| 1160 | if (data->GL_ARB_multitexture_supported) { | ||
| 1161 | data->glActiveTextureARB(GL_TEXTURE1_ARB); | ||
| 1162 | } | ||
| 1163 | data->glBindTexture(textype, texturedata->utexture); | ||
| 1164 | |||
| 1165 | if (!SetTextureAddressMode(data, textype, cmd->data.draw.texture_address_mode)) { | ||
| 1166 | return false; | ||
| 1167 | } | ||
| 1168 | } | ||
| 1169 | if (texturedata->nv12) { | ||
| 1170 | if (data->GL_ARB_multitexture_supported) { | ||
| 1171 | data->glActiveTextureARB(GL_TEXTURE1_ARB); | ||
| 1172 | } | ||
| 1173 | data->glBindTexture(textype, texturedata->utexture); | ||
| 1174 | |||
| 1175 | if (!SetTextureAddressMode(data, textype, cmd->data.draw.texture_address_mode)) { | ||
| 1176 | return false; | ||
| 1177 | } | ||
| 1178 | } | ||
| 1179 | #endif | ||
| 1180 | if (data->GL_ARB_multitexture_supported) { | ||
| 1181 | data->glActiveTextureARB(GL_TEXTURE0_ARB); | ||
| 1182 | } | ||
| 1183 | data->glBindTexture(textype, texturedata->texture); | ||
| 1184 | |||
| 1185 | if (!SetTextureAddressMode(data, textype, cmd->data.draw.texture_address_mode)) { | ||
| 1186 | return false; | ||
| 1187 | } | ||
| 1188 | |||
| 1189 | data->drawstate.texture = texture; | ||
| 1190 | } | ||
| 1191 | |||
| 1192 | return true; | ||
| 1193 | } | ||
| 1194 | |||
| 1195 | static void GL_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 1196 | { | ||
| 1197 | GL_DrawStateCache *cache = &((GL_RenderData *)renderer->internal)->drawstate; | ||
| 1198 | cache->viewport_dirty = true; | ||
| 1199 | cache->texture = NULL; | ||
| 1200 | cache->drawablew = 0; | ||
| 1201 | cache->drawableh = 0; | ||
| 1202 | cache->blend = SDL_BLENDMODE_INVALID; | ||
| 1203 | cache->shader = SHADER_INVALID; | ||
| 1204 | cache->cliprect_enabled_dirty = true; | ||
| 1205 | cache->cliprect_dirty = true; | ||
| 1206 | cache->texturing_dirty = true; | ||
| 1207 | cache->vertex_array = false; // !!! FIXME: this resets to false at the end of GL_RunCommandQueue, but we could cache this more aggressively. | ||
| 1208 | cache->color_array = false; // !!! FIXME: this resets to false at the end of GL_RunCommandQueue, but we could cache this more aggressively. | ||
| 1209 | cache->texture_array = false; // !!! FIXME: this resets to false at the end of GL_RunCommandQueue, but we could cache this more aggressively. | ||
| 1210 | cache->color_dirty = true; | ||
| 1211 | cache->clear_color_dirty = true; | ||
| 1212 | } | ||
| 1213 | |||
| 1214 | static bool GL_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 1215 | { | ||
| 1216 | // !!! FIXME: it'd be nice to use a vertex buffer instead of immediate mode... | ||
| 1217 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 1218 | |||
| 1219 | if (!GL_ActivateRenderer(renderer)) { | ||
| 1220 | return false; | ||
| 1221 | } | ||
| 1222 | |||
| 1223 | data->drawstate.target = renderer->target; | ||
| 1224 | if (!data->drawstate.target) { | ||
| 1225 | int w, h; | ||
| 1226 | SDL_GetWindowSizeInPixels(renderer->window, &w, &h); | ||
| 1227 | if ((w != data->drawstate.drawablew) || (h != data->drawstate.drawableh)) { | ||
| 1228 | data->drawstate.viewport_dirty = true; // if the window dimensions changed, invalidate the current viewport, etc. | ||
| 1229 | data->drawstate.cliprect_dirty = true; | ||
| 1230 | data->drawstate.drawablew = w; | ||
| 1231 | data->drawstate.drawableh = h; | ||
| 1232 | } | ||
| 1233 | } | ||
| 1234 | |||
| 1235 | #ifdef SDL_PLATFORM_MACOS | ||
| 1236 | // On macOS on older systems, the OpenGL view change and resize events aren't | ||
| 1237 | // necessarily synchronized, so just always reset it. | ||
| 1238 | // Workaround for: https://discourse.libsdl.org/t/sdl-2-0-22-prerelease/35306/6 | ||
| 1239 | data->drawstate.viewport_dirty = true; | ||
| 1240 | #endif | ||
| 1241 | |||
| 1242 | while (cmd) { | ||
| 1243 | switch (cmd->command) { | ||
| 1244 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 1245 | { | ||
| 1246 | const float r = cmd->data.color.color.r * cmd->data.color.color_scale; | ||
| 1247 | const float g = cmd->data.color.color.g * cmd->data.color.color_scale; | ||
| 1248 | const float b = cmd->data.color.color.b * cmd->data.color.color_scale; | ||
| 1249 | const float a = cmd->data.color.color.a; | ||
| 1250 | if (data->drawstate.color_dirty || | ||
| 1251 | (r != data->drawstate.color.r) || | ||
| 1252 | (g != data->drawstate.color.g) || | ||
| 1253 | (b != data->drawstate.color.b) || | ||
| 1254 | (a != data->drawstate.color.a)) { | ||
| 1255 | data->glColor4f(r, g, b, a); | ||
| 1256 | data->drawstate.color.r = r; | ||
| 1257 | data->drawstate.color.g = g; | ||
| 1258 | data->drawstate.color.b = b; | ||
| 1259 | data->drawstate.color.a = a; | ||
| 1260 | data->drawstate.color_dirty = false; | ||
| 1261 | } | ||
| 1262 | break; | ||
| 1263 | } | ||
| 1264 | |||
| 1265 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 1266 | { | ||
| 1267 | SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1268 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 1269 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 1270 | data->drawstate.viewport_dirty = true; | ||
| 1271 | data->drawstate.cliprect_dirty = true; | ||
| 1272 | } | ||
| 1273 | break; | ||
| 1274 | } | ||
| 1275 | |||
| 1276 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 1277 | { | ||
| 1278 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 1279 | if (data->drawstate.cliprect_enabled != cmd->data.cliprect.enabled) { | ||
| 1280 | data->drawstate.cliprect_enabled = cmd->data.cliprect.enabled; | ||
| 1281 | data->drawstate.cliprect_enabled_dirty = true; | ||
| 1282 | } | ||
| 1283 | |||
| 1284 | if (SDL_memcmp(&data->drawstate.cliprect, rect, sizeof(*rect)) != 0) { | ||
| 1285 | SDL_copyp(&data->drawstate.cliprect, rect); | ||
| 1286 | data->drawstate.cliprect_dirty = true; | ||
| 1287 | } | ||
| 1288 | break; | ||
| 1289 | } | ||
| 1290 | |||
| 1291 | case SDL_RENDERCMD_CLEAR: | ||
| 1292 | { | ||
| 1293 | const float r = cmd->data.color.color.r * cmd->data.color.color_scale; | ||
| 1294 | const float g = cmd->data.color.color.g * cmd->data.color.color_scale; | ||
| 1295 | const float b = cmd->data.color.color.b * cmd->data.color.color_scale; | ||
| 1296 | const float a = cmd->data.color.color.a; | ||
| 1297 | if (data->drawstate.clear_color_dirty || | ||
| 1298 | (r != data->drawstate.clear_color.r) || | ||
| 1299 | (g != data->drawstate.clear_color.g) || | ||
| 1300 | (b != data->drawstate.clear_color.b) || | ||
| 1301 | (a != data->drawstate.clear_color.a)) { | ||
| 1302 | data->glClearColor(r, g, b, a); | ||
| 1303 | data->drawstate.clear_color.r = r; | ||
| 1304 | data->drawstate.clear_color.g = g; | ||
| 1305 | data->drawstate.clear_color.b = b; | ||
| 1306 | data->drawstate.clear_color.a = a; | ||
| 1307 | data->drawstate.clear_color_dirty = false; | ||
| 1308 | } | ||
| 1309 | |||
| 1310 | if (data->drawstate.cliprect_enabled || data->drawstate.cliprect_enabled_dirty) { | ||
| 1311 | data->glDisable(GL_SCISSOR_TEST); | ||
| 1312 | data->drawstate.cliprect_enabled_dirty = data->drawstate.cliprect_enabled; | ||
| 1313 | } | ||
| 1314 | |||
| 1315 | data->glClear(GL_COLOR_BUFFER_BIT); | ||
| 1316 | break; | ||
| 1317 | } | ||
| 1318 | |||
| 1319 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 1320 | break; | ||
| 1321 | |||
| 1322 | case SDL_RENDERCMD_COPY: // unused | ||
| 1323 | break; | ||
| 1324 | |||
| 1325 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 1326 | break; | ||
| 1327 | |||
| 1328 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 1329 | { | ||
| 1330 | if (SetDrawState(data, cmd, SHADER_SOLID, NULL)) { | ||
| 1331 | size_t count = cmd->data.draw.count; | ||
| 1332 | const GLfloat *verts = (GLfloat *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 1333 | |||
| 1334 | // SetDrawState handles glEnableClientState. | ||
| 1335 | data->glVertexPointer(2, GL_FLOAT, sizeof(float) * 2, verts); | ||
| 1336 | |||
| 1337 | if (count > 2) { | ||
| 1338 | // joined lines cannot be grouped | ||
| 1339 | data->glDrawArrays(GL_LINE_STRIP, 0, (GLsizei)count); | ||
| 1340 | } else { | ||
| 1341 | // let's group non joined lines | ||
| 1342 | SDL_RenderCommand *finalcmd = cmd; | ||
| 1343 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 1344 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 1345 | |||
| 1346 | while (nextcmd) { | ||
| 1347 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 1348 | if (nextcmdtype != SDL_RENDERCMD_DRAW_LINES) { | ||
| 1349 | break; // can't go any further on this draw call, different render command up next. | ||
| 1350 | } else if (nextcmd->data.draw.count != 2) { | ||
| 1351 | break; // can't go any further on this draw call, those are joined lines | ||
| 1352 | } else if (nextcmd->data.draw.blend != thisblend) { | ||
| 1353 | break; // can't go any further on this draw call, different blendmode copy up next. | ||
| 1354 | } else { | ||
| 1355 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 1356 | count += nextcmd->data.draw.count; | ||
| 1357 | } | ||
| 1358 | nextcmd = nextcmd->next; | ||
| 1359 | } | ||
| 1360 | |||
| 1361 | data->glDrawArrays(GL_LINES, 0, (GLsizei)count); | ||
| 1362 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 1363 | } | ||
| 1364 | } | ||
| 1365 | break; | ||
| 1366 | } | ||
| 1367 | |||
| 1368 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 1369 | case SDL_RENDERCMD_GEOMETRY: | ||
| 1370 | { | ||
| 1371 | /* as long as we have the same copy command in a row, with the | ||
| 1372 | same texture, we can combine them all into a single draw call. */ | ||
| 1373 | SDL_Texture *thistexture = cmd->data.draw.texture; | ||
| 1374 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 1375 | const SDL_RenderCommandType thiscmdtype = cmd->command; | ||
| 1376 | SDL_RenderCommand *finalcmd = cmd; | ||
| 1377 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 1378 | size_t count = cmd->data.draw.count; | ||
| 1379 | int ret; | ||
| 1380 | while (nextcmd) { | ||
| 1381 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 1382 | if (nextcmdtype != thiscmdtype) { | ||
| 1383 | break; // can't go any further on this draw call, different render command up next. | ||
| 1384 | } else if (nextcmd->data.draw.texture != thistexture || nextcmd->data.draw.blend != thisblend) { | ||
| 1385 | break; // can't go any further on this draw call, different texture/blendmode copy up next. | ||
| 1386 | } else { | ||
| 1387 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 1388 | count += nextcmd->data.draw.count; | ||
| 1389 | } | ||
| 1390 | nextcmd = nextcmd->next; | ||
| 1391 | } | ||
| 1392 | |||
| 1393 | if (thistexture) { | ||
| 1394 | ret = SetCopyState(data, cmd); | ||
| 1395 | } else { | ||
| 1396 | ret = SetDrawState(data, cmd, SHADER_SOLID, NULL); | ||
| 1397 | } | ||
| 1398 | |||
| 1399 | if (ret) { | ||
| 1400 | const GLfloat *verts = (GLfloat *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 1401 | int op = GL_TRIANGLES; // SDL_RENDERCMD_GEOMETRY | ||
| 1402 | if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS) { | ||
| 1403 | op = GL_POINTS; | ||
| 1404 | } | ||
| 1405 | |||
| 1406 | if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS) { | ||
| 1407 | // SetDrawState handles glEnableClientState. | ||
| 1408 | data->glVertexPointer(2, GL_FLOAT, sizeof(float) * 2, verts); | ||
| 1409 | } else { | ||
| 1410 | // SetDrawState handles glEnableClientState. | ||
| 1411 | if (thistexture) { | ||
| 1412 | data->glVertexPointer(2, GL_FLOAT, sizeof(float) * 8, verts + 0); | ||
| 1413 | data->glColorPointer(4, GL_FLOAT, sizeof(float) * 8, verts + 2); | ||
| 1414 | data->glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 8, verts + 6); | ||
| 1415 | } else { | ||
| 1416 | data->glVertexPointer(2, GL_FLOAT, sizeof(float) * 6, verts + 0); | ||
| 1417 | data->glColorPointer(4, GL_FLOAT, sizeof(float) * 6, verts + 2); | ||
| 1418 | } | ||
| 1419 | } | ||
| 1420 | |||
| 1421 | data->glDrawArrays(op, 0, (GLsizei)count); | ||
| 1422 | |||
| 1423 | // Restore previously set color when we're done. | ||
| 1424 | if (thiscmdtype != SDL_RENDERCMD_DRAW_POINTS) { | ||
| 1425 | const float r = data->drawstate.color.r; | ||
| 1426 | const float g = data->drawstate.color.g; | ||
| 1427 | const float b = data->drawstate.color.b; | ||
| 1428 | const float a = data->drawstate.color.a; | ||
| 1429 | data->glColor4f(r, g, b, a); | ||
| 1430 | } | ||
| 1431 | } | ||
| 1432 | |||
| 1433 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 1434 | break; | ||
| 1435 | } | ||
| 1436 | |||
| 1437 | case SDL_RENDERCMD_NO_OP: | ||
| 1438 | break; | ||
| 1439 | } | ||
| 1440 | |||
| 1441 | cmd = cmd->next; | ||
| 1442 | } | ||
| 1443 | |||
| 1444 | /* Turn off vertex array state when we're done, in case external code | ||
| 1445 | relies on it being off. */ | ||
| 1446 | if (data->drawstate.vertex_array) { | ||
| 1447 | data->glDisableClientState(GL_VERTEX_ARRAY); | ||
| 1448 | data->drawstate.vertex_array = false; | ||
| 1449 | } | ||
| 1450 | if (data->drawstate.color_array) { | ||
| 1451 | data->glDisableClientState(GL_COLOR_ARRAY); | ||
| 1452 | data->drawstate.color_array = false; | ||
| 1453 | } | ||
| 1454 | if (data->drawstate.texture_array) { | ||
| 1455 | data->glDisableClientState(GL_TEXTURE_COORD_ARRAY); | ||
| 1456 | data->drawstate.texture_array = false; | ||
| 1457 | } | ||
| 1458 | |||
| 1459 | return GL_CheckError("", renderer); | ||
| 1460 | } | ||
| 1461 | |||
| 1462 | static SDL_Surface *GL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 1463 | { | ||
| 1464 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 1465 | SDL_PixelFormat format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_ARGB8888; | ||
| 1466 | GLint internalFormat; | ||
| 1467 | GLenum targetFormat, type; | ||
| 1468 | SDL_Surface *surface; | ||
| 1469 | |||
| 1470 | GL_ActivateRenderer(renderer); | ||
| 1471 | |||
| 1472 | if (!convert_format(format, &internalFormat, &targetFormat, &type)) { | ||
| 1473 | SDL_SetError("Texture format %s not supported by OpenGL", SDL_GetPixelFormatName(format)); | ||
| 1474 | return NULL; | ||
| 1475 | } | ||
| 1476 | |||
| 1477 | surface = SDL_CreateSurface(rect->w, rect->h, format); | ||
| 1478 | if (!surface) { | ||
| 1479 | return NULL; | ||
| 1480 | } | ||
| 1481 | |||
| 1482 | int y = rect->y; | ||
| 1483 | if (!renderer->target) { | ||
| 1484 | int w, h; | ||
| 1485 | SDL_GetRenderOutputSize(renderer, &w, &h); | ||
| 1486 | y = (h - y) - rect->h; | ||
| 1487 | } | ||
| 1488 | |||
| 1489 | data->glPixelStorei(GL_PACK_ALIGNMENT, 1); | ||
| 1490 | data->glPixelStorei(GL_PACK_ROW_LENGTH, (surface->pitch / SDL_BYTESPERPIXEL(format))); | ||
| 1491 | data->glReadPixels(rect->x, y, rect->w, rect->h, targetFormat, type, surface->pixels); | ||
| 1492 | |||
| 1493 | if (!GL_CheckError("glReadPixels()", renderer)) { | ||
| 1494 | SDL_DestroySurface(surface); | ||
| 1495 | return NULL; | ||
| 1496 | } | ||
| 1497 | |||
| 1498 | // Flip the rows to be top-down if necessary | ||
| 1499 | if (!renderer->target) { | ||
| 1500 | SDL_FlipSurface(surface, SDL_FLIP_VERTICAL); | ||
| 1501 | } | ||
| 1502 | return surface; | ||
| 1503 | } | ||
| 1504 | |||
| 1505 | static bool GL_RenderPresent(SDL_Renderer *renderer) | ||
| 1506 | { | ||
| 1507 | GL_ActivateRenderer(renderer); | ||
| 1508 | |||
| 1509 | return SDL_GL_SwapWindow(renderer->window); | ||
| 1510 | } | ||
| 1511 | |||
| 1512 | static void GL_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1513 | { | ||
| 1514 | GL_RenderData *renderdata = (GL_RenderData *)renderer->internal; | ||
| 1515 | GL_TextureData *data = (GL_TextureData *)texture->internal; | ||
| 1516 | |||
| 1517 | GL_ActivateRenderer(renderer); | ||
| 1518 | |||
| 1519 | if (renderdata->drawstate.texture == texture) { | ||
| 1520 | renderdata->drawstate.texture = NULL; | ||
| 1521 | } | ||
| 1522 | if (renderdata->drawstate.target == texture) { | ||
| 1523 | renderdata->drawstate.target = NULL; | ||
| 1524 | } | ||
| 1525 | |||
| 1526 | if (!data) { | ||
| 1527 | return; | ||
| 1528 | } | ||
| 1529 | if (data->texture && !data->texture_external) { | ||
| 1530 | renderdata->glDeleteTextures(1, &data->texture); | ||
| 1531 | } | ||
| 1532 | #ifdef SDL_HAVE_YUV | ||
| 1533 | if (data->yuv) { | ||
| 1534 | if (!data->utexture_external) { | ||
| 1535 | renderdata->glDeleteTextures(1, &data->utexture); | ||
| 1536 | } | ||
| 1537 | if (!data->vtexture_external) { | ||
| 1538 | renderdata->glDeleteTextures(1, &data->vtexture); | ||
| 1539 | } | ||
| 1540 | } | ||
| 1541 | if (data->nv12) { | ||
| 1542 | if (!data->utexture_external) { | ||
| 1543 | renderdata->glDeleteTextures(1, &data->utexture); | ||
| 1544 | } | ||
| 1545 | } | ||
| 1546 | #endif | ||
| 1547 | SDL_free(data->pixels); | ||
| 1548 | SDL_free(data); | ||
| 1549 | texture->internal = NULL; | ||
| 1550 | } | ||
| 1551 | |||
| 1552 | static void GL_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1553 | { | ||
| 1554 | GL_RenderData *data = (GL_RenderData *)renderer->internal; | ||
| 1555 | |||
| 1556 | if (data) { | ||
| 1557 | if (data->context) { | ||
| 1558 | // make sure we delete the right resources! | ||
| 1559 | GL_ActivateRenderer(renderer); | ||
| 1560 | } | ||
| 1561 | |||
| 1562 | GL_ClearErrors(renderer); | ||
| 1563 | if (data->GL_ARB_debug_output_supported) { | ||
| 1564 | PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARBFunc = (PFNGLDEBUGMESSAGECALLBACKARBPROC)SDL_GL_GetProcAddress("glDebugMessageCallbackARB"); | ||
| 1565 | |||
| 1566 | // Uh oh, we don't have a safe way of removing ourselves from the callback chain, if it changed after we set our callback. | ||
| 1567 | // For now, just always replace the callback with the original one | ||
| 1568 | glDebugMessageCallbackARBFunc(data->next_error_callback, data->next_error_userparam); | ||
| 1569 | } | ||
| 1570 | if (data->shaders) { | ||
| 1571 | GL_DestroyShaderContext(data->shaders); | ||
| 1572 | } | ||
| 1573 | if (data->context) { | ||
| 1574 | while (data->framebuffers) { | ||
| 1575 | GL_FBOList *nextnode = data->framebuffers->next; | ||
| 1576 | // delete the framebuffer object | ||
| 1577 | data->glDeleteFramebuffersEXT(1, &data->framebuffers->FBO); | ||
| 1578 | GL_CheckError("", renderer); | ||
| 1579 | SDL_free(data->framebuffers); | ||
| 1580 | data->framebuffers = nextnode; | ||
| 1581 | } | ||
| 1582 | SDL_GL_DestroyContext(data->context); | ||
| 1583 | } | ||
| 1584 | SDL_free(data); | ||
| 1585 | } | ||
| 1586 | } | ||
| 1587 | |||
| 1588 | static bool GL_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 1589 | { | ||
| 1590 | int interval = 0; | ||
| 1591 | |||
| 1592 | if (!SDL_GL_SetSwapInterval(vsync)) { | ||
| 1593 | return false; | ||
| 1594 | } | ||
| 1595 | |||
| 1596 | if (!SDL_GL_GetSwapInterval(&interval)) { | ||
| 1597 | return false; | ||
| 1598 | } | ||
| 1599 | |||
| 1600 | if (interval != vsync) { | ||
| 1601 | return SDL_Unsupported(); | ||
| 1602 | } | ||
| 1603 | return true; | ||
| 1604 | } | ||
| 1605 | |||
| 1606 | static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 1607 | { | ||
| 1608 | GL_RenderData *data = NULL; | ||
| 1609 | GLint value; | ||
| 1610 | SDL_WindowFlags window_flags; | ||
| 1611 | int profile_mask = 0, major = 0, minor = 0; | ||
| 1612 | bool changed_window = false; | ||
| 1613 | const char *hint; | ||
| 1614 | bool non_power_of_two_supported = false; | ||
| 1615 | |||
| 1616 | SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask); | ||
| 1617 | SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major); | ||
| 1618 | SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor); | ||
| 1619 | |||
| 1620 | #ifndef SDL_VIDEO_VITA_PVR_OGL | ||
| 1621 | SDL_SyncWindow(window); | ||
| 1622 | window_flags = SDL_GetWindowFlags(window); | ||
| 1623 | if (!(window_flags & SDL_WINDOW_OPENGL) || | ||
| 1624 | profile_mask == SDL_GL_CONTEXT_PROFILE_ES || major != RENDERER_CONTEXT_MAJOR || minor != RENDERER_CONTEXT_MINOR) { | ||
| 1625 | |||
| 1626 | changed_window = true; | ||
| 1627 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0); | ||
| 1628 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, RENDERER_CONTEXT_MAJOR); | ||
| 1629 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, RENDERER_CONTEXT_MINOR); | ||
| 1630 | |||
| 1631 | if (!SDL_RecreateWindow(window, (window_flags & ~(SDL_WINDOW_VULKAN | SDL_WINDOW_METAL)) | SDL_WINDOW_OPENGL)) { | ||
| 1632 | goto error; | ||
| 1633 | } | ||
| 1634 | } | ||
| 1635 | #endif | ||
| 1636 | |||
| 1637 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 1638 | |||
| 1639 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 1640 | SDL_SetError("Unsupported output colorspace"); | ||
| 1641 | goto error; | ||
| 1642 | } | ||
| 1643 | |||
| 1644 | data = (GL_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 1645 | if (!data) { | ||
| 1646 | goto error; | ||
| 1647 | } | ||
| 1648 | |||
| 1649 | renderer->WindowEvent = GL_WindowEvent; | ||
| 1650 | renderer->SupportsBlendMode = GL_SupportsBlendMode; | ||
| 1651 | renderer->CreateTexture = GL_CreateTexture; | ||
| 1652 | renderer->UpdateTexture = GL_UpdateTexture; | ||
| 1653 | #ifdef SDL_HAVE_YUV | ||
| 1654 | renderer->UpdateTextureYUV = GL_UpdateTextureYUV; | ||
| 1655 | renderer->UpdateTextureNV = GL_UpdateTextureNV; | ||
| 1656 | #endif | ||
| 1657 | renderer->LockTexture = GL_LockTexture; | ||
| 1658 | renderer->UnlockTexture = GL_UnlockTexture; | ||
| 1659 | renderer->SetTextureScaleMode = GL_SetTextureScaleMode; | ||
| 1660 | renderer->SetRenderTarget = GL_SetRenderTarget; | ||
| 1661 | renderer->QueueSetViewport = GL_QueueNoOp; | ||
| 1662 | renderer->QueueSetDrawColor = GL_QueueNoOp; | ||
| 1663 | renderer->QueueDrawPoints = GL_QueueDrawPoints; | ||
| 1664 | renderer->QueueDrawLines = GL_QueueDrawLines; | ||
| 1665 | renderer->QueueGeometry = GL_QueueGeometry; | ||
| 1666 | renderer->InvalidateCachedState = GL_InvalidateCachedState; | ||
| 1667 | renderer->RunCommandQueue = GL_RunCommandQueue; | ||
| 1668 | renderer->RenderReadPixels = GL_RenderReadPixels; | ||
| 1669 | renderer->RenderPresent = GL_RenderPresent; | ||
| 1670 | renderer->DestroyTexture = GL_DestroyTexture; | ||
| 1671 | renderer->DestroyRenderer = GL_DestroyRenderer; | ||
| 1672 | renderer->SetVSync = GL_SetVSync; | ||
| 1673 | renderer->internal = data; | ||
| 1674 | GL_InvalidateCachedState(renderer); | ||
| 1675 | renderer->window = window; | ||
| 1676 | |||
| 1677 | renderer->name = GL_RenderDriver.name; | ||
| 1678 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 1679 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 1680 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888); | ||
| 1681 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR8888); | ||
| 1682 | |||
| 1683 | data->context = SDL_GL_CreateContext(window); | ||
| 1684 | if (!data->context) { | ||
| 1685 | goto error; | ||
| 1686 | } | ||
| 1687 | if (!SDL_GL_MakeCurrent(window, data->context)) { | ||
| 1688 | goto error; | ||
| 1689 | } | ||
| 1690 | |||
| 1691 | if (!GL_LoadFunctions(data)) { | ||
| 1692 | goto error; | ||
| 1693 | } | ||
| 1694 | |||
| 1695 | #ifdef SDL_PLATFORM_MACOS | ||
| 1696 | // Enable multi-threaded rendering | ||
| 1697 | /* Disabled until Ryan finishes his VBO/PBO code... | ||
| 1698 | CGLEnable(CGLGetCurrentContext(), kCGLCEMPEngine); | ||
| 1699 | */ | ||
| 1700 | #endif | ||
| 1701 | |||
| 1702 | // Check for debug output support | ||
| 1703 | if (SDL_GL_GetAttribute(SDL_GL_CONTEXT_FLAGS, &value) && | ||
| 1704 | (value & SDL_GL_CONTEXT_DEBUG_FLAG)) { | ||
| 1705 | data->debug_enabled = true; | ||
| 1706 | } | ||
| 1707 | if (data->debug_enabled && SDL_GL_ExtensionSupported("GL_ARB_debug_output")) { | ||
| 1708 | PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARBFunc = (PFNGLDEBUGMESSAGECALLBACKARBPROC)SDL_GL_GetProcAddress("glDebugMessageCallbackARB"); | ||
| 1709 | |||
| 1710 | data->GL_ARB_debug_output_supported = true; | ||
| 1711 | data->glGetPointerv(GL_DEBUG_CALLBACK_FUNCTION_ARB, (GLvoid **)(char *)&data->next_error_callback); | ||
| 1712 | data->glGetPointerv(GL_DEBUG_CALLBACK_USER_PARAM_ARB, &data->next_error_userparam); | ||
| 1713 | glDebugMessageCallbackARBFunc(GL_HandleDebugMessage, renderer); | ||
| 1714 | |||
| 1715 | // Make sure our callback is called when errors actually happen | ||
| 1716 | data->glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); | ||
| 1717 | } | ||
| 1718 | |||
| 1719 | hint = SDL_GetHint("GL_ARB_texture_non_power_of_two"); | ||
| 1720 | if (!hint || *hint != '0') { | ||
| 1721 | bool isGL2 = false; | ||
| 1722 | const char *verstr = (const char *)data->glGetString(GL_VERSION); | ||
| 1723 | if (verstr) { | ||
| 1724 | char verbuf[16]; | ||
| 1725 | char *ptr; | ||
| 1726 | SDL_strlcpy(verbuf, verstr, sizeof(verbuf)); | ||
| 1727 | ptr = SDL_strchr(verbuf, '.'); | ||
| 1728 | if (ptr) { | ||
| 1729 | *ptr = '\0'; | ||
| 1730 | if (SDL_atoi(verbuf) >= 2) { | ||
| 1731 | isGL2 = true; | ||
| 1732 | } | ||
| 1733 | } | ||
| 1734 | } | ||
| 1735 | if (isGL2 || SDL_GL_ExtensionSupported("GL_ARB_texture_non_power_of_two")) { | ||
| 1736 | non_power_of_two_supported = true; | ||
| 1737 | } | ||
| 1738 | } | ||
| 1739 | |||
| 1740 | data->textype = GL_TEXTURE_2D; | ||
| 1741 | if (non_power_of_two_supported) { | ||
| 1742 | data->GL_ARB_texture_non_power_of_two_supported = true; | ||
| 1743 | data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); | ||
| 1744 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, value); | ||
| 1745 | } else if (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") || | ||
| 1746 | SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle")) { | ||
| 1747 | data->GL_ARB_texture_rectangle_supported = true; | ||
| 1748 | data->textype = GL_TEXTURE_RECTANGLE_ARB; | ||
| 1749 | data->glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB, &value); | ||
| 1750 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, value); | ||
| 1751 | } else { | ||
| 1752 | data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); | ||
| 1753 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, value); | ||
| 1754 | } | ||
| 1755 | |||
| 1756 | // Check for multitexture support | ||
| 1757 | if (SDL_GL_ExtensionSupported("GL_ARB_multitexture")) { | ||
| 1758 | data->glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)SDL_GL_GetProcAddress("glActiveTextureARB"); | ||
| 1759 | if (data->glActiveTextureARB) { | ||
| 1760 | data->GL_ARB_multitexture_supported = true; | ||
| 1761 | data->glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &data->num_texture_units); | ||
| 1762 | } | ||
| 1763 | } | ||
| 1764 | |||
| 1765 | // Check for shader support | ||
| 1766 | data->shaders = GL_CreateShaderContext(); | ||
| 1767 | SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, "OpenGL shaders: %s", | ||
| 1768 | data->shaders ? "ENABLED" : "DISABLED"); | ||
| 1769 | #ifdef SDL_HAVE_YUV | ||
| 1770 | // We support YV12 textures using 3 textures and a shader | ||
| 1771 | if (data->shaders && data->num_texture_units >= 3) { | ||
| 1772 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 1773 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 1774 | } | ||
| 1775 | |||
| 1776 | // We support NV12 textures using 2 textures and a shader | ||
| 1777 | if (data->shaders && data->num_texture_units >= 2) { | ||
| 1778 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 1779 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 1780 | } | ||
| 1781 | #endif | ||
| 1782 | #ifdef SDL_PLATFORM_MACOS | ||
| 1783 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_UYVY); | ||
| 1784 | #endif | ||
| 1785 | |||
| 1786 | if (SDL_GL_ExtensionSupported("GL_EXT_framebuffer_object")) { | ||
| 1787 | data->GL_EXT_framebuffer_object_supported = true; | ||
| 1788 | data->glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) | ||
| 1789 | SDL_GL_GetProcAddress("glGenFramebuffersEXT"); | ||
| 1790 | data->glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) | ||
| 1791 | SDL_GL_GetProcAddress("glDeleteFramebuffersEXT"); | ||
| 1792 | data->glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) | ||
| 1793 | SDL_GL_GetProcAddress("glFramebufferTexture2DEXT"); | ||
| 1794 | data->glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) | ||
| 1795 | SDL_GL_GetProcAddress("glBindFramebufferEXT"); | ||
| 1796 | data->glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) | ||
| 1797 | SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT"); | ||
| 1798 | } else { | ||
| 1799 | SDL_SetError("Can't create render targets, GL_EXT_framebuffer_object not available"); | ||
| 1800 | goto error; | ||
| 1801 | } | ||
| 1802 | |||
| 1803 | // Set up parameters for rendering | ||
| 1804 | data->glMatrixMode(GL_MODELVIEW); | ||
| 1805 | data->glLoadIdentity(); | ||
| 1806 | data->glDisable(GL_DEPTH_TEST); | ||
| 1807 | data->glDisable(GL_CULL_FACE); | ||
| 1808 | data->glDisable(GL_SCISSOR_TEST); | ||
| 1809 | data->glDisable(data->textype); | ||
| 1810 | data->glClearColor(1.0f, 1.0f, 1.0f, 1.0f); | ||
| 1811 | data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | ||
| 1812 | // This ended up causing video discrepancies between OpenGL and Direct3D | ||
| 1813 | // data->glEnable(GL_LINE_SMOOTH); | ||
| 1814 | |||
| 1815 | data->drawstate.color.r = 1.0f; | ||
| 1816 | data->drawstate.color.g = 1.0f; | ||
| 1817 | data->drawstate.color.b = 1.0f; | ||
| 1818 | data->drawstate.color.a = 1.0f; | ||
| 1819 | data->drawstate.clear_color.r = 1.0f; | ||
| 1820 | data->drawstate.clear_color.g = 1.0f; | ||
| 1821 | data->drawstate.clear_color.b = 1.0f; | ||
| 1822 | data->drawstate.clear_color.a = 1.0f; | ||
| 1823 | |||
| 1824 | return true; | ||
| 1825 | |||
| 1826 | error: | ||
| 1827 | if (changed_window) { | ||
| 1828 | // Uh oh, better try to put it back... | ||
| 1829 | char *error = SDL_strdup(SDL_GetError()); | ||
| 1830 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); | ||
| 1831 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); | ||
| 1832 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); | ||
| 1833 | SDL_RecreateWindow(window, window_flags); | ||
| 1834 | SDL_SetError("%s", error); | ||
| 1835 | SDL_free(error); | ||
| 1836 | } | ||
| 1837 | return false; | ||
| 1838 | } | ||
| 1839 | |||
| 1840 | SDL_RenderDriver GL_RenderDriver = { | ||
| 1841 | GL_CreateRenderer, "opengl" | ||
| 1842 | }; | ||
| 1843 | |||
| 1844 | #endif // SDL_VIDEO_RENDER_OGL | ||
diff --git a/SDL-3.2.8/src/render/opengl/SDL_shaders_gl.c b/SDL-3.2.8/src/render/opengl/SDL_shaders_gl.c new file mode 100644 index 0000000..b09b12e --- /dev/null +++ b/SDL-3.2.8/src/render/opengl/SDL_shaders_gl.c | |||
| @@ -0,0 +1,545 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_OGL | ||
| 24 | |||
| 25 | #include <SDL3/SDL_opengl.h> | ||
| 26 | #include "SDL_shaders_gl.h" | ||
| 27 | |||
| 28 | // OpenGL shader implementation | ||
| 29 | |||
| 30 | // #define DEBUG_SHADERS | ||
| 31 | |||
| 32 | typedef struct | ||
| 33 | { | ||
| 34 | GLhandleARB program; | ||
| 35 | GLhandleARB vert_shader; | ||
| 36 | GLhandleARB frag_shader; | ||
| 37 | } GL_ShaderData; | ||
| 38 | |||
| 39 | struct GL_ShaderContext | ||
| 40 | { | ||
| 41 | GLenum (*glGetError)(void); | ||
| 42 | |||
| 43 | PFNGLATTACHOBJECTARBPROC glAttachObjectARB; | ||
| 44 | PFNGLCOMPILESHADERARBPROC glCompileShaderARB; | ||
| 45 | PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; | ||
| 46 | PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; | ||
| 47 | PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; | ||
| 48 | PFNGLGETINFOLOGARBPROC glGetInfoLogARB; | ||
| 49 | PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; | ||
| 50 | PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; | ||
| 51 | PFNGLLINKPROGRAMARBPROC glLinkProgramARB; | ||
| 52 | PFNGLSHADERSOURCEARBPROC glShaderSourceARB; | ||
| 53 | PFNGLUNIFORM1IARBPROC glUniform1iARB; | ||
| 54 | PFNGLUNIFORM1FARBPROC glUniform1fARB; | ||
| 55 | PFNGLUNIFORM3FARBPROC glUniform3fARB; | ||
| 56 | PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; | ||
| 57 | |||
| 58 | bool GL_ARB_texture_rectangle_supported; | ||
| 59 | |||
| 60 | GL_ShaderData shaders[NUM_SHADERS]; | ||
| 61 | const float *shader_params[NUM_SHADERS]; | ||
| 62 | }; | ||
| 63 | |||
| 64 | /* *INDENT-OFF* */ // clang-format off | ||
| 65 | |||
| 66 | #define COLOR_VERTEX_SHADER \ | ||
| 67 | "varying vec4 v_color;\n" \ | ||
| 68 | "\n" \ | ||
| 69 | "void main()\n" \ | ||
| 70 | "{\n" \ | ||
| 71 | " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" \ | ||
| 72 | " v_color = gl_Color;\n" \ | ||
| 73 | "}" \ | ||
| 74 | |||
| 75 | #define TEXTURE_VERTEX_SHADER \ | ||
| 76 | "varying vec4 v_color;\n" \ | ||
| 77 | "varying vec2 v_texCoord;\n" \ | ||
| 78 | "\n" \ | ||
| 79 | "void main()\n" \ | ||
| 80 | "{\n" \ | ||
| 81 | " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" \ | ||
| 82 | " v_color = gl_Color;\n" \ | ||
| 83 | " v_texCoord = vec2(gl_MultiTexCoord0);\n" \ | ||
| 84 | "}" \ | ||
| 85 | |||
| 86 | #define YUV_SHADER_PROLOGUE \ | ||
| 87 | "varying vec4 v_color;\n" \ | ||
| 88 | "varying vec2 v_texCoord;\n" \ | ||
| 89 | "uniform sampler2D tex0; // Y \n" \ | ||
| 90 | "uniform sampler2D tex1; // U \n" \ | ||
| 91 | "uniform sampler2D tex2; // V \n" \ | ||
| 92 | "uniform vec3 Yoffset;\n" \ | ||
| 93 | "uniform vec3 Rcoeff;\n" \ | ||
| 94 | "uniform vec3 Gcoeff;\n" \ | ||
| 95 | "uniform vec3 Bcoeff;\n" \ | ||
| 96 | "\n" \ | ||
| 97 | |||
| 98 | #define YUV_SHADER_BODY \ | ||
| 99 | "\n" \ | ||
| 100 | "void main()\n" \ | ||
| 101 | "{\n" \ | ||
| 102 | " vec2 tcoord;\n" \ | ||
| 103 | " vec3 yuv, rgb;\n" \ | ||
| 104 | "\n" \ | ||
| 105 | " // Get the Y value \n" \ | ||
| 106 | " tcoord = v_texCoord;\n" \ | ||
| 107 | " yuv.x = texture2D(tex0, tcoord).r;\n" \ | ||
| 108 | "\n" \ | ||
| 109 | " // Get the U and V values \n" \ | ||
| 110 | " tcoord *= UVCoordScale;\n" \ | ||
| 111 | " yuv.y = texture2D(tex1, tcoord).r;\n" \ | ||
| 112 | " yuv.z = texture2D(tex2, tcoord).r;\n" \ | ||
| 113 | "\n" \ | ||
| 114 | " // Do the color transform \n" \ | ||
| 115 | " yuv += Yoffset;\n" \ | ||
| 116 | " rgb.r = dot(yuv, Rcoeff);\n" \ | ||
| 117 | " rgb.g = dot(yuv, Gcoeff);\n" \ | ||
| 118 | " rgb.b = dot(yuv, Bcoeff);\n" \ | ||
| 119 | "\n" \ | ||
| 120 | " // That was easy. :) \n" \ | ||
| 121 | " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" \ | ||
| 122 | "}" \ | ||
| 123 | |||
| 124 | #define NV12_SHADER_PROLOGUE \ | ||
| 125 | "varying vec4 v_color;\n" \ | ||
| 126 | "varying vec2 v_texCoord;\n" \ | ||
| 127 | "uniform sampler2D tex0; // Y \n" \ | ||
| 128 | "uniform sampler2D tex1; // U/V \n" \ | ||
| 129 | "uniform vec3 Yoffset;\n" \ | ||
| 130 | "uniform vec3 Rcoeff;\n" \ | ||
| 131 | "uniform vec3 Gcoeff;\n" \ | ||
| 132 | "uniform vec3 Bcoeff;\n" \ | ||
| 133 | "\n" \ | ||
| 134 | |||
| 135 | #define NV12_RA_SHADER_BODY \ | ||
| 136 | "\n" \ | ||
| 137 | "void main()\n" \ | ||
| 138 | "{\n" \ | ||
| 139 | " vec2 tcoord;\n" \ | ||
| 140 | " vec3 yuv, rgb;\n" \ | ||
| 141 | "\n" \ | ||
| 142 | " // Get the Y value \n" \ | ||
| 143 | " tcoord = v_texCoord;\n" \ | ||
| 144 | " yuv.x = texture2D(tex0, tcoord).r;\n" \ | ||
| 145 | "\n" \ | ||
| 146 | " // Get the U and V values \n" \ | ||
| 147 | " tcoord *= UVCoordScale;\n" \ | ||
| 148 | " yuv.yz = texture2D(tex1, tcoord).ra;\n" \ | ||
| 149 | "\n" \ | ||
| 150 | " // Do the color transform \n" \ | ||
| 151 | " yuv += Yoffset;\n" \ | ||
| 152 | " rgb.r = dot(yuv, Rcoeff);\n" \ | ||
| 153 | " rgb.g = dot(yuv, Gcoeff);\n" \ | ||
| 154 | " rgb.b = dot(yuv, Bcoeff);\n" \ | ||
| 155 | "\n" \ | ||
| 156 | " // That was easy. :) \n" \ | ||
| 157 | " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" \ | ||
| 158 | "}" \ | ||
| 159 | |||
| 160 | #define NV12_RG_SHADER_BODY \ | ||
| 161 | "\n" \ | ||
| 162 | "void main()\n" \ | ||
| 163 | "{\n" \ | ||
| 164 | " vec2 tcoord;\n" \ | ||
| 165 | " vec3 yuv, rgb;\n" \ | ||
| 166 | "\n" \ | ||
| 167 | " // Get the Y value \n" \ | ||
| 168 | " tcoord = v_texCoord;\n" \ | ||
| 169 | " yuv.x = texture2D(tex0, tcoord).r;\n" \ | ||
| 170 | "\n" \ | ||
| 171 | " // Get the U and V values \n" \ | ||
| 172 | " tcoord *= UVCoordScale;\n" \ | ||
| 173 | " yuv.yz = texture2D(tex1, tcoord).rg;\n" \ | ||
| 174 | "\n" \ | ||
| 175 | " // Do the color transform \n" \ | ||
| 176 | " yuv += Yoffset;\n" \ | ||
| 177 | " rgb.r = dot(yuv, Rcoeff);\n" \ | ||
| 178 | " rgb.g = dot(yuv, Gcoeff);\n" \ | ||
| 179 | " rgb.b = dot(yuv, Bcoeff);\n" \ | ||
| 180 | "\n" \ | ||
| 181 | " // That was easy. :) \n" \ | ||
| 182 | " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" \ | ||
| 183 | "}" \ | ||
| 184 | |||
| 185 | #define NV21_RA_SHADER_BODY \ | ||
| 186 | "\n" \ | ||
| 187 | "void main()\n" \ | ||
| 188 | "{\n" \ | ||
| 189 | " vec2 tcoord;\n" \ | ||
| 190 | " vec3 yuv, rgb;\n" \ | ||
| 191 | "\n" \ | ||
| 192 | " // Get the Y value \n" \ | ||
| 193 | " tcoord = v_texCoord;\n" \ | ||
| 194 | " yuv.x = texture2D(tex0, tcoord).r;\n" \ | ||
| 195 | "\n" \ | ||
| 196 | " // Get the U and V values \n" \ | ||
| 197 | " tcoord *= UVCoordScale;\n" \ | ||
| 198 | " yuv.yz = texture2D(tex1, tcoord).ar;\n" \ | ||
| 199 | "\n" \ | ||
| 200 | " // Do the color transform \n" \ | ||
| 201 | " yuv += Yoffset;\n" \ | ||
| 202 | " rgb.r = dot(yuv, Rcoeff);\n" \ | ||
| 203 | " rgb.g = dot(yuv, Gcoeff);\n" \ | ||
| 204 | " rgb.b = dot(yuv, Bcoeff);\n" \ | ||
| 205 | "\n" \ | ||
| 206 | " // That was easy. :) \n" \ | ||
| 207 | " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" \ | ||
| 208 | "}" \ | ||
| 209 | |||
| 210 | #define NV21_RG_SHADER_BODY \ | ||
| 211 | "\n" \ | ||
| 212 | "void main()\n" \ | ||
| 213 | "{\n" \ | ||
| 214 | " vec2 tcoord;\n" \ | ||
| 215 | " vec3 yuv, rgb;\n" \ | ||
| 216 | "\n" \ | ||
| 217 | " // Get the Y value \n" \ | ||
| 218 | " tcoord = v_texCoord;\n" \ | ||
| 219 | " yuv.x = texture2D(tex0, tcoord).r;\n" \ | ||
| 220 | "\n" \ | ||
| 221 | " // Get the U and V values \n" \ | ||
| 222 | " tcoord *= UVCoordScale;\n" \ | ||
| 223 | " yuv.yz = texture2D(tex1, tcoord).gr;\n" \ | ||
| 224 | "\n" \ | ||
| 225 | " // Do the color transform \n" \ | ||
| 226 | " yuv += Yoffset;\n" \ | ||
| 227 | " rgb.r = dot(yuv, Rcoeff);\n" \ | ||
| 228 | " rgb.g = dot(yuv, Gcoeff);\n" \ | ||
| 229 | " rgb.b = dot(yuv, Bcoeff);\n" \ | ||
| 230 | "\n" \ | ||
| 231 | " // That was easy. :) \n" \ | ||
| 232 | " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" \ | ||
| 233 | "}" \ | ||
| 234 | |||
| 235 | /* | ||
| 236 | * NOTE: Always use sampler2D, etc here. We'll #define them to the | ||
| 237 | * texture_rectangle versions if we choose to use that extension. | ||
| 238 | */ | ||
| 239 | static const char *shader_source[NUM_SHADERS][2] = { | ||
| 240 | // SHADER_NONE | ||
| 241 | { NULL, NULL }, | ||
| 242 | |||
| 243 | // SHADER_SOLID | ||
| 244 | { | ||
| 245 | // vertex shader | ||
| 246 | COLOR_VERTEX_SHADER, | ||
| 247 | // fragment shader | ||
| 248 | "varying vec4 v_color;\n" | ||
| 249 | "\n" | ||
| 250 | "void main()\n" | ||
| 251 | "{\n" | ||
| 252 | " gl_FragColor = v_color;\n" | ||
| 253 | "}" | ||
| 254 | }, | ||
| 255 | |||
| 256 | // SHADER_RGB | ||
| 257 | { | ||
| 258 | // vertex shader | ||
| 259 | TEXTURE_VERTEX_SHADER, | ||
| 260 | // fragment shader | ||
| 261 | "varying vec4 v_color;\n" | ||
| 262 | "varying vec2 v_texCoord;\n" | ||
| 263 | "uniform sampler2D tex0;\n" | ||
| 264 | "\n" | ||
| 265 | "void main()\n" | ||
| 266 | "{\n" | ||
| 267 | " gl_FragColor = texture2D(tex0, v_texCoord);\n" | ||
| 268 | " gl_FragColor.a = 1.0;\n" | ||
| 269 | " gl_FragColor *= v_color;\n" | ||
| 270 | "}" | ||
| 271 | }, | ||
| 272 | |||
| 273 | // SHADER_RGBA | ||
| 274 | { | ||
| 275 | // vertex shader | ||
| 276 | TEXTURE_VERTEX_SHADER, | ||
| 277 | // fragment shader | ||
| 278 | "varying vec4 v_color;\n" | ||
| 279 | "varying vec2 v_texCoord;\n" | ||
| 280 | "uniform sampler2D tex0;\n" | ||
| 281 | "\n" | ||
| 282 | "void main()\n" | ||
| 283 | "{\n" | ||
| 284 | " gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n" | ||
| 285 | "}" | ||
| 286 | }, | ||
| 287 | #ifdef SDL_HAVE_YUV | ||
| 288 | // SHADER_YUV | ||
| 289 | { | ||
| 290 | // vertex shader | ||
| 291 | TEXTURE_VERTEX_SHADER, | ||
| 292 | // fragment shader | ||
| 293 | YUV_SHADER_PROLOGUE | ||
| 294 | YUV_SHADER_BODY | ||
| 295 | }, | ||
| 296 | // SHADER_NV12_RA | ||
| 297 | { | ||
| 298 | // vertex shader | ||
| 299 | TEXTURE_VERTEX_SHADER, | ||
| 300 | // fragment shader | ||
| 301 | NV12_SHADER_PROLOGUE | ||
| 302 | NV12_RA_SHADER_BODY | ||
| 303 | }, | ||
| 304 | // SHADER_NV12_RG | ||
| 305 | { | ||
| 306 | // vertex shader | ||
| 307 | TEXTURE_VERTEX_SHADER, | ||
| 308 | // fragment shader | ||
| 309 | NV12_SHADER_PROLOGUE | ||
| 310 | NV12_RG_SHADER_BODY | ||
| 311 | }, | ||
| 312 | // SHADER_NV21_RA | ||
| 313 | { | ||
| 314 | // vertex shader | ||
| 315 | TEXTURE_VERTEX_SHADER, | ||
| 316 | // fragment shader | ||
| 317 | NV12_SHADER_PROLOGUE | ||
| 318 | NV21_RA_SHADER_BODY | ||
| 319 | }, | ||
| 320 | // SHADER_NV21_RG | ||
| 321 | { | ||
| 322 | // vertex shader | ||
| 323 | TEXTURE_VERTEX_SHADER, | ||
| 324 | // fragment shader | ||
| 325 | NV12_SHADER_PROLOGUE | ||
| 326 | NV21_RG_SHADER_BODY | ||
| 327 | }, | ||
| 328 | #endif // SDL_HAVE_YUV | ||
| 329 | }; | ||
| 330 | |||
| 331 | /* *INDENT-ON* */ // clang-format on | ||
| 332 | |||
| 333 | static bool CompileShader(GL_ShaderContext *ctx, GLhandleARB shader, const char *defines, const char *source) | ||
| 334 | { | ||
| 335 | GLint status; | ||
| 336 | const char *sources[2]; | ||
| 337 | |||
| 338 | sources[0] = defines; | ||
| 339 | sources[1] = source; | ||
| 340 | |||
| 341 | ctx->glShaderSourceARB(shader, SDL_arraysize(sources), sources, NULL); | ||
| 342 | ctx->glCompileShaderARB(shader); | ||
| 343 | ctx->glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); | ||
| 344 | if (status == 0) { | ||
| 345 | bool isstack; | ||
| 346 | GLint length; | ||
| 347 | char *info; | ||
| 348 | |||
| 349 | ctx->glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); | ||
| 350 | info = SDL_small_alloc(char, length + 1, &isstack); | ||
| 351 | if (info) { | ||
| 352 | ctx->glGetInfoLogARB(shader, length, NULL, info); | ||
| 353 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Failed to compile shader:"); | ||
| 354 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", defines); | ||
| 355 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", source); | ||
| 356 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", info); | ||
| 357 | SDL_small_free(info, isstack); | ||
| 358 | } | ||
| 359 | return false; | ||
| 360 | } else { | ||
| 361 | return true; | ||
| 362 | } | ||
| 363 | } | ||
| 364 | |||
| 365 | static bool CompileShaderProgram(GL_ShaderContext *ctx, int index, GL_ShaderData *data) | ||
| 366 | { | ||
| 367 | const int num_tmus_bound = 4; | ||
| 368 | const char *vert_defines = ""; | ||
| 369 | const char *frag_defines = ""; | ||
| 370 | int i; | ||
| 371 | GLint location; | ||
| 372 | |||
| 373 | if (index == SHADER_NONE) { | ||
| 374 | return true; | ||
| 375 | } | ||
| 376 | |||
| 377 | ctx->glGetError(); | ||
| 378 | |||
| 379 | // Make sure we use the correct sampler type for our texture type | ||
| 380 | if (ctx->GL_ARB_texture_rectangle_supported) { | ||
| 381 | frag_defines = | ||
| 382 | "#define sampler2D sampler2DRect\n" | ||
| 383 | "#define texture2D texture2DRect\n" | ||
| 384 | "#define UVCoordScale 0.5\n"; | ||
| 385 | } else { | ||
| 386 | frag_defines = | ||
| 387 | "#define UVCoordScale 1.0\n"; | ||
| 388 | } | ||
| 389 | |||
| 390 | // Create one program object to rule them all | ||
| 391 | data->program = ctx->glCreateProgramObjectARB(); | ||
| 392 | |||
| 393 | // Create the vertex shader | ||
| 394 | data->vert_shader = ctx->glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); | ||
| 395 | if (!CompileShader(ctx, data->vert_shader, vert_defines, shader_source[index][0])) { | ||
| 396 | return false; | ||
| 397 | } | ||
| 398 | |||
| 399 | // Create the fragment shader | ||
| 400 | data->frag_shader = ctx->glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); | ||
| 401 | if (!CompileShader(ctx, data->frag_shader, frag_defines, shader_source[index][1])) { | ||
| 402 | return false; | ||
| 403 | } | ||
| 404 | |||
| 405 | // ... and in the darkness bind them | ||
| 406 | ctx->glAttachObjectARB(data->program, data->vert_shader); | ||
| 407 | ctx->glAttachObjectARB(data->program, data->frag_shader); | ||
| 408 | ctx->glLinkProgramARB(data->program); | ||
| 409 | |||
| 410 | // Set up some uniform variables | ||
| 411 | ctx->glUseProgramObjectARB(data->program); | ||
| 412 | for (i = 0; i < num_tmus_bound; ++i) { | ||
| 413 | char tex_name[10]; | ||
| 414 | (void)SDL_snprintf(tex_name, SDL_arraysize(tex_name), "tex%d", i); | ||
| 415 | location = ctx->glGetUniformLocationARB(data->program, tex_name); | ||
| 416 | if (location >= 0) { | ||
| 417 | ctx->glUniform1iARB(location, i); | ||
| 418 | } | ||
| 419 | } | ||
| 420 | ctx->glUseProgramObjectARB(0); | ||
| 421 | |||
| 422 | return ctx->glGetError() == GL_NO_ERROR; | ||
| 423 | } | ||
| 424 | |||
| 425 | static void DestroyShaderProgram(GL_ShaderContext *ctx, GL_ShaderData *data) | ||
| 426 | { | ||
| 427 | ctx->glDeleteObjectARB(data->vert_shader); | ||
| 428 | ctx->glDeleteObjectARB(data->frag_shader); | ||
| 429 | ctx->glDeleteObjectARB(data->program); | ||
| 430 | } | ||
| 431 | |||
| 432 | GL_ShaderContext *GL_CreateShaderContext(void) | ||
| 433 | { | ||
| 434 | GL_ShaderContext *ctx; | ||
| 435 | bool shaders_supported; | ||
| 436 | int i; | ||
| 437 | |||
| 438 | ctx = (GL_ShaderContext *)SDL_calloc(1, sizeof(*ctx)); | ||
| 439 | if (!ctx) { | ||
| 440 | return NULL; | ||
| 441 | } | ||
| 442 | |||
| 443 | if (!SDL_GL_ExtensionSupported("GL_ARB_texture_non_power_of_two") && | ||
| 444 | (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") || | ||
| 445 | SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle"))) { | ||
| 446 | ctx->GL_ARB_texture_rectangle_supported = true; | ||
| 447 | } | ||
| 448 | |||
| 449 | // Check for shader support | ||
| 450 | shaders_supported = false; | ||
| 451 | if (SDL_GL_ExtensionSupported("GL_ARB_shader_objects") && | ||
| 452 | SDL_GL_ExtensionSupported("GL_ARB_shading_language_100") && | ||
| 453 | SDL_GL_ExtensionSupported("GL_ARB_vertex_shader") && | ||
| 454 | SDL_GL_ExtensionSupported("GL_ARB_fragment_shader")) { | ||
| 455 | ctx->glGetError = (GLenum(*)(void))SDL_GL_GetProcAddress("glGetError"); | ||
| 456 | ctx->glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)SDL_GL_GetProcAddress("glAttachObjectARB"); | ||
| 457 | ctx->glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)SDL_GL_GetProcAddress("glCompileShaderARB"); | ||
| 458 | ctx->glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glCreateProgramObjectARB"); | ||
| 459 | ctx->glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)SDL_GL_GetProcAddress("glCreateShaderObjectARB"); | ||
| 460 | ctx->glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)SDL_GL_GetProcAddress("glDeleteObjectARB"); | ||
| 461 | ctx->glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)SDL_GL_GetProcAddress("glGetInfoLogARB"); | ||
| 462 | ctx->glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)SDL_GL_GetProcAddress("glGetObjectParameterivARB"); | ||
| 463 | ctx->glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)SDL_GL_GetProcAddress("glGetUniformLocationARB"); | ||
| 464 | ctx->glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)SDL_GL_GetProcAddress("glLinkProgramARB"); | ||
| 465 | ctx->glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)SDL_GL_GetProcAddress("glShaderSourceARB"); | ||
| 466 | ctx->glUniform1iARB = (PFNGLUNIFORM1IARBPROC)SDL_GL_GetProcAddress("glUniform1iARB"); | ||
| 467 | ctx->glUniform1fARB = (PFNGLUNIFORM1FARBPROC)SDL_GL_GetProcAddress("glUniform1fARB"); | ||
| 468 | ctx->glUniform3fARB = (PFNGLUNIFORM3FARBPROC)SDL_GL_GetProcAddress("glUniform3fARB"); | ||
| 469 | ctx->glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glUseProgramObjectARB"); | ||
| 470 | if (ctx->glGetError && | ||
| 471 | ctx->glAttachObjectARB && | ||
| 472 | ctx->glCompileShaderARB && | ||
| 473 | ctx->glCreateProgramObjectARB && | ||
| 474 | ctx->glCreateShaderObjectARB && | ||
| 475 | ctx->glDeleteObjectARB && | ||
| 476 | ctx->glGetInfoLogARB && | ||
| 477 | ctx->glGetObjectParameterivARB && | ||
| 478 | ctx->glGetUniformLocationARB && | ||
| 479 | ctx->glLinkProgramARB && | ||
| 480 | ctx->glShaderSourceARB && | ||
| 481 | ctx->glUniform1iARB && | ||
| 482 | ctx->glUniform1fARB && | ||
| 483 | ctx->glUniform3fARB && | ||
| 484 | ctx->glUseProgramObjectARB) { | ||
| 485 | shaders_supported = true; | ||
| 486 | } | ||
| 487 | } | ||
| 488 | |||
| 489 | if (!shaders_supported) { | ||
| 490 | SDL_free(ctx); | ||
| 491 | return NULL; | ||
| 492 | } | ||
| 493 | |||
| 494 | // Compile all the shaders | ||
| 495 | for (i = 0; i < NUM_SHADERS; ++i) { | ||
| 496 | if (!CompileShaderProgram(ctx, i, &ctx->shaders[i])) { | ||
| 497 | GL_DestroyShaderContext(ctx); | ||
| 498 | return NULL; | ||
| 499 | } | ||
| 500 | } | ||
| 501 | |||
| 502 | // We're done! | ||
| 503 | return ctx; | ||
| 504 | } | ||
| 505 | |||
| 506 | void GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader, const float *shader_params) | ||
| 507 | { | ||
| 508 | GLint location; | ||
| 509 | GLhandleARB program = ctx->shaders[shader].program; | ||
| 510 | |||
| 511 | ctx->glUseProgramObjectARB(program); | ||
| 512 | |||
| 513 | if (shader_params && shader_params != ctx->shader_params[shader]) { | ||
| 514 | // YUV shader params are Yoffset, 0, Rcoeff, 0, Gcoeff, 0, Bcoeff, 0 | ||
| 515 | location = ctx->glGetUniformLocationARB(program, "Yoffset"); | ||
| 516 | if (location >= 0) { | ||
| 517 | ctx->glUniform3fARB(location, shader_params[0], shader_params[1], shader_params[2]); | ||
| 518 | } | ||
| 519 | location = ctx->glGetUniformLocationARB(program, "Rcoeff"); | ||
| 520 | if (location >= 0) { | ||
| 521 | ctx->glUniform3fARB(location, shader_params[4], shader_params[5], shader_params[6]); | ||
| 522 | } | ||
| 523 | location = ctx->glGetUniformLocationARB(program, "Gcoeff"); | ||
| 524 | if (location >= 0) { | ||
| 525 | ctx->glUniform3fARB(location, shader_params[8], shader_params[9], shader_params[10]); | ||
| 526 | } | ||
| 527 | location = ctx->glGetUniformLocationARB(program, "Bcoeff"); | ||
| 528 | if (location >= 0) { | ||
| 529 | ctx->glUniform3fARB(location, shader_params[12], shader_params[13], shader_params[14]); | ||
| 530 | } | ||
| 531 | ctx->shader_params[shader] = shader_params; | ||
| 532 | } | ||
| 533 | } | ||
| 534 | |||
| 535 | void GL_DestroyShaderContext(GL_ShaderContext *ctx) | ||
| 536 | { | ||
| 537 | int i; | ||
| 538 | |||
| 539 | for (i = 0; i < NUM_SHADERS; ++i) { | ||
| 540 | DestroyShaderProgram(ctx, &ctx->shaders[i]); | ||
| 541 | } | ||
| 542 | SDL_free(ctx); | ||
| 543 | } | ||
| 544 | |||
| 545 | #endif // SDL_VIDEO_RENDER_OGL | ||
diff --git a/SDL-3.2.8/src/render/opengl/SDL_shaders_gl.h b/SDL-3.2.8/src/render/opengl/SDL_shaders_gl.h new file mode 100644 index 0000000..374940a --- /dev/null +++ b/SDL-3.2.8/src/render/opengl/SDL_shaders_gl.h | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_shaders_gl_h_ | ||
| 23 | #define SDL_shaders_gl_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | // OpenGL shader implementation | ||
| 28 | |||
| 29 | typedef enum | ||
| 30 | { | ||
| 31 | SHADER_INVALID = -1, | ||
| 32 | SHADER_NONE, | ||
| 33 | SHADER_SOLID, | ||
| 34 | SHADER_RGB, | ||
| 35 | SHADER_RGBA, | ||
| 36 | #ifdef SDL_HAVE_YUV | ||
| 37 | SHADER_YUV, | ||
| 38 | SHADER_NV12_RA, | ||
| 39 | SHADER_NV12_RG, | ||
| 40 | SHADER_NV21_RA, | ||
| 41 | SHADER_NV21_RG, | ||
| 42 | #endif | ||
| 43 | NUM_SHADERS | ||
| 44 | } GL_Shader; | ||
| 45 | |||
| 46 | typedef struct GL_ShaderContext GL_ShaderContext; | ||
| 47 | |||
| 48 | extern GL_ShaderContext *GL_CreateShaderContext(void); | ||
| 49 | extern void GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader, const float *shader_params); | ||
| 50 | extern void GL_DestroyShaderContext(GL_ShaderContext *ctx); | ||
| 51 | |||
| 52 | #endif // SDL_shaders_gl_h_ | ||
diff --git a/SDL-3.2.8/src/render/opengles2/SDL_gles2funcs.h b/SDL-3.2.8/src/render/opengles2/SDL_gles2funcs.h new file mode 100644 index 0000000..bbc47a4 --- /dev/null +++ b/SDL-3.2.8/src/render/opengles2/SDL_gles2funcs.h | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | SDL_PROC(void, glActiveTexture, (GLenum)) | ||
| 23 | SDL_PROC(void, glAttachShader, (GLuint, GLuint)) | ||
| 24 | SDL_PROC(void, glBindAttribLocation, (GLuint, GLuint, const char *)) | ||
| 25 | SDL_PROC(void, glBindTexture, (GLenum, GLuint)) | ||
| 26 | SDL_PROC(void, glBlendEquationSeparate, (GLenum, GLenum)) | ||
| 27 | SDL_PROC(void, glBlendFuncSeparate, (GLenum, GLenum, GLenum, GLenum)) | ||
| 28 | SDL_PROC(void, glClear, (GLbitfield)) | ||
| 29 | SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf)) | ||
| 30 | SDL_PROC(void, glCompileShader, (GLuint)) | ||
| 31 | SDL_PROC(GLuint, glCreateProgram, (void)) | ||
| 32 | SDL_PROC(GLuint, glCreateShader, (GLenum)) | ||
| 33 | SDL_PROC(void, glDeleteProgram, (GLuint)) | ||
| 34 | SDL_PROC(void, glDeleteShader, (GLuint)) | ||
| 35 | SDL_PROC(void, glDeleteTextures, (GLsizei, const GLuint *)) | ||
| 36 | SDL_PROC(void, glDisable, (GLenum)) | ||
| 37 | SDL_PROC(void, glDisableVertexAttribArray, (GLuint)) | ||
| 38 | SDL_PROC(void, glDrawArrays, (GLenum, GLint, GLsizei)) | ||
| 39 | SDL_PROC(void, glEnable, (GLenum)) | ||
| 40 | SDL_PROC(void, glEnableVertexAttribArray, (GLuint)) | ||
| 41 | SDL_PROC(void, glFinish, (void)) | ||
| 42 | SDL_PROC(void, glGenFramebuffers, (GLsizei, GLuint *)) | ||
| 43 | SDL_PROC(void, glGenTextures, (GLsizei, GLuint *)) | ||
| 44 | SDL_PROC(const GLubyte *, glGetString, (GLenum)) | ||
| 45 | SDL_PROC(GLenum, glGetError, (void)) | ||
| 46 | SDL_PROC(void, glGetIntegerv, (GLenum, GLint *)) | ||
| 47 | SDL_PROC(void, glGetProgramiv, (GLuint, GLenum, GLint *)) | ||
| 48 | SDL_PROC(void, glGetShaderInfoLog, (GLuint, GLsizei, GLsizei *, char *)) | ||
| 49 | SDL_PROC(void, glGetShaderiv, (GLuint, GLenum, GLint *)) | ||
| 50 | SDL_PROC(GLint, glGetUniformLocation, (GLuint, const char *)) | ||
| 51 | SDL_PROC(void, glLinkProgram, (GLuint)) | ||
| 52 | SDL_PROC(void, glPixelStorei, (GLenum, GLint)) | ||
| 53 | SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid *)) | ||
| 54 | SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei)) | ||
| 55 | SDL_PROC(void, glShaderBinary, (GLsizei, const GLuint *, GLenum, const void *, GLsizei)) | ||
| 56 | SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const GLchar *const *, const GLint *)) | ||
| 57 | SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *)) | ||
| 58 | SDL_PROC(void, glTexParameteri, (GLenum, GLenum, GLint)) | ||
| 59 | SDL_PROC(void, glTexSubImage2D, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)) | ||
| 60 | SDL_PROC(void, glUniform1i, (GLint, GLint)) | ||
| 61 | SDL_PROC(void, glUniform3f, (GLint, GLfloat, GLfloat, GLfloat)) | ||
| 62 | SDL_PROC(void, glUniform4f, (GLint, GLfloat, GLfloat, GLfloat, GLfloat)) | ||
| 63 | SDL_PROC(void, glUniformMatrix3fv, (GLint, GLsizei, GLboolean, const GLfloat *)) | ||
| 64 | SDL_PROC(void, glUniformMatrix4fv, (GLint, GLsizei, GLboolean, const GLfloat *)) | ||
| 65 | SDL_PROC(void, glUseProgram, (GLuint)) | ||
| 66 | SDL_PROC(void, glVertexAttribPointer, (GLuint, GLint, GLenum, GLboolean, GLsizei, const void *)) | ||
| 67 | SDL_PROC(void, glViewport, (GLint, GLint, GLsizei, GLsizei)) | ||
| 68 | SDL_PROC(void, glBindFramebuffer, (GLenum, GLuint)) | ||
| 69 | SDL_PROC(void, glFramebufferTexture2D, (GLenum, GLenum, GLenum, GLuint, GLint)) | ||
| 70 | SDL_PROC(GLenum, glCheckFramebufferStatus, (GLenum)) | ||
| 71 | SDL_PROC(void, glDeleteFramebuffers, (GLsizei, const GLuint *)) | ||
| 72 | SDL_PROC(GLint, glGetAttribLocation, (GLuint, const GLchar *)) | ||
| 73 | SDL_PROC(void, glGetProgramInfoLog, (GLuint, GLsizei, GLsizei *, GLchar *)) | ||
| 74 | SDL_PROC(void, glGenBuffers, (GLsizei, GLuint *)) | ||
| 75 | SDL_PROC(void, glDeleteBuffers, (GLsizei, const GLuint *)) | ||
| 76 | SDL_PROC(void, glBindBuffer, (GLenum, GLuint)) | ||
| 77 | SDL_PROC(void, glBufferData, (GLenum, GLsizeiptr, const GLvoid *, GLenum)) | ||
| 78 | SDL_PROC(void, glBufferSubData, (GLenum, GLintptr, GLsizeiptr, const GLvoid *)) | ||
diff --git a/SDL-3.2.8/src/render/opengles2/SDL_render_gles2.c b/SDL-3.2.8/src/render/opengles2/SDL_render_gles2.c new file mode 100644 index 0000000..0e142a7 --- /dev/null +++ b/SDL-3.2.8/src/render/opengles2/SDL_render_gles2.c | |||
| @@ -0,0 +1,2226 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_OGL_ES2 | ||
| 24 | |||
| 25 | #include "../../video/SDL_sysvideo.h" // For SDL_RecreateWindow | ||
| 26 | #include <SDL3/SDL_opengles2.h> | ||
| 27 | #include "../SDL_sysrender.h" | ||
| 28 | #include "../../video/SDL_pixels_c.h" | ||
| 29 | #include "SDL_shaders_gles2.h" | ||
| 30 | |||
| 31 | /* WebGL doesn't offer client-side arrays, so use Vertex Buffer Objects | ||
| 32 | on Emscripten, which converts GLES2 into WebGL calls. | ||
| 33 | In all other cases, attempt to use client-side arrays, as they tend to | ||
| 34 | be dramatically faster when not batching, and about the same when | ||
| 35 | we are. */ | ||
| 36 | #ifdef SDL_PLATFORM_EMSCRIPTEN | ||
| 37 | #define USE_VERTEX_BUFFER_OBJECTS 1 | ||
| 38 | #else | ||
| 39 | #define USE_VERTEX_BUFFER_OBJECTS 0 | ||
| 40 | #endif | ||
| 41 | |||
| 42 | /* To prevent unnecessary window recreation, | ||
| 43 | * these should match the defaults selected in SDL_GL_ResetAttributes | ||
| 44 | */ | ||
| 45 | #define RENDERER_CONTEXT_MAJOR 2 | ||
| 46 | #define RENDERER_CONTEXT_MINOR 0 | ||
| 47 | |||
| 48 | /************************************************************************************************* | ||
| 49 | * Context structures * | ||
| 50 | *************************************************************************************************/ | ||
| 51 | |||
| 52 | typedef struct GLES2_FBOList GLES2_FBOList; | ||
| 53 | |||
| 54 | struct GLES2_FBOList | ||
| 55 | { | ||
| 56 | Uint32 w, h; | ||
| 57 | GLuint FBO; | ||
| 58 | GLES2_FBOList *next; | ||
| 59 | }; | ||
| 60 | |||
| 61 | typedef struct GLES2_TextureData | ||
| 62 | { | ||
| 63 | GLuint texture; | ||
| 64 | bool texture_external; | ||
| 65 | GLenum texture_type; | ||
| 66 | GLenum pixel_format; | ||
| 67 | GLenum pixel_type; | ||
| 68 | void *pixel_data; | ||
| 69 | int pitch; | ||
| 70 | #ifdef SDL_HAVE_YUV | ||
| 71 | // YUV texture support | ||
| 72 | bool yuv; | ||
| 73 | bool nv12; | ||
| 74 | GLuint texture_v; | ||
| 75 | GLuint texture_v_external; | ||
| 76 | GLuint texture_u; | ||
| 77 | GLuint texture_u_external; | ||
| 78 | #endif | ||
| 79 | GLES2_FBOList *fbo; | ||
| 80 | } GLES2_TextureData; | ||
| 81 | |||
| 82 | typedef enum | ||
| 83 | { | ||
| 84 | GLES2_ATTRIBUTE_POSITION = 0, | ||
| 85 | GLES2_ATTRIBUTE_COLOR = 1, | ||
| 86 | GLES2_ATTRIBUTE_TEXCOORD = 2, | ||
| 87 | } GLES2_Attribute; | ||
| 88 | |||
| 89 | typedef enum | ||
| 90 | { | ||
| 91 | GLES2_UNIFORM_PROJECTION, | ||
| 92 | GLES2_UNIFORM_TEXTURE, | ||
| 93 | GLES2_UNIFORM_TEXTURE_U, | ||
| 94 | GLES2_UNIFORM_TEXTURE_V, | ||
| 95 | GLES2_UNIFORM_OFFSET, | ||
| 96 | GLES2_UNIFORM_MATRIX, | ||
| 97 | NUM_GLES2_UNIFORMS | ||
| 98 | } GLES2_Uniform; | ||
| 99 | |||
| 100 | static const char *GLES2_UniformNames[] = { | ||
| 101 | "u_projection", | ||
| 102 | "u_texture", | ||
| 103 | "u_texture_u", | ||
| 104 | "u_texture_v", | ||
| 105 | "u_offset", | ||
| 106 | "u_matrix" | ||
| 107 | }; | ||
| 108 | SDL_COMPILE_TIME_ASSERT(GLES2_UniformNames, SDL_arraysize(GLES2_UniformNames) == NUM_GLES2_UNIFORMS); | ||
| 109 | |||
| 110 | typedef struct GLES2_ProgramCacheEntry | ||
| 111 | { | ||
| 112 | GLuint id; | ||
| 113 | GLuint vertex_shader; | ||
| 114 | GLuint fragment_shader; | ||
| 115 | GLuint uniform_locations[NUM_GLES2_UNIFORMS]; | ||
| 116 | GLfloat projection[4][4]; | ||
| 117 | const float *shader_params; | ||
| 118 | struct GLES2_ProgramCacheEntry *prev; | ||
| 119 | struct GLES2_ProgramCacheEntry *next; | ||
| 120 | } GLES2_ProgramCacheEntry; | ||
| 121 | |||
| 122 | typedef struct GLES2_ProgramCache | ||
| 123 | { | ||
| 124 | int count; | ||
| 125 | GLES2_ProgramCacheEntry *head; | ||
| 126 | GLES2_ProgramCacheEntry *tail; | ||
| 127 | } GLES2_ProgramCache; | ||
| 128 | |||
| 129 | typedef enum | ||
| 130 | { | ||
| 131 | GLES2_IMAGESOURCE_INVALID, | ||
| 132 | GLES2_IMAGESOURCE_SOLID, | ||
| 133 | GLES2_IMAGESOURCE_TEXTURE_ABGR, | ||
| 134 | GLES2_IMAGESOURCE_TEXTURE_ARGB, | ||
| 135 | GLES2_IMAGESOURCE_TEXTURE_RGB, | ||
| 136 | GLES2_IMAGESOURCE_TEXTURE_BGR, | ||
| 137 | GLES2_IMAGESOURCE_TEXTURE_YUV, | ||
| 138 | GLES2_IMAGESOURCE_TEXTURE_NV12, | ||
| 139 | GLES2_IMAGESOURCE_TEXTURE_NV21, | ||
| 140 | GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES | ||
| 141 | } GLES2_ImageSource; | ||
| 142 | |||
| 143 | typedef struct | ||
| 144 | { | ||
| 145 | SDL_Rect viewport; | ||
| 146 | bool viewport_dirty; | ||
| 147 | SDL_Texture *texture; | ||
| 148 | SDL_Texture *target; | ||
| 149 | SDL_BlendMode blend; | ||
| 150 | bool cliprect_enabled_dirty; | ||
| 151 | bool cliprect_enabled; | ||
| 152 | bool cliprect_dirty; | ||
| 153 | SDL_Rect cliprect; | ||
| 154 | bool texturing; | ||
| 155 | bool texturing_dirty; | ||
| 156 | SDL_FColor clear_color; | ||
| 157 | bool clear_color_dirty; | ||
| 158 | int drawablew; | ||
| 159 | int drawableh; | ||
| 160 | GLES2_ProgramCacheEntry *program; | ||
| 161 | const float *shader_params; | ||
| 162 | GLfloat projection[4][4]; | ||
| 163 | } GLES2_DrawStateCache; | ||
| 164 | |||
| 165 | typedef struct GLES2_RenderData | ||
| 166 | { | ||
| 167 | SDL_GLContext context; | ||
| 168 | |||
| 169 | bool debug_enabled; | ||
| 170 | |||
| 171 | bool GL_EXT_blend_minmax_supported; | ||
| 172 | |||
| 173 | #define SDL_PROC(ret, func, params) ret (APIENTRY *func) params; | ||
| 174 | #include "SDL_gles2funcs.h" | ||
| 175 | #undef SDL_PROC | ||
| 176 | GLES2_FBOList *framebuffers; | ||
| 177 | GLuint window_framebuffer; | ||
| 178 | |||
| 179 | GLuint shader_id_cache[GLES2_SHADER_COUNT]; | ||
| 180 | |||
| 181 | GLES2_ProgramCache program_cache; | ||
| 182 | Uint8 clear_r, clear_g, clear_b, clear_a; | ||
| 183 | |||
| 184 | #if USE_VERTEX_BUFFER_OBJECTS | ||
| 185 | GLuint vertex_buffers[8]; | ||
| 186 | size_t vertex_buffer_size[8]; | ||
| 187 | int current_vertex_buffer; | ||
| 188 | #endif | ||
| 189 | |||
| 190 | GLES2_DrawStateCache drawstate; | ||
| 191 | GLES2_ShaderIncludeType texcoord_precision_hint; | ||
| 192 | } GLES2_RenderData; | ||
| 193 | |||
| 194 | #define GLES2_MAX_CACHED_PROGRAMS 8 | ||
| 195 | |||
| 196 | static const char *GL_TranslateError(GLenum error) | ||
| 197 | { | ||
| 198 | #define GL_ERROR_TRANSLATE(e) \ | ||
| 199 | case e: \ | ||
| 200 | return #e; | ||
| 201 | switch (error) { | ||
| 202 | GL_ERROR_TRANSLATE(GL_INVALID_ENUM) | ||
| 203 | GL_ERROR_TRANSLATE(GL_INVALID_VALUE) | ||
| 204 | GL_ERROR_TRANSLATE(GL_INVALID_OPERATION) | ||
| 205 | GL_ERROR_TRANSLATE(GL_OUT_OF_MEMORY) | ||
| 206 | GL_ERROR_TRANSLATE(GL_NO_ERROR) | ||
| 207 | default: | ||
| 208 | return "UNKNOWN"; | ||
| 209 | } | ||
| 210 | #undef GL_ERROR_TRANSLATE | ||
| 211 | } | ||
| 212 | |||
| 213 | static void GL_ClearErrors(SDL_Renderer *renderer) | ||
| 214 | { | ||
| 215 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 216 | |||
| 217 | if (!data->debug_enabled) { | ||
| 218 | return; | ||
| 219 | } | ||
| 220 | while (data->glGetError() != GL_NO_ERROR) { | ||
| 221 | // continue; | ||
| 222 | } | ||
| 223 | } | ||
| 224 | |||
| 225 | static bool GL_CheckAllErrors(const char *prefix, SDL_Renderer *renderer, const char *file, int line, const char *function) | ||
| 226 | { | ||
| 227 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 228 | bool result = true; | ||
| 229 | |||
| 230 | if (!data->debug_enabled) { | ||
| 231 | return true; | ||
| 232 | } | ||
| 233 | // check gl errors (can return multiple errors) | ||
| 234 | for (;;) { | ||
| 235 | GLenum error = data->glGetError(); | ||
| 236 | if (error != GL_NO_ERROR) { | ||
| 237 | if (!prefix || prefix[0] == '\0') { | ||
| 238 | prefix = "generic"; | ||
| 239 | } | ||
| 240 | SDL_SetError("%s: %s (%d): %s %s (0x%X)", prefix, file, line, function, GL_TranslateError(error), error); | ||
| 241 | result = false; | ||
| 242 | } else { | ||
| 243 | break; | ||
| 244 | } | ||
| 245 | } | ||
| 246 | return result; | ||
| 247 | } | ||
| 248 | |||
| 249 | #if 0 | ||
| 250 | #define GL_CheckError(prefix, renderer) | ||
| 251 | #else | ||
| 252 | #define GL_CheckError(prefix, renderer) GL_CheckAllErrors(prefix, renderer, SDL_FILE, SDL_LINE, SDL_FUNCTION) | ||
| 253 | #endif | ||
| 254 | |||
| 255 | /************************************************************************************************* | ||
| 256 | * Renderer state APIs * | ||
| 257 | *************************************************************************************************/ | ||
| 258 | |||
| 259 | static bool GLES2_LoadFunctions(GLES2_RenderData *data) | ||
| 260 | { | ||
| 261 | #ifdef SDL_VIDEO_DRIVER_UIKIT | ||
| 262 | #define __SDL_NOGETPROCADDR__ | ||
| 263 | #elif defined(SDL_VIDEO_DRIVER_ANDROID) | ||
| 264 | #define __SDL_NOGETPROCADDR__ | ||
| 265 | #endif | ||
| 266 | |||
| 267 | #if defined __SDL_NOGETPROCADDR__ | ||
| 268 | #define SDL_PROC(ret, func, params) data->func = func; | ||
| 269 | #else | ||
| 270 | #define SDL_PROC(ret, func, params) \ | ||
| 271 | do { \ | ||
| 272 | data->func = (ret (APIENTRY *) params)SDL_GL_GetProcAddress(#func); \ | ||
| 273 | if (!data->func) { \ | ||
| 274 | return SDL_SetError("Couldn't load GLES2 function %s: %s", #func, SDL_GetError()); \ | ||
| 275 | } \ | ||
| 276 | } while (0); | ||
| 277 | #endif // __SDL_NOGETPROCADDR__ | ||
| 278 | |||
| 279 | #include "SDL_gles2funcs.h" | ||
| 280 | #undef SDL_PROC | ||
| 281 | return true; | ||
| 282 | } | ||
| 283 | |||
| 284 | static GLES2_FBOList *GLES2_GetFBO(GLES2_RenderData *data, Uint32 w, Uint32 h) | ||
| 285 | { | ||
| 286 | GLES2_FBOList *result = data->framebuffers; | ||
| 287 | while ((result) && ((result->w != w) || (result->h != h))) { | ||
| 288 | result = result->next; | ||
| 289 | } | ||
| 290 | if (!result) { | ||
| 291 | result = (GLES2_FBOList *)SDL_malloc(sizeof(GLES2_FBOList)); | ||
| 292 | result->w = w; | ||
| 293 | result->h = h; | ||
| 294 | data->glGenFramebuffers(1, &result->FBO); | ||
| 295 | result->next = data->framebuffers; | ||
| 296 | data->framebuffers = result; | ||
| 297 | } | ||
| 298 | return result; | ||
| 299 | } | ||
| 300 | |||
| 301 | static bool GLES2_ActivateRenderer(SDL_Renderer *renderer) | ||
| 302 | { | ||
| 303 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 304 | |||
| 305 | if (SDL_GL_GetCurrentContext() != data->context) { | ||
| 306 | // Null out the current program to ensure we set it again | ||
| 307 | data->drawstate.program = NULL; | ||
| 308 | |||
| 309 | if (!SDL_GL_MakeCurrent(renderer->window, data->context)) { | ||
| 310 | return false; | ||
| 311 | } | ||
| 312 | } | ||
| 313 | |||
| 314 | GL_ClearErrors(renderer); | ||
| 315 | |||
| 316 | return true; | ||
| 317 | } | ||
| 318 | |||
| 319 | static void GLES2_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 320 | { | ||
| 321 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 322 | |||
| 323 | if (event->type == SDL_EVENT_WINDOW_MINIMIZED) { | ||
| 324 | // According to Apple documentation, we need to finish drawing NOW! | ||
| 325 | data->glFinish(); | ||
| 326 | } | ||
| 327 | } | ||
| 328 | |||
| 329 | static GLenum GetBlendFunc(SDL_BlendFactor factor) | ||
| 330 | { | ||
| 331 | switch (factor) { | ||
| 332 | case SDL_BLENDFACTOR_ZERO: | ||
| 333 | return GL_ZERO; | ||
| 334 | case SDL_BLENDFACTOR_ONE: | ||
| 335 | return GL_ONE; | ||
| 336 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 337 | return GL_SRC_COLOR; | ||
| 338 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 339 | return GL_ONE_MINUS_SRC_COLOR; | ||
| 340 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 341 | return GL_SRC_ALPHA; | ||
| 342 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 343 | return GL_ONE_MINUS_SRC_ALPHA; | ||
| 344 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 345 | return GL_DST_COLOR; | ||
| 346 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 347 | return GL_ONE_MINUS_DST_COLOR; | ||
| 348 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 349 | return GL_DST_ALPHA; | ||
| 350 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 351 | return GL_ONE_MINUS_DST_ALPHA; | ||
| 352 | default: | ||
| 353 | return GL_INVALID_ENUM; | ||
| 354 | } | ||
| 355 | } | ||
| 356 | |||
| 357 | static GLenum GetBlendEquation(SDL_BlendOperation operation) | ||
| 358 | { | ||
| 359 | switch (operation) { | ||
| 360 | case SDL_BLENDOPERATION_ADD: | ||
| 361 | return GL_FUNC_ADD; | ||
| 362 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 363 | return GL_FUNC_SUBTRACT; | ||
| 364 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 365 | return GL_FUNC_REVERSE_SUBTRACT; | ||
| 366 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 367 | return GL_MIN_EXT; | ||
| 368 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 369 | return GL_MAX_EXT; | ||
| 370 | default: | ||
| 371 | return GL_INVALID_ENUM; | ||
| 372 | } | ||
| 373 | } | ||
| 374 | |||
| 375 | static bool GLES2_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 376 | { | ||
| 377 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 378 | |||
| 379 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 380 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 381 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 382 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 383 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 384 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 385 | |||
| 386 | if (GetBlendFunc(srcColorFactor) == GL_INVALID_ENUM || | ||
| 387 | GetBlendFunc(srcAlphaFactor) == GL_INVALID_ENUM || | ||
| 388 | GetBlendEquation(colorOperation) == GL_INVALID_ENUM || | ||
| 389 | GetBlendFunc(dstColorFactor) == GL_INVALID_ENUM || | ||
| 390 | GetBlendFunc(dstAlphaFactor) == GL_INVALID_ENUM || | ||
| 391 | GetBlendEquation(alphaOperation) == GL_INVALID_ENUM) { | ||
| 392 | return false; | ||
| 393 | } | ||
| 394 | |||
| 395 | if (colorOperation == SDL_BLENDOPERATION_MINIMUM && !data->GL_EXT_blend_minmax_supported) { | ||
| 396 | return false; | ||
| 397 | } | ||
| 398 | if (colorOperation == SDL_BLENDOPERATION_MAXIMUM && !data->GL_EXT_blend_minmax_supported) { | ||
| 399 | return false; | ||
| 400 | } | ||
| 401 | |||
| 402 | return true; | ||
| 403 | } | ||
| 404 | |||
| 405 | static GLES2_ProgramCacheEntry *GLES2_CacheProgram(GLES2_RenderData *data, GLuint vertex, GLuint fragment) | ||
| 406 | { | ||
| 407 | GLES2_ProgramCacheEntry *entry; | ||
| 408 | GLint linkSuccessful; | ||
| 409 | int i; | ||
| 410 | |||
| 411 | // Check if we've already cached this program | ||
| 412 | entry = data->program_cache.head; | ||
| 413 | while (entry) { | ||
| 414 | if (entry->vertex_shader == vertex && entry->fragment_shader == fragment) { | ||
| 415 | break; | ||
| 416 | } | ||
| 417 | entry = entry->next; | ||
| 418 | } | ||
| 419 | if (entry) { | ||
| 420 | if (data->program_cache.head != entry) { | ||
| 421 | if (entry->next) { | ||
| 422 | entry->next->prev = entry->prev; | ||
| 423 | } | ||
| 424 | if (entry->prev) { | ||
| 425 | entry->prev->next = entry->next; | ||
| 426 | } | ||
| 427 | entry->prev = NULL; | ||
| 428 | entry->next = data->program_cache.head; | ||
| 429 | data->program_cache.head->prev = entry; | ||
| 430 | data->program_cache.head = entry; | ||
| 431 | } | ||
| 432 | return entry; | ||
| 433 | } | ||
| 434 | |||
| 435 | // Create a program cache entry | ||
| 436 | entry = (GLES2_ProgramCacheEntry *)SDL_calloc(1, sizeof(GLES2_ProgramCacheEntry)); | ||
| 437 | if (!entry) { | ||
| 438 | return NULL; | ||
| 439 | } | ||
| 440 | entry->vertex_shader = vertex; | ||
| 441 | entry->fragment_shader = fragment; | ||
| 442 | |||
| 443 | // Create the program and link it | ||
| 444 | entry->id = data->glCreateProgram(); | ||
| 445 | data->glAttachShader(entry->id, vertex); | ||
| 446 | data->glAttachShader(entry->id, fragment); | ||
| 447 | data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_POSITION, "a_position"); | ||
| 448 | data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_COLOR, "a_color"); | ||
| 449 | data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_TEXCOORD, "a_texCoord"); | ||
| 450 | data->glLinkProgram(entry->id); | ||
| 451 | data->glGetProgramiv(entry->id, GL_LINK_STATUS, &linkSuccessful); | ||
| 452 | if (!linkSuccessful) { | ||
| 453 | data->glDeleteProgram(entry->id); | ||
| 454 | SDL_free(entry); | ||
| 455 | SDL_SetError("Failed to link shader program"); | ||
| 456 | return NULL; | ||
| 457 | } | ||
| 458 | |||
| 459 | // Predetermine locations of uniform variables | ||
| 460 | for (i = 0; i < NUM_GLES2_UNIFORMS; ++i) { | ||
| 461 | entry->uniform_locations[i] = data->glGetUniformLocation(entry->id, GLES2_UniformNames[i]); | ||
| 462 | } | ||
| 463 | |||
| 464 | data->glUseProgram(entry->id); | ||
| 465 | if (entry->uniform_locations[GLES2_UNIFORM_TEXTURE_V] != -1) { | ||
| 466 | data->glUniform1i(entry->uniform_locations[GLES2_UNIFORM_TEXTURE_V], 2); // always texture unit 2. | ||
| 467 | } | ||
| 468 | if (entry->uniform_locations[GLES2_UNIFORM_TEXTURE_U] != -1) { | ||
| 469 | data->glUniform1i(entry->uniform_locations[GLES2_UNIFORM_TEXTURE_U], 1); // always texture unit 1. | ||
| 470 | } | ||
| 471 | if (entry->uniform_locations[GLES2_UNIFORM_TEXTURE] != -1) { | ||
| 472 | data->glUniform1i(entry->uniform_locations[GLES2_UNIFORM_TEXTURE], 0); // always texture unit 0. | ||
| 473 | } | ||
| 474 | if (entry->uniform_locations[GLES2_UNIFORM_PROJECTION] != -1) { | ||
| 475 | data->glUniformMatrix4fv(entry->uniform_locations[GLES2_UNIFORM_PROJECTION], 1, GL_FALSE, (GLfloat *)entry->projection); | ||
| 476 | } | ||
| 477 | |||
| 478 | // Cache the linked program | ||
| 479 | if (data->program_cache.head) { | ||
| 480 | entry->next = data->program_cache.head; | ||
| 481 | data->program_cache.head->prev = entry; | ||
| 482 | } else { | ||
| 483 | data->program_cache.tail = entry; | ||
| 484 | } | ||
| 485 | data->program_cache.head = entry; | ||
| 486 | ++data->program_cache.count; | ||
| 487 | |||
| 488 | // Evict the last entry from the cache if we exceed the limit | ||
| 489 | if (data->program_cache.count > GLES2_MAX_CACHED_PROGRAMS) { | ||
| 490 | data->glDeleteProgram(data->program_cache.tail->id); | ||
| 491 | data->program_cache.tail = data->program_cache.tail->prev; | ||
| 492 | if (data->program_cache.tail) { | ||
| 493 | SDL_free(data->program_cache.tail->next); | ||
| 494 | data->program_cache.tail->next = NULL; | ||
| 495 | } | ||
| 496 | --data->program_cache.count; | ||
| 497 | } | ||
| 498 | return entry; | ||
| 499 | } | ||
| 500 | |||
| 501 | static GLuint GLES2_CacheShader(GLES2_RenderData *data, GLES2_ShaderType type, GLenum shader_type) | ||
| 502 | { | ||
| 503 | GLuint id = 0; | ||
| 504 | GLint compileSuccessful = GL_FALSE; | ||
| 505 | int attempt, num_src; | ||
| 506 | const GLchar *shader_src_list[3]; | ||
| 507 | const GLchar *shader_body = GLES2_GetShader(type); | ||
| 508 | |||
| 509 | if (!shader_body) { | ||
| 510 | SDL_SetError("No shader body src"); | ||
| 511 | return true; | ||
| 512 | } | ||
| 513 | |||
| 514 | for (attempt = 0; attempt < 2 && !compileSuccessful; ++attempt) { | ||
| 515 | num_src = 0; | ||
| 516 | |||
| 517 | shader_src_list[num_src++] = GLES2_GetShaderPrologue(type); | ||
| 518 | |||
| 519 | if (shader_type == GL_FRAGMENT_SHADER) { | ||
| 520 | if (attempt == 0) { | ||
| 521 | shader_src_list[num_src++] = GLES2_GetShaderInclude(data->texcoord_precision_hint); | ||
| 522 | } else { | ||
| 523 | shader_src_list[num_src++] = GLES2_GetShaderInclude(GLES2_SHADER_FRAGMENT_INCLUDE_UNDEF_PRECISION); | ||
| 524 | } | ||
| 525 | } | ||
| 526 | |||
| 527 | shader_src_list[num_src++] = shader_body; | ||
| 528 | |||
| 529 | SDL_assert(num_src <= SDL_arraysize(shader_src_list)); | ||
| 530 | |||
| 531 | #ifdef DEBUG_PRINT_SHADERS | ||
| 532 | { | ||
| 533 | int i; | ||
| 534 | char *message = NULL; | ||
| 535 | |||
| 536 | SDL_asprintf(&message, "Compiling shader:\n"); | ||
| 537 | for (i = 0; i < num_src; ++i) { | ||
| 538 | char *last_message = message; | ||
| 539 | SDL_asprintf(&message, "%s%s", last_message, shader_src_list[i]); | ||
| 540 | SDL_free(last_message); | ||
| 541 | } | ||
| 542 | SDL_Log("%s", message); | ||
| 543 | SDL_free(message); | ||
| 544 | } | ||
| 545 | #endif | ||
| 546 | |||
| 547 | // Compile | ||
| 548 | id = data->glCreateShader(shader_type); | ||
| 549 | data->glShaderSource(id, num_src, shader_src_list, NULL); | ||
| 550 | data->glCompileShader(id); | ||
| 551 | data->glGetShaderiv(id, GL_COMPILE_STATUS, &compileSuccessful); | ||
| 552 | } | ||
| 553 | |||
| 554 | if (!compileSuccessful) { | ||
| 555 | char *info = NULL; | ||
| 556 | int length = 0; | ||
| 557 | |||
| 558 | data->glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length); | ||
| 559 | if (length > 0) { | ||
| 560 | info = (char *)SDL_malloc(length); | ||
| 561 | if (info) { | ||
| 562 | data->glGetShaderInfoLog(id, length, &length, info); | ||
| 563 | } | ||
| 564 | } | ||
| 565 | if (info) { | ||
| 566 | SDL_SetError("Failed to load the shader %d: %s", type, info); | ||
| 567 | SDL_free(info); | ||
| 568 | } else { | ||
| 569 | SDL_SetError("Failed to load the shader %d", type); | ||
| 570 | } | ||
| 571 | data->glDeleteShader(id); | ||
| 572 | return true; | ||
| 573 | } | ||
| 574 | |||
| 575 | // Cache | ||
| 576 | data->shader_id_cache[(Uint32)type] = id; | ||
| 577 | |||
| 578 | return id; | ||
| 579 | } | ||
| 580 | |||
| 581 | static bool GLES2_CacheShaders(GLES2_RenderData *data) | ||
| 582 | { | ||
| 583 | int shader; | ||
| 584 | |||
| 585 | data->texcoord_precision_hint = GLES2_GetTexCoordPrecisionEnumFromHint(); | ||
| 586 | |||
| 587 | for (shader = 0; shader < GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES; ++shader) { | ||
| 588 | GLenum shader_type; | ||
| 589 | |||
| 590 | if (shader == GLES2_SHADER_VERTEX_DEFAULT) { | ||
| 591 | shader_type = GL_VERTEX_SHADER; | ||
| 592 | } else { | ||
| 593 | shader_type = GL_FRAGMENT_SHADER; | ||
| 594 | } | ||
| 595 | if (!GLES2_CacheShader(data, (GLES2_ShaderType)shader, shader_type)) { | ||
| 596 | return false; | ||
| 597 | } | ||
| 598 | } | ||
| 599 | return true; | ||
| 600 | } | ||
| 601 | |||
| 602 | static bool GLES2_SelectProgram(GLES2_RenderData *data, GLES2_ImageSource source, SDL_Colorspace colorspace) | ||
| 603 | { | ||
| 604 | GLuint vertex; | ||
| 605 | GLuint fragment; | ||
| 606 | GLES2_ShaderType vtype, ftype; | ||
| 607 | GLES2_ProgramCacheEntry *program; | ||
| 608 | const float *shader_params = NULL; | ||
| 609 | |||
| 610 | // Select an appropriate shader pair for the specified modes | ||
| 611 | vtype = GLES2_SHADER_VERTEX_DEFAULT; | ||
| 612 | switch (source) { | ||
| 613 | case GLES2_IMAGESOURCE_SOLID: | ||
| 614 | ftype = GLES2_SHADER_FRAGMENT_SOLID; | ||
| 615 | break; | ||
| 616 | case GLES2_IMAGESOURCE_TEXTURE_ABGR: | ||
| 617 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ABGR; | ||
| 618 | break; | ||
| 619 | case GLES2_IMAGESOURCE_TEXTURE_ARGB: | ||
| 620 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ARGB; | ||
| 621 | break; | ||
| 622 | case GLES2_IMAGESOURCE_TEXTURE_RGB: | ||
| 623 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_RGB; | ||
| 624 | break; | ||
| 625 | case GLES2_IMAGESOURCE_TEXTURE_BGR: | ||
| 626 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_BGR; | ||
| 627 | break; | ||
| 628 | #ifdef SDL_HAVE_YUV | ||
| 629 | case GLES2_IMAGESOURCE_TEXTURE_YUV: | ||
| 630 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV; | ||
| 631 | shader_params = SDL_GetYCbCRtoRGBConversionMatrix(colorspace, 0, 0, 8); | ||
| 632 | if (!shader_params) { | ||
| 633 | SDL_SetError("Unsupported YUV colorspace"); | ||
| 634 | goto fault; | ||
| 635 | } | ||
| 636 | break; | ||
| 637 | case GLES2_IMAGESOURCE_TEXTURE_NV12: | ||
| 638 | if (SDL_GetHintBoolean("SDL_RENDER_OPENGL_NV12_RG_SHADER", false)) { | ||
| 639 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RG; | ||
| 640 | } else { | ||
| 641 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA; | ||
| 642 | } | ||
| 643 | shader_params = SDL_GetYCbCRtoRGBConversionMatrix(colorspace, 0, 0, 8); | ||
| 644 | if (!shader_params) { | ||
| 645 | SDL_SetError("Unsupported YUV colorspace"); | ||
| 646 | goto fault; | ||
| 647 | } | ||
| 648 | break; | ||
| 649 | case GLES2_IMAGESOURCE_TEXTURE_NV21: | ||
| 650 | if (SDL_GetHintBoolean("SDL_RENDER_OPENGL_NV12_RG_SHADER", false)) { | ||
| 651 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RG; | ||
| 652 | } else { | ||
| 653 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RA; | ||
| 654 | } | ||
| 655 | shader_params = SDL_GetYCbCRtoRGBConversionMatrix(colorspace, 0, 0, 8); | ||
| 656 | if (!shader_params) { | ||
| 657 | SDL_SetError("Unsupported YUV colorspace"); | ||
| 658 | goto fault; | ||
| 659 | } | ||
| 660 | break; | ||
| 661 | #endif // SDL_HAVE_YUV | ||
| 662 | case GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES: | ||
| 663 | ftype = GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES; | ||
| 664 | break; | ||
| 665 | default: | ||
| 666 | goto fault; | ||
| 667 | } | ||
| 668 | |||
| 669 | // Load the requested shaders | ||
| 670 | vertex = data->shader_id_cache[(Uint32)vtype]; | ||
| 671 | if (!vertex) { | ||
| 672 | vertex = GLES2_CacheShader(data, vtype, GL_VERTEX_SHADER); | ||
| 673 | if (!vertex) { | ||
| 674 | goto fault; | ||
| 675 | } | ||
| 676 | } | ||
| 677 | |||
| 678 | fragment = data->shader_id_cache[(Uint32)ftype]; | ||
| 679 | if (!fragment) { | ||
| 680 | fragment = GLES2_CacheShader(data, ftype, GL_FRAGMENT_SHADER); | ||
| 681 | if (!fragment) { | ||
| 682 | goto fault; | ||
| 683 | } | ||
| 684 | } | ||
| 685 | |||
| 686 | // Check if we need to change programs at all | ||
| 687 | if (data->drawstate.program && | ||
| 688 | data->drawstate.program->vertex_shader == vertex && | ||
| 689 | data->drawstate.program->fragment_shader == fragment && | ||
| 690 | data->drawstate.program->shader_params == shader_params) { | ||
| 691 | return true; | ||
| 692 | } | ||
| 693 | |||
| 694 | // Generate a matching program | ||
| 695 | program = GLES2_CacheProgram(data, vertex, fragment); | ||
| 696 | if (!program) { | ||
| 697 | goto fault; | ||
| 698 | } | ||
| 699 | |||
| 700 | // Select that program in OpenGL | ||
| 701 | data->glUseProgram(program->id); | ||
| 702 | |||
| 703 | if (shader_params && shader_params != program->shader_params) { | ||
| 704 | // YUV shader params are Yoffset, 0, Rcoeff, 0, Gcoeff, 0, Bcoeff, 0 | ||
| 705 | if (program->uniform_locations[GLES2_UNIFORM_OFFSET] != -1) { | ||
| 706 | data->glUniform3f(program->uniform_locations[GLES2_UNIFORM_OFFSET], shader_params[0], shader_params[1], shader_params[2]); | ||
| 707 | } | ||
| 708 | if (program->uniform_locations[GLES2_UNIFORM_MATRIX] != -1) { | ||
| 709 | GLfloat matrix[3 * 3]; | ||
| 710 | |||
| 711 | matrix[0 * 3 + 0] = shader_params[4]; | ||
| 712 | matrix[0 * 3 + 1] = shader_params[5]; | ||
| 713 | matrix[0 * 3 + 2] = shader_params[6]; | ||
| 714 | matrix[1 * 3 + 0] = shader_params[8]; | ||
| 715 | matrix[1 * 3 + 1] = shader_params[9]; | ||
| 716 | matrix[1 * 3 + 2] = shader_params[10]; | ||
| 717 | matrix[2 * 3 + 0] = shader_params[12]; | ||
| 718 | matrix[2 * 3 + 1] = shader_params[13]; | ||
| 719 | matrix[2 * 3 + 2] = shader_params[14]; | ||
| 720 | data->glUniformMatrix3fv(program->uniform_locations[GLES2_UNIFORM_MATRIX], 1, GL_FALSE, matrix); | ||
| 721 | } | ||
| 722 | program->shader_params = shader_params; | ||
| 723 | } | ||
| 724 | |||
| 725 | // Set the current program | ||
| 726 | data->drawstate.program = program; | ||
| 727 | |||
| 728 | // Clean up and return | ||
| 729 | return true; | ||
| 730 | fault: | ||
| 731 | data->drawstate.program = NULL; | ||
| 732 | return false; | ||
| 733 | } | ||
| 734 | |||
| 735 | static bool GLES2_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 736 | { | ||
| 737 | return true; // nothing to do in this backend. | ||
| 738 | } | ||
| 739 | |||
| 740 | static bool GLES2_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 741 | { | ||
| 742 | const bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32)); | ||
| 743 | SDL_VertexSolid *verts = (SDL_VertexSolid *)SDL_AllocateRenderVertices(renderer, count * sizeof(*verts), 0, &cmd->data.draw.first); | ||
| 744 | int i; | ||
| 745 | SDL_FColor color = cmd->data.draw.color; | ||
| 746 | const float color_scale = cmd->data.draw.color_scale; | ||
| 747 | |||
| 748 | if (!verts) { | ||
| 749 | return false; | ||
| 750 | } | ||
| 751 | |||
| 752 | color.r *= color_scale; | ||
| 753 | color.g *= color_scale; | ||
| 754 | color.b *= color_scale; | ||
| 755 | |||
| 756 | if (colorswap) { | ||
| 757 | float r = color.r; | ||
| 758 | color.r = color.b; | ||
| 759 | color.b = r; | ||
| 760 | } | ||
| 761 | |||
| 762 | cmd->data.draw.count = count; | ||
| 763 | for (i = 0; i < count; i++) { | ||
| 764 | verts->position.x = 0.5f + points[i].x; | ||
| 765 | verts->position.y = 0.5f + points[i].y; | ||
| 766 | verts->color = color; | ||
| 767 | verts++; | ||
| 768 | } | ||
| 769 | |||
| 770 | return true; | ||
| 771 | } | ||
| 772 | |||
| 773 | static bool GLES2_QueueDrawLines(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 774 | { | ||
| 775 | const bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32)); | ||
| 776 | int i; | ||
| 777 | GLfloat prevx, prevy; | ||
| 778 | SDL_VertexSolid *verts = (SDL_VertexSolid *)SDL_AllocateRenderVertices(renderer, count * sizeof(*verts), 0, &cmd->data.draw.first); | ||
| 779 | SDL_FColor color = cmd->data.draw.color; | ||
| 780 | const float color_scale = cmd->data.draw.color_scale; | ||
| 781 | |||
| 782 | if (!verts) { | ||
| 783 | return false; | ||
| 784 | } | ||
| 785 | |||
| 786 | color.r *= color_scale; | ||
| 787 | color.g *= color_scale; | ||
| 788 | color.b *= color_scale; | ||
| 789 | |||
| 790 | if (colorswap) { | ||
| 791 | float r = color.r; | ||
| 792 | color.r = color.b; | ||
| 793 | color.b = r; | ||
| 794 | } | ||
| 795 | |||
| 796 | cmd->data.draw.count = count; | ||
| 797 | |||
| 798 | // 0.5f offset to hit the center of the pixel. | ||
| 799 | prevx = 0.5f + points->x; | ||
| 800 | prevy = 0.5f + points->y; | ||
| 801 | verts->position.x = prevx; | ||
| 802 | verts->position.y = prevy; | ||
| 803 | verts->color = color; | ||
| 804 | verts++; | ||
| 805 | |||
| 806 | /* bump the end of each line segment out a quarter of a pixel, to provoke | ||
| 807 | the diamond-exit rule. Without this, you won't just drop the last | ||
| 808 | pixel of the last line segment, but you might also drop pixels at the | ||
| 809 | edge of any given line segment along the way too. */ | ||
| 810 | for (i = 1; i < count; i++) { | ||
| 811 | const GLfloat xstart = prevx; | ||
| 812 | const GLfloat ystart = prevy; | ||
| 813 | const GLfloat xend = points[i].x + 0.5f; // 0.5f to hit pixel center. | ||
| 814 | const GLfloat yend = points[i].y + 0.5f; | ||
| 815 | // bump a little in the direction we are moving in. | ||
| 816 | const GLfloat deltax = xend - xstart; | ||
| 817 | const GLfloat deltay = yend - ystart; | ||
| 818 | const GLfloat angle = SDL_atan2f(deltay, deltax); | ||
| 819 | prevx = xend + (SDL_cosf(angle) * 0.25f); | ||
| 820 | prevy = yend + (SDL_sinf(angle) * 0.25f); | ||
| 821 | verts->position.x = prevx; | ||
| 822 | verts->position.y = prevy; | ||
| 823 | verts->color = color; | ||
| 824 | verts++; | ||
| 825 | } | ||
| 826 | |||
| 827 | return true; | ||
| 828 | } | ||
| 829 | |||
| 830 | static bool GLES2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 831 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 832 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 833 | float scale_x, float scale_y) | ||
| 834 | { | ||
| 835 | int i; | ||
| 836 | const bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32)); | ||
| 837 | int count = indices ? num_indices : num_vertices; | ||
| 838 | const float color_scale = cmd->data.draw.color_scale; | ||
| 839 | |||
| 840 | cmd->data.draw.count = count; | ||
| 841 | size_indices = indices ? size_indices : 0; | ||
| 842 | |||
| 843 | if (texture) { | ||
| 844 | SDL_Vertex *verts = (SDL_Vertex *)SDL_AllocateRenderVertices(renderer, count * sizeof(*verts), 0, &cmd->data.draw.first); | ||
| 845 | if (!verts) { | ||
| 846 | return false; | ||
| 847 | } | ||
| 848 | |||
| 849 | for (i = 0; i < count; i++) { | ||
| 850 | int j; | ||
| 851 | float *xy_; | ||
| 852 | SDL_FColor col_; | ||
| 853 | float *uv_; | ||
| 854 | if (size_indices == 4) { | ||
| 855 | j = ((const Uint32 *)indices)[i]; | ||
| 856 | } else if (size_indices == 2) { | ||
| 857 | j = ((const Uint16 *)indices)[i]; | ||
| 858 | } else if (size_indices == 1) { | ||
| 859 | j = ((const Uint8 *)indices)[i]; | ||
| 860 | } else { | ||
| 861 | j = i; | ||
| 862 | } | ||
| 863 | |||
| 864 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 865 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 866 | uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 867 | |||
| 868 | verts->position.x = xy_[0] * scale_x; | ||
| 869 | verts->position.y = xy_[1] * scale_y; | ||
| 870 | |||
| 871 | col_.r *= color_scale; | ||
| 872 | col_.g *= color_scale; | ||
| 873 | col_.b *= color_scale; | ||
| 874 | |||
| 875 | if (colorswap) { | ||
| 876 | float r = col_.r; | ||
| 877 | col_.r = col_.b; | ||
| 878 | col_.b = r; | ||
| 879 | } | ||
| 880 | |||
| 881 | verts->color = col_; | ||
| 882 | verts->tex_coord.x = uv_[0]; | ||
| 883 | verts->tex_coord.y = uv_[1]; | ||
| 884 | verts++; | ||
| 885 | } | ||
| 886 | |||
| 887 | } else { | ||
| 888 | SDL_VertexSolid *verts = (SDL_VertexSolid *)SDL_AllocateRenderVertices(renderer, count * sizeof(*verts), 0, &cmd->data.draw.first); | ||
| 889 | if (!verts) { | ||
| 890 | return false; | ||
| 891 | } | ||
| 892 | |||
| 893 | for (i = 0; i < count; i++) { | ||
| 894 | int j; | ||
| 895 | float *xy_; | ||
| 896 | SDL_FColor col_; | ||
| 897 | |||
| 898 | if (size_indices == 4) { | ||
| 899 | j = ((const Uint32 *)indices)[i]; | ||
| 900 | } else if (size_indices == 2) { | ||
| 901 | j = ((const Uint16 *)indices)[i]; | ||
| 902 | } else if (size_indices == 1) { | ||
| 903 | j = ((const Uint8 *)indices)[i]; | ||
| 904 | } else { | ||
| 905 | j = i; | ||
| 906 | } | ||
| 907 | |||
| 908 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 909 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 910 | |||
| 911 | verts->position.x = xy_[0] * scale_x; | ||
| 912 | verts->position.y = xy_[1] * scale_y; | ||
| 913 | |||
| 914 | col_.r *= color_scale; | ||
| 915 | col_.g *= color_scale; | ||
| 916 | col_.b *= color_scale; | ||
| 917 | |||
| 918 | if (colorswap) { | ||
| 919 | float r = col_.r; | ||
| 920 | col_.r = col_.b; | ||
| 921 | col_.b = r; | ||
| 922 | } | ||
| 923 | |||
| 924 | verts->color = col_; | ||
| 925 | verts++; | ||
| 926 | } | ||
| 927 | } | ||
| 928 | |||
| 929 | return true; | ||
| 930 | } | ||
| 931 | |||
| 932 | static bool SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, const GLES2_ImageSource imgsrc, void *vertices) | ||
| 933 | { | ||
| 934 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 935 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 936 | GLES2_ProgramCacheEntry *program; | ||
| 937 | int stride; | ||
| 938 | |||
| 939 | SDL_assert((texture != NULL) == (imgsrc != GLES2_IMAGESOURCE_SOLID)); | ||
| 940 | |||
| 941 | if (data->drawstate.viewport_dirty) { | ||
| 942 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 943 | data->glViewport(viewport->x, | ||
| 944 | data->drawstate.target ? viewport->y : (data->drawstate.drawableh - viewport->y - viewport->h), | ||
| 945 | viewport->w, viewport->h); | ||
| 946 | if (viewport->w && viewport->h) { | ||
| 947 | data->drawstate.projection[0][0] = 2.0f / viewport->w; | ||
| 948 | data->drawstate.projection[1][1] = (data->drawstate.target ? 2.0f : -2.0f) / viewport->h; | ||
| 949 | data->drawstate.projection[3][1] = data->drawstate.target ? -1.0f : 1.0f; | ||
| 950 | } | ||
| 951 | data->drawstate.viewport_dirty = false; | ||
| 952 | } | ||
| 953 | |||
| 954 | if (data->drawstate.cliprect_enabled_dirty) { | ||
| 955 | if (!data->drawstate.cliprect_enabled) { | ||
| 956 | data->glDisable(GL_SCISSOR_TEST); | ||
| 957 | } else { | ||
| 958 | data->glEnable(GL_SCISSOR_TEST); | ||
| 959 | } | ||
| 960 | data->drawstate.cliprect_enabled_dirty = false; | ||
| 961 | } | ||
| 962 | |||
| 963 | if (data->drawstate.cliprect_enabled && data->drawstate.cliprect_dirty) { | ||
| 964 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 965 | const SDL_Rect *rect = &data->drawstate.cliprect; | ||
| 966 | data->glScissor(viewport->x + rect->x, | ||
| 967 | data->drawstate.target ? viewport->y + rect->y : data->drawstate.drawableh - viewport->y - rect->y - rect->h, | ||
| 968 | rect->w, rect->h); | ||
| 969 | data->drawstate.cliprect_dirty = false; | ||
| 970 | } | ||
| 971 | |||
| 972 | if (data->drawstate.texturing_dirty || ((texture != NULL) != data->drawstate.texturing)) { | ||
| 973 | if (!texture) { | ||
| 974 | data->glDisableVertexAttribArray((GLenum)GLES2_ATTRIBUTE_TEXCOORD); | ||
| 975 | data->drawstate.texturing = false; | ||
| 976 | } else { | ||
| 977 | data->glEnableVertexAttribArray((GLenum)GLES2_ATTRIBUTE_TEXCOORD); | ||
| 978 | data->drawstate.texturing = true; | ||
| 979 | } | ||
| 980 | data->drawstate.texturing_dirty = false; | ||
| 981 | } | ||
| 982 | |||
| 983 | if (texture) { | ||
| 984 | stride = sizeof(SDL_Vertex); | ||
| 985 | } else { | ||
| 986 | stride = sizeof(SDL_VertexSolid); | ||
| 987 | } | ||
| 988 | |||
| 989 | if (texture) { | ||
| 990 | SDL_Vertex *verts = (SDL_Vertex *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 991 | data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, stride, (const GLvoid *)&verts->tex_coord); | ||
| 992 | } | ||
| 993 | |||
| 994 | if (!GLES2_SelectProgram(data, imgsrc, texture ? texture->colorspace : SDL_COLORSPACE_SRGB)) { | ||
| 995 | return false; | ||
| 996 | } | ||
| 997 | |||
| 998 | program = data->drawstate.program; | ||
| 999 | |||
| 1000 | if (program->uniform_locations[GLES2_UNIFORM_PROJECTION] != -1) { | ||
| 1001 | if (SDL_memcmp(program->projection, data->drawstate.projection, sizeof(data->drawstate.projection)) != 0) { | ||
| 1002 | data->glUniformMatrix4fv(program->uniform_locations[GLES2_UNIFORM_PROJECTION], 1, GL_FALSE, (GLfloat *)data->drawstate.projection); | ||
| 1003 | SDL_memcpy(program->projection, data->drawstate.projection, sizeof(data->drawstate.projection)); | ||
| 1004 | } | ||
| 1005 | } | ||
| 1006 | |||
| 1007 | if (blend != data->drawstate.blend) { | ||
| 1008 | if (blend == SDL_BLENDMODE_NONE) { | ||
| 1009 | data->glDisable(GL_BLEND); | ||
| 1010 | } else { | ||
| 1011 | data->glEnable(GL_BLEND); | ||
| 1012 | data->glBlendFuncSeparate(GetBlendFunc(SDL_GetBlendModeSrcColorFactor(blend)), | ||
| 1013 | GetBlendFunc(SDL_GetBlendModeDstColorFactor(blend)), | ||
| 1014 | GetBlendFunc(SDL_GetBlendModeSrcAlphaFactor(blend)), | ||
| 1015 | GetBlendFunc(SDL_GetBlendModeDstAlphaFactor(blend))); | ||
| 1016 | data->glBlendEquationSeparate(GetBlendEquation(SDL_GetBlendModeColorOperation(blend)), | ||
| 1017 | GetBlendEquation(SDL_GetBlendModeAlphaOperation(blend))); | ||
| 1018 | } | ||
| 1019 | data->drawstate.blend = blend; | ||
| 1020 | } | ||
| 1021 | |||
| 1022 | // all drawing commands use this | ||
| 1023 | { | ||
| 1024 | SDL_VertexSolid *verts = (SDL_VertexSolid *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 1025 | data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, stride, (const GLvoid *)&verts->position); | ||
| 1026 | data->glVertexAttribPointer(GLES2_ATTRIBUTE_COLOR, 4, GL_FLOAT, GL_TRUE /* Normalized */, stride, (const GLvoid *)&verts->color); | ||
| 1027 | } | ||
| 1028 | |||
| 1029 | return true; | ||
| 1030 | } | ||
| 1031 | |||
| 1032 | static bool SetTextureAddressMode(GLES2_RenderData *data, GLenum textype, SDL_TextureAddressMode addressMode) | ||
| 1033 | { | ||
| 1034 | switch (addressMode) { | ||
| 1035 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 1036 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | ||
| 1037 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | ||
| 1038 | break; | ||
| 1039 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 1040 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_S, GL_REPEAT); | ||
| 1041 | data->glTexParameteri(textype, GL_TEXTURE_WRAP_T, GL_REPEAT); | ||
| 1042 | break; | ||
| 1043 | default: | ||
| 1044 | return SDL_SetError("Unknown texture address mode: %d", addressMode); | ||
| 1045 | } | ||
| 1046 | return true; | ||
| 1047 | } | ||
| 1048 | |||
| 1049 | static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, void *vertices) | ||
| 1050 | { | ||
| 1051 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1052 | GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; | ||
| 1053 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 1054 | int ret; | ||
| 1055 | |||
| 1056 | // Pick an appropriate shader | ||
| 1057 | if (renderer->target) { | ||
| 1058 | // Check if we need to do color mapping between the source and render target textures | ||
| 1059 | if (renderer->target->format != texture->format) { | ||
| 1060 | switch (texture->format) { | ||
| 1061 | case SDL_PIXELFORMAT_BGRA32: | ||
| 1062 | switch (renderer->target->format) { | ||
| 1063 | case SDL_PIXELFORMAT_RGBA32: | ||
| 1064 | case SDL_PIXELFORMAT_RGBX32: | ||
| 1065 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; | ||
| 1066 | break; | ||
| 1067 | case SDL_PIXELFORMAT_BGRX32: | ||
| 1068 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; | ||
| 1069 | break; | ||
| 1070 | default: | ||
| 1071 | break; | ||
| 1072 | } | ||
| 1073 | break; | ||
| 1074 | case SDL_PIXELFORMAT_RGBA32: | ||
| 1075 | switch (renderer->target->format) { | ||
| 1076 | case SDL_PIXELFORMAT_BGRA32: | ||
| 1077 | case SDL_PIXELFORMAT_BGRX32: | ||
| 1078 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; | ||
| 1079 | break; | ||
| 1080 | case SDL_PIXELFORMAT_RGBX32: | ||
| 1081 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; | ||
| 1082 | break; | ||
| 1083 | default: | ||
| 1084 | break; | ||
| 1085 | } | ||
| 1086 | break; | ||
| 1087 | case SDL_PIXELFORMAT_BGRX32: | ||
| 1088 | switch (renderer->target->format) { | ||
| 1089 | case SDL_PIXELFORMAT_RGBA32: | ||
| 1090 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; | ||
| 1091 | break; | ||
| 1092 | case SDL_PIXELFORMAT_BGRA32: | ||
| 1093 | sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; | ||
| 1094 | break; | ||
| 1095 | case SDL_PIXELFORMAT_RGBX32: | ||
| 1096 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; | ||
| 1097 | break; | ||
| 1098 | default: | ||
| 1099 | break; | ||
| 1100 | } | ||
| 1101 | break; | ||
| 1102 | case SDL_PIXELFORMAT_RGBX32: | ||
| 1103 | switch (renderer->target->format) { | ||
| 1104 | case SDL_PIXELFORMAT_RGBA32: | ||
| 1105 | sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; | ||
| 1106 | break; | ||
| 1107 | case SDL_PIXELFORMAT_BGRA32: | ||
| 1108 | sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; | ||
| 1109 | break; | ||
| 1110 | case SDL_PIXELFORMAT_BGRX32: | ||
| 1111 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; | ||
| 1112 | break; | ||
| 1113 | default: | ||
| 1114 | break; | ||
| 1115 | } | ||
| 1116 | break; | ||
| 1117 | #ifdef SDL_HAVE_YUV | ||
| 1118 | case SDL_PIXELFORMAT_IYUV: | ||
| 1119 | case SDL_PIXELFORMAT_YV12: | ||
| 1120 | sourceType = GLES2_IMAGESOURCE_TEXTURE_YUV; | ||
| 1121 | break; | ||
| 1122 | case SDL_PIXELFORMAT_NV12: | ||
| 1123 | sourceType = GLES2_IMAGESOURCE_TEXTURE_NV12; | ||
| 1124 | break; | ||
| 1125 | case SDL_PIXELFORMAT_NV21: | ||
| 1126 | sourceType = GLES2_IMAGESOURCE_TEXTURE_NV21; | ||
| 1127 | break; | ||
| 1128 | #endif | ||
| 1129 | case SDL_PIXELFORMAT_EXTERNAL_OES: | ||
| 1130 | sourceType = GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES; | ||
| 1131 | break; | ||
| 1132 | default: | ||
| 1133 | return SDL_SetError("Unsupported texture format"); | ||
| 1134 | } | ||
| 1135 | } else { | ||
| 1136 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; // Texture formats match, use the non color mapping shader (even if the formats are not ABGR) | ||
| 1137 | } | ||
| 1138 | } else { | ||
| 1139 | switch (texture->format) { | ||
| 1140 | case SDL_PIXELFORMAT_BGRA32: | ||
| 1141 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; | ||
| 1142 | break; | ||
| 1143 | case SDL_PIXELFORMAT_RGBA32: | ||
| 1144 | sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; | ||
| 1145 | break; | ||
| 1146 | case SDL_PIXELFORMAT_BGRX32: | ||
| 1147 | sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; | ||
| 1148 | break; | ||
| 1149 | case SDL_PIXELFORMAT_RGBX32: | ||
| 1150 | sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; | ||
| 1151 | break; | ||
| 1152 | #ifdef SDL_HAVE_YUV | ||
| 1153 | case SDL_PIXELFORMAT_IYUV: | ||
| 1154 | case SDL_PIXELFORMAT_YV12: | ||
| 1155 | sourceType = GLES2_IMAGESOURCE_TEXTURE_YUV; | ||
| 1156 | break; | ||
| 1157 | case SDL_PIXELFORMAT_NV12: | ||
| 1158 | sourceType = GLES2_IMAGESOURCE_TEXTURE_NV12; | ||
| 1159 | break; | ||
| 1160 | case SDL_PIXELFORMAT_NV21: | ||
| 1161 | sourceType = GLES2_IMAGESOURCE_TEXTURE_NV21; | ||
| 1162 | break; | ||
| 1163 | #endif | ||
| 1164 | case SDL_PIXELFORMAT_EXTERNAL_OES: | ||
| 1165 | sourceType = GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES; | ||
| 1166 | break; | ||
| 1167 | default: | ||
| 1168 | return SDL_SetError("Unsupported texture format"); | ||
| 1169 | } | ||
| 1170 | } | ||
| 1171 | |||
| 1172 | ret = SetDrawState(data, cmd, sourceType, vertices); | ||
| 1173 | |||
| 1174 | if (texture != data->drawstate.texture) { | ||
| 1175 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1176 | #ifdef SDL_HAVE_YUV | ||
| 1177 | if (tdata->yuv) { | ||
| 1178 | data->glActiveTexture(GL_TEXTURE2); | ||
| 1179 | data->glBindTexture(tdata->texture_type, tdata->texture_v); | ||
| 1180 | |||
| 1181 | if (!SetTextureAddressMode(data, tdata->texture_type, cmd->data.draw.texture_address_mode)) { | ||
| 1182 | return false; | ||
| 1183 | } | ||
| 1184 | |||
| 1185 | data->glActiveTexture(GL_TEXTURE1); | ||
| 1186 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1187 | |||
| 1188 | if (!SetTextureAddressMode(data, tdata->texture_type, cmd->data.draw.texture_address_mode)) { | ||
| 1189 | return false; | ||
| 1190 | } | ||
| 1191 | |||
| 1192 | data->glActiveTexture(GL_TEXTURE0); | ||
| 1193 | } else if (tdata->nv12) { | ||
| 1194 | data->glActiveTexture(GL_TEXTURE1); | ||
| 1195 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1196 | |||
| 1197 | if (!SetTextureAddressMode(data, tdata->texture_type, cmd->data.draw.texture_address_mode)) { | ||
| 1198 | return false; | ||
| 1199 | } | ||
| 1200 | |||
| 1201 | data->glActiveTexture(GL_TEXTURE0); | ||
| 1202 | } | ||
| 1203 | #endif | ||
| 1204 | data->glBindTexture(tdata->texture_type, tdata->texture); | ||
| 1205 | |||
| 1206 | if (!SetTextureAddressMode(data, tdata->texture_type, cmd->data.draw.texture_address_mode)) { | ||
| 1207 | return false; | ||
| 1208 | } | ||
| 1209 | |||
| 1210 | data->drawstate.texture = texture; | ||
| 1211 | } | ||
| 1212 | |||
| 1213 | return ret; | ||
| 1214 | } | ||
| 1215 | |||
| 1216 | static void GLES2_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 1217 | { | ||
| 1218 | GLES2_DrawStateCache *cache = &((GLES2_RenderData *)renderer->internal)->drawstate; | ||
| 1219 | cache->viewport_dirty = true; | ||
| 1220 | cache->texture = NULL; | ||
| 1221 | cache->blend = SDL_BLENDMODE_INVALID; | ||
| 1222 | cache->cliprect_enabled_dirty = true; | ||
| 1223 | cache->cliprect_dirty = true; | ||
| 1224 | cache->texturing_dirty = true; | ||
| 1225 | cache->clear_color_dirty = true; | ||
| 1226 | cache->drawablew = 0; | ||
| 1227 | cache->drawableh = 0; | ||
| 1228 | cache->program = NULL; | ||
| 1229 | } | ||
| 1230 | |||
| 1231 | static bool GLES2_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 1232 | { | ||
| 1233 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1234 | const bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32)); | ||
| 1235 | |||
| 1236 | #if USE_VERTEX_BUFFER_OBJECTS | ||
| 1237 | const int vboidx = data->current_vertex_buffer; | ||
| 1238 | const GLuint vbo = data->vertex_buffers[vboidx]; | ||
| 1239 | #endif | ||
| 1240 | |||
| 1241 | if (!GLES2_ActivateRenderer(renderer)) { | ||
| 1242 | return false; | ||
| 1243 | } | ||
| 1244 | |||
| 1245 | data->drawstate.target = renderer->target; | ||
| 1246 | if (!data->drawstate.target) { | ||
| 1247 | int w, h; | ||
| 1248 | SDL_GetWindowSizeInPixels(renderer->window, &w, &h); | ||
| 1249 | if ((w != data->drawstate.drawablew) || (h != data->drawstate.drawableh)) { | ||
| 1250 | data->drawstate.viewport_dirty = true; // if the window dimensions changed, invalidate the current viewport, etc. | ||
| 1251 | data->drawstate.cliprect_dirty = true; | ||
| 1252 | data->drawstate.drawablew = w; | ||
| 1253 | data->drawstate.drawableh = h; | ||
| 1254 | } | ||
| 1255 | } | ||
| 1256 | |||
| 1257 | #if USE_VERTEX_BUFFER_OBJECTS | ||
| 1258 | // upload the new VBO data for this set of commands. | ||
| 1259 | data->glBindBuffer(GL_ARRAY_BUFFER, vbo); | ||
| 1260 | if (data->vertex_buffer_size[vboidx] < vertsize) { | ||
| 1261 | data->glBufferData(GL_ARRAY_BUFFER, vertsize, vertices, GL_STREAM_DRAW); | ||
| 1262 | data->vertex_buffer_size[vboidx] = vertsize; | ||
| 1263 | } else { | ||
| 1264 | data->glBufferSubData(GL_ARRAY_BUFFER, 0, vertsize, vertices); | ||
| 1265 | } | ||
| 1266 | |||
| 1267 | // cycle through a few VBOs so the GL has some time with the data before we replace it. | ||
| 1268 | data->current_vertex_buffer++; | ||
| 1269 | if (data->current_vertex_buffer >= SDL_arraysize(data->vertex_buffers)) { | ||
| 1270 | data->current_vertex_buffer = 0; | ||
| 1271 | } | ||
| 1272 | vertices = NULL; // attrib pointers will be offsets into the VBO. | ||
| 1273 | #endif | ||
| 1274 | |||
| 1275 | while (cmd) { | ||
| 1276 | switch (cmd->command) { | ||
| 1277 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 1278 | { | ||
| 1279 | break; | ||
| 1280 | } | ||
| 1281 | |||
| 1282 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 1283 | { | ||
| 1284 | SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 1285 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 1286 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 1287 | data->drawstate.viewport_dirty = true; | ||
| 1288 | data->drawstate.cliprect_dirty = true; | ||
| 1289 | } | ||
| 1290 | break; | ||
| 1291 | } | ||
| 1292 | |||
| 1293 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 1294 | { | ||
| 1295 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 1296 | if (data->drawstate.cliprect_enabled != cmd->data.cliprect.enabled) { | ||
| 1297 | data->drawstate.cliprect_enabled = cmd->data.cliprect.enabled; | ||
| 1298 | data->drawstate.cliprect_enabled_dirty = true; | ||
| 1299 | } | ||
| 1300 | |||
| 1301 | if (SDL_memcmp(&data->drawstate.cliprect, rect, sizeof(*rect)) != 0) { | ||
| 1302 | SDL_copyp(&data->drawstate.cliprect, rect); | ||
| 1303 | data->drawstate.cliprect_dirty = true; | ||
| 1304 | } | ||
| 1305 | break; | ||
| 1306 | } | ||
| 1307 | |||
| 1308 | case SDL_RENDERCMD_CLEAR: | ||
| 1309 | { | ||
| 1310 | const float r = (colorswap ? cmd->data.color.color.b : cmd->data.color.color.r) * cmd->data.color.color_scale; | ||
| 1311 | const float g = cmd->data.color.color.g * cmd->data.color.color_scale; | ||
| 1312 | const float b = (colorswap ? cmd->data.color.color.r : cmd->data.color.color.b) * cmd->data.color.color_scale; | ||
| 1313 | const float a = cmd->data.color.color.a; | ||
| 1314 | if (data->drawstate.clear_color_dirty || | ||
| 1315 | (r != data->drawstate.clear_color.r) || | ||
| 1316 | (g != data->drawstate.clear_color.g) || | ||
| 1317 | (b != data->drawstate.clear_color.b) || | ||
| 1318 | (a != data->drawstate.clear_color.a)) { | ||
| 1319 | data->glClearColor(r, g, b, a); | ||
| 1320 | data->drawstate.clear_color.r = r; | ||
| 1321 | data->drawstate.clear_color.g = g; | ||
| 1322 | data->drawstate.clear_color.b = b; | ||
| 1323 | data->drawstate.clear_color.a = a; | ||
| 1324 | data->drawstate.clear_color_dirty = false; | ||
| 1325 | } | ||
| 1326 | |||
| 1327 | if (data->drawstate.cliprect_enabled || data->drawstate.cliprect_enabled_dirty) { | ||
| 1328 | data->glDisable(GL_SCISSOR_TEST); | ||
| 1329 | data->drawstate.cliprect_enabled_dirty = data->drawstate.cliprect_enabled; | ||
| 1330 | } | ||
| 1331 | |||
| 1332 | data->glClear(GL_COLOR_BUFFER_BIT); | ||
| 1333 | break; | ||
| 1334 | } | ||
| 1335 | |||
| 1336 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 1337 | break; | ||
| 1338 | |||
| 1339 | case SDL_RENDERCMD_COPY: // unused | ||
| 1340 | break; | ||
| 1341 | |||
| 1342 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 1343 | break; | ||
| 1344 | |||
| 1345 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 1346 | { | ||
| 1347 | if (SetDrawState(data, cmd, GLES2_IMAGESOURCE_SOLID, vertices)) { | ||
| 1348 | size_t count = cmd->data.draw.count; | ||
| 1349 | if (count > 2) { | ||
| 1350 | // joined lines cannot be grouped | ||
| 1351 | data->glDrawArrays(GL_LINE_STRIP, 0, (GLsizei)count); | ||
| 1352 | } else { | ||
| 1353 | // let's group non joined lines | ||
| 1354 | SDL_RenderCommand *finalcmd = cmd; | ||
| 1355 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 1356 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 1357 | |||
| 1358 | while (nextcmd) { | ||
| 1359 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 1360 | if (nextcmdtype != SDL_RENDERCMD_DRAW_LINES) { | ||
| 1361 | break; // can't go any further on this draw call, different render command up next. | ||
| 1362 | } else if (nextcmd->data.draw.count != 2) { | ||
| 1363 | break; // can't go any further on this draw call, those are joined lines | ||
| 1364 | } else if (nextcmd->data.draw.blend != thisblend) { | ||
| 1365 | break; // can't go any further on this draw call, different blendmode copy up next. | ||
| 1366 | } else { | ||
| 1367 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 1368 | count += nextcmd->data.draw.count; | ||
| 1369 | } | ||
| 1370 | nextcmd = nextcmd->next; | ||
| 1371 | } | ||
| 1372 | |||
| 1373 | data->glDrawArrays(GL_LINES, 0, (GLsizei)count); | ||
| 1374 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 1375 | } | ||
| 1376 | } | ||
| 1377 | break; | ||
| 1378 | } | ||
| 1379 | |||
| 1380 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 1381 | case SDL_RENDERCMD_GEOMETRY: | ||
| 1382 | { | ||
| 1383 | /* as long as we have the same copy command in a row, with the | ||
| 1384 | same texture, we can combine them all into a single draw call. */ | ||
| 1385 | SDL_Texture *thistexture = cmd->data.draw.texture; | ||
| 1386 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 1387 | const SDL_RenderCommandType thiscmdtype = cmd->command; | ||
| 1388 | SDL_RenderCommand *finalcmd = cmd; | ||
| 1389 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 1390 | size_t count = cmd->data.draw.count; | ||
| 1391 | int ret; | ||
| 1392 | while (nextcmd) { | ||
| 1393 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 1394 | if (nextcmdtype != thiscmdtype) { | ||
| 1395 | break; // can't go any further on this draw call, different render command up next. | ||
| 1396 | } else if (nextcmd->data.draw.texture != thistexture || nextcmd->data.draw.blend != thisblend) { | ||
| 1397 | break; // can't go any further on this draw call, different texture/blendmode copy up next. | ||
| 1398 | } else { | ||
| 1399 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 1400 | count += nextcmd->data.draw.count; | ||
| 1401 | } | ||
| 1402 | nextcmd = nextcmd->next; | ||
| 1403 | } | ||
| 1404 | |||
| 1405 | if (thistexture) { | ||
| 1406 | ret = SetCopyState(renderer, cmd, vertices); | ||
| 1407 | } else { | ||
| 1408 | ret = SetDrawState(data, cmd, GLES2_IMAGESOURCE_SOLID, vertices); | ||
| 1409 | } | ||
| 1410 | |||
| 1411 | if (ret) { | ||
| 1412 | int op = GL_TRIANGLES; // SDL_RENDERCMD_GEOMETRY | ||
| 1413 | if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS) { | ||
| 1414 | op = GL_POINTS; | ||
| 1415 | } | ||
| 1416 | data->glDrawArrays(op, 0, (GLsizei)count); | ||
| 1417 | } | ||
| 1418 | |||
| 1419 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 1420 | break; | ||
| 1421 | } | ||
| 1422 | |||
| 1423 | case SDL_RENDERCMD_NO_OP: | ||
| 1424 | break; | ||
| 1425 | } | ||
| 1426 | |||
| 1427 | cmd = cmd->next; | ||
| 1428 | } | ||
| 1429 | |||
| 1430 | return GL_CheckError("", renderer); | ||
| 1431 | } | ||
| 1432 | |||
| 1433 | static void GLES2_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1434 | { | ||
| 1435 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1436 | |||
| 1437 | // Deallocate everything | ||
| 1438 | if (data) { | ||
| 1439 | GLES2_ActivateRenderer(renderer); | ||
| 1440 | |||
| 1441 | { | ||
| 1442 | int i; | ||
| 1443 | for (i = 0; i < GLES2_SHADER_COUNT; i++) { | ||
| 1444 | GLuint id = data->shader_id_cache[i]; | ||
| 1445 | if (id) { | ||
| 1446 | data->glDeleteShader(id); | ||
| 1447 | } | ||
| 1448 | } | ||
| 1449 | } | ||
| 1450 | { | ||
| 1451 | GLES2_ProgramCacheEntry *entry; | ||
| 1452 | GLES2_ProgramCacheEntry *next; | ||
| 1453 | entry = data->program_cache.head; | ||
| 1454 | while (entry) { | ||
| 1455 | data->glDeleteProgram(entry->id); | ||
| 1456 | next = entry->next; | ||
| 1457 | SDL_free(entry); | ||
| 1458 | entry = next; | ||
| 1459 | } | ||
| 1460 | } | ||
| 1461 | |||
| 1462 | if (data->context) { | ||
| 1463 | while (data->framebuffers) { | ||
| 1464 | GLES2_FBOList *nextnode = data->framebuffers->next; | ||
| 1465 | data->glDeleteFramebuffers(1, &data->framebuffers->FBO); | ||
| 1466 | GL_CheckError("", renderer); | ||
| 1467 | SDL_free(data->framebuffers); | ||
| 1468 | data->framebuffers = nextnode; | ||
| 1469 | } | ||
| 1470 | |||
| 1471 | #if USE_VERTEX_BUFFER_OBJECTS | ||
| 1472 | data->glDeleteBuffers(SDL_arraysize(data->vertex_buffers), data->vertex_buffers); | ||
| 1473 | GL_CheckError("", renderer); | ||
| 1474 | #endif | ||
| 1475 | |||
| 1476 | SDL_GL_DestroyContext(data->context); | ||
| 1477 | } | ||
| 1478 | |||
| 1479 | SDL_free(data); | ||
| 1480 | } | ||
| 1481 | } | ||
| 1482 | |||
| 1483 | static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 1484 | { | ||
| 1485 | GLES2_RenderData *renderdata = (GLES2_RenderData *)renderer->internal; | ||
| 1486 | GLES2_TextureData *data; | ||
| 1487 | GLenum format; | ||
| 1488 | GLenum type; | ||
| 1489 | GLenum scaleMode; | ||
| 1490 | |||
| 1491 | GLES2_ActivateRenderer(renderer); | ||
| 1492 | |||
| 1493 | renderdata->drawstate.texture = NULL; // we trash this state. | ||
| 1494 | |||
| 1495 | // Determine the corresponding GLES texture format params | ||
| 1496 | switch (texture->format) { | ||
| 1497 | case SDL_PIXELFORMAT_BGRA32: | ||
| 1498 | case SDL_PIXELFORMAT_RGBA32: | ||
| 1499 | case SDL_PIXELFORMAT_BGRX32: | ||
| 1500 | case SDL_PIXELFORMAT_RGBX32: | ||
| 1501 | format = GL_RGBA; | ||
| 1502 | type = GL_UNSIGNED_BYTE; | ||
| 1503 | break; | ||
| 1504 | #ifdef SDL_HAVE_YUV | ||
| 1505 | case SDL_PIXELFORMAT_IYUV: | ||
| 1506 | case SDL_PIXELFORMAT_YV12: | ||
| 1507 | case SDL_PIXELFORMAT_NV12: | ||
| 1508 | case SDL_PIXELFORMAT_NV21: | ||
| 1509 | format = GL_LUMINANCE; | ||
| 1510 | type = GL_UNSIGNED_BYTE; | ||
| 1511 | break; | ||
| 1512 | #endif | ||
| 1513 | #ifdef GL_TEXTURE_EXTERNAL_OES | ||
| 1514 | case SDL_PIXELFORMAT_EXTERNAL_OES: | ||
| 1515 | format = GL_NONE; | ||
| 1516 | type = GL_NONE; | ||
| 1517 | break; | ||
| 1518 | #endif | ||
| 1519 | default: | ||
| 1520 | return SDL_SetError("Texture format not supported"); | ||
| 1521 | } | ||
| 1522 | |||
| 1523 | if (texture->format == SDL_PIXELFORMAT_EXTERNAL_OES && | ||
| 1524 | texture->access != SDL_TEXTUREACCESS_STATIC) { | ||
| 1525 | return SDL_SetError("Unsupported texture access for SDL_PIXELFORMAT_EXTERNAL_OES"); | ||
| 1526 | } | ||
| 1527 | |||
| 1528 | // Allocate a texture struct | ||
| 1529 | data = (GLES2_TextureData *)SDL_calloc(1, sizeof(GLES2_TextureData)); | ||
| 1530 | if (!data) { | ||
| 1531 | return false; | ||
| 1532 | } | ||
| 1533 | data->texture = 0; | ||
| 1534 | #ifdef GL_TEXTURE_EXTERNAL_OES | ||
| 1535 | data->texture_type = (texture->format == SDL_PIXELFORMAT_EXTERNAL_OES) ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D; | ||
| 1536 | #else | ||
| 1537 | data->texture_type = GL_TEXTURE_2D; | ||
| 1538 | #endif | ||
| 1539 | data->pixel_format = format; | ||
| 1540 | data->pixel_type = type; | ||
| 1541 | #ifdef SDL_HAVE_YUV | ||
| 1542 | data->yuv = ((texture->format == SDL_PIXELFORMAT_IYUV) || (texture->format == SDL_PIXELFORMAT_YV12)); | ||
| 1543 | data->nv12 = ((texture->format == SDL_PIXELFORMAT_NV12) || (texture->format == SDL_PIXELFORMAT_NV21)); | ||
| 1544 | data->texture_u = 0; | ||
| 1545 | data->texture_v = 0; | ||
| 1546 | #endif | ||
| 1547 | scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? GL_NEAREST : GL_LINEAR; | ||
| 1548 | |||
| 1549 | // Allocate a blob for image renderdata | ||
| 1550 | if (texture->access == SDL_TEXTUREACCESS_STREAMING) { | ||
| 1551 | size_t size; | ||
| 1552 | data->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 1553 | size = (size_t)texture->h * data->pitch; | ||
| 1554 | #ifdef SDL_HAVE_YUV | ||
| 1555 | if (data->yuv) { | ||
| 1556 | // Need to add size for the U and V planes | ||
| 1557 | size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2); | ||
| 1558 | } else if (data->nv12) { | ||
| 1559 | // Need to add size for the U/V plane | ||
| 1560 | size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2); | ||
| 1561 | } | ||
| 1562 | #endif | ||
| 1563 | data->pixel_data = SDL_calloc(1, size); | ||
| 1564 | if (!data->pixel_data) { | ||
| 1565 | SDL_free(data); | ||
| 1566 | return false; | ||
| 1567 | } | ||
| 1568 | } | ||
| 1569 | |||
| 1570 | // Allocate the texture | ||
| 1571 | GL_CheckError("", renderer); | ||
| 1572 | |||
| 1573 | #ifdef SDL_HAVE_YUV | ||
| 1574 | if (data->yuv) { | ||
| 1575 | data->texture_v = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER, 0); | ||
| 1576 | if (data->texture_v) { | ||
| 1577 | data->texture_v_external = true; | ||
| 1578 | } else { | ||
| 1579 | renderdata->glGenTextures(1, &data->texture_v); | ||
| 1580 | if (!GL_CheckError("glGenTexures()", renderer)) { | ||
| 1581 | return false; | ||
| 1582 | } | ||
| 1583 | } | ||
| 1584 | renderdata->glActiveTexture(GL_TEXTURE2); | ||
| 1585 | renderdata->glBindTexture(data->texture_type, data->texture_v); | ||
| 1586 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); | ||
| 1587 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); | ||
| 1588 | renderdata->glTexImage2D(data->texture_type, 0, format, (texture->w + 1) / 2, (texture->h + 1) / 2, 0, format, type, NULL); | ||
| 1589 | SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER, data->texture_v); | ||
| 1590 | |||
| 1591 | data->texture_u = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER, 0); | ||
| 1592 | if (data->texture_u) { | ||
| 1593 | data->texture_u_external = true; | ||
| 1594 | } else { | ||
| 1595 | renderdata->glGenTextures(1, &data->texture_u); | ||
| 1596 | if (!GL_CheckError("glGenTexures()", renderer)) { | ||
| 1597 | return false; | ||
| 1598 | } | ||
| 1599 | } | ||
| 1600 | renderdata->glActiveTexture(GL_TEXTURE1); | ||
| 1601 | renderdata->glBindTexture(data->texture_type, data->texture_u); | ||
| 1602 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); | ||
| 1603 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); | ||
| 1604 | renderdata->glTexImage2D(data->texture_type, 0, format, (texture->w + 1) / 2, (texture->h + 1) / 2, 0, format, type, NULL); | ||
| 1605 | if (!GL_CheckError("glTexImage2D()", renderer)) { | ||
| 1606 | return false; | ||
| 1607 | } | ||
| 1608 | SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER, data->texture_u); | ||
| 1609 | |||
| 1610 | if (!SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8)) { | ||
| 1611 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 1612 | } | ||
| 1613 | } else if (data->nv12) { | ||
| 1614 | data->texture_u = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER, 0); | ||
| 1615 | if (data->texture_u) { | ||
| 1616 | data->texture_u_external = true; | ||
| 1617 | } else { | ||
| 1618 | renderdata->glGenTextures(1, &data->texture_u); | ||
| 1619 | if (!GL_CheckError("glGenTexures()", renderer)) { | ||
| 1620 | return false; | ||
| 1621 | } | ||
| 1622 | } | ||
| 1623 | renderdata->glActiveTexture(GL_TEXTURE1); | ||
| 1624 | renderdata->glBindTexture(data->texture_type, data->texture_u); | ||
| 1625 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); | ||
| 1626 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); | ||
| 1627 | renderdata->glTexImage2D(data->texture_type, 0, GL_LUMINANCE_ALPHA, (texture->w + 1) / 2, (texture->h + 1) / 2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NULL); | ||
| 1628 | if (!GL_CheckError("glTexImage2D()", renderer)) { | ||
| 1629 | return false; | ||
| 1630 | } | ||
| 1631 | SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER, data->texture_u); | ||
| 1632 | |||
| 1633 | if (!SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8)) { | ||
| 1634 | return SDL_SetError("Unsupported YUV colorspace"); | ||
| 1635 | } | ||
| 1636 | } | ||
| 1637 | #endif | ||
| 1638 | |||
| 1639 | data->texture = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER, 0); | ||
| 1640 | if (data->texture) { | ||
| 1641 | data->texture_external = true; | ||
| 1642 | } else { | ||
| 1643 | renderdata->glGenTextures(1, &data->texture); | ||
| 1644 | if (!GL_CheckError("glGenTexures()", renderer)) { | ||
| 1645 | return false; | ||
| 1646 | } | ||
| 1647 | } | ||
| 1648 | texture->internal = data; | ||
| 1649 | renderdata->glActiveTexture(GL_TEXTURE0); | ||
| 1650 | renderdata->glBindTexture(data->texture_type, data->texture); | ||
| 1651 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); | ||
| 1652 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); | ||
| 1653 | if (texture->format != SDL_PIXELFORMAT_EXTERNAL_OES) { | ||
| 1654 | renderdata->glTexImage2D(data->texture_type, 0, format, texture->w, texture->h, 0, format, type, NULL); | ||
| 1655 | if (!GL_CheckError("glTexImage2D()", renderer)) { | ||
| 1656 | return false; | ||
| 1657 | } | ||
| 1658 | } | ||
| 1659 | SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER, data->texture); | ||
| 1660 | SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER, data->texture_type); | ||
| 1661 | |||
| 1662 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 1663 | data->fbo = GLES2_GetFBO((GLES2_RenderData *)renderer->internal, texture->w, texture->h); | ||
| 1664 | } else { | ||
| 1665 | data->fbo = NULL; | ||
| 1666 | } | ||
| 1667 | |||
| 1668 | return GL_CheckError("", renderer); | ||
| 1669 | } | ||
| 1670 | |||
| 1671 | static bool GLES2_TexSubImage2D(GLES2_RenderData *data, GLenum target, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels, GLint pitch, GLint bpp) | ||
| 1672 | { | ||
| 1673 | Uint8 *blob = NULL; | ||
| 1674 | Uint8 *src; | ||
| 1675 | size_t src_pitch; | ||
| 1676 | int y; | ||
| 1677 | |||
| 1678 | if ((width == 0) || (height == 0) || (bpp == 0)) { | ||
| 1679 | return true; // nothing to do | ||
| 1680 | } | ||
| 1681 | |||
| 1682 | // Reformat the texture data into a tightly packed array | ||
| 1683 | src_pitch = (size_t)width * bpp; | ||
| 1684 | src = (Uint8 *)pixels; | ||
| 1685 | if ((size_t)pitch != src_pitch) { | ||
| 1686 | blob = (Uint8 *)SDL_malloc(src_pitch * height); | ||
| 1687 | if (!blob) { | ||
| 1688 | return false; | ||
| 1689 | } | ||
| 1690 | src = blob; | ||
| 1691 | for (y = 0; y < height; ++y) { | ||
| 1692 | SDL_memcpy(src, pixels, src_pitch); | ||
| 1693 | src += src_pitch; | ||
| 1694 | pixels = (Uint8 *)pixels + pitch; | ||
| 1695 | } | ||
| 1696 | src = blob; | ||
| 1697 | } | ||
| 1698 | |||
| 1699 | data->glTexSubImage2D(target, 0, xoffset, yoffset, width, height, format, type, src); | ||
| 1700 | if (blob) { | ||
| 1701 | SDL_free(blob); | ||
| 1702 | } | ||
| 1703 | return true; | ||
| 1704 | } | ||
| 1705 | |||
| 1706 | static bool GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, | ||
| 1707 | const void *pixels, int pitch) | ||
| 1708 | { | ||
| 1709 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1710 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1711 | |||
| 1712 | GLES2_ActivateRenderer(renderer); | ||
| 1713 | |||
| 1714 | // Bail out if we're supposed to update an empty rectangle | ||
| 1715 | if (rect->w <= 0 || rect->h <= 0) { | ||
| 1716 | return true; | ||
| 1717 | } | ||
| 1718 | |||
| 1719 | data->drawstate.texture = NULL; // we trash this state. | ||
| 1720 | |||
| 1721 | // Create a texture subimage with the supplied data | ||
| 1722 | data->glBindTexture(tdata->texture_type, tdata->texture); | ||
| 1723 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1724 | rect->x, | ||
| 1725 | rect->y, | ||
| 1726 | rect->w, | ||
| 1727 | rect->h, | ||
| 1728 | tdata->pixel_format, | ||
| 1729 | tdata->pixel_type, | ||
| 1730 | pixels, pitch, SDL_BYTESPERPIXEL(texture->format)); | ||
| 1731 | |||
| 1732 | #ifdef SDL_HAVE_YUV | ||
| 1733 | if (tdata->yuv) { | ||
| 1734 | // Skip to the correct offset into the next texture | ||
| 1735 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 1736 | if (texture->format == SDL_PIXELFORMAT_YV12) { | ||
| 1737 | data->glBindTexture(tdata->texture_type, tdata->texture_v); | ||
| 1738 | } else { | ||
| 1739 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1740 | } | ||
| 1741 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1742 | rect->x / 2, | ||
| 1743 | rect->y / 2, | ||
| 1744 | (rect->w + 1) / 2, | ||
| 1745 | (rect->h + 1) / 2, | ||
| 1746 | tdata->pixel_format, | ||
| 1747 | tdata->pixel_type, | ||
| 1748 | pixels, (pitch + 1) / 2, 1); | ||
| 1749 | |||
| 1750 | // Skip to the correct offset into the next texture | ||
| 1751 | pixels = (const void *)((const Uint8 *)pixels + ((rect->h + 1) / 2) * ((pitch + 1) / 2)); | ||
| 1752 | if (texture->format == SDL_PIXELFORMAT_YV12) { | ||
| 1753 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1754 | } else { | ||
| 1755 | data->glBindTexture(tdata->texture_type, tdata->texture_v); | ||
| 1756 | } | ||
| 1757 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1758 | rect->x / 2, | ||
| 1759 | rect->y / 2, | ||
| 1760 | (rect->w + 1) / 2, | ||
| 1761 | (rect->h + 1) / 2, | ||
| 1762 | tdata->pixel_format, | ||
| 1763 | tdata->pixel_type, | ||
| 1764 | pixels, (pitch + 1) / 2, 1); | ||
| 1765 | } else if (tdata->nv12) { | ||
| 1766 | // Skip to the correct offset into the next texture | ||
| 1767 | pixels = (const void *)((const Uint8 *)pixels + rect->h * pitch); | ||
| 1768 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1769 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1770 | rect->x / 2, | ||
| 1771 | rect->y / 2, | ||
| 1772 | (rect->w + 1) / 2, | ||
| 1773 | (rect->h + 1) / 2, | ||
| 1774 | GL_LUMINANCE_ALPHA, | ||
| 1775 | GL_UNSIGNED_BYTE, | ||
| 1776 | pixels, 2 * ((pitch + 1) / 2), 2); | ||
| 1777 | } | ||
| 1778 | #endif | ||
| 1779 | |||
| 1780 | return GL_CheckError("glTexSubImage2D()", renderer); | ||
| 1781 | } | ||
| 1782 | |||
| 1783 | #ifdef SDL_HAVE_YUV | ||
| 1784 | static bool GLES2_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1785 | const SDL_Rect *rect, | ||
| 1786 | const Uint8 *Yplane, int Ypitch, | ||
| 1787 | const Uint8 *Uplane, int Upitch, | ||
| 1788 | const Uint8 *Vplane, int Vpitch) | ||
| 1789 | { | ||
| 1790 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1791 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1792 | |||
| 1793 | GLES2_ActivateRenderer(renderer); | ||
| 1794 | |||
| 1795 | // Bail out if we're supposed to update an empty rectangle | ||
| 1796 | if (rect->w <= 0 || rect->h <= 0) { | ||
| 1797 | return true; | ||
| 1798 | } | ||
| 1799 | |||
| 1800 | data->drawstate.texture = NULL; // we trash this state. | ||
| 1801 | |||
| 1802 | data->glBindTexture(tdata->texture_type, tdata->texture_v); | ||
| 1803 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1804 | rect->x / 2, | ||
| 1805 | rect->y / 2, | ||
| 1806 | (rect->w + 1) / 2, | ||
| 1807 | (rect->h + 1) / 2, | ||
| 1808 | tdata->pixel_format, | ||
| 1809 | tdata->pixel_type, | ||
| 1810 | Vplane, Vpitch, 1); | ||
| 1811 | |||
| 1812 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1813 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1814 | rect->x / 2, | ||
| 1815 | rect->y / 2, | ||
| 1816 | (rect->w + 1) / 2, | ||
| 1817 | (rect->h + 1) / 2, | ||
| 1818 | tdata->pixel_format, | ||
| 1819 | tdata->pixel_type, | ||
| 1820 | Uplane, Upitch, 1); | ||
| 1821 | |||
| 1822 | data->glBindTexture(tdata->texture_type, tdata->texture); | ||
| 1823 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1824 | rect->x, | ||
| 1825 | rect->y, | ||
| 1826 | rect->w, | ||
| 1827 | rect->h, | ||
| 1828 | tdata->pixel_format, | ||
| 1829 | tdata->pixel_type, | ||
| 1830 | Yplane, Ypitch, 1); | ||
| 1831 | |||
| 1832 | return GL_CheckError("glTexSubImage2D()", renderer); | ||
| 1833 | } | ||
| 1834 | |||
| 1835 | static bool GLES2_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 1836 | const SDL_Rect *rect, | ||
| 1837 | const Uint8 *Yplane, int Ypitch, | ||
| 1838 | const Uint8 *UVplane, int UVpitch) | ||
| 1839 | { | ||
| 1840 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1841 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1842 | |||
| 1843 | GLES2_ActivateRenderer(renderer); | ||
| 1844 | |||
| 1845 | // Bail out if we're supposed to update an empty rectangle | ||
| 1846 | if (rect->w <= 0 || rect->h <= 0) { | ||
| 1847 | return true; | ||
| 1848 | } | ||
| 1849 | |||
| 1850 | data->drawstate.texture = NULL; // we trash this state. | ||
| 1851 | |||
| 1852 | data->glBindTexture(tdata->texture_type, tdata->texture_u); | ||
| 1853 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1854 | rect->x / 2, | ||
| 1855 | rect->y / 2, | ||
| 1856 | (rect->w + 1) / 2, | ||
| 1857 | (rect->h + 1) / 2, | ||
| 1858 | GL_LUMINANCE_ALPHA, | ||
| 1859 | GL_UNSIGNED_BYTE, | ||
| 1860 | UVplane, UVpitch, 2); | ||
| 1861 | |||
| 1862 | data->glBindTexture(tdata->texture_type, tdata->texture); | ||
| 1863 | GLES2_TexSubImage2D(data, tdata->texture_type, | ||
| 1864 | rect->x, | ||
| 1865 | rect->y, | ||
| 1866 | rect->w, | ||
| 1867 | rect->h, | ||
| 1868 | tdata->pixel_format, | ||
| 1869 | tdata->pixel_type, | ||
| 1870 | Yplane, Ypitch, 1); | ||
| 1871 | |||
| 1872 | return GL_CheckError("glTexSubImage2D()", renderer); | ||
| 1873 | } | ||
| 1874 | #endif | ||
| 1875 | |||
| 1876 | static bool GLES2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, | ||
| 1877 | void **pixels, int *pitch) | ||
| 1878 | { | ||
| 1879 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1880 | |||
| 1881 | // Retrieve the buffer/pitch for the specified region | ||
| 1882 | *pixels = (Uint8 *)tdata->pixel_data + | ||
| 1883 | (tdata->pitch * rect->y) + | ||
| 1884 | (rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 1885 | *pitch = tdata->pitch; | ||
| 1886 | |||
| 1887 | return true; | ||
| 1888 | } | ||
| 1889 | |||
| 1890 | static void GLES2_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1891 | { | ||
| 1892 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1893 | SDL_Rect rect; | ||
| 1894 | |||
| 1895 | // We do whole texture updates, at least for now | ||
| 1896 | rect.x = 0; | ||
| 1897 | rect.y = 0; | ||
| 1898 | rect.w = texture->w; | ||
| 1899 | rect.h = texture->h; | ||
| 1900 | GLES2_UpdateTexture(renderer, texture, &rect, tdata->pixel_data, tdata->pitch); | ||
| 1901 | } | ||
| 1902 | |||
| 1903 | static void GLES2_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 1904 | { | ||
| 1905 | GLES2_RenderData *renderdata = (GLES2_RenderData *)renderer->internal; | ||
| 1906 | GLES2_TextureData *data = (GLES2_TextureData *)texture->internal; | ||
| 1907 | GLenum glScaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? GL_NEAREST : GL_LINEAR; | ||
| 1908 | |||
| 1909 | #ifdef SDL_HAVE_YUV | ||
| 1910 | if (data->yuv) { | ||
| 1911 | renderdata->glActiveTexture(GL_TEXTURE2); | ||
| 1912 | renderdata->glBindTexture(data->texture_type, data->texture_v); | ||
| 1913 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 1914 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 1915 | |||
| 1916 | renderdata->glActiveTexture(GL_TEXTURE1); | ||
| 1917 | renderdata->glBindTexture(data->texture_type, data->texture_u); | ||
| 1918 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 1919 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 1920 | } else if (data->nv12) { | ||
| 1921 | renderdata->glActiveTexture(GL_TEXTURE1); | ||
| 1922 | renderdata->glBindTexture(data->texture_type, data->texture_u); | ||
| 1923 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 1924 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 1925 | } | ||
| 1926 | #endif | ||
| 1927 | |||
| 1928 | renderdata->glActiveTexture(GL_TEXTURE0); | ||
| 1929 | renderdata->glBindTexture(data->texture_type, data->texture); | ||
| 1930 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode); | ||
| 1931 | renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode); | ||
| 1932 | } | ||
| 1933 | |||
| 1934 | static bool GLES2_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1935 | { | ||
| 1936 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1937 | GLES2_TextureData *texturedata = NULL; | ||
| 1938 | GLenum status; | ||
| 1939 | |||
| 1940 | data->drawstate.viewport_dirty = true; | ||
| 1941 | |||
| 1942 | if (!texture) { | ||
| 1943 | data->glBindFramebuffer(GL_FRAMEBUFFER, data->window_framebuffer); | ||
| 1944 | } else { | ||
| 1945 | texturedata = (GLES2_TextureData *)texture->internal; | ||
| 1946 | data->glBindFramebuffer(GL_FRAMEBUFFER, texturedata->fbo->FBO); | ||
| 1947 | // TODO: check if texture pixel format allows this operation | ||
| 1948 | data->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texturedata->texture_type, texturedata->texture, 0); | ||
| 1949 | // Check FBO status | ||
| 1950 | status = data->glCheckFramebufferStatus(GL_FRAMEBUFFER); | ||
| 1951 | if (status != GL_FRAMEBUFFER_COMPLETE) { | ||
| 1952 | return SDL_SetError("glFramebufferTexture2D() failed"); | ||
| 1953 | } | ||
| 1954 | } | ||
| 1955 | return true; | ||
| 1956 | } | ||
| 1957 | |||
| 1958 | static void GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1959 | { | ||
| 1960 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1961 | GLES2_TextureData *tdata = (GLES2_TextureData *)texture->internal; | ||
| 1962 | |||
| 1963 | GLES2_ActivateRenderer(renderer); | ||
| 1964 | |||
| 1965 | if (data->drawstate.texture == texture) { | ||
| 1966 | data->drawstate.texture = NULL; | ||
| 1967 | } | ||
| 1968 | if (data->drawstate.target == texture) { | ||
| 1969 | data->drawstate.target = NULL; | ||
| 1970 | } | ||
| 1971 | |||
| 1972 | // Destroy the texture | ||
| 1973 | if (tdata) { | ||
| 1974 | if (tdata->texture && !tdata->texture_external) { | ||
| 1975 | data->glDeleteTextures(1, &tdata->texture); | ||
| 1976 | } | ||
| 1977 | #ifdef SDL_HAVE_YUV | ||
| 1978 | if (tdata->texture_v && !tdata->texture_v_external) { | ||
| 1979 | data->glDeleteTextures(1, &tdata->texture_v); | ||
| 1980 | } | ||
| 1981 | if (tdata->texture_u && !tdata->texture_u_external) { | ||
| 1982 | data->glDeleteTextures(1, &tdata->texture_u); | ||
| 1983 | } | ||
| 1984 | #endif | ||
| 1985 | SDL_free(tdata->pixel_data); | ||
| 1986 | SDL_free(tdata); | ||
| 1987 | texture->internal = NULL; | ||
| 1988 | } | ||
| 1989 | } | ||
| 1990 | |||
| 1991 | static SDL_Surface *GLES2_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 1992 | { | ||
| 1993 | GLES2_RenderData *data = (GLES2_RenderData *)renderer->internal; | ||
| 1994 | SDL_PixelFormat format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_RGBA32; | ||
| 1995 | SDL_Surface *surface; | ||
| 1996 | |||
| 1997 | surface = SDL_CreateSurface(rect->w, rect->h, format); | ||
| 1998 | if (!surface) { | ||
| 1999 | return NULL; | ||
| 2000 | } | ||
| 2001 | |||
| 2002 | int y = rect->y; | ||
| 2003 | if (!renderer->target) { | ||
| 2004 | int w, h; | ||
| 2005 | SDL_GetRenderOutputSize(renderer, &w, &h); | ||
| 2006 | y = (h - y) - rect->h; | ||
| 2007 | } | ||
| 2008 | |||
| 2009 | data->glReadPixels(rect->x, y, rect->w, rect->h, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels); | ||
| 2010 | if (!GL_CheckError("glReadPixels()", renderer)) { | ||
| 2011 | SDL_DestroySurface(surface); | ||
| 2012 | return NULL; | ||
| 2013 | } | ||
| 2014 | |||
| 2015 | // Flip the rows to be top-down if necessary | ||
| 2016 | if (!renderer->target) { | ||
| 2017 | SDL_FlipSurface(surface, SDL_FLIP_VERTICAL); | ||
| 2018 | } | ||
| 2019 | return surface; | ||
| 2020 | } | ||
| 2021 | |||
| 2022 | static bool GLES2_RenderPresent(SDL_Renderer *renderer) | ||
| 2023 | { | ||
| 2024 | // Tell the video driver to swap buffers | ||
| 2025 | return SDL_GL_SwapWindow(renderer->window); | ||
| 2026 | } | ||
| 2027 | |||
| 2028 | static bool GLES2_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 2029 | { | ||
| 2030 | int interval = 0; | ||
| 2031 | |||
| 2032 | if (!SDL_GL_SetSwapInterval(vsync)) { | ||
| 2033 | return false; | ||
| 2034 | } | ||
| 2035 | |||
| 2036 | if (!SDL_GL_GetSwapInterval(&interval)) { | ||
| 2037 | return false; | ||
| 2038 | } | ||
| 2039 | |||
| 2040 | if (interval != vsync) { | ||
| 2041 | return SDL_Unsupported(); | ||
| 2042 | } | ||
| 2043 | return true; | ||
| 2044 | } | ||
| 2045 | |||
| 2046 | /************************************************************************************************* | ||
| 2047 | * Renderer instantiation * | ||
| 2048 | *************************************************************************************************/ | ||
| 2049 | |||
| 2050 | static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 2051 | { | ||
| 2052 | GLES2_RenderData *data = NULL; | ||
| 2053 | SDL_WindowFlags window_flags = 0; // -Wconditional-uninitialized | ||
| 2054 | GLint window_framebuffer; | ||
| 2055 | GLint value; | ||
| 2056 | int profile_mask = 0, major = 0, minor = 0; | ||
| 2057 | bool changed_window = false; | ||
| 2058 | |||
| 2059 | if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask)) { | ||
| 2060 | goto error; | ||
| 2061 | } | ||
| 2062 | if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major)) { | ||
| 2063 | goto error; | ||
| 2064 | } | ||
| 2065 | if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor)) { | ||
| 2066 | goto error; | ||
| 2067 | } | ||
| 2068 | |||
| 2069 | SDL_SyncWindow(window); | ||
| 2070 | window_flags = SDL_GetWindowFlags(window); | ||
| 2071 | |||
| 2072 | // OpenGL ES 3.0 is a superset of OpenGL ES 2.0 | ||
| 2073 | if (!(window_flags & SDL_WINDOW_OPENGL) || | ||
| 2074 | profile_mask != SDL_GL_CONTEXT_PROFILE_ES || major < RENDERER_CONTEXT_MAJOR) { | ||
| 2075 | |||
| 2076 | changed_window = true; | ||
| 2077 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); | ||
| 2078 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, RENDERER_CONTEXT_MAJOR); | ||
| 2079 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, RENDERER_CONTEXT_MINOR); | ||
| 2080 | |||
| 2081 | if (!SDL_RecreateWindow(window, (window_flags & ~(SDL_WINDOW_VULKAN | SDL_WINDOW_METAL)) | SDL_WINDOW_OPENGL)) { | ||
| 2082 | goto error; | ||
| 2083 | } | ||
| 2084 | } | ||
| 2085 | |||
| 2086 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 2087 | |||
| 2088 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 2089 | SDL_SetError("Unsupported output colorspace"); | ||
| 2090 | goto error; | ||
| 2091 | } | ||
| 2092 | |||
| 2093 | data = (GLES2_RenderData *)SDL_calloc(1, sizeof(GLES2_RenderData)); | ||
| 2094 | if (!data) { | ||
| 2095 | goto error; | ||
| 2096 | } | ||
| 2097 | renderer->internal = data; | ||
| 2098 | GLES2_InvalidateCachedState(renderer); | ||
| 2099 | renderer->window = window; | ||
| 2100 | |||
| 2101 | renderer->name = GLES2_RenderDriver.name; | ||
| 2102 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32); | ||
| 2103 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32); | ||
| 2104 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32); | ||
| 2105 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32); | ||
| 2106 | |||
| 2107 | // Create an OpenGL ES 2.0 context | ||
| 2108 | data->context = SDL_GL_CreateContext(window); | ||
| 2109 | if (!data->context) { | ||
| 2110 | goto error; | ||
| 2111 | } | ||
| 2112 | if (!SDL_GL_MakeCurrent(window, data->context)) { | ||
| 2113 | goto error; | ||
| 2114 | } | ||
| 2115 | |||
| 2116 | if (!GLES2_LoadFunctions(data)) { | ||
| 2117 | goto error; | ||
| 2118 | } | ||
| 2119 | |||
| 2120 | if (!GLES2_CacheShaders(data)) { | ||
| 2121 | goto error; | ||
| 2122 | } | ||
| 2123 | |||
| 2124 | // Check for debug output support | ||
| 2125 | if (SDL_GL_GetAttribute(SDL_GL_CONTEXT_FLAGS, &value) && | ||
| 2126 | (value & SDL_GL_CONTEXT_DEBUG_FLAG)) { | ||
| 2127 | data->debug_enabled = true; | ||
| 2128 | } | ||
| 2129 | |||
| 2130 | value = 0; | ||
| 2131 | data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); | ||
| 2132 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, value); | ||
| 2133 | |||
| 2134 | #if USE_VERTEX_BUFFER_OBJECTS | ||
| 2135 | // we keep a few of these and cycle through them, so data can live for a few frames. | ||
| 2136 | data->glGenBuffers(SDL_arraysize(data->vertex_buffers), data->vertex_buffers); | ||
| 2137 | #endif | ||
| 2138 | |||
| 2139 | data->framebuffers = NULL; | ||
| 2140 | data->glGetIntegerv(GL_FRAMEBUFFER_BINDING, &window_framebuffer); | ||
| 2141 | data->window_framebuffer = (GLuint)window_framebuffer; | ||
| 2142 | |||
| 2143 | // Populate the function pointers for the module | ||
| 2144 | renderer->WindowEvent = GLES2_WindowEvent; | ||
| 2145 | renderer->SupportsBlendMode = GLES2_SupportsBlendMode; | ||
| 2146 | renderer->CreateTexture = GLES2_CreateTexture; | ||
| 2147 | renderer->UpdateTexture = GLES2_UpdateTexture; | ||
| 2148 | #ifdef SDL_HAVE_YUV | ||
| 2149 | renderer->UpdateTextureYUV = GLES2_UpdateTextureYUV; | ||
| 2150 | renderer->UpdateTextureNV = GLES2_UpdateTextureNV; | ||
| 2151 | #endif | ||
| 2152 | renderer->LockTexture = GLES2_LockTexture; | ||
| 2153 | renderer->UnlockTexture = GLES2_UnlockTexture; | ||
| 2154 | renderer->SetTextureScaleMode = GLES2_SetTextureScaleMode; | ||
| 2155 | renderer->SetRenderTarget = GLES2_SetRenderTarget; | ||
| 2156 | renderer->QueueSetViewport = GLES2_QueueNoOp; | ||
| 2157 | renderer->QueueSetDrawColor = GLES2_QueueNoOp; | ||
| 2158 | renderer->QueueDrawPoints = GLES2_QueueDrawPoints; | ||
| 2159 | renderer->QueueDrawLines = GLES2_QueueDrawLines; | ||
| 2160 | renderer->QueueGeometry = GLES2_QueueGeometry; | ||
| 2161 | renderer->InvalidateCachedState = GLES2_InvalidateCachedState; | ||
| 2162 | renderer->RunCommandQueue = GLES2_RunCommandQueue; | ||
| 2163 | renderer->RenderReadPixels = GLES2_RenderReadPixels; | ||
| 2164 | renderer->RenderPresent = GLES2_RenderPresent; | ||
| 2165 | renderer->DestroyTexture = GLES2_DestroyTexture; | ||
| 2166 | renderer->DestroyRenderer = GLES2_DestroyRenderer; | ||
| 2167 | renderer->SetVSync = GLES2_SetVSync; | ||
| 2168 | #ifdef SDL_HAVE_YUV | ||
| 2169 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 2170 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 2171 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 2172 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 2173 | #endif | ||
| 2174 | #ifdef GL_TEXTURE_EXTERNAL_OES | ||
| 2175 | if (GLES2_CacheShader(data, GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES, GL_FRAGMENT_SHADER)) { | ||
| 2176 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_EXTERNAL_OES); | ||
| 2177 | } | ||
| 2178 | #endif | ||
| 2179 | |||
| 2180 | if (SDL_GL_ExtensionSupported("GL_EXT_blend_minmax")) { | ||
| 2181 | data->GL_EXT_blend_minmax_supported = true; | ||
| 2182 | } | ||
| 2183 | |||
| 2184 | // Set up parameters for rendering | ||
| 2185 | data->glDisable(GL_DEPTH_TEST); | ||
| 2186 | data->glDisable(GL_CULL_FACE); | ||
| 2187 | data->glActiveTexture(GL_TEXTURE0); | ||
| 2188 | data->glPixelStorei(GL_PACK_ALIGNMENT, 1); | ||
| 2189 | data->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | ||
| 2190 | |||
| 2191 | data->glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); | ||
| 2192 | data->glEnableVertexAttribArray(GLES2_ATTRIBUTE_COLOR); | ||
| 2193 | data->glDisableVertexAttribArray(GLES2_ATTRIBUTE_TEXCOORD); | ||
| 2194 | |||
| 2195 | data->glClearColor(1.0f, 1.0f, 1.0f, 1.0f); | ||
| 2196 | |||
| 2197 | data->drawstate.clear_color.r = 1.0f; | ||
| 2198 | data->drawstate.clear_color.g = 1.0f; | ||
| 2199 | data->drawstate.clear_color.b = 1.0f; | ||
| 2200 | data->drawstate.clear_color.a = 1.0f; | ||
| 2201 | data->drawstate.projection[3][0] = -1.0f; | ||
| 2202 | data->drawstate.projection[3][3] = 1.0f; | ||
| 2203 | |||
| 2204 | GL_CheckError("", renderer); | ||
| 2205 | |||
| 2206 | return true; | ||
| 2207 | |||
| 2208 | error: | ||
| 2209 | if (changed_window) { | ||
| 2210 | // Uh oh, better try to put it back... | ||
| 2211 | char *error = SDL_strdup(SDL_GetError()); | ||
| 2212 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); | ||
| 2213 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); | ||
| 2214 | SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); | ||
| 2215 | SDL_RecreateWindow(window, window_flags); | ||
| 2216 | SDL_SetError("%s", error); | ||
| 2217 | SDL_free(error); | ||
| 2218 | } | ||
| 2219 | return false; | ||
| 2220 | } | ||
| 2221 | |||
| 2222 | SDL_RenderDriver GLES2_RenderDriver = { | ||
| 2223 | GLES2_CreateRenderer, "opengles2" | ||
| 2224 | }; | ||
| 2225 | |||
| 2226 | #endif // SDL_VIDEO_RENDER_OGL_ES2 | ||
diff --git a/SDL-3.2.8/src/render/opengles2/SDL_shaders_gles2.c b/SDL-3.2.8/src/render/opengles2/SDL_shaders_gles2.c new file mode 100644 index 0000000..1387968 --- /dev/null +++ b/SDL-3.2.8/src/render/opengles2/SDL_shaders_gles2.c | |||
| @@ -0,0 +1,387 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_OGL_ES2 | ||
| 24 | |||
| 25 | #include <SDL3/SDL_opengles2.h> | ||
| 26 | #include "SDL_shaders_gles2.h" | ||
| 27 | |||
| 28 | /* *INDENT-OFF* */ // clang-format off | ||
| 29 | |||
| 30 | /************************************************************************************************* | ||
| 31 | * Vertex/fragment shader source * | ||
| 32 | *************************************************************************************************/ | ||
| 33 | |||
| 34 | static const char GLES2_Fragment_Include_Best_Texture_Precision[] = \ | ||
| 35 | "#ifdef GL_FRAGMENT_PRECISION_HIGH\n" \ | ||
| 36 | "#define SDL_TEXCOORD_PRECISION highp\n" \ | ||
| 37 | "#else\n" \ | ||
| 38 | "#define SDL_TEXCOORD_PRECISION mediump\n" \ | ||
| 39 | "#endif\n" \ | ||
| 40 | "\n" \ | ||
| 41 | "precision mediump float;\n" \ | ||
| 42 | "\n" \ | ||
| 43 | ; | ||
| 44 | |||
| 45 | static const char GLES2_Fragment_Include_Medium_Texture_Precision[] = \ | ||
| 46 | "#define SDL_TEXCOORD_PRECISION mediump\n" \ | ||
| 47 | "precision mediump float;\n" \ | ||
| 48 | "\n" \ | ||
| 49 | ; | ||
| 50 | |||
| 51 | static const char GLES2_Fragment_Include_High_Texture_Precision[] = \ | ||
| 52 | "#define SDL_TEXCOORD_PRECISION highp\n" \ | ||
| 53 | "precision mediump float;\n" \ | ||
| 54 | "\n" \ | ||
| 55 | ; | ||
| 56 | |||
| 57 | static const char GLES2_Fragment_Include_Undef_Precision[] = \ | ||
| 58 | "#define mediump\n" \ | ||
| 59 | "#define highp\n" \ | ||
| 60 | "#define lowp\n" \ | ||
| 61 | "#define SDL_TEXCOORD_PRECISION\n" \ | ||
| 62 | "\n" \ | ||
| 63 | ; | ||
| 64 | |||
| 65 | static const char GLES2_Vertex_Default[] = \ | ||
| 66 | "uniform mat4 u_projection;\n" \ | ||
| 67 | "attribute vec2 a_position;\n" \ | ||
| 68 | "attribute vec4 a_color;\n" \ | ||
| 69 | "attribute vec2 a_texCoord;\n" \ | ||
| 70 | "varying vec2 v_texCoord;\n" \ | ||
| 71 | "varying vec4 v_color;\n" \ | ||
| 72 | "\n" \ | ||
| 73 | "void main()\n" \ | ||
| 74 | "{\n" \ | ||
| 75 | " v_texCoord = a_texCoord;\n" \ | ||
| 76 | " gl_Position = u_projection * vec4(a_position, 0.0, 1.0);\n" \ | ||
| 77 | " gl_PointSize = 1.0;\n" \ | ||
| 78 | " v_color = a_color;\n" \ | ||
| 79 | "}\n" \ | ||
| 80 | ; | ||
| 81 | |||
| 82 | static const char GLES2_Fragment_Solid[] = \ | ||
| 83 | "varying mediump vec4 v_color;\n" \ | ||
| 84 | "\n" \ | ||
| 85 | "void main()\n" \ | ||
| 86 | "{\n" \ | ||
| 87 | " gl_FragColor = v_color;\n" \ | ||
| 88 | "}\n" \ | ||
| 89 | ; | ||
| 90 | |||
| 91 | static const char GLES2_Fragment_TextureABGR[] = \ | ||
| 92 | "uniform sampler2D u_texture;\n" \ | ||
| 93 | "varying mediump vec4 v_color;\n" \ | ||
| 94 | "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \ | ||
| 95 | "\n" \ | ||
| 96 | "void main()\n" \ | ||
| 97 | "{\n" \ | ||
| 98 | " gl_FragColor = texture2D(u_texture, v_texCoord);\n" \ | ||
| 99 | " gl_FragColor *= v_color;\n" \ | ||
| 100 | "}\n" \ | ||
| 101 | ; | ||
| 102 | |||
| 103 | // ARGB to ABGR conversion | ||
| 104 | static const char GLES2_Fragment_TextureARGB[] = \ | ||
| 105 | "uniform sampler2D u_texture;\n" \ | ||
| 106 | "varying mediump vec4 v_color;\n" \ | ||
| 107 | "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \ | ||
| 108 | "\n" \ | ||
| 109 | "void main()\n" \ | ||
| 110 | "{\n" \ | ||
| 111 | " mediump vec4 abgr = texture2D(u_texture, v_texCoord);\n" \ | ||
| 112 | " gl_FragColor = abgr;\n" \ | ||
| 113 | " gl_FragColor.r = abgr.b;\n" \ | ||
| 114 | " gl_FragColor.b = abgr.r;\n" \ | ||
| 115 | " gl_FragColor *= v_color;\n" \ | ||
| 116 | "}\n" \ | ||
| 117 | ; | ||
| 118 | |||
| 119 | // RGB to ABGR conversion | ||
| 120 | static const char GLES2_Fragment_TextureRGB[] = \ | ||
| 121 | "uniform sampler2D u_texture;\n" \ | ||
| 122 | "varying mediump vec4 v_color;\n" \ | ||
| 123 | "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \ | ||
| 124 | "\n" \ | ||
| 125 | "void main()\n" \ | ||
| 126 | "{\n" \ | ||
| 127 | " mediump vec4 abgr = texture2D(u_texture, v_texCoord);\n" \ | ||
| 128 | " gl_FragColor = abgr;\n" \ | ||
| 129 | " gl_FragColor.r = abgr.b;\n" \ | ||
| 130 | " gl_FragColor.b = abgr.r;\n" \ | ||
| 131 | " gl_FragColor.a = 1.0;\n" \ | ||
| 132 | " gl_FragColor *= v_color;\n" \ | ||
| 133 | "}\n" \ | ||
| 134 | ; | ||
| 135 | |||
| 136 | // BGR to ABGR conversion | ||
| 137 | static const char GLES2_Fragment_TextureBGR[] = \ | ||
| 138 | "uniform sampler2D u_texture;\n" \ | ||
| 139 | "varying mediump vec4 v_color;\n" \ | ||
| 140 | "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \ | ||
| 141 | "\n" \ | ||
| 142 | "void main()\n" \ | ||
| 143 | "{\n" \ | ||
| 144 | " mediump vec4 abgr = texture2D(u_texture, v_texCoord);\n" \ | ||
| 145 | " gl_FragColor = abgr;\n" \ | ||
| 146 | " gl_FragColor.a = 1.0;\n" \ | ||
| 147 | " gl_FragColor *= v_color;\n" \ | ||
| 148 | "}\n" \ | ||
| 149 | ; | ||
| 150 | |||
| 151 | #ifdef SDL_HAVE_YUV | ||
| 152 | |||
| 153 | #define YUV_SHADER_PROLOGUE \ | ||
| 154 | "uniform sampler2D u_texture;\n" \ | ||
| 155 | "uniform sampler2D u_texture_u;\n" \ | ||
| 156 | "uniform sampler2D u_texture_v;\n" \ | ||
| 157 | "uniform vec3 u_offset;\n" \ | ||
| 158 | "uniform mat3 u_matrix;\n" \ | ||
| 159 | "varying mediump vec4 v_color;\n" \ | ||
| 160 | "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \ | ||
| 161 | "\n" \ | ||
| 162 | |||
| 163 | #define YUV_SHADER_BODY \ | ||
| 164 | "void main()\n" \ | ||
| 165 | "{\n" \ | ||
| 166 | " mediump vec3 yuv;\n" \ | ||
| 167 | " lowp vec3 rgb;\n" \ | ||
| 168 | "\n" \ | ||
| 169 | " // Get the YUV values \n" \ | ||
| 170 | " yuv.x = texture2D(u_texture, v_texCoord).r;\n" \ | ||
| 171 | " yuv.y = texture2D(u_texture_u, v_texCoord).r;\n" \ | ||
| 172 | " yuv.z = texture2D(u_texture_v, v_texCoord).r;\n" \ | ||
| 173 | "\n" \ | ||
| 174 | " // Do the color transform \n" \ | ||
| 175 | " yuv += u_offset;\n" \ | ||
| 176 | " rgb = yuv * u_matrix;\n" \ | ||
| 177 | "\n" \ | ||
| 178 | " // That was easy. :) \n" \ | ||
| 179 | " gl_FragColor = vec4(rgb, 1);\n" \ | ||
| 180 | " gl_FragColor *= v_color;\n" \ | ||
| 181 | "}" \ | ||
| 182 | |||
| 183 | #define NV12_RA_SHADER_BODY \ | ||
| 184 | "void main()\n" \ | ||
| 185 | "{\n" \ | ||
| 186 | " mediump vec3 yuv;\n" \ | ||
| 187 | " lowp vec3 rgb;\n" \ | ||
| 188 | "\n" \ | ||
| 189 | " // Get the YUV values \n" \ | ||
| 190 | " yuv.x = texture2D(u_texture, v_texCoord).r;\n" \ | ||
| 191 | " yuv.yz = texture2D(u_texture_u, v_texCoord).ra;\n" \ | ||
| 192 | "\n" \ | ||
| 193 | " // Do the color transform \n" \ | ||
| 194 | " yuv += u_offset;\n" \ | ||
| 195 | " rgb = yuv * u_matrix;\n" \ | ||
| 196 | "\n" \ | ||
| 197 | " // That was easy. :) \n" \ | ||
| 198 | " gl_FragColor = vec4(rgb, 1);\n" \ | ||
| 199 | " gl_FragColor *= v_color;\n" \ | ||
| 200 | "}" \ | ||
| 201 | |||
| 202 | #define NV12_RG_SHADER_BODY \ | ||
| 203 | "void main()\n" \ | ||
| 204 | "{\n" \ | ||
| 205 | " mediump vec3 yuv;\n" \ | ||
| 206 | " lowp vec3 rgb;\n" \ | ||
| 207 | "\n" \ | ||
| 208 | " // Get the YUV values \n" \ | ||
| 209 | " yuv.x = texture2D(u_texture, v_texCoord).r;\n" \ | ||
| 210 | " yuv.yz = texture2D(u_texture_u, v_texCoord).rg;\n" \ | ||
| 211 | "\n" \ | ||
| 212 | " // Do the color transform \n" \ | ||
| 213 | " yuv += u_offset;\n" \ | ||
| 214 | " rgb = yuv * u_matrix;\n" \ | ||
| 215 | "\n" \ | ||
| 216 | " // That was easy. :) \n" \ | ||
| 217 | " gl_FragColor = vec4(rgb, 1);\n" \ | ||
| 218 | " gl_FragColor *= v_color;\n" \ | ||
| 219 | "}" \ | ||
| 220 | |||
| 221 | #define NV21_RA_SHADER_BODY \ | ||
| 222 | "void main()\n" \ | ||
| 223 | "{\n" \ | ||
| 224 | " mediump vec3 yuv;\n" \ | ||
| 225 | " lowp vec3 rgb;\n" \ | ||
| 226 | "\n" \ | ||
| 227 | " // Get the YUV values \n" \ | ||
| 228 | " yuv.x = texture2D(u_texture, v_texCoord).r;\n" \ | ||
| 229 | " yuv.yz = texture2D(u_texture_u, v_texCoord).ar;\n" \ | ||
| 230 | "\n" \ | ||
| 231 | " // Do the color transform \n" \ | ||
| 232 | " yuv += u_offset;\n" \ | ||
| 233 | " rgb = yuv * u_matrix;\n" \ | ||
| 234 | "\n" \ | ||
| 235 | " // That was easy. :) \n" \ | ||
| 236 | " gl_FragColor = vec4(rgb, 1);\n" \ | ||
| 237 | " gl_FragColor *= v_color;\n" \ | ||
| 238 | "}" \ | ||
| 239 | |||
| 240 | #define NV21_RG_SHADER_BODY \ | ||
| 241 | "void main()\n" \ | ||
| 242 | "{\n" \ | ||
| 243 | " mediump vec3 yuv;\n" \ | ||
| 244 | " lowp vec3 rgb;\n" \ | ||
| 245 | "\n" \ | ||
| 246 | " // Get the YUV values \n" \ | ||
| 247 | " yuv.x = texture2D(u_texture, v_texCoord).r;\n" \ | ||
| 248 | " yuv.yz = texture2D(u_texture_u, v_texCoord).gr;\n" \ | ||
| 249 | "\n" \ | ||
| 250 | " // Do the color transform \n" \ | ||
| 251 | " yuv += u_offset;\n" \ | ||
| 252 | " rgb = yuv * u_matrix;\n" \ | ||
| 253 | "\n" \ | ||
| 254 | " // That was easy. :) \n" \ | ||
| 255 | " gl_FragColor = vec4(rgb, 1);\n" \ | ||
| 256 | " gl_FragColor *= v_color;\n" \ | ||
| 257 | "}" \ | ||
| 258 | |||
| 259 | // YUV to ABGR conversion | ||
| 260 | static const char GLES2_Fragment_TextureYUV[] = \ | ||
| 261 | YUV_SHADER_PROLOGUE \ | ||
| 262 | YUV_SHADER_BODY \ | ||
| 263 | ; | ||
| 264 | |||
| 265 | // NV12 to ABGR conversion | ||
| 266 | static const char GLES2_Fragment_TextureNV12_RA[] = \ | ||
| 267 | YUV_SHADER_PROLOGUE \ | ||
| 268 | NV12_RA_SHADER_BODY \ | ||
| 269 | ; | ||
| 270 | static const char GLES2_Fragment_TextureNV12_RG[] = \ | ||
| 271 | YUV_SHADER_PROLOGUE \ | ||
| 272 | NV12_RG_SHADER_BODY \ | ||
| 273 | ; | ||
| 274 | |||
| 275 | // NV21 to ABGR conversion | ||
| 276 | static const char GLES2_Fragment_TextureNV21_RA[] = \ | ||
| 277 | YUV_SHADER_PROLOGUE \ | ||
| 278 | NV21_RA_SHADER_BODY \ | ||
| 279 | ; | ||
| 280 | static const char GLES2_Fragment_TextureNV21_RG[] = \ | ||
| 281 | YUV_SHADER_PROLOGUE \ | ||
| 282 | NV21_RG_SHADER_BODY \ | ||
| 283 | ; | ||
| 284 | #endif | ||
| 285 | |||
| 286 | // Custom Android video format texture | ||
| 287 | static const char GLES2_Fragment_TextureExternalOES_Prologue[] = \ | ||
| 288 | "#extension GL_OES_EGL_image_external : require\n" \ | ||
| 289 | "\n" \ | ||
| 290 | ; | ||
| 291 | static const char GLES2_Fragment_TextureExternalOES[] = \ | ||
| 292 | "uniform samplerExternalOES u_texture;\n" \ | ||
| 293 | "varying mediump vec4 v_color;\n" \ | ||
| 294 | "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \ | ||
| 295 | "\n" \ | ||
| 296 | "void main()\n" \ | ||
| 297 | "{\n" \ | ||
| 298 | " gl_FragColor = texture2D(u_texture, v_texCoord);\n" \ | ||
| 299 | " gl_FragColor *= v_color;\n" \ | ||
| 300 | "}\n" \ | ||
| 301 | ; | ||
| 302 | |||
| 303 | /* *INDENT-ON* */ // clang-format on | ||
| 304 | |||
| 305 | /************************************************************************************************* | ||
| 306 | * Shader selector * | ||
| 307 | *************************************************************************************************/ | ||
| 308 | |||
| 309 | const char *GLES2_GetShaderPrologue(GLES2_ShaderType type) | ||
| 310 | { | ||
| 311 | switch (type) { | ||
| 312 | case GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES: | ||
| 313 | return GLES2_Fragment_TextureExternalOES_Prologue; | ||
| 314 | default: | ||
| 315 | return ""; | ||
| 316 | } | ||
| 317 | } | ||
| 318 | |||
| 319 | const char *GLES2_GetShaderInclude(GLES2_ShaderIncludeType type) | ||
| 320 | { | ||
| 321 | switch (type) { | ||
| 322 | case GLES2_SHADER_FRAGMENT_INCLUDE_UNDEF_PRECISION: | ||
| 323 | return GLES2_Fragment_Include_Undef_Precision; | ||
| 324 | case GLES2_SHADER_FRAGMENT_INCLUDE_BEST_TEXCOORD_PRECISION: | ||
| 325 | return GLES2_Fragment_Include_Best_Texture_Precision; | ||
| 326 | case GLES2_SHADER_FRAGMENT_INCLUDE_MEDIUM_TEXCOORD_PRECISION: | ||
| 327 | return GLES2_Fragment_Include_Medium_Texture_Precision; | ||
| 328 | case GLES2_SHADER_FRAGMENT_INCLUDE_HIGH_TEXCOORD_PRECISION: | ||
| 329 | return GLES2_Fragment_Include_High_Texture_Precision; | ||
| 330 | default: | ||
| 331 | return ""; | ||
| 332 | } | ||
| 333 | } | ||
| 334 | |||
| 335 | GLES2_ShaderIncludeType GLES2_GetTexCoordPrecisionEnumFromHint(void) | ||
| 336 | { | ||
| 337 | const char *texcoord_hint = SDL_GetHint("SDL_RENDER_OPENGLES2_TEXCOORD_PRECISION"); | ||
| 338 | GLES2_ShaderIncludeType value = GLES2_SHADER_FRAGMENT_INCLUDE_BEST_TEXCOORD_PRECISION; | ||
| 339 | if (texcoord_hint) { | ||
| 340 | if (SDL_strcmp(texcoord_hint, "undefined") == 0) { | ||
| 341 | return GLES2_SHADER_FRAGMENT_INCLUDE_UNDEF_PRECISION; | ||
| 342 | } | ||
| 343 | if (SDL_strcmp(texcoord_hint, "high") == 0) { | ||
| 344 | return GLES2_SHADER_FRAGMENT_INCLUDE_HIGH_TEXCOORD_PRECISION; | ||
| 345 | } | ||
| 346 | if (SDL_strcmp(texcoord_hint, "medium") == 0) { | ||
| 347 | return GLES2_SHADER_FRAGMENT_INCLUDE_MEDIUM_TEXCOORD_PRECISION; | ||
| 348 | } | ||
| 349 | } | ||
| 350 | return value; | ||
| 351 | } | ||
| 352 | |||
| 353 | const char *GLES2_GetShader(GLES2_ShaderType type) | ||
| 354 | { | ||
| 355 | switch (type) { | ||
| 356 | case GLES2_SHADER_VERTEX_DEFAULT: | ||
| 357 | return GLES2_Vertex_Default; | ||
| 358 | case GLES2_SHADER_FRAGMENT_SOLID: | ||
| 359 | return GLES2_Fragment_Solid; | ||
| 360 | case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR: | ||
| 361 | return GLES2_Fragment_TextureABGR; | ||
| 362 | case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB: | ||
| 363 | return GLES2_Fragment_TextureARGB; | ||
| 364 | case GLES2_SHADER_FRAGMENT_TEXTURE_RGB: | ||
| 365 | return GLES2_Fragment_TextureRGB; | ||
| 366 | case GLES2_SHADER_FRAGMENT_TEXTURE_BGR: | ||
| 367 | return GLES2_Fragment_TextureBGR; | ||
| 368 | #ifdef SDL_HAVE_YUV | ||
| 369 | case GLES2_SHADER_FRAGMENT_TEXTURE_YUV: | ||
| 370 | return GLES2_Fragment_TextureYUV; | ||
| 371 | case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA: | ||
| 372 | return GLES2_Fragment_TextureNV12_RA; | ||
| 373 | case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RG: | ||
| 374 | return GLES2_Fragment_TextureNV12_RG; | ||
| 375 | case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RA: | ||
| 376 | return GLES2_Fragment_TextureNV21_RA; | ||
| 377 | case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RG: | ||
| 378 | return GLES2_Fragment_TextureNV21_RG; | ||
| 379 | #endif | ||
| 380 | case GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES: | ||
| 381 | return GLES2_Fragment_TextureExternalOES; | ||
| 382 | default: | ||
| 383 | return NULL; | ||
| 384 | } | ||
| 385 | } | ||
| 386 | |||
| 387 | #endif // SDL_VIDEO_RENDER_OGL_ES2 | ||
diff --git a/SDL-3.2.8/src/render/opengles2/SDL_shaders_gles2.h b/SDL-3.2.8/src/render/opengles2/SDL_shaders_gles2.h new file mode 100644 index 0000000..e71f8ce --- /dev/null +++ b/SDL-3.2.8/src/render/opengles2/SDL_shaders_gles2.h | |||
| @@ -0,0 +1,65 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifndef SDL_shaders_gles2_h_ | ||
| 24 | #define SDL_shaders_gles2_h_ | ||
| 25 | |||
| 26 | #ifdef SDL_VIDEO_RENDER_OGL_ES2 | ||
| 27 | |||
| 28 | typedef enum | ||
| 29 | { | ||
| 30 | GLES2_SHADER_FRAGMENT_INCLUDE_NONE = 0, | ||
| 31 | GLES2_SHADER_FRAGMENT_INCLUDE_BEST_TEXCOORD_PRECISION, | ||
| 32 | GLES2_SHADER_FRAGMENT_INCLUDE_MEDIUM_TEXCOORD_PRECISION, | ||
| 33 | GLES2_SHADER_FRAGMENT_INCLUDE_HIGH_TEXCOORD_PRECISION, | ||
| 34 | GLES2_SHADER_FRAGMENT_INCLUDE_UNDEF_PRECISION, | ||
| 35 | GLES2_SHADER_FRAGMENT_INCLUDE_COUNT | ||
| 36 | } GLES2_ShaderIncludeType; | ||
| 37 | |||
| 38 | typedef enum | ||
| 39 | { | ||
| 40 | GLES2_SHADER_VERTEX_DEFAULT = 0, | ||
| 41 | GLES2_SHADER_FRAGMENT_SOLID, | ||
| 42 | GLES2_SHADER_FRAGMENT_TEXTURE_ABGR, | ||
| 43 | GLES2_SHADER_FRAGMENT_TEXTURE_ARGB, | ||
| 44 | GLES2_SHADER_FRAGMENT_TEXTURE_BGR, | ||
| 45 | GLES2_SHADER_FRAGMENT_TEXTURE_RGB, | ||
| 46 | #ifdef SDL_HAVE_YUV | ||
| 47 | GLES2_SHADER_FRAGMENT_TEXTURE_YUV, | ||
| 48 | GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA, | ||
| 49 | GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RG, | ||
| 50 | GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RA, | ||
| 51 | GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RG, | ||
| 52 | #endif | ||
| 53 | // Shaders beyond this point are optional and not cached at render creation | ||
| 54 | GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES, | ||
| 55 | GLES2_SHADER_COUNT | ||
| 56 | } GLES2_ShaderType; | ||
| 57 | |||
| 58 | extern const char *GLES2_GetShaderPrologue(GLES2_ShaderType type); | ||
| 59 | extern const char *GLES2_GetShaderInclude(GLES2_ShaderIncludeType type); | ||
| 60 | extern const char *GLES2_GetShader(GLES2_ShaderType type); | ||
| 61 | extern GLES2_ShaderIncludeType GLES2_GetTexCoordPrecisionEnumFromHint(void); | ||
| 62 | |||
| 63 | #endif // SDL_VIDEO_RENDER_OGL_ES2 | ||
| 64 | |||
| 65 | #endif // SDL_shaders_gles2_h_ | ||
diff --git a/SDL-3.2.8/src/render/ps2/SDL_render_ps2.c b/SDL-3.2.8/src/render/ps2/SDL_render_ps2.c new file mode 100644 index 0000000..ddcab9e --- /dev/null +++ b/SDL-3.2.8/src/render/ps2/SDL_render_ps2.c | |||
| @@ -0,0 +1,727 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_PS2 | ||
| 24 | |||
| 25 | #include "../SDL_sysrender.h" | ||
| 26 | |||
| 27 | #include <kernel.h> | ||
| 28 | #include <malloc.h> | ||
| 29 | #include <gsKit.h> | ||
| 30 | #include <dmaKit.h> | ||
| 31 | #include <gsToolkit.h> | ||
| 32 | |||
| 33 | #ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA | ||
| 34 | #pragma GCC diagnostic push | ||
| 35 | #pragma GCC diagnostic ignored "-Wdeclaration-after-statement" | ||
| 36 | #endif | ||
| 37 | |||
| 38 | #include <gsInline.h> | ||
| 39 | |||
| 40 | #ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA | ||
| 41 | #pragma GCC diagnostic pop | ||
| 42 | #endif | ||
| 43 | |||
| 44 | // turn black GS Screen | ||
| 45 | #define GS_BLACK GS_SETREG_RGBA(0x00, 0x00, 0x00, 0x80) | ||
| 46 | // Size of Persistent drawbuffer (Single Buffered) | ||
| 47 | #define RENDER_QUEUE_PER_POOLSIZE 1024 * 256 // 256K of persistent renderqueue | ||
| 48 | /* Size of Oneshot drawbuffer (Double Buffered, so it uses this size * 2) */ | ||
| 49 | #define RENDER_QUEUE_OS_POOLSIZE 1024 * 1024 * 2 // 2048K of oneshot renderqueue | ||
| 50 | |||
| 51 | typedef struct | ||
| 52 | { | ||
| 53 | GSGLOBAL *gsGlobal; | ||
| 54 | uint64_t drawColor; | ||
| 55 | SDL_Rect *viewport; | ||
| 56 | int32_t vsync_callback_id; | ||
| 57 | int vsync; // 0 (Disabled), 1 (Enabled), -1 (Dynamic) | ||
| 58 | } PS2_RenderData; | ||
| 59 | |||
| 60 | static int vsync_sema_id = 0; | ||
| 61 | |||
| 62 | // PRIVATE METHODS | ||
| 63 | static int vsync_handler(void) | ||
| 64 | { | ||
| 65 | iSignalSema(vsync_sema_id); | ||
| 66 | |||
| 67 | ExitHandler(); | ||
| 68 | return 0; | ||
| 69 | } | ||
| 70 | |||
| 71 | // Copy of gsKit_sync_flip, but without the 'flip' | ||
| 72 | static void gsKit_sync(GSGLOBAL *gsGlobal) | ||
| 73 | { | ||
| 74 | if (!gsGlobal->FirstFrame) { | ||
| 75 | WaitSema(vsync_sema_id); | ||
| 76 | } | ||
| 77 | while (PollSema(vsync_sema_id) >= 0) | ||
| 78 | ; | ||
| 79 | } | ||
| 80 | |||
| 81 | // Copy of gsKit_sync_flip, but without the 'sync' | ||
| 82 | static void gsKit_flip(GSGLOBAL *gsGlobal) | ||
| 83 | { | ||
| 84 | if (!gsGlobal->FirstFrame) { | ||
| 85 | if (gsGlobal->DoubleBuffering == GS_SETTING_ON) { | ||
| 86 | GS_SET_DISPFB2(gsGlobal->ScreenBuffer[gsGlobal->ActiveBuffer & 1] / 8192, | ||
| 87 | gsGlobal->Width / 64, gsGlobal->PSM, 0, 0); | ||
| 88 | |||
| 89 | gsGlobal->ActiveBuffer ^= 1; | ||
| 90 | } | ||
| 91 | } | ||
| 92 | |||
| 93 | gsKit_setactive(gsGlobal); | ||
| 94 | } | ||
| 95 | |||
| 96 | static int PixelFormatToPS2PSM(Uint32 format) | ||
| 97 | { | ||
| 98 | switch (format) { | ||
| 99 | case SDL_PIXELFORMAT_ABGR1555: | ||
| 100 | return GS_PSM_CT16; | ||
| 101 | default: | ||
| 102 | return GS_PSM_CT32; | ||
| 103 | } | ||
| 104 | } | ||
| 105 | |||
| 106 | static gs_rgbaq float_color_to_RGBAQ(const SDL_FColor *color, float color_scale) | ||
| 107 | { | ||
| 108 | uint8_t colorR = (uint8_t)SDL_roundf(SDL_clamp(color->r * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 109 | uint8_t colorG = (uint8_t)SDL_roundf(SDL_clamp(color->g * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 110 | uint8_t colorB = (uint8_t)SDL_roundf(SDL_clamp(color->b * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 111 | uint8_t colorA = (uint8_t)SDL_roundf(SDL_clamp(color->a, 0.0f, 1.0f) * 255.0f); | ||
| 112 | |||
| 113 | return color_to_RGBAQ(colorR, colorG, colorB, colorA, 0x00); | ||
| 114 | } | ||
| 115 | |||
| 116 | static uint64_t float_GS_SETREG_RGBAQ(const SDL_FColor *color, float color_scale) | ||
| 117 | { | ||
| 118 | uint8_t colorR = (uint8_t)SDL_roundf(SDL_clamp(color->r * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 119 | uint8_t colorG = (uint8_t)SDL_roundf(SDL_clamp(color->g * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 120 | uint8_t colorB = (uint8_t)SDL_roundf(SDL_clamp(color->b * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 121 | uint8_t colorA = (uint8_t)SDL_roundf(SDL_clamp(color->a, 0.0f, 1.0f) * 255.0f); | ||
| 122 | |||
| 123 | return GS_SETREG_RGBAQ(colorR, colorG, colorB, colorA, 0x00); | ||
| 124 | } | ||
| 125 | |||
| 126 | static void PS2_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 127 | { | ||
| 128 | } | ||
| 129 | |||
| 130 | static bool PS2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 131 | { | ||
| 132 | GSTEXTURE *ps2_tex = (GSTEXTURE *)SDL_calloc(1, sizeof(GSTEXTURE)); | ||
| 133 | |||
| 134 | if (!ps2_tex) { | ||
| 135 | return false; | ||
| 136 | } | ||
| 137 | |||
| 138 | ps2_tex->Width = texture->w; | ||
| 139 | ps2_tex->Height = texture->h; | ||
| 140 | ps2_tex->PSM = PixelFormatToPS2PSM(texture->format); | ||
| 141 | ps2_tex->Mem = SDL_aligned_alloc(128, gsKit_texture_size_ee(ps2_tex->Width, ps2_tex->Height, ps2_tex->PSM)); | ||
| 142 | |||
| 143 | if (!ps2_tex->Mem) { | ||
| 144 | SDL_free(ps2_tex); | ||
| 145 | return false; | ||
| 146 | } | ||
| 147 | |||
| 148 | texture->internal = ps2_tex; | ||
| 149 | |||
| 150 | return true; | ||
| 151 | } | ||
| 152 | |||
| 153 | static bool PS2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 154 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 155 | { | ||
| 156 | GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->internal; | ||
| 157 | |||
| 158 | *pixels = | ||
| 159 | (void *)((Uint8 *)ps2_texture->Mem + rect->y * ps2_texture->Width * SDL_BYTESPERPIXEL(texture->format) + | ||
| 160 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 161 | *pitch = ps2_texture->Width * SDL_BYTESPERPIXEL(texture->format); | ||
| 162 | return true; | ||
| 163 | } | ||
| 164 | |||
| 165 | static void PS2_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 166 | { | ||
| 167 | GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->internal; | ||
| 168 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 169 | |||
| 170 | gsKit_TexManager_invalidate(data->gsGlobal, ps2_texture); | ||
| 171 | } | ||
| 172 | |||
| 173 | static bool PS2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 174 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 175 | { | ||
| 176 | const Uint8 *src; | ||
| 177 | Uint8 *dst; | ||
| 178 | int row, length, dpitch; | ||
| 179 | src = pixels; | ||
| 180 | |||
| 181 | PS2_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch); | ||
| 182 | length = rect->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 183 | if (length == pitch && length == dpitch) { | ||
| 184 | SDL_memcpy(dst, src, length * rect->h); | ||
| 185 | } else { | ||
| 186 | for (row = 0; row < rect->h; ++row) { | ||
| 187 | SDL_memcpy(dst, src, length); | ||
| 188 | src += pitch; | ||
| 189 | dst += dpitch; | ||
| 190 | } | ||
| 191 | } | ||
| 192 | |||
| 193 | PS2_UnlockTexture(renderer, texture); | ||
| 194 | |||
| 195 | return true; | ||
| 196 | } | ||
| 197 | |||
| 198 | static void PS2_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 199 | { | ||
| 200 | GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->internal; | ||
| 201 | /* | ||
| 202 | set texture filtering according to scaleMode | ||
| 203 | supported hint values are nearest (0, default) or linear (1) | ||
| 204 | gskit scale mode is either GS_FILTER_NEAREST (good for tile-map) | ||
| 205 | or GS_FILTER_LINEAR (good for scaling) | ||
| 206 | */ | ||
| 207 | uint32_t gsKitScaleMode = (scaleMode == SDL_SCALEMODE_NEAREST | ||
| 208 | ? GS_FILTER_NEAREST | ||
| 209 | : GS_FILTER_LINEAR); | ||
| 210 | ps2_texture->Filter = gsKitScaleMode; | ||
| 211 | } | ||
| 212 | |||
| 213 | static bool PS2_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 214 | { | ||
| 215 | return true; | ||
| 216 | } | ||
| 217 | |||
| 218 | static bool PS2_QueueSetViewport(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 219 | { | ||
| 220 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 221 | const SDL_Rect *viewport = &cmd->data.viewport.rect; | ||
| 222 | data->viewport = (SDL_Rect *)viewport; | ||
| 223 | |||
| 224 | data->gsGlobal->OffsetX = (int)((2048.0f + (float)viewport->x) * 16.0f); | ||
| 225 | data->gsGlobal->OffsetY = (int)((2048.0f + (float)viewport->y) * 16.0f); | ||
| 226 | gsKit_set_scissor(data->gsGlobal, GS_SETREG_SCISSOR(viewport->x, viewport->x + viewport->w, viewport->y, viewport->y + viewport->h)); | ||
| 227 | |||
| 228 | return true; | ||
| 229 | } | ||
| 230 | |||
| 231 | static bool PS2_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 232 | { | ||
| 233 | return true; // nothing to do in this backend. | ||
| 234 | } | ||
| 235 | |||
| 236 | static bool PS2_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 237 | { | ||
| 238 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 239 | GSPRIMPOINT *vertices = (GSPRIMPOINT *)SDL_AllocateRenderVertices(renderer, count * sizeof(GSPRIMPOINT), 4, &cmd->data.draw.first); | ||
| 240 | gs_rgbaq rgbaq; | ||
| 241 | int i; | ||
| 242 | |||
| 243 | if (!vertices) { | ||
| 244 | return false; | ||
| 245 | } | ||
| 246 | |||
| 247 | cmd->data.draw.count = count; | ||
| 248 | |||
| 249 | rgbaq = float_color_to_RGBAQ(&cmd->data.draw.color, cmd->data.draw.color_scale); | ||
| 250 | |||
| 251 | for (i = 0; i < count; i++, vertices++, points++) { | ||
| 252 | vertices->xyz2 = vertex_to_XYZ2(data->gsGlobal, points->x, points->y, 0); | ||
| 253 | vertices->rgbaq = rgbaq; | ||
| 254 | } | ||
| 255 | return true; | ||
| 256 | } | ||
| 257 | |||
| 258 | static bool PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 259 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 260 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 261 | float scale_x, float scale_y) | ||
| 262 | { | ||
| 263 | int i; | ||
| 264 | int count = indices ? num_indices : num_vertices; | ||
| 265 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 266 | const float color_scale = cmd->data.draw.color_scale; | ||
| 267 | |||
| 268 | cmd->data.draw.count = count; | ||
| 269 | size_indices = indices ? size_indices : 0; | ||
| 270 | |||
| 271 | if (texture) { | ||
| 272 | GSPRIMUVPOINT *vertices = (GSPRIMUVPOINT *) SDL_AllocateRenderVertices(renderer, count * sizeof(GSPRIMUVPOINT), 4, &cmd->data.draw.first); | ||
| 273 | GSTEXTURE *ps2_tex = (GSTEXTURE *) texture->internal; | ||
| 274 | |||
| 275 | if (!vertices) { | ||
| 276 | return false; | ||
| 277 | } | ||
| 278 | |||
| 279 | for (i = 0; i < count; i++) { | ||
| 280 | int j; | ||
| 281 | float *xy_; | ||
| 282 | float *uv_; | ||
| 283 | SDL_FColor *col_; | ||
| 284 | if (size_indices == 4) { | ||
| 285 | j = ((const Uint32 *)indices)[i]; | ||
| 286 | } else if (size_indices == 2) { | ||
| 287 | j = ((const Uint16 *)indices)[i]; | ||
| 288 | } else if (size_indices == 1) { | ||
| 289 | j = ((const Uint8 *)indices)[i]; | ||
| 290 | } else { | ||
| 291 | j = i; | ||
| 292 | } | ||
| 293 | |||
| 294 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 295 | col_ = (SDL_FColor *)((char *)color + j * color_stride); | ||
| 296 | uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 297 | |||
| 298 | vertices->xyz2 = vertex_to_XYZ2(data->gsGlobal, xy_[0] * scale_x, xy_[1] * scale_y, 0); | ||
| 299 | vertices->rgbaq = float_color_to_RGBAQ(col_, color_scale); | ||
| 300 | vertices->uv = vertex_to_UV(ps2_tex, uv_[0] * ps2_tex->Width, uv_[1] * ps2_tex->Height); | ||
| 301 | |||
| 302 | vertices++; | ||
| 303 | } | ||
| 304 | |||
| 305 | } else { | ||
| 306 | GSPRIMPOINT *vertices = (GSPRIMPOINT *)SDL_AllocateRenderVertices(renderer, count * sizeof(GSPRIMPOINT), 4, &cmd->data.draw.first); | ||
| 307 | |||
| 308 | if (!vertices) { | ||
| 309 | return false; | ||
| 310 | } | ||
| 311 | |||
| 312 | for (i = 0; i < count; i++) { | ||
| 313 | int j; | ||
| 314 | float *xy_; | ||
| 315 | SDL_FColor *col_; | ||
| 316 | if (size_indices == 4) { | ||
| 317 | j = ((const Uint32 *)indices)[i]; | ||
| 318 | } else if (size_indices == 2) { | ||
| 319 | j = ((const Uint16 *)indices)[i]; | ||
| 320 | } else if (size_indices == 1) { | ||
| 321 | j = ((const Uint8 *)indices)[i]; | ||
| 322 | } else { | ||
| 323 | j = i; | ||
| 324 | } | ||
| 325 | |||
| 326 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 327 | col_ = (SDL_FColor *)((char *)color + j * color_stride); | ||
| 328 | |||
| 329 | vertices->xyz2 = vertex_to_XYZ2(data->gsGlobal, xy_[0] * scale_x, xy_[1] * scale_y, 0); | ||
| 330 | vertices->rgbaq = float_color_to_RGBAQ(col_, color_scale); | ||
| 331 | |||
| 332 | vertices++; | ||
| 333 | } | ||
| 334 | } | ||
| 335 | |||
| 336 | return true; | ||
| 337 | } | ||
| 338 | |||
| 339 | static bool PS2_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 340 | { | ||
| 341 | return true; // nothing to do in this backend. | ||
| 342 | } | ||
| 343 | |||
| 344 | static bool PS2_RenderSetClipRect(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 345 | { | ||
| 346 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 347 | SDL_Rect *viewport = data->viewport; | ||
| 348 | |||
| 349 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 350 | |||
| 351 | if (cmd->data.cliprect.enabled) { | ||
| 352 | // We need to do it relative to saved viewport | ||
| 353 | viewport->x += rect->x; | ||
| 354 | viewport->y += rect->y; | ||
| 355 | viewport->w = SDL_min(viewport->w, rect->w); | ||
| 356 | viewport->h = SDL_min(viewport->h, rect->h); | ||
| 357 | } | ||
| 358 | gsKit_set_scissor(data->gsGlobal, GS_SETREG_SCISSOR(viewport->x, viewport->x + viewport->w, viewport->y, viewport->y + viewport->h)); | ||
| 359 | |||
| 360 | return true; | ||
| 361 | } | ||
| 362 | |||
| 363 | static bool PS2_RenderSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 364 | { | ||
| 365 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 366 | |||
| 367 | data->drawColor = float_GS_SETREG_RGBAQ(&cmd->data.color.color, cmd->data.color.color_scale); | ||
| 368 | return true; | ||
| 369 | } | ||
| 370 | |||
| 371 | static bool PS2_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 372 | { | ||
| 373 | int offsetX, offsetY; | ||
| 374 | SDL_Rect *viewport; | ||
| 375 | |||
| 376 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 377 | |||
| 378 | // Clear the screen, so let's put default viewport | ||
| 379 | gsKit_set_scissor(data->gsGlobal, GS_SCISSOR_RESET); | ||
| 380 | // Put back original offset | ||
| 381 | offsetX = data->gsGlobal->OffsetX; | ||
| 382 | offsetY = data->gsGlobal->OffsetY; | ||
| 383 | data->gsGlobal->OffsetX = (int)(2048.0f * 16.0f); | ||
| 384 | data->gsGlobal->OffsetY = (int)(2048.0f * 16.0f); | ||
| 385 | gsKit_clear(data->gsGlobal, float_GS_SETREG_RGBAQ(&cmd->data.color.color, cmd->data.color.color_scale)); | ||
| 386 | |||
| 387 | // Put back original offset | ||
| 388 | data->gsGlobal->OffsetX = offsetX; | ||
| 389 | data->gsGlobal->OffsetY = offsetY; | ||
| 390 | |||
| 391 | // // Put back view port | ||
| 392 | viewport = data->viewport; | ||
| 393 | gsKit_set_scissor(data->gsGlobal, GS_SETREG_SCISSOR(viewport->x, viewport->x + viewport->w, viewport->y, viewport->y + viewport->h)); | ||
| 394 | |||
| 395 | return true; | ||
| 396 | } | ||
| 397 | |||
| 398 | static void PS2_SetBlendMode(PS2_RenderData *data, int blendMode) | ||
| 399 | { | ||
| 400 | #define A_COLOR_SOURCE 0 | ||
| 401 | #define A_COLOR_DEST 1 | ||
| 402 | #define A_COLOR_NULL 2 | ||
| 403 | #define A_ALPHA_SOURCE 0 | ||
| 404 | #define A_ALPHA_DEST 1 | ||
| 405 | #define A_ALPHA_FIX 2 | ||
| 406 | |||
| 407 | switch (blendMode) { | ||
| 408 | case SDL_BLENDMODE_NONE: | ||
| 409 | { | ||
| 410 | data->gsGlobal->PrimAlphaEnable = GS_SETTING_OFF; | ||
| 411 | break; | ||
| 412 | } | ||
| 413 | case SDL_BLENDMODE_BLEND: | ||
| 414 | { | ||
| 415 | gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_DEST, A_ALPHA_SOURCE, A_COLOR_DEST, 0), 0); | ||
| 416 | data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON; | ||
| 417 | break; | ||
| 418 | } | ||
| 419 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 420 | { | ||
| 421 | // FIXME: What are the settings for this? | ||
| 422 | gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_DEST, A_ALPHA_SOURCE, A_COLOR_DEST, 0), 0); | ||
| 423 | data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON; | ||
| 424 | break; | ||
| 425 | } | ||
| 426 | case SDL_BLENDMODE_ADD: | ||
| 427 | { | ||
| 428 | gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_NULL, A_ALPHA_FIX, A_COLOR_DEST, 0x80), 0); | ||
| 429 | data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON; | ||
| 430 | break; | ||
| 431 | } | ||
| 432 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 433 | { | ||
| 434 | // FIXME: What are the settings for this? | ||
| 435 | gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_NULL, A_ALPHA_FIX, A_COLOR_DEST, 0x80), 0); | ||
| 436 | data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON; | ||
| 437 | break; | ||
| 438 | } | ||
| 439 | case SDL_BLENDMODE_MUL: | ||
| 440 | case SDL_BLENDMODE_MOD: | ||
| 441 | { | ||
| 442 | // We don't fully support MOD and MUL, however this is the best we can do | ||
| 443 | gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_DEST, A_COLOR_NULL, A_ALPHA_SOURCE, A_COLOR_SOURCE, 0x80), 0); | ||
| 444 | data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON; | ||
| 445 | break; | ||
| 446 | } | ||
| 447 | } | ||
| 448 | } | ||
| 449 | |||
| 450 | static bool PS2_RenderGeometry(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd) | ||
| 451 | { | ||
| 452 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 453 | const size_t count = cmd->data.draw.count; | ||
| 454 | |||
| 455 | PS2_SetBlendMode(data, cmd->data.draw.blend); | ||
| 456 | |||
| 457 | if (cmd->data.draw.texture) { | ||
| 458 | const GSPRIMUVPOINT *verts = (GSPRIMUVPOINT *) (vertices + cmd->data.draw.first); | ||
| 459 | GSTEXTURE *ps2_tex = (GSTEXTURE *)cmd->data.draw.texture->internal; | ||
| 460 | |||
| 461 | gsKit_TexManager_bind(data->gsGlobal, ps2_tex); | ||
| 462 | gsKit_prim_list_triangle_goraud_texture_uv_3d(data->gsGlobal, ps2_tex, count, verts); | ||
| 463 | } else { | ||
| 464 | const GSPRIMPOINT *verts = (GSPRIMPOINT *)(vertices + cmd->data.draw.first); | ||
| 465 | gsKit_prim_list_triangle_gouraud_3d(data->gsGlobal, count, verts); | ||
| 466 | } | ||
| 467 | |||
| 468 | return true; | ||
| 469 | } | ||
| 470 | |||
| 471 | static bool PS2_RenderLines(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd) | ||
| 472 | { | ||
| 473 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 474 | const size_t count = cmd->data.draw.count; | ||
| 475 | const GSPRIMPOINT *verts = (GSPRIMPOINT *)(vertices + cmd->data.draw.first); | ||
| 476 | |||
| 477 | PS2_SetBlendMode(data, cmd->data.draw.blend); | ||
| 478 | gsKit_prim_list_line_goraud_3d(data->gsGlobal, count, verts); | ||
| 479 | |||
| 480 | // We're done! | ||
| 481 | return true; | ||
| 482 | } | ||
| 483 | |||
| 484 | static bool PS2_RenderPoints(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd) | ||
| 485 | { | ||
| 486 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 487 | const size_t count = cmd->data.draw.count; | ||
| 488 | const GSPRIMPOINT *verts = (GSPRIMPOINT *)(vertices + cmd->data.draw.first); | ||
| 489 | |||
| 490 | PS2_SetBlendMode(data, cmd->data.draw.blend); | ||
| 491 | gsKit_prim_list_points(data->gsGlobal, count, verts); | ||
| 492 | |||
| 493 | // We're done! | ||
| 494 | return true; | ||
| 495 | } | ||
| 496 | |||
| 497 | static void PS2_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 498 | { | ||
| 499 | // currently this doesn't do anything. If this needs to do something (and someone is mixing their own rendering calls in!), update this. | ||
| 500 | } | ||
| 501 | |||
| 502 | static bool PS2_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 503 | { | ||
| 504 | while (cmd) { | ||
| 505 | switch (cmd->command) { | ||
| 506 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 507 | { | ||
| 508 | PS2_RenderSetViewPort(renderer, cmd); | ||
| 509 | // FIXME: We need to update the clip rect too, see https://github.com/libsdl-org/SDL/issues/9094 | ||
| 510 | break; | ||
| 511 | } | ||
| 512 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 513 | { | ||
| 514 | PS2_RenderSetClipRect(renderer, cmd); | ||
| 515 | break; | ||
| 516 | } | ||
| 517 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 518 | { | ||
| 519 | PS2_RenderSetDrawColor(renderer, cmd); | ||
| 520 | break; | ||
| 521 | } | ||
| 522 | case SDL_RENDERCMD_CLEAR: | ||
| 523 | { | ||
| 524 | PS2_RenderClear(renderer, cmd); | ||
| 525 | break; | ||
| 526 | } | ||
| 527 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 528 | { | ||
| 529 | PS2_RenderPoints(renderer, vertices, cmd); | ||
| 530 | break; | ||
| 531 | } | ||
| 532 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 533 | { | ||
| 534 | PS2_RenderLines(renderer, vertices, cmd); | ||
| 535 | break; | ||
| 536 | } | ||
| 537 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 538 | break; | ||
| 539 | case SDL_RENDERCMD_COPY: // unused | ||
| 540 | break; | ||
| 541 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 542 | break; | ||
| 543 | case SDL_RENDERCMD_GEOMETRY: | ||
| 544 | { | ||
| 545 | PS2_RenderGeometry(renderer, vertices, cmd); | ||
| 546 | break; | ||
| 547 | } | ||
| 548 | case SDL_RENDERCMD_NO_OP: | ||
| 549 | break; | ||
| 550 | } | ||
| 551 | cmd = cmd->next; | ||
| 552 | } | ||
| 553 | return true; | ||
| 554 | } | ||
| 555 | |||
| 556 | static bool PS2_RenderPresent(SDL_Renderer *renderer) | ||
| 557 | { | ||
| 558 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 559 | |||
| 560 | if (data->gsGlobal->DoubleBuffering == GS_SETTING_OFF) { | ||
| 561 | if (data->vsync == -1) { // Dynamic | ||
| 562 | gsKit_sync(data->gsGlobal); | ||
| 563 | } else if (data->vsync == 1) { | ||
| 564 | gsKit_vsync_wait(); | ||
| 565 | } | ||
| 566 | gsKit_queue_exec(data->gsGlobal); | ||
| 567 | } else { | ||
| 568 | gsKit_queue_exec(data->gsGlobal); | ||
| 569 | gsKit_finish(); | ||
| 570 | if (data->vsync == -1) { // Dynamic | ||
| 571 | gsKit_sync(data->gsGlobal); | ||
| 572 | } else if (data->vsync == 1) { | ||
| 573 | gsKit_vsync_wait(); | ||
| 574 | } | ||
| 575 | gsKit_flip(data->gsGlobal); | ||
| 576 | } | ||
| 577 | gsKit_TexManager_nextFrame(data->gsGlobal); | ||
| 578 | gsKit_clear(data->gsGlobal, GS_BLACK); | ||
| 579 | return true; | ||
| 580 | } | ||
| 581 | |||
| 582 | static void PS2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 583 | { | ||
| 584 | GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->internal; | ||
| 585 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 586 | |||
| 587 | if (!data) { | ||
| 588 | return; | ||
| 589 | } | ||
| 590 | |||
| 591 | if (!ps2_texture) { | ||
| 592 | return; | ||
| 593 | } | ||
| 594 | |||
| 595 | // Free from vram | ||
| 596 | gsKit_TexManager_free(data->gsGlobal, ps2_texture); | ||
| 597 | |||
| 598 | SDL_aligned_free(ps2_texture->Mem); | ||
| 599 | SDL_free(ps2_texture); | ||
| 600 | texture->internal = NULL; | ||
| 601 | } | ||
| 602 | |||
| 603 | static void PS2_DestroyRenderer(SDL_Renderer *renderer) | ||
| 604 | { | ||
| 605 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 606 | |||
| 607 | if (data) { | ||
| 608 | gsKit_clear(data->gsGlobal, GS_BLACK); | ||
| 609 | gsKit_vram_clear(data->gsGlobal); | ||
| 610 | gsKit_deinit_global(data->gsGlobal); | ||
| 611 | gsKit_remove_vsync_handler(data->vsync_callback_id); | ||
| 612 | |||
| 613 | SDL_free(data); | ||
| 614 | } | ||
| 615 | |||
| 616 | if (vsync_sema_id >= 0) { | ||
| 617 | DeleteSema(vsync_sema_id); | ||
| 618 | } | ||
| 619 | } | ||
| 620 | |||
| 621 | static bool PS2_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 622 | { | ||
| 623 | PS2_RenderData *data = (PS2_RenderData *)renderer->internal; | ||
| 624 | switch (vsync) { | ||
| 625 | case -1: | ||
| 626 | case 0: | ||
| 627 | case 1: | ||
| 628 | // Supported | ||
| 629 | break; | ||
| 630 | default: | ||
| 631 | return SDL_Unsupported(); | ||
| 632 | } | ||
| 633 | data->vsync = vsync; | ||
| 634 | return true; | ||
| 635 | } | ||
| 636 | |||
| 637 | static bool PS2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 638 | { | ||
| 639 | PS2_RenderData *data; | ||
| 640 | GSGLOBAL *gsGlobal; | ||
| 641 | ee_sema_t sema; | ||
| 642 | |||
| 643 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 644 | |||
| 645 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 646 | return SDL_SetError("Unsupported output colorspace"); | ||
| 647 | } | ||
| 648 | |||
| 649 | data = (PS2_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 650 | if (!data) { | ||
| 651 | return false; | ||
| 652 | } | ||
| 653 | |||
| 654 | // Specific gsKit init | ||
| 655 | sema.init_count = 0; | ||
| 656 | sema.max_count = 1; | ||
| 657 | sema.option = 0; | ||
| 658 | vsync_sema_id = CreateSema(&sema); | ||
| 659 | |||
| 660 | gsGlobal = gsKit_init_global_custom(RENDER_QUEUE_OS_POOLSIZE, RENDER_QUEUE_PER_POOLSIZE); | ||
| 661 | |||
| 662 | gsGlobal->Mode = GS_MODE_NTSC; | ||
| 663 | gsGlobal->Height = 448; | ||
| 664 | |||
| 665 | gsGlobal->PSM = GS_PSM_CT24; | ||
| 666 | gsGlobal->PSMZ = GS_PSMZ_16S; | ||
| 667 | gsGlobal->ZBuffering = GS_SETTING_OFF; | ||
| 668 | gsGlobal->DoubleBuffering = GS_SETTING_ON; | ||
| 669 | gsGlobal->PrimAlphaEnable = GS_SETTING_ON; | ||
| 670 | gsGlobal->Dithering = GS_SETTING_OFF; | ||
| 671 | |||
| 672 | gsKit_set_primalpha(gsGlobal, GS_SETREG_ALPHA(0, 1, 0, 1, 0), 0); | ||
| 673 | |||
| 674 | dmaKit_init(D_CTRL_RELE_OFF, D_CTRL_MFD_OFF, D_CTRL_STS_UNSPEC, D_CTRL_STD_OFF, D_CTRL_RCYC_8, 1 << DMA_CHANNEL_GIF); | ||
| 675 | dmaKit_chan_init(DMA_CHANNEL_GIF); | ||
| 676 | |||
| 677 | gsKit_set_clamp(gsGlobal, GS_CMODE_REPEAT); | ||
| 678 | |||
| 679 | gsKit_vram_clear(gsGlobal); | ||
| 680 | |||
| 681 | gsKit_init_screen(gsGlobal); | ||
| 682 | |||
| 683 | gsKit_TexManager_init(gsGlobal); | ||
| 684 | |||
| 685 | data->vsync_callback_id = gsKit_add_vsync_handler(vsync_handler); | ||
| 686 | |||
| 687 | gsKit_mode_switch(gsGlobal, GS_ONESHOT); | ||
| 688 | |||
| 689 | gsKit_clear(gsGlobal, GS_BLACK); | ||
| 690 | |||
| 691 | data->gsGlobal = gsGlobal; | ||
| 692 | |||
| 693 | renderer->WindowEvent = PS2_WindowEvent; | ||
| 694 | renderer->CreateTexture = PS2_CreateTexture; | ||
| 695 | renderer->UpdateTexture = PS2_UpdateTexture; | ||
| 696 | renderer->LockTexture = PS2_LockTexture; | ||
| 697 | renderer->UnlockTexture = PS2_UnlockTexture; | ||
| 698 | renderer->SetTextureScaleMode = PS2_SetTextureScaleMode; | ||
| 699 | renderer->SetRenderTarget = PS2_SetRenderTarget; | ||
| 700 | renderer->QueueSetViewport = PS2_QueueSetViewport; | ||
| 701 | renderer->QueueSetDrawColor = PS2_QueueNoOp; | ||
| 702 | renderer->QueueDrawPoints = PS2_QueueDrawPoints; | ||
| 703 | renderer->QueueDrawLines = PS2_QueueDrawPoints; | ||
| 704 | renderer->QueueGeometry = PS2_QueueGeometry; | ||
| 705 | renderer->InvalidateCachedState = PS2_InvalidateCachedState; | ||
| 706 | renderer->RunCommandQueue = PS2_RunCommandQueue; | ||
| 707 | renderer->RenderPresent = PS2_RenderPresent; | ||
| 708 | renderer->DestroyTexture = PS2_DestroyTexture; | ||
| 709 | renderer->DestroyRenderer = PS2_DestroyRenderer; | ||
| 710 | renderer->SetVSync = PS2_SetVSync; | ||
| 711 | renderer->internal = data; | ||
| 712 | PS2_InvalidateCachedState(renderer); | ||
| 713 | renderer->window = window; | ||
| 714 | |||
| 715 | renderer->name = PS2_RenderDriver.name; | ||
| 716 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555); | ||
| 717 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 718 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024); | ||
| 719 | |||
| 720 | return true; | ||
| 721 | } | ||
| 722 | |||
| 723 | SDL_RenderDriver PS2_RenderDriver = { | ||
| 724 | PS2_CreateRenderer, "PS2 gsKit" | ||
| 725 | }; | ||
| 726 | |||
| 727 | #endif // SDL_VIDEO_RENDER_PS2 | ||
diff --git a/SDL-3.2.8/src/render/psp/SDL_render_psp.c b/SDL-3.2.8/src/render/psp/SDL_render_psp.c new file mode 100644 index 0000000..3ce5036 --- /dev/null +++ b/SDL-3.2.8/src/render/psp/SDL_render_psp.c | |||
| @@ -0,0 +1,1400 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_PSP | ||
| 24 | |||
| 25 | #include "../SDL_sysrender.h" | ||
| 26 | |||
| 27 | #include "SDL_render_psp_c.h" | ||
| 28 | |||
| 29 | #include <pspkernel.h> | ||
| 30 | #include <pspdisplay.h> | ||
| 31 | #include <pspgu.h> | ||
| 32 | #include <pspgum.h> | ||
| 33 | #include <stdio.h> | ||
| 34 | #include <string.h> | ||
| 35 | #include <math.h> | ||
| 36 | #include <pspge.h> | ||
| 37 | #include <stdarg.h> | ||
| 38 | #include <stdlib.h> | ||
| 39 | #include <vram.h> | ||
| 40 | |||
| 41 | // PSP renderer implementation, based on the PGE | ||
| 42 | |||
| 43 | static unsigned int __attribute__((aligned(16))) DisplayList[262144]; | ||
| 44 | |||
| 45 | #define COL5650(r, g, b, a) ((r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11)) | ||
| 46 | #define COL5551(r, g, b, a) ((r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10) | (a > 0 ? 0x7000 : 0)) | ||
| 47 | #define COL4444(r, g, b, a) ((r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8) | ((a >> 4) << 12)) | ||
| 48 | #define COL8888(r, g, b, a) ((r) | ((g) << 8) | ((b) << 16) | ((a) << 24)) | ||
| 49 | |||
| 50 | /** | ||
| 51 | * Holds psp specific texture data | ||
| 52 | * | ||
| 53 | * Part of a hot-list of textures that are used as render targets | ||
| 54 | * When short of vram we spill Least-Recently-Used render targets to system memory | ||
| 55 | */ | ||
| 56 | typedef struct PSP_TextureData | ||
| 57 | { | ||
| 58 | void *data; /**< Image data. */ | ||
| 59 | unsigned int size; /**< Size of data in bytes. */ | ||
| 60 | unsigned int width; /**< Image width. */ | ||
| 61 | unsigned int height; /**< Image height. */ | ||
| 62 | unsigned int textureWidth; /**< Texture width (power of two). */ | ||
| 63 | unsigned int textureHeight; /**< Texture height (power of two). */ | ||
| 64 | unsigned int bits; /**< Image bits per pixel. */ | ||
| 65 | unsigned int format; /**< Image format - one of ::pgePixelFormat. */ | ||
| 66 | unsigned int pitch; | ||
| 67 | bool swizzled; /**< Is image swizzled. */ | ||
| 68 | struct PSP_TextureData *prevhotw; /**< More recently used render target */ | ||
| 69 | struct PSP_TextureData *nexthotw; /**< Less recently used render target */ | ||
| 70 | } PSP_TextureData; | ||
| 71 | |||
| 72 | typedef struct | ||
| 73 | { | ||
| 74 | SDL_BlendMode mode; | ||
| 75 | unsigned int color; | ||
| 76 | int shadeModel; | ||
| 77 | SDL_Texture *texture; | ||
| 78 | } PSP_BlendState; | ||
| 79 | |||
| 80 | typedef struct | ||
| 81 | { | ||
| 82 | unsigned int color; | ||
| 83 | } PSP_DrawStateCache; | ||
| 84 | |||
| 85 | typedef struct | ||
| 86 | { | ||
| 87 | void *frontbuffer; /**< main screen buffer */ | ||
| 88 | void *backbuffer; /**< buffer presented to display */ | ||
| 89 | SDL_Texture *boundTarget; /**< currently bound rendertarget */ | ||
| 90 | bool initialized; /**< is driver initialized */ | ||
| 91 | bool displayListAvail; /**< is the display list already initialized for this frame */ | ||
| 92 | unsigned int psm; /**< format of the display buffers */ | ||
| 93 | unsigned int bpp; /**< bits per pixel of the main display */ | ||
| 94 | |||
| 95 | bool vsync; /**< whether we do vsync */ | ||
| 96 | PSP_BlendState blendState; /**< current blend mode */ | ||
| 97 | PSP_TextureData *most_recent_target; /**< start of render target LRU double linked list */ | ||
| 98 | PSP_TextureData *least_recent_target; /**< end of the LRU list */ | ||
| 99 | |||
| 100 | bool vblank_not_reached; /**< whether vblank wasn't reached */ | ||
| 101 | } PSP_RenderData; | ||
| 102 | |||
| 103 | typedef struct | ||
| 104 | { | ||
| 105 | float x, y, z; | ||
| 106 | } VertV; | ||
| 107 | |||
| 108 | typedef struct | ||
| 109 | { | ||
| 110 | float u, v; | ||
| 111 | float x, y, z; | ||
| 112 | } VertTV; | ||
| 113 | |||
| 114 | typedef struct | ||
| 115 | { | ||
| 116 | SDL_Color col; | ||
| 117 | float x, y, z; | ||
| 118 | } VertCV; | ||
| 119 | |||
| 120 | typedef struct | ||
| 121 | { | ||
| 122 | float u, v; | ||
| 123 | SDL_Color col; | ||
| 124 | float x, y, z; | ||
| 125 | } VertTCV; | ||
| 126 | |||
| 127 | #define radToDeg(x) ((x)*180.f / SDL_PI_F) | ||
| 128 | #define degToRad(x) ((x)*SDL_PI_F / 180.f) | ||
| 129 | |||
| 130 | static float MathAbs(float x) | ||
| 131 | { | ||
| 132 | float result; | ||
| 133 | |||
| 134 | __asm__ volatile( | ||
| 135 | "mtv %1, S000\n" | ||
| 136 | "vabs.s S000, S000\n" | ||
| 137 | "mfv %0, S000\n" | ||
| 138 | : "=r"(result) | ||
| 139 | : "r"(x)); | ||
| 140 | |||
| 141 | return result; | ||
| 142 | } | ||
| 143 | |||
| 144 | static void MathSincos(float r, float *s, float *c) | ||
| 145 | { | ||
| 146 | __asm__ volatile( | ||
| 147 | "mtv %2, S002\n" | ||
| 148 | "vcst.s S003, VFPU_2_PI\n" | ||
| 149 | "vmul.s S002, S002, S003\n" | ||
| 150 | "vrot.p C000, S002, [s, c]\n" | ||
| 151 | "mfv %0, S000\n" | ||
| 152 | "mfv %1, S001\n" | ||
| 153 | : "=r"(*s), "=r"(*c) | ||
| 154 | : "r"(r)); | ||
| 155 | } | ||
| 156 | |||
| 157 | static void Swap(float *a, float *b) | ||
| 158 | { | ||
| 159 | float n = *a; | ||
| 160 | *a = *b; | ||
| 161 | *b = n; | ||
| 162 | } | ||
| 163 | |||
| 164 | static inline int InVram(void *data) | ||
| 165 | { | ||
| 166 | return data < (void *)0x04200000; | ||
| 167 | } | ||
| 168 | |||
| 169 | // Return next power of 2 | ||
| 170 | static int TextureNextPow2(unsigned int w) | ||
| 171 | { | ||
| 172 | unsigned int n = 2; | ||
| 173 | if (w == 0) { | ||
| 174 | return 0; | ||
| 175 | } | ||
| 176 | |||
| 177 | while (w > n) { | ||
| 178 | n <<= 1; | ||
| 179 | } | ||
| 180 | |||
| 181 | return n; | ||
| 182 | } | ||
| 183 | |||
| 184 | static void psp_on_vblank(u32 sub, PSP_RenderData *data) | ||
| 185 | { | ||
| 186 | if (data) { | ||
| 187 | data->vblank_not_reached = false; | ||
| 188 | } | ||
| 189 | } | ||
| 190 | |||
| 191 | static int PixelFormatToPSPFMT(SDL_PixelFormat format) | ||
| 192 | { | ||
| 193 | switch (format) { | ||
| 194 | case SDL_PIXELFORMAT_BGR565: | ||
| 195 | return GU_PSM_5650; | ||
| 196 | case SDL_PIXELFORMAT_ABGR1555: | ||
| 197 | return GU_PSM_5551; | ||
| 198 | case SDL_PIXELFORMAT_ABGR4444: | ||
| 199 | return GU_PSM_4444; | ||
| 200 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 201 | return GU_PSM_8888; | ||
| 202 | default: | ||
| 203 | return GU_PSM_8888; | ||
| 204 | } | ||
| 205 | } | ||
| 206 | |||
| 207 | /// SECTION render target LRU management | ||
| 208 | static void LRUTargetRelink(PSP_TextureData *psp_texture) | ||
| 209 | { | ||
| 210 | if (psp_texture->prevhotw) { | ||
| 211 | psp_texture->prevhotw->nexthotw = psp_texture->nexthotw; | ||
| 212 | } | ||
| 213 | if (psp_texture->nexthotw) { | ||
| 214 | psp_texture->nexthotw->prevhotw = psp_texture->prevhotw; | ||
| 215 | } | ||
| 216 | } | ||
| 217 | |||
| 218 | static void LRUTargetPushFront(PSP_RenderData *data, PSP_TextureData *psp_texture) | ||
| 219 | { | ||
| 220 | psp_texture->nexthotw = data->most_recent_target; | ||
| 221 | if (data->most_recent_target) { | ||
| 222 | data->most_recent_target->prevhotw = psp_texture; | ||
| 223 | } | ||
| 224 | data->most_recent_target = psp_texture; | ||
| 225 | if (!data->least_recent_target) { | ||
| 226 | data->least_recent_target = psp_texture; | ||
| 227 | } | ||
| 228 | } | ||
| 229 | |||
| 230 | static void LRUTargetRemove(PSP_RenderData *data, PSP_TextureData *psp_texture) | ||
| 231 | { | ||
| 232 | LRUTargetRelink(psp_texture); | ||
| 233 | if (data->most_recent_target == psp_texture) { | ||
| 234 | data->most_recent_target = psp_texture->nexthotw; | ||
| 235 | } | ||
| 236 | if (data->least_recent_target == psp_texture) { | ||
| 237 | data->least_recent_target = psp_texture->prevhotw; | ||
| 238 | } | ||
| 239 | psp_texture->prevhotw = NULL; | ||
| 240 | psp_texture->nexthotw = NULL; | ||
| 241 | } | ||
| 242 | |||
| 243 | static void LRUTargetBringFront(PSP_RenderData *data, PSP_TextureData *psp_texture) | ||
| 244 | { | ||
| 245 | if (data->most_recent_target == psp_texture) { | ||
| 246 | return; // nothing to do | ||
| 247 | } | ||
| 248 | LRUTargetRemove(data, psp_texture); | ||
| 249 | LRUTargetPushFront(data, psp_texture); | ||
| 250 | } | ||
| 251 | |||
| 252 | static void TextureStorageFree(void *storage) | ||
| 253 | { | ||
| 254 | if (InVram(storage)) { | ||
| 255 | vfree(storage); | ||
| 256 | } else { | ||
| 257 | SDL_free(storage); | ||
| 258 | } | ||
| 259 | } | ||
| 260 | |||
| 261 | static bool TextureSwizzle(PSP_TextureData *psp_texture, void *dst) | ||
| 262 | { | ||
| 263 | int bytewidth, height; | ||
| 264 | int rowblocks, rowblocksadd; | ||
| 265 | int i, j; | ||
| 266 | unsigned int blockaddress = 0; | ||
| 267 | unsigned int *src = NULL; | ||
| 268 | unsigned char *data = NULL; | ||
| 269 | |||
| 270 | if (psp_texture->swizzled) { | ||
| 271 | return true; | ||
| 272 | } | ||
| 273 | |||
| 274 | bytewidth = psp_texture->textureWidth * (psp_texture->bits >> 3); | ||
| 275 | height = psp_texture->size / bytewidth; | ||
| 276 | |||
| 277 | rowblocks = (bytewidth >> 4); | ||
| 278 | rowblocksadd = (rowblocks - 1) << 7; | ||
| 279 | |||
| 280 | src = (unsigned int *)psp_texture->data; | ||
| 281 | |||
| 282 | data = dst; | ||
| 283 | if (!data) { | ||
| 284 | data = SDL_malloc(psp_texture->size); | ||
| 285 | } | ||
| 286 | |||
| 287 | if (!data) { | ||
| 288 | return false; | ||
| 289 | } | ||
| 290 | |||
| 291 | for (j = 0; j < height; j++, blockaddress += 16) { | ||
| 292 | unsigned int *block; | ||
| 293 | |||
| 294 | block = (unsigned int *)&data[blockaddress]; | ||
| 295 | |||
| 296 | for (i = 0; i < rowblocks; i++) { | ||
| 297 | *block++ = *src++; | ||
| 298 | *block++ = *src++; | ||
| 299 | *block++ = *src++; | ||
| 300 | *block++ = *src++; | ||
| 301 | block += 28; | ||
| 302 | } | ||
| 303 | |||
| 304 | if ((j & 0x7) == 0x7) { | ||
| 305 | blockaddress += rowblocksadd; | ||
| 306 | } | ||
| 307 | } | ||
| 308 | |||
| 309 | TextureStorageFree(psp_texture->data); | ||
| 310 | psp_texture->data = data; | ||
| 311 | psp_texture->swizzled = true; | ||
| 312 | |||
| 313 | sceKernelDcacheWritebackRange(psp_texture->data, psp_texture->size); | ||
| 314 | return true; | ||
| 315 | } | ||
| 316 | |||
| 317 | static bool TextureUnswizzle(PSP_TextureData *psp_texture, void *dst) | ||
| 318 | { | ||
| 319 | int bytewidth, height; | ||
| 320 | int widthblocks, heightblocks; | ||
| 321 | int dstpitch, dstrow; | ||
| 322 | int blockx, blocky; | ||
| 323 | int j; | ||
| 324 | unsigned int *src = NULL; | ||
| 325 | unsigned char *data = NULL; | ||
| 326 | unsigned char *ydst = NULL; | ||
| 327 | |||
| 328 | if (!psp_texture->swizzled) { | ||
| 329 | return true; | ||
| 330 | } | ||
| 331 | |||
| 332 | bytewidth = psp_texture->textureWidth * (psp_texture->bits >> 3); | ||
| 333 | height = psp_texture->size / bytewidth; | ||
| 334 | |||
| 335 | widthblocks = bytewidth / 16; | ||
| 336 | heightblocks = height / 8; | ||
| 337 | |||
| 338 | dstpitch = (bytewidth - 16) / 4; | ||
| 339 | dstrow = bytewidth * 8; | ||
| 340 | |||
| 341 | src = (unsigned int *)psp_texture->data; | ||
| 342 | |||
| 343 | data = dst; | ||
| 344 | |||
| 345 | if (!data) { | ||
| 346 | data = SDL_malloc(psp_texture->size); | ||
| 347 | } | ||
| 348 | |||
| 349 | if (!data) { | ||
| 350 | return false; | ||
| 351 | } | ||
| 352 | |||
| 353 | ydst = (unsigned char *)data; | ||
| 354 | |||
| 355 | for (blocky = 0; blocky < heightblocks; ++blocky) { | ||
| 356 | unsigned char *xdst = ydst; | ||
| 357 | |||
| 358 | for (blockx = 0; blockx < widthblocks; ++blockx) { | ||
| 359 | unsigned int *block; | ||
| 360 | |||
| 361 | block = (unsigned int *)xdst; | ||
| 362 | |||
| 363 | for (j = 0; j < 8; ++j) { | ||
| 364 | *(block++) = *(src++); | ||
| 365 | *(block++) = *(src++); | ||
| 366 | *(block++) = *(src++); | ||
| 367 | *(block++) = *(src++); | ||
| 368 | block += dstpitch; | ||
| 369 | } | ||
| 370 | |||
| 371 | xdst += 16; | ||
| 372 | } | ||
| 373 | |||
| 374 | ydst += dstrow; | ||
| 375 | } | ||
| 376 | |||
| 377 | TextureStorageFree(psp_texture->data); | ||
| 378 | |||
| 379 | psp_texture->data = data; | ||
| 380 | |||
| 381 | psp_texture->swizzled = false; | ||
| 382 | |||
| 383 | sceKernelDcacheWritebackRange(psp_texture->data, psp_texture->size); | ||
| 384 | return true; | ||
| 385 | } | ||
| 386 | |||
| 387 | static bool TextureSpillToSram(PSP_RenderData *data, PSP_TextureData *psp_texture) | ||
| 388 | { | ||
| 389 | // Assumes the texture is in VRAM | ||
| 390 | if (psp_texture->swizzled) { | ||
| 391 | // Texture was swizzled in vram, just copy to system memory | ||
| 392 | void *sdata = SDL_malloc(psp_texture->size); | ||
| 393 | if (!sdata) { | ||
| 394 | return false; | ||
| 395 | } | ||
| 396 | |||
| 397 | SDL_memcpy(sdata, psp_texture->data, psp_texture->size); | ||
| 398 | vfree(psp_texture->data); | ||
| 399 | psp_texture->data = sdata; | ||
| 400 | return true; | ||
| 401 | } else { | ||
| 402 | return TextureSwizzle(psp_texture, NULL); // Will realloc in sysram | ||
| 403 | } | ||
| 404 | } | ||
| 405 | |||
| 406 | static bool TexturePromoteToVram(PSP_RenderData *data, PSP_TextureData *psp_texture, bool target) | ||
| 407 | { | ||
| 408 | // Assumes texture in sram and a large enough continuous block in vram | ||
| 409 | void *tdata = vramalloc(psp_texture->size); | ||
| 410 | if (psp_texture->swizzled && target) { | ||
| 411 | return TextureUnswizzle(psp_texture, tdata); | ||
| 412 | } else { | ||
| 413 | SDL_memcpy(tdata, psp_texture->data, psp_texture->size); | ||
| 414 | SDL_free(psp_texture->data); | ||
| 415 | psp_texture->data = tdata; | ||
| 416 | return true; | ||
| 417 | } | ||
| 418 | } | ||
| 419 | |||
| 420 | static bool TextureSpillLRU(PSP_RenderData *data, size_t wanted) | ||
| 421 | { | ||
| 422 | PSP_TextureData *lru = data->least_recent_target; | ||
| 423 | if (lru) { | ||
| 424 | if (!TextureSpillToSram(data, lru)) { | ||
| 425 | return false; | ||
| 426 | } | ||
| 427 | LRUTargetRemove(data, lru); | ||
| 428 | } else { | ||
| 429 | // Asked to spill but there nothing to spill | ||
| 430 | return SDL_SetError("Could not spill more VRAM to system memory. VRAM : %dKB,(%dKB), wanted %dKB", vmemavail() / 1024, vlargestblock() / 1024, wanted / 1024); | ||
| 431 | } | ||
| 432 | return true; | ||
| 433 | } | ||
| 434 | |||
| 435 | static bool TextureSpillTargetsForSpace(PSP_RenderData *data, size_t size) | ||
| 436 | { | ||
| 437 | while (vlargestblock() < size) { | ||
| 438 | if (!TextureSpillLRU(data, size)) { | ||
| 439 | return false; | ||
| 440 | } | ||
| 441 | } | ||
| 442 | return true; | ||
| 443 | } | ||
| 444 | |||
| 445 | static bool TextureBindAsTarget(PSP_RenderData *data, PSP_TextureData *psp_texture) | ||
| 446 | { | ||
| 447 | unsigned int dstFormat; | ||
| 448 | |||
| 449 | if (!InVram(psp_texture->data)) { | ||
| 450 | // Bring back the texture in vram | ||
| 451 | if (!TextureSpillTargetsForSpace(data, psp_texture->size)) { | ||
| 452 | return false; | ||
| 453 | } | ||
| 454 | if (!TexturePromoteToVram(data, psp_texture, true)) { | ||
| 455 | return false; | ||
| 456 | } | ||
| 457 | } | ||
| 458 | LRUTargetBringFront(data, psp_texture); | ||
| 459 | sceGuDrawBufferList(psp_texture->format, vrelptr(psp_texture->data), psp_texture->textureWidth); | ||
| 460 | |||
| 461 | // Stencil alpha dst hack | ||
| 462 | dstFormat = psp_texture->format; | ||
| 463 | if (dstFormat == GU_PSM_5551) { | ||
| 464 | sceGuEnable(GU_STENCIL_TEST); | ||
| 465 | sceGuStencilOp(GU_REPLACE, GU_REPLACE, GU_REPLACE); | ||
| 466 | sceGuStencilFunc(GU_GEQUAL, 0xff, 0xff); | ||
| 467 | sceGuEnable(GU_ALPHA_TEST); | ||
| 468 | sceGuAlphaFunc(GU_GREATER, 0x00, 0xff); | ||
| 469 | } else { | ||
| 470 | sceGuDisable(GU_STENCIL_TEST); | ||
| 471 | sceGuDisable(GU_ALPHA_TEST); | ||
| 472 | } | ||
| 473 | return true; | ||
| 474 | } | ||
| 475 | |||
| 476 | static void PSP_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 477 | { | ||
| 478 | } | ||
| 479 | |||
| 480 | static bool PSP_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 481 | { | ||
| 482 | PSP_RenderData *data = renderer->internal; | ||
| 483 | PSP_TextureData *psp_texture = (PSP_TextureData *)SDL_calloc(1, sizeof(*psp_texture)); | ||
| 484 | |||
| 485 | if (!psp_texture) { | ||
| 486 | return false; | ||
| 487 | } | ||
| 488 | |||
| 489 | psp_texture->swizzled = false; | ||
| 490 | psp_texture->width = texture->w; | ||
| 491 | psp_texture->height = texture->h; | ||
| 492 | psp_texture->textureHeight = TextureNextPow2(texture->h); | ||
| 493 | psp_texture->textureWidth = TextureNextPow2(texture->w); | ||
| 494 | psp_texture->format = PixelFormatToPSPFMT(texture->format); | ||
| 495 | |||
| 496 | switch (psp_texture->format) { | ||
| 497 | case GU_PSM_5650: | ||
| 498 | case GU_PSM_5551: | ||
| 499 | case GU_PSM_4444: | ||
| 500 | psp_texture->bits = 16; | ||
| 501 | break; | ||
| 502 | |||
| 503 | case GU_PSM_8888: | ||
| 504 | psp_texture->bits = 32; | ||
| 505 | break; | ||
| 506 | |||
| 507 | default: | ||
| 508 | SDL_free(psp_texture); | ||
| 509 | return false; | ||
| 510 | } | ||
| 511 | |||
| 512 | psp_texture->pitch = psp_texture->textureWidth * SDL_BYTESPERPIXEL(texture->format); | ||
| 513 | psp_texture->size = psp_texture->textureHeight * psp_texture->pitch; | ||
| 514 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 515 | if (!TextureSpillTargetsForSpace(renderer->internal, psp_texture->size)) { | ||
| 516 | SDL_free(psp_texture); | ||
| 517 | return false; | ||
| 518 | } | ||
| 519 | psp_texture->data = vramalloc(psp_texture->size); | ||
| 520 | if (psp_texture->data) { | ||
| 521 | LRUTargetPushFront(data, psp_texture); | ||
| 522 | } | ||
| 523 | } else { | ||
| 524 | psp_texture->data = SDL_calloc(1, psp_texture->size); | ||
| 525 | } | ||
| 526 | |||
| 527 | if (!psp_texture->data) { | ||
| 528 | SDL_free(psp_texture); | ||
| 529 | return false; | ||
| 530 | } | ||
| 531 | texture->internal = psp_texture; | ||
| 532 | |||
| 533 | return true; | ||
| 534 | } | ||
| 535 | |||
| 536 | static bool TextureShouldSwizzle(PSP_TextureData *psp_texture, SDL_Texture *texture) | ||
| 537 | { | ||
| 538 | return !((texture->access == SDL_TEXTUREACCESS_TARGET) && InVram(psp_texture->data)) && texture->access != SDL_TEXTUREACCESS_STREAMING && (texture->w >= 16 || texture->h >= 16); | ||
| 539 | } | ||
| 540 | |||
| 541 | static void TextureActivate(SDL_Texture *texture) | ||
| 542 | { | ||
| 543 | PSP_TextureData *psp_texture = (PSP_TextureData *)texture->internal; | ||
| 544 | int scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? GU_NEAREST : GU_LINEAR; | ||
| 545 | |||
| 546 | // Swizzling is useless with small textures. | ||
| 547 | if (TextureShouldSwizzle(psp_texture, texture)) { | ||
| 548 | TextureSwizzle(psp_texture, NULL); | ||
| 549 | } | ||
| 550 | |||
| 551 | sceGuTexWrap(GU_REPEAT, GU_REPEAT); | ||
| 552 | sceGuTexMode(psp_texture->format, 0, 0, psp_texture->swizzled); | ||
| 553 | sceGuTexFilter(scaleMode, scaleMode); // GU_NEAREST good for tile-map | ||
| 554 | // GU_LINEAR good for scaling | ||
| 555 | sceGuTexImage(0, psp_texture->textureWidth, psp_texture->textureHeight, psp_texture->textureWidth, psp_texture->data); | ||
| 556 | } | ||
| 557 | |||
| 558 | static bool PSP_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 559 | const SDL_Rect *rect, void **pixels, int *pitch); | ||
| 560 | |||
| 561 | static bool PSP_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 562 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 563 | { | ||
| 564 | /* PSP_TextureData *psp_texture = (PSP_TextureData *) texture->internal; */ | ||
| 565 | const Uint8 *src; | ||
| 566 | Uint8 *dst; | ||
| 567 | int row, length, dpitch; | ||
| 568 | src = pixels; | ||
| 569 | |||
| 570 | PSP_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch); | ||
| 571 | length = rect->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 572 | if (length == pitch && length == dpitch) { | ||
| 573 | SDL_memcpy(dst, src, length * rect->h); | ||
| 574 | } else { | ||
| 575 | for (row = 0; row < rect->h; ++row) { | ||
| 576 | SDL_memcpy(dst, src, length); | ||
| 577 | src += pitch; | ||
| 578 | dst += dpitch; | ||
| 579 | } | ||
| 580 | } | ||
| 581 | |||
| 582 | sceKernelDcacheWritebackAll(); | ||
| 583 | return true; | ||
| 584 | } | ||
| 585 | |||
| 586 | static bool PSP_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 587 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 588 | { | ||
| 589 | PSP_TextureData *psp_texture = (PSP_TextureData *)texture->internal; | ||
| 590 | |||
| 591 | *pixels = | ||
| 592 | (void *)((Uint8 *)psp_texture->data + rect->y * psp_texture->pitch + | ||
| 593 | rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 594 | *pitch = psp_texture->pitch; | ||
| 595 | return true; | ||
| 596 | } | ||
| 597 | |||
| 598 | static void PSP_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 599 | { | ||
| 600 | PSP_TextureData *psp_texture = (PSP_TextureData *)texture->internal; | ||
| 601 | SDL_Rect rect; | ||
| 602 | |||
| 603 | // We do whole texture updates, at least for now | ||
| 604 | rect.x = 0; | ||
| 605 | rect.y = 0; | ||
| 606 | rect.w = texture->w; | ||
| 607 | rect.h = texture->h; | ||
| 608 | PSP_UpdateTexture(renderer, texture, &rect, psp_texture->data, psp_texture->pitch); | ||
| 609 | } | ||
| 610 | |||
| 611 | static void PSP_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 612 | { | ||
| 613 | // Nothing to do because TextureActivate takes care of it | ||
| 614 | } | ||
| 615 | |||
| 616 | static bool PSP_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 617 | { | ||
| 618 | return true; | ||
| 619 | } | ||
| 620 | |||
| 621 | static bool PSP_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 622 | { | ||
| 623 | return true; // nothing to do in this backend. | ||
| 624 | } | ||
| 625 | |||
| 626 | static bool PSP_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 627 | { | ||
| 628 | VertV *verts = (VertV *)SDL_AllocateRenderVertices(renderer, count * sizeof(VertV), 4, &cmd->data.draw.first); | ||
| 629 | int i; | ||
| 630 | |||
| 631 | if (!verts) { | ||
| 632 | return false; | ||
| 633 | } | ||
| 634 | |||
| 635 | cmd->data.draw.count = count; | ||
| 636 | |||
| 637 | for (i = 0; i < count; i++, verts++, points++) { | ||
| 638 | verts->x = points->x; | ||
| 639 | verts->y = points->y; | ||
| 640 | verts->z = 0.0f; | ||
| 641 | } | ||
| 642 | |||
| 643 | return true; | ||
| 644 | } | ||
| 645 | |||
| 646 | static bool PSP_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 647 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 648 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 649 | float scale_x, float scale_y) | ||
| 650 | { | ||
| 651 | int i; | ||
| 652 | int count = indices ? num_indices : num_vertices; | ||
| 653 | const float color_scale = cmd->data.draw.color_scale; | ||
| 654 | |||
| 655 | cmd->data.draw.count = count; | ||
| 656 | size_indices = indices ? size_indices : 0; | ||
| 657 | |||
| 658 | if (!texture) { | ||
| 659 | VertCV *verts; | ||
| 660 | verts = (VertCV *)SDL_AllocateRenderVertices(renderer, count * sizeof(VertCV), 4, &cmd->data.draw.first); | ||
| 661 | if (!verts) { | ||
| 662 | return false; | ||
| 663 | } | ||
| 664 | |||
| 665 | for (i = 0; i < count; i++) { | ||
| 666 | int j; | ||
| 667 | float *xy_; | ||
| 668 | SDL_FColor *col_; | ||
| 669 | if (size_indices == 4) { | ||
| 670 | j = ((const Uint32 *)indices)[i]; | ||
| 671 | } else if (size_indices == 2) { | ||
| 672 | j = ((const Uint16 *)indices)[i]; | ||
| 673 | } else if (size_indices == 1) { | ||
| 674 | j = ((const Uint8 *)indices)[i]; | ||
| 675 | } else { | ||
| 676 | j = i; | ||
| 677 | } | ||
| 678 | |||
| 679 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 680 | col_ = (SDL_FColor *)((char *)color + j * color_stride); | ||
| 681 | |||
| 682 | verts->x = xy_[0] * scale_x; | ||
| 683 | verts->y = xy_[1] * scale_y; | ||
| 684 | verts->z = 0; | ||
| 685 | |||
| 686 | verts->col.r = (Uint8)SDL_roundf(SDL_clamp(col_->r * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 687 | verts->col.g = (Uint8)SDL_roundf(SDL_clamp(col_->g * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 688 | verts->col.b = (Uint8)SDL_roundf(SDL_clamp(col_->b * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 689 | verts->col.a = (Uint8)SDL_roundf(SDL_clamp(col_->a, 0.0f, 1.0f) * 255.0f); | ||
| 690 | |||
| 691 | verts++; | ||
| 692 | } | ||
| 693 | } else { | ||
| 694 | PSP_TextureData *psp_texture = (PSP_TextureData *)texture->internal; | ||
| 695 | VertTCV *verts; | ||
| 696 | verts = (VertTCV *)SDL_AllocateRenderVertices(renderer, count * sizeof(VertTCV), 4, &cmd->data.draw.first); | ||
| 697 | if (!verts) { | ||
| 698 | return false; | ||
| 699 | } | ||
| 700 | |||
| 701 | for (i = 0; i < count; i++) { | ||
| 702 | int j; | ||
| 703 | float *xy_; | ||
| 704 | SDL_FColor *col_; | ||
| 705 | float *uv_; | ||
| 706 | |||
| 707 | if (size_indices == 4) { | ||
| 708 | j = ((const Uint32 *)indices)[i]; | ||
| 709 | } else if (size_indices == 2) { | ||
| 710 | j = ((const Uint16 *)indices)[i]; | ||
| 711 | } else if (size_indices == 1) { | ||
| 712 | j = ((const Uint8 *)indices)[i]; | ||
| 713 | } else { | ||
| 714 | j = i; | ||
| 715 | } | ||
| 716 | |||
| 717 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 718 | col_ = (SDL_FColor *)((char *)color + j * color_stride); | ||
| 719 | uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 720 | |||
| 721 | verts->x = xy_[0] * scale_x; | ||
| 722 | verts->y = xy_[1] * scale_y; | ||
| 723 | verts->z = 0; | ||
| 724 | |||
| 725 | verts->col.r = (Uint8)SDL_roundf(SDL_clamp(col_->r * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 726 | verts->col.g = (Uint8)SDL_roundf(SDL_clamp(col_->g * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 727 | verts->col.b = (Uint8)SDL_roundf(SDL_clamp(col_->b * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 728 | verts->col.a = (Uint8)SDL_roundf(SDL_clamp(col_->a, 0.0f, 1.0f) * 255.0f); | ||
| 729 | |||
| 730 | verts->u = uv_[0] * psp_texture->textureWidth; | ||
| 731 | verts->v = uv_[1] * psp_texture->textureHeight; | ||
| 732 | |||
| 733 | verts++; | ||
| 734 | } | ||
| 735 | } | ||
| 736 | |||
| 737 | return true; | ||
| 738 | } | ||
| 739 | |||
| 740 | static bool PSP_QueueFillRects(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FRect *rects, int count) | ||
| 741 | { | ||
| 742 | VertV *verts = (VertV *)SDL_AllocateRenderVertices(renderer, count * 2 * sizeof(VertV), 4, &cmd->data.draw.first); | ||
| 743 | int i; | ||
| 744 | |||
| 745 | if (!verts) { | ||
| 746 | return false; | ||
| 747 | } | ||
| 748 | |||
| 749 | cmd->data.draw.count = count; | ||
| 750 | for (i = 0; i < count; i++, rects++) { | ||
| 751 | verts->x = rects->x; | ||
| 752 | verts->y = rects->y; | ||
| 753 | verts->z = 0.0f; | ||
| 754 | verts++; | ||
| 755 | |||
| 756 | verts->x = rects->x + rects->w + 0.5f; | ||
| 757 | verts->y = rects->y + rects->h + 0.5f; | ||
| 758 | verts->z = 0.0f; | ||
| 759 | verts++; | ||
| 760 | } | ||
| 761 | |||
| 762 | return true; | ||
| 763 | } | ||
| 764 | |||
| 765 | static bool PSP_QueueCopy(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 766 | const SDL_FRect *srcrect, const SDL_FRect *dstrect) | ||
| 767 | { | ||
| 768 | VertTV *verts; | ||
| 769 | const float x = dstrect->x; | ||
| 770 | const float y = dstrect->y; | ||
| 771 | const float width = dstrect->w; | ||
| 772 | const float height = dstrect->h; | ||
| 773 | |||
| 774 | const float u0 = srcrect->x; | ||
| 775 | const float v0 = srcrect->y; | ||
| 776 | const float u1 = srcrect->x + srcrect->w; | ||
| 777 | const float v1 = srcrect->y + srcrect->h; | ||
| 778 | |||
| 779 | if ((MathAbs(u1) - MathAbs(u0)) < 64.0f) { | ||
| 780 | verts = (VertTV *)SDL_AllocateRenderVertices(renderer, 2 * sizeof(VertTV), 4, &cmd->data.draw.first); | ||
| 781 | if (!verts) { | ||
| 782 | return false; | ||
| 783 | } | ||
| 784 | |||
| 785 | cmd->data.draw.count = 1; | ||
| 786 | |||
| 787 | verts->u = u0; | ||
| 788 | verts->v = v0; | ||
| 789 | verts->x = x; | ||
| 790 | verts->y = y; | ||
| 791 | verts->z = 0; | ||
| 792 | verts++; | ||
| 793 | |||
| 794 | verts->u = u1; | ||
| 795 | verts->v = v1; | ||
| 796 | verts->x = x + width; | ||
| 797 | verts->y = y + height; | ||
| 798 | verts->z = 0; | ||
| 799 | verts++; | ||
| 800 | } else { | ||
| 801 | float start, end; | ||
| 802 | float curU = u0; | ||
| 803 | float curX = x; | ||
| 804 | const float endX = x + width; | ||
| 805 | const float slice = 64.0f; | ||
| 806 | const size_t count = (size_t)SDL_ceilf(width / slice); | ||
| 807 | size_t i; | ||
| 808 | float ustep = (u1 - u0) / width * slice; | ||
| 809 | |||
| 810 | if (ustep < 0.0f) { | ||
| 811 | ustep = -ustep; | ||
| 812 | } | ||
| 813 | |||
| 814 | cmd->data.draw.count = count; | ||
| 815 | |||
| 816 | verts = (VertTV *)SDL_AllocateRenderVertices(renderer, count * 2 * sizeof(VertTV), 4, &cmd->data.draw.first); | ||
| 817 | if (!verts) { | ||
| 818 | return false; | ||
| 819 | } | ||
| 820 | |||
| 821 | for (i = 0, start = 0, end = width; i < count; i++, start += slice) { | ||
| 822 | const float polyWidth = ((curX + slice) > endX) ? (endX - curX) : slice; | ||
| 823 | const float sourceWidth = ((curU + ustep) > u1) ? (u1 - curU) : ustep; | ||
| 824 | |||
| 825 | SDL_assert(start < end); | ||
| 826 | |||
| 827 | verts->u = curU; | ||
| 828 | verts->v = v0; | ||
| 829 | verts->x = curX; | ||
| 830 | verts->y = y; | ||
| 831 | verts->z = 0; | ||
| 832 | verts++; | ||
| 833 | |||
| 834 | curU += sourceWidth; | ||
| 835 | curX += polyWidth; | ||
| 836 | |||
| 837 | verts->u = curU; | ||
| 838 | verts->v = v1; | ||
| 839 | verts->x = curX; | ||
| 840 | verts->y = (y + height); | ||
| 841 | verts->z = 0; | ||
| 842 | verts++; | ||
| 843 | } | ||
| 844 | } | ||
| 845 | |||
| 846 | return true; | ||
| 847 | } | ||
| 848 | |||
| 849 | static bool PSP_QueueCopyEx(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 850 | const SDL_FRect *srcrect, const SDL_FRect *dstrect, | ||
| 851 | const double angle, const SDL_FPoint *center, const SDL_FlipMode flip, float scale_x, float scale_y) | ||
| 852 | { | ||
| 853 | VertTV *verts = (VertTV *)SDL_AllocateRenderVertices(renderer, 4 * sizeof(VertTV), 4, &cmd->data.draw.first); | ||
| 854 | const float centerx = center->x; | ||
| 855 | const float centery = center->y; | ||
| 856 | const float x = dstrect->x + centerx; | ||
| 857 | const float y = dstrect->y + centery; | ||
| 858 | const float width = dstrect->w - centerx; | ||
| 859 | const float height = dstrect->h - centery; | ||
| 860 | float s, c; | ||
| 861 | float cw1, sw1, ch1, sh1, cw2, sw2, ch2, sh2; | ||
| 862 | |||
| 863 | float u0 = srcrect->x; | ||
| 864 | float v0 = srcrect->y; | ||
| 865 | float u1 = srcrect->x + srcrect->w; | ||
| 866 | float v1 = srcrect->y + srcrect->h; | ||
| 867 | |||
| 868 | if (!verts) { | ||
| 869 | return false; | ||
| 870 | } | ||
| 871 | |||
| 872 | cmd->data.draw.count = 1; | ||
| 873 | |||
| 874 | MathSincos(degToRad((float)(360 - angle)), &s, &c); | ||
| 875 | |||
| 876 | cw1 = c * -centerx; | ||
| 877 | sw1 = s * -centerx; | ||
| 878 | ch1 = c * -centery; | ||
| 879 | sh1 = s * -centery; | ||
| 880 | cw2 = c * width; | ||
| 881 | sw2 = s * width; | ||
| 882 | ch2 = c * height; | ||
| 883 | sh2 = s * height; | ||
| 884 | |||
| 885 | if (flip & SDL_FLIP_VERTICAL) { | ||
| 886 | Swap(&v0, &v1); | ||
| 887 | } | ||
| 888 | |||
| 889 | if (flip & SDL_FLIP_HORIZONTAL) { | ||
| 890 | Swap(&u0, &u1); | ||
| 891 | } | ||
| 892 | |||
| 893 | verts->u = u0; | ||
| 894 | verts->v = v0; | ||
| 895 | verts->x = x + cw1 + sh1; | ||
| 896 | verts->y = y - sw1 + ch1; | ||
| 897 | verts->z = 0; | ||
| 898 | verts++; | ||
| 899 | |||
| 900 | verts->u = u0; | ||
| 901 | verts->v = v1; | ||
| 902 | verts->x = x + cw1 + sh2; | ||
| 903 | verts->y = y - sw1 + ch2; | ||
| 904 | verts->z = 0; | ||
| 905 | verts++; | ||
| 906 | |||
| 907 | verts->u = u1; | ||
| 908 | verts->v = v1; | ||
| 909 | verts->x = x + cw2 + sh2; | ||
| 910 | verts->y = y - sw2 + ch2; | ||
| 911 | verts->z = 0; | ||
| 912 | verts++; | ||
| 913 | |||
| 914 | verts->u = u1; | ||
| 915 | verts->v = v0; | ||
| 916 | verts->x = x + cw2 + sh1; | ||
| 917 | verts->y = y - sw2 + ch1; | ||
| 918 | verts->z = 0; | ||
| 919 | |||
| 920 | if (scale_x != 1.0f || scale_y != 1.0f) { | ||
| 921 | verts->x *= scale_x; | ||
| 922 | verts->y *= scale_y; | ||
| 923 | verts--; | ||
| 924 | verts->x *= scale_x; | ||
| 925 | verts->y *= scale_y; | ||
| 926 | verts--; | ||
| 927 | verts->x *= scale_x; | ||
| 928 | verts->y *= scale_y; | ||
| 929 | verts--; | ||
| 930 | verts->x *= scale_x; | ||
| 931 | verts->y *= scale_y; | ||
| 932 | } | ||
| 933 | |||
| 934 | return true; | ||
| 935 | } | ||
| 936 | |||
| 937 | static void ResetBlendState(PSP_BlendState *state) | ||
| 938 | { | ||
| 939 | sceGuColor(0xffffffff); | ||
| 940 | state->color = 0xffffffff; | ||
| 941 | state->mode = SDL_BLENDMODE_INVALID; | ||
| 942 | state->texture = NULL; | ||
| 943 | sceGuDisable(GU_TEXTURE_2D); | ||
| 944 | sceGuShadeModel(GU_SMOOTH); | ||
| 945 | state->shadeModel = GU_SMOOTH; | ||
| 946 | } | ||
| 947 | |||
| 948 | static void StartDrawing(SDL_Renderer *renderer) | ||
| 949 | { | ||
| 950 | PSP_RenderData *data = (PSP_RenderData *)renderer->internal; | ||
| 951 | |||
| 952 | // Check if we need to start GU displaylist | ||
| 953 | if (!data->displayListAvail) { | ||
| 954 | sceGuStart(GU_DIRECT, DisplayList); | ||
| 955 | data->displayListAvail = true; | ||
| 956 | // ResetBlendState(&data->blendState); | ||
| 957 | } | ||
| 958 | |||
| 959 | // Check if we need a draw buffer change | ||
| 960 | if (renderer->target != data->boundTarget) { | ||
| 961 | SDL_Texture *texture = renderer->target; | ||
| 962 | if (texture) { | ||
| 963 | PSP_TextureData *psp_texture = (PSP_TextureData *)texture->internal; | ||
| 964 | // Set target, registering LRU | ||
| 965 | TextureBindAsTarget(data, psp_texture); | ||
| 966 | } else { | ||
| 967 | // Set target back to screen | ||
| 968 | sceGuDrawBufferList(data->psm, vrelptr(data->frontbuffer), PSP_FRAME_BUFFER_WIDTH); | ||
| 969 | } | ||
| 970 | data->boundTarget = texture; | ||
| 971 | } | ||
| 972 | } | ||
| 973 | |||
| 974 | static void PSP_SetBlendState(PSP_RenderData *data, PSP_BlendState *state) | ||
| 975 | { | ||
| 976 | PSP_BlendState *current = &data->blendState; | ||
| 977 | |||
| 978 | if (state->mode != current->mode) { | ||
| 979 | switch (state->mode) { | ||
| 980 | case SDL_BLENDMODE_NONE: | ||
| 981 | sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGBA); | ||
| 982 | sceGuDisable(GU_BLEND); | ||
| 983 | break; | ||
| 984 | case SDL_BLENDMODE_BLEND: | ||
| 985 | sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); | ||
| 986 | sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0); | ||
| 987 | sceGuEnable(GU_BLEND); | ||
| 988 | break; | ||
| 989 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 990 | sceGuTexFunc(GU_TFX_MODULATE , GU_TCC_RGBA); | ||
| 991 | sceGuBlendFunc(GU_ADD, GU_FIX, GU_ONE_MINUS_SRC_ALPHA, 0x00FFFFFF, 0 ); | ||
| 992 | sceGuEnable(GU_BLEND); | ||
| 993 | break; | ||
| 994 | case SDL_BLENDMODE_ADD: | ||
| 995 | sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); | ||
| 996 | sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_FIX, 0, 0x00FFFFFF); | ||
| 997 | sceGuEnable(GU_BLEND); | ||
| 998 | break; | ||
| 999 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 1000 | sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); | ||
| 1001 | sceGuBlendFunc(GU_ADD, GU_FIX, GU_FIX, 0, 0x00FFFFFF); | ||
| 1002 | sceGuEnable(GU_BLEND); | ||
| 1003 | break; | ||
| 1004 | case SDL_BLENDMODE_MOD: | ||
| 1005 | sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); | ||
| 1006 | sceGuBlendFunc(GU_ADD, GU_FIX, GU_SRC_COLOR, 0, 0); | ||
| 1007 | sceGuEnable(GU_BLEND); | ||
| 1008 | break; | ||
| 1009 | case SDL_BLENDMODE_MUL: | ||
| 1010 | sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); | ||
| 1011 | // FIXME SDL_BLENDMODE_MUL is simplified, and dstA is in fact un-changed. | ||
| 1012 | sceGuBlendFunc(GU_ADD, GU_DST_COLOR, GU_ONE_MINUS_SRC_ALPHA, 0, 0); | ||
| 1013 | sceGuEnable(GU_BLEND); | ||
| 1014 | break; | ||
| 1015 | case SDL_BLENDMODE_INVALID: | ||
| 1016 | break; | ||
| 1017 | } | ||
| 1018 | } | ||
| 1019 | |||
| 1020 | if (state->color != current->color) { | ||
| 1021 | sceGuColor(state->color); | ||
| 1022 | } | ||
| 1023 | |||
| 1024 | if (state->shadeModel != current->shadeModel) { | ||
| 1025 | sceGuShadeModel(state->shadeModel); | ||
| 1026 | } | ||
| 1027 | |||
| 1028 | if (state->texture != current->texture) { | ||
| 1029 | if (state->texture) { | ||
| 1030 | TextureActivate(state->texture); | ||
| 1031 | sceGuEnable(GU_TEXTURE_2D); | ||
| 1032 | } else { | ||
| 1033 | sceGuDisable(GU_TEXTURE_2D); | ||
| 1034 | } | ||
| 1035 | } | ||
| 1036 | |||
| 1037 | *current = *state; | ||
| 1038 | } | ||
| 1039 | |||
| 1040 | static void PSP_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 1041 | { | ||
| 1042 | // currently this doesn't do anything. If this needs to do something (and someone is mixing their own rendering calls in!), update this. | ||
| 1043 | } | ||
| 1044 | |||
| 1045 | static bool PSP_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 1046 | { | ||
| 1047 | PSP_RenderData *data = (PSP_RenderData *)renderer->internal; | ||
| 1048 | Uint8 *gpumem = NULL; | ||
| 1049 | PSP_DrawStateCache drawstate; | ||
| 1050 | |||
| 1051 | drawstate.color = 0; | ||
| 1052 | |||
| 1053 | StartDrawing(renderer); | ||
| 1054 | |||
| 1055 | /* note that before the renderer interface change, this would do extremely small | ||
| 1056 | batches with sceGuGetMemory()--a few vertices at a time--and it's not clear that | ||
| 1057 | this won't fail if you try to push 100,000 draw calls in a single batch. | ||
| 1058 | I don't know what the limits on PSP hardware are. It might be useful to have | ||
| 1059 | rendering backends report a reasonable maximum, so the higher level can flush | ||
| 1060 | if we appear to be exceeding that. */ | ||
| 1061 | gpumem = (Uint8 *)sceGuGetMemory(vertsize); | ||
| 1062 | if (!gpumem) { | ||
| 1063 | return SDL_SetError("Couldn't obtain a %d-byte vertex buffer!", (int)vertsize); | ||
| 1064 | } | ||
| 1065 | SDL_memcpy(gpumem, vertices, vertsize); | ||
| 1066 | |||
| 1067 | while (cmd) { | ||
| 1068 | switch (cmd->command) { | ||
| 1069 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 1070 | { | ||
| 1071 | const Uint8 r = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.r * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 1072 | const Uint8 g = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.g * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 1073 | const Uint8 b = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.b * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 1074 | const Uint8 a = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.a, 0.0f, 1.0f) * 255.0f); | ||
| 1075 | drawstate.color = GU_RGBA(r, g, b, a); | ||
| 1076 | break; | ||
| 1077 | } | ||
| 1078 | |||
| 1079 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 1080 | { | ||
| 1081 | SDL_Rect *viewport = &cmd->data.viewport.rect; | ||
| 1082 | sceGuOffset(2048 - (viewport->w >> 1), 2048 - (viewport->h >> 1)); | ||
| 1083 | sceGuViewport(2048, 2048, viewport->w, viewport->h); | ||
| 1084 | sceGuScissor(viewport->x, viewport->y, viewport->w, viewport->h); | ||
| 1085 | // FIXME: We need to update the clip rect too, see https://github.com/libsdl-org/SDL/issues/9094 | ||
| 1086 | break; | ||
| 1087 | } | ||
| 1088 | |||
| 1089 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 1090 | { | ||
| 1091 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 1092 | if (cmd->data.cliprect.enabled) { | ||
| 1093 | sceGuEnable(GU_SCISSOR_TEST); | ||
| 1094 | sceGuScissor(rect->x, rect->y, rect->w, rect->h); | ||
| 1095 | } else { | ||
| 1096 | sceGuDisable(GU_SCISSOR_TEST); | ||
| 1097 | } | ||
| 1098 | break; | ||
| 1099 | } | ||
| 1100 | |||
| 1101 | case SDL_RENDERCMD_CLEAR: | ||
| 1102 | { | ||
| 1103 | const Uint8 r = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.r * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 1104 | const Uint8 g = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.g * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 1105 | const Uint8 b = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.b * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 1106 | const Uint8 a = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.a, 0.0f, 1.0f) * 255.0f); | ||
| 1107 | sceGuClearColor(GU_RGBA(r, g, b, a)); | ||
| 1108 | sceGuClearStencil(a); | ||
| 1109 | sceGuClear(GU_COLOR_BUFFER_BIT | GU_STENCIL_BUFFER_BIT); | ||
| 1110 | break; | ||
| 1111 | } | ||
| 1112 | |||
| 1113 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 1114 | { | ||
| 1115 | const size_t count = cmd->data.draw.count; | ||
| 1116 | const VertV *verts = (VertV *)(gpumem + cmd->data.draw.first); | ||
| 1117 | PSP_BlendState state = { | ||
| 1118 | .color = drawstate.color, | ||
| 1119 | .texture = NULL, | ||
| 1120 | .mode = cmd->data.draw.blend, | ||
| 1121 | .shadeModel = GU_FLAT | ||
| 1122 | }; | ||
| 1123 | PSP_SetBlendState(data, &state); | ||
| 1124 | sceGuDrawArray(GU_POINTS, GU_VERTEX_32BITF | GU_TRANSFORM_2D, count, 0, verts); | ||
| 1125 | break; | ||
| 1126 | } | ||
| 1127 | |||
| 1128 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 1129 | { | ||
| 1130 | const size_t count = cmd->data.draw.count; | ||
| 1131 | const VertV *verts = (VertV *)(gpumem + cmd->data.draw.first); | ||
| 1132 | PSP_BlendState state = { | ||
| 1133 | .color = drawstate.color, | ||
| 1134 | .texture = NULL, | ||
| 1135 | .mode = cmd->data.draw.blend, | ||
| 1136 | .shadeModel = GU_FLAT | ||
| 1137 | }; | ||
| 1138 | PSP_SetBlendState(data, &state); | ||
| 1139 | sceGuDrawArray(GU_LINE_STRIP, GU_VERTEX_32BITF | GU_TRANSFORM_2D, count, 0, verts); | ||
| 1140 | break; | ||
| 1141 | } | ||
| 1142 | |||
| 1143 | case SDL_RENDERCMD_FILL_RECTS: | ||
| 1144 | { | ||
| 1145 | const size_t count = cmd->data.draw.count; | ||
| 1146 | const VertV *verts = (VertV *)(gpumem + cmd->data.draw.first); | ||
| 1147 | PSP_BlendState state = { | ||
| 1148 | .color = drawstate.color, | ||
| 1149 | .texture = NULL, | ||
| 1150 | .mode = cmd->data.draw.blend, | ||
| 1151 | .shadeModel = GU_FLAT | ||
| 1152 | }; | ||
| 1153 | PSP_SetBlendState(data, &state); | ||
| 1154 | sceGuDrawArray(GU_SPRITES, GU_VERTEX_32BITF | GU_TRANSFORM_2D, 2 * count, 0, verts); | ||
| 1155 | break; | ||
| 1156 | } | ||
| 1157 | |||
| 1158 | case SDL_RENDERCMD_COPY: | ||
| 1159 | { | ||
| 1160 | const size_t count = cmd->data.draw.count; | ||
| 1161 | const VertTV *verts = (VertTV *)(gpumem + cmd->data.draw.first); | ||
| 1162 | PSP_BlendState state = { | ||
| 1163 | .color = drawstate.color, | ||
| 1164 | .texture = cmd->data.draw.texture, | ||
| 1165 | .mode = cmd->data.draw.blend, | ||
| 1166 | .shadeModel = GU_SMOOTH | ||
| 1167 | }; | ||
| 1168 | PSP_SetBlendState(data, &state); | ||
| 1169 | sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF | GU_VERTEX_32BITF | GU_TRANSFORM_2D, 2 * count, 0, verts); | ||
| 1170 | break; | ||
| 1171 | } | ||
| 1172 | |||
| 1173 | case SDL_RENDERCMD_COPY_EX: | ||
| 1174 | { | ||
| 1175 | const VertTV *verts = (VertTV *)(gpumem + cmd->data.draw.first); | ||
| 1176 | PSP_BlendState state = { | ||
| 1177 | .color = drawstate.color, | ||
| 1178 | .texture = cmd->data.draw.texture, | ||
| 1179 | .mode = cmd->data.draw.blend, | ||
| 1180 | .shadeModel = GU_SMOOTH | ||
| 1181 | }; | ||
| 1182 | PSP_SetBlendState(data, &state); | ||
| 1183 | sceGuDrawArray(GU_TRIANGLE_FAN, GU_TEXTURE_32BITF | GU_VERTEX_32BITF | GU_TRANSFORM_2D, 4, 0, verts); | ||
| 1184 | break; | ||
| 1185 | } | ||
| 1186 | |||
| 1187 | case SDL_RENDERCMD_GEOMETRY: | ||
| 1188 | { | ||
| 1189 | const size_t count = cmd->data.draw.count; | ||
| 1190 | if (!cmd->data.draw.texture) { | ||
| 1191 | const VertCV *verts = (VertCV *)(gpumem + cmd->data.draw.first); | ||
| 1192 | sceGuDisable(GU_TEXTURE_2D); | ||
| 1193 | // In GU_SMOOTH mode | ||
| 1194 | sceGuDrawArray(GU_TRIANGLES, GU_COLOR_8888 | GU_VERTEX_32BITF | GU_TRANSFORM_2D, count, 0, verts); | ||
| 1195 | sceGuEnable(GU_TEXTURE_2D); | ||
| 1196 | } else { | ||
| 1197 | const VertTCV *verts = (VertTCV *)(gpumem + cmd->data.draw.first); | ||
| 1198 | PSP_BlendState state = { | ||
| 1199 | .color = drawstate.color, | ||
| 1200 | .texture = NULL, | ||
| 1201 | .mode = cmd->data.draw.blend, | ||
| 1202 | .shadeModel = GU_FLAT | ||
| 1203 | }; | ||
| 1204 | TextureActivate(cmd->data.draw.texture); | ||
| 1205 | PSP_SetBlendState(data, &state); | ||
| 1206 | sceGuDrawArray(GU_TRIANGLES, GU_TEXTURE_32BITF | GU_COLOR_8888 | GU_VERTEX_32BITF | GU_TRANSFORM_2D, count, 0, verts); | ||
| 1207 | } | ||
| 1208 | break; | ||
| 1209 | } | ||
| 1210 | |||
| 1211 | case SDL_RENDERCMD_NO_OP: | ||
| 1212 | break; | ||
| 1213 | } | ||
| 1214 | |||
| 1215 | cmd = cmd->next; | ||
| 1216 | } | ||
| 1217 | |||
| 1218 | return true; | ||
| 1219 | } | ||
| 1220 | |||
| 1221 | static bool PSP_RenderPresent(SDL_Renderer *renderer) | ||
| 1222 | { | ||
| 1223 | PSP_RenderData *data = (PSP_RenderData *)renderer->internal; | ||
| 1224 | if (!data->displayListAvail) { | ||
| 1225 | return false; | ||
| 1226 | } | ||
| 1227 | |||
| 1228 | data->displayListAvail = false; | ||
| 1229 | sceGuFinish(); | ||
| 1230 | sceGuSync(0, 0); | ||
| 1231 | |||
| 1232 | if ((data->vsync) && (data->vblank_not_reached)) { | ||
| 1233 | sceDisplayWaitVblankStart(); | ||
| 1234 | } | ||
| 1235 | data->vblank_not_reached = true; | ||
| 1236 | |||
| 1237 | data->backbuffer = data->frontbuffer; | ||
| 1238 | data->frontbuffer = vabsptr(sceGuSwapBuffers()); | ||
| 1239 | |||
| 1240 | return true; | ||
| 1241 | } | ||
| 1242 | |||
| 1243 | static void PSP_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1244 | { | ||
| 1245 | PSP_RenderData *renderdata = (PSP_RenderData *)renderer->internal; | ||
| 1246 | PSP_TextureData *psp_texture = (PSP_TextureData *)texture->internal; | ||
| 1247 | |||
| 1248 | if (!renderdata) { | ||
| 1249 | return; | ||
| 1250 | } | ||
| 1251 | |||
| 1252 | if (!psp_texture) { | ||
| 1253 | return; | ||
| 1254 | } | ||
| 1255 | |||
| 1256 | LRUTargetRemove(renderdata, psp_texture); | ||
| 1257 | TextureStorageFree(psp_texture->data); | ||
| 1258 | SDL_free(psp_texture); | ||
| 1259 | texture->internal = NULL; | ||
| 1260 | } | ||
| 1261 | |||
| 1262 | static void PSP_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1263 | { | ||
| 1264 | PSP_RenderData *data = (PSP_RenderData *)renderer->internal; | ||
| 1265 | if (data) { | ||
| 1266 | if (!data->initialized) { | ||
| 1267 | return; | ||
| 1268 | } | ||
| 1269 | |||
| 1270 | sceKernelDisableSubIntr(PSP_VBLANK_INT, 0); | ||
| 1271 | sceKernelReleaseSubIntrHandler(PSP_VBLANK_INT, 0); | ||
| 1272 | sceDisplayWaitVblankStart(); | ||
| 1273 | sceGuDisplay(GU_FALSE); | ||
| 1274 | sceGuTerm(); | ||
| 1275 | vfree(data->backbuffer); | ||
| 1276 | vfree(data->frontbuffer); | ||
| 1277 | |||
| 1278 | data->initialized = false; | ||
| 1279 | data->displayListAvail = false; | ||
| 1280 | SDL_free(data); | ||
| 1281 | } | ||
| 1282 | } | ||
| 1283 | |||
| 1284 | static bool PSP_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 1285 | { | ||
| 1286 | PSP_RenderData *data = renderer->internal; | ||
| 1287 | data->vsync = vsync; | ||
| 1288 | return true; | ||
| 1289 | } | ||
| 1290 | |||
| 1291 | static bool PSP_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 1292 | { | ||
| 1293 | PSP_RenderData *data; | ||
| 1294 | int pixelformat; | ||
| 1295 | void *doublebuffer = NULL; | ||
| 1296 | |||
| 1297 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 1298 | |||
| 1299 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 1300 | return SDL_SetError("Unsupported output colorspace"); | ||
| 1301 | } | ||
| 1302 | |||
| 1303 | data = (PSP_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 1304 | if (!data) { | ||
| 1305 | return false; | ||
| 1306 | } | ||
| 1307 | |||
| 1308 | renderer->WindowEvent = PSP_WindowEvent; | ||
| 1309 | renderer->CreateTexture = PSP_CreateTexture; | ||
| 1310 | renderer->UpdateTexture = PSP_UpdateTexture; | ||
| 1311 | renderer->LockTexture = PSP_LockTexture; | ||
| 1312 | renderer->UnlockTexture = PSP_UnlockTexture; | ||
| 1313 | renderer->SetTextureScaleMode = PSP_SetTextureScaleMode; | ||
| 1314 | renderer->SetRenderTarget = PSP_SetRenderTarget; | ||
| 1315 | renderer->QueueSetViewport = PSP_QueueNoOp; | ||
| 1316 | renderer->QueueSetDrawColor = PSP_QueueNoOp; | ||
| 1317 | renderer->QueueDrawPoints = PSP_QueueDrawPoints; | ||
| 1318 | renderer->QueueDrawLines = PSP_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 1319 | renderer->QueueGeometry = PSP_QueueGeometry; | ||
| 1320 | renderer->QueueFillRects = PSP_QueueFillRects; | ||
| 1321 | renderer->QueueCopy = PSP_QueueCopy; | ||
| 1322 | renderer->QueueCopyEx = PSP_QueueCopyEx; | ||
| 1323 | renderer->InvalidateCachedState = PSP_InvalidateCachedState; | ||
| 1324 | renderer->RunCommandQueue = PSP_RunCommandQueue; | ||
| 1325 | renderer->RenderPresent = PSP_RenderPresent; | ||
| 1326 | renderer->DestroyTexture = PSP_DestroyTexture; | ||
| 1327 | renderer->DestroyRenderer = PSP_DestroyRenderer; | ||
| 1328 | renderer->SetVSync = PSP_SetVSync; | ||
| 1329 | renderer->internal = data; | ||
| 1330 | PSP_InvalidateCachedState(renderer); | ||
| 1331 | renderer->window = window; | ||
| 1332 | |||
| 1333 | renderer->name = PSP_RenderDriver.name; | ||
| 1334 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGR565); | ||
| 1335 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555); | ||
| 1336 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR4444); | ||
| 1337 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 1338 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 512); | ||
| 1339 | |||
| 1340 | data->initialized = true; | ||
| 1341 | data->most_recent_target = NULL; | ||
| 1342 | data->least_recent_target = NULL; | ||
| 1343 | |||
| 1344 | pixelformat = PixelFormatToPSPFMT(SDL_GetWindowPixelFormat(window)); | ||
| 1345 | switch (pixelformat) { | ||
| 1346 | case GU_PSM_4444: | ||
| 1347 | case GU_PSM_5650: | ||
| 1348 | case GU_PSM_5551: | ||
| 1349 | data->bpp = 2; | ||
| 1350 | data->psm = pixelformat; | ||
| 1351 | break; | ||
| 1352 | default: | ||
| 1353 | data->bpp = 4; | ||
| 1354 | data->psm = GU_PSM_8888; | ||
| 1355 | break; | ||
| 1356 | } | ||
| 1357 | |||
| 1358 | doublebuffer = vramalloc(PSP_FRAME_BUFFER_SIZE * data->bpp * 2); | ||
| 1359 | data->backbuffer = doublebuffer; | ||
| 1360 | data->frontbuffer = ((uint8_t *)doublebuffer) + PSP_FRAME_BUFFER_SIZE * data->bpp; | ||
| 1361 | |||
| 1362 | sceGuInit(); | ||
| 1363 | // setup GU | ||
| 1364 | sceGuStart(GU_DIRECT, DisplayList); | ||
| 1365 | sceGuDrawBuffer(data->psm, vrelptr(data->frontbuffer), PSP_FRAME_BUFFER_WIDTH); | ||
| 1366 | sceGuDispBuffer(PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT, vrelptr(data->backbuffer), PSP_FRAME_BUFFER_WIDTH); | ||
| 1367 | |||
| 1368 | sceGuOffset(2048 - (PSP_SCREEN_WIDTH >> 1), 2048 - (PSP_SCREEN_HEIGHT >> 1)); | ||
| 1369 | sceGuViewport(2048, 2048, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); | ||
| 1370 | |||
| 1371 | sceGuDisable(GU_DEPTH_TEST); | ||
| 1372 | |||
| 1373 | // Scissoring | ||
| 1374 | sceGuScissor(0, 0, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); | ||
| 1375 | sceGuEnable(GU_SCISSOR_TEST); | ||
| 1376 | |||
| 1377 | // Backface culling | ||
| 1378 | sceGuDisable(GU_CULL_FACE); | ||
| 1379 | |||
| 1380 | // Setup initial blend state | ||
| 1381 | ResetBlendState(&data->blendState); | ||
| 1382 | |||
| 1383 | sceGuFinish(); | ||
| 1384 | sceGuSync(0, 0); | ||
| 1385 | sceDisplayWaitVblankStartCB(); | ||
| 1386 | sceGuDisplay(GU_TRUE); | ||
| 1387 | |||
| 1388 | // Improve performance when VSYC is enabled and it is not reaching the 60 FPS | ||
| 1389 | data->vblank_not_reached = true; | ||
| 1390 | sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0, psp_on_vblank, data); | ||
| 1391 | sceKernelEnableSubIntr(PSP_VBLANK_INT, 0); | ||
| 1392 | |||
| 1393 | return true; | ||
| 1394 | } | ||
| 1395 | |||
| 1396 | SDL_RenderDriver PSP_RenderDriver = { | ||
| 1397 | PSP_CreateRenderer, "PSP" | ||
| 1398 | }; | ||
| 1399 | |||
| 1400 | #endif // SDL_VIDEO_RENDER_PSP | ||
diff --git a/SDL-3.2.8/src/render/psp/SDL_render_psp_c.h b/SDL-3.2.8/src/render/psp/SDL_render_psp_c.h new file mode 100644 index 0000000..4d60847 --- /dev/null +++ b/SDL-3.2.8/src/render/psp/SDL_render_psp_c.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #ifndef SDL_VIDEO_RENDER_PSP_C_H | ||
| 22 | #define SDL_VIDEO_RENDER_PSP_C_H | ||
| 23 | |||
| 24 | #define PSP_SCREEN_WIDTH 480 | ||
| 25 | #define PSP_SCREEN_HEIGHT 272 | ||
| 26 | |||
| 27 | #define PSP_FRAME_BUFFER_WIDTH 512 | ||
| 28 | #define PSP_FRAME_BUFFER_SIZE (PSP_FRAME_BUFFER_WIDTH * PSP_SCREEN_HEIGHT) | ||
| 29 | |||
| 30 | #endif // SDL_VIDEO_RENDER_PSP_C_H | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_blendfillrect.c b/SDL-3.2.8/src/render/software/SDL_blendfillrect.c new file mode 100644 index 0000000..4e5c7f8 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_blendfillrect.c | |||
| @@ -0,0 +1,371 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include "SDL_draw.h" | ||
| 26 | #include "SDL_blendfillrect.h" | ||
| 27 | |||
| 28 | static bool SDL_BlendFillRect_RGB555(SDL_Surface *dst, const SDL_Rect *rect, | ||
| 29 | SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 30 | { | ||
| 31 | unsigned inva = 0xff - a; | ||
| 32 | |||
| 33 | switch (blendMode) { | ||
| 34 | case SDL_BLENDMODE_BLEND: | ||
| 35 | FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB555); | ||
| 36 | break; | ||
| 37 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 38 | FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB555); | ||
| 39 | break; | ||
| 40 | case SDL_BLENDMODE_ADD: | ||
| 41 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 42 | FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB555); | ||
| 43 | break; | ||
| 44 | case SDL_BLENDMODE_MOD: | ||
| 45 | FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB555); | ||
| 46 | break; | ||
| 47 | case SDL_BLENDMODE_MUL: | ||
| 48 | FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB555); | ||
| 49 | break; | ||
| 50 | default: | ||
| 51 | FILLRECT(Uint16, DRAW_SETPIXEL_RGB555); | ||
| 52 | break; | ||
| 53 | } | ||
| 54 | return true; | ||
| 55 | } | ||
| 56 | |||
| 57 | static bool SDL_BlendFillRect_RGB565(SDL_Surface *dst, const SDL_Rect *rect, | ||
| 58 | SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 59 | { | ||
| 60 | unsigned inva = 0xff - a; | ||
| 61 | |||
| 62 | switch (blendMode) { | ||
| 63 | case SDL_BLENDMODE_BLEND: | ||
| 64 | FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB565); | ||
| 65 | break; | ||
| 66 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 67 | FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB565); | ||
| 68 | break; | ||
| 69 | case SDL_BLENDMODE_ADD: | ||
| 70 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 71 | FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB565); | ||
| 72 | break; | ||
| 73 | case SDL_BLENDMODE_MOD: | ||
| 74 | FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB565); | ||
| 75 | break; | ||
| 76 | case SDL_BLENDMODE_MUL: | ||
| 77 | FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB565); | ||
| 78 | break; | ||
| 79 | default: | ||
| 80 | FILLRECT(Uint16, DRAW_SETPIXEL_RGB565); | ||
| 81 | break; | ||
| 82 | } | ||
| 83 | return true; | ||
| 84 | } | ||
| 85 | |||
| 86 | static bool SDL_BlendFillRect_XRGB8888(SDL_Surface *dst, const SDL_Rect *rect, | ||
| 87 | SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 88 | { | ||
| 89 | unsigned inva = 0xff - a; | ||
| 90 | |||
| 91 | switch (blendMode) { | ||
| 92 | case SDL_BLENDMODE_BLEND: | ||
| 93 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_XRGB8888); | ||
| 94 | break; | ||
| 95 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 96 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_XRGB8888); | ||
| 97 | break; | ||
| 98 | case SDL_BLENDMODE_ADD: | ||
| 99 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 100 | FILLRECT(Uint32, DRAW_SETPIXEL_ADD_XRGB8888); | ||
| 101 | break; | ||
| 102 | case SDL_BLENDMODE_MOD: | ||
| 103 | FILLRECT(Uint32, DRAW_SETPIXEL_MOD_XRGB8888); | ||
| 104 | break; | ||
| 105 | case SDL_BLENDMODE_MUL: | ||
| 106 | FILLRECT(Uint32, DRAW_SETPIXEL_MUL_XRGB8888); | ||
| 107 | break; | ||
| 108 | default: | ||
| 109 | FILLRECT(Uint32, DRAW_SETPIXEL_XRGB8888); | ||
| 110 | break; | ||
| 111 | } | ||
| 112 | return true; | ||
| 113 | } | ||
| 114 | |||
| 115 | static bool SDL_BlendFillRect_ARGB8888(SDL_Surface *dst, const SDL_Rect *rect, | ||
| 116 | SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 117 | { | ||
| 118 | unsigned inva = 0xff - a; | ||
| 119 | |||
| 120 | switch (blendMode) { | ||
| 121 | case SDL_BLENDMODE_BLEND: | ||
| 122 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888); | ||
| 123 | break; | ||
| 124 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 125 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_ARGB8888); | ||
| 126 | break; | ||
| 127 | case SDL_BLENDMODE_ADD: | ||
| 128 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 129 | FILLRECT(Uint32, DRAW_SETPIXEL_ADD_ARGB8888); | ||
| 130 | break; | ||
| 131 | case SDL_BLENDMODE_MOD: | ||
| 132 | FILLRECT(Uint32, DRAW_SETPIXEL_MOD_ARGB8888); | ||
| 133 | break; | ||
| 134 | case SDL_BLENDMODE_MUL: | ||
| 135 | FILLRECT(Uint32, DRAW_SETPIXEL_MUL_ARGB8888); | ||
| 136 | break; | ||
| 137 | default: | ||
| 138 | FILLRECT(Uint32, DRAW_SETPIXEL_ARGB8888); | ||
| 139 | break; | ||
| 140 | } | ||
| 141 | return true; | ||
| 142 | } | ||
| 143 | |||
| 144 | static bool SDL_BlendFillRect_RGB(SDL_Surface *dst, const SDL_Rect *rect, | ||
| 145 | SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 146 | { | ||
| 147 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 148 | unsigned inva = 0xff - a; | ||
| 149 | |||
| 150 | switch (fmt->bytes_per_pixel) { | ||
| 151 | case 2: | ||
| 152 | switch (blendMode) { | ||
| 153 | case SDL_BLENDMODE_BLEND: | ||
| 154 | FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB); | ||
| 155 | break; | ||
| 156 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 157 | FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB); | ||
| 158 | break; | ||
| 159 | case SDL_BLENDMODE_ADD: | ||
| 160 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 161 | FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB); | ||
| 162 | break; | ||
| 163 | case SDL_BLENDMODE_MOD: | ||
| 164 | FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB); | ||
| 165 | break; | ||
| 166 | case SDL_BLENDMODE_MUL: | ||
| 167 | FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB); | ||
| 168 | break; | ||
| 169 | default: | ||
| 170 | FILLRECT(Uint16, DRAW_SETPIXEL_RGB); | ||
| 171 | break; | ||
| 172 | } | ||
| 173 | return true; | ||
| 174 | case 4: | ||
| 175 | switch (blendMode) { | ||
| 176 | case SDL_BLENDMODE_BLEND: | ||
| 177 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGB); | ||
| 178 | break; | ||
| 179 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 180 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGB); | ||
| 181 | break; | ||
| 182 | case SDL_BLENDMODE_ADD: | ||
| 183 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 184 | FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGB); | ||
| 185 | break; | ||
| 186 | case SDL_BLENDMODE_MOD: | ||
| 187 | FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB); | ||
| 188 | break; | ||
| 189 | case SDL_BLENDMODE_MUL: | ||
| 190 | FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB); | ||
| 191 | break; | ||
| 192 | default: | ||
| 193 | FILLRECT(Uint32, DRAW_SETPIXEL_RGB); | ||
| 194 | break; | ||
| 195 | } | ||
| 196 | return true; | ||
| 197 | default: | ||
| 198 | return SDL_Unsupported(); | ||
| 199 | } | ||
| 200 | } | ||
| 201 | |||
| 202 | static bool SDL_BlendFillRect_RGBA(SDL_Surface *dst, const SDL_Rect *rect, | ||
| 203 | SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 204 | { | ||
| 205 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 206 | unsigned inva = 0xff - a; | ||
| 207 | |||
| 208 | switch (fmt->bytes_per_pixel) { | ||
| 209 | case 4: | ||
| 210 | switch (blendMode) { | ||
| 211 | case SDL_BLENDMODE_BLEND: | ||
| 212 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGBA); | ||
| 213 | break; | ||
| 214 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 215 | FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGBA); | ||
| 216 | break; | ||
| 217 | case SDL_BLENDMODE_ADD: | ||
| 218 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 219 | FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGBA); | ||
| 220 | break; | ||
| 221 | case SDL_BLENDMODE_MOD: | ||
| 222 | FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGBA); | ||
| 223 | break; | ||
| 224 | case SDL_BLENDMODE_MUL: | ||
| 225 | FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGBA); | ||
| 226 | break; | ||
| 227 | default: | ||
| 228 | FILLRECT(Uint32, DRAW_SETPIXEL_RGBA); | ||
| 229 | break; | ||
| 230 | } | ||
| 231 | return true; | ||
| 232 | default: | ||
| 233 | return SDL_Unsupported(); | ||
| 234 | } | ||
| 235 | } | ||
| 236 | |||
| 237 | bool SDL_BlendFillRect(SDL_Surface *dst, const SDL_Rect *rect, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 238 | { | ||
| 239 | SDL_Rect clipped; | ||
| 240 | |||
| 241 | if (!SDL_SurfaceValid(dst)) { | ||
| 242 | return SDL_InvalidParamError("SDL_BlendFillRect(): dst"); | ||
| 243 | } | ||
| 244 | |||
| 245 | // This function doesn't work on surfaces < 8 bpp | ||
| 246 | if (SDL_BITSPERPIXEL(dst->format) < 8) { | ||
| 247 | return SDL_SetError("SDL_BlendFillRect(): Unsupported surface format"); | ||
| 248 | } | ||
| 249 | |||
| 250 | // If 'rect' == NULL, then fill the whole surface | ||
| 251 | if (rect) { | ||
| 252 | // Perform clipping | ||
| 253 | if (!SDL_GetRectIntersection(rect, &dst->clip_rect, &clipped)) { | ||
| 254 | return true; | ||
| 255 | } | ||
| 256 | rect = &clipped; | ||
| 257 | } else { | ||
| 258 | rect = &dst->clip_rect; | ||
| 259 | } | ||
| 260 | |||
| 261 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 262 | r = DRAW_MUL(r, a); | ||
| 263 | g = DRAW_MUL(g, a); | ||
| 264 | b = DRAW_MUL(b, a); | ||
| 265 | } | ||
| 266 | |||
| 267 | switch (dst->fmt->bits_per_pixel) { | ||
| 268 | case 15: | ||
| 269 | switch (dst->fmt->Rmask) { | ||
| 270 | case 0x7C00: | ||
| 271 | return SDL_BlendFillRect_RGB555(dst, rect, blendMode, r, g, b, a); | ||
| 272 | } | ||
| 273 | break; | ||
| 274 | case 16: | ||
| 275 | switch (dst->fmt->Rmask) { | ||
| 276 | case 0xF800: | ||
| 277 | return SDL_BlendFillRect_RGB565(dst, rect, blendMode, r, g, b, a); | ||
| 278 | } | ||
| 279 | break; | ||
| 280 | case 32: | ||
| 281 | switch (dst->fmt->Rmask) { | ||
| 282 | case 0x00FF0000: | ||
| 283 | if (!dst->fmt->Amask) { | ||
| 284 | return SDL_BlendFillRect_XRGB8888(dst, rect, blendMode, r, g, b, a); | ||
| 285 | } else { | ||
| 286 | return SDL_BlendFillRect_ARGB8888(dst, rect, blendMode, r, g, b, a); | ||
| 287 | } | ||
| 288 | // break; -Wunreachable-code-break | ||
| 289 | } | ||
| 290 | break; | ||
| 291 | default: | ||
| 292 | break; | ||
| 293 | } | ||
| 294 | |||
| 295 | if (!dst->fmt->Amask) { | ||
| 296 | return SDL_BlendFillRect_RGB(dst, rect, blendMode, r, g, b, a); | ||
| 297 | } else { | ||
| 298 | return SDL_BlendFillRect_RGBA(dst, rect, blendMode, r, g, b, a); | ||
| 299 | } | ||
| 300 | } | ||
| 301 | |||
| 302 | bool SDL_BlendFillRects(SDL_Surface *dst, const SDL_Rect *rects, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 303 | { | ||
| 304 | SDL_Rect rect; | ||
| 305 | int i; | ||
| 306 | bool (*func)(SDL_Surface * dst, const SDL_Rect *rect, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; | ||
| 307 | bool result = true; | ||
| 308 | |||
| 309 | if (!SDL_SurfaceValid(dst)) { | ||
| 310 | return SDL_InvalidParamError("SDL_BlendFillRects(): dst"); | ||
| 311 | } | ||
| 312 | |||
| 313 | // This function doesn't work on surfaces < 8 bpp | ||
| 314 | if (dst->fmt->bits_per_pixel < 8) { | ||
| 315 | return SDL_SetError("SDL_BlendFillRects(): Unsupported surface format"); | ||
| 316 | } | ||
| 317 | |||
| 318 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 319 | r = DRAW_MUL(r, a); | ||
| 320 | g = DRAW_MUL(g, a); | ||
| 321 | b = DRAW_MUL(b, a); | ||
| 322 | } | ||
| 323 | |||
| 324 | // FIXME: Does this function pointer slow things down significantly? | ||
| 325 | switch (dst->fmt->bits_per_pixel) { | ||
| 326 | case 15: | ||
| 327 | switch (dst->fmt->Rmask) { | ||
| 328 | case 0x7C00: | ||
| 329 | func = SDL_BlendFillRect_RGB555; | ||
| 330 | } | ||
| 331 | break; | ||
| 332 | case 16: | ||
| 333 | switch (dst->fmt->Rmask) { | ||
| 334 | case 0xF800: | ||
| 335 | func = SDL_BlendFillRect_RGB565; | ||
| 336 | } | ||
| 337 | break; | ||
| 338 | case 32: | ||
| 339 | switch (dst->fmt->Rmask) { | ||
| 340 | case 0x00FF0000: | ||
| 341 | if (!dst->fmt->Amask) { | ||
| 342 | func = SDL_BlendFillRect_XRGB8888; | ||
| 343 | } else { | ||
| 344 | func = SDL_BlendFillRect_ARGB8888; | ||
| 345 | } | ||
| 346 | break; | ||
| 347 | } | ||
| 348 | break; | ||
| 349 | default: | ||
| 350 | break; | ||
| 351 | } | ||
| 352 | |||
| 353 | if (!func) { | ||
| 354 | if (!dst->fmt->Amask) { | ||
| 355 | func = SDL_BlendFillRect_RGB; | ||
| 356 | } else { | ||
| 357 | func = SDL_BlendFillRect_RGBA; | ||
| 358 | } | ||
| 359 | } | ||
| 360 | |||
| 361 | for (i = 0; i < count; ++i) { | ||
| 362 | // Perform clipping | ||
| 363 | if (!SDL_GetRectIntersection(&rects[i], &dst->clip_rect, &rect)) { | ||
| 364 | continue; | ||
| 365 | } | ||
| 366 | result = func(dst, &rect, blendMode, r, g, b, a); | ||
| 367 | } | ||
| 368 | return result; | ||
| 369 | } | ||
| 370 | |||
| 371 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_blendfillrect.h b/SDL-3.2.8/src/render/software/SDL_blendfillrect.h new file mode 100644 index 0000000..c1ff439 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_blendfillrect.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_blendfillrect_h_ | ||
| 23 | #define SDL_blendfillrect_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | extern bool SDL_BlendFillRect(SDL_Surface *dst, const SDL_Rect *rect, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); | ||
| 28 | extern bool SDL_BlendFillRects(SDL_Surface *dst, const SDL_Rect *rects, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); | ||
| 29 | |||
| 30 | #endif // SDL_blendfillrect_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_blendline.c b/SDL-3.2.8/src/render/software/SDL_blendline.c new file mode 100644 index 0000000..53be2f1 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_blendline.c | |||
| @@ -0,0 +1,986 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include "SDL_draw.h" | ||
| 26 | #include "SDL_blendline.h" | ||
| 27 | #include "SDL_blendpoint.h" | ||
| 28 | |||
| 29 | static void SDL_BlendLine_RGB2(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 30 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 31 | bool draw_end) | ||
| 32 | { | ||
| 33 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 34 | unsigned r, g, b, a, inva; | ||
| 35 | |||
| 36 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 37 | r = DRAW_MUL(_r, _a); | ||
| 38 | g = DRAW_MUL(_g, _a); | ||
| 39 | b = DRAW_MUL(_b, _a); | ||
| 40 | a = _a; | ||
| 41 | } else { | ||
| 42 | r = _r; | ||
| 43 | g = _g; | ||
| 44 | b = _b; | ||
| 45 | a = _a; | ||
| 46 | } | ||
| 47 | inva = (a ^ 0xff); | ||
| 48 | |||
| 49 | if (y1 == y2) { | ||
| 50 | switch (blendMode) { | ||
| 51 | case SDL_BLENDMODE_BLEND: | ||
| 52 | HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end); | ||
| 53 | break; | ||
| 54 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 55 | HLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB, draw_end); | ||
| 56 | break; | ||
| 57 | case SDL_BLENDMODE_ADD: | ||
| 58 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 59 | HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end); | ||
| 60 | break; | ||
| 61 | case SDL_BLENDMODE_MOD: | ||
| 62 | HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end); | ||
| 63 | break; | ||
| 64 | case SDL_BLENDMODE_MUL: | ||
| 65 | HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end); | ||
| 66 | break; | ||
| 67 | default: | ||
| 68 | HLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end); | ||
| 69 | break; | ||
| 70 | } | ||
| 71 | } else if (x1 == x2) { | ||
| 72 | switch (blendMode) { | ||
| 73 | case SDL_BLENDMODE_BLEND: | ||
| 74 | VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end); | ||
| 75 | break; | ||
| 76 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 77 | VLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB, draw_end); | ||
| 78 | break; | ||
| 79 | case SDL_BLENDMODE_ADD: | ||
| 80 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 81 | VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end); | ||
| 82 | break; | ||
| 83 | case SDL_BLENDMODE_MOD: | ||
| 84 | VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end); | ||
| 85 | break; | ||
| 86 | case SDL_BLENDMODE_MUL: | ||
| 87 | VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end); | ||
| 88 | break; | ||
| 89 | default: | ||
| 90 | VLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end); | ||
| 91 | break; | ||
| 92 | } | ||
| 93 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 94 | switch (blendMode) { | ||
| 95 | case SDL_BLENDMODE_BLEND: | ||
| 96 | DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end); | ||
| 97 | break; | ||
| 98 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 99 | DLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB, draw_end); | ||
| 100 | break; | ||
| 101 | case SDL_BLENDMODE_ADD: | ||
| 102 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 103 | DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end); | ||
| 104 | break; | ||
| 105 | case SDL_BLENDMODE_MOD: | ||
| 106 | DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end); | ||
| 107 | break; | ||
| 108 | case SDL_BLENDMODE_MUL: | ||
| 109 | DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end); | ||
| 110 | break; | ||
| 111 | default: | ||
| 112 | DLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end); | ||
| 113 | break; | ||
| 114 | } | ||
| 115 | } else { | ||
| 116 | switch (blendMode) { | ||
| 117 | case SDL_BLENDMODE_BLEND: | ||
| 118 | AALINE(x1, y1, x2, y2, | ||
| 119 | DRAW_SETPIXELXY2_BLEND_RGB, DRAW_SETPIXELXY2_BLEND_RGB, | ||
| 120 | draw_end); | ||
| 121 | break; | ||
| 122 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 123 | AALINE(x1, y1, x2, y2, | ||
| 124 | DRAW_SETPIXELXY2_BLEND_CLAMPED_RGB, DRAW_SETPIXELXY2_BLEND_CLAMPED_RGB, | ||
| 125 | draw_end); | ||
| 126 | break; | ||
| 127 | case SDL_BLENDMODE_ADD: | ||
| 128 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 129 | AALINE(x1, y1, x2, y2, | ||
| 130 | DRAW_SETPIXELXY2_ADD_RGB, DRAW_SETPIXELXY2_ADD_RGB, | ||
| 131 | draw_end); | ||
| 132 | break; | ||
| 133 | case SDL_BLENDMODE_MOD: | ||
| 134 | AALINE(x1, y1, x2, y2, | ||
| 135 | DRAW_SETPIXELXY2_MOD_RGB, DRAW_SETPIXELXY2_MOD_RGB, | ||
| 136 | draw_end); | ||
| 137 | break; | ||
| 138 | case SDL_BLENDMODE_MUL: | ||
| 139 | AALINE(x1, y1, x2, y2, | ||
| 140 | DRAW_SETPIXELXY2_MUL_RGB, DRAW_SETPIXELXY2_MUL_RGB, | ||
| 141 | draw_end); | ||
| 142 | break; | ||
| 143 | default: | ||
| 144 | AALINE(x1, y1, x2, y2, | ||
| 145 | DRAW_SETPIXELXY2_RGB, DRAW_SETPIXELXY2_BLEND_RGB, | ||
| 146 | draw_end); | ||
| 147 | break; | ||
| 148 | } | ||
| 149 | } | ||
| 150 | } | ||
| 151 | |||
| 152 | static void SDL_BlendLine_RGB555(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 153 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 154 | bool draw_end) | ||
| 155 | { | ||
| 156 | unsigned r, g, b, a, inva; | ||
| 157 | |||
| 158 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 159 | r = DRAW_MUL(_r, _a); | ||
| 160 | g = DRAW_MUL(_g, _a); | ||
| 161 | b = DRAW_MUL(_b, _a); | ||
| 162 | a = _a; | ||
| 163 | } else { | ||
| 164 | r = _r; | ||
| 165 | g = _g; | ||
| 166 | b = _b; | ||
| 167 | a = _a; | ||
| 168 | } | ||
| 169 | inva = (a ^ 0xff); | ||
| 170 | |||
| 171 | if (y1 == y2) { | ||
| 172 | switch (blendMode) { | ||
| 173 | case SDL_BLENDMODE_BLEND: | ||
| 174 | HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end); | ||
| 175 | break; | ||
| 176 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 177 | HLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB555, draw_end); | ||
| 178 | break; | ||
| 179 | case SDL_BLENDMODE_ADD: | ||
| 180 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 181 | HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end); | ||
| 182 | break; | ||
| 183 | case SDL_BLENDMODE_MOD: | ||
| 184 | HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end); | ||
| 185 | break; | ||
| 186 | case SDL_BLENDMODE_MUL: | ||
| 187 | HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end); | ||
| 188 | break; | ||
| 189 | default: | ||
| 190 | HLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end); | ||
| 191 | break; | ||
| 192 | } | ||
| 193 | } else if (x1 == x2) { | ||
| 194 | switch (blendMode) { | ||
| 195 | case SDL_BLENDMODE_BLEND: | ||
| 196 | VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end); | ||
| 197 | break; | ||
| 198 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 199 | VLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB555, draw_end); | ||
| 200 | break; | ||
| 201 | case SDL_BLENDMODE_ADD: | ||
| 202 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 203 | VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end); | ||
| 204 | break; | ||
| 205 | case SDL_BLENDMODE_MOD: | ||
| 206 | VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end); | ||
| 207 | break; | ||
| 208 | case SDL_BLENDMODE_MUL: | ||
| 209 | VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end); | ||
| 210 | break; | ||
| 211 | default: | ||
| 212 | VLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end); | ||
| 213 | break; | ||
| 214 | } | ||
| 215 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 216 | switch (blendMode) { | ||
| 217 | case SDL_BLENDMODE_BLEND: | ||
| 218 | DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end); | ||
| 219 | break; | ||
| 220 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 221 | DLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB555, draw_end); | ||
| 222 | break; | ||
| 223 | case SDL_BLENDMODE_ADD: | ||
| 224 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 225 | DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end); | ||
| 226 | break; | ||
| 227 | case SDL_BLENDMODE_MOD: | ||
| 228 | DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end); | ||
| 229 | break; | ||
| 230 | case SDL_BLENDMODE_MUL: | ||
| 231 | DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end); | ||
| 232 | break; | ||
| 233 | default: | ||
| 234 | DLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end); | ||
| 235 | break; | ||
| 236 | } | ||
| 237 | } else { | ||
| 238 | switch (blendMode) { | ||
| 239 | case SDL_BLENDMODE_BLEND: | ||
| 240 | AALINE(x1, y1, x2, y2, | ||
| 241 | DRAW_SETPIXELXY_BLEND_RGB555, DRAW_SETPIXELXY_BLEND_RGB555, | ||
| 242 | draw_end); | ||
| 243 | break; | ||
| 244 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 245 | AALINE(x1, y1, x2, y2, | ||
| 246 | DRAW_SETPIXELXY_BLEND_CLAMPED_RGB555, DRAW_SETPIXELXY_BLEND_CLAMPED_RGB555, | ||
| 247 | draw_end); | ||
| 248 | break; | ||
| 249 | case SDL_BLENDMODE_ADD: | ||
| 250 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 251 | AALINE(x1, y1, x2, y2, | ||
| 252 | DRAW_SETPIXELXY_ADD_RGB555, DRAW_SETPIXELXY_ADD_RGB555, | ||
| 253 | draw_end); | ||
| 254 | break; | ||
| 255 | case SDL_BLENDMODE_MOD: | ||
| 256 | AALINE(x1, y1, x2, y2, | ||
| 257 | DRAW_SETPIXELXY_MOD_RGB555, DRAW_SETPIXELXY_MOD_RGB555, | ||
| 258 | draw_end); | ||
| 259 | break; | ||
| 260 | case SDL_BLENDMODE_MUL: | ||
| 261 | AALINE(x1, y1, x2, y2, | ||
| 262 | DRAW_SETPIXELXY_MUL_RGB555, DRAW_SETPIXELXY_MUL_RGB555, | ||
| 263 | draw_end); | ||
| 264 | break; | ||
| 265 | default: | ||
| 266 | AALINE(x1, y1, x2, y2, | ||
| 267 | DRAW_SETPIXELXY_RGB555, DRAW_SETPIXELXY_BLEND_RGB555, | ||
| 268 | draw_end); | ||
| 269 | break; | ||
| 270 | } | ||
| 271 | } | ||
| 272 | } | ||
| 273 | |||
| 274 | static void SDL_BlendLine_RGB565(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 275 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 276 | bool draw_end) | ||
| 277 | { | ||
| 278 | unsigned r, g, b, a, inva; | ||
| 279 | |||
| 280 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 281 | r = DRAW_MUL(_r, _a); | ||
| 282 | g = DRAW_MUL(_g, _a); | ||
| 283 | b = DRAW_MUL(_b, _a); | ||
| 284 | a = _a; | ||
| 285 | } else { | ||
| 286 | r = _r; | ||
| 287 | g = _g; | ||
| 288 | b = _b; | ||
| 289 | a = _a; | ||
| 290 | } | ||
| 291 | inva = (a ^ 0xff); | ||
| 292 | |||
| 293 | if (y1 == y2) { | ||
| 294 | switch (blendMode) { | ||
| 295 | case SDL_BLENDMODE_BLEND: | ||
| 296 | HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end); | ||
| 297 | break; | ||
| 298 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 299 | HLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB565, draw_end); | ||
| 300 | break; | ||
| 301 | case SDL_BLENDMODE_ADD: | ||
| 302 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 303 | HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end); | ||
| 304 | break; | ||
| 305 | case SDL_BLENDMODE_MOD: | ||
| 306 | HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end); | ||
| 307 | break; | ||
| 308 | case SDL_BLENDMODE_MUL: | ||
| 309 | HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end); | ||
| 310 | break; | ||
| 311 | default: | ||
| 312 | HLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end); | ||
| 313 | break; | ||
| 314 | } | ||
| 315 | } else if (x1 == x2) { | ||
| 316 | switch (blendMode) { | ||
| 317 | case SDL_BLENDMODE_BLEND: | ||
| 318 | VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end); | ||
| 319 | break; | ||
| 320 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 321 | VLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB565, draw_end); | ||
| 322 | break; | ||
| 323 | case SDL_BLENDMODE_ADD: | ||
| 324 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 325 | VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end); | ||
| 326 | break; | ||
| 327 | case SDL_BLENDMODE_MOD: | ||
| 328 | VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end); | ||
| 329 | break; | ||
| 330 | case SDL_BLENDMODE_MUL: | ||
| 331 | VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end); | ||
| 332 | break; | ||
| 333 | default: | ||
| 334 | VLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end); | ||
| 335 | break; | ||
| 336 | } | ||
| 337 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 338 | switch (blendMode) { | ||
| 339 | case SDL_BLENDMODE_BLEND: | ||
| 340 | DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end); | ||
| 341 | break; | ||
| 342 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 343 | DLINE(Uint16, DRAW_SETPIXEL_BLEND_CLAMPED_RGB565, draw_end); | ||
| 344 | break; | ||
| 345 | case SDL_BLENDMODE_ADD: | ||
| 346 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 347 | DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end); | ||
| 348 | break; | ||
| 349 | case SDL_BLENDMODE_MOD: | ||
| 350 | DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end); | ||
| 351 | break; | ||
| 352 | case SDL_BLENDMODE_MUL: | ||
| 353 | DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end); | ||
| 354 | break; | ||
| 355 | default: | ||
| 356 | DLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end); | ||
| 357 | break; | ||
| 358 | } | ||
| 359 | } else { | ||
| 360 | switch (blendMode) { | ||
| 361 | case SDL_BLENDMODE_BLEND: | ||
| 362 | AALINE(x1, y1, x2, y2, | ||
| 363 | DRAW_SETPIXELXY_BLEND_RGB565, DRAW_SETPIXELXY_BLEND_RGB565, | ||
| 364 | draw_end); | ||
| 365 | break; | ||
| 366 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 367 | AALINE(x1, y1, x2, y2, | ||
| 368 | DRAW_SETPIXELXY_BLEND_CLAMPED_RGB565, DRAW_SETPIXELXY_BLEND_CLAMPED_RGB565, | ||
| 369 | draw_end); | ||
| 370 | break; | ||
| 371 | case SDL_BLENDMODE_ADD: | ||
| 372 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 373 | AALINE(x1, y1, x2, y2, | ||
| 374 | DRAW_SETPIXELXY_ADD_RGB565, DRAW_SETPIXELXY_ADD_RGB565, | ||
| 375 | draw_end); | ||
| 376 | break; | ||
| 377 | case SDL_BLENDMODE_MOD: | ||
| 378 | AALINE(x1, y1, x2, y2, | ||
| 379 | DRAW_SETPIXELXY_MOD_RGB565, DRAW_SETPIXELXY_MOD_RGB565, | ||
| 380 | draw_end); | ||
| 381 | break; | ||
| 382 | case SDL_BLENDMODE_MUL: | ||
| 383 | AALINE(x1, y1, x2, y2, | ||
| 384 | DRAW_SETPIXELXY_MUL_RGB565, DRAW_SETPIXELXY_MUL_RGB565, | ||
| 385 | draw_end); | ||
| 386 | break; | ||
| 387 | default: | ||
| 388 | AALINE(x1, y1, x2, y2, | ||
| 389 | DRAW_SETPIXELXY_RGB565, DRAW_SETPIXELXY_BLEND_RGB565, | ||
| 390 | draw_end); | ||
| 391 | break; | ||
| 392 | } | ||
| 393 | } | ||
| 394 | } | ||
| 395 | |||
| 396 | static void SDL_BlendLine_RGB4(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 397 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 398 | bool draw_end) | ||
| 399 | { | ||
| 400 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 401 | unsigned r, g, b, a, inva; | ||
| 402 | |||
| 403 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 404 | r = DRAW_MUL(_r, _a); | ||
| 405 | g = DRAW_MUL(_g, _a); | ||
| 406 | b = DRAW_MUL(_b, _a); | ||
| 407 | a = _a; | ||
| 408 | } else { | ||
| 409 | r = _r; | ||
| 410 | g = _g; | ||
| 411 | b = _b; | ||
| 412 | a = _a; | ||
| 413 | } | ||
| 414 | inva = (a ^ 0xff); | ||
| 415 | |||
| 416 | if (y1 == y2) { | ||
| 417 | switch (blendMode) { | ||
| 418 | case SDL_BLENDMODE_BLEND: | ||
| 419 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end); | ||
| 420 | break; | ||
| 421 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 422 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGB, draw_end); | ||
| 423 | break; | ||
| 424 | case SDL_BLENDMODE_ADD: | ||
| 425 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 426 | HLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end); | ||
| 427 | break; | ||
| 428 | case SDL_BLENDMODE_MOD: | ||
| 429 | HLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end); | ||
| 430 | break; | ||
| 431 | case SDL_BLENDMODE_MUL: | ||
| 432 | HLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end); | ||
| 433 | break; | ||
| 434 | default: | ||
| 435 | HLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end); | ||
| 436 | break; | ||
| 437 | } | ||
| 438 | } else if (x1 == x2) { | ||
| 439 | switch (blendMode) { | ||
| 440 | case SDL_BLENDMODE_BLEND: | ||
| 441 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end); | ||
| 442 | break; | ||
| 443 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 444 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGB, draw_end); | ||
| 445 | break; | ||
| 446 | case SDL_BLENDMODE_ADD: | ||
| 447 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 448 | VLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end); | ||
| 449 | break; | ||
| 450 | case SDL_BLENDMODE_MOD: | ||
| 451 | VLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end); | ||
| 452 | break; | ||
| 453 | case SDL_BLENDMODE_MUL: | ||
| 454 | VLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end); | ||
| 455 | break; | ||
| 456 | default: | ||
| 457 | VLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end); | ||
| 458 | break; | ||
| 459 | } | ||
| 460 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 461 | switch (blendMode) { | ||
| 462 | case SDL_BLENDMODE_BLEND: | ||
| 463 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end); | ||
| 464 | break; | ||
| 465 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 466 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGB, draw_end); | ||
| 467 | break; | ||
| 468 | case SDL_BLENDMODE_ADD: | ||
| 469 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 470 | DLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end); | ||
| 471 | break; | ||
| 472 | case SDL_BLENDMODE_MOD: | ||
| 473 | DLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end); | ||
| 474 | break; | ||
| 475 | case SDL_BLENDMODE_MUL: | ||
| 476 | DLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end); | ||
| 477 | break; | ||
| 478 | default: | ||
| 479 | DLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end); | ||
| 480 | break; | ||
| 481 | } | ||
| 482 | } else { | ||
| 483 | switch (blendMode) { | ||
| 484 | case SDL_BLENDMODE_BLEND: | ||
| 485 | AALINE(x1, y1, x2, y2, | ||
| 486 | DRAW_SETPIXELXY4_BLEND_RGB, DRAW_SETPIXELXY4_BLEND_RGB, | ||
| 487 | draw_end); | ||
| 488 | break; | ||
| 489 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 490 | AALINE(x1, y1, x2, y2, | ||
| 491 | DRAW_SETPIXELXY4_BLEND_CLAMPED_RGB, DRAW_SETPIXELXY4_BLEND_CLAMPED_RGB, | ||
| 492 | draw_end); | ||
| 493 | break; | ||
| 494 | case SDL_BLENDMODE_ADD: | ||
| 495 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 496 | AALINE(x1, y1, x2, y2, | ||
| 497 | DRAW_SETPIXELXY4_ADD_RGB, DRAW_SETPIXELXY4_ADD_RGB, | ||
| 498 | draw_end); | ||
| 499 | break; | ||
| 500 | case SDL_BLENDMODE_MOD: | ||
| 501 | AALINE(x1, y1, x2, y2, | ||
| 502 | DRAW_SETPIXELXY4_MOD_RGB, DRAW_SETPIXELXY4_MOD_RGB, | ||
| 503 | draw_end); | ||
| 504 | break; | ||
| 505 | case SDL_BLENDMODE_MUL: | ||
| 506 | AALINE(x1, y1, x2, y2, | ||
| 507 | DRAW_SETPIXELXY4_MUL_RGB, DRAW_SETPIXELXY4_MUL_RGB, | ||
| 508 | draw_end); | ||
| 509 | break; | ||
| 510 | default: | ||
| 511 | AALINE(x1, y1, x2, y2, | ||
| 512 | DRAW_SETPIXELXY4_RGB, DRAW_SETPIXELXY4_BLEND_RGB, | ||
| 513 | draw_end); | ||
| 514 | break; | ||
| 515 | } | ||
| 516 | } | ||
| 517 | } | ||
| 518 | |||
| 519 | static void SDL_BlendLine_RGBA4(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 520 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 521 | bool draw_end) | ||
| 522 | { | ||
| 523 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 524 | unsigned r, g, b, a, inva; | ||
| 525 | |||
| 526 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 527 | r = DRAW_MUL(_r, _a); | ||
| 528 | g = DRAW_MUL(_g, _a); | ||
| 529 | b = DRAW_MUL(_b, _a); | ||
| 530 | a = _a; | ||
| 531 | } else { | ||
| 532 | r = _r; | ||
| 533 | g = _g; | ||
| 534 | b = _b; | ||
| 535 | a = _a; | ||
| 536 | } | ||
| 537 | inva = (a ^ 0xff); | ||
| 538 | |||
| 539 | if (y1 == y2) { | ||
| 540 | switch (blendMode) { | ||
| 541 | case SDL_BLENDMODE_BLEND: | ||
| 542 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end); | ||
| 543 | break; | ||
| 544 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 545 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGBA, draw_end); | ||
| 546 | break; | ||
| 547 | case SDL_BLENDMODE_ADD: | ||
| 548 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 549 | HLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end); | ||
| 550 | break; | ||
| 551 | case SDL_BLENDMODE_MOD: | ||
| 552 | HLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end); | ||
| 553 | break; | ||
| 554 | case SDL_BLENDMODE_MUL: | ||
| 555 | HLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end); | ||
| 556 | break; | ||
| 557 | default: | ||
| 558 | HLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end); | ||
| 559 | break; | ||
| 560 | } | ||
| 561 | } else if (x1 == x2) { | ||
| 562 | switch (blendMode) { | ||
| 563 | case SDL_BLENDMODE_BLEND: | ||
| 564 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end); | ||
| 565 | break; | ||
| 566 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 567 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGBA, draw_end); | ||
| 568 | break; | ||
| 569 | case SDL_BLENDMODE_ADD: | ||
| 570 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 571 | VLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end); | ||
| 572 | break; | ||
| 573 | case SDL_BLENDMODE_MOD: | ||
| 574 | VLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end); | ||
| 575 | break; | ||
| 576 | case SDL_BLENDMODE_MUL: | ||
| 577 | VLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end); | ||
| 578 | break; | ||
| 579 | default: | ||
| 580 | VLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end); | ||
| 581 | break; | ||
| 582 | } | ||
| 583 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 584 | switch (blendMode) { | ||
| 585 | case SDL_BLENDMODE_BLEND: | ||
| 586 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end); | ||
| 587 | break; | ||
| 588 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 589 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_RGBA, draw_end); | ||
| 590 | break; | ||
| 591 | case SDL_BLENDMODE_ADD: | ||
| 592 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 593 | DLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end); | ||
| 594 | break; | ||
| 595 | case SDL_BLENDMODE_MOD: | ||
| 596 | DLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end); | ||
| 597 | break; | ||
| 598 | case SDL_BLENDMODE_MUL: | ||
| 599 | DLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end); | ||
| 600 | break; | ||
| 601 | default: | ||
| 602 | DLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end); | ||
| 603 | break; | ||
| 604 | } | ||
| 605 | } else { | ||
| 606 | switch (blendMode) { | ||
| 607 | case SDL_BLENDMODE_BLEND: | ||
| 608 | AALINE(x1, y1, x2, y2, | ||
| 609 | DRAW_SETPIXELXY4_BLEND_RGBA, DRAW_SETPIXELXY4_BLEND_RGBA, | ||
| 610 | draw_end); | ||
| 611 | break; | ||
| 612 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 613 | AALINE(x1, y1, x2, y2, | ||
| 614 | DRAW_SETPIXELXY4_BLEND_CLAMPED_RGBA, DRAW_SETPIXELXY4_BLEND_CLAMPED_RGBA, | ||
| 615 | draw_end); | ||
| 616 | break; | ||
| 617 | case SDL_BLENDMODE_ADD: | ||
| 618 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 619 | AALINE(x1, y1, x2, y2, | ||
| 620 | DRAW_SETPIXELXY4_ADD_RGBA, DRAW_SETPIXELXY4_ADD_RGBA, | ||
| 621 | draw_end); | ||
| 622 | break; | ||
| 623 | case SDL_BLENDMODE_MOD: | ||
| 624 | AALINE(x1, y1, x2, y2, | ||
| 625 | DRAW_SETPIXELXY4_MOD_RGBA, DRAW_SETPIXELXY4_MOD_RGBA, | ||
| 626 | draw_end); | ||
| 627 | break; | ||
| 628 | case SDL_BLENDMODE_MUL: | ||
| 629 | AALINE(x1, y1, x2, y2, | ||
| 630 | DRAW_SETPIXELXY4_MUL_RGBA, DRAW_SETPIXELXY4_MUL_RGBA, | ||
| 631 | draw_end); | ||
| 632 | break; | ||
| 633 | default: | ||
| 634 | AALINE(x1, y1, x2, y2, | ||
| 635 | DRAW_SETPIXELXY4_RGBA, DRAW_SETPIXELXY4_BLEND_RGBA, | ||
| 636 | draw_end); | ||
| 637 | break; | ||
| 638 | } | ||
| 639 | } | ||
| 640 | } | ||
| 641 | |||
| 642 | static void SDL_BlendLine_XRGB8888(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 643 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 644 | bool draw_end) | ||
| 645 | { | ||
| 646 | unsigned r, g, b, a, inva; | ||
| 647 | |||
| 648 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 649 | r = DRAW_MUL(_r, _a); | ||
| 650 | g = DRAW_MUL(_g, _a); | ||
| 651 | b = DRAW_MUL(_b, _a); | ||
| 652 | a = _a; | ||
| 653 | } else { | ||
| 654 | r = _r; | ||
| 655 | g = _g; | ||
| 656 | b = _b; | ||
| 657 | a = _a; | ||
| 658 | } | ||
| 659 | inva = (a ^ 0xff); | ||
| 660 | |||
| 661 | if (y1 == y2) { | ||
| 662 | switch (blendMode) { | ||
| 663 | case SDL_BLENDMODE_BLEND: | ||
| 664 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_XRGB8888, draw_end); | ||
| 665 | break; | ||
| 666 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 667 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_XRGB8888, draw_end); | ||
| 668 | break; | ||
| 669 | case SDL_BLENDMODE_ADD: | ||
| 670 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 671 | HLINE(Uint32, DRAW_SETPIXEL_ADD_XRGB8888, draw_end); | ||
| 672 | break; | ||
| 673 | case SDL_BLENDMODE_MOD: | ||
| 674 | HLINE(Uint32, DRAW_SETPIXEL_MOD_XRGB8888, draw_end); | ||
| 675 | break; | ||
| 676 | case SDL_BLENDMODE_MUL: | ||
| 677 | HLINE(Uint32, DRAW_SETPIXEL_MUL_XRGB8888, draw_end); | ||
| 678 | break; | ||
| 679 | default: | ||
| 680 | HLINE(Uint32, DRAW_SETPIXEL_XRGB8888, draw_end); | ||
| 681 | break; | ||
| 682 | } | ||
| 683 | } else if (x1 == x2) { | ||
| 684 | switch (blendMode) { | ||
| 685 | case SDL_BLENDMODE_BLEND: | ||
| 686 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_XRGB8888, draw_end); | ||
| 687 | break; | ||
| 688 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 689 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_XRGB8888, draw_end); | ||
| 690 | break; | ||
| 691 | case SDL_BLENDMODE_ADD: | ||
| 692 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 693 | VLINE(Uint32, DRAW_SETPIXEL_ADD_XRGB8888, draw_end); | ||
| 694 | break; | ||
| 695 | case SDL_BLENDMODE_MOD: | ||
| 696 | VLINE(Uint32, DRAW_SETPIXEL_MOD_XRGB8888, draw_end); | ||
| 697 | break; | ||
| 698 | case SDL_BLENDMODE_MUL: | ||
| 699 | VLINE(Uint32, DRAW_SETPIXEL_MUL_XRGB8888, draw_end); | ||
| 700 | break; | ||
| 701 | default: | ||
| 702 | VLINE(Uint32, DRAW_SETPIXEL_XRGB8888, draw_end); | ||
| 703 | break; | ||
| 704 | } | ||
| 705 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 706 | switch (blendMode) { | ||
| 707 | case SDL_BLENDMODE_BLEND: | ||
| 708 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_XRGB8888, draw_end); | ||
| 709 | break; | ||
| 710 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 711 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_XRGB8888, draw_end); | ||
| 712 | break; | ||
| 713 | case SDL_BLENDMODE_ADD: | ||
| 714 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 715 | DLINE(Uint32, DRAW_SETPIXEL_ADD_XRGB8888, draw_end); | ||
| 716 | break; | ||
| 717 | case SDL_BLENDMODE_MOD: | ||
| 718 | DLINE(Uint32, DRAW_SETPIXEL_MOD_XRGB8888, draw_end); | ||
| 719 | break; | ||
| 720 | case SDL_BLENDMODE_MUL: | ||
| 721 | DLINE(Uint32, DRAW_SETPIXEL_MUL_XRGB8888, draw_end); | ||
| 722 | break; | ||
| 723 | default: | ||
| 724 | DLINE(Uint32, DRAW_SETPIXEL_XRGB8888, draw_end); | ||
| 725 | break; | ||
| 726 | } | ||
| 727 | } else { | ||
| 728 | switch (blendMode) { | ||
| 729 | case SDL_BLENDMODE_BLEND: | ||
| 730 | AALINE(x1, y1, x2, y2, | ||
| 731 | DRAW_SETPIXELXY_BLEND_XRGB8888, DRAW_SETPIXELXY_BLEND_XRGB8888, | ||
| 732 | draw_end); | ||
| 733 | break; | ||
| 734 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 735 | AALINE(x1, y1, x2, y2, | ||
| 736 | DRAW_SETPIXELXY_BLEND_CLAMPED_XRGB8888, DRAW_SETPIXELXY_BLEND_CLAMPED_XRGB8888, | ||
| 737 | draw_end); | ||
| 738 | break; | ||
| 739 | case SDL_BLENDMODE_ADD: | ||
| 740 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 741 | AALINE(x1, y1, x2, y2, | ||
| 742 | DRAW_SETPIXELXY_ADD_XRGB8888, DRAW_SETPIXELXY_ADD_XRGB8888, | ||
| 743 | draw_end); | ||
| 744 | break; | ||
| 745 | case SDL_BLENDMODE_MOD: | ||
| 746 | AALINE(x1, y1, x2, y2, | ||
| 747 | DRAW_SETPIXELXY_MOD_XRGB8888, DRAW_SETPIXELXY_MOD_XRGB8888, | ||
| 748 | draw_end); | ||
| 749 | break; | ||
| 750 | case SDL_BLENDMODE_MUL: | ||
| 751 | AALINE(x1, y1, x2, y2, | ||
| 752 | DRAW_SETPIXELXY_MUL_XRGB8888, DRAW_SETPIXELXY_MUL_XRGB8888, | ||
| 753 | draw_end); | ||
| 754 | break; | ||
| 755 | default: | ||
| 756 | AALINE(x1, y1, x2, y2, | ||
| 757 | DRAW_SETPIXELXY_XRGB8888, DRAW_SETPIXELXY_BLEND_XRGB8888, | ||
| 758 | draw_end); | ||
| 759 | break; | ||
| 760 | } | ||
| 761 | } | ||
| 762 | } | ||
| 763 | |||
| 764 | static void SDL_BlendLine_ARGB8888(SDL_Surface *dst, int x1, int y1, int x2, int y2, | ||
| 765 | SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, | ||
| 766 | bool draw_end) | ||
| 767 | { | ||
| 768 | unsigned r, g, b, a, inva; | ||
| 769 | |||
| 770 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 771 | r = DRAW_MUL(_r, _a); | ||
| 772 | g = DRAW_MUL(_g, _a); | ||
| 773 | b = DRAW_MUL(_b, _a); | ||
| 774 | a = _a; | ||
| 775 | } else { | ||
| 776 | r = _r; | ||
| 777 | g = _g; | ||
| 778 | b = _b; | ||
| 779 | a = _a; | ||
| 780 | } | ||
| 781 | inva = (a ^ 0xff); | ||
| 782 | |||
| 783 | if (y1 == y2) { | ||
| 784 | switch (blendMode) { | ||
| 785 | case SDL_BLENDMODE_BLEND: | ||
| 786 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888, draw_end); | ||
| 787 | break; | ||
| 788 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 789 | HLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_ARGB8888, draw_end); | ||
| 790 | break; | ||
| 791 | case SDL_BLENDMODE_ADD: | ||
| 792 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 793 | HLINE(Uint32, DRAW_SETPIXEL_ADD_ARGB8888, draw_end); | ||
| 794 | break; | ||
| 795 | case SDL_BLENDMODE_MOD: | ||
| 796 | HLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end); | ||
| 797 | break; | ||
| 798 | case SDL_BLENDMODE_MUL: | ||
| 799 | HLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end); | ||
| 800 | break; | ||
| 801 | default: | ||
| 802 | HLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end); | ||
| 803 | break; | ||
| 804 | } | ||
| 805 | } else if (x1 == x2) { | ||
| 806 | switch (blendMode) { | ||
| 807 | case SDL_BLENDMODE_BLEND: | ||
| 808 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888, draw_end); | ||
| 809 | break; | ||
| 810 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 811 | VLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_ARGB8888, draw_end); | ||
| 812 | break; | ||
| 813 | case SDL_BLENDMODE_ADD: | ||
| 814 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 815 | VLINE(Uint32, DRAW_SETPIXEL_ADD_ARGB8888, draw_end); | ||
| 816 | break; | ||
| 817 | case SDL_BLENDMODE_MOD: | ||
| 818 | VLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end); | ||
| 819 | break; | ||
| 820 | case SDL_BLENDMODE_MUL: | ||
| 821 | VLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end); | ||
| 822 | break; | ||
| 823 | default: | ||
| 824 | VLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end); | ||
| 825 | break; | ||
| 826 | } | ||
| 827 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 828 | switch (blendMode) { | ||
| 829 | case SDL_BLENDMODE_BLEND: | ||
| 830 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888, draw_end); | ||
| 831 | break; | ||
| 832 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 833 | DLINE(Uint32, DRAW_SETPIXEL_BLEND_CLAMPED_ARGB8888, draw_end); | ||
| 834 | break; | ||
| 835 | case SDL_BLENDMODE_ADD: | ||
| 836 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 837 | DLINE(Uint32, DRAW_SETPIXEL_ADD_ARGB8888, draw_end); | ||
| 838 | break; | ||
| 839 | case SDL_BLENDMODE_MOD: | ||
| 840 | DLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end); | ||
| 841 | break; | ||
| 842 | case SDL_BLENDMODE_MUL: | ||
| 843 | DLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end); | ||
| 844 | break; | ||
| 845 | default: | ||
| 846 | DLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end); | ||
| 847 | break; | ||
| 848 | } | ||
| 849 | } else { | ||
| 850 | switch (blendMode) { | ||
| 851 | case SDL_BLENDMODE_BLEND: | ||
| 852 | AALINE(x1, y1, x2, y2, | ||
| 853 | DRAW_SETPIXELXY_BLEND_ARGB8888, DRAW_SETPIXELXY_BLEND_ARGB8888, | ||
| 854 | draw_end); | ||
| 855 | break; | ||
| 856 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 857 | AALINE(x1, y1, x2, y2, | ||
| 858 | DRAW_SETPIXELXY_BLEND_CLAMPED_ARGB8888, DRAW_SETPIXELXY_BLEND_CLAMPED_ARGB8888, | ||
| 859 | draw_end); | ||
| 860 | break; | ||
| 861 | case SDL_BLENDMODE_ADD: | ||
| 862 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 863 | AALINE(x1, y1, x2, y2, | ||
| 864 | DRAW_SETPIXELXY_ADD_ARGB8888, DRAW_SETPIXELXY_ADD_ARGB8888, | ||
| 865 | draw_end); | ||
| 866 | break; | ||
| 867 | case SDL_BLENDMODE_MOD: | ||
| 868 | AALINE(x1, y1, x2, y2, | ||
| 869 | DRAW_SETPIXELXY_MOD_ARGB8888, DRAW_SETPIXELXY_MOD_ARGB8888, | ||
| 870 | draw_end); | ||
| 871 | break; | ||
| 872 | case SDL_BLENDMODE_MUL: | ||
| 873 | AALINE(x1, y1, x2, y2, | ||
| 874 | DRAW_SETPIXELXY_MUL_ARGB8888, DRAW_SETPIXELXY_MUL_ARGB8888, | ||
| 875 | draw_end); | ||
| 876 | break; | ||
| 877 | default: | ||
| 878 | AALINE(x1, y1, x2, y2, | ||
| 879 | DRAW_SETPIXELXY_ARGB8888, DRAW_SETPIXELXY_BLEND_ARGB8888, | ||
| 880 | draw_end); | ||
| 881 | break; | ||
| 882 | } | ||
| 883 | } | ||
| 884 | } | ||
| 885 | |||
| 886 | typedef void (*BlendLineFunc)(SDL_Surface *dst, | ||
| 887 | int x1, int y1, int x2, int y2, | ||
| 888 | SDL_BlendMode blendMode, | ||
| 889 | Uint8 r, Uint8 g, Uint8 b, Uint8 a, | ||
| 890 | bool draw_end); | ||
| 891 | |||
| 892 | static BlendLineFunc SDL_CalculateBlendLineFunc(const SDL_PixelFormatDetails *fmt) | ||
| 893 | { | ||
| 894 | switch (fmt->bytes_per_pixel) { | ||
| 895 | case 2: | ||
| 896 | if (fmt->Rmask == 0x7C00) { | ||
| 897 | return SDL_BlendLine_RGB555; | ||
| 898 | } else if (fmt->Rmask == 0xF800) { | ||
| 899 | return SDL_BlendLine_RGB565; | ||
| 900 | } else { | ||
| 901 | return SDL_BlendLine_RGB2; | ||
| 902 | } | ||
| 903 | // break; -Wunreachable-code-break | ||
| 904 | case 4: | ||
| 905 | if (fmt->Rmask == 0x00FF0000) { | ||
| 906 | if (fmt->Amask) { | ||
| 907 | return SDL_BlendLine_ARGB8888; | ||
| 908 | } else { | ||
| 909 | return SDL_BlendLine_XRGB8888; | ||
| 910 | } | ||
| 911 | } else { | ||
| 912 | if (fmt->Amask) { | ||
| 913 | return SDL_BlendLine_RGBA4; | ||
| 914 | } else { | ||
| 915 | return SDL_BlendLine_RGB4; | ||
| 916 | } | ||
| 917 | } | ||
| 918 | } | ||
| 919 | return NULL; | ||
| 920 | } | ||
| 921 | |||
| 922 | bool SDL_BlendLine(SDL_Surface *dst, int x1, int y1, int x2, int y2, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 923 | { | ||
| 924 | BlendLineFunc func; | ||
| 925 | |||
| 926 | if (!SDL_SurfaceValid(dst)) { | ||
| 927 | return SDL_InvalidParamError("SDL_BlendLine(): dst"); | ||
| 928 | } | ||
| 929 | |||
| 930 | func = SDL_CalculateBlendLineFunc(dst->fmt); | ||
| 931 | if (!func) { | ||
| 932 | return SDL_SetError("SDL_BlendLine(): Unsupported surface format"); | ||
| 933 | } | ||
| 934 | |||
| 935 | // Perform clipping | ||
| 936 | // FIXME: We don't actually want to clip, as it may change line slope | ||
| 937 | if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { | ||
| 938 | return true; | ||
| 939 | } | ||
| 940 | |||
| 941 | func(dst, x1, y1, x2, y2, blendMode, r, g, b, a, true); | ||
| 942 | return true; | ||
| 943 | } | ||
| 944 | |||
| 945 | bool SDL_BlendLines(SDL_Surface *dst, const SDL_Point *points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 946 | { | ||
| 947 | int i; | ||
| 948 | int x1, y1; | ||
| 949 | int x2, y2; | ||
| 950 | bool draw_end; | ||
| 951 | BlendLineFunc func; | ||
| 952 | |||
| 953 | if (!SDL_SurfaceValid(dst)) { | ||
| 954 | return SDL_SetError("SDL_BlendLines(): Passed NULL destination surface"); | ||
| 955 | } | ||
| 956 | |||
| 957 | func = SDL_CalculateBlendLineFunc(dst->fmt); | ||
| 958 | if (!func) { | ||
| 959 | return SDL_SetError("SDL_BlendLines(): Unsupported surface format"); | ||
| 960 | } | ||
| 961 | |||
| 962 | for (i = 1; i < count; ++i) { | ||
| 963 | x1 = points[i - 1].x; | ||
| 964 | y1 = points[i - 1].y; | ||
| 965 | x2 = points[i].x; | ||
| 966 | y2 = points[i].y; | ||
| 967 | |||
| 968 | // Perform clipping | ||
| 969 | // FIXME: We don't actually want to clip, as it may change line slope | ||
| 970 | if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { | ||
| 971 | continue; | ||
| 972 | } | ||
| 973 | |||
| 974 | // Draw the end if it was clipped | ||
| 975 | draw_end = (x2 != points[i].x || y2 != points[i].y); | ||
| 976 | |||
| 977 | func(dst, x1, y1, x2, y2, blendMode, r, g, b, a, draw_end); | ||
| 978 | } | ||
| 979 | if (points[0].x != points[count - 1].x || points[0].y != points[count - 1].y) { | ||
| 980 | SDL_BlendPoint(dst, points[count - 1].x, points[count - 1].y, | ||
| 981 | blendMode, r, g, b, a); | ||
| 982 | } | ||
| 983 | return true; | ||
| 984 | } | ||
| 985 | |||
| 986 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_blendline.h b/SDL-3.2.8/src/render/software/SDL_blendline.h new file mode 100644 index 0000000..c9a8b20 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_blendline.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_blendline_h_ | ||
| 23 | #define SDL_blendline_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | extern bool SDL_BlendLine(SDL_Surface *dst, int x1, int y1, int x2, int y2, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); | ||
| 28 | extern bool SDL_BlendLines(SDL_Surface *dst, const SDL_Point *points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); | ||
| 29 | |||
| 30 | #endif // SDL_blendline_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_blendpoint.c b/SDL-3.2.8/src/render/software/SDL_blendpoint.c new file mode 100644 index 0000000..e408453 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_blendpoint.c | |||
| @@ -0,0 +1,376 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include "SDL_draw.h" | ||
| 26 | #include "SDL_blendpoint.h" | ||
| 27 | |||
| 28 | static bool SDL_BlendPoint_RGB555(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, | ||
| 29 | Uint8 g, Uint8 b, Uint8 a) | ||
| 30 | { | ||
| 31 | unsigned inva = 0xff - a; | ||
| 32 | |||
| 33 | switch (blendMode) { | ||
| 34 | case SDL_BLENDMODE_BLEND: | ||
| 35 | DRAW_SETPIXELXY_BLEND_RGB555(x, y); | ||
| 36 | break; | ||
| 37 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 38 | DRAW_SETPIXELXY_BLEND_CLAMPED_RGB555(x, y); | ||
| 39 | break; | ||
| 40 | case SDL_BLENDMODE_ADD: | ||
| 41 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 42 | DRAW_SETPIXELXY_ADD_RGB555(x, y); | ||
| 43 | break; | ||
| 44 | case SDL_BLENDMODE_MOD: | ||
| 45 | DRAW_SETPIXELXY_MOD_RGB555(x, y); | ||
| 46 | break; | ||
| 47 | case SDL_BLENDMODE_MUL: | ||
| 48 | DRAW_SETPIXELXY_MUL_RGB555(x, y); | ||
| 49 | break; | ||
| 50 | default: | ||
| 51 | DRAW_SETPIXELXY_RGB555(x, y); | ||
| 52 | break; | ||
| 53 | } | ||
| 54 | return true; | ||
| 55 | } | ||
| 56 | |||
| 57 | static bool SDL_BlendPoint_RGB565(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, | ||
| 58 | Uint8 g, Uint8 b, Uint8 a) | ||
| 59 | { | ||
| 60 | unsigned inva = 0xff - a; | ||
| 61 | |||
| 62 | switch (blendMode) { | ||
| 63 | case SDL_BLENDMODE_BLEND: | ||
| 64 | DRAW_SETPIXELXY_BLEND_RGB565(x, y); | ||
| 65 | break; | ||
| 66 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 67 | DRAW_SETPIXELXY_BLEND_CLAMPED_RGB565(x, y); | ||
| 68 | break; | ||
| 69 | case SDL_BLENDMODE_ADD: | ||
| 70 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 71 | DRAW_SETPIXELXY_ADD_RGB565(x, y); | ||
| 72 | break; | ||
| 73 | case SDL_BLENDMODE_MOD: | ||
| 74 | DRAW_SETPIXELXY_MOD_RGB565(x, y); | ||
| 75 | break; | ||
| 76 | case SDL_BLENDMODE_MUL: | ||
| 77 | DRAW_SETPIXELXY_MUL_RGB565(x, y); | ||
| 78 | break; | ||
| 79 | default: | ||
| 80 | DRAW_SETPIXELXY_RGB565(x, y); | ||
| 81 | break; | ||
| 82 | } | ||
| 83 | return true; | ||
| 84 | } | ||
| 85 | |||
| 86 | static bool SDL_BlendPoint_XRGB8888(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, | ||
| 87 | Uint8 g, Uint8 b, Uint8 a) | ||
| 88 | { | ||
| 89 | unsigned inva = 0xff - a; | ||
| 90 | |||
| 91 | switch (blendMode) { | ||
| 92 | case SDL_BLENDMODE_BLEND: | ||
| 93 | DRAW_SETPIXELXY_BLEND_XRGB8888(x, y); | ||
| 94 | break; | ||
| 95 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 96 | DRAW_SETPIXELXY_BLEND_CLAMPED_XRGB8888(x, y); | ||
| 97 | break; | ||
| 98 | case SDL_BLENDMODE_ADD: | ||
| 99 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 100 | DRAW_SETPIXELXY_ADD_XRGB8888(x, y); | ||
| 101 | break; | ||
| 102 | case SDL_BLENDMODE_MOD: | ||
| 103 | DRAW_SETPIXELXY_MOD_XRGB8888(x, y); | ||
| 104 | break; | ||
| 105 | case SDL_BLENDMODE_MUL: | ||
| 106 | DRAW_SETPIXELXY_MUL_XRGB8888(x, y); | ||
| 107 | break; | ||
| 108 | default: | ||
| 109 | DRAW_SETPIXELXY_XRGB8888(x, y); | ||
| 110 | break; | ||
| 111 | } | ||
| 112 | return true; | ||
| 113 | } | ||
| 114 | |||
| 115 | static bool SDL_BlendPoint_ARGB8888(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, | ||
| 116 | Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 117 | { | ||
| 118 | unsigned inva = 0xff - a; | ||
| 119 | |||
| 120 | switch (blendMode) { | ||
| 121 | case SDL_BLENDMODE_BLEND: | ||
| 122 | DRAW_SETPIXELXY_BLEND_ARGB8888(x, y); | ||
| 123 | break; | ||
| 124 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 125 | DRAW_SETPIXELXY_BLEND_CLAMPED_ARGB8888(x, y); | ||
| 126 | break; | ||
| 127 | case SDL_BLENDMODE_ADD: | ||
| 128 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 129 | DRAW_SETPIXELXY_ADD_ARGB8888(x, y); | ||
| 130 | break; | ||
| 131 | case SDL_BLENDMODE_MOD: | ||
| 132 | DRAW_SETPIXELXY_MOD_ARGB8888(x, y); | ||
| 133 | break; | ||
| 134 | case SDL_BLENDMODE_MUL: | ||
| 135 | DRAW_SETPIXELXY_MUL_ARGB8888(x, y); | ||
| 136 | break; | ||
| 137 | default: | ||
| 138 | DRAW_SETPIXELXY_ARGB8888(x, y); | ||
| 139 | break; | ||
| 140 | } | ||
| 141 | return true; | ||
| 142 | } | ||
| 143 | |||
| 144 | static bool SDL_BlendPoint_RGB(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, | ||
| 145 | Uint8 g, Uint8 b, Uint8 a) | ||
| 146 | { | ||
| 147 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 148 | unsigned inva = 0xff - a; | ||
| 149 | |||
| 150 | switch (fmt->bytes_per_pixel) { | ||
| 151 | case 2: | ||
| 152 | switch (blendMode) { | ||
| 153 | case SDL_BLENDMODE_BLEND: | ||
| 154 | DRAW_SETPIXELXY2_BLEND_RGB(x, y); | ||
| 155 | break; | ||
| 156 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 157 | DRAW_SETPIXELXY2_BLEND_CLAMPED_RGB(x, y); | ||
| 158 | break; | ||
| 159 | case SDL_BLENDMODE_ADD: | ||
| 160 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 161 | DRAW_SETPIXELXY2_ADD_RGB(x, y); | ||
| 162 | break; | ||
| 163 | case SDL_BLENDMODE_MOD: | ||
| 164 | DRAW_SETPIXELXY2_MOD_RGB(x, y); | ||
| 165 | break; | ||
| 166 | case SDL_BLENDMODE_MUL: | ||
| 167 | DRAW_SETPIXELXY2_MUL_RGB(x, y); | ||
| 168 | break; | ||
| 169 | default: | ||
| 170 | DRAW_SETPIXELXY2_RGB(x, y); | ||
| 171 | break; | ||
| 172 | } | ||
| 173 | return true; | ||
| 174 | case 4: | ||
| 175 | switch (blendMode) { | ||
| 176 | case SDL_BLENDMODE_BLEND: | ||
| 177 | DRAW_SETPIXELXY4_BLEND_RGB(x, y); | ||
| 178 | break; | ||
| 179 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 180 | DRAW_SETPIXELXY4_BLEND_CLAMPED_RGB(x, y); | ||
| 181 | break; | ||
| 182 | case SDL_BLENDMODE_ADD: | ||
| 183 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 184 | DRAW_SETPIXELXY4_ADD_RGB(x, y); | ||
| 185 | break; | ||
| 186 | case SDL_BLENDMODE_MOD: | ||
| 187 | DRAW_SETPIXELXY4_MOD_RGB(x, y); | ||
| 188 | break; | ||
| 189 | case SDL_BLENDMODE_MUL: | ||
| 190 | DRAW_SETPIXELXY4_MUL_RGB(x, y); | ||
| 191 | break; | ||
| 192 | default: | ||
| 193 | DRAW_SETPIXELXY4_RGB(x, y); | ||
| 194 | break; | ||
| 195 | } | ||
| 196 | return true; | ||
| 197 | default: | ||
| 198 | return SDL_Unsupported(); | ||
| 199 | } | ||
| 200 | } | ||
| 201 | |||
| 202 | static bool SDL_BlendPoint_RGBA(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, | ||
| 203 | Uint8 g, Uint8 b, Uint8 a) | ||
| 204 | { | ||
| 205 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 206 | unsigned inva = 0xff - a; | ||
| 207 | |||
| 208 | switch (fmt->bytes_per_pixel) { | ||
| 209 | case 4: | ||
| 210 | switch (blendMode) { | ||
| 211 | case SDL_BLENDMODE_BLEND: | ||
| 212 | DRAW_SETPIXELXY4_BLEND_RGBA(x, y); | ||
| 213 | break; | ||
| 214 | case SDL_BLENDMODE_BLEND_PREMULTIPLIED: | ||
| 215 | DRAW_SETPIXELXY4_BLEND_CLAMPED_RGBA(x, y); | ||
| 216 | break; | ||
| 217 | case SDL_BLENDMODE_ADD: | ||
| 218 | case SDL_BLENDMODE_ADD_PREMULTIPLIED: | ||
| 219 | DRAW_SETPIXELXY4_ADD_RGBA(x, y); | ||
| 220 | break; | ||
| 221 | case SDL_BLENDMODE_MOD: | ||
| 222 | DRAW_SETPIXELXY4_MOD_RGBA(x, y); | ||
| 223 | break; | ||
| 224 | case SDL_BLENDMODE_MUL: | ||
| 225 | DRAW_SETPIXELXY4_MUL_RGBA(x, y); | ||
| 226 | break; | ||
| 227 | default: | ||
| 228 | DRAW_SETPIXELXY4_RGBA(x, y); | ||
| 229 | break; | ||
| 230 | } | ||
| 231 | return true; | ||
| 232 | default: | ||
| 233 | return SDL_Unsupported(); | ||
| 234 | } | ||
| 235 | } | ||
| 236 | |||
| 237 | bool SDL_BlendPoint(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 238 | { | ||
| 239 | if (!SDL_SurfaceValid(dst)) { | ||
| 240 | return SDL_InvalidParamError("SDL_BlendPoint(): dst"); | ||
| 241 | } | ||
| 242 | |||
| 243 | // This function doesn't work on surfaces < 8 bpp | ||
| 244 | if (SDL_BITSPERPIXEL(dst->format) < 8) { | ||
| 245 | return SDL_SetError("SDL_BlendPoint(): Unsupported surface format"); | ||
| 246 | } | ||
| 247 | |||
| 248 | // Perform clipping | ||
| 249 | if (x < dst->clip_rect.x || y < dst->clip_rect.y || | ||
| 250 | x >= (dst->clip_rect.x + dst->clip_rect.w) || | ||
| 251 | y >= (dst->clip_rect.y + dst->clip_rect.h)) { | ||
| 252 | return true; | ||
| 253 | } | ||
| 254 | |||
| 255 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 256 | r = DRAW_MUL(r, a); | ||
| 257 | g = DRAW_MUL(g, a); | ||
| 258 | b = DRAW_MUL(b, a); | ||
| 259 | } | ||
| 260 | |||
| 261 | switch (dst->fmt->bits_per_pixel) { | ||
| 262 | case 15: | ||
| 263 | switch (dst->fmt->Rmask) { | ||
| 264 | case 0x7C00: | ||
| 265 | return SDL_BlendPoint_RGB555(dst, x, y, blendMode, r, g, b, a); | ||
| 266 | } | ||
| 267 | break; | ||
| 268 | case 16: | ||
| 269 | switch (dst->fmt->Rmask) { | ||
| 270 | case 0xF800: | ||
| 271 | return SDL_BlendPoint_RGB565(dst, x, y, blendMode, r, g, b, a); | ||
| 272 | } | ||
| 273 | break; | ||
| 274 | case 32: | ||
| 275 | switch (dst->fmt->Rmask) { | ||
| 276 | case 0x00FF0000: | ||
| 277 | if (!dst->fmt->Amask) { | ||
| 278 | return SDL_BlendPoint_XRGB8888(dst, x, y, blendMode, r, g, b, a); | ||
| 279 | } else { | ||
| 280 | return SDL_BlendPoint_ARGB8888(dst, x, y, blendMode, r, g, b, a); | ||
| 281 | } | ||
| 282 | // break; -Wunreachable-code-break | ||
| 283 | } | ||
| 284 | break; | ||
| 285 | default: | ||
| 286 | break; | ||
| 287 | } | ||
| 288 | |||
| 289 | if (!dst->fmt->Amask) { | ||
| 290 | return SDL_BlendPoint_RGB(dst, x, y, blendMode, r, g, b, a); | ||
| 291 | } else { | ||
| 292 | return SDL_BlendPoint_RGBA(dst, x, y, blendMode, r, g, b, a); | ||
| 293 | } | ||
| 294 | } | ||
| 295 | |||
| 296 | bool SDL_BlendPoints(SDL_Surface *dst, const SDL_Point *points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) | ||
| 297 | { | ||
| 298 | int minx, miny; | ||
| 299 | int maxx, maxy; | ||
| 300 | int i; | ||
| 301 | int x, y; | ||
| 302 | bool (*func)(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; | ||
| 303 | bool result = true; | ||
| 304 | |||
| 305 | if (!SDL_SurfaceValid(dst)) { | ||
| 306 | return SDL_InvalidParamError("SDL_BlendPoints(): dst"); | ||
| 307 | } | ||
| 308 | |||
| 309 | // This function doesn't work on surfaces < 8 bpp | ||
| 310 | if (dst->fmt->bits_per_pixel < 8) { | ||
| 311 | return SDL_SetError("SDL_BlendPoints(): Unsupported surface format"); | ||
| 312 | } | ||
| 313 | |||
| 314 | if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { | ||
| 315 | r = DRAW_MUL(r, a); | ||
| 316 | g = DRAW_MUL(g, a); | ||
| 317 | b = DRAW_MUL(b, a); | ||
| 318 | } | ||
| 319 | |||
| 320 | // FIXME: Does this function pointer slow things down significantly? | ||
| 321 | switch (dst->fmt->bits_per_pixel) { | ||
| 322 | case 15: | ||
| 323 | switch (dst->fmt->Rmask) { | ||
| 324 | case 0x7C00: | ||
| 325 | func = SDL_BlendPoint_RGB555; | ||
| 326 | break; | ||
| 327 | } | ||
| 328 | break; | ||
| 329 | case 16: | ||
| 330 | switch (dst->fmt->Rmask) { | ||
| 331 | case 0xF800: | ||
| 332 | func = SDL_BlendPoint_RGB565; | ||
| 333 | break; | ||
| 334 | } | ||
| 335 | break; | ||
| 336 | case 32: | ||
| 337 | switch (dst->fmt->Rmask) { | ||
| 338 | case 0x00FF0000: | ||
| 339 | if (!dst->fmt->Amask) { | ||
| 340 | func = SDL_BlendPoint_XRGB8888; | ||
| 341 | } else { | ||
| 342 | func = SDL_BlendPoint_ARGB8888; | ||
| 343 | } | ||
| 344 | break; | ||
| 345 | } | ||
| 346 | break; | ||
| 347 | default: | ||
| 348 | break; | ||
| 349 | } | ||
| 350 | |||
| 351 | if (!func) { | ||
| 352 | if (!dst->fmt->Amask) { | ||
| 353 | func = SDL_BlendPoint_RGB; | ||
| 354 | } else { | ||
| 355 | func = SDL_BlendPoint_RGBA; | ||
| 356 | } | ||
| 357 | } | ||
| 358 | |||
| 359 | minx = dst->clip_rect.x; | ||
| 360 | maxx = dst->clip_rect.x + dst->clip_rect.w - 1; | ||
| 361 | miny = dst->clip_rect.y; | ||
| 362 | maxy = dst->clip_rect.y + dst->clip_rect.h - 1; | ||
| 363 | |||
| 364 | for (i = 0; i < count; ++i) { | ||
| 365 | x = points[i].x; | ||
| 366 | y = points[i].y; | ||
| 367 | |||
| 368 | if (x < minx || x > maxx || y < miny || y > maxy) { | ||
| 369 | continue; | ||
| 370 | } | ||
| 371 | result = func(dst, x, y, blendMode, r, g, b, a); | ||
| 372 | } | ||
| 373 | return result; | ||
| 374 | } | ||
| 375 | |||
| 376 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_blendpoint.h b/SDL-3.2.8/src/render/software/SDL_blendpoint.h new file mode 100644 index 0000000..6dfe49a --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_blendpoint.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_blendpoint_h_ | ||
| 23 | #define SDL_blendpoint_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | extern bool SDL_BlendPoint(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); | ||
| 28 | extern bool SDL_BlendPoints(SDL_Surface *dst, const SDL_Point *points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); | ||
| 29 | |||
| 30 | #endif // SDL_blendpoint_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_draw.h b/SDL-3.2.8/src/render/software/SDL_draw.h new file mode 100644 index 0000000..ec77527 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_draw.h | |||
| @@ -0,0 +1,723 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #include "../../video/SDL_surface_c.h" | ||
| 24 | |||
| 25 | /* This code assumes that r, g, b, a are the source color, | ||
| 26 | * and in the blend and add case, the RGB values are premultiplied by a. | ||
| 27 | */ | ||
| 28 | |||
| 29 | #define DRAW_MUL(_a, _b) (((unsigned)(_a) * (_b)) / 255) | ||
| 30 | |||
| 31 | #define DRAW_FASTSETPIXEL(type) \ | ||
| 32 | *pixel = (type)color | ||
| 33 | |||
| 34 | #define DRAW_FASTSETPIXEL1 DRAW_FASTSETPIXEL(Uint8) | ||
| 35 | #define DRAW_FASTSETPIXEL2 DRAW_FASTSETPIXEL(Uint16) | ||
| 36 | #define DRAW_FASTSETPIXEL4 DRAW_FASTSETPIXEL(Uint32) | ||
| 37 | |||
| 38 | #define DRAW_FASTSETPIXELXY(x, y, type, bpp, color) \ | ||
| 39 | *(type *)((Uint8 *)dst->pixels + (y)*dst->pitch + (x)*bpp) = (type)color | ||
| 40 | |||
| 41 | #define DRAW_FASTSETPIXELXY1(x, y) DRAW_FASTSETPIXELXY(x, y, Uint8, 1, color) | ||
| 42 | #define DRAW_FASTSETPIXELXY2(x, y) DRAW_FASTSETPIXELXY(x, y, Uint16, 2, color) | ||
| 43 | #define DRAW_FASTSETPIXELXY4(x, y) DRAW_FASTSETPIXELXY(x, y, Uint32, 4, color) | ||
| 44 | |||
| 45 | #define DRAW_SETPIXEL(setpixel) \ | ||
| 46 | do { \ | ||
| 47 | unsigned sr = r, sg = g, sb = b, sa = a; \ | ||
| 48 | (void)sa; \ | ||
| 49 | setpixel; \ | ||
| 50 | } while (0) | ||
| 51 | |||
| 52 | #define DRAW_SETPIXEL_BLEND(getpixel, setpixel) \ | ||
| 53 | do { \ | ||
| 54 | unsigned sr, sg, sb, sa = 0xFF; \ | ||
| 55 | getpixel; \ | ||
| 56 | sr = DRAW_MUL(inva, sr) + r; \ | ||
| 57 | sg = DRAW_MUL(inva, sg) + g; \ | ||
| 58 | sb = DRAW_MUL(inva, sb) + b; \ | ||
| 59 | sa = DRAW_MUL(inva, sa) + a; \ | ||
| 60 | setpixel; \ | ||
| 61 | } while (0) | ||
| 62 | |||
| 63 | #define DRAW_SETPIXEL_BLEND_CLAMPED(getpixel, setpixel) \ | ||
| 64 | do { \ | ||
| 65 | unsigned sr, sg, sb, sa = 0xFF; \ | ||
| 66 | getpixel; \ | ||
| 67 | sr = DRAW_MUL(inva, sr) + r; \ | ||
| 68 | if (sr > 0xff) \ | ||
| 69 | sr = 0xff; \ | ||
| 70 | sg = DRAW_MUL(inva, sg) + g; \ | ||
| 71 | if (sg > 0xff) \ | ||
| 72 | sg = 0xff; \ | ||
| 73 | sb = DRAW_MUL(inva, sb) + b; \ | ||
| 74 | if (sb > 0xff) \ | ||
| 75 | sb = 0xff; \ | ||
| 76 | sa = DRAW_MUL(inva, sa) + a; \ | ||
| 77 | if (sa > 0xff) \ | ||
| 78 | sa = 0xff; \ | ||
| 79 | setpixel; \ | ||
| 80 | } while (0) | ||
| 81 | |||
| 82 | #define DRAW_SETPIXEL_ADD(getpixel, setpixel) \ | ||
| 83 | do { \ | ||
| 84 | unsigned sr, sg, sb, sa; \ | ||
| 85 | (void)sa; \ | ||
| 86 | getpixel; \ | ||
| 87 | sr += r; \ | ||
| 88 | if (sr > 0xff) \ | ||
| 89 | sr = 0xff; \ | ||
| 90 | sg += g; \ | ||
| 91 | if (sg > 0xff) \ | ||
| 92 | sg = 0xff; \ | ||
| 93 | sb += b; \ | ||
| 94 | if (sb > 0xff) \ | ||
| 95 | sb = 0xff; \ | ||
| 96 | setpixel; \ | ||
| 97 | } while (0) | ||
| 98 | |||
| 99 | #define DRAW_SETPIXEL_MOD(getpixel, setpixel) \ | ||
| 100 | do { \ | ||
| 101 | unsigned sr, sg, sb, sa; \ | ||
| 102 | (void)sa; \ | ||
| 103 | getpixel; \ | ||
| 104 | sr = DRAW_MUL(sr, r); \ | ||
| 105 | sg = DRAW_MUL(sg, g); \ | ||
| 106 | sb = DRAW_MUL(sb, b); \ | ||
| 107 | setpixel; \ | ||
| 108 | } while (0) | ||
| 109 | |||
| 110 | #define DRAW_SETPIXEL_MUL(getpixel, setpixel) \ | ||
| 111 | do { \ | ||
| 112 | unsigned sr, sg, sb, sa; \ | ||
| 113 | (void)sa; \ | ||
| 114 | getpixel; \ | ||
| 115 | sr = DRAW_MUL(sr, r) + DRAW_MUL(inva, sr); \ | ||
| 116 | if (sr > 0xff) \ | ||
| 117 | sr = 0xff; \ | ||
| 118 | sg = DRAW_MUL(sg, g) + DRAW_MUL(inva, sg); \ | ||
| 119 | if (sg > 0xff) \ | ||
| 120 | sg = 0xff; \ | ||
| 121 | sb = DRAW_MUL(sb, b) + DRAW_MUL(inva, sb); \ | ||
| 122 | if (sb > 0xff) \ | ||
| 123 | sb = 0xff; \ | ||
| 124 | setpixel; \ | ||
| 125 | } while (0) | ||
| 126 | |||
| 127 | #define DRAW_SETPIXELXY(x, y, type, bpp, op) \ | ||
| 128 | do { \ | ||
| 129 | type *pixel = (type *)((Uint8 *)dst->pixels + (y)*dst->pitch + (x)*bpp); \ | ||
| 130 | op; \ | ||
| 131 | } while (0) | ||
| 132 | |||
| 133 | /* | ||
| 134 | * Define draw operators for RGB555 | ||
| 135 | */ | ||
| 136 | |||
| 137 | #define DRAW_SETPIXEL_RGB555 \ | ||
| 138 | DRAW_SETPIXEL(RGB555_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 139 | |||
| 140 | #define DRAW_SETPIXEL_BLEND_RGB555 \ | ||
| 141 | DRAW_SETPIXEL_BLEND(RGB_FROM_RGB555(*pixel, sr, sg, sb), \ | ||
| 142 | RGB555_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 143 | |||
| 144 | #define DRAW_SETPIXEL_BLEND_CLAMPED_RGB555 \ | ||
| 145 | DRAW_SETPIXEL_BLEND_CLAMPED(RGB_FROM_RGB555(*pixel, sr, sg, sb), \ | ||
| 146 | RGB555_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 147 | |||
| 148 | #define DRAW_SETPIXEL_ADD_RGB555 \ | ||
| 149 | DRAW_SETPIXEL_ADD(RGB_FROM_RGB555(*pixel, sr, sg, sb), \ | ||
| 150 | RGB555_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 151 | |||
| 152 | #define DRAW_SETPIXEL_MOD_RGB555 \ | ||
| 153 | DRAW_SETPIXEL_MOD(RGB_FROM_RGB555(*pixel, sr, sg, sb), \ | ||
| 154 | RGB555_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 155 | |||
| 156 | #define DRAW_SETPIXEL_MUL_RGB555 \ | ||
| 157 | DRAW_SETPIXEL_MUL(RGB_FROM_RGB555(*pixel, sr, sg, sb), \ | ||
| 158 | RGB555_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 159 | |||
| 160 | #define DRAW_SETPIXELXY_RGB555(x, y) \ | ||
| 161 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_RGB555) | ||
| 162 | |||
| 163 | #define DRAW_SETPIXELXY_BLEND_RGB555(x, y) \ | ||
| 164 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_BLEND_RGB555) | ||
| 165 | |||
| 166 | #define DRAW_SETPIXELXY_BLEND_CLAMPED_RGB555(x, y) \ | ||
| 167 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_BLEND_CLAMPED_RGB555) | ||
| 168 | |||
| 169 | #define DRAW_SETPIXELXY_ADD_RGB555(x, y) \ | ||
| 170 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_ADD_RGB555) | ||
| 171 | |||
| 172 | #define DRAW_SETPIXELXY_MOD_RGB555(x, y) \ | ||
| 173 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MOD_RGB555) | ||
| 174 | |||
| 175 | #define DRAW_SETPIXELXY_MUL_RGB555(x, y) \ | ||
| 176 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MUL_RGB555) | ||
| 177 | |||
| 178 | /* | ||
| 179 | * Define draw operators for RGB565 | ||
| 180 | */ | ||
| 181 | |||
| 182 | #define DRAW_SETPIXEL_RGB565 \ | ||
| 183 | DRAW_SETPIXEL(RGB565_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 184 | |||
| 185 | #define DRAW_SETPIXEL_BLEND_RGB565 \ | ||
| 186 | DRAW_SETPIXEL_BLEND(RGB_FROM_RGB565(*pixel, sr, sg, sb), \ | ||
| 187 | RGB565_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 188 | |||
| 189 | #define DRAW_SETPIXEL_BLEND_CLAMPED_RGB565 \ | ||
| 190 | DRAW_SETPIXEL_BLEND_CLAMPED(RGB_FROM_RGB565(*pixel, sr, sg, sb), \ | ||
| 191 | RGB565_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 192 | |||
| 193 | #define DRAW_SETPIXEL_ADD_RGB565 \ | ||
| 194 | DRAW_SETPIXEL_ADD(RGB_FROM_RGB565(*pixel, sr, sg, sb), \ | ||
| 195 | RGB565_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 196 | |||
| 197 | #define DRAW_SETPIXEL_MOD_RGB565 \ | ||
| 198 | DRAW_SETPIXEL_MOD(RGB_FROM_RGB565(*pixel, sr, sg, sb), \ | ||
| 199 | RGB565_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 200 | |||
| 201 | #define DRAW_SETPIXEL_MUL_RGB565 \ | ||
| 202 | DRAW_SETPIXEL_MUL(RGB_FROM_RGB565(*pixel, sr, sg, sb), \ | ||
| 203 | RGB565_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 204 | |||
| 205 | #define DRAW_SETPIXELXY_RGB565(x, y) \ | ||
| 206 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_RGB565) | ||
| 207 | |||
| 208 | #define DRAW_SETPIXELXY_BLEND_RGB565(x, y) \ | ||
| 209 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_BLEND_RGB565) | ||
| 210 | |||
| 211 | #define DRAW_SETPIXELXY_BLEND_CLAMPED_RGB565(x, y) \ | ||
| 212 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_BLEND_CLAMPED_RGB565) | ||
| 213 | |||
| 214 | #define DRAW_SETPIXELXY_ADD_RGB565(x, y) \ | ||
| 215 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_ADD_RGB565) | ||
| 216 | |||
| 217 | #define DRAW_SETPIXELXY_MOD_RGB565(x, y) \ | ||
| 218 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MOD_RGB565) | ||
| 219 | |||
| 220 | #define DRAW_SETPIXELXY_MUL_RGB565(x, y) \ | ||
| 221 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MUL_RGB565) | ||
| 222 | |||
| 223 | /* | ||
| 224 | * Define draw operators for RGB888 | ||
| 225 | */ | ||
| 226 | |||
| 227 | #define DRAW_SETPIXEL_XRGB8888 \ | ||
| 228 | DRAW_SETPIXEL(XRGB8888_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 229 | |||
| 230 | #define DRAW_SETPIXEL_BLEND_XRGB8888 \ | ||
| 231 | DRAW_SETPIXEL_BLEND(RGB_FROM_XRGB8888(*pixel, sr, sg, sb), \ | ||
| 232 | XRGB8888_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 233 | |||
| 234 | #define DRAW_SETPIXEL_BLEND_CLAMPED_XRGB8888 \ | ||
| 235 | DRAW_SETPIXEL_BLEND_CLAMPED(RGB_FROM_XRGB8888(*pixel, sr, sg, sb), \ | ||
| 236 | XRGB8888_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 237 | |||
| 238 | #define DRAW_SETPIXEL_ADD_XRGB8888 \ | ||
| 239 | DRAW_SETPIXEL_ADD(RGB_FROM_XRGB8888(*pixel, sr, sg, sb), \ | ||
| 240 | XRGB8888_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 241 | |||
| 242 | #define DRAW_SETPIXEL_MOD_XRGB8888 \ | ||
| 243 | DRAW_SETPIXEL_MOD(RGB_FROM_XRGB8888(*pixel, sr, sg, sb), \ | ||
| 244 | XRGB8888_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 245 | |||
| 246 | #define DRAW_SETPIXEL_MUL_XRGB8888 \ | ||
| 247 | DRAW_SETPIXEL_MUL(RGB_FROM_XRGB8888(*pixel, sr, sg, sb), \ | ||
| 248 | XRGB8888_FROM_RGB(*pixel, sr, sg, sb)) | ||
| 249 | |||
| 250 | #define DRAW_SETPIXELXY_XRGB8888(x, y) \ | ||
| 251 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_XRGB8888) | ||
| 252 | |||
| 253 | #define DRAW_SETPIXELXY_BLEND_XRGB8888(x, y) \ | ||
| 254 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_XRGB8888) | ||
| 255 | |||
| 256 | #define DRAW_SETPIXELXY_BLEND_CLAMPED_XRGB8888(x, y) \ | ||
| 257 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_CLAMPED_XRGB8888) | ||
| 258 | |||
| 259 | #define DRAW_SETPIXELXY_ADD_XRGB8888(x, y) \ | ||
| 260 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_ADD_XRGB8888) | ||
| 261 | |||
| 262 | #define DRAW_SETPIXELXY_MOD_XRGB8888(x, y) \ | ||
| 263 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_XRGB8888) | ||
| 264 | |||
| 265 | #define DRAW_SETPIXELXY_MUL_XRGB8888(x, y) \ | ||
| 266 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_XRGB8888) | ||
| 267 | |||
| 268 | /* | ||
| 269 | * Define draw operators for ARGB8888 | ||
| 270 | */ | ||
| 271 | |||
| 272 | #define DRAW_SETPIXEL_ARGB8888 \ | ||
| 273 | DRAW_SETPIXEL(ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa)) | ||
| 274 | |||
| 275 | #define DRAW_SETPIXEL_BLEND_ARGB8888 \ | ||
| 276 | DRAW_SETPIXEL_BLEND(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \ | ||
| 277 | ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa)) | ||
| 278 | |||
| 279 | #define DRAW_SETPIXEL_BLEND_CLAMPED_ARGB8888 \ | ||
| 280 | DRAW_SETPIXEL_BLEND_CLAMPED(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \ | ||
| 281 | ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa)) | ||
| 282 | |||
| 283 | #define DRAW_SETPIXEL_ADD_ARGB8888 \ | ||
| 284 | DRAW_SETPIXEL_ADD(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \ | ||
| 285 | ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa)) | ||
| 286 | |||
| 287 | #define DRAW_SETPIXEL_MOD_ARGB8888 \ | ||
| 288 | DRAW_SETPIXEL_MOD(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \ | ||
| 289 | ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa)) | ||
| 290 | |||
| 291 | #define DRAW_SETPIXEL_MUL_ARGB8888 \ | ||
| 292 | DRAW_SETPIXEL_MUL(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \ | ||
| 293 | ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa)) | ||
| 294 | |||
| 295 | #define DRAW_SETPIXELXY_ARGB8888(x, y) \ | ||
| 296 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_ARGB8888) | ||
| 297 | |||
| 298 | #define DRAW_SETPIXELXY_BLEND_ARGB8888(x, y) \ | ||
| 299 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_ARGB8888) | ||
| 300 | |||
| 301 | #define DRAW_SETPIXELXY_BLEND_CLAMPED_ARGB8888(x, y) \ | ||
| 302 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_CLAMPED_ARGB8888) | ||
| 303 | |||
| 304 | #define DRAW_SETPIXELXY_ADD_ARGB8888(x, y) \ | ||
| 305 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_ADD_ARGB8888) | ||
| 306 | |||
| 307 | #define DRAW_SETPIXELXY_MOD_ARGB8888(x, y) \ | ||
| 308 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_ARGB8888) | ||
| 309 | |||
| 310 | #define DRAW_SETPIXELXY_MUL_ARGB8888(x, y) \ | ||
| 311 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_ARGB8888) | ||
| 312 | |||
| 313 | /* | ||
| 314 | * Define draw operators for general RGB | ||
| 315 | */ | ||
| 316 | |||
| 317 | #define DRAW_SETPIXEL_RGB \ | ||
| 318 | DRAW_SETPIXEL(PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb)) | ||
| 319 | |||
| 320 | #define DRAW_SETPIXEL_BLEND_RGB \ | ||
| 321 | DRAW_SETPIXEL_BLEND(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \ | ||
| 322 | PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb)) | ||
| 323 | |||
| 324 | #define DRAW_SETPIXEL_BLEND_CLAMPED_RGB \ | ||
| 325 | DRAW_SETPIXEL_BLEND_CLAMPED(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \ | ||
| 326 | PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb)) | ||
| 327 | |||
| 328 | #define DRAW_SETPIXEL_ADD_RGB \ | ||
| 329 | DRAW_SETPIXEL_ADD(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \ | ||
| 330 | PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb)) | ||
| 331 | |||
| 332 | #define DRAW_SETPIXEL_MOD_RGB \ | ||
| 333 | DRAW_SETPIXEL_MOD(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \ | ||
| 334 | PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb)) | ||
| 335 | |||
| 336 | #define DRAW_SETPIXEL_MUL_RGB \ | ||
| 337 | DRAW_SETPIXEL_MUL(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \ | ||
| 338 | PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb)) | ||
| 339 | |||
| 340 | #define DRAW_SETPIXELXY2_RGB(x, y) \ | ||
| 341 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_RGB) | ||
| 342 | |||
| 343 | #define DRAW_SETPIXELXY4_RGB(x, y) \ | ||
| 344 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_RGB) | ||
| 345 | |||
| 346 | #define DRAW_SETPIXELXY2_BLEND_RGB(x, y) \ | ||
| 347 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_BLEND_RGB) | ||
| 348 | |||
| 349 | #define DRAW_SETPIXELXY2_BLEND_CLAMPED_RGB(x, y) \ | ||
| 350 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_BLEND_CLAMPED_RGB) | ||
| 351 | |||
| 352 | #define DRAW_SETPIXELXY4_BLEND_RGB(x, y) \ | ||
| 353 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_RGB) | ||
| 354 | |||
| 355 | #define DRAW_SETPIXELXY4_BLEND_CLAMPED_RGB(x, y) \ | ||
| 356 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_CLAMPED_RGB) | ||
| 357 | |||
| 358 | #define DRAW_SETPIXELXY2_ADD_RGB(x, y) \ | ||
| 359 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_ADD_RGB) | ||
| 360 | |||
| 361 | #define DRAW_SETPIXELXY4_ADD_RGB(x, y) \ | ||
| 362 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_ADD_RGB) | ||
| 363 | |||
| 364 | #define DRAW_SETPIXELXY2_MOD_RGB(x, y) \ | ||
| 365 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MOD_RGB) | ||
| 366 | |||
| 367 | #define DRAW_SETPIXELXY4_MOD_RGB(x, y) \ | ||
| 368 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_RGB) | ||
| 369 | |||
| 370 | #define DRAW_SETPIXELXY2_MUL_RGB(x, y) \ | ||
| 371 | DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MUL_RGB) | ||
| 372 | |||
| 373 | #define DRAW_SETPIXELXY4_MUL_RGB(x, y) \ | ||
| 374 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_RGB) | ||
| 375 | |||
| 376 | /* | ||
| 377 | * Define draw operators for general RGBA | ||
| 378 | */ | ||
| 379 | |||
| 380 | #define DRAW_SETPIXEL_RGBA \ | ||
| 381 | DRAW_SETPIXEL(PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa)) | ||
| 382 | |||
| 383 | #define DRAW_SETPIXEL_BLEND_RGBA \ | ||
| 384 | DRAW_SETPIXEL_BLEND(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \ | ||
| 385 | PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa)) | ||
| 386 | |||
| 387 | #define DRAW_SETPIXEL_BLEND_CLAMPED_RGBA \ | ||
| 388 | DRAW_SETPIXEL_BLEND_CLAMPED(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \ | ||
| 389 | PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa)) | ||
| 390 | |||
| 391 | #define DRAW_SETPIXEL_ADD_RGBA \ | ||
| 392 | DRAW_SETPIXEL_ADD(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \ | ||
| 393 | PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa)) | ||
| 394 | |||
| 395 | #define DRAW_SETPIXEL_MOD_RGBA \ | ||
| 396 | DRAW_SETPIXEL_MOD(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \ | ||
| 397 | PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa)) | ||
| 398 | |||
| 399 | #define DRAW_SETPIXEL_MUL_RGBA \ | ||
| 400 | DRAW_SETPIXEL_MUL(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \ | ||
| 401 | PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa)) | ||
| 402 | |||
| 403 | #define DRAW_SETPIXELXY4_RGBA(x, y) \ | ||
| 404 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_RGBA) | ||
| 405 | |||
| 406 | #define DRAW_SETPIXELXY4_BLEND_RGBA(x, y) \ | ||
| 407 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_RGBA) | ||
| 408 | |||
| 409 | #define DRAW_SETPIXELXY4_BLEND_CLAMPED_RGBA(x, y) \ | ||
| 410 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_BLEND_CLAMPED_RGBA) | ||
| 411 | |||
| 412 | #define DRAW_SETPIXELXY4_ADD_RGBA(x, y) \ | ||
| 413 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_ADD_RGBA) | ||
| 414 | |||
| 415 | #define DRAW_SETPIXELXY4_MOD_RGBA(x, y) \ | ||
| 416 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_RGBA) | ||
| 417 | |||
| 418 | #define DRAW_SETPIXELXY4_MUL_RGBA(x, y) \ | ||
| 419 | DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_RGBA) | ||
| 420 | |||
| 421 | /* | ||
| 422 | * Define line drawing macro | ||
| 423 | */ | ||
| 424 | |||
| 425 | #define ABS(_x) ((_x) < 0 ? -(_x) : (_x)) | ||
| 426 | |||
| 427 | // Horizontal line | ||
| 428 | #define HLINE(type, op, draw_end) \ | ||
| 429 | { \ | ||
| 430 | int length; \ | ||
| 431 | int pitch = (dst->pitch / dst->fmt->bytes_per_pixel); \ | ||
| 432 | type *pixel; \ | ||
| 433 | if (x1 <= x2) { \ | ||
| 434 | pixel = (type *)dst->pixels + y1 * pitch + x1; \ | ||
| 435 | length = draw_end ? (x2 - x1 + 1) : (x2 - x1); \ | ||
| 436 | } else { \ | ||
| 437 | pixel = (type *)dst->pixels + y1 * pitch + x2; \ | ||
| 438 | if (!draw_end) { \ | ||
| 439 | ++pixel; \ | ||
| 440 | } \ | ||
| 441 | length = draw_end ? (x1 - x2 + 1) : (x1 - x2); \ | ||
| 442 | } \ | ||
| 443 | while (length--) { \ | ||
| 444 | op; \ | ||
| 445 | ++pixel; \ | ||
| 446 | } \ | ||
| 447 | } | ||
| 448 | |||
| 449 | // Vertical line | ||
| 450 | #define VLINE(type, op, draw_end) \ | ||
| 451 | { \ | ||
| 452 | int length; \ | ||
| 453 | int pitch = (dst->pitch / dst->fmt->bytes_per_pixel); \ | ||
| 454 | type *pixel; \ | ||
| 455 | if (y1 <= y2) { \ | ||
| 456 | pixel = (type *)dst->pixels + y1 * pitch + x1; \ | ||
| 457 | length = draw_end ? (y2 - y1 + 1) : (y2 - y1); \ | ||
| 458 | } else { \ | ||
| 459 | pixel = (type *)dst->pixels + y2 * pitch + x1; \ | ||
| 460 | if (!draw_end) { \ | ||
| 461 | pixel += pitch; \ | ||
| 462 | } \ | ||
| 463 | length = draw_end ? (y1 - y2 + 1) : (y1 - y2); \ | ||
| 464 | } \ | ||
| 465 | while (length--) { \ | ||
| 466 | op; \ | ||
| 467 | pixel += pitch; \ | ||
| 468 | } \ | ||
| 469 | } | ||
| 470 | |||
| 471 | // Diagonal line | ||
| 472 | #define DLINE(type, op, draw_end) \ | ||
| 473 | { \ | ||
| 474 | int length; \ | ||
| 475 | int pitch = (dst->pitch / dst->fmt->bytes_per_pixel); \ | ||
| 476 | type *pixel; \ | ||
| 477 | if (y1 <= y2) { \ | ||
| 478 | pixel = (type *)dst->pixels + y1 * pitch + x1; \ | ||
| 479 | if (x1 <= x2) { \ | ||
| 480 | ++pitch; \ | ||
| 481 | } else { \ | ||
| 482 | --pitch; \ | ||
| 483 | } \ | ||
| 484 | length = (y2 - y1); \ | ||
| 485 | } else { \ | ||
| 486 | pixel = (type *)dst->pixels + y2 * pitch + x2; \ | ||
| 487 | if (x2 <= x1) { \ | ||
| 488 | ++pitch; \ | ||
| 489 | } else { \ | ||
| 490 | --pitch; \ | ||
| 491 | } \ | ||
| 492 | if (!draw_end) { \ | ||
| 493 | pixel += pitch; \ | ||
| 494 | } \ | ||
| 495 | length = (y1 - y2); \ | ||
| 496 | } \ | ||
| 497 | if (draw_end) { \ | ||
| 498 | ++length; \ | ||
| 499 | } \ | ||
| 500 | while (length--) { \ | ||
| 501 | op; \ | ||
| 502 | pixel += pitch; \ | ||
| 503 | } \ | ||
| 504 | } | ||
| 505 | |||
| 506 | // Bresenham's line algorithm | ||
| 507 | #define BLINE(x1, y1, x2, y2, op, draw_end) \ | ||
| 508 | { \ | ||
| 509 | int i, deltax, deltay, numpixels; \ | ||
| 510 | int d, dinc1, dinc2; \ | ||
| 511 | int x, xinc1, xinc2; \ | ||
| 512 | int y, yinc1, yinc2; \ | ||
| 513 | \ | ||
| 514 | deltax = ABS(x2 - x1); \ | ||
| 515 | deltay = ABS(y2 - y1); \ | ||
| 516 | \ | ||
| 517 | if (deltax >= deltay) { \ | ||
| 518 | numpixels = deltax + 1; \ | ||
| 519 | d = (2 * deltay) - deltax; \ | ||
| 520 | dinc1 = deltay * 2; \ | ||
| 521 | dinc2 = (deltay - deltax) * 2; \ | ||
| 522 | xinc1 = 1; \ | ||
| 523 | xinc2 = 1; \ | ||
| 524 | yinc1 = 0; \ | ||
| 525 | yinc2 = 1; \ | ||
| 526 | } else { \ | ||
| 527 | numpixels = deltay + 1; \ | ||
| 528 | d = (2 * deltax) - deltay; \ | ||
| 529 | dinc1 = deltax * 2; \ | ||
| 530 | dinc2 = (deltax - deltay) * 2; \ | ||
| 531 | xinc1 = 0; \ | ||
| 532 | xinc2 = 1; \ | ||
| 533 | yinc1 = 1; \ | ||
| 534 | yinc2 = 1; \ | ||
| 535 | } \ | ||
| 536 | \ | ||
| 537 | if (x1 > x2) { \ | ||
| 538 | xinc1 = -xinc1; \ | ||
| 539 | xinc2 = -xinc2; \ | ||
| 540 | } \ | ||
| 541 | if (y1 > y2) { \ | ||
| 542 | yinc1 = -yinc1; \ | ||
| 543 | yinc2 = -yinc2; \ | ||
| 544 | } \ | ||
| 545 | \ | ||
| 546 | x = x1; \ | ||
| 547 | y = y1; \ | ||
| 548 | \ | ||
| 549 | if (!draw_end) { \ | ||
| 550 | --numpixels; \ | ||
| 551 | } \ | ||
| 552 | for (i = 0; i < numpixels; ++i) { \ | ||
| 553 | op(x, y); \ | ||
| 554 | if (d < 0) { \ | ||
| 555 | d += dinc1; \ | ||
| 556 | x += xinc1; \ | ||
| 557 | y += yinc1; \ | ||
| 558 | } else { \ | ||
| 559 | d += dinc2; \ | ||
| 560 | x += xinc2; \ | ||
| 561 | y += yinc2; \ | ||
| 562 | } \ | ||
| 563 | } \ | ||
| 564 | } | ||
| 565 | |||
| 566 | // Xiaolin Wu's line algorithm, based on Michael Abrash's implementation | ||
| 567 | #define WULINE(x1, y1, x2, y2, opaque_op, blend_op, draw_end) \ | ||
| 568 | { \ | ||
| 569 | Uint16 ErrorAdj, ErrorAcc; \ | ||
| 570 | Uint16 ErrorAccTemp, Weighting; \ | ||
| 571 | int DeltaX, DeltaY, Temp, XDir; \ | ||
| 572 | unsigned r, g, b, a, inva; \ | ||
| 573 | \ | ||
| 574 | /* Draw the initial pixel, which is always exactly intersected by \ | ||
| 575 | the line and so needs no weighting */ \ | ||
| 576 | opaque_op(x1, y1); \ | ||
| 577 | \ | ||
| 578 | /* Draw the final pixel, which is always exactly intersected by the line \ | ||
| 579 | and so needs no weighting */ \ | ||
| 580 | if (draw_end) { \ | ||
| 581 | opaque_op(x2, y2); \ | ||
| 582 | } \ | ||
| 583 | \ | ||
| 584 | /* Make sure the line runs top to bottom */ \ | ||
| 585 | if (y1 > y2) { \ | ||
| 586 | Temp = y1; \ | ||
| 587 | y1 = y2; \ | ||
| 588 | y2 = Temp; \ | ||
| 589 | Temp = x1; \ | ||
| 590 | x1 = x2; \ | ||
| 591 | x2 = Temp; \ | ||
| 592 | } \ | ||
| 593 | DeltaY = y2 - y1; \ | ||
| 594 | \ | ||
| 595 | if ((DeltaX = x2 - x1) >= 0) { \ | ||
| 596 | XDir = 1; \ | ||
| 597 | } else { \ | ||
| 598 | XDir = -1; \ | ||
| 599 | DeltaX = -DeltaX; /* make DeltaX positive */ \ | ||
| 600 | } \ | ||
| 601 | \ | ||
| 602 | /* line is not horizontal, diagonal, or vertical */ \ | ||
| 603 | ErrorAcc = 0; /* initialize the line error accumulator to 0 */ \ | ||
| 604 | \ | ||
| 605 | /* Is this an X-major or Y-major line? */ \ | ||
| 606 | if (DeltaY > DeltaX) { \ | ||
| 607 | /* Y-major line; calculate 16-bit fixed-point fractional part of a \ | ||
| 608 | pixel that X advances each time Y advances 1 pixel, truncating the \ | ||
| 609 | result so that we won't overrun the endpoint along the X axis */ \ | ||
| 610 | ErrorAdj = ((unsigned long)DeltaX << 16) / (unsigned long)DeltaY; \ | ||
| 611 | /* Draw all pixels other than the first and last */ \ | ||
| 612 | while (--DeltaY) { \ | ||
| 613 | ErrorAccTemp = ErrorAcc; /* remember current accumulated error */ \ | ||
| 614 | ErrorAcc += ErrorAdj; /* calculate error for next pixel */ \ | ||
| 615 | if (ErrorAcc <= ErrorAccTemp) { \ | ||
| 616 | /* The error accumulator turned over, so advance the X coord */ \ | ||
| 617 | x1 += XDir; \ | ||
| 618 | } \ | ||
| 619 | y1++; /* Y-major, so always advance Y */ \ | ||
| 620 | /* The IntensityBits most significant bits of ErrorAcc give us the \ | ||
| 621 | intensity weighting for this pixel, and the complement of the \ | ||
| 622 | weighting for the paired pixel */ \ | ||
| 623 | Weighting = ErrorAcc >> 8; \ | ||
| 624 | { \ | ||
| 625 | a = DRAW_MUL(_a, (Weighting ^ 255)); \ | ||
| 626 | r = DRAW_MUL(_r, a); \ | ||
| 627 | g = DRAW_MUL(_g, a); \ | ||
| 628 | b = DRAW_MUL(_b, a); \ | ||
| 629 | inva = (a ^ 0xFF); \ | ||
| 630 | blend_op(x1, y1); \ | ||
| 631 | } \ | ||
| 632 | { \ | ||
| 633 | a = DRAW_MUL(_a, Weighting); \ | ||
| 634 | r = DRAW_MUL(_r, a); \ | ||
| 635 | g = DRAW_MUL(_g, a); \ | ||
| 636 | b = DRAW_MUL(_b, a); \ | ||
| 637 | inva = (a ^ 0xFF); \ | ||
| 638 | blend_op(x1 + XDir, y1); \ | ||
| 639 | } \ | ||
| 640 | } \ | ||
| 641 | } else { \ | ||
| 642 | /* X-major line; calculate 16-bit fixed-point fractional part of a \ | ||
| 643 | pixel that Y advances each time X advances 1 pixel, truncating the \ | ||
| 644 | result to avoid overrunning the endpoint along the X axis */ \ | ||
| 645 | ErrorAdj = ((unsigned long)DeltaY << 16) / (unsigned long)DeltaX; \ | ||
| 646 | /* Draw all pixels other than the first and last */ \ | ||
| 647 | while (--DeltaX) { \ | ||
| 648 | ErrorAccTemp = ErrorAcc; /* remember current accumulated error */ \ | ||
| 649 | ErrorAcc += ErrorAdj; /* calculate error for next pixel */ \ | ||
| 650 | if (ErrorAcc <= ErrorAccTemp) { \ | ||
| 651 | /* The error accumulator turned over, so advance the Y coord */ \ | ||
| 652 | y1++; \ | ||
| 653 | } \ | ||
| 654 | x1 += XDir; /* X-major, so always advance X */ \ | ||
| 655 | /* The IntensityBits most significant bits of ErrorAcc give us the \ | ||
| 656 | intensity weighting for this pixel, and the complement of the \ | ||
| 657 | weighting for the paired pixel */ \ | ||
| 658 | Weighting = ErrorAcc >> 8; \ | ||
| 659 | { \ | ||
| 660 | a = DRAW_MUL(_a, (Weighting ^ 255)); \ | ||
| 661 | r = DRAW_MUL(_r, a); \ | ||
| 662 | g = DRAW_MUL(_g, a); \ | ||
| 663 | b = DRAW_MUL(_b, a); \ | ||
| 664 | inva = (a ^ 0xFF); \ | ||
| 665 | blend_op(x1, y1); \ | ||
| 666 | } \ | ||
| 667 | { \ | ||
| 668 | a = DRAW_MUL(_a, Weighting); \ | ||
| 669 | r = DRAW_MUL(_r, a); \ | ||
| 670 | g = DRAW_MUL(_g, a); \ | ||
| 671 | b = DRAW_MUL(_b, a); \ | ||
| 672 | inva = (a ^ 0xFF); \ | ||
| 673 | blend_op(x1, y1 + 1); \ | ||
| 674 | } \ | ||
| 675 | } \ | ||
| 676 | } \ | ||
| 677 | } | ||
| 678 | |||
| 679 | #ifdef AA_LINES | ||
| 680 | #define AALINE(x1, y1, x2, y2, opaque_op, blend_op, draw_end) \ | ||
| 681 | WULINE(x1, y1, x2, y2, opaque_op, blend_op, draw_end) | ||
| 682 | #else | ||
| 683 | #define AALINE(x1, y1, x2, y2, opaque_op, blend_op, draw_end) \ | ||
| 684 | BLINE(x1, y1, x2, y2, opaque_op, draw_end) | ||
| 685 | #endif | ||
| 686 | |||
| 687 | /* | ||
| 688 | * Define fill rect macro | ||
| 689 | */ | ||
| 690 | |||
| 691 | #define FILLRECT(type, op) \ | ||
| 692 | do { \ | ||
| 693 | int width = rect->w; \ | ||
| 694 | int height = rect->h; \ | ||
| 695 | int pitch = (dst->pitch / dst->fmt->bytes_per_pixel); \ | ||
| 696 | int skip = pitch - width; \ | ||
| 697 | type *pixel = (type *)dst->pixels + rect->y * pitch + rect->x; \ | ||
| 698 | while (height--) { \ | ||
| 699 | { \ | ||
| 700 | int n = (width + 3) / 4; \ | ||
| 701 | switch (width & 3) { \ | ||
| 702 | case 0: \ | ||
| 703 | do { \ | ||
| 704 | op; \ | ||
| 705 | pixel++; \ | ||
| 706 | SDL_FALLTHROUGH; \ | ||
| 707 | case 3: \ | ||
| 708 | op; \ | ||
| 709 | pixel++; \ | ||
| 710 | SDL_FALLTHROUGH; \ | ||
| 711 | case 2: \ | ||
| 712 | op; \ | ||
| 713 | pixel++; \ | ||
| 714 | SDL_FALLTHROUGH; \ | ||
| 715 | case 1: \ | ||
| 716 | op; \ | ||
| 717 | pixel++; \ | ||
| 718 | } while (--n > 0); \ | ||
| 719 | } \ | ||
| 720 | } \ | ||
| 721 | pixel += skip; \ | ||
| 722 | } \ | ||
| 723 | } while (0) | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_drawline.c b/SDL-3.2.8/src/render/software/SDL_drawline.c new file mode 100644 index 0000000..59ba268 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_drawline.c | |||
| @@ -0,0 +1,199 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include "SDL_draw.h" | ||
| 26 | #include "SDL_drawline.h" | ||
| 27 | #include "SDL_drawpoint.h" | ||
| 28 | |||
| 29 | static void SDL_DrawLine1(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint32 color, | ||
| 30 | bool draw_end) | ||
| 31 | { | ||
| 32 | if (y1 == y2) { | ||
| 33 | int length; | ||
| 34 | int pitch = (dst->pitch / dst->fmt->bytes_per_pixel); | ||
| 35 | Uint8 *pixel; | ||
| 36 | if (x1 <= x2) { | ||
| 37 | pixel = (Uint8 *)dst->pixels + y1 * pitch + x1; | ||
| 38 | length = draw_end ? (x2 - x1 + 1) : (x2 - x1); | ||
| 39 | } else { | ||
| 40 | pixel = (Uint8 *)dst->pixels + y1 * pitch + x2; | ||
| 41 | if (!draw_end) { | ||
| 42 | ++pixel; | ||
| 43 | } | ||
| 44 | length = draw_end ? (x1 - x2 + 1) : (x1 - x2); | ||
| 45 | } | ||
| 46 | SDL_memset(pixel, color, length); | ||
| 47 | } else if (x1 == x2) { | ||
| 48 | VLINE(Uint8, DRAW_FASTSETPIXEL1, draw_end); | ||
| 49 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 50 | DLINE(Uint8, DRAW_FASTSETPIXEL1, draw_end); | ||
| 51 | } else { | ||
| 52 | BLINE(x1, y1, x2, y2, DRAW_FASTSETPIXELXY1, draw_end); | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | static void SDL_DrawLine2(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint32 color, | ||
| 57 | bool draw_end) | ||
| 58 | { | ||
| 59 | if (y1 == y2) { | ||
| 60 | HLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); | ||
| 61 | } else if (x1 == x2) { | ||
| 62 | VLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); | ||
| 63 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 64 | DLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); | ||
| 65 | } else { | ||
| 66 | Uint8 _r, _g, _b, _a; | ||
| 67 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 68 | SDL_GetRGBA(color, fmt, dst->palette, &_r, &_g, &_b, &_a); | ||
| 69 | if (fmt->Rmask == 0x7C00) { | ||
| 70 | AALINE(x1, y1, x2, y2, | ||
| 71 | DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY_BLEND_RGB555, | ||
| 72 | draw_end); | ||
| 73 | } else if (fmt->Rmask == 0xF800) { | ||
| 74 | AALINE(x1, y1, x2, y2, | ||
| 75 | DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY_BLEND_RGB565, | ||
| 76 | draw_end); | ||
| 77 | } else { | ||
| 78 | AALINE(x1, y1, x2, y2, | ||
| 79 | DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY2_BLEND_RGB, | ||
| 80 | draw_end); | ||
| 81 | } | ||
| 82 | } | ||
| 83 | } | ||
| 84 | |||
| 85 | static void SDL_DrawLine4(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint32 color, | ||
| 86 | bool draw_end) | ||
| 87 | { | ||
| 88 | if (y1 == y2) { | ||
| 89 | HLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); | ||
| 90 | } else if (x1 == x2) { | ||
| 91 | VLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); | ||
| 92 | } else if (ABS(x1 - x2) == ABS(y1 - y2)) { | ||
| 93 | DLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); | ||
| 94 | } else { | ||
| 95 | Uint8 _r, _g, _b, _a; | ||
| 96 | const SDL_PixelFormatDetails *fmt = dst->fmt; | ||
| 97 | SDL_GetRGBA(color, fmt, dst->palette, &_r, &_g, &_b, &_a); | ||
| 98 | if (fmt->Rmask == 0x00FF0000) { | ||
| 99 | if (!fmt->Amask) { | ||
| 100 | AALINE(x1, y1, x2, y2, | ||
| 101 | DRAW_FASTSETPIXELXY4, DRAW_SETPIXELXY_BLEND_XRGB8888, | ||
| 102 | draw_end); | ||
| 103 | } else { | ||
| 104 | AALINE(x1, y1, x2, y2, | ||
| 105 | DRAW_FASTSETPIXELXY4, DRAW_SETPIXELXY_BLEND_ARGB8888, | ||
| 106 | draw_end); | ||
| 107 | } | ||
| 108 | } else { | ||
| 109 | AALINE(x1, y1, x2, y2, | ||
| 110 | DRAW_FASTSETPIXELXY4, DRAW_SETPIXELXY4_BLEND_RGB, | ||
| 111 | draw_end); | ||
| 112 | } | ||
| 113 | } | ||
| 114 | } | ||
| 115 | |||
| 116 | typedef void (*DrawLineFunc)(SDL_Surface *dst, | ||
| 117 | int x1, int y1, int x2, int y2, | ||
| 118 | Uint32 color, bool draw_end); | ||
| 119 | |||
| 120 | static DrawLineFunc SDL_CalculateDrawLineFunc(const SDL_PixelFormatDetails *fmt) | ||
| 121 | { | ||
| 122 | switch (fmt->bytes_per_pixel) { | ||
| 123 | case 1: | ||
| 124 | if (fmt->bits_per_pixel < 8) { | ||
| 125 | break; | ||
| 126 | } | ||
| 127 | return SDL_DrawLine1; | ||
| 128 | case 2: | ||
| 129 | return SDL_DrawLine2; | ||
| 130 | case 4: | ||
| 131 | return SDL_DrawLine4; | ||
| 132 | } | ||
| 133 | return NULL; | ||
| 134 | } | ||
| 135 | |||
| 136 | bool SDL_DrawLine(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint32 color) | ||
| 137 | { | ||
| 138 | DrawLineFunc func; | ||
| 139 | |||
| 140 | if (!SDL_SurfaceValid(dst)) { | ||
| 141 | return SDL_InvalidParamError("SDL_DrawLine(): dst"); | ||
| 142 | } | ||
| 143 | |||
| 144 | func = SDL_CalculateDrawLineFunc(dst->fmt); | ||
| 145 | if (!func) { | ||
| 146 | return SDL_SetError("SDL_DrawLine(): Unsupported surface format"); | ||
| 147 | } | ||
| 148 | |||
| 149 | // Perform clipping | ||
| 150 | // FIXME: We don't actually want to clip, as it may change line slope | ||
| 151 | if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { | ||
| 152 | return true; | ||
| 153 | } | ||
| 154 | |||
| 155 | func(dst, x1, y1, x2, y2, color, true); | ||
| 156 | return true; | ||
| 157 | } | ||
| 158 | |||
| 159 | bool SDL_DrawLines(SDL_Surface *dst, const SDL_Point *points, int count, Uint32 color) | ||
| 160 | { | ||
| 161 | int i; | ||
| 162 | int x1, y1; | ||
| 163 | int x2, y2; | ||
| 164 | bool draw_end; | ||
| 165 | DrawLineFunc func; | ||
| 166 | |||
| 167 | if (!SDL_SurfaceValid(dst)) { | ||
| 168 | return SDL_InvalidParamError("SDL_DrawLines(): dst"); | ||
| 169 | } | ||
| 170 | |||
| 171 | func = SDL_CalculateDrawLineFunc(dst->fmt); | ||
| 172 | if (!func) { | ||
| 173 | return SDL_SetError("SDL_DrawLines(): Unsupported surface format"); | ||
| 174 | } | ||
| 175 | |||
| 176 | for (i = 1; i < count; ++i) { | ||
| 177 | x1 = points[i - 1].x; | ||
| 178 | y1 = points[i - 1].y; | ||
| 179 | x2 = points[i].x; | ||
| 180 | y2 = points[i].y; | ||
| 181 | |||
| 182 | // Perform clipping | ||
| 183 | // FIXME: We don't actually want to clip, as it may change line slope | ||
| 184 | if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { | ||
| 185 | continue; | ||
| 186 | } | ||
| 187 | |||
| 188 | // Draw the end if the whole line is a single point or it was clipped | ||
| 189 | draw_end = ((x1 == x2) && (y1 == y2)) || (x2 != points[i].x || y2 != points[i].y); | ||
| 190 | |||
| 191 | func(dst, x1, y1, x2, y2, color, draw_end); | ||
| 192 | } | ||
| 193 | if (points[0].x != points[count - 1].x || points[0].y != points[count - 1].y) { | ||
| 194 | SDL_DrawPoint(dst, points[count - 1].x, points[count - 1].y, color); | ||
| 195 | } | ||
| 196 | return true; | ||
| 197 | } | ||
| 198 | |||
| 199 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_drawline.h b/SDL-3.2.8/src/render/software/SDL_drawline.h new file mode 100644 index 0000000..e88b2c3 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_drawline.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_drawline_h_ | ||
| 23 | #define SDL_drawline_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | extern bool SDL_DrawLine(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint32 color); | ||
| 28 | extern bool SDL_DrawLines(SDL_Surface *dst, const SDL_Point *points, int count, Uint32 color); | ||
| 29 | |||
| 30 | #endif // SDL_drawline_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_drawpoint.c b/SDL-3.2.8/src/render/software/SDL_drawpoint.c new file mode 100644 index 0000000..5aa28b3 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_drawpoint.c | |||
| @@ -0,0 +1,108 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include "SDL_draw.h" | ||
| 26 | #include "SDL_drawpoint.h" | ||
| 27 | |||
| 28 | bool SDL_DrawPoint(SDL_Surface *dst, int x, int y, Uint32 color) | ||
| 29 | { | ||
| 30 | if (!SDL_SurfaceValid(dst)) { | ||
| 31 | return SDL_InvalidParamError("SDL_DrawPoint(): dst"); | ||
| 32 | } | ||
| 33 | |||
| 34 | // This function doesn't work on surfaces < 8 bpp | ||
| 35 | if (dst->fmt->bits_per_pixel < 8) { | ||
| 36 | return SDL_SetError("SDL_DrawPoint(): Unsupported surface format"); | ||
| 37 | } | ||
| 38 | |||
| 39 | // Perform clipping | ||
| 40 | if (x < dst->clip_rect.x || y < dst->clip_rect.y || | ||
| 41 | x >= (dst->clip_rect.x + dst->clip_rect.w) || | ||
| 42 | y >= (dst->clip_rect.y + dst->clip_rect.h)) { | ||
| 43 | return true; | ||
| 44 | } | ||
| 45 | |||
| 46 | switch (dst->fmt->bytes_per_pixel) { | ||
| 47 | case 1: | ||
| 48 | DRAW_FASTSETPIXELXY1(x, y); | ||
| 49 | break; | ||
| 50 | case 2: | ||
| 51 | DRAW_FASTSETPIXELXY2(x, y); | ||
| 52 | break; | ||
| 53 | case 3: | ||
| 54 | return SDL_Unsupported(); | ||
| 55 | case 4: | ||
| 56 | DRAW_FASTSETPIXELXY4(x, y); | ||
| 57 | break; | ||
| 58 | } | ||
| 59 | return true; | ||
| 60 | } | ||
| 61 | |||
| 62 | bool SDL_DrawPoints(SDL_Surface *dst, const SDL_Point *points, int count, Uint32 color) | ||
| 63 | { | ||
| 64 | int minx, miny; | ||
| 65 | int maxx, maxy; | ||
| 66 | int i; | ||
| 67 | int x, y; | ||
| 68 | |||
| 69 | if (!SDL_SurfaceValid(dst)) { | ||
| 70 | return SDL_InvalidParamError("SDL_DrawPoints(): dst"); | ||
| 71 | } | ||
| 72 | |||
| 73 | // This function doesn't work on surfaces < 8 bpp | ||
| 74 | if (dst->fmt->bits_per_pixel < 8) { | ||
| 75 | return SDL_SetError("SDL_DrawPoints(): Unsupported surface format"); | ||
| 76 | } | ||
| 77 | |||
| 78 | minx = dst->clip_rect.x; | ||
| 79 | maxx = dst->clip_rect.x + dst->clip_rect.w - 1; | ||
| 80 | miny = dst->clip_rect.y; | ||
| 81 | maxy = dst->clip_rect.y + dst->clip_rect.h - 1; | ||
| 82 | |||
| 83 | for (i = 0; i < count; ++i) { | ||
| 84 | x = points[i].x; | ||
| 85 | y = points[i].y; | ||
| 86 | |||
| 87 | if (x < minx || x > maxx || y < miny || y > maxy) { | ||
| 88 | continue; | ||
| 89 | } | ||
| 90 | |||
| 91 | switch (dst->fmt->bytes_per_pixel) { | ||
| 92 | case 1: | ||
| 93 | DRAW_FASTSETPIXELXY1(x, y); | ||
| 94 | break; | ||
| 95 | case 2: | ||
| 96 | DRAW_FASTSETPIXELXY2(x, y); | ||
| 97 | break; | ||
| 98 | case 3: | ||
| 99 | return SDL_Unsupported(); | ||
| 100 | case 4: | ||
| 101 | DRAW_FASTSETPIXELXY4(x, y); | ||
| 102 | break; | ||
| 103 | } | ||
| 104 | } | ||
| 105 | return true; | ||
| 106 | } | ||
| 107 | |||
| 108 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_drawpoint.h b/SDL-3.2.8/src/render/software/SDL_drawpoint.h new file mode 100644 index 0000000..631e7aa --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_drawpoint.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_drawpoint_h_ | ||
| 23 | #define SDL_drawpoint_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | extern bool SDL_DrawPoint(SDL_Surface *dst, int x, int y, Uint32 color); | ||
| 28 | extern bool SDL_DrawPoints(SDL_Surface *dst, const SDL_Point *points, int count, Uint32 color); | ||
| 29 | |||
| 30 | #endif // SDL_drawpoint_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_render_sw.c b/SDL-3.2.8/src/render/software/SDL_render_sw.c new file mode 100644 index 0000000..2231724 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_render_sw.c | |||
| @@ -0,0 +1,1202 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include "../SDL_sysrender.h" | ||
| 26 | #include "SDL_render_sw_c.h" | ||
| 27 | |||
| 28 | #include "SDL_draw.h" | ||
| 29 | #include "SDL_blendfillrect.h" | ||
| 30 | #include "SDL_blendline.h" | ||
| 31 | #include "SDL_blendpoint.h" | ||
| 32 | #include "SDL_drawline.h" | ||
| 33 | #include "SDL_drawpoint.h" | ||
| 34 | #include "SDL_rotate.h" | ||
| 35 | #include "SDL_triangle.h" | ||
| 36 | #include "../../video/SDL_pixels_c.h" | ||
| 37 | |||
| 38 | // SDL surface based renderer implementation | ||
| 39 | |||
| 40 | typedef struct | ||
| 41 | { | ||
| 42 | const SDL_Rect *viewport; | ||
| 43 | const SDL_Rect *cliprect; | ||
| 44 | bool surface_cliprect_dirty; | ||
| 45 | SDL_Color color; | ||
| 46 | } SW_DrawStateCache; | ||
| 47 | |||
| 48 | typedef struct | ||
| 49 | { | ||
| 50 | SDL_Surface *surface; | ||
| 51 | SDL_Surface *window; | ||
| 52 | } SW_RenderData; | ||
| 53 | |||
| 54 | static SDL_Surface *SW_ActivateRenderer(SDL_Renderer *renderer) | ||
| 55 | { | ||
| 56 | SW_RenderData *data = (SW_RenderData *)renderer->internal; | ||
| 57 | |||
| 58 | if (!data->surface) { | ||
| 59 | data->surface = data->window; | ||
| 60 | } | ||
| 61 | if (!data->surface) { | ||
| 62 | SDL_Surface *surface = SDL_GetWindowSurface(renderer->window); | ||
| 63 | if (surface) { | ||
| 64 | data->surface = data->window = surface; | ||
| 65 | } | ||
| 66 | } | ||
| 67 | return data->surface; | ||
| 68 | } | ||
| 69 | |||
| 70 | static void SW_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 71 | { | ||
| 72 | SW_RenderData *data = (SW_RenderData *)renderer->internal; | ||
| 73 | |||
| 74 | if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) { | ||
| 75 | data->surface = NULL; | ||
| 76 | data->window = NULL; | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 80 | static bool SW_GetOutputSize(SDL_Renderer *renderer, int *w, int *h) | ||
| 81 | { | ||
| 82 | SW_RenderData *data = (SW_RenderData *)renderer->internal; | ||
| 83 | |||
| 84 | if (data->surface) { | ||
| 85 | if (w) { | ||
| 86 | *w = data->surface->w; | ||
| 87 | } | ||
| 88 | if (h) { | ||
| 89 | *h = data->surface->h; | ||
| 90 | } | ||
| 91 | return true; | ||
| 92 | } | ||
| 93 | |||
| 94 | if (renderer->window) { | ||
| 95 | SDL_GetWindowSizeInPixels(renderer->window, w, h); | ||
| 96 | return true; | ||
| 97 | } | ||
| 98 | |||
| 99 | return SDL_SetError("Software renderer doesn't have an output surface"); | ||
| 100 | } | ||
| 101 | |||
| 102 | static bool SW_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 103 | { | ||
| 104 | SDL_Surface *surface = SDL_CreateSurface(texture->w, texture->h, texture->format); | ||
| 105 | Uint8 r, g, b, a; | ||
| 106 | |||
| 107 | if (!SDL_SurfaceValid(surface)) { | ||
| 108 | return SDL_SetError("Cannot create surface"); | ||
| 109 | } | ||
| 110 | texture->internal = surface; | ||
| 111 | r = (Uint8)SDL_roundf(SDL_clamp(texture->color.r, 0.0f, 1.0f) * 255.0f); | ||
| 112 | g = (Uint8)SDL_roundf(SDL_clamp(texture->color.g, 0.0f, 1.0f) * 255.0f); | ||
| 113 | b = (Uint8)SDL_roundf(SDL_clamp(texture->color.b, 0.0f, 1.0f) * 255.0f); | ||
| 114 | a = (Uint8)SDL_roundf(SDL_clamp(texture->color.a, 0.0f, 1.0f) * 255.0f); | ||
| 115 | SDL_SetSurfaceColorMod(surface, r, g, b); | ||
| 116 | SDL_SetSurfaceAlphaMod(surface, a); | ||
| 117 | SDL_SetSurfaceBlendMode(surface, texture->blendMode); | ||
| 118 | |||
| 119 | /* Only RLE encode textures without an alpha channel since the RLE coder | ||
| 120 | * discards the color values of pixels with an alpha value of zero. | ||
| 121 | */ | ||
| 122 | if (texture->access == SDL_TEXTUREACCESS_STATIC && !SDL_ISPIXELFORMAT_ALPHA(surface->format)) { | ||
| 123 | SDL_SetSurfaceRLE(surface, 1); | ||
| 124 | } | ||
| 125 | |||
| 126 | return true; | ||
| 127 | } | ||
| 128 | |||
| 129 | static bool SW_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 130 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 131 | { | ||
| 132 | SDL_Surface *surface = (SDL_Surface *)texture->internal; | ||
| 133 | Uint8 *src, *dst; | ||
| 134 | int row; | ||
| 135 | size_t length; | ||
| 136 | |||
| 137 | if (SDL_MUSTLOCK(surface)) { | ||
| 138 | if (!SDL_LockSurface(surface)) { | ||
| 139 | return false; | ||
| 140 | } | ||
| 141 | } | ||
| 142 | src = (Uint8 *)pixels; | ||
| 143 | dst = (Uint8 *)surface->pixels + | ||
| 144 | rect->y * surface->pitch + | ||
| 145 | rect->x * surface->fmt->bytes_per_pixel; | ||
| 146 | length = (size_t)rect->w * surface->fmt->bytes_per_pixel; | ||
| 147 | for (row = 0; row < rect->h; ++row) { | ||
| 148 | SDL_memcpy(dst, src, length); | ||
| 149 | src += pitch; | ||
| 150 | dst += surface->pitch; | ||
| 151 | } | ||
| 152 | if (SDL_MUSTLOCK(surface)) { | ||
| 153 | SDL_UnlockSurface(surface); | ||
| 154 | } | ||
| 155 | return true; | ||
| 156 | } | ||
| 157 | |||
| 158 | static bool SW_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 159 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 160 | { | ||
| 161 | SDL_Surface *surface = (SDL_Surface *)texture->internal; | ||
| 162 | |||
| 163 | *pixels = | ||
| 164 | (void *)((Uint8 *)surface->pixels + rect->y * surface->pitch + | ||
| 165 | rect->x * surface->fmt->bytes_per_pixel); | ||
| 166 | *pitch = surface->pitch; | ||
| 167 | return true; | ||
| 168 | } | ||
| 169 | |||
| 170 | static void SW_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 171 | { | ||
| 172 | } | ||
| 173 | |||
| 174 | static void SW_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 175 | { | ||
| 176 | } | ||
| 177 | |||
| 178 | static bool SW_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 179 | { | ||
| 180 | SW_RenderData *data = (SW_RenderData *)renderer->internal; | ||
| 181 | |||
| 182 | if (texture) { | ||
| 183 | data->surface = (SDL_Surface *)texture->internal; | ||
| 184 | } else { | ||
| 185 | data->surface = data->window; | ||
| 186 | } | ||
| 187 | return true; | ||
| 188 | } | ||
| 189 | |||
| 190 | static bool SW_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 191 | { | ||
| 192 | return true; // nothing to do in this backend. | ||
| 193 | } | ||
| 194 | |||
| 195 | static bool SW_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 196 | { | ||
| 197 | SDL_Point *verts = (SDL_Point *)SDL_AllocateRenderVertices(renderer, count * sizeof(SDL_Point), 0, &cmd->data.draw.first); | ||
| 198 | int i; | ||
| 199 | |||
| 200 | if (!verts) { | ||
| 201 | return false; | ||
| 202 | } | ||
| 203 | |||
| 204 | cmd->data.draw.count = count; | ||
| 205 | |||
| 206 | for (i = 0; i < count; i++, verts++, points++) { | ||
| 207 | verts->x = (int)points->x; | ||
| 208 | verts->y = (int)points->y; | ||
| 209 | } | ||
| 210 | |||
| 211 | return true; | ||
| 212 | } | ||
| 213 | |||
| 214 | static bool SW_QueueFillRects(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FRect *rects, int count) | ||
| 215 | { | ||
| 216 | SDL_Rect *verts = (SDL_Rect *)SDL_AllocateRenderVertices(renderer, count * sizeof(SDL_Rect), 0, &cmd->data.draw.first); | ||
| 217 | int i; | ||
| 218 | |||
| 219 | if (!verts) { | ||
| 220 | return false; | ||
| 221 | } | ||
| 222 | |||
| 223 | cmd->data.draw.count = count; | ||
| 224 | |||
| 225 | for (i = 0; i < count; i++, verts++, rects++) { | ||
| 226 | verts->x = (int)rects->x; | ||
| 227 | verts->y = (int)rects->y; | ||
| 228 | verts->w = SDL_max((int)rects->w, 1); | ||
| 229 | verts->h = SDL_max((int)rects->h, 1); | ||
| 230 | } | ||
| 231 | |||
| 232 | return true; | ||
| 233 | } | ||
| 234 | |||
| 235 | static bool SW_QueueCopy(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 236 | const SDL_FRect *srcrect, const SDL_FRect *dstrect) | ||
| 237 | { | ||
| 238 | SDL_Rect *verts = (SDL_Rect *)SDL_AllocateRenderVertices(renderer, 2 * sizeof(SDL_Rect), 0, &cmd->data.draw.first); | ||
| 239 | |||
| 240 | if (!verts) { | ||
| 241 | return false; | ||
| 242 | } | ||
| 243 | |||
| 244 | cmd->data.draw.count = 1; | ||
| 245 | |||
| 246 | verts->x = (int)srcrect->x; | ||
| 247 | verts->y = (int)srcrect->y; | ||
| 248 | verts->w = (int)srcrect->w; | ||
| 249 | verts->h = (int)srcrect->h; | ||
| 250 | verts++; | ||
| 251 | |||
| 252 | verts->x = (int)dstrect->x; | ||
| 253 | verts->y = (int)dstrect->y; | ||
| 254 | verts->w = (int)dstrect->w; | ||
| 255 | verts->h = (int)dstrect->h; | ||
| 256 | |||
| 257 | return true; | ||
| 258 | } | ||
| 259 | |||
| 260 | typedef struct CopyExData | ||
| 261 | { | ||
| 262 | SDL_Rect srcrect; | ||
| 263 | SDL_Rect dstrect; | ||
| 264 | double angle; | ||
| 265 | SDL_FPoint center; | ||
| 266 | SDL_FlipMode flip; | ||
| 267 | float scale_x; | ||
| 268 | float scale_y; | ||
| 269 | } CopyExData; | ||
| 270 | |||
| 271 | static bool SW_QueueCopyEx(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 272 | const SDL_FRect *srcrect, const SDL_FRect *dstrect, | ||
| 273 | const double angle, const SDL_FPoint *center, const SDL_FlipMode flip, float scale_x, float scale_y) | ||
| 274 | { | ||
| 275 | CopyExData *verts = (CopyExData *)SDL_AllocateRenderVertices(renderer, sizeof(CopyExData), 0, &cmd->data.draw.first); | ||
| 276 | |||
| 277 | if (!verts) { | ||
| 278 | return false; | ||
| 279 | } | ||
| 280 | |||
| 281 | cmd->data.draw.count = 1; | ||
| 282 | |||
| 283 | verts->srcrect.x = (int)srcrect->x; | ||
| 284 | verts->srcrect.y = (int)srcrect->y; | ||
| 285 | verts->srcrect.w = (int)srcrect->w; | ||
| 286 | verts->srcrect.h = (int)srcrect->h; | ||
| 287 | verts->dstrect.x = (int)dstrect->x; | ||
| 288 | verts->dstrect.y = (int)dstrect->y; | ||
| 289 | verts->dstrect.w = (int)dstrect->w; | ||
| 290 | verts->dstrect.h = (int)dstrect->h; | ||
| 291 | verts->angle = angle; | ||
| 292 | SDL_copyp(&verts->center, center); | ||
| 293 | verts->flip = flip; | ||
| 294 | verts->scale_x = scale_x; | ||
| 295 | verts->scale_y = scale_y; | ||
| 296 | |||
| 297 | return true; | ||
| 298 | } | ||
| 299 | |||
| 300 | static bool Blit_to_Screen(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *surface, SDL_Rect *dstrect, | ||
| 301 | float scale_x, float scale_y, SDL_ScaleMode scaleMode) | ||
| 302 | { | ||
| 303 | bool result; | ||
| 304 | // Renderer scaling, if needed | ||
| 305 | if (scale_x != 1.0f || scale_y != 1.0f) { | ||
| 306 | SDL_Rect r; | ||
| 307 | r.x = (int)((float)dstrect->x * scale_x); | ||
| 308 | r.y = (int)((float)dstrect->y * scale_y); | ||
| 309 | r.w = (int)((float)dstrect->w * scale_x); | ||
| 310 | r.h = (int)((float)dstrect->h * scale_y); | ||
| 311 | result = SDL_BlitSurfaceScaled(src, srcrect, surface, &r, scaleMode); | ||
| 312 | } else { | ||
| 313 | result = SDL_BlitSurface(src, srcrect, surface, dstrect); | ||
| 314 | } | ||
| 315 | return result; | ||
| 316 | } | ||
| 317 | |||
| 318 | static bool SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Texture *texture, | ||
| 319 | const SDL_Rect *srcrect, const SDL_Rect *final_rect, | ||
| 320 | const double angle, const SDL_FPoint *center, const SDL_FlipMode flip, float scale_x, float scale_y) | ||
| 321 | { | ||
| 322 | SDL_Surface *src = (SDL_Surface *)texture->internal; | ||
| 323 | SDL_Rect tmp_rect; | ||
| 324 | SDL_Surface *src_clone, *src_rotated, *src_scaled; | ||
| 325 | SDL_Surface *mask = NULL, *mask_rotated = NULL; | ||
| 326 | bool result = true; | ||
| 327 | SDL_BlendMode blendmode; | ||
| 328 | Uint8 alphaMod, rMod, gMod, bMod; | ||
| 329 | int applyModulation = false; | ||
| 330 | int blitRequired = false; | ||
| 331 | int isOpaque = false; | ||
| 332 | |||
| 333 | if (!SDL_SurfaceValid(surface)) { | ||
| 334 | return false; | ||
| 335 | } | ||
| 336 | |||
| 337 | tmp_rect.x = 0; | ||
| 338 | tmp_rect.y = 0; | ||
| 339 | tmp_rect.w = final_rect->w; | ||
| 340 | tmp_rect.h = final_rect->h; | ||
| 341 | |||
| 342 | /* It is possible to encounter an RLE encoded surface here and locking it is | ||
| 343 | * necessary because this code is going to access the pixel buffer directly. | ||
| 344 | */ | ||
| 345 | if (SDL_MUSTLOCK(src)) { | ||
| 346 | if (!SDL_LockSurface(src)) { | ||
| 347 | return false; | ||
| 348 | } | ||
| 349 | } | ||
| 350 | |||
| 351 | /* Clone the source surface but use its pixel buffer directly. | ||
| 352 | * The original source surface must be treated as read-only. | ||
| 353 | */ | ||
| 354 | src_clone = SDL_CreateSurfaceFrom(src->w, src->h, src->format, src->pixels, src->pitch); | ||
| 355 | if (!src_clone) { | ||
| 356 | if (SDL_MUSTLOCK(src)) { | ||
| 357 | SDL_UnlockSurface(src); | ||
| 358 | } | ||
| 359 | return false; | ||
| 360 | } | ||
| 361 | |||
| 362 | SDL_GetSurfaceBlendMode(src, &blendmode); | ||
| 363 | SDL_GetSurfaceAlphaMod(src, &alphaMod); | ||
| 364 | SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod); | ||
| 365 | |||
| 366 | // SDLgfx_rotateSurface only accepts 32-bit surfaces with a 8888 layout. Everything else has to be converted. | ||
| 367 | if (src->fmt->bits_per_pixel != 32 || SDL_PIXELLAYOUT(src->format) != SDL_PACKEDLAYOUT_8888 || !SDL_ISPIXELFORMAT_ALPHA(src->format)) { | ||
| 368 | blitRequired = true; | ||
| 369 | } | ||
| 370 | |||
| 371 | // If scaling and cropping is necessary, it has to be taken care of before the rotation. | ||
| 372 | if (!(srcrect->w == final_rect->w && srcrect->h == final_rect->h && srcrect->x == 0 && srcrect->y == 0)) { | ||
| 373 | blitRequired = true; | ||
| 374 | } | ||
| 375 | |||
| 376 | // srcrect is not selecting the whole src surface, so cropping is needed | ||
| 377 | if (!(srcrect->w == src->w && srcrect->h == src->h && srcrect->x == 0 && srcrect->y == 0)) { | ||
| 378 | blitRequired = true; | ||
| 379 | } | ||
| 380 | |||
| 381 | // The color and alpha modulation has to be applied before the rotation when using the NONE, MOD or MUL blend modes. | ||
| 382 | if ((blendmode == SDL_BLENDMODE_NONE || blendmode == SDL_BLENDMODE_MOD || blendmode == SDL_BLENDMODE_MUL) && (alphaMod & rMod & gMod & bMod) != 255) { | ||
| 383 | applyModulation = true; | ||
| 384 | SDL_SetSurfaceAlphaMod(src_clone, alphaMod); | ||
| 385 | SDL_SetSurfaceColorMod(src_clone, rMod, gMod, bMod); | ||
| 386 | } | ||
| 387 | |||
| 388 | // Opaque surfaces are much easier to handle with the NONE blend mode. | ||
| 389 | if (blendmode == SDL_BLENDMODE_NONE && !SDL_ISPIXELFORMAT_ALPHA(src->format) && alphaMod == 255) { | ||
| 390 | isOpaque = true; | ||
| 391 | } | ||
| 392 | |||
| 393 | /* The NONE blend mode requires a mask for non-opaque surfaces. This mask will be used | ||
| 394 | * to clear the pixels in the destination surface. The other steps are explained below. | ||
| 395 | */ | ||
| 396 | if (blendmode == SDL_BLENDMODE_NONE && !isOpaque) { | ||
| 397 | mask = SDL_CreateSurface(final_rect->w, final_rect->h, SDL_PIXELFORMAT_ARGB8888); | ||
| 398 | if (!mask) { | ||
| 399 | result = false; | ||
| 400 | } else { | ||
| 401 | SDL_SetSurfaceBlendMode(mask, SDL_BLENDMODE_MOD); | ||
| 402 | } | ||
| 403 | } | ||
| 404 | |||
| 405 | /* Create a new surface should there be a format mismatch or if scaling, cropping, | ||
| 406 | * or modulation is required. It's possible to use the source surface directly otherwise. | ||
| 407 | */ | ||
| 408 | if (result && (blitRequired || applyModulation)) { | ||
| 409 | SDL_Rect scale_rect = tmp_rect; | ||
| 410 | src_scaled = SDL_CreateSurface(final_rect->w, final_rect->h, SDL_PIXELFORMAT_ARGB8888); | ||
| 411 | if (!src_scaled) { | ||
| 412 | result = false; | ||
| 413 | } else { | ||
| 414 | SDL_SetSurfaceBlendMode(src_clone, SDL_BLENDMODE_NONE); | ||
| 415 | result = SDL_BlitSurfaceScaled(src_clone, srcrect, src_scaled, &scale_rect, texture->scaleMode); | ||
| 416 | SDL_DestroySurface(src_clone); | ||
| 417 | src_clone = src_scaled; | ||
| 418 | src_scaled = NULL; | ||
| 419 | } | ||
| 420 | } | ||
| 421 | |||
| 422 | // SDLgfx_rotateSurface is going to make decisions depending on the blend mode. | ||
| 423 | SDL_SetSurfaceBlendMode(src_clone, blendmode); | ||
| 424 | |||
| 425 | if (result) { | ||
| 426 | SDL_Rect rect_dest; | ||
| 427 | double cangle, sangle; | ||
| 428 | |||
| 429 | SDLgfx_rotozoomSurfaceSizeTrig(tmp_rect.w, tmp_rect.h, angle, center, | ||
| 430 | &rect_dest, &cangle, &sangle); | ||
| 431 | src_rotated = SDLgfx_rotateSurface(src_clone, angle, | ||
| 432 | (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? 0 : 1, flip & SDL_FLIP_HORIZONTAL, flip & SDL_FLIP_VERTICAL, | ||
| 433 | &rect_dest, cangle, sangle, center); | ||
| 434 | if (!src_rotated) { | ||
| 435 | result = false; | ||
| 436 | } | ||
| 437 | if (result && mask) { | ||
| 438 | // The mask needed for the NONE blend mode gets rotated with the same parameters. | ||
| 439 | mask_rotated = SDLgfx_rotateSurface(mask, angle, | ||
| 440 | false, 0, 0, | ||
| 441 | &rect_dest, cangle, sangle, center); | ||
| 442 | if (!mask_rotated) { | ||
| 443 | result = false; | ||
| 444 | } | ||
| 445 | } | ||
| 446 | if (result) { | ||
| 447 | |||
| 448 | tmp_rect.x = final_rect->x + rect_dest.x; | ||
| 449 | tmp_rect.y = final_rect->y + rect_dest.y; | ||
| 450 | tmp_rect.w = rect_dest.w; | ||
| 451 | tmp_rect.h = rect_dest.h; | ||
| 452 | |||
| 453 | /* The NONE blend mode needs some special care with non-opaque surfaces. | ||
| 454 | * Other blend modes or opaque surfaces can be blitted directly. | ||
| 455 | */ | ||
| 456 | if (blendmode != SDL_BLENDMODE_NONE || isOpaque) { | ||
| 457 | if (applyModulation == false) { | ||
| 458 | // If the modulation wasn't already applied, make it happen now. | ||
| 459 | SDL_SetSurfaceAlphaMod(src_rotated, alphaMod); | ||
| 460 | SDL_SetSurfaceColorMod(src_rotated, rMod, gMod, bMod); | ||
| 461 | } | ||
| 462 | // Renderer scaling, if needed | ||
| 463 | result = Blit_to_Screen(src_rotated, NULL, surface, &tmp_rect, scale_x, scale_y, texture->scaleMode); | ||
| 464 | } else { | ||
| 465 | /* The NONE blend mode requires three steps to get the pixels onto the destination surface. | ||
| 466 | * First, the area where the rotated pixels will be blitted to get set to zero. | ||
| 467 | * This is accomplished by simply blitting a mask with the NONE blend mode. | ||
| 468 | * The colorkey set by the rotate function will discard the correct pixels. | ||
| 469 | */ | ||
| 470 | SDL_Rect mask_rect = tmp_rect; | ||
| 471 | SDL_SetSurfaceBlendMode(mask_rotated, SDL_BLENDMODE_NONE); | ||
| 472 | // Renderer scaling, if needed | ||
| 473 | result = Blit_to_Screen(mask_rotated, NULL, surface, &mask_rect, scale_x, scale_y, texture->scaleMode); | ||
| 474 | if (result) { | ||
| 475 | /* The next step copies the alpha value. This is done with the BLEND blend mode and | ||
| 476 | * by modulating the source colors with 0. Since the destination is all zeros, this | ||
| 477 | * will effectively set the destination alpha to the source alpha. | ||
| 478 | */ | ||
| 479 | SDL_SetSurfaceColorMod(src_rotated, 0, 0, 0); | ||
| 480 | mask_rect = tmp_rect; | ||
| 481 | // Renderer scaling, if needed | ||
| 482 | result = Blit_to_Screen(src_rotated, NULL, surface, &mask_rect, scale_x, scale_y, texture->scaleMode); | ||
| 483 | if (result) { | ||
| 484 | /* The last step gets the color values in place. The ADD blend mode simply adds them to | ||
| 485 | * the destination (where the color values are all zero). However, because the ADD blend | ||
| 486 | * mode modulates the colors with the alpha channel, a surface without an alpha mask needs | ||
| 487 | * to be created. This makes all source pixels opaque and the colors get copied correctly. | ||
| 488 | */ | ||
| 489 | SDL_Surface *src_rotated_rgb = SDL_CreateSurfaceFrom(src_rotated->w, src_rotated->h, src_rotated->format, src_rotated->pixels, src_rotated->pitch); | ||
| 490 | if (!src_rotated_rgb) { | ||
| 491 | result = false; | ||
| 492 | } else { | ||
| 493 | SDL_SetSurfaceBlendMode(src_rotated_rgb, SDL_BLENDMODE_ADD); | ||
| 494 | // Renderer scaling, if needed | ||
| 495 | result = Blit_to_Screen(src_rotated_rgb, NULL, surface, &tmp_rect, scale_x, scale_y, texture->scaleMode); | ||
| 496 | SDL_DestroySurface(src_rotated_rgb); | ||
| 497 | } | ||
| 498 | } | ||
| 499 | } | ||
| 500 | SDL_DestroySurface(mask_rotated); | ||
| 501 | } | ||
| 502 | if (src_rotated) { | ||
| 503 | SDL_DestroySurface(src_rotated); | ||
| 504 | } | ||
| 505 | } | ||
| 506 | } | ||
| 507 | |||
| 508 | if (SDL_MUSTLOCK(src)) { | ||
| 509 | SDL_UnlockSurface(src); | ||
| 510 | } | ||
| 511 | if (mask) { | ||
| 512 | SDL_DestroySurface(mask); | ||
| 513 | } | ||
| 514 | if (src_clone) { | ||
| 515 | SDL_DestroySurface(src_clone); | ||
| 516 | } | ||
| 517 | return result; | ||
| 518 | } | ||
| 519 | |||
| 520 | typedef struct GeometryFillData | ||
| 521 | { | ||
| 522 | SDL_Point dst; | ||
| 523 | SDL_Color color; | ||
| 524 | } GeometryFillData; | ||
| 525 | |||
| 526 | typedef struct GeometryCopyData | ||
| 527 | { | ||
| 528 | SDL_Point src; | ||
| 529 | SDL_Point dst; | ||
| 530 | SDL_Color color; | ||
| 531 | } GeometryCopyData; | ||
| 532 | |||
| 533 | static bool SW_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 534 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 535 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 536 | float scale_x, float scale_y) | ||
| 537 | { | ||
| 538 | int i; | ||
| 539 | int count = indices ? num_indices : num_vertices; | ||
| 540 | void *verts; | ||
| 541 | size_t sz = texture ? sizeof(GeometryCopyData) : sizeof(GeometryFillData); | ||
| 542 | const float color_scale = cmd->data.draw.color_scale; | ||
| 543 | |||
| 544 | verts = SDL_AllocateRenderVertices(renderer, count * sz, 0, &cmd->data.draw.first); | ||
| 545 | if (!verts) { | ||
| 546 | return false; | ||
| 547 | } | ||
| 548 | |||
| 549 | cmd->data.draw.count = count; | ||
| 550 | size_indices = indices ? size_indices : 0; | ||
| 551 | |||
| 552 | if (texture) { | ||
| 553 | GeometryCopyData *ptr = (GeometryCopyData *)verts; | ||
| 554 | for (i = 0; i < count; i++) { | ||
| 555 | int j; | ||
| 556 | float *xy_; | ||
| 557 | SDL_FColor col_; | ||
| 558 | float *uv_; | ||
| 559 | if (size_indices == 4) { | ||
| 560 | j = ((const Uint32 *)indices)[i]; | ||
| 561 | } else if (size_indices == 2) { | ||
| 562 | j = ((const Uint16 *)indices)[i]; | ||
| 563 | } else if (size_indices == 1) { | ||
| 564 | j = ((const Uint8 *)indices)[i]; | ||
| 565 | } else { | ||
| 566 | j = i; | ||
| 567 | } | ||
| 568 | |||
| 569 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 570 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 571 | |||
| 572 | uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 573 | |||
| 574 | ptr->src.x = (int)(uv_[0] * texture->w); | ||
| 575 | ptr->src.y = (int)(uv_[1] * texture->h); | ||
| 576 | |||
| 577 | ptr->dst.x = (int)(xy_[0] * scale_x); | ||
| 578 | ptr->dst.y = (int)(xy_[1] * scale_y); | ||
| 579 | trianglepoint_2_fixedpoint(&ptr->dst); | ||
| 580 | |||
| 581 | ptr->color.r = (Uint8)SDL_roundf(SDL_clamp(col_.r * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 582 | ptr->color.g = (Uint8)SDL_roundf(SDL_clamp(col_.g * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 583 | ptr->color.b = (Uint8)SDL_roundf(SDL_clamp(col_.b * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 584 | ptr->color.a = (Uint8)SDL_roundf(SDL_clamp(col_.a, 0.0f, 1.0f) * 255.0f); | ||
| 585 | |||
| 586 | ptr++; | ||
| 587 | } | ||
| 588 | } else { | ||
| 589 | GeometryFillData *ptr = (GeometryFillData *)verts; | ||
| 590 | |||
| 591 | for (i = 0; i < count; i++) { | ||
| 592 | int j; | ||
| 593 | float *xy_; | ||
| 594 | SDL_FColor col_; | ||
| 595 | if (size_indices == 4) { | ||
| 596 | j = ((const Uint32 *)indices)[i]; | ||
| 597 | } else if (size_indices == 2) { | ||
| 598 | j = ((const Uint16 *)indices)[i]; | ||
| 599 | } else if (size_indices == 1) { | ||
| 600 | j = ((const Uint8 *)indices)[i]; | ||
| 601 | } else { | ||
| 602 | j = i; | ||
| 603 | } | ||
| 604 | |||
| 605 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 606 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 607 | |||
| 608 | ptr->dst.x = (int)(xy_[0] * scale_x); | ||
| 609 | ptr->dst.y = (int)(xy_[1] * scale_y); | ||
| 610 | trianglepoint_2_fixedpoint(&ptr->dst); | ||
| 611 | |||
| 612 | ptr->color.r = (Uint8)SDL_roundf(SDL_clamp(col_.r * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 613 | ptr->color.g = (Uint8)SDL_roundf(SDL_clamp(col_.g * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 614 | ptr->color.b = (Uint8)SDL_roundf(SDL_clamp(col_.b * color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 615 | ptr->color.a = (Uint8)SDL_roundf(SDL_clamp(col_.a, 0.0f, 1.0f) * 255.0f); | ||
| 616 | |||
| 617 | ptr++; | ||
| 618 | } | ||
| 619 | } | ||
| 620 | return true; | ||
| 621 | } | ||
| 622 | |||
| 623 | static void PrepTextureForCopy(const SDL_RenderCommand *cmd, SW_DrawStateCache *drawstate) | ||
| 624 | { | ||
| 625 | const Uint8 r = drawstate->color.r; | ||
| 626 | const Uint8 g = drawstate->color.g; | ||
| 627 | const Uint8 b = drawstate->color.b; | ||
| 628 | const Uint8 a = drawstate->color.a; | ||
| 629 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 630 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 631 | SDL_Surface *surface = (SDL_Surface *)texture->internal; | ||
| 632 | const bool colormod = ((r & g & b) != 0xFF); | ||
| 633 | const bool alphamod = (a != 0xFF); | ||
| 634 | const bool blending = ((blend == SDL_BLENDMODE_ADD) || (blend == SDL_BLENDMODE_MOD) || (blend == SDL_BLENDMODE_MUL)); | ||
| 635 | |||
| 636 | if (colormod || alphamod || blending) { | ||
| 637 | SDL_SetSurfaceRLE(surface, 0); | ||
| 638 | } | ||
| 639 | |||
| 640 | // !!! FIXME: we can probably avoid some of these calls. | ||
| 641 | SDL_SetSurfaceColorMod(surface, r, g, b); | ||
| 642 | SDL_SetSurfaceAlphaMod(surface, a); | ||
| 643 | SDL_SetSurfaceBlendMode(surface, blend); | ||
| 644 | } | ||
| 645 | |||
| 646 | static void SetDrawState(SDL_Surface *surface, SW_DrawStateCache *drawstate) | ||
| 647 | { | ||
| 648 | if (drawstate->surface_cliprect_dirty) { | ||
| 649 | const SDL_Rect *viewport = drawstate->viewport; | ||
| 650 | const SDL_Rect *cliprect = drawstate->cliprect; | ||
| 651 | SDL_assert_release(viewport != NULL); // the higher level should have forced a SDL_RENDERCMD_SETVIEWPORT | ||
| 652 | |||
| 653 | if (cliprect && viewport) { | ||
| 654 | SDL_Rect clip_rect; | ||
| 655 | clip_rect.x = cliprect->x + viewport->x; | ||
| 656 | clip_rect.y = cliprect->y + viewport->y; | ||
| 657 | clip_rect.w = cliprect->w; | ||
| 658 | clip_rect.h = cliprect->h; | ||
| 659 | SDL_GetRectIntersection(viewport, &clip_rect, &clip_rect); | ||
| 660 | SDL_SetSurfaceClipRect(surface, &clip_rect); | ||
| 661 | } else { | ||
| 662 | SDL_SetSurfaceClipRect(surface, drawstate->viewport); | ||
| 663 | } | ||
| 664 | drawstate->surface_cliprect_dirty = false; | ||
| 665 | } | ||
| 666 | } | ||
| 667 | |||
| 668 | static void SW_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 669 | { | ||
| 670 | // SW_DrawStateCache only lives during SW_RunCommandQueue, so nothing to do here! | ||
| 671 | } | ||
| 672 | |||
| 673 | |||
| 674 | static bool SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 675 | { | ||
| 676 | SDL_Surface *surface = SW_ActivateRenderer(renderer); | ||
| 677 | SW_DrawStateCache drawstate; | ||
| 678 | |||
| 679 | if (!SDL_SurfaceValid(surface)) { | ||
| 680 | return false; | ||
| 681 | } | ||
| 682 | |||
| 683 | drawstate.viewport = NULL; | ||
| 684 | drawstate.cliprect = NULL; | ||
| 685 | drawstate.surface_cliprect_dirty = true; | ||
| 686 | drawstate.color.r = 0; | ||
| 687 | drawstate.color.g = 0; | ||
| 688 | drawstate.color.b = 0; | ||
| 689 | drawstate.color.a = 0; | ||
| 690 | |||
| 691 | while (cmd) { | ||
| 692 | switch (cmd->command) { | ||
| 693 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 694 | { | ||
| 695 | drawstate.color.r = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.r * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 696 | drawstate.color.g = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.g * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 697 | drawstate.color.b = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.b * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 698 | drawstate.color.a = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.a, 0.0f, 1.0f) * 255.0f); | ||
| 699 | break; | ||
| 700 | } | ||
| 701 | |||
| 702 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 703 | { | ||
| 704 | drawstate.viewport = &cmd->data.viewport.rect; | ||
| 705 | drawstate.surface_cliprect_dirty = true; | ||
| 706 | break; | ||
| 707 | } | ||
| 708 | |||
| 709 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 710 | { | ||
| 711 | drawstate.cliprect = cmd->data.cliprect.enabled ? &cmd->data.cliprect.rect : NULL; | ||
| 712 | drawstate.surface_cliprect_dirty = true; | ||
| 713 | break; | ||
| 714 | } | ||
| 715 | |||
| 716 | case SDL_RENDERCMD_CLEAR: | ||
| 717 | { | ||
| 718 | const Uint8 r = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.r * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 719 | const Uint8 g = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.g * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 720 | const Uint8 b = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.b * cmd->data.color.color_scale, 0.0f, 1.0f) * 255.0f); | ||
| 721 | const Uint8 a = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.a, 0.0f, 1.0f) * 255.0f); | ||
| 722 | // By definition the clear ignores the clip rect | ||
| 723 | SDL_SetSurfaceClipRect(surface, NULL); | ||
| 724 | SDL_FillSurfaceRect(surface, NULL, SDL_MapSurfaceRGBA(surface, r, g, b, a)); | ||
| 725 | drawstate.surface_cliprect_dirty = true; | ||
| 726 | break; | ||
| 727 | } | ||
| 728 | |||
| 729 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 730 | { | ||
| 731 | const Uint8 r = drawstate.color.r; | ||
| 732 | const Uint8 g = drawstate.color.g; | ||
| 733 | const Uint8 b = drawstate.color.b; | ||
| 734 | const Uint8 a = drawstate.color.a; | ||
| 735 | const int count = (int)cmd->data.draw.count; | ||
| 736 | SDL_Point *verts = (SDL_Point *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 737 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 738 | SetDrawState(surface, &drawstate); | ||
| 739 | |||
| 740 | // Apply viewport | ||
| 741 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 742 | int i; | ||
| 743 | for (i = 0; i < count; i++) { | ||
| 744 | verts[i].x += drawstate.viewport->x; | ||
| 745 | verts[i].y += drawstate.viewport->y; | ||
| 746 | } | ||
| 747 | } | ||
| 748 | |||
| 749 | if (blend == SDL_BLENDMODE_NONE) { | ||
| 750 | SDL_DrawPoints(surface, verts, count, SDL_MapSurfaceRGBA(surface, r, g, b, a)); | ||
| 751 | } else { | ||
| 752 | SDL_BlendPoints(surface, verts, count, blend, r, g, b, a); | ||
| 753 | } | ||
| 754 | break; | ||
| 755 | } | ||
| 756 | |||
| 757 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 758 | { | ||
| 759 | const Uint8 r = drawstate.color.r; | ||
| 760 | const Uint8 g = drawstate.color.g; | ||
| 761 | const Uint8 b = drawstate.color.b; | ||
| 762 | const Uint8 a = drawstate.color.a; | ||
| 763 | const int count = (int)cmd->data.draw.count; | ||
| 764 | SDL_Point *verts = (SDL_Point *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 765 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 766 | SetDrawState(surface, &drawstate); | ||
| 767 | |||
| 768 | // Apply viewport | ||
| 769 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 770 | int i; | ||
| 771 | for (i = 0; i < count; i++) { | ||
| 772 | verts[i].x += drawstate.viewport->x; | ||
| 773 | verts[i].y += drawstate.viewport->y; | ||
| 774 | } | ||
| 775 | } | ||
| 776 | |||
| 777 | if (blend == SDL_BLENDMODE_NONE) { | ||
| 778 | SDL_DrawLines(surface, verts, count, SDL_MapSurfaceRGBA(surface, r, g, b, a)); | ||
| 779 | } else { | ||
| 780 | SDL_BlendLines(surface, verts, count, blend, r, g, b, a); | ||
| 781 | } | ||
| 782 | break; | ||
| 783 | } | ||
| 784 | |||
| 785 | case SDL_RENDERCMD_FILL_RECTS: | ||
| 786 | { | ||
| 787 | const Uint8 r = drawstate.color.r; | ||
| 788 | const Uint8 g = drawstate.color.g; | ||
| 789 | const Uint8 b = drawstate.color.b; | ||
| 790 | const Uint8 a = drawstate.color.a; | ||
| 791 | const int count = (int)cmd->data.draw.count; | ||
| 792 | SDL_Rect *verts = (SDL_Rect *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 793 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 794 | SetDrawState(surface, &drawstate); | ||
| 795 | |||
| 796 | // Apply viewport | ||
| 797 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 798 | int i; | ||
| 799 | for (i = 0; i < count; i++) { | ||
| 800 | verts[i].x += drawstate.viewport->x; | ||
| 801 | verts[i].y += drawstate.viewport->y; | ||
| 802 | } | ||
| 803 | } | ||
| 804 | |||
| 805 | if (blend == SDL_BLENDMODE_NONE) { | ||
| 806 | SDL_FillSurfaceRects(surface, verts, count, SDL_MapSurfaceRGBA(surface, r, g, b, a)); | ||
| 807 | } else { | ||
| 808 | SDL_BlendFillRects(surface, verts, count, blend, r, g, b, a); | ||
| 809 | } | ||
| 810 | break; | ||
| 811 | } | ||
| 812 | |||
| 813 | case SDL_RENDERCMD_COPY: | ||
| 814 | { | ||
| 815 | SDL_Rect *verts = (SDL_Rect *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 816 | const SDL_Rect *srcrect = verts; | ||
| 817 | SDL_Rect *dstrect = verts + 1; | ||
| 818 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 819 | SDL_Surface *src = (SDL_Surface *)texture->internal; | ||
| 820 | |||
| 821 | SetDrawState(surface, &drawstate); | ||
| 822 | |||
| 823 | PrepTextureForCopy(cmd, &drawstate); | ||
| 824 | |||
| 825 | // Apply viewport | ||
| 826 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 827 | dstrect->x += drawstate.viewport->x; | ||
| 828 | dstrect->y += drawstate.viewport->y; | ||
| 829 | } | ||
| 830 | |||
| 831 | if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) { | ||
| 832 | SDL_BlitSurface(src, srcrect, surface, dstrect); | ||
| 833 | } else { | ||
| 834 | /* If scaling is ever done, permanently disable RLE (which doesn't support scaling) | ||
| 835 | * to avoid potentially frequent RLE encoding/decoding. | ||
| 836 | */ | ||
| 837 | SDL_SetSurfaceRLE(surface, 0); | ||
| 838 | |||
| 839 | // Prevent to do scaling + clipping on viewport boundaries as it may lose proportion | ||
| 840 | if (dstrect->x < 0 || dstrect->y < 0 || dstrect->x + dstrect->w > surface->w || dstrect->y + dstrect->h > surface->h) { | ||
| 841 | SDL_Surface *tmp = SDL_CreateSurface(dstrect->w, dstrect->h, src->format); | ||
| 842 | // Scale to an intermediate surface, then blit | ||
| 843 | if (tmp) { | ||
| 844 | SDL_Rect r; | ||
| 845 | SDL_BlendMode blendmode; | ||
| 846 | Uint8 alphaMod, rMod, gMod, bMod; | ||
| 847 | |||
| 848 | SDL_GetSurfaceBlendMode(src, &blendmode); | ||
| 849 | SDL_GetSurfaceAlphaMod(src, &alphaMod); | ||
| 850 | SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod); | ||
| 851 | |||
| 852 | r.x = 0; | ||
| 853 | r.y = 0; | ||
| 854 | r.w = dstrect->w; | ||
| 855 | r.h = dstrect->h; | ||
| 856 | |||
| 857 | SDL_SetSurfaceBlendMode(src, SDL_BLENDMODE_NONE); | ||
| 858 | SDL_SetSurfaceColorMod(src, 255, 255, 255); | ||
| 859 | SDL_SetSurfaceAlphaMod(src, 255); | ||
| 860 | |||
| 861 | SDL_BlitSurfaceScaled(src, srcrect, tmp, &r, texture->scaleMode); | ||
| 862 | |||
| 863 | SDL_SetSurfaceColorMod(tmp, rMod, gMod, bMod); | ||
| 864 | SDL_SetSurfaceAlphaMod(tmp, alphaMod); | ||
| 865 | SDL_SetSurfaceBlendMode(tmp, blendmode); | ||
| 866 | |||
| 867 | SDL_BlitSurface(tmp, NULL, surface, dstrect); | ||
| 868 | SDL_DestroySurface(tmp); | ||
| 869 | // No need to set back r/g/b/a/blendmode to 'src' since it's done in PrepTextureForCopy() | ||
| 870 | } | ||
| 871 | } else { | ||
| 872 | SDL_BlitSurfaceScaled(src, srcrect, surface, dstrect, texture->scaleMode); | ||
| 873 | } | ||
| 874 | } | ||
| 875 | break; | ||
| 876 | } | ||
| 877 | |||
| 878 | case SDL_RENDERCMD_COPY_EX: | ||
| 879 | { | ||
| 880 | CopyExData *copydata = (CopyExData *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 881 | SetDrawState(surface, &drawstate); | ||
| 882 | PrepTextureForCopy(cmd, &drawstate); | ||
| 883 | |||
| 884 | // Apply viewport | ||
| 885 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 886 | copydata->dstrect.x += drawstate.viewport->x; | ||
| 887 | copydata->dstrect.y += drawstate.viewport->y; | ||
| 888 | } | ||
| 889 | |||
| 890 | SW_RenderCopyEx(renderer, surface, cmd->data.draw.texture, ©data->srcrect, | ||
| 891 | ©data->dstrect, copydata->angle, ©data->center, copydata->flip, | ||
| 892 | copydata->scale_x, copydata->scale_y); | ||
| 893 | break; | ||
| 894 | } | ||
| 895 | |||
| 896 | case SDL_RENDERCMD_GEOMETRY: | ||
| 897 | { | ||
| 898 | int i; | ||
| 899 | SDL_Rect *verts = (SDL_Rect *)(((Uint8 *)vertices) + cmd->data.draw.first); | ||
| 900 | const int count = (int)cmd->data.draw.count; | ||
| 901 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 902 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 903 | |||
| 904 | SetDrawState(surface, &drawstate); | ||
| 905 | |||
| 906 | if (texture) { | ||
| 907 | SDL_Surface *src = (SDL_Surface *)texture->internal; | ||
| 908 | |||
| 909 | GeometryCopyData *ptr = (GeometryCopyData *)verts; | ||
| 910 | |||
| 911 | PrepTextureForCopy(cmd, &drawstate); | ||
| 912 | |||
| 913 | // Apply viewport | ||
| 914 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 915 | SDL_Point vp; | ||
| 916 | vp.x = drawstate.viewport->x; | ||
| 917 | vp.y = drawstate.viewport->y; | ||
| 918 | trianglepoint_2_fixedpoint(&vp); | ||
| 919 | for (i = 0; i < count; i++) { | ||
| 920 | ptr[i].dst.x += vp.x; | ||
| 921 | ptr[i].dst.y += vp.y; | ||
| 922 | } | ||
| 923 | } | ||
| 924 | |||
| 925 | for (i = 0; i < count; i += 3, ptr += 3) { | ||
| 926 | SDL_SW_BlitTriangle( | ||
| 927 | src, | ||
| 928 | &(ptr[0].src), &(ptr[1].src), &(ptr[2].src), | ||
| 929 | surface, | ||
| 930 | &(ptr[0].dst), &(ptr[1].dst), &(ptr[2].dst), | ||
| 931 | ptr[0].color, ptr[1].color, ptr[2].color, | ||
| 932 | cmd->data.draw.texture_address_mode); | ||
| 933 | } | ||
| 934 | } else { | ||
| 935 | GeometryFillData *ptr = (GeometryFillData *)verts; | ||
| 936 | |||
| 937 | // Apply viewport | ||
| 938 | if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { | ||
| 939 | SDL_Point vp; | ||
| 940 | vp.x = drawstate.viewport->x; | ||
| 941 | vp.y = drawstate.viewport->y; | ||
| 942 | trianglepoint_2_fixedpoint(&vp); | ||
| 943 | for (i = 0; i < count; i++) { | ||
| 944 | ptr[i].dst.x += vp.x; | ||
| 945 | ptr[i].dst.y += vp.y; | ||
| 946 | } | ||
| 947 | } | ||
| 948 | |||
| 949 | for (i = 0; i < count; i += 3, ptr += 3) { | ||
| 950 | SDL_SW_FillTriangle(surface, &(ptr[0].dst), &(ptr[1].dst), &(ptr[2].dst), blend, ptr[0].color, ptr[1].color, ptr[2].color); | ||
| 951 | } | ||
| 952 | } | ||
| 953 | break; | ||
| 954 | } | ||
| 955 | |||
| 956 | case SDL_RENDERCMD_NO_OP: | ||
| 957 | break; | ||
| 958 | } | ||
| 959 | |||
| 960 | cmd = cmd->next; | ||
| 961 | } | ||
| 962 | |||
| 963 | return true; | ||
| 964 | } | ||
| 965 | |||
| 966 | static SDL_Surface *SW_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 967 | { | ||
| 968 | SDL_Surface *surface = SW_ActivateRenderer(renderer); | ||
| 969 | void *pixels; | ||
| 970 | |||
| 971 | if (!SDL_SurfaceValid(surface)) { | ||
| 972 | return NULL; | ||
| 973 | } | ||
| 974 | |||
| 975 | /* NOTE: The rect is already adjusted according to the viewport by | ||
| 976 | * SDL_RenderReadPixels. | ||
| 977 | */ | ||
| 978 | |||
| 979 | if (rect->x < 0 || rect->x + rect->w > surface->w || | ||
| 980 | rect->y < 0 || rect->y + rect->h > surface->h) { | ||
| 981 | SDL_SetError("Tried to read outside of surface bounds"); | ||
| 982 | return NULL; | ||
| 983 | } | ||
| 984 | |||
| 985 | pixels = (void *)((Uint8 *)surface->pixels + | ||
| 986 | rect->y * surface->pitch + | ||
| 987 | rect->x * surface->fmt->bytes_per_pixel); | ||
| 988 | |||
| 989 | return SDL_DuplicatePixels(rect->w, rect->h, surface->format, SDL_COLORSPACE_SRGB, pixels, surface->pitch); | ||
| 990 | } | ||
| 991 | |||
| 992 | static bool SW_RenderPresent(SDL_Renderer *renderer) | ||
| 993 | { | ||
| 994 | SDL_Window *window = renderer->window; | ||
| 995 | |||
| 996 | if (!window) { | ||
| 997 | return false; | ||
| 998 | } | ||
| 999 | return SDL_UpdateWindowSurface(window); | ||
| 1000 | } | ||
| 1001 | |||
| 1002 | static void SW_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1003 | { | ||
| 1004 | SDL_Surface *surface = (SDL_Surface *)texture->internal; | ||
| 1005 | |||
| 1006 | SDL_DestroySurface(surface); | ||
| 1007 | } | ||
| 1008 | |||
| 1009 | static void SW_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1010 | { | ||
| 1011 | SDL_Window *window = renderer->window; | ||
| 1012 | SW_RenderData *data = (SW_RenderData *)renderer->internal; | ||
| 1013 | |||
| 1014 | if (window) { | ||
| 1015 | SDL_DestroyWindowSurface(window); | ||
| 1016 | } | ||
| 1017 | SDL_free(data); | ||
| 1018 | } | ||
| 1019 | |||
| 1020 | static void SW_SelectBestFormats(SDL_Renderer *renderer, SDL_PixelFormat format) | ||
| 1021 | { | ||
| 1022 | // Prefer the format used by the framebuffer by default. | ||
| 1023 | SDL_AddSupportedTextureFormat(renderer, format); | ||
| 1024 | |||
| 1025 | switch (format) { | ||
| 1026 | case SDL_PIXELFORMAT_XRGB4444: | ||
| 1027 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB4444); | ||
| 1028 | break; | ||
| 1029 | case SDL_PIXELFORMAT_XBGR4444: | ||
| 1030 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR4444); | ||
| 1031 | break; | ||
| 1032 | case SDL_PIXELFORMAT_ARGB4444: | ||
| 1033 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB4444); | ||
| 1034 | break; | ||
| 1035 | case SDL_PIXELFORMAT_ABGR4444: | ||
| 1036 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR4444); | ||
| 1037 | break; | ||
| 1038 | |||
| 1039 | case SDL_PIXELFORMAT_XRGB1555: | ||
| 1040 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB1555); | ||
| 1041 | break; | ||
| 1042 | case SDL_PIXELFORMAT_XBGR1555: | ||
| 1043 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555); | ||
| 1044 | break; | ||
| 1045 | case SDL_PIXELFORMAT_ARGB1555: | ||
| 1046 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB1555); | ||
| 1047 | break; | ||
| 1048 | case SDL_PIXELFORMAT_ABGR1555: | ||
| 1049 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR1555); | ||
| 1050 | break; | ||
| 1051 | |||
| 1052 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 1053 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 1054 | break; | ||
| 1055 | case SDL_PIXELFORMAT_RGBX8888: | ||
| 1056 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA8888); | ||
| 1057 | break; | ||
| 1058 | case SDL_PIXELFORMAT_XBGR8888: | ||
| 1059 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 1060 | break; | ||
| 1061 | case SDL_PIXELFORMAT_BGRX8888: | ||
| 1062 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA8888); | ||
| 1063 | break; | ||
| 1064 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 1065 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888); | ||
| 1066 | break; | ||
| 1067 | case SDL_PIXELFORMAT_RGBA8888: | ||
| 1068 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX8888); | ||
| 1069 | break; | ||
| 1070 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 1071 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR8888); | ||
| 1072 | break; | ||
| 1073 | case SDL_PIXELFORMAT_BGRA8888: | ||
| 1074 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX8888); | ||
| 1075 | break; | ||
| 1076 | default: | ||
| 1077 | break; | ||
| 1078 | } | ||
| 1079 | |||
| 1080 | /* Ensure that we always have a SDL_PACKEDLAYOUT_8888 format. Having a matching component order increases the | ||
| 1081 | * chances of getting a fast path for blitting. | ||
| 1082 | */ | ||
| 1083 | if (SDL_ISPIXELFORMAT_PACKED(format)) { | ||
| 1084 | if (SDL_PIXELLAYOUT(format) != SDL_PACKEDLAYOUT_8888) { | ||
| 1085 | switch (SDL_PIXELORDER(format)) { | ||
| 1086 | case SDL_PACKEDORDER_BGRX: | ||
| 1087 | case SDL_PACKEDORDER_BGRA: | ||
| 1088 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX8888); | ||
| 1089 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA8888); | ||
| 1090 | break; | ||
| 1091 | case SDL_PACKEDORDER_RGBX: | ||
| 1092 | case SDL_PACKEDORDER_RGBA: | ||
| 1093 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX8888); | ||
| 1094 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA8888); | ||
| 1095 | break; | ||
| 1096 | case SDL_PACKEDORDER_XBGR: | ||
| 1097 | case SDL_PACKEDORDER_ABGR: | ||
| 1098 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR8888); | ||
| 1099 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 1100 | break; | ||
| 1101 | case SDL_PACKEDORDER_XRGB: | ||
| 1102 | case SDL_PACKEDORDER_ARGB: | ||
| 1103 | default: | ||
| 1104 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888); | ||
| 1105 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 1106 | break; | ||
| 1107 | } | ||
| 1108 | } | ||
| 1109 | } else { | ||
| 1110 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888); | ||
| 1111 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 1112 | } | ||
| 1113 | } | ||
| 1114 | |||
| 1115 | bool SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface, SDL_PropertiesID create_props) | ||
| 1116 | { | ||
| 1117 | SW_RenderData *data; | ||
| 1118 | |||
| 1119 | if (!SDL_SurfaceValid(surface)) { | ||
| 1120 | return SDL_InvalidParamError("surface"); | ||
| 1121 | } | ||
| 1122 | |||
| 1123 | renderer->software = true; | ||
| 1124 | |||
| 1125 | data = (SW_RenderData *)SDL_calloc(1, sizeof(*data)); | ||
| 1126 | if (!data) { | ||
| 1127 | return false; | ||
| 1128 | } | ||
| 1129 | data->surface = surface; | ||
| 1130 | data->window = surface; | ||
| 1131 | |||
| 1132 | renderer->WindowEvent = SW_WindowEvent; | ||
| 1133 | renderer->GetOutputSize = SW_GetOutputSize; | ||
| 1134 | renderer->CreateTexture = SW_CreateTexture; | ||
| 1135 | renderer->UpdateTexture = SW_UpdateTexture; | ||
| 1136 | renderer->LockTexture = SW_LockTexture; | ||
| 1137 | renderer->UnlockTexture = SW_UnlockTexture; | ||
| 1138 | renderer->SetTextureScaleMode = SW_SetTextureScaleMode; | ||
| 1139 | renderer->SetRenderTarget = SW_SetRenderTarget; | ||
| 1140 | renderer->QueueSetViewport = SW_QueueNoOp; | ||
| 1141 | renderer->QueueSetDrawColor = SW_QueueNoOp; | ||
| 1142 | renderer->QueueDrawPoints = SW_QueueDrawPoints; | ||
| 1143 | renderer->QueueDrawLines = SW_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 1144 | renderer->QueueFillRects = SW_QueueFillRects; | ||
| 1145 | renderer->QueueCopy = SW_QueueCopy; | ||
| 1146 | renderer->QueueCopyEx = SW_QueueCopyEx; | ||
| 1147 | renderer->QueueGeometry = SW_QueueGeometry; | ||
| 1148 | renderer->InvalidateCachedState = SW_InvalidateCachedState; | ||
| 1149 | renderer->RunCommandQueue = SW_RunCommandQueue; | ||
| 1150 | renderer->RenderReadPixels = SW_RenderReadPixels; | ||
| 1151 | renderer->RenderPresent = SW_RenderPresent; | ||
| 1152 | renderer->DestroyTexture = SW_DestroyTexture; | ||
| 1153 | renderer->DestroyRenderer = SW_DestroyRenderer; | ||
| 1154 | renderer->internal = data; | ||
| 1155 | SW_InvalidateCachedState(renderer); | ||
| 1156 | |||
| 1157 | renderer->name = SW_RenderDriver.name; | ||
| 1158 | |||
| 1159 | SW_SelectBestFormats(renderer, surface->format); | ||
| 1160 | |||
| 1161 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 1162 | |||
| 1163 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 1164 | return SDL_SetError("Unsupported output colorspace"); | ||
| 1165 | } | ||
| 1166 | |||
| 1167 | return true; | ||
| 1168 | } | ||
| 1169 | |||
| 1170 | static bool SW_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 1171 | { | ||
| 1172 | // Set the vsync hint based on our flags, if it's not already set | ||
| 1173 | const char *hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC); | ||
| 1174 | const bool no_hint_set = (!hint || !*hint); | ||
| 1175 | |||
| 1176 | if (no_hint_set) { | ||
| 1177 | if (SDL_GetBooleanProperty(create_props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, 0)) { | ||
| 1178 | SDL_SetHint(SDL_HINT_RENDER_VSYNC, "1"); | ||
| 1179 | } else { | ||
| 1180 | SDL_SetHint(SDL_HINT_RENDER_VSYNC, "0"); | ||
| 1181 | } | ||
| 1182 | } | ||
| 1183 | |||
| 1184 | SDL_Surface *surface = SDL_GetWindowSurface(window); | ||
| 1185 | |||
| 1186 | // Reset the vsync hint if we set it above | ||
| 1187 | if (no_hint_set) { | ||
| 1188 | SDL_SetHint(SDL_HINT_RENDER_VSYNC, ""); | ||
| 1189 | } | ||
| 1190 | |||
| 1191 | if (!SDL_SurfaceValid(surface)) { | ||
| 1192 | return false; | ||
| 1193 | } | ||
| 1194 | |||
| 1195 | return SW_CreateRendererForSurface(renderer, surface, create_props); | ||
| 1196 | } | ||
| 1197 | |||
| 1198 | SDL_RenderDriver SW_RenderDriver = { | ||
| 1199 | SW_CreateRenderer, SDL_SOFTWARE_RENDERER | ||
| 1200 | }; | ||
| 1201 | |||
| 1202 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_render_sw_c.h b/SDL-3.2.8/src/render/software/SDL_render_sw_c.h new file mode 100644 index 0000000..40d3c3a --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_render_sw_c.h | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_render_sw_c_h_ | ||
| 23 | #define SDL_render_sw_c_h_ | ||
| 24 | |||
| 25 | extern bool SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface, SDL_PropertiesID create_props); | ||
| 26 | |||
| 27 | #endif // SDL_render_sw_c_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_rotate.c b/SDL-3.2.8/src/render/software/SDL_rotate.c new file mode 100644 index 0000000..516ba8a --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_rotate.c | |||
| @@ -0,0 +1,612 @@ | |||
| 1 | /* | ||
| 2 | |||
| 3 | SDL_rotate.c: rotates 32bit or 8bit surfaces | ||
| 4 | |||
| 5 | Shamelessly stolen from SDL_gfx by Andreas Schiffler. Original copyright follows: | ||
| 6 | |||
| 7 | Copyright (C) 2001-2011 Andreas Schiffler | ||
| 8 | |||
| 9 | This software is provided 'as-is', without any express or implied | ||
| 10 | warranty. In no event will the authors be held liable for any damages | ||
| 11 | arising from the use of this software. | ||
| 12 | |||
| 13 | Permission is granted to anyone to use this software for any purpose, | ||
| 14 | including commercial applications, and to alter it and redistribute it | ||
| 15 | freely, subject to the following restrictions: | ||
| 16 | |||
| 17 | 1. The origin of this software must not be misrepresented; you must not | ||
| 18 | claim that you wrote the original software. If you use this software | ||
| 19 | in a product, an acknowledgment in the product documentation would be | ||
| 20 | appreciated but is not required. | ||
| 21 | |||
| 22 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 23 | misrepresented as being the original software. | ||
| 24 | |||
| 25 | 3. This notice may not be removed or altered from any source | ||
| 26 | distribution. | ||
| 27 | |||
| 28 | Andreas Schiffler -- aschiffler at ferzkopp dot net | ||
| 29 | |||
| 30 | */ | ||
| 31 | #include "SDL_internal.h" | ||
| 32 | |||
| 33 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 34 | |||
| 35 | #if defined(SDL_PLATFORM_WINDOWS) | ||
| 36 | #include "../../core/windows/SDL_windows.h" | ||
| 37 | #endif | ||
| 38 | |||
| 39 | #include "SDL_rotate.h" | ||
| 40 | |||
| 41 | #include "../../video/SDL_surface_c.h" | ||
| 42 | |||
| 43 | // ---- Internally used structures | ||
| 44 | |||
| 45 | /** | ||
| 46 | A 32 bit RGBA pixel. | ||
| 47 | */ | ||
| 48 | typedef struct tColorRGBA | ||
| 49 | { | ||
| 50 | Uint8 r; | ||
| 51 | Uint8 g; | ||
| 52 | Uint8 b; | ||
| 53 | Uint8 a; | ||
| 54 | } tColorRGBA; | ||
| 55 | |||
| 56 | /** | ||
| 57 | A 8bit Y/palette pixel. | ||
| 58 | */ | ||
| 59 | typedef struct tColorY | ||
| 60 | { | ||
| 61 | Uint8 y; | ||
| 62 | } tColorY; | ||
| 63 | |||
| 64 | /** | ||
| 65 | Number of guard rows added to destination surfaces. | ||
| 66 | |||
| 67 | This is a simple but effective workaround for observed issues. | ||
| 68 | These rows allocate extra memory and are then hidden from the surface. | ||
| 69 | Rows are added to the end of destination surfaces when they are allocated. | ||
| 70 | This catches any potential overflows which seem to happen with | ||
| 71 | just the right src image dimensions and scale/rotation and can lead | ||
| 72 | to a situation where the program can segfault. | ||
| 73 | */ | ||
| 74 | #define GUARD_ROWS (2) | ||
| 75 | |||
| 76 | /** | ||
| 77 | Returns colorkey info for a surface | ||
| 78 | */ | ||
| 79 | static Uint32 get_colorkey(SDL_Surface *src) | ||
| 80 | { | ||
| 81 | Uint32 key = 0; | ||
| 82 | if (SDL_SurfaceHasColorKey(src)) { | ||
| 83 | SDL_GetSurfaceColorKey(src, &key); | ||
| 84 | } | ||
| 85 | return key; | ||
| 86 | } | ||
| 87 | |||
| 88 | // rotate (sx, sy) by (angle, center) into (dx, dy) | ||
| 89 | static void rotate(double sx, double sy, double sinangle, double cosangle, const SDL_FPoint *center, double *dx, double *dy) | ||
| 90 | { | ||
| 91 | sx -= center->x; | ||
| 92 | sy -= center->y; | ||
| 93 | |||
| 94 | *dx = cosangle * sx - sinangle * sy; | ||
| 95 | *dy = sinangle * sx + cosangle * sy; | ||
| 96 | |||
| 97 | *dx += center->x; | ||
| 98 | *dy += center->y; | ||
| 99 | } | ||
| 100 | |||
| 101 | /** | ||
| 102 | Internal target surface sizing function for rotations with trig result return. | ||
| 103 | |||
| 104 | \param width The source surface width. | ||
| 105 | \param height The source surface height. | ||
| 106 | \param angle The angle to rotate in degrees. | ||
| 107 | \param center The center of ratation | ||
| 108 | \param rect_dest Bounding box of rotated rectangle | ||
| 109 | \param cangle The sine of the angle | ||
| 110 | \param sangle The cosine of the angle | ||
| 111 | |||
| 112 | */ | ||
| 113 | void SDLgfx_rotozoomSurfaceSizeTrig(int width, int height, double angle, const SDL_FPoint *center, | ||
| 114 | SDL_Rect *rect_dest, double *cangle, double *sangle) | ||
| 115 | { | ||
| 116 | int minx, maxx, miny, maxy; | ||
| 117 | double radangle; | ||
| 118 | double x0, x1, x2, x3; | ||
| 119 | double y0, y1, y2, y3; | ||
| 120 | double sinangle; | ||
| 121 | double cosangle; | ||
| 122 | |||
| 123 | radangle = angle * (SDL_PI_D / 180.0); | ||
| 124 | sinangle = SDL_sin(radangle); | ||
| 125 | cosangle = SDL_cos(radangle); | ||
| 126 | |||
| 127 | /* | ||
| 128 | * Determine destination width and height by rotating a source box, at pixel center | ||
| 129 | */ | ||
| 130 | rotate(0.5, 0.5, sinangle, cosangle, center, &x0, &y0); | ||
| 131 | rotate(width - 0.5, 0.5, sinangle, cosangle, center, &x1, &y1); | ||
| 132 | rotate(0.5, height - 0.5, sinangle, cosangle, center, &x2, &y2); | ||
| 133 | rotate(width - 0.5, height - 0.5, sinangle, cosangle, center, &x3, &y3); | ||
| 134 | |||
| 135 | minx = (int)SDL_floor(SDL_min(SDL_min(x0, x1), SDL_min(x2, x3))); | ||
| 136 | maxx = (int)SDL_ceil(SDL_max(SDL_max(x0, x1), SDL_max(x2, x3))); | ||
| 137 | |||
| 138 | miny = (int)SDL_floor(SDL_min(SDL_min(y0, y1), SDL_min(y2, y3))); | ||
| 139 | maxy = (int)SDL_ceil(SDL_max(SDL_max(y0, y1), SDL_max(y2, y3))); | ||
| 140 | |||
| 141 | rect_dest->w = maxx - minx; | ||
| 142 | rect_dest->h = maxy - miny; | ||
| 143 | rect_dest->x = minx; | ||
| 144 | rect_dest->y = miny; | ||
| 145 | |||
| 146 | // reverse the angle because our rotations are clockwise | ||
| 147 | *sangle = -sinangle; | ||
| 148 | *cangle = cosangle; | ||
| 149 | |||
| 150 | { | ||
| 151 | // The trig code below gets the wrong size (due to FP inaccuracy?) when angle is a multiple of 90 degrees | ||
| 152 | int angle90 = (int)(angle / 90); | ||
| 153 | if (angle90 == angle / 90) { // if the angle is a multiple of 90 degrees | ||
| 154 | angle90 %= 4; | ||
| 155 | if (angle90 < 0) { | ||
| 156 | angle90 += 4; // 0:0 deg, 1:90 deg, 2:180 deg, 3:270 deg | ||
| 157 | } | ||
| 158 | |||
| 159 | if (angle90 & 1) { | ||
| 160 | rect_dest->w = height; | ||
| 161 | rect_dest->h = width; | ||
| 162 | *cangle = 0; | ||
| 163 | *sangle = angle90 == 1 ? -1 : 1; // reversed because our rotations are clockwise | ||
| 164 | } else { | ||
| 165 | rect_dest->w = width; | ||
| 166 | rect_dest->h = height; | ||
| 167 | *cangle = angle90 == 0 ? 1 : -1; | ||
| 168 | *sangle = 0; | ||
| 169 | } | ||
| 170 | } | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 174 | // Computes source pointer X/Y increments for a rotation that's a multiple of 90 degrees. | ||
| 175 | static void computeSourceIncrements90(SDL_Surface *src, int bpp, int angle, int flipx, int flipy, | ||
| 176 | int *sincx, int *sincy, int *signx, int *signy) | ||
| 177 | { | ||
| 178 | int pitch = flipy ? -src->pitch : src->pitch; | ||
| 179 | if (flipx) { | ||
| 180 | bpp = -bpp; | ||
| 181 | } | ||
| 182 | switch (angle) { // 0:0 deg, 1:90 deg, 2:180 deg, 3:270 deg | ||
| 183 | case 0: | ||
| 184 | *sincx = bpp; | ||
| 185 | *sincy = pitch - src->w * *sincx; | ||
| 186 | *signx = *signy = 1; | ||
| 187 | break; | ||
| 188 | case 1: | ||
| 189 | *sincx = -pitch; | ||
| 190 | *sincy = bpp - *sincx * src->h; | ||
| 191 | *signx = 1; | ||
| 192 | *signy = -1; | ||
| 193 | break; | ||
| 194 | case 2: | ||
| 195 | *sincx = -bpp; | ||
| 196 | *sincy = -src->w * *sincx - pitch; | ||
| 197 | *signx = *signy = -1; | ||
| 198 | break; | ||
| 199 | case 3: | ||
| 200 | default: | ||
| 201 | *sincx = pitch; | ||
| 202 | *sincy = -*sincx * src->h - bpp; | ||
| 203 | *signx = -1; | ||
| 204 | *signy = 1; | ||
| 205 | break; | ||
| 206 | } | ||
| 207 | if (flipx) { | ||
| 208 | *signx = -*signx; | ||
| 209 | } | ||
| 210 | if (flipy) { | ||
| 211 | *signy = -*signy; | ||
| 212 | } | ||
| 213 | } | ||
| 214 | |||
| 215 | // Performs a relatively fast rotation/flip when the angle is a multiple of 90 degrees. | ||
| 216 | #define TRANSFORM_SURFACE_90(pixelType) \ | ||
| 217 | int dy, dincy = dst->pitch - dst->w * sizeof(pixelType), sincx, sincy, signx, signy; \ | ||
| 218 | Uint8 *sp = (Uint8 *)src->pixels, *dp = (Uint8 *)dst->pixels, *de; \ | ||
| 219 | \ | ||
| 220 | computeSourceIncrements90(src, sizeof(pixelType), angle, flipx, flipy, &sincx, &sincy, &signx, &signy); \ | ||
| 221 | if (signx < 0) \ | ||
| 222 | sp += (src->w - 1) * sizeof(pixelType); \ | ||
| 223 | if (signy < 0) \ | ||
| 224 | sp += (src->h - 1) * src->pitch; \ | ||
| 225 | \ | ||
| 226 | for (dy = 0; dy < dst->h; sp += sincy, dp += dincy, dy++) { \ | ||
| 227 | if (sincx == sizeof(pixelType)) { /* if advancing src and dest equally, use SDL_memcpy */ \ | ||
| 228 | SDL_memcpy(dp, sp, dst->w * sizeof(pixelType)); \ | ||
| 229 | sp += dst->w * sizeof(pixelType); \ | ||
| 230 | dp += dst->w * sizeof(pixelType); \ | ||
| 231 | } else { \ | ||
| 232 | for (de = dp + dst->w * sizeof(pixelType); dp != de; sp += sincx, dp += sizeof(pixelType)) { \ | ||
| 233 | *(pixelType *)dp = *(pixelType *)sp; \ | ||
| 234 | } \ | ||
| 235 | } \ | ||
| 236 | } | ||
| 237 | |||
| 238 | static void transformSurfaceRGBA90(SDL_Surface *src, SDL_Surface *dst, int angle, int flipx, int flipy) | ||
| 239 | { | ||
| 240 | TRANSFORM_SURFACE_90(tColorRGBA); | ||
| 241 | } | ||
| 242 | |||
| 243 | static void transformSurfaceY90(SDL_Surface *src, SDL_Surface *dst, int angle, int flipx, int flipy) | ||
| 244 | { | ||
| 245 | TRANSFORM_SURFACE_90(tColorY); | ||
| 246 | } | ||
| 247 | |||
| 248 | #undef TRANSFORM_SURFACE_90 | ||
| 249 | |||
| 250 | /** | ||
| 251 | Internal 32 bit rotozoomer with optional anti-aliasing. | ||
| 252 | |||
| 253 | Rotates and zooms 32 bit RGBA/ABGR 'src' surface to 'dst' surface based on the control | ||
| 254 | parameters by scanning the destination surface and applying optionally anti-aliasing | ||
| 255 | by bilinear interpolation. | ||
| 256 | Assumes src and dst surfaces are of 32 bit depth. | ||
| 257 | Assumes dst surface was allocated with the correct dimensions. | ||
| 258 | |||
| 259 | \param src Source surface. | ||
| 260 | \param dst Destination surface. | ||
| 261 | \param isin Integer version of sine of angle. | ||
| 262 | \param icos Integer version of cosine of angle. | ||
| 263 | \param flipx Flag indicating horizontal mirroring should be applied. | ||
| 264 | \param flipy Flag indicating vertical mirroring should be applied. | ||
| 265 | \param smooth Flag indicating anti-aliasing should be used. | ||
| 266 | \param rect_dest destination coordinates | ||
| 267 | \param center true center. | ||
| 268 | */ | ||
| 269 | static void transformSurfaceRGBA(SDL_Surface *src, SDL_Surface *dst, int isin, int icos, | ||
| 270 | int flipx, int flipy, int smooth, | ||
| 271 | const SDL_Rect *rect_dest, | ||
| 272 | const SDL_FPoint *center) | ||
| 273 | { | ||
| 274 | int sw, sh; | ||
| 275 | int cx, cy; | ||
| 276 | tColorRGBA c00, c01, c10, c11, cswap; | ||
| 277 | tColorRGBA *pc, *sp; | ||
| 278 | int gap; | ||
| 279 | const int fp_half = (1 << 15); | ||
| 280 | |||
| 281 | /* | ||
| 282 | * Variable setup | ||
| 283 | */ | ||
| 284 | sw = src->w - 1; | ||
| 285 | sh = src->h - 1; | ||
| 286 | pc = (tColorRGBA *)dst->pixels; | ||
| 287 | gap = dst->pitch - dst->w * 4; | ||
| 288 | cx = (int)(center->x * 65536.0); | ||
| 289 | cy = (int)(center->y * 65536.0); | ||
| 290 | |||
| 291 | /* | ||
| 292 | * Switch between interpolating and non-interpolating code | ||
| 293 | */ | ||
| 294 | if (smooth) { | ||
| 295 | int y; | ||
| 296 | for (y = 0; y < dst->h; y++) { | ||
| 297 | int x; | ||
| 298 | double src_x = ((double)rect_dest->x + 0 + 0.5 - center->x); | ||
| 299 | double src_y = ((double)rect_dest->y + y + 0.5 - center->y); | ||
| 300 | int sdx = (int)((icos * src_x - isin * src_y) + cx - fp_half); | ||
| 301 | int sdy = (int)((isin * src_x + icos * src_y) + cy - fp_half); | ||
| 302 | for (x = 0; x < dst->w; x++) { | ||
| 303 | int dx = (sdx >> 16); | ||
| 304 | int dy = (sdy >> 16); | ||
| 305 | if (flipx) { | ||
| 306 | dx = sw - dx; | ||
| 307 | } | ||
| 308 | if (flipy) { | ||
| 309 | dy = sh - dy; | ||
| 310 | } | ||
| 311 | if ((dx > -1) && (dy > -1) && (dx < (src->w - 1)) && (dy < (src->h - 1))) { | ||
| 312 | int ex, ey; | ||
| 313 | int t1, t2; | ||
| 314 | sp = (tColorRGBA *)((Uint8 *)src->pixels + src->pitch * dy) + dx; | ||
| 315 | c00 = *sp; | ||
| 316 | sp += 1; | ||
| 317 | c01 = *sp; | ||
| 318 | sp += (src->pitch / 4); | ||
| 319 | c11 = *sp; | ||
| 320 | sp -= 1; | ||
| 321 | c10 = *sp; | ||
| 322 | if (flipx) { | ||
| 323 | cswap = c00; | ||
| 324 | c00 = c01; | ||
| 325 | c01 = cswap; | ||
| 326 | cswap = c10; | ||
| 327 | c10 = c11; | ||
| 328 | c11 = cswap; | ||
| 329 | } | ||
| 330 | if (flipy) { | ||
| 331 | cswap = c00; | ||
| 332 | c00 = c10; | ||
| 333 | c10 = cswap; | ||
| 334 | cswap = c01; | ||
| 335 | c01 = c11; | ||
| 336 | c11 = cswap; | ||
| 337 | } | ||
| 338 | /* | ||
| 339 | * Interpolate colors | ||
| 340 | */ | ||
| 341 | ex = (sdx & 0xffff); | ||
| 342 | ey = (sdy & 0xffff); | ||
| 343 | t1 = ((((c01.r - c00.r) * ex) >> 16) + c00.r) & 0xff; | ||
| 344 | t2 = ((((c11.r - c10.r) * ex) >> 16) + c10.r) & 0xff; | ||
| 345 | pc->r = (Uint8)((((t2 - t1) * ey) >> 16) + t1); | ||
| 346 | t1 = ((((c01.g - c00.g) * ex) >> 16) + c00.g) & 0xff; | ||
| 347 | t2 = ((((c11.g - c10.g) * ex) >> 16) + c10.g) & 0xff; | ||
| 348 | pc->g = (Uint8)((((t2 - t1) * ey) >> 16) + t1); | ||
| 349 | t1 = ((((c01.b - c00.b) * ex) >> 16) + c00.b) & 0xff; | ||
| 350 | t2 = ((((c11.b - c10.b) * ex) >> 16) + c10.b) & 0xff; | ||
| 351 | pc->b = (Uint8)((((t2 - t1) * ey) >> 16) + t1); | ||
| 352 | t1 = ((((c01.a - c00.a) * ex) >> 16) + c00.a) & 0xff; | ||
| 353 | t2 = ((((c11.a - c10.a) * ex) >> 16) + c10.a) & 0xff; | ||
| 354 | pc->a = (Uint8)((((t2 - t1) * ey) >> 16) + t1); | ||
| 355 | } | ||
| 356 | sdx += icos; | ||
| 357 | sdy += isin; | ||
| 358 | pc++; | ||
| 359 | } | ||
| 360 | pc = (tColorRGBA *)((Uint8 *)pc + gap); | ||
| 361 | } | ||
| 362 | } else { | ||
| 363 | int y; | ||
| 364 | for (y = 0; y < dst->h; y++) { | ||
| 365 | int x; | ||
| 366 | double src_x = ((double)rect_dest->x + 0 + 0.5 - center->x); | ||
| 367 | double src_y = ((double)rect_dest->y + y + 0.5 - center->y); | ||
| 368 | int sdx = (int)((icos * src_x - isin * src_y) + cx - fp_half); | ||
| 369 | int sdy = (int)((isin * src_x + icos * src_y) + cy - fp_half); | ||
| 370 | for (x = 0; x < dst->w; x++) { | ||
| 371 | int dx = (sdx >> 16); | ||
| 372 | int dy = (sdy >> 16); | ||
| 373 | if ((unsigned)dx < (unsigned)src->w && (unsigned)dy < (unsigned)src->h) { | ||
| 374 | if (flipx) { | ||
| 375 | dx = sw - dx; | ||
| 376 | } | ||
| 377 | if (flipy) { | ||
| 378 | dy = sh - dy; | ||
| 379 | } | ||
| 380 | *pc = *((tColorRGBA *)((Uint8 *)src->pixels + src->pitch * dy) + dx); | ||
| 381 | } | ||
| 382 | sdx += icos; | ||
| 383 | sdy += isin; | ||
| 384 | pc++; | ||
| 385 | } | ||
| 386 | pc = (tColorRGBA *)((Uint8 *)pc + gap); | ||
| 387 | } | ||
| 388 | } | ||
| 389 | } | ||
| 390 | |||
| 391 | /** | ||
| 392 | |||
| 393 | Rotates and zooms 8 bit palette/Y 'src' surface to 'dst' surface without smoothing. | ||
| 394 | |||
| 395 | Rotates and zooms 8 bit RGBA/ABGR 'src' surface to 'dst' surface based on the control | ||
| 396 | parameters by scanning the destination surface. | ||
| 397 | Assumes src and dst surfaces are of 8 bit depth. | ||
| 398 | Assumes dst surface was allocated with the correct dimensions. | ||
| 399 | |||
| 400 | \param src Source surface. | ||
| 401 | \param dst Destination surface. | ||
| 402 | \param isin Integer version of sine of angle. | ||
| 403 | \param icos Integer version of cosine of angle. | ||
| 404 | \param flipx Flag indicating horizontal mirroring should be applied. | ||
| 405 | \param flipy Flag indicating vertical mirroring should be applied. | ||
| 406 | \param rect_dest destination coordinates | ||
| 407 | \param center true center. | ||
| 408 | */ | ||
| 409 | static void transformSurfaceY(SDL_Surface *src, SDL_Surface *dst, int isin, int icos, int flipx, int flipy, | ||
| 410 | const SDL_Rect *rect_dest, | ||
| 411 | const SDL_FPoint *center) | ||
| 412 | { | ||
| 413 | int sw, sh; | ||
| 414 | int cx, cy; | ||
| 415 | tColorY *pc; | ||
| 416 | int gap; | ||
| 417 | const int fp_half = (1 << 15); | ||
| 418 | int y; | ||
| 419 | |||
| 420 | /* | ||
| 421 | * Variable setup | ||
| 422 | */ | ||
| 423 | sw = src->w - 1; | ||
| 424 | sh = src->h - 1; | ||
| 425 | pc = (tColorY *)dst->pixels; | ||
| 426 | gap = dst->pitch - dst->w; | ||
| 427 | cx = (int)(center->x * 65536.0); | ||
| 428 | cy = (int)(center->y * 65536.0); | ||
| 429 | |||
| 430 | /* | ||
| 431 | * Clear surface to colorkey | ||
| 432 | */ | ||
| 433 | SDL_memset(pc, (int)(get_colorkey(src) & 0xff), (size_t)dst->pitch * dst->h); | ||
| 434 | /* | ||
| 435 | * Iterate through destination surface | ||
| 436 | */ | ||
| 437 | for (y = 0; y < dst->h; y++) { | ||
| 438 | int x; | ||
| 439 | double src_x = ((double)rect_dest->x + 0 + 0.5 - center->x); | ||
| 440 | double src_y = ((double)rect_dest->y + y + 0.5 - center->y); | ||
| 441 | int sdx = (int)((icos * src_x - isin * src_y) + cx - fp_half); | ||
| 442 | int sdy = (int)((isin * src_x + icos * src_y) + cy - fp_half); | ||
| 443 | for (x = 0; x < dst->w; x++) { | ||
| 444 | int dx = (sdx >> 16); | ||
| 445 | int dy = (sdy >> 16); | ||
| 446 | if ((unsigned)dx < (unsigned)src->w && (unsigned)dy < (unsigned)src->h) { | ||
| 447 | if (flipx) { | ||
| 448 | dx = sw - dx; | ||
| 449 | } | ||
| 450 | if (flipy) { | ||
| 451 | dy = sh - dy; | ||
| 452 | } | ||
| 453 | *pc = *((tColorY *)src->pixels + src->pitch * dy + dx); | ||
| 454 | } | ||
| 455 | sdx += icos; | ||
| 456 | sdy += isin; | ||
| 457 | pc++; | ||
| 458 | } | ||
| 459 | pc += gap; | ||
| 460 | } | ||
| 461 | } | ||
| 462 | |||
| 463 | /** | ||
| 464 | Rotates and zooms a surface with different horizontal and vertival scaling factors and optional anti-aliasing. | ||
| 465 | |||
| 466 | Rotates a 32-bit or 8-bit 'src' surface to newly created 'dst' surface. | ||
| 467 | 'angle' is the rotation in degrees, 'center' the rotation center. If 'smooth' is set | ||
| 468 | then the destination 32-bit surface is anti-aliased. 8-bit surfaces must have a colorkey. 32-bit | ||
| 469 | surfaces must have a 8888 layout with red, green, blue and alpha masks (any ordering goes). | ||
| 470 | The blend mode of the 'src' surface has some effects on generation of the 'dst' surface: The NONE | ||
| 471 | mode will set the BLEND mode on the 'dst' surface. The MOD mode either generates a white 'dst' | ||
| 472 | surface and sets the colorkey or fills the it with the colorkey before copying the pixels. | ||
| 473 | When using the NONE and MOD modes, color and alpha modulation must be applied before using this function. | ||
| 474 | |||
| 475 | \param src The surface to rotozoom. | ||
| 476 | \param angle The angle to rotate in degrees. | ||
| 477 | \param smooth Antialiasing flag; set to SMOOTHING_ON to enable. | ||
| 478 | \param flipx Set to 1 to flip the image horizontally | ||
| 479 | \param flipy Set to 1 to flip the image vertically | ||
| 480 | \param rect_dest The destination rect bounding box | ||
| 481 | \param cangle The angle cosine | ||
| 482 | \param sangle The angle sine | ||
| 483 | \param center The true coordinate of the center of rotation | ||
| 484 | \return The new rotated surface. | ||
| 485 | |||
| 486 | */ | ||
| 487 | |||
| 488 | SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, int flipx, int flipy, | ||
| 489 | const SDL_Rect *rect_dest, double cangle, double sangle, const SDL_FPoint *center) | ||
| 490 | { | ||
| 491 | SDL_Surface *rz_dst; | ||
| 492 | int is8bit, angle90; | ||
| 493 | SDL_BlendMode blendmode; | ||
| 494 | Uint32 colorkey = 0; | ||
| 495 | bool colorKeyAvailable = false; | ||
| 496 | double sangleinv, cangleinv; | ||
| 497 | |||
| 498 | // Sanity check | ||
| 499 | if (!SDL_SurfaceValid(src)) { | ||
| 500 | return NULL; | ||
| 501 | } | ||
| 502 | |||
| 503 | if (SDL_SurfaceHasColorKey(src)) { | ||
| 504 | if (SDL_GetSurfaceColorKey(src, &colorkey)) { | ||
| 505 | colorKeyAvailable = true; | ||
| 506 | } | ||
| 507 | } | ||
| 508 | // This function requires a 32-bit surface or 8-bit surface with a colorkey | ||
| 509 | is8bit = src->fmt->bits_per_pixel == 8 && colorKeyAvailable; | ||
| 510 | if (!(is8bit || (src->fmt->bits_per_pixel == 32 && SDL_ISPIXELFORMAT_ALPHA(src->format)))) { | ||
| 511 | return NULL; | ||
| 512 | } | ||
| 513 | |||
| 514 | // Calculate target factors from sine/cosine and zoom | ||
| 515 | sangleinv = sangle * 65536.0; | ||
| 516 | cangleinv = cangle * 65536.0; | ||
| 517 | |||
| 518 | // Alloc space to completely contain the rotated surface | ||
| 519 | rz_dst = NULL; | ||
| 520 | if (is8bit) { | ||
| 521 | // Target surface is 8 bit | ||
| 522 | rz_dst = SDL_CreateSurface(rect_dest->w, rect_dest->h + GUARD_ROWS, src->format); | ||
| 523 | if (rz_dst) { | ||
| 524 | SDL_SetSurfacePalette(rz_dst, src->palette); | ||
| 525 | } | ||
| 526 | } else { | ||
| 527 | // Target surface is 32 bit with source RGBA ordering | ||
| 528 | rz_dst = SDL_CreateSurface(rect_dest->w, rect_dest->h + GUARD_ROWS, src->format); | ||
| 529 | } | ||
| 530 | |||
| 531 | // Check target | ||
| 532 | if (!rz_dst) { | ||
| 533 | return NULL; | ||
| 534 | } | ||
| 535 | |||
| 536 | // Adjust for guard rows | ||
| 537 | rz_dst->h = rect_dest->h; | ||
| 538 | |||
| 539 | SDL_GetSurfaceBlendMode(src, &blendmode); | ||
| 540 | |||
| 541 | if (colorKeyAvailable) { | ||
| 542 | // If available, the colorkey will be used to discard the pixels that are outside of the rotated area. | ||
| 543 | SDL_SetSurfaceColorKey(rz_dst, true, colorkey); | ||
| 544 | SDL_FillSurfaceRect(rz_dst, NULL, colorkey); | ||
| 545 | } else if (blendmode == SDL_BLENDMODE_NONE) { | ||
| 546 | blendmode = SDL_BLENDMODE_BLEND; | ||
| 547 | } else if (blendmode == SDL_BLENDMODE_MOD || blendmode == SDL_BLENDMODE_MUL) { | ||
| 548 | /* Without a colorkey, the target texture has to be white for the MOD and MUL blend mode so | ||
| 549 | * that the pixels outside the rotated area don't affect the destination surface. | ||
| 550 | */ | ||
| 551 | colorkey = SDL_MapSurfaceRGBA(rz_dst, 255, 255, 255, 0); | ||
| 552 | SDL_FillSurfaceRect(rz_dst, NULL, colorkey); | ||
| 553 | /* Setting a white colorkey for the destination surface makes the final blit discard | ||
| 554 | * all pixels outside of the rotated area. This doesn't interfere with anything because | ||
| 555 | * white pixels are already a no-op and the MOD blend mode does not interact with alpha. | ||
| 556 | */ | ||
| 557 | SDL_SetSurfaceColorKey(rz_dst, true, colorkey); | ||
| 558 | } | ||
| 559 | |||
| 560 | SDL_SetSurfaceBlendMode(rz_dst, blendmode); | ||
| 561 | |||
| 562 | // Lock source surface | ||
| 563 | if (SDL_MUSTLOCK(src)) { | ||
| 564 | if (!SDL_LockSurface(src)) { | ||
| 565 | SDL_DestroySurface(rz_dst); | ||
| 566 | return NULL; | ||
| 567 | } | ||
| 568 | } | ||
| 569 | |||
| 570 | /* check if the rotation is a multiple of 90 degrees so we can take a fast path and also somewhat reduce | ||
| 571 | * the off-by-one problem in transformSurfaceRGBA that expresses itself when the rotation is near | ||
| 572 | * multiples of 90 degrees. | ||
| 573 | */ | ||
| 574 | angle90 = (int)(angle / 90); | ||
| 575 | if (angle90 == angle / 90) { | ||
| 576 | angle90 %= 4; | ||
| 577 | if (angle90 < 0) { | ||
| 578 | angle90 += 4; // 0:0 deg, 1:90 deg, 2:180 deg, 3:270 deg | ||
| 579 | } | ||
| 580 | |||
| 581 | } else { | ||
| 582 | angle90 = -1; | ||
| 583 | } | ||
| 584 | |||
| 585 | if (is8bit) { | ||
| 586 | // Call the 8-bit transformation routine to do the rotation | ||
| 587 | if (angle90 >= 0) { | ||
| 588 | transformSurfaceY90(src, rz_dst, angle90, flipx, flipy); | ||
| 589 | } else { | ||
| 590 | transformSurfaceY(src, rz_dst, (int)sangleinv, (int)cangleinv, | ||
| 591 | flipx, flipy, rect_dest, center); | ||
| 592 | } | ||
| 593 | } else { | ||
| 594 | // Call the 32-bit transformation routine to do the rotation | ||
| 595 | if (angle90 >= 0) { | ||
| 596 | transformSurfaceRGBA90(src, rz_dst, angle90, flipx, flipy); | ||
| 597 | } else { | ||
| 598 | transformSurfaceRGBA(src, rz_dst, (int)sangleinv, (int)cangleinv, | ||
| 599 | flipx, flipy, smooth, rect_dest, center); | ||
| 600 | } | ||
| 601 | } | ||
| 602 | |||
| 603 | // Unlock source surface | ||
| 604 | if (SDL_MUSTLOCK(src)) { | ||
| 605 | SDL_UnlockSurface(src); | ||
| 606 | } | ||
| 607 | |||
| 608 | // Return rotated surface | ||
| 609 | return rz_dst; | ||
| 610 | } | ||
| 611 | |||
| 612 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_rotate.h b/SDL-3.2.8/src/render/software/SDL_rotate.h new file mode 100644 index 0000000..ecf84f7 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_rotate.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_rotate_h_ | ||
| 23 | #define SDL_rotate_h_ | ||
| 24 | |||
| 25 | extern SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, int flipx, int flipy, | ||
| 26 | const SDL_Rect *rect_dest, double cangle, double sangle, const SDL_FPoint *center); | ||
| 27 | extern void SDLgfx_rotozoomSurfaceSizeTrig(int width, int height, double angle, const SDL_FPoint *center, | ||
| 28 | SDL_Rect *rect_dest, double *cangle, double *sangle); | ||
| 29 | |||
| 30 | #endif // SDL_rotate_h_ | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_triangle.c b/SDL-3.2.8/src/render/software/SDL_triangle.c new file mode 100644 index 0000000..c4e16d1 --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_triangle.c | |||
| @@ -0,0 +1,945 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_SW | ||
| 24 | |||
| 25 | #include <limits.h> | ||
| 26 | |||
| 27 | #include "SDL_triangle.h" | ||
| 28 | |||
| 29 | #include "../../video/SDL_surface_c.h" | ||
| 30 | |||
| 31 | /* fixed points bits precision | ||
| 32 | * Set to 1, so that it can start rendering with middle of a pixel precision. | ||
| 33 | * It doesn't need to be increased. | ||
| 34 | * But, if increased too much, it overflows (srcx, srcy) coordinates used for filling with texture. | ||
| 35 | * (which could be turned to int64). | ||
| 36 | */ | ||
| 37 | #define FP_BITS 1 | ||
| 38 | |||
| 39 | #define COLOR_EQ(c1, c2) ((c1).r == (c2).r && (c1).g == (c2).g && (c1).b == (c2).b && (c1).a == (c2).a) | ||
| 40 | |||
| 41 | static void SDL_BlitTriangle_Slow(SDL_BlitInfo *info, | ||
| 42 | SDL_Point s2_x_area, SDL_Rect dstrect, int area, int bias_w0, int bias_w1, int bias_w2, | ||
| 43 | int d2d1_y, int d1d2_x, int d0d2_y, int d2d0_x, int d1d0_y, int d0d1_x, | ||
| 44 | int s2s0_x, int s2s1_x, int s2s0_y, int s2s1_y, int w0_row, int w1_row, int w2_row, | ||
| 45 | SDL_Color c0, SDL_Color c1, SDL_Color c2, bool is_uniform, SDL_TextureAddressMode texture_address_mode); | ||
| 46 | |||
| 47 | #if 0 | ||
| 48 | bool SDL_BlitTriangle(SDL_Surface *src, const SDL_Point srcpoints[3], SDL_Surface *dst, const SDL_Point dstpoints[3]) | ||
| 49 | { | ||
| 50 | int i; | ||
| 51 | SDL_Point points[6]; | ||
| 52 | |||
| 53 | if (src == NULL || dst == NULL) { | ||
| 54 | return false; | ||
| 55 | } | ||
| 56 | |||
| 57 | for (i = 0; i < 3; i++) { | ||
| 58 | if (srcpoints[i].x < 0 || srcpoints[i].y < 0 || srcpoints[i].x >= src->w || srcpoints[i].y >= src->h) { | ||
| 59 | return SDL_SetError("Values of 'srcpoints' out of bounds"); | ||
| 60 | } | ||
| 61 | } | ||
| 62 | |||
| 63 | points[0] = srcpoints[0]; | ||
| 64 | points[1] = dstpoints[0]; | ||
| 65 | points[2] = srcpoints[1]; | ||
| 66 | points[3] = dstpoints[1]; | ||
| 67 | points[4] = srcpoints[2]; | ||
| 68 | points[5] = dstpoints[2]; | ||
| 69 | for (i = 0; i < 3; i++) { | ||
| 70 | trianglepoint_2_fixedpoint(&points[2 * i + 1]); | ||
| 71 | } | ||
| 72 | return SDL_SW_BlitTriangle(src, dst, points); | ||
| 73 | } | ||
| 74 | |||
| 75 | bool SDL_FillTriangle(SDL_Surface *dst, const SDL_Point points[3], Uint32 color) | ||
| 76 | { | ||
| 77 | int i; | ||
| 78 | SDL_Point points_tmp[3]; | ||
| 79 | if (dst == NULL) { | ||
| 80 | return false; | ||
| 81 | } | ||
| 82 | for (i = 0; i < 3; i++) { | ||
| 83 | points_tmp[i] = points[i]; | ||
| 84 | trianglepoint_2_fixedpoint(&points_tmp[i]); | ||
| 85 | } | ||
| 86 | return SDL_SW_FillTriangle(dst, points_tmp, SDL_BLENDMODE_NONE, color); | ||
| 87 | } | ||
| 88 | #endif | ||
| 89 | |||
| 90 | // cross product AB x AC | ||
| 91 | static Sint64 cross_product(const SDL_Point *a, const SDL_Point *b, int c_x, int c_y) | ||
| 92 | { | ||
| 93 | return ((Sint64)(b->x - a->x)) * ((Sint64)(c_y - a->y)) - ((Sint64)(b->y - a->y)) * ((Sint64)(c_x - a->x)); | ||
| 94 | } | ||
| 95 | |||
| 96 | // check for top left rules | ||
| 97 | static bool is_top_left(const SDL_Point *a, const SDL_Point *b, int is_clockwise) | ||
| 98 | { | ||
| 99 | if (is_clockwise) { | ||
| 100 | if (a->y == b->y && a->x < b->x) { | ||
| 101 | return true; | ||
| 102 | } | ||
| 103 | if (b->y < a->y) { | ||
| 104 | return true; | ||
| 105 | } | ||
| 106 | } else { | ||
| 107 | if (a->y == b->y && b->x < a->x) { | ||
| 108 | return true; | ||
| 109 | } | ||
| 110 | if (a->y < b->y) { | ||
| 111 | return true; | ||
| 112 | } | ||
| 113 | } | ||
| 114 | return false; | ||
| 115 | } | ||
| 116 | |||
| 117 | // x = (y << FP_BITS) | ||
| 118 | // prevent runtime error: left shift of negative value | ||
| 119 | #define PRECOMP(x, y) \ | ||
| 120 | val = y; \ | ||
| 121 | if (val >= 0) { \ | ||
| 122 | x = val << FP_BITS; \ | ||
| 123 | } else { \ | ||
| 124 | val *= -1; \ | ||
| 125 | x = val << FP_BITS; \ | ||
| 126 | x *= -1; \ | ||
| 127 | } | ||
| 128 | |||
| 129 | void trianglepoint_2_fixedpoint(SDL_Point *a) | ||
| 130 | { | ||
| 131 | int val; | ||
| 132 | PRECOMP(a->x, a->x); | ||
| 133 | PRECOMP(a->y, a->y); | ||
| 134 | } | ||
| 135 | |||
| 136 | // bounding rect of three points (in fixed point) | ||
| 137 | static void bounding_rect_fixedpoint(const SDL_Point *a, const SDL_Point *b, const SDL_Point *c, SDL_Rect *r) | ||
| 138 | { | ||
| 139 | int min_x = SDL_min(a->x, SDL_min(b->x, c->x)); | ||
| 140 | int max_x = SDL_max(a->x, SDL_max(b->x, c->x)); | ||
| 141 | int min_y = SDL_min(a->y, SDL_min(b->y, c->y)); | ||
| 142 | int max_y = SDL_max(a->y, SDL_max(b->y, c->y)); | ||
| 143 | // points are in fixed point, shift back | ||
| 144 | r->x = min_x >> FP_BITS; | ||
| 145 | r->y = min_y >> FP_BITS; | ||
| 146 | r->w = (max_x - min_x) >> FP_BITS; | ||
| 147 | r->h = (max_y - min_y) >> FP_BITS; | ||
| 148 | } | ||
| 149 | |||
| 150 | // bounding rect of three points | ||
| 151 | static void bounding_rect(const SDL_Point *a, const SDL_Point *b, const SDL_Point *c, SDL_Rect *r) | ||
| 152 | { | ||
| 153 | int min_x = SDL_min(a->x, SDL_min(b->x, c->x)); | ||
| 154 | int max_x = SDL_max(a->x, SDL_max(b->x, c->x)); | ||
| 155 | int min_y = SDL_min(a->y, SDL_min(b->y, c->y)); | ||
| 156 | int max_y = SDL_max(a->y, SDL_max(b->y, c->y)); | ||
| 157 | r->x = min_x; | ||
| 158 | r->y = min_y; | ||
| 159 | r->w = (max_x - min_x); | ||
| 160 | r->h = (max_y - min_y); | ||
| 161 | } | ||
| 162 | |||
| 163 | /* Triangle rendering, using Barycentric coordinates (w0, w1, w2) | ||
| 164 | * | ||
| 165 | * The cross product isn't computed from scratch at each iteration, | ||
| 166 | * but optimized using constant step increments | ||
| 167 | * | ||
| 168 | */ | ||
| 169 | |||
| 170 | #define TRIANGLE_BEGIN_LOOP \ | ||
| 171 | { \ | ||
| 172 | int x, y; \ | ||
| 173 | for (y = 0; y < dstrect.h; y++) { \ | ||
| 174 | /* y start */ \ | ||
| 175 | Sint64 w0 = w0_row; \ | ||
| 176 | Sint64 w1 = w1_row; \ | ||
| 177 | Sint64 w2 = w2_row; \ | ||
| 178 | for (x = 0; x < dstrect.w; x++) { \ | ||
| 179 | /* In triangle */ \ | ||
| 180 | if (w0 + bias_w0 >= 0 && w1 + bias_w1 >= 0 && w2 + bias_w2 >= 0) { \ | ||
| 181 | Uint8 *dptr = (Uint8 *)dst_ptr + x * dstbpp; | ||
| 182 | |||
| 183 | // Use 64 bits precision to prevent overflow when interpolating color / texture with wide triangles | ||
| 184 | #define TRIANGLE_GET_TEXTCOORD \ | ||
| 185 | int srcx = (int)(((Sint64)w0 * s2s0_x + (Sint64)w1 * s2s1_x + s2_x_area.x) / area); \ | ||
| 186 | int srcy = (int)(((Sint64)w0 * s2s0_y + (Sint64)w1 * s2s1_y + s2_x_area.y) / area); \ | ||
| 187 | if (texture_address_mode == SDL_TEXTURE_ADDRESS_WRAP) { \ | ||
| 188 | srcx %= src_surface->w; \ | ||
| 189 | if (srcx < 0) { \ | ||
| 190 | srcx += (src_surface->w - 1); \ | ||
| 191 | } \ | ||
| 192 | srcy %= src_surface->h; \ | ||
| 193 | if (srcy < 0) { \ | ||
| 194 | srcy += (src_surface->h - 1); \ | ||
| 195 | } \ | ||
| 196 | } | ||
| 197 | |||
| 198 | #define TRIANGLE_GET_MAPPED_COLOR \ | ||
| 199 | Uint8 r = (Uint8)(((Sint64)w0 * c0.r + (Sint64)w1 * c1.r + (Sint64)w2 * c2.r) / area); \ | ||
| 200 | Uint8 g = (Uint8)(((Sint64)w0 * c0.g + (Sint64)w1 * c1.g + (Sint64)w2 * c2.g) / area); \ | ||
| 201 | Uint8 b = (Uint8)(((Sint64)w0 * c0.b + (Sint64)w1 * c1.b + (Sint64)w2 * c2.b) / area); \ | ||
| 202 | Uint8 a = (Uint8)(((Sint64)w0 * c0.a + (Sint64)w1 * c1.a + (Sint64)w2 * c2.a) / area); \ | ||
| 203 | Uint32 color = SDL_MapRGBA(format, palette, r, g, b, a); | ||
| 204 | |||
| 205 | #define TRIANGLE_GET_COLOR \ | ||
| 206 | int r = (int)(((Sint64)w0 * c0.r + (Sint64)w1 * c1.r + (Sint64)w2 * c2.r) / area); \ | ||
| 207 | int g = (int)(((Sint64)w0 * c0.g + (Sint64)w1 * c1.g + (Sint64)w2 * c2.g) / area); \ | ||
| 208 | int b = (int)(((Sint64)w0 * c0.b + (Sint64)w1 * c1.b + (Sint64)w2 * c2.b) / area); \ | ||
| 209 | int a = (int)(((Sint64)w0 * c0.a + (Sint64)w1 * c1.a + (Sint64)w2 * c2.a) / area); | ||
| 210 | |||
| 211 | #define TRIANGLE_END_LOOP \ | ||
| 212 | } \ | ||
| 213 | /* x += 1 */ \ | ||
| 214 | w0 += d2d1_y; \ | ||
| 215 | w1 += d0d2_y; \ | ||
| 216 | w2 += d1d0_y; \ | ||
| 217 | } \ | ||
| 218 | /* y += 1 */ \ | ||
| 219 | w0_row += d1d2_x; \ | ||
| 220 | w1_row += d2d0_x; \ | ||
| 221 | w2_row += d0d1_x; \ | ||
| 222 | dst_ptr += dst_pitch; \ | ||
| 223 | } \ | ||
| 224 | } | ||
| 225 | |||
| 226 | bool SDL_SW_FillTriangle(SDL_Surface *dst, SDL_Point *d0, SDL_Point *d1, SDL_Point *d2, SDL_BlendMode blend, SDL_Color c0, SDL_Color c1, SDL_Color c2) | ||
| 227 | { | ||
| 228 | bool result = true; | ||
| 229 | int dst_locked = 0; | ||
| 230 | |||
| 231 | SDL_Rect dstrect; | ||
| 232 | |||
| 233 | int dstbpp; | ||
| 234 | Uint8 *dst_ptr; | ||
| 235 | int dst_pitch; | ||
| 236 | |||
| 237 | Sint64 area; | ||
| 238 | int is_clockwise; | ||
| 239 | |||
| 240 | int d2d1_y, d1d2_x, d0d2_y, d2d0_x, d1d0_y, d0d1_x; | ||
| 241 | Sint64 w0_row, w1_row, w2_row; | ||
| 242 | int bias_w0, bias_w1, bias_w2; | ||
| 243 | |||
| 244 | bool is_uniform; | ||
| 245 | |||
| 246 | SDL_Surface *tmp = NULL; | ||
| 247 | |||
| 248 | if (!SDL_SurfaceValid(dst)) { | ||
| 249 | return false; | ||
| 250 | } | ||
| 251 | |||
| 252 | area = cross_product(d0, d1, d2->x, d2->y); | ||
| 253 | |||
| 254 | is_uniform = COLOR_EQ(c0, c1) && COLOR_EQ(c1, c2); | ||
| 255 | |||
| 256 | // Flat triangle | ||
| 257 | if (area == 0) { | ||
| 258 | return true; | ||
| 259 | } | ||
| 260 | |||
| 261 | // Lock the destination, if needed | ||
| 262 | if (SDL_MUSTLOCK(dst)) { | ||
| 263 | if (!SDL_LockSurface(dst)) { | ||
| 264 | result = false; | ||
| 265 | goto end; | ||
| 266 | } else { | ||
| 267 | dst_locked = 1; | ||
| 268 | } | ||
| 269 | } | ||
| 270 | |||
| 271 | bounding_rect_fixedpoint(d0, d1, d2, &dstrect); | ||
| 272 | |||
| 273 | { | ||
| 274 | // Clip triangle rect with surface rect | ||
| 275 | SDL_Rect rect; | ||
| 276 | rect.x = 0; | ||
| 277 | rect.y = 0; | ||
| 278 | rect.w = dst->w; | ||
| 279 | rect.h = dst->h; | ||
| 280 | SDL_GetRectIntersection(&dstrect, &rect, &dstrect); | ||
| 281 | } | ||
| 282 | |||
| 283 | { | ||
| 284 | // Clip triangle with surface clip rect | ||
| 285 | SDL_Rect rect; | ||
| 286 | SDL_GetSurfaceClipRect(dst, &rect); | ||
| 287 | SDL_GetRectIntersection(&dstrect, &rect, &dstrect); | ||
| 288 | } | ||
| 289 | |||
| 290 | if (blend != SDL_BLENDMODE_NONE) { | ||
| 291 | SDL_PixelFormat format = dst->format; | ||
| 292 | |||
| 293 | // need an alpha format | ||
| 294 | if (!SDL_ISPIXELFORMAT_ALPHA(format)) { | ||
| 295 | format = SDL_PIXELFORMAT_ARGB8888; | ||
| 296 | } | ||
| 297 | |||
| 298 | // Use an intermediate surface | ||
| 299 | tmp = SDL_CreateSurface(dstrect.w, dstrect.h, format); | ||
| 300 | if (!tmp) { | ||
| 301 | result = false; | ||
| 302 | goto end; | ||
| 303 | } | ||
| 304 | |||
| 305 | if (blend == SDL_BLENDMODE_MOD) { | ||
| 306 | Uint32 c = SDL_MapSurfaceRGBA(tmp, 255, 255, 255, 255); | ||
| 307 | SDL_FillSurfaceRect(tmp, NULL, c); | ||
| 308 | } | ||
| 309 | |||
| 310 | SDL_SetSurfaceBlendMode(tmp, blend); | ||
| 311 | |||
| 312 | dstbpp = tmp->fmt->bytes_per_pixel; | ||
| 313 | dst_ptr = (Uint8 *)tmp->pixels; | ||
| 314 | dst_pitch = tmp->pitch; | ||
| 315 | |||
| 316 | } else { | ||
| 317 | // Write directly to destination surface | ||
| 318 | dstbpp = dst->fmt->bytes_per_pixel; | ||
| 319 | dst_ptr = (Uint8 *)dst->pixels + dstrect.x * dstbpp + dstrect.y * dst->pitch; | ||
| 320 | dst_pitch = dst->pitch; | ||
| 321 | } | ||
| 322 | |||
| 323 | is_clockwise = area > 0; | ||
| 324 | if (area < 0) { | ||
| 325 | area = -area; | ||
| 326 | } | ||
| 327 | |||
| 328 | { | ||
| 329 | int val; | ||
| 330 | PRECOMP(d2d1_y, d1->y - d2->y) | ||
| 331 | PRECOMP(d0d2_y, d2->y - d0->y) | ||
| 332 | PRECOMP(d1d0_y, d0->y - d1->y) | ||
| 333 | PRECOMP(d1d2_x, d2->x - d1->x) | ||
| 334 | PRECOMP(d2d0_x, d0->x - d2->x) | ||
| 335 | PRECOMP(d0d1_x, d1->x - d0->x) | ||
| 336 | } | ||
| 337 | |||
| 338 | // Starting point for rendering, at the middle of a pixel | ||
| 339 | { | ||
| 340 | SDL_Point p; | ||
| 341 | p.x = dstrect.x; | ||
| 342 | p.y = dstrect.y; | ||
| 343 | trianglepoint_2_fixedpoint(&p); | ||
| 344 | p.x += (1 << FP_BITS) / 2; | ||
| 345 | p.y += (1 << FP_BITS) / 2; | ||
| 346 | w0_row = cross_product(d1, d2, p.x, p.y); | ||
| 347 | w1_row = cross_product(d2, d0, p.x, p.y); | ||
| 348 | w2_row = cross_product(d0, d1, p.x, p.y); | ||
| 349 | } | ||
| 350 | |||
| 351 | // Handle anti-clockwise triangles | ||
| 352 | if (!is_clockwise) { | ||
| 353 | d2d1_y *= -1; | ||
| 354 | d0d2_y *= -1; | ||
| 355 | d1d0_y *= -1; | ||
| 356 | d1d2_x *= -1; | ||
| 357 | d2d0_x *= -1; | ||
| 358 | d0d1_x *= -1; | ||
| 359 | w0_row *= -1; | ||
| 360 | w1_row *= -1; | ||
| 361 | w2_row *= -1; | ||
| 362 | } | ||
| 363 | |||
| 364 | // Add a bias to respect top-left rasterization rule | ||
| 365 | bias_w0 = (is_top_left(d1, d2, is_clockwise) ? 0 : -1); | ||
| 366 | bias_w1 = (is_top_left(d2, d0, is_clockwise) ? 0 : -1); | ||
| 367 | bias_w2 = (is_top_left(d0, d1, is_clockwise) ? 0 : -1); | ||
| 368 | |||
| 369 | if (is_uniform) { | ||
| 370 | Uint32 color; | ||
| 371 | if (tmp) { | ||
| 372 | color = SDL_MapSurfaceRGBA(tmp, c0.r, c0.g, c0.b, c0.a); | ||
| 373 | } else { | ||
| 374 | color = SDL_MapSurfaceRGBA(dst, c0.r, c0.g, c0.b, c0.a); | ||
| 375 | } | ||
| 376 | |||
| 377 | if (dstbpp == 4) { | ||
| 378 | TRIANGLE_BEGIN_LOOP | ||
| 379 | { | ||
| 380 | *(Uint32 *)dptr = color; | ||
| 381 | } | ||
| 382 | TRIANGLE_END_LOOP | ||
| 383 | } else if (dstbpp == 3) { | ||
| 384 | TRIANGLE_BEGIN_LOOP | ||
| 385 | { | ||
| 386 | Uint8 *s = (Uint8 *)&color; | ||
| 387 | dptr[0] = s[0]; | ||
| 388 | dptr[1] = s[1]; | ||
| 389 | dptr[2] = s[2]; | ||
| 390 | } | ||
| 391 | TRIANGLE_END_LOOP | ||
| 392 | } else if (dstbpp == 2) { | ||
| 393 | TRIANGLE_BEGIN_LOOP | ||
| 394 | { | ||
| 395 | *(Uint16 *)dptr = (Uint16)color; | ||
| 396 | } | ||
| 397 | TRIANGLE_END_LOOP | ||
| 398 | } else if (dstbpp == 1) { | ||
| 399 | TRIANGLE_BEGIN_LOOP | ||
| 400 | { | ||
| 401 | *dptr = (Uint8)color; | ||
| 402 | } | ||
| 403 | TRIANGLE_END_LOOP | ||
| 404 | } | ||
| 405 | } else { | ||
| 406 | const SDL_PixelFormatDetails *format; | ||
| 407 | SDL_Palette *palette; | ||
| 408 | if (tmp) { | ||
| 409 | format = tmp->fmt; | ||
| 410 | palette = tmp->palette; | ||
| 411 | } else { | ||
| 412 | format = dst->fmt; | ||
| 413 | palette = dst->palette; | ||
| 414 | } | ||
| 415 | if (dstbpp == 4) { | ||
| 416 | TRIANGLE_BEGIN_LOOP | ||
| 417 | { | ||
| 418 | TRIANGLE_GET_MAPPED_COLOR | ||
| 419 | *(Uint32 *)dptr = color; | ||
| 420 | } | ||
| 421 | TRIANGLE_END_LOOP | ||
| 422 | } else if (dstbpp == 3) { | ||
| 423 | TRIANGLE_BEGIN_LOOP | ||
| 424 | { | ||
| 425 | TRIANGLE_GET_MAPPED_COLOR | ||
| 426 | Uint8 *s = (Uint8 *)&color; | ||
| 427 | dptr[0] = s[0]; | ||
| 428 | dptr[1] = s[1]; | ||
| 429 | dptr[2] = s[2]; | ||
| 430 | } | ||
| 431 | TRIANGLE_END_LOOP | ||
| 432 | } else if (dstbpp == 2) { | ||
| 433 | TRIANGLE_BEGIN_LOOP | ||
| 434 | { | ||
| 435 | TRIANGLE_GET_MAPPED_COLOR | ||
| 436 | *(Uint16 *)dptr = (Uint16)color; | ||
| 437 | } | ||
| 438 | TRIANGLE_END_LOOP | ||
| 439 | } else if (dstbpp == 1) { | ||
| 440 | TRIANGLE_BEGIN_LOOP | ||
| 441 | { | ||
| 442 | TRIANGLE_GET_MAPPED_COLOR | ||
| 443 | *dptr = (Uint8)color; | ||
| 444 | } | ||
| 445 | TRIANGLE_END_LOOP | ||
| 446 | } | ||
| 447 | } | ||
| 448 | |||
| 449 | if (tmp) { | ||
| 450 | SDL_BlitSurface(tmp, NULL, dst, &dstrect); | ||
| 451 | SDL_DestroySurface(tmp); | ||
| 452 | } | ||
| 453 | |||
| 454 | end: | ||
| 455 | if (dst_locked) { | ||
| 456 | SDL_UnlockSurface(dst); | ||
| 457 | } | ||
| 458 | |||
| 459 | return result; | ||
| 460 | } | ||
| 461 | |||
| 462 | bool SDL_SW_BlitTriangle( | ||
| 463 | SDL_Surface *src, | ||
| 464 | SDL_Point *s0, SDL_Point *s1, SDL_Point *s2, | ||
| 465 | SDL_Surface *dst, | ||
| 466 | SDL_Point *d0, SDL_Point *d1, SDL_Point *d2, | ||
| 467 | SDL_Color c0, SDL_Color c1, SDL_Color c2, | ||
| 468 | SDL_TextureAddressMode texture_address_mode) | ||
| 469 | { | ||
| 470 | bool result = true; | ||
| 471 | SDL_Surface *src_surface = src; | ||
| 472 | int src_locked = 0; | ||
| 473 | int dst_locked = 0; | ||
| 474 | |||
| 475 | SDL_BlendMode blend; | ||
| 476 | |||
| 477 | SDL_Rect dstrect; | ||
| 478 | |||
| 479 | SDL_Point s2_x_area; | ||
| 480 | |||
| 481 | int dstbpp; | ||
| 482 | Uint8 *dst_ptr; | ||
| 483 | int dst_pitch; | ||
| 484 | |||
| 485 | const int *src_ptr; | ||
| 486 | int src_pitch; | ||
| 487 | |||
| 488 | Sint64 area, tmp64; | ||
| 489 | int is_clockwise; | ||
| 490 | |||
| 491 | int d2d1_y, d1d2_x, d0d2_y, d2d0_x, d1d0_y, d0d1_x; | ||
| 492 | int s2s0_x, s2s1_x, s2s0_y, s2s1_y; | ||
| 493 | |||
| 494 | Sint64 w0_row, w1_row, w2_row; | ||
| 495 | int bias_w0, bias_w1, bias_w2; | ||
| 496 | |||
| 497 | bool is_uniform; | ||
| 498 | |||
| 499 | bool has_modulation; | ||
| 500 | |||
| 501 | if (!SDL_SurfaceValid(src)) { | ||
| 502 | return SDL_InvalidParamError("src"); | ||
| 503 | } | ||
| 504 | if (!SDL_SurfaceValid(dst)) { | ||
| 505 | return SDL_InvalidParamError("dst"); | ||
| 506 | } | ||
| 507 | |||
| 508 | area = cross_product(d0, d1, d2->x, d2->y); | ||
| 509 | |||
| 510 | // Flat triangle | ||
| 511 | if (area == 0) { | ||
| 512 | return true; | ||
| 513 | } | ||
| 514 | |||
| 515 | // Lock the destination, if needed | ||
| 516 | if (SDL_MUSTLOCK(dst)) { | ||
| 517 | if (!SDL_LockSurface(dst)) { | ||
| 518 | result = false; | ||
| 519 | goto end; | ||
| 520 | } else { | ||
| 521 | dst_locked = 1; | ||
| 522 | } | ||
| 523 | } | ||
| 524 | |||
| 525 | // Lock the source, if needed | ||
| 526 | if (SDL_MUSTLOCK(src)) { | ||
| 527 | if (!SDL_LockSurface(src)) { | ||
| 528 | result = false; | ||
| 529 | goto end; | ||
| 530 | } else { | ||
| 531 | src_locked = 1; | ||
| 532 | } | ||
| 533 | } | ||
| 534 | |||
| 535 | is_uniform = COLOR_EQ(c0, c1) && COLOR_EQ(c1, c2); | ||
| 536 | |||
| 537 | bounding_rect_fixedpoint(d0, d1, d2, &dstrect); | ||
| 538 | |||
| 539 | SDL_GetSurfaceBlendMode(src, &blend); | ||
| 540 | |||
| 541 | // TRIANGLE_GET_TEXTCOORD interpolates up to the max values included, so reduce by 1 | ||
| 542 | if (texture_address_mode == SDL_TEXTURE_ADDRESS_CLAMP) { | ||
| 543 | SDL_Rect srcrect; | ||
| 544 | int maxx, maxy; | ||
| 545 | bounding_rect(s0, s1, s2, &srcrect); | ||
| 546 | maxx = srcrect.x + srcrect.w; | ||
| 547 | maxy = srcrect.y + srcrect.h; | ||
| 548 | if (srcrect.w > 0) { | ||
| 549 | if (s0->x == maxx) { | ||
| 550 | s0->x--; | ||
| 551 | } | ||
| 552 | if (s1->x == maxx) { | ||
| 553 | s1->x--; | ||
| 554 | } | ||
| 555 | if (s2->x == maxx) { | ||
| 556 | s2->x--; | ||
| 557 | } | ||
| 558 | } | ||
| 559 | if (srcrect.h > 0) { | ||
| 560 | if (s0->y == maxy) { | ||
| 561 | s0->y--; | ||
| 562 | } | ||
| 563 | if (s1->y == maxy) { | ||
| 564 | s1->y--; | ||
| 565 | } | ||
| 566 | if (s2->y == maxy) { | ||
| 567 | s2->y--; | ||
| 568 | } | ||
| 569 | } | ||
| 570 | } | ||
| 571 | |||
| 572 | if (is_uniform) { | ||
| 573 | // SDL_GetSurfaceColorMod(src, &r, &g, &b); | ||
| 574 | has_modulation = c0.r != 255 || c0.g != 255 || c0.b != 255 || c0.a != 255; | ||
| 575 | } else { | ||
| 576 | has_modulation = true; | ||
| 577 | } | ||
| 578 | |||
| 579 | { | ||
| 580 | // Clip triangle with surface clip rect | ||
| 581 | SDL_Rect rect; | ||
| 582 | SDL_GetSurfaceClipRect(dst, &rect); | ||
| 583 | SDL_GetRectIntersection(&dstrect, &rect, &dstrect); | ||
| 584 | } | ||
| 585 | |||
| 586 | // Set destination pointer | ||
| 587 | dstbpp = dst->fmt->bytes_per_pixel; | ||
| 588 | dst_ptr = (Uint8 *)dst->pixels + dstrect.x * dstbpp + dstrect.y * dst->pitch; | ||
| 589 | dst_pitch = dst->pitch; | ||
| 590 | |||
| 591 | // Set source pointer | ||
| 592 | src_ptr = (const int *)src->pixels; | ||
| 593 | src_pitch = src->pitch; | ||
| 594 | |||
| 595 | is_clockwise = area > 0; | ||
| 596 | if (area < 0) { | ||
| 597 | area = -area; | ||
| 598 | } | ||
| 599 | |||
| 600 | { | ||
| 601 | int val; | ||
| 602 | PRECOMP(d2d1_y, d1->y - d2->y) | ||
| 603 | PRECOMP(d0d2_y, d2->y - d0->y) | ||
| 604 | PRECOMP(d1d0_y, d0->y - d1->y) | ||
| 605 | PRECOMP(d1d2_x, d2->x - d1->x) | ||
| 606 | PRECOMP(d2d0_x, d0->x - d2->x) | ||
| 607 | PRECOMP(d0d1_x, d1->x - d0->x) | ||
| 608 | } | ||
| 609 | |||
| 610 | s2s0_x = s0->x - s2->x; | ||
| 611 | s2s1_x = s1->x - s2->x; | ||
| 612 | s2s0_y = s0->y - s2->y; | ||
| 613 | s2s1_y = s1->y - s2->y; | ||
| 614 | |||
| 615 | // Starting point for rendering, at the middle of a pixel | ||
| 616 | { | ||
| 617 | SDL_Point p; | ||
| 618 | p.x = dstrect.x; | ||
| 619 | p.y = dstrect.y; | ||
| 620 | trianglepoint_2_fixedpoint(&p); | ||
| 621 | p.x += (1 << FP_BITS) / 2; | ||
| 622 | p.y += (1 << FP_BITS) / 2; | ||
| 623 | w0_row = cross_product(d1, d2, p.x, p.y); | ||
| 624 | w1_row = cross_product(d2, d0, p.x, p.y); | ||
| 625 | w2_row = cross_product(d0, d1, p.x, p.y); | ||
| 626 | } | ||
| 627 | |||
| 628 | // Handle anti-clockwise triangles | ||
| 629 | if (!is_clockwise) { | ||
| 630 | d2d1_y *= -1; | ||
| 631 | d0d2_y *= -1; | ||
| 632 | d1d0_y *= -1; | ||
| 633 | d1d2_x *= -1; | ||
| 634 | d2d0_x *= -1; | ||
| 635 | d0d1_x *= -1; | ||
| 636 | w0_row *= -1; | ||
| 637 | w1_row *= -1; | ||
| 638 | w2_row *= -1; | ||
| 639 | } | ||
| 640 | |||
| 641 | // Add a bias to respect top-left rasterization rule | ||
| 642 | bias_w0 = (is_top_left(d1, d2, is_clockwise) ? 0 : -1); | ||
| 643 | bias_w1 = (is_top_left(d2, d0, is_clockwise) ? 0 : -1); | ||
| 644 | bias_w2 = (is_top_left(d0, d1, is_clockwise) ? 0 : -1); | ||
| 645 | |||
| 646 | /* precompute constant 's2->x * area' used in TRIANGLE_GET_TEXTCOORD */ | ||
| 647 | tmp64 = s2->x * area; | ||
| 648 | if (tmp64 >= INT_MIN && tmp64 <= INT_MAX) { | ||
| 649 | s2_x_area.x = (int)tmp64; | ||
| 650 | } else { | ||
| 651 | result = SDL_SetError("triangle area overflow"); | ||
| 652 | goto end; | ||
| 653 | } | ||
| 654 | tmp64 = s2->y * area; | ||
| 655 | if (tmp64 >= INT_MIN && tmp64 <= INT_MAX) { | ||
| 656 | s2_x_area.y = (int)tmp64; | ||
| 657 | } else { | ||
| 658 | result = SDL_SetError("triangle area overflow"); | ||
| 659 | goto end; | ||
| 660 | } | ||
| 661 | |||
| 662 | if (blend != SDL_BLENDMODE_NONE || src->format != dst->format || has_modulation || !is_uniform) { | ||
| 663 | // Use SDL_BlitTriangle_Slow | ||
| 664 | |||
| 665 | SDL_BlitInfo *info = &src->map.info; | ||
| 666 | SDL_BlitInfo tmp_info; | ||
| 667 | |||
| 668 | SDL_zero(tmp_info); | ||
| 669 | |||
| 670 | tmp_info.src_fmt = src->fmt; | ||
| 671 | tmp_info.dst_fmt = dst->fmt; | ||
| 672 | tmp_info.flags = info->flags; | ||
| 673 | /* | ||
| 674 | tmp_info.r = info->r; | ||
| 675 | tmp_info.g = info->g; | ||
| 676 | tmp_info.b = info->b; | ||
| 677 | tmp_info.a = info->a; | ||
| 678 | */ | ||
| 679 | tmp_info.r = c0.r; | ||
| 680 | tmp_info.g = c0.g; | ||
| 681 | tmp_info.b = c0.b; | ||
| 682 | tmp_info.a = c0.a; | ||
| 683 | |||
| 684 | tmp_info.flags &= ~(SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA); | ||
| 685 | |||
| 686 | if (c0.r != 255 || c1.r != 255 || c2.r != 255 || | ||
| 687 | c0.g != 255 || c1.g != 255 || c2.g != 255 || | ||
| 688 | c0.b != 255 || c1.b != 255 || c2.b != 255) { | ||
| 689 | tmp_info.flags |= SDL_COPY_MODULATE_COLOR; | ||
| 690 | } | ||
| 691 | |||
| 692 | if (c0.a != 255 || c1.a != 255 || c2.a != 255) { | ||
| 693 | tmp_info.flags |= SDL_COPY_MODULATE_ALPHA; | ||
| 694 | } | ||
| 695 | |||
| 696 | tmp_info.colorkey = info->colorkey; | ||
| 697 | |||
| 698 | // src | ||
| 699 | tmp_info.src_surface = src_surface; | ||
| 700 | tmp_info.src = (Uint8 *)src_ptr; | ||
| 701 | tmp_info.src_pitch = src_pitch; | ||
| 702 | |||
| 703 | // dst | ||
| 704 | tmp_info.dst = dst_ptr; | ||
| 705 | tmp_info.dst_pitch = dst_pitch; | ||
| 706 | |||
| 707 | #define CHECK_INT_RANGE(X) \ | ||
| 708 | if ((X) < INT_MIN || (X) > INT_MAX) { \ | ||
| 709 | result = SDL_SetError("integer overflow (%s = %" SDL_PRIs64 ")", #X, X); \ | ||
| 710 | goto end; \ | ||
| 711 | } | ||
| 712 | CHECK_INT_RANGE(area); | ||
| 713 | CHECK_INT_RANGE(w0_row); | ||
| 714 | CHECK_INT_RANGE(w1_row); | ||
| 715 | CHECK_INT_RANGE(w2_row); | ||
| 716 | SDL_BlitTriangle_Slow(&tmp_info, s2_x_area, dstrect, (int)area, bias_w0, bias_w1, bias_w2, | ||
| 717 | d2d1_y, d1d2_x, d0d2_y, d2d0_x, d1d0_y, d0d1_x, | ||
| 718 | s2s0_x, s2s1_x, s2s0_y, s2s1_y, (int)w0_row, (int)w1_row, (int)w2_row, | ||
| 719 | c0, c1, c2, is_uniform, texture_address_mode); | ||
| 720 | |||
| 721 | goto end; | ||
| 722 | } | ||
| 723 | |||
| 724 | if (dstbpp == 4) { | ||
| 725 | TRIANGLE_BEGIN_LOOP | ||
| 726 | { | ||
| 727 | TRIANGLE_GET_TEXTCOORD | ||
| 728 | Uint32 *sptr = (Uint32 *)((Uint8 *)src_ptr + srcy * src_pitch); | ||
| 729 | *(Uint32 *)dptr = sptr[srcx]; | ||
| 730 | } | ||
| 731 | TRIANGLE_END_LOOP | ||
| 732 | } else if (dstbpp == 3) { | ||
| 733 | TRIANGLE_BEGIN_LOOP | ||
| 734 | { | ||
| 735 | TRIANGLE_GET_TEXTCOORD | ||
| 736 | Uint8 *sptr = (Uint8 *)src_ptr + srcy * src_pitch; | ||
| 737 | dptr[0] = sptr[3 * srcx]; | ||
| 738 | dptr[1] = sptr[3 * srcx + 1]; | ||
| 739 | dptr[2] = sptr[3 * srcx + 2]; | ||
| 740 | } | ||
| 741 | TRIANGLE_END_LOOP | ||
| 742 | } else if (dstbpp == 2) { | ||
| 743 | TRIANGLE_BEGIN_LOOP | ||
| 744 | { | ||
| 745 | TRIANGLE_GET_TEXTCOORD | ||
| 746 | Uint16 *sptr = (Uint16 *)((Uint8 *)src_ptr + srcy * src_pitch); | ||
| 747 | *(Uint16 *)dptr = sptr[srcx]; | ||
| 748 | } | ||
| 749 | TRIANGLE_END_LOOP | ||
| 750 | } else if (dstbpp == 1) { | ||
| 751 | TRIANGLE_BEGIN_LOOP | ||
| 752 | { | ||
| 753 | TRIANGLE_GET_TEXTCOORD | ||
| 754 | Uint8 *sptr = (Uint8 *)src_ptr + srcy * src_pitch; | ||
| 755 | *dptr = sptr[srcx]; | ||
| 756 | } | ||
| 757 | TRIANGLE_END_LOOP | ||
| 758 | } | ||
| 759 | |||
| 760 | end: | ||
| 761 | if (dst_locked) { | ||
| 762 | SDL_UnlockSurface(dst); | ||
| 763 | } | ||
| 764 | if (src_locked) { | ||
| 765 | SDL_UnlockSurface(src); | ||
| 766 | } | ||
| 767 | |||
| 768 | return result; | ||
| 769 | } | ||
| 770 | |||
| 771 | #define FORMAT_ALPHA 0 | ||
| 772 | #define FORMAT_NO_ALPHA -1 | ||
| 773 | #define FORMAT_2101010 1 | ||
| 774 | #define FORMAT_HAS_ALPHA(format) format == 0 | ||
| 775 | #define FORMAT_HAS_NO_ALPHA(format) format < 0 | ||
| 776 | static int detect_format(const SDL_PixelFormatDetails *pf) | ||
| 777 | { | ||
| 778 | if (pf->format == SDL_PIXELFORMAT_ARGB2101010) { | ||
| 779 | return FORMAT_2101010; | ||
| 780 | } else if (pf->Amask) { | ||
| 781 | return FORMAT_ALPHA; | ||
| 782 | } else { | ||
| 783 | return FORMAT_NO_ALPHA; | ||
| 784 | } | ||
| 785 | } | ||
| 786 | |||
| 787 | static void SDL_BlitTriangle_Slow(SDL_BlitInfo *info, | ||
| 788 | SDL_Point s2_x_area, SDL_Rect dstrect, int area, int bias_w0, int bias_w1, int bias_w2, | ||
| 789 | int d2d1_y, int d1d2_x, int d0d2_y, int d2d0_x, int d1d0_y, int d0d1_x, | ||
| 790 | int s2s0_x, int s2s1_x, int s2s0_y, int s2s1_y, int w0_row, int w1_row, int w2_row, | ||
| 791 | SDL_Color c0, SDL_Color c1, SDL_Color c2, bool is_uniform, SDL_TextureAddressMode texture_address_mode) | ||
| 792 | { | ||
| 793 | SDL_Surface *src_surface = info->src_surface; | ||
| 794 | const int flags = info->flags; | ||
| 795 | Uint32 modulateR = info->r; | ||
| 796 | Uint32 modulateG = info->g; | ||
| 797 | Uint32 modulateB = info->b; | ||
| 798 | Uint32 modulateA = info->a; | ||
| 799 | Uint32 srcpixel; | ||
| 800 | Uint32 srcR, srcG, srcB, srcA; | ||
| 801 | Uint32 dstpixel; | ||
| 802 | Uint32 dstR, dstG, dstB, dstA; | ||
| 803 | const SDL_PixelFormatDetails *src_fmt = info->src_fmt; | ||
| 804 | const SDL_PixelFormatDetails *dst_fmt = info->dst_fmt; | ||
| 805 | int srcbpp = src_fmt->bytes_per_pixel; | ||
| 806 | int dstbpp = dst_fmt->bytes_per_pixel; | ||
| 807 | int srcfmt_val; | ||
| 808 | int dstfmt_val; | ||
| 809 | Uint32 rgbmask = ~src_fmt->Amask; | ||
| 810 | Uint32 ckey = info->colorkey & rgbmask; | ||
| 811 | |||
| 812 | Uint8 *dst_ptr = info->dst; | ||
| 813 | int dst_pitch = info->dst_pitch; | ||
| 814 | |||
| 815 | srcfmt_val = detect_format(src_fmt); | ||
| 816 | dstfmt_val = detect_format(dst_fmt); | ||
| 817 | |||
| 818 | TRIANGLE_BEGIN_LOOP | ||
| 819 | { | ||
| 820 | Uint8 *src; | ||
| 821 | Uint8 *dst = dptr; | ||
| 822 | TRIANGLE_GET_TEXTCOORD | ||
| 823 | src = (info->src + (srcy * info->src_pitch) + (srcx * srcbpp)); | ||
| 824 | if (FORMAT_HAS_ALPHA(srcfmt_val)) { | ||
| 825 | DISEMBLE_RGBA(src, srcbpp, src_fmt, srcpixel, srcR, srcG, srcB, srcA); | ||
| 826 | } else if (FORMAT_HAS_NO_ALPHA(srcfmt_val)) { | ||
| 827 | DISEMBLE_RGB(src, srcbpp, src_fmt, srcpixel, srcR, srcG, srcB); | ||
| 828 | srcA = 0xFF; | ||
| 829 | } else { | ||
| 830 | // SDL_PIXELFORMAT_ARGB2101010 | ||
| 831 | srcpixel = *((Uint32 *)(src)); | ||
| 832 | RGBA_FROM_ARGB2101010(srcpixel, srcR, srcG, srcB, srcA); | ||
| 833 | } | ||
| 834 | if (flags & SDL_COPY_COLORKEY) { | ||
| 835 | // srcpixel isn't set for 24 bpp | ||
| 836 | if (srcbpp == 3) { | ||
| 837 | srcpixel = (srcR << src_fmt->Rshift) | | ||
| 838 | (srcG << src_fmt->Gshift) | (srcB << src_fmt->Bshift); | ||
| 839 | } | ||
| 840 | if ((srcpixel & rgbmask) == ckey) { | ||
| 841 | continue; | ||
| 842 | } | ||
| 843 | } | ||
| 844 | if ((flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL))) { | ||
| 845 | if (FORMAT_HAS_ALPHA(dstfmt_val)) { | ||
| 846 | DISEMBLE_RGBA(dst, dstbpp, dst_fmt, dstpixel, dstR, dstG, dstB, dstA); | ||
| 847 | } else if (FORMAT_HAS_NO_ALPHA(dstfmt_val)) { | ||
| 848 | DISEMBLE_RGB(dst, dstbpp, dst_fmt, dstpixel, dstR, dstG, dstB); | ||
| 849 | dstA = 0xFF; | ||
| 850 | } else { | ||
| 851 | // SDL_PIXELFORMAT_ARGB2101010 | ||
| 852 | dstpixel = *((Uint32 *) (dst)); | ||
| 853 | RGBA_FROM_ARGB2101010(dstpixel, dstR, dstG, dstB, dstA); | ||
| 854 | } | ||
| 855 | } else { | ||
| 856 | // don't care | ||
| 857 | dstR = dstG = dstB = dstA = 0; | ||
| 858 | } | ||
| 859 | |||
| 860 | if (!is_uniform) { | ||
| 861 | TRIANGLE_GET_COLOR | ||
| 862 | modulateR = r; | ||
| 863 | modulateG = g; | ||
| 864 | modulateB = b; | ||
| 865 | modulateA = a; | ||
| 866 | } | ||
| 867 | |||
| 868 | if (flags & SDL_COPY_MODULATE_COLOR) { | ||
| 869 | srcR = (srcR * modulateR) / 255; | ||
| 870 | srcG = (srcG * modulateG) / 255; | ||
| 871 | srcB = (srcB * modulateB) / 255; | ||
| 872 | } | ||
| 873 | if (flags & SDL_COPY_MODULATE_ALPHA) { | ||
| 874 | srcA = (srcA * modulateA) / 255; | ||
| 875 | } | ||
| 876 | if (flags & (SDL_COPY_BLEND | SDL_COPY_ADD)) { | ||
| 877 | // This goes away if we ever use premultiplied alpha | ||
| 878 | if (srcA < 255) { | ||
| 879 | srcR = (srcR * srcA) / 255; | ||
| 880 | srcG = (srcG * srcA) / 255; | ||
| 881 | srcB = (srcB * srcA) / 255; | ||
| 882 | } | ||
| 883 | } | ||
| 884 | switch (flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL)) { | ||
| 885 | case 0: | ||
| 886 | dstR = srcR; | ||
| 887 | dstG = srcG; | ||
| 888 | dstB = srcB; | ||
| 889 | dstA = srcA; | ||
| 890 | break; | ||
| 891 | case SDL_COPY_BLEND: | ||
| 892 | dstR = srcR + ((255 - srcA) * dstR) / 255; | ||
| 893 | dstG = srcG + ((255 - srcA) * dstG) / 255; | ||
| 894 | dstB = srcB + ((255 - srcA) * dstB) / 255; | ||
| 895 | dstA = srcA + ((255 - srcA) * dstA) / 255; | ||
| 896 | break; | ||
| 897 | case SDL_COPY_ADD: | ||
| 898 | dstR = srcR + dstR; | ||
| 899 | if (dstR > 255) { | ||
| 900 | dstR = 255; | ||
| 901 | } | ||
| 902 | dstG = srcG + dstG; | ||
| 903 | if (dstG > 255) { | ||
| 904 | dstG = 255; | ||
| 905 | } | ||
| 906 | dstB = srcB + dstB; | ||
| 907 | if (dstB > 255) { | ||
| 908 | dstB = 255; | ||
| 909 | } | ||
| 910 | break; | ||
| 911 | case SDL_COPY_MOD: | ||
| 912 | dstR = (srcR * dstR) / 255; | ||
| 913 | dstG = (srcG * dstG) / 255; | ||
| 914 | dstB = (srcB * dstB) / 255; | ||
| 915 | break; | ||
| 916 | case SDL_COPY_MUL: | ||
| 917 | dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; | ||
| 918 | if (dstR > 255) { | ||
| 919 | dstR = 255; | ||
| 920 | } | ||
| 921 | dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; | ||
| 922 | if (dstG > 255) { | ||
| 923 | dstG = 255; | ||
| 924 | } | ||
| 925 | dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; | ||
| 926 | if (dstB > 255) { | ||
| 927 | dstB = 255; | ||
| 928 | } | ||
| 929 | break; | ||
| 930 | } | ||
| 931 | if (FORMAT_HAS_ALPHA(dstfmt_val)) { | ||
| 932 | ASSEMBLE_RGBA(dst, dstbpp, dst_fmt, dstR, dstG, dstB, dstA); | ||
| 933 | } else if (FORMAT_HAS_NO_ALPHA(dstfmt_val)) { | ||
| 934 | ASSEMBLE_RGB(dst, dstbpp, dst_fmt, dstR, dstG, dstB); | ||
| 935 | } else { | ||
| 936 | // SDL_PIXELFORMAT_ARGB2101010 | ||
| 937 | Uint32 pixel; | ||
| 938 | ARGB2101010_FROM_RGBA(pixel, dstR, dstG, dstB, dstA); | ||
| 939 | *(Uint32 *)dst = pixel; | ||
| 940 | } | ||
| 941 | } | ||
| 942 | TRIANGLE_END_LOOP | ||
| 943 | } | ||
| 944 | |||
| 945 | #endif // SDL_VIDEO_RENDER_SW | ||
diff --git a/SDL-3.2.8/src/render/software/SDL_triangle.h b/SDL-3.2.8/src/render/software/SDL_triangle.h new file mode 100644 index 0000000..1c5504c --- /dev/null +++ b/SDL-3.2.8/src/render/software/SDL_triangle.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_triangle_h_ | ||
| 23 | #define SDL_triangle_h_ | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | #include "../SDL_sysrender.h" // For SDL_TextureAddressMode | ||
| 28 | |||
| 29 | extern bool SDL_SW_FillTriangle(SDL_Surface *dst, | ||
| 30 | SDL_Point *d0, SDL_Point *d1, SDL_Point *d2, | ||
| 31 | SDL_BlendMode blend, SDL_Color c0, SDL_Color c1, SDL_Color c2); | ||
| 32 | |||
| 33 | extern bool SDL_SW_BlitTriangle(SDL_Surface *src, | ||
| 34 | SDL_Point *s0, SDL_Point *s1, SDL_Point *s2, | ||
| 35 | SDL_Surface *dst, | ||
| 36 | SDL_Point *d0, SDL_Point *d1, SDL_Point *d2, | ||
| 37 | SDL_Color c0, SDL_Color c1, SDL_Color c2, | ||
| 38 | SDL_TextureAddressMode texture_address_mode); | ||
| 39 | |||
| 40 | extern void trianglepoint_2_fixedpoint(SDL_Point *a); | ||
| 41 | |||
| 42 | #endif // SDL_triangle_h_ | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm.c b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm.c new file mode 100644 index 0000000..acf31c3 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm.c | |||
| @@ -0,0 +1,1198 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_VITA_GXM | ||
| 24 | |||
| 25 | #include "../SDL_sysrender.h" | ||
| 26 | |||
| 27 | #include <stdio.h> | ||
| 28 | #include <string.h> | ||
| 29 | #include <math.h> | ||
| 30 | #include <stdarg.h> | ||
| 31 | #include <stdlib.h> | ||
| 32 | |||
| 33 | #include "SDL_render_vita_gxm_types.h" | ||
| 34 | #include "SDL_render_vita_gxm_tools.h" | ||
| 35 | #include "SDL_render_vita_gxm_memory.h" | ||
| 36 | |||
| 37 | #include <psp2/common_dialog.h> | ||
| 38 | |||
| 39 | // #define DEBUG_RAZOR | ||
| 40 | |||
| 41 | #ifdef DEBUG_RAZOR | ||
| 42 | #include <psp2/sysmodule.h> | ||
| 43 | #endif | ||
| 44 | |||
| 45 | static bool VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props); | ||
| 46 | |||
| 47 | static void VITA_GXM_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event); | ||
| 48 | |||
| 49 | static bool VITA_GXM_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode); | ||
| 50 | |||
| 51 | static bool VITA_GXM_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props); | ||
| 52 | |||
| 53 | static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 54 | const SDL_Rect *rect, const void *pixels, int pitch); | ||
| 55 | |||
| 56 | static bool VITA_GXM_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 57 | const SDL_Rect *rect, | ||
| 58 | const Uint8 *Yplane, int Ypitch, | ||
| 59 | const Uint8 *Uplane, int Upitch, | ||
| 60 | const Uint8 *Vplane, int Vpitch); | ||
| 61 | |||
| 62 | static bool VITA_GXM_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 63 | const SDL_Rect *rect, | ||
| 64 | const Uint8 *Yplane, int Ypitch, | ||
| 65 | const Uint8 *UVplane, int UVpitch); | ||
| 66 | |||
| 67 | static bool VITA_GXM_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 68 | const SDL_Rect *rect, void **pixels, int *pitch); | ||
| 69 | |||
| 70 | static void VITA_GXM_UnlockTexture(SDL_Renderer *renderer, | ||
| 71 | SDL_Texture *texture); | ||
| 72 | |||
| 73 | static void VITA_GXM_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode); | ||
| 74 | |||
| 75 | static bool VITA_GXM_SetRenderTarget(SDL_Renderer *renderer, | ||
| 76 | SDL_Texture *texture); | ||
| 77 | |||
| 78 | static bool VITA_GXM_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd); | ||
| 79 | |||
| 80 | static bool VITA_GXM_QueueSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd); | ||
| 81 | |||
| 82 | static bool VITA_GXM_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count); | ||
| 83 | static bool VITA_GXM_QueueDrawLines(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count); | ||
| 84 | |||
| 85 | static bool VITA_GXM_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 86 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 87 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 88 | float scale_x, float scale_y); | ||
| 89 | |||
| 90 | static bool VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd); | ||
| 91 | |||
| 92 | static void VITA_GXM_InvalidateCachedState(SDL_Renderer *renderer); | ||
| 93 | |||
| 94 | static bool VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize); | ||
| 95 | |||
| 96 | static SDL_Surface *VITA_GXM_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect); | ||
| 97 | |||
| 98 | static bool VITA_GXM_RenderPresent(SDL_Renderer *renderer); | ||
| 99 | static void VITA_GXM_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 100 | static void VITA_GXM_DestroyRenderer(SDL_Renderer *renderer); | ||
| 101 | |||
| 102 | SDL_RenderDriver VITA_GXM_RenderDriver = { | ||
| 103 | VITA_GXM_CreateRenderer, "VITA gxm" | ||
| 104 | }; | ||
| 105 | |||
| 106 | static int PixelFormatToVITAFMT(Uint32 format) | ||
| 107 | { | ||
| 108 | switch (format) { | ||
| 109 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 110 | return SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ARGB; | ||
| 111 | case SDL_PIXELFORMAT_XRGB8888: | ||
| 112 | return SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ARGB; | ||
| 113 | case SDL_PIXELFORMAT_XBGR8888: | ||
| 114 | return SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR; | ||
| 115 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 116 | return SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR; | ||
| 117 | case SDL_PIXELFORMAT_RGB565: | ||
| 118 | return SCE_GXM_TEXTURE_FORMAT_U5U6U5_RGB; | ||
| 119 | case SDL_PIXELFORMAT_BGR565: | ||
| 120 | return SCE_GXM_TEXTURE_FORMAT_U5U6U5_BGR; | ||
| 121 | case SDL_PIXELFORMAT_YV12: | ||
| 122 | return SCE_GXM_TEXTURE_FORMAT_YVU420P3_CSC0; | ||
| 123 | case SDL_PIXELFORMAT_IYUV: | ||
| 124 | return SCE_GXM_TEXTURE_FORMAT_YUV420P3_CSC0; | ||
| 125 | // should be the other way around. looks like SCE bug. | ||
| 126 | case SDL_PIXELFORMAT_NV12: | ||
| 127 | return SCE_GXM_TEXTURE_FORMAT_YVU420P2_CSC0; | ||
| 128 | case SDL_PIXELFORMAT_NV21: | ||
| 129 | return SCE_GXM_TEXTURE_FORMAT_YUV420P2_CSC0; | ||
| 130 | default: | ||
| 131 | return SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR; | ||
| 132 | } | ||
| 133 | } | ||
| 134 | |||
| 135 | void StartDrawing(SDL_Renderer *renderer) | ||
| 136 | { | ||
| 137 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 138 | if (data->drawing) { | ||
| 139 | return; | ||
| 140 | } | ||
| 141 | |||
| 142 | data->drawstate.texture = NULL; | ||
| 143 | data->drawstate.vertex_program = NULL; | ||
| 144 | data->drawstate.fragment_program = NULL; | ||
| 145 | data->drawstate.last_command = -1; | ||
| 146 | data->drawstate.viewport_dirty = true; | ||
| 147 | |||
| 148 | // reset blend mode | ||
| 149 | // data->currentBlendMode = SDL_BLENDMODE_BLEND; | ||
| 150 | // fragment_programs *in = &data->blendFragmentPrograms.blend_mode_blend; | ||
| 151 | // data->colorFragmentProgram = in->color; | ||
| 152 | // data->textureFragmentProgram = in->texture; | ||
| 153 | |||
| 154 | if (!renderer->target) { | ||
| 155 | sceGxmBeginScene( | ||
| 156 | data->gxm_context, | ||
| 157 | 0, | ||
| 158 | data->renderTarget, | ||
| 159 | NULL, | ||
| 160 | NULL, | ||
| 161 | data->displayBufferSync[data->backBufferIndex], | ||
| 162 | &data->displaySurface[data->backBufferIndex], | ||
| 163 | &data->depthSurface); | ||
| 164 | } else { | ||
| 165 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)renderer->target->internal; | ||
| 166 | |||
| 167 | sceGxmBeginScene( | ||
| 168 | data->gxm_context, | ||
| 169 | 0, | ||
| 170 | vita_texture->tex->gxm_rendertarget, | ||
| 171 | NULL, | ||
| 172 | NULL, | ||
| 173 | NULL, | ||
| 174 | &vita_texture->tex->gxm_colorsurface, | ||
| 175 | &vita_texture->tex->gxm_depthstencil); | ||
| 176 | } | ||
| 177 | |||
| 178 | // unset_clip_rectangle(data); | ||
| 179 | |||
| 180 | data->drawing = true; | ||
| 181 | } | ||
| 182 | |||
| 183 | static bool VITA_GXM_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 184 | { | ||
| 185 | VITA_GXM_RenderData *data = renderer->internal; | ||
| 186 | if (vsync) { | ||
| 187 | data->displayData.wait_vblank = true; | ||
| 188 | } else { | ||
| 189 | data->displayData.wait_vblank = false; | ||
| 190 | } | ||
| 191 | return true; | ||
| 192 | } | ||
| 193 | |||
| 194 | static bool VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 195 | { | ||
| 196 | VITA_GXM_RenderData *data; | ||
| 197 | |||
| 198 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 199 | |||
| 200 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) { | ||
| 201 | return SDL_SetError("Unsupported output colorspace"); | ||
| 202 | } | ||
| 203 | |||
| 204 | data = (VITA_GXM_RenderData *)SDL_calloc(1, sizeof(VITA_GXM_RenderData)); | ||
| 205 | if (!data) { | ||
| 206 | return false; | ||
| 207 | } | ||
| 208 | |||
| 209 | renderer->WindowEvent = VITA_GXM_WindowEvent; | ||
| 210 | renderer->SupportsBlendMode = VITA_GXM_SupportsBlendMode; | ||
| 211 | renderer->CreateTexture = VITA_GXM_CreateTexture; | ||
| 212 | renderer->UpdateTexture = VITA_GXM_UpdateTexture; | ||
| 213 | #ifdef SDL_HAVE_YUV | ||
| 214 | renderer->UpdateTextureYUV = VITA_GXM_UpdateTextureYUV; | ||
| 215 | renderer->UpdateTextureNV = VITA_GXM_UpdateTextureNV; | ||
| 216 | #endif | ||
| 217 | renderer->LockTexture = VITA_GXM_LockTexture; | ||
| 218 | renderer->UnlockTexture = VITA_GXM_UnlockTexture; | ||
| 219 | renderer->SetTextureScaleMode = VITA_GXM_SetTextureScaleMode; | ||
| 220 | renderer->SetRenderTarget = VITA_GXM_SetRenderTarget; | ||
| 221 | renderer->QueueSetViewport = VITA_GXM_QueueNoOp; | ||
| 222 | renderer->QueueSetDrawColor = VITA_GXM_QueueSetDrawColor; | ||
| 223 | renderer->QueueDrawPoints = VITA_GXM_QueueDrawPoints; | ||
| 224 | renderer->QueueDrawLines = VITA_GXM_QueueDrawLines; | ||
| 225 | renderer->QueueGeometry = VITA_GXM_QueueGeometry; | ||
| 226 | renderer->InvalidateCachedState = VITA_GXM_InvalidateCachedState; | ||
| 227 | renderer->RunCommandQueue = VITA_GXM_RunCommandQueue; | ||
| 228 | renderer->RenderReadPixels = VITA_GXM_RenderReadPixels; | ||
| 229 | renderer->RenderPresent = VITA_GXM_RenderPresent; | ||
| 230 | renderer->DestroyTexture = VITA_GXM_DestroyTexture; | ||
| 231 | renderer->DestroyRenderer = VITA_GXM_DestroyRenderer; | ||
| 232 | renderer->SetVSync = VITA_GXM_SetVSync; | ||
| 233 | |||
| 234 | renderer->internal = data; | ||
| 235 | VITA_GXM_InvalidateCachedState(renderer); | ||
| 236 | renderer->window = window; | ||
| 237 | |||
| 238 | renderer->name = VITA_GXM_RenderDriver.name; | ||
| 239 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 240 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 241 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565); | ||
| 242 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGR565); | ||
| 243 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 244 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 245 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 246 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 247 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 4096); | ||
| 248 | |||
| 249 | data->initialized = true; | ||
| 250 | |||
| 251 | #ifdef DEBUG_RAZOR | ||
| 252 | sceSysmoduleLoadModule(SCE_SYSMODULE_RAZOR_HUD); | ||
| 253 | sceSysmoduleLoadModule(SCE_SYSMODULE_RAZOR_CAPTURE); | ||
| 254 | #endif | ||
| 255 | |||
| 256 | if (gxm_init(renderer) != 0) { | ||
| 257 | return SDL_SetError("gxm_init failed"); | ||
| 258 | } | ||
| 259 | |||
| 260 | return true; | ||
| 261 | } | ||
| 262 | |||
| 263 | static void VITA_GXM_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 264 | { | ||
| 265 | } | ||
| 266 | |||
| 267 | static bool VITA_GXM_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 268 | { | ||
| 269 | // only for custom modes. we build all modes on init, so no custom modes, sorry | ||
| 270 | return false; | ||
| 271 | } | ||
| 272 | |||
| 273 | static bool VITA_GXM_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 274 | { | ||
| 275 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 276 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)SDL_calloc(1, sizeof(VITA_GXM_TextureData)); | ||
| 277 | |||
| 278 | if (!vita_texture) { | ||
| 279 | return false; | ||
| 280 | } | ||
| 281 | |||
| 282 | vita_texture->tex = create_gxm_texture( | ||
| 283 | data, | ||
| 284 | texture->w, | ||
| 285 | texture->h, | ||
| 286 | PixelFormatToVITAFMT(texture->format), | ||
| 287 | (texture->access == SDL_TEXTUREACCESS_TARGET), | ||
| 288 | &(vita_texture->w), | ||
| 289 | &(vita_texture->h), | ||
| 290 | &(vita_texture->pitch), | ||
| 291 | &(vita_texture->wscale)); | ||
| 292 | |||
| 293 | if (!vita_texture->tex) { | ||
| 294 | SDL_free(vita_texture); | ||
| 295 | return SDL_OutOfMemory(); | ||
| 296 | } | ||
| 297 | |||
| 298 | texture->internal = vita_texture; | ||
| 299 | |||
| 300 | VITA_GXM_SetTextureScaleMode(renderer, texture, texture->scaleMode); | ||
| 301 | |||
| 302 | #ifdef SDL_HAVE_YUV | ||
| 303 | vita_texture->yuv = ((texture->format == SDL_PIXELFORMAT_IYUV) || (texture->format == SDL_PIXELFORMAT_YV12)); | ||
| 304 | vita_texture->nv12 = ((texture->format == SDL_PIXELFORMAT_NV12) || (texture->format == SDL_PIXELFORMAT_NV21)); | ||
| 305 | #endif | ||
| 306 | |||
| 307 | return true; | ||
| 308 | } | ||
| 309 | |||
| 310 | static void VITA_GXM_SetYUVProfile(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 311 | { | ||
| 312 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 313 | int ret = 0; | ||
| 314 | if (SDL_ISCOLORSPACE_MATRIX_BT601(texture->colorspace)) { | ||
| 315 | if (SDL_ISCOLORSPACE_LIMITED_RANGE(texture->colorspace)) { | ||
| 316 | ret = sceGxmSetYuvProfile(data->gxm_context, 0, SCE_GXM_YUV_PROFILE_BT601_STANDARD); | ||
| 317 | } else { | ||
| 318 | ret = sceGxmSetYuvProfile(data->gxm_context, 0, SCE_GXM_YUV_PROFILE_BT601_FULL_RANGE); | ||
| 319 | } | ||
| 320 | } else if (SDL_ISCOLORSPACE_MATRIX_BT709(texture->colorspace)) { | ||
| 321 | if (SDL_ISCOLORSPACE_LIMITED_RANGE(texture->colorspace)) { | ||
| 322 | ret = sceGxmSetYuvProfile(data->gxm_context, 0, SCE_GXM_YUV_PROFILE_BT709_STANDARD); | ||
| 323 | } else { | ||
| 324 | ret = sceGxmSetYuvProfile(data->gxm_context, 0, SCE_GXM_YUV_PROFILE_BT709_FULL_RANGE); | ||
| 325 | } | ||
| 326 | } else { | ||
| 327 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Unsupported YUV colorspace"); | ||
| 328 | } | ||
| 329 | |||
| 330 | if (ret < 0) { | ||
| 331 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Setting YUV profile failed: %x", ret); | ||
| 332 | } | ||
| 333 | } | ||
| 334 | |||
| 335 | static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 336 | const SDL_Rect *rect, const void *pixels, int pitch) | ||
| 337 | { | ||
| 338 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 339 | Uint8 *dst; | ||
| 340 | int row, length, dpitch; | ||
| 341 | |||
| 342 | #ifdef SDL_HAVE_YUV | ||
| 343 | if (vita_texture->yuv || vita_texture->nv12) { | ||
| 344 | VITA_GXM_SetYUVProfile(renderer, texture); | ||
| 345 | } | ||
| 346 | #endif | ||
| 347 | |||
| 348 | VITA_GXM_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch); | ||
| 349 | length = rect->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 350 | if (length == pitch && length == dpitch) { | ||
| 351 | SDL_memcpy(dst, pixels, length * rect->h); | ||
| 352 | pixels += pitch * rect->h; | ||
| 353 | } else { | ||
| 354 | for (row = 0; row < rect->h; ++row) { | ||
| 355 | SDL_memcpy(dst, pixels, length); | ||
| 356 | pixels += pitch; | ||
| 357 | dst += dpitch; | ||
| 358 | } | ||
| 359 | } | ||
| 360 | |||
| 361 | #ifdef SDL_HAVE_YUV | ||
| 362 | if (vita_texture->yuv) { | ||
| 363 | void *Udst; | ||
| 364 | void *Vdst; | ||
| 365 | int uv_pitch = (dpitch + 1) / 2; | ||
| 366 | int uv_src_pitch = (pitch + 1) / 2; | ||
| 367 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 368 | |||
| 369 | // skip Y plane | ||
| 370 | Uint8 *Dpixels = gxm_texture_get_datap(vita_texture->tex) + (vita_texture->pitch * vita_texture->h); | ||
| 371 | |||
| 372 | Udst = Dpixels + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 373 | Vdst = Dpixels + (uv_pitch * ((vita_texture->h + 1) / 2)) + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 374 | |||
| 375 | length = UVrect.w; | ||
| 376 | |||
| 377 | // U plane | ||
| 378 | if (length == uv_src_pitch && length == uv_pitch) { | ||
| 379 | SDL_memcpy(Udst, pixels, length * UVrect.h); | ||
| 380 | pixels += uv_src_pitch * UVrect.h; | ||
| 381 | } else { | ||
| 382 | for (row = 0; row < UVrect.h; ++row) { | ||
| 383 | SDL_memcpy(Udst, pixels, length); | ||
| 384 | pixels += uv_src_pitch; | ||
| 385 | Udst += uv_pitch; | ||
| 386 | } | ||
| 387 | } | ||
| 388 | |||
| 389 | // V plane | ||
| 390 | if (length == uv_src_pitch && length == uv_pitch) { | ||
| 391 | SDL_memcpy(Vdst, pixels, length * UVrect.h); | ||
| 392 | } else { | ||
| 393 | for (row = 0; row < UVrect.h; ++row) { | ||
| 394 | SDL_memcpy(Vdst, pixels, length); | ||
| 395 | pixels += uv_src_pitch; | ||
| 396 | Vdst += uv_pitch; | ||
| 397 | } | ||
| 398 | } | ||
| 399 | |||
| 400 | } else if (vita_texture->nv12) { | ||
| 401 | void *UVdst; | ||
| 402 | int uv_pitch = 2 * ((dpitch + 1) / 2); | ||
| 403 | int uv_src_pitch = 2 * ((pitch + 1) / 2); | ||
| 404 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 405 | |||
| 406 | // skip Y plane | ||
| 407 | void *Dpixels = (void *)((Uint8 *)gxm_texture_get_datap(vita_texture->tex) + (vita_texture->pitch * vita_texture->h)); | ||
| 408 | UVdst = Dpixels + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 409 | |||
| 410 | length = UVrect.w * 2; | ||
| 411 | |||
| 412 | // UV plane | ||
| 413 | if (length == uv_src_pitch && length == uv_pitch) { | ||
| 414 | SDL_memcpy(UVdst, pixels, length * UVrect.h); | ||
| 415 | } else { | ||
| 416 | for (row = 0; row < UVrect.h; ++row) { | ||
| 417 | SDL_memcpy(UVdst, pixels, length); | ||
| 418 | pixels += uv_src_pitch; | ||
| 419 | UVdst += uv_pitch; | ||
| 420 | } | ||
| 421 | } | ||
| 422 | } | ||
| 423 | #endif | ||
| 424 | |||
| 425 | return true; | ||
| 426 | } | ||
| 427 | |||
| 428 | #ifdef SDL_HAVE_YUV | ||
| 429 | static bool VITA_GXM_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 430 | const SDL_Rect *rect, | ||
| 431 | const Uint8 *Yplane, int Ypitch, | ||
| 432 | const Uint8 *Uplane, int Upitch, | ||
| 433 | const Uint8 *Vplane, int Vpitch) | ||
| 434 | { | ||
| 435 | Uint8 *dst; | ||
| 436 | int row, length, dpitch; | ||
| 437 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 438 | |||
| 439 | VITA_GXM_SetYUVProfile(renderer, texture); | ||
| 440 | |||
| 441 | // copy Y plane | ||
| 442 | // obtain pixels via locking so that texture is flushed | ||
| 443 | VITA_GXM_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch); | ||
| 444 | |||
| 445 | length = rect->w; | ||
| 446 | |||
| 447 | if (length == Ypitch && length == dpitch) { | ||
| 448 | SDL_memcpy(dst, Yplane, length * rect->h); | ||
| 449 | } else { | ||
| 450 | for (row = 0; row < rect->h; ++row) { | ||
| 451 | SDL_memcpy(dst, Yplane, length); | ||
| 452 | Yplane += Ypitch; | ||
| 453 | dst += dpitch; | ||
| 454 | } | ||
| 455 | } | ||
| 456 | |||
| 457 | // U/V planes | ||
| 458 | { | ||
| 459 | void *Udst; | ||
| 460 | void *Vdst; | ||
| 461 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 462 | int uv_pitch = (dpitch + 1) / 2; | ||
| 463 | |||
| 464 | // skip Y plane | ||
| 465 | void *pixels = (void *)((Uint8 *)gxm_texture_get_datap(vita_texture->tex) + (vita_texture->pitch * vita_texture->h)); | ||
| 466 | |||
| 467 | if (texture->format == SDL_PIXELFORMAT_YV12) { // YVU | ||
| 468 | Vdst = pixels + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 469 | Udst = pixels + (uv_pitch * ((vita_texture->h + 1) / 2)) + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 470 | } else { // YUV | ||
| 471 | Udst = pixels + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 472 | Vdst = pixels + (uv_pitch * ((vita_texture->h + 1) / 2)) + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 473 | } | ||
| 474 | |||
| 475 | length = UVrect.w; | ||
| 476 | |||
| 477 | // U plane | ||
| 478 | if (length == Upitch && length == uv_pitch) { | ||
| 479 | SDL_memcpy(Udst, Uplane, length * UVrect.h); | ||
| 480 | } else { | ||
| 481 | for (row = 0; row < UVrect.h; ++row) { | ||
| 482 | SDL_memcpy(Udst, Uplane, length); | ||
| 483 | Uplane += Upitch; | ||
| 484 | Udst += uv_pitch; | ||
| 485 | } | ||
| 486 | } | ||
| 487 | |||
| 488 | // V plane | ||
| 489 | if (length == Vpitch && length == uv_pitch) { | ||
| 490 | SDL_memcpy(Vdst, Vplane, length * UVrect.h); | ||
| 491 | } else { | ||
| 492 | for (row = 0; row < UVrect.h; ++row) { | ||
| 493 | SDL_memcpy(Vdst, Vplane, length); | ||
| 494 | Vplane += Vpitch; | ||
| 495 | Vdst += uv_pitch; | ||
| 496 | } | ||
| 497 | } | ||
| 498 | } | ||
| 499 | |||
| 500 | return true; | ||
| 501 | } | ||
| 502 | |||
| 503 | static bool VITA_GXM_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 504 | const SDL_Rect *rect, | ||
| 505 | const Uint8 *Yplane, int Ypitch, | ||
| 506 | const Uint8 *UVplane, int UVpitch) | ||
| 507 | { | ||
| 508 | |||
| 509 | Uint8 *dst; | ||
| 510 | int row, length, dpitch; | ||
| 511 | SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; | ||
| 512 | |||
| 513 | VITA_GXM_SetYUVProfile(renderer, texture); | ||
| 514 | |||
| 515 | // copy Y plane | ||
| 516 | VITA_GXM_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch); | ||
| 517 | |||
| 518 | length = rect->w * SDL_BYTESPERPIXEL(texture->format); | ||
| 519 | |||
| 520 | if (length == Ypitch && length == dpitch) { | ||
| 521 | SDL_memcpy(dst, Yplane, length * rect->h); | ||
| 522 | } else { | ||
| 523 | for (row = 0; row < rect->h; ++row) { | ||
| 524 | SDL_memcpy(dst, Yplane, length); | ||
| 525 | Yplane += Ypitch; | ||
| 526 | dst += dpitch; | ||
| 527 | } | ||
| 528 | } | ||
| 529 | |||
| 530 | // UV plane | ||
| 531 | { | ||
| 532 | void *UVdst; | ||
| 533 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 534 | int uv_pitch = 2 * ((dpitch + 1) / 2); | ||
| 535 | |||
| 536 | // skip Y plane | ||
| 537 | void *pixels = (void *)((Uint8 *)gxm_texture_get_datap(vita_texture->tex) + (vita_texture->pitch * vita_texture->h)); | ||
| 538 | |||
| 539 | UVdst = pixels + (UVrect.y * uv_pitch) + UVrect.x; | ||
| 540 | |||
| 541 | length = UVrect.w * 2; | ||
| 542 | |||
| 543 | // UV plane | ||
| 544 | if (length == UVpitch && length == uv_pitch) { | ||
| 545 | SDL_memcpy(UVdst, UVplane, length * UVrect.h); | ||
| 546 | } else { | ||
| 547 | for (row = 0; row < UVrect.h; ++row) { | ||
| 548 | SDL_memcpy(UVdst, UVplane, length); | ||
| 549 | UVplane += UVpitch; | ||
| 550 | UVdst += uv_pitch; | ||
| 551 | } | ||
| 552 | } | ||
| 553 | } | ||
| 554 | |||
| 555 | return true; | ||
| 556 | } | ||
| 557 | |||
| 558 | #endif | ||
| 559 | |||
| 560 | static bool VITA_GXM_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 561 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 562 | { | ||
| 563 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 564 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 565 | |||
| 566 | *pixels = | ||
| 567 | (void *)((Uint8 *)gxm_texture_get_datap(vita_texture->tex) + (rect->y * vita_texture->pitch) + rect->x * SDL_BYTESPERPIXEL(texture->format)); | ||
| 568 | *pitch = vita_texture->pitch; | ||
| 569 | |||
| 570 | // make sure that rendering is finished on render target textures | ||
| 571 | if (vita_texture->tex->gxm_rendertarget) { | ||
| 572 | sceGxmFinish(data->gxm_context); | ||
| 573 | } | ||
| 574 | |||
| 575 | return true; | ||
| 576 | } | ||
| 577 | |||
| 578 | static void VITA_GXM_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 579 | { | ||
| 580 | // No need to update texture data on ps vita. | ||
| 581 | // VITA_GXM_LockTexture already returns a pointer to the texture pixels buffer. | ||
| 582 | // This really improves framerate when using lock/unlock. | ||
| 583 | } | ||
| 584 | |||
| 585 | static void VITA_GXM_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 586 | { | ||
| 587 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 588 | |||
| 589 | /* | ||
| 590 | set texture filtering according to scaleMode | ||
| 591 | supported hint values are nearest (0, default) or linear (1) | ||
| 592 | vitaScaleMode is either SCE_GXM_TEXTURE_FILTER_POINT (good for tile-map) | ||
| 593 | or SCE_GXM_TEXTURE_FILTER_LINEAR (good for scaling) | ||
| 594 | */ | ||
| 595 | |||
| 596 | int vitaScaleMode = (scaleMode == SDL_SCALEMODE_NEAREST | ||
| 597 | ? SCE_GXM_TEXTURE_FILTER_POINT | ||
| 598 | : SCE_GXM_TEXTURE_FILTER_LINEAR); | ||
| 599 | gxm_texture_set_filters(vita_texture->tex, vitaScaleMode, vitaScaleMode); | ||
| 600 | |||
| 601 | return; | ||
| 602 | } | ||
| 603 | |||
| 604 | static bool VITA_GXM_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 605 | { | ||
| 606 | return true; | ||
| 607 | } | ||
| 608 | |||
| 609 | static void VITA_GXM_SetBlendMode(VITA_GXM_RenderData *data, int blendMode) | ||
| 610 | { | ||
| 611 | if (blendMode != data->currentBlendMode) { | ||
| 612 | fragment_programs *in = &data->blendFragmentPrograms.blend_mode_blend; | ||
| 613 | |||
| 614 | switch (blendMode) { | ||
| 615 | case SDL_BLENDMODE_NONE: | ||
| 616 | in = &data->blendFragmentPrograms.blend_mode_none; | ||
| 617 | break; | ||
| 618 | case SDL_BLENDMODE_BLEND: | ||
| 619 | in = &data->blendFragmentPrograms.blend_mode_blend; | ||
| 620 | break; | ||
| 621 | case SDL_BLENDMODE_ADD: | ||
| 622 | in = &data->blendFragmentPrograms.blend_mode_add; | ||
| 623 | break; | ||
| 624 | case SDL_BLENDMODE_MOD: | ||
| 625 | in = &data->blendFragmentPrograms.blend_mode_mod; | ||
| 626 | break; | ||
| 627 | case SDL_BLENDMODE_MUL: | ||
| 628 | in = &data->blendFragmentPrograms.blend_mode_mul; | ||
| 629 | break; | ||
| 630 | } | ||
| 631 | data->colorFragmentProgram = in->color; | ||
| 632 | data->textureFragmentProgram = in->texture; | ||
| 633 | data->currentBlendMode = blendMode; | ||
| 634 | } | ||
| 635 | } | ||
| 636 | |||
| 637 | static bool VITA_GXM_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 638 | { | ||
| 639 | return true; | ||
| 640 | } | ||
| 641 | |||
| 642 | static bool VITA_GXM_QueueSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 643 | { | ||
| 644 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 645 | |||
| 646 | data->drawstate.color.r = cmd->data.color.color.r * cmd->data.color.color_scale; | ||
| 647 | data->drawstate.color.g = cmd->data.color.color.g * cmd->data.color.color_scale; | ||
| 648 | data->drawstate.color.b = cmd->data.color.color.b * cmd->data.color.color_scale; | ||
| 649 | data->drawstate.color.a = cmd->data.color.color.a; | ||
| 650 | |||
| 651 | return true; | ||
| 652 | } | ||
| 653 | |||
| 654 | static bool VITA_GXM_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 655 | { | ||
| 656 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 657 | |||
| 658 | SDL_FColor color = data->drawstate.color; | ||
| 659 | |||
| 660 | color_vertex *vertex = (color_vertex *)pool_malloc( | ||
| 661 | data, | ||
| 662 | count * sizeof(color_vertex)); | ||
| 663 | |||
| 664 | cmd->data.draw.first = (size_t)vertex; | ||
| 665 | cmd->data.draw.count = count; | ||
| 666 | |||
| 667 | for (int i = 0; i < count; i++) { | ||
| 668 | vertex[i].x = points[i].x; | ||
| 669 | vertex[i].y = points[i].y; | ||
| 670 | vertex[i].color = color; | ||
| 671 | } | ||
| 672 | |||
| 673 | return true; | ||
| 674 | } | ||
| 675 | |||
| 676 | static bool VITA_GXM_QueueDrawLines(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 677 | { | ||
| 678 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 679 | SDL_FColor color = data->drawstate.color; | ||
| 680 | |||
| 681 | color_vertex *vertex = (color_vertex *)pool_malloc( | ||
| 682 | data, | ||
| 683 | (count - 1) * 2 * sizeof(color_vertex)); | ||
| 684 | |||
| 685 | cmd->data.draw.first = (size_t)vertex; | ||
| 686 | cmd->data.draw.count = (count - 1) * 2; | ||
| 687 | |||
| 688 | for (int i = 0; i < count - 1; i++) { | ||
| 689 | vertex[i * 2].x = points[i].x; | ||
| 690 | vertex[i * 2].y = points[i].y; | ||
| 691 | vertex[i * 2].color = color; | ||
| 692 | |||
| 693 | vertex[i * 2 + 1].x = points[i + 1].x; | ||
| 694 | vertex[i * 2 + 1].y = points[i + 1].y; | ||
| 695 | vertex[i * 2 + 1].color = color; | ||
| 696 | } | ||
| 697 | |||
| 698 | return true; | ||
| 699 | } | ||
| 700 | |||
| 701 | static bool VITA_GXM_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 702 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 703 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 704 | float scale_x, float scale_y) | ||
| 705 | { | ||
| 706 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 707 | int i; | ||
| 708 | int count = indices ? num_indices : num_vertices; | ||
| 709 | const float color_scale = cmd->data.draw.color_scale; | ||
| 710 | |||
| 711 | cmd->data.draw.count = count; | ||
| 712 | size_indices = indices ? size_indices : 0; | ||
| 713 | |||
| 714 | if (texture) { | ||
| 715 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 716 | texture_vertex *vertices; | ||
| 717 | |||
| 718 | vertices = (texture_vertex *)pool_malloc( | ||
| 719 | data, | ||
| 720 | count * sizeof(texture_vertex)); | ||
| 721 | |||
| 722 | if (!vertices) { | ||
| 723 | return false; | ||
| 724 | } | ||
| 725 | |||
| 726 | for (i = 0; i < count; i++) { | ||
| 727 | int j; | ||
| 728 | float *xy_; | ||
| 729 | float *uv_; | ||
| 730 | SDL_FColor col_; | ||
| 731 | if (size_indices == 4) { | ||
| 732 | j = ((const Uint32 *)indices)[i]; | ||
| 733 | } else if (size_indices == 2) { | ||
| 734 | j = ((const Uint16 *)indices)[i]; | ||
| 735 | } else if (size_indices == 1) { | ||
| 736 | j = ((const Uint8 *)indices)[i]; | ||
| 737 | } else { | ||
| 738 | j = i; | ||
| 739 | } | ||
| 740 | |||
| 741 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 742 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 743 | uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 744 | |||
| 745 | col_.r *= color_scale; | ||
| 746 | col_.g *= color_scale; | ||
| 747 | col_.b *= color_scale; | ||
| 748 | |||
| 749 | vertices[i].x = xy_[0] * scale_x; | ||
| 750 | vertices[i].y = xy_[1] * scale_y; | ||
| 751 | vertices[i].u = uv_[0] * vita_texture->wscale; | ||
| 752 | vertices[i].v = uv_[1]; | ||
| 753 | vertices[i].color = col_; | ||
| 754 | } | ||
| 755 | |||
| 756 | cmd->data.draw.first = (size_t)vertices; | ||
| 757 | |||
| 758 | } else { | ||
| 759 | color_vertex *vertices; | ||
| 760 | |||
| 761 | vertices = (color_vertex *)pool_malloc( | ||
| 762 | data, | ||
| 763 | count * sizeof(color_vertex)); | ||
| 764 | |||
| 765 | if (!vertices) { | ||
| 766 | return false; | ||
| 767 | } | ||
| 768 | |||
| 769 | for (i = 0; i < count; i++) { | ||
| 770 | int j; | ||
| 771 | float *xy_; | ||
| 772 | SDL_FColor col_; | ||
| 773 | if (size_indices == 4) { | ||
| 774 | j = ((const Uint32 *)indices)[i]; | ||
| 775 | } else if (size_indices == 2) { | ||
| 776 | j = ((const Uint16 *)indices)[i]; | ||
| 777 | } else if (size_indices == 1) { | ||
| 778 | j = ((const Uint8 *)indices)[i]; | ||
| 779 | } else { | ||
| 780 | j = i; | ||
| 781 | } | ||
| 782 | |||
| 783 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 784 | col_ = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 785 | |||
| 786 | col_.r *= color_scale; | ||
| 787 | col_.g *= color_scale; | ||
| 788 | col_.b *= color_scale; | ||
| 789 | |||
| 790 | vertices[i].x = xy_[0] * scale_x; | ||
| 791 | vertices[i].y = xy_[1] * scale_y; | ||
| 792 | vertices[i].color = col_; | ||
| 793 | } | ||
| 794 | cmd->data.draw.first = (size_t)vertices; | ||
| 795 | } | ||
| 796 | |||
| 797 | return true; | ||
| 798 | } | ||
| 799 | |||
| 800 | static bool VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 801 | { | ||
| 802 | void *color_buffer; | ||
| 803 | SDL_FColor color; | ||
| 804 | |||
| 805 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 806 | unset_clip_rectangle(data); | ||
| 807 | |||
| 808 | // set clear shaders | ||
| 809 | data->drawstate.fragment_program = data->clearFragmentProgram; | ||
| 810 | data->drawstate.vertex_program = data->clearVertexProgram; | ||
| 811 | sceGxmSetVertexProgram(data->gxm_context, data->clearVertexProgram); | ||
| 812 | sceGxmSetFragmentProgram(data->gxm_context, data->clearFragmentProgram); | ||
| 813 | |||
| 814 | // set the clear color | ||
| 815 | color = cmd->data.color.color; | ||
| 816 | color.r *= cmd->data.color.color_scale; | ||
| 817 | color.g *= cmd->data.color.color_scale; | ||
| 818 | color.b *= cmd->data.color.color_scale; | ||
| 819 | sceGxmReserveFragmentDefaultUniformBuffer(data->gxm_context, &color_buffer); | ||
| 820 | sceGxmSetUniformDataF(color_buffer, data->clearClearColorParam, 0, 4, &color.r); | ||
| 821 | |||
| 822 | // draw the clear triangle | ||
| 823 | sceGxmSetVertexStream(data->gxm_context, 0, data->clearVertices); | ||
| 824 | sceGxmDraw(data->gxm_context, SCE_GXM_PRIMITIVE_TRIANGLES, SCE_GXM_INDEX_FORMAT_U16, data->linearIndices, 3); | ||
| 825 | |||
| 826 | data->drawstate.cliprect_dirty = true; | ||
| 827 | return true; | ||
| 828 | } | ||
| 829 | |||
| 830 | static bool SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd) | ||
| 831 | { | ||
| 832 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 833 | const SDL_BlendMode blend = cmd->data.draw.blend; | ||
| 834 | SceGxmFragmentProgram *fragment_program; | ||
| 835 | SceGxmVertexProgram *vertex_program; | ||
| 836 | bool matrix_updated = false; | ||
| 837 | bool program_updated = false; | ||
| 838 | |||
| 839 | if (data->drawstate.viewport_dirty) { | ||
| 840 | const SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 841 | |||
| 842 | float sw = viewport->w / 2.f; | ||
| 843 | float sh = viewport->h / 2.f; | ||
| 844 | |||
| 845 | float x_scale = sw; | ||
| 846 | float x_off = viewport->x + sw; | ||
| 847 | float y_scale = -(sh); | ||
| 848 | float y_off = viewport->y + sh; | ||
| 849 | |||
| 850 | sceGxmSetViewport(data->gxm_context, x_off, x_scale, y_off, y_scale, 0.5f, 0.5f); | ||
| 851 | |||
| 852 | if (viewport->w && viewport->h) { | ||
| 853 | init_orthographic_matrix(data->ortho_matrix, | ||
| 854 | (float)0, | ||
| 855 | (float)viewport->w, | ||
| 856 | (float)viewport->h, | ||
| 857 | (float)0, | ||
| 858 | 0.0f, 1.0f); | ||
| 859 | matrix_updated = true; | ||
| 860 | } | ||
| 861 | |||
| 862 | data->drawstate.viewport_dirty = false; | ||
| 863 | } | ||
| 864 | |||
| 865 | if (data->drawstate.cliprect_enabled_dirty) { | ||
| 866 | if (!data->drawstate.cliprect_enabled) { | ||
| 867 | unset_clip_rectangle(data); | ||
| 868 | } | ||
| 869 | data->drawstate.cliprect_enabled_dirty = false; | ||
| 870 | } | ||
| 871 | |||
| 872 | if (data->drawstate.cliprect_enabled && data->drawstate.cliprect_dirty) { | ||
| 873 | const SDL_Rect *rect = &data->drawstate.cliprect; | ||
| 874 | set_clip_rectangle(data, rect->x, rect->y, rect->x + rect->w, rect->y + rect->h); | ||
| 875 | data->drawstate.cliprect_dirty = false; | ||
| 876 | } | ||
| 877 | |||
| 878 | VITA_GXM_SetBlendMode(data, blend); // do that first, to select appropriate shaders | ||
| 879 | |||
| 880 | if (texture) { | ||
| 881 | vertex_program = data->textureVertexProgram; | ||
| 882 | fragment_program = data->textureFragmentProgram; | ||
| 883 | } else { | ||
| 884 | vertex_program = data->colorVertexProgram; | ||
| 885 | fragment_program = data->colorFragmentProgram; | ||
| 886 | } | ||
| 887 | |||
| 888 | if (data->drawstate.vertex_program != vertex_program) { | ||
| 889 | data->drawstate.vertex_program = vertex_program; | ||
| 890 | sceGxmSetVertexProgram(data->gxm_context, vertex_program); | ||
| 891 | program_updated = true; | ||
| 892 | } | ||
| 893 | |||
| 894 | if (data->drawstate.fragment_program != fragment_program) { | ||
| 895 | data->drawstate.fragment_program = fragment_program; | ||
| 896 | sceGxmSetFragmentProgram(data->gxm_context, fragment_program); | ||
| 897 | program_updated = true; | ||
| 898 | } | ||
| 899 | |||
| 900 | if (program_updated || matrix_updated) { | ||
| 901 | if (data->drawstate.fragment_program == data->textureFragmentProgram) { | ||
| 902 | void *vertex_wvp_buffer; | ||
| 903 | sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertex_wvp_buffer); | ||
| 904 | sceGxmSetUniformDataF(vertex_wvp_buffer, data->textureWvpParam, 0, 16, data->ortho_matrix); | ||
| 905 | } else { // color | ||
| 906 | void *vertexDefaultBuffer; | ||
| 907 | sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertexDefaultBuffer); | ||
| 908 | sceGxmSetUniformDataF(vertexDefaultBuffer, data->colorWvpParam, 0, 16, data->ortho_matrix); | ||
| 909 | } | ||
| 910 | } | ||
| 911 | |||
| 912 | if (texture != data->drawstate.texture) { | ||
| 913 | if (texture) { | ||
| 914 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)cmd->data.draw.texture->internal; | ||
| 915 | sceGxmSetFragmentTexture(data->gxm_context, 0, &vita_texture->tex->gxm_tex); | ||
| 916 | } | ||
| 917 | data->drawstate.texture = texture; | ||
| 918 | } | ||
| 919 | |||
| 920 | // all drawing commands use this | ||
| 921 | sceGxmSetVertexStream(data->gxm_context, 0, (const void *)cmd->data.draw.first); | ||
| 922 | |||
| 923 | return true; | ||
| 924 | } | ||
| 925 | |||
| 926 | static void VITA_GXM_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 927 | { | ||
| 928 | // currently this doesn't do anything. If this needs to do something (and someone is mixing their own rendering calls in!), update this. | ||
| 929 | } | ||
| 930 | |||
| 931 | static bool VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 932 | { | ||
| 933 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 934 | StartDrawing(renderer); | ||
| 935 | |||
| 936 | data->drawstate.target = renderer->target; | ||
| 937 | if (!data->drawstate.target) { | ||
| 938 | int w, h; | ||
| 939 | SDL_GetWindowSizeInPixels(renderer->window, &w, &h); | ||
| 940 | if ((w != data->drawstate.drawablew) || (h != data->drawstate.drawableh)) { | ||
| 941 | data->drawstate.viewport_dirty = true; // if the window dimensions changed, invalidate the current viewport, etc. | ||
| 942 | data->drawstate.cliprect_dirty = true; | ||
| 943 | data->drawstate.drawablew = w; | ||
| 944 | data->drawstate.drawableh = h; | ||
| 945 | } | ||
| 946 | } | ||
| 947 | |||
| 948 | while (cmd) { | ||
| 949 | switch (cmd->command) { | ||
| 950 | |||
| 951 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 952 | { | ||
| 953 | SDL_Rect *viewport = &data->drawstate.viewport; | ||
| 954 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 955 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 956 | data->drawstate.viewport_dirty = true; | ||
| 957 | data->drawstate.cliprect_dirty = true; | ||
| 958 | } | ||
| 959 | break; | ||
| 960 | } | ||
| 961 | |||
| 962 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 963 | { | ||
| 964 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 965 | if (data->drawstate.cliprect_enabled != cmd->data.cliprect.enabled) { | ||
| 966 | data->drawstate.cliprect_enabled = cmd->data.cliprect.enabled; | ||
| 967 | data->drawstate.cliprect_enabled_dirty = true; | ||
| 968 | } | ||
| 969 | |||
| 970 | if (SDL_memcmp(&data->drawstate.cliprect, rect, sizeof(*rect)) != 0) { | ||
| 971 | SDL_copyp(&data->drawstate.cliprect, rect); | ||
| 972 | data->drawstate.cliprect_dirty = true; | ||
| 973 | } | ||
| 974 | break; | ||
| 975 | } | ||
| 976 | |||
| 977 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 978 | { | ||
| 979 | break; | ||
| 980 | } | ||
| 981 | |||
| 982 | case SDL_RENDERCMD_CLEAR: | ||
| 983 | { | ||
| 984 | VITA_GXM_RenderClear(renderer, cmd); | ||
| 985 | break; | ||
| 986 | } | ||
| 987 | |||
| 988 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 989 | break; | ||
| 990 | |||
| 991 | case SDL_RENDERCMD_COPY: // unused | ||
| 992 | break; | ||
| 993 | |||
| 994 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 995 | break; | ||
| 996 | |||
| 997 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 998 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 999 | case SDL_RENDERCMD_GEOMETRY: | ||
| 1000 | { | ||
| 1001 | SDL_Texture *thistexture = cmd->data.draw.texture; | ||
| 1002 | SDL_BlendMode thisblend = cmd->data.draw.blend; | ||
| 1003 | const SDL_RenderCommandType thiscmdtype = cmd->command; | ||
| 1004 | SDL_RenderCommand *finalcmd = cmd; | ||
| 1005 | SDL_RenderCommand *nextcmd = cmd->next; | ||
| 1006 | size_t count = cmd->data.draw.count; | ||
| 1007 | int ret; | ||
| 1008 | while (nextcmd) { | ||
| 1009 | const SDL_RenderCommandType nextcmdtype = nextcmd->command; | ||
| 1010 | if (nextcmdtype != thiscmdtype) { | ||
| 1011 | break; // can't go any further on this draw call, different render command up next. | ||
| 1012 | } else if (nextcmd->data.draw.texture != thistexture || nextcmd->data.draw.blend != thisblend) { | ||
| 1013 | break; // can't go any further on this draw call, different texture/blendmode copy up next. | ||
| 1014 | } else { | ||
| 1015 | finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command. | ||
| 1016 | count += nextcmd->data.draw.count; | ||
| 1017 | } | ||
| 1018 | nextcmd = nextcmd->next; | ||
| 1019 | } | ||
| 1020 | |||
| 1021 | ret = SetDrawState(data, cmd); | ||
| 1022 | |||
| 1023 | if (ret) { | ||
| 1024 | int op = SCE_GXM_PRIMITIVE_TRIANGLES; | ||
| 1025 | |||
| 1026 | if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS) { | ||
| 1027 | sceGxmSetFrontPolygonMode(data->gxm_context, SCE_GXM_POLYGON_MODE_POINT); | ||
| 1028 | op = SCE_GXM_PRIMITIVE_POINTS; | ||
| 1029 | } else if (thiscmdtype == SDL_RENDERCMD_DRAW_LINES) { | ||
| 1030 | sceGxmSetFrontPolygonMode(data->gxm_context, SCE_GXM_POLYGON_MODE_LINE); | ||
| 1031 | op = SCE_GXM_PRIMITIVE_LINES; | ||
| 1032 | } | ||
| 1033 | |||
| 1034 | sceGxmDraw(data->gxm_context, op, SCE_GXM_INDEX_FORMAT_U16, data->linearIndices, count); | ||
| 1035 | |||
| 1036 | if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS || thiscmdtype == SDL_RENDERCMD_DRAW_LINES) { | ||
| 1037 | sceGxmSetFrontPolygonMode(data->gxm_context, SCE_GXM_POLYGON_MODE_TRIANGLE_FILL); | ||
| 1038 | } | ||
| 1039 | } | ||
| 1040 | |||
| 1041 | cmd = finalcmd; // skip any copy commands we just combined in here. | ||
| 1042 | break; | ||
| 1043 | } | ||
| 1044 | |||
| 1045 | case SDL_RENDERCMD_NO_OP: | ||
| 1046 | break; | ||
| 1047 | } | ||
| 1048 | data->drawstate.last_command = cmd->command; | ||
| 1049 | cmd = cmd->next; | ||
| 1050 | } | ||
| 1051 | |||
| 1052 | sceGxmEndScene(data->gxm_context, NULL, NULL); | ||
| 1053 | data->drawing = false; | ||
| 1054 | |||
| 1055 | return true; | ||
| 1056 | } | ||
| 1057 | |||
| 1058 | void read_pixels(int x, int y, size_t width, size_t height, void *data) | ||
| 1059 | { | ||
| 1060 | SceDisplayFrameBuf pParam; | ||
| 1061 | int i, j; | ||
| 1062 | Uint32 *out32; | ||
| 1063 | Uint32 *in32; | ||
| 1064 | |||
| 1065 | pParam.size = sizeof(SceDisplayFrameBuf); | ||
| 1066 | |||
| 1067 | sceDisplayGetFrameBuf(&pParam, SCE_DISPLAY_SETBUF_NEXTFRAME); | ||
| 1068 | |||
| 1069 | out32 = (Uint32 *)data; | ||
| 1070 | in32 = (Uint32 *)pParam.base; | ||
| 1071 | |||
| 1072 | in32 += (x + y * pParam.pitch); | ||
| 1073 | |||
| 1074 | for (i = 0; i < height; i++) { | ||
| 1075 | for (j = 0; j < width; j++) { | ||
| 1076 | out32[(height - (i + 1)) * width + j] = in32[j]; | ||
| 1077 | } | ||
| 1078 | in32 += pParam.pitch; | ||
| 1079 | } | ||
| 1080 | } | ||
| 1081 | |||
| 1082 | static SDL_Surface *VITA_GXM_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 1083 | { | ||
| 1084 | Uint32 format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_ABGR8888; | ||
| 1085 | SDL_Surface *surface; | ||
| 1086 | |||
| 1087 | // TODO: read from texture rendertarget. | ||
| 1088 | if (renderer->target) { | ||
| 1089 | SDL_Unsupported(); | ||
| 1090 | return NULL; | ||
| 1091 | } | ||
| 1092 | |||
| 1093 | surface = SDL_CreateSurface(rect->w, rect->h, format); | ||
| 1094 | if (!surface) { | ||
| 1095 | return NULL; | ||
| 1096 | } | ||
| 1097 | |||
| 1098 | int y = rect->y; | ||
| 1099 | if (!renderer->target) { | ||
| 1100 | int w, h; | ||
| 1101 | SDL_GetRenderOutputSize(renderer, &w, &h); | ||
| 1102 | y = (h - y) - rect->h; | ||
| 1103 | } | ||
| 1104 | |||
| 1105 | read_pixels(rect->x, y, rect->w, rect->h, surface->pixels); | ||
| 1106 | |||
| 1107 | // Flip the rows to be top-down if necessary | ||
| 1108 | if (!renderer->target) { | ||
| 1109 | SDL_FlipSurface(surface, SDL_FLIP_VERTICAL); | ||
| 1110 | } | ||
| 1111 | return surface; | ||
| 1112 | } | ||
| 1113 | |||
| 1114 | static bool VITA_GXM_RenderPresent(SDL_Renderer *renderer) | ||
| 1115 | { | ||
| 1116 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 1117 | SceCommonDialogUpdateParam updateParam; | ||
| 1118 | |||
| 1119 | data->displayData.address = data->displayBufferData[data->backBufferIndex]; | ||
| 1120 | |||
| 1121 | SDL_memset(&updateParam, 0, sizeof(updateParam)); | ||
| 1122 | |||
| 1123 | updateParam.renderTarget.colorFormat = VITA_GXM_COLOR_FORMAT; | ||
| 1124 | updateParam.renderTarget.surfaceType = SCE_GXM_COLOR_SURFACE_LINEAR; | ||
| 1125 | updateParam.renderTarget.width = VITA_GXM_SCREEN_WIDTH; | ||
| 1126 | updateParam.renderTarget.height = VITA_GXM_SCREEN_HEIGHT; | ||
| 1127 | updateParam.renderTarget.strideInPixels = VITA_GXM_SCREEN_STRIDE; | ||
| 1128 | |||
| 1129 | updateParam.renderTarget.colorSurfaceData = data->displayBufferData[data->backBufferIndex]; | ||
| 1130 | updateParam.renderTarget.depthSurfaceData = data->depthBufferData; | ||
| 1131 | |||
| 1132 | updateParam.displaySyncObject = (SceGxmSyncObject *)data->displayBufferSync[data->backBufferIndex]; | ||
| 1133 | |||
| 1134 | sceCommonDialogUpdate(&updateParam); | ||
| 1135 | |||
| 1136 | #ifdef DEBUG_RAZOR | ||
| 1137 | sceGxmPadHeartbeat( | ||
| 1138 | (const SceGxmColorSurface *)&data->displaySurface[data->backBufferIndex], | ||
| 1139 | (SceGxmSyncObject *)data->displayBufferSync[data->backBufferIndex]); | ||
| 1140 | #endif | ||
| 1141 | |||
| 1142 | sceGxmDisplayQueueAddEntry( | ||
| 1143 | data->displayBufferSync[data->frontBufferIndex], // OLD fb | ||
| 1144 | data->displayBufferSync[data->backBufferIndex], // NEW fb | ||
| 1145 | &data->displayData); | ||
| 1146 | |||
| 1147 | // update buffer indices | ||
| 1148 | data->frontBufferIndex = data->backBufferIndex; | ||
| 1149 | data->backBufferIndex = (data->backBufferIndex + 1) % VITA_GXM_BUFFERS; | ||
| 1150 | data->pool_index = 0; | ||
| 1151 | |||
| 1152 | data->current_pool = (data->current_pool + 1) % 2; | ||
| 1153 | return true; | ||
| 1154 | } | ||
| 1155 | |||
| 1156 | static void VITA_GXM_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 1157 | { | ||
| 1158 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 1159 | VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; | ||
| 1160 | |||
| 1161 | if (!data) { | ||
| 1162 | return; | ||
| 1163 | } | ||
| 1164 | |||
| 1165 | if (!vita_texture) { | ||
| 1166 | return; | ||
| 1167 | } | ||
| 1168 | |||
| 1169 | if (!vita_texture->tex) { | ||
| 1170 | return; | ||
| 1171 | } | ||
| 1172 | |||
| 1173 | sceGxmFinish(data->gxm_context); | ||
| 1174 | |||
| 1175 | free_gxm_texture(data, vita_texture->tex); | ||
| 1176 | |||
| 1177 | SDL_free(vita_texture); | ||
| 1178 | |||
| 1179 | texture->internal = NULL; | ||
| 1180 | } | ||
| 1181 | |||
| 1182 | static void VITA_GXM_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1183 | { | ||
| 1184 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 1185 | if (data) { | ||
| 1186 | if (!data->initialized) { | ||
| 1187 | return; | ||
| 1188 | } | ||
| 1189 | |||
| 1190 | gxm_finish(renderer); | ||
| 1191 | |||
| 1192 | data->initialized = false; | ||
| 1193 | data->drawing = false; | ||
| 1194 | SDL_free(data); | ||
| 1195 | } | ||
| 1196 | } | ||
| 1197 | |||
| 1198 | #endif // SDL_VIDEO_RENDER_VITA_GXM | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_memory.c b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_memory.c new file mode 100644 index 0000000..e37a345 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_memory.c | |||
| @@ -0,0 +1,179 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #include "SDL_internal.h" | ||
| 23 | |||
| 24 | #ifdef SDL_VIDEO_RENDER_VITA_GXM | ||
| 25 | |||
| 26 | #include "SDL_render_vita_gxm_memory.h" | ||
| 27 | |||
| 28 | void *vita_mem_alloc(unsigned int type, unsigned int size, unsigned int alignment, unsigned int attribs, SceUID *uid) | ||
| 29 | { | ||
| 30 | void *mem; | ||
| 31 | |||
| 32 | if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW) { | ||
| 33 | size = ALIGN(size, 256 * 1024); | ||
| 34 | } else if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW) { | ||
| 35 | size = ALIGN(size, 1024 * 1024); | ||
| 36 | } else { | ||
| 37 | size = ALIGN(size, 4 * 1024); | ||
| 38 | } | ||
| 39 | |||
| 40 | *uid = sceKernelAllocMemBlock("gpu_mem", type, size, NULL); | ||
| 41 | |||
| 42 | if (*uid < 0) { | ||
| 43 | return NULL; | ||
| 44 | } | ||
| 45 | |||
| 46 | if (sceKernelGetMemBlockBase(*uid, &mem) < 0) { | ||
| 47 | return NULL; | ||
| 48 | } | ||
| 49 | |||
| 50 | if (sceGxmMapMemory(mem, size, attribs) < 0) { | ||
| 51 | return NULL; | ||
| 52 | } | ||
| 53 | |||
| 54 | return mem; | ||
| 55 | } | ||
| 56 | |||
| 57 | void vita_mem_free(SceUID uid) | ||
| 58 | { | ||
| 59 | void *mem = NULL; | ||
| 60 | if (sceKernelGetMemBlockBase(uid, &mem) < 0) { | ||
| 61 | return; | ||
| 62 | } | ||
| 63 | sceGxmUnmapMemory(mem); | ||
| 64 | sceKernelFreeMemBlock(uid); | ||
| 65 | } | ||
| 66 | |||
| 67 | void *vita_gpu_mem_alloc(VITA_GXM_RenderData *data, unsigned int size) | ||
| 68 | { | ||
| 69 | void *mem; | ||
| 70 | |||
| 71 | if (!data->texturePool) { | ||
| 72 | int poolsize; | ||
| 73 | int ret; | ||
| 74 | SceKernelFreeMemorySizeInfo info; | ||
| 75 | info.size = sizeof(SceKernelFreeMemorySizeInfo); | ||
| 76 | sceKernelGetFreeMemorySize(&info); | ||
| 77 | |||
| 78 | poolsize = ALIGN(info.size_cdram, 256 * 1024); | ||
| 79 | if (poolsize > info.size_cdram) { | ||
| 80 | poolsize = ALIGN(info.size_cdram - 256 * 1024, 256 * 1024); | ||
| 81 | } | ||
| 82 | data->texturePoolUID = sceKernelAllocMemBlock("gpu_texture_pool", SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, poolsize, NULL); | ||
| 83 | if (data->texturePoolUID < 0) { | ||
| 84 | return NULL; | ||
| 85 | } | ||
| 86 | |||
| 87 | ret = sceKernelGetMemBlockBase(data->texturePoolUID, &mem); | ||
| 88 | if (ret < 0) { | ||
| 89 | return NULL; | ||
| 90 | } | ||
| 91 | data->texturePool = sceClibMspaceCreate(mem, poolsize); | ||
| 92 | |||
| 93 | if (!data->texturePool) { | ||
| 94 | return NULL; | ||
| 95 | } | ||
| 96 | ret = sceGxmMapMemory(mem, poolsize, SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE); | ||
| 97 | if (ret < 0) { | ||
| 98 | return NULL; | ||
| 99 | } | ||
| 100 | } | ||
| 101 | return sceClibMspaceMemalign(data->texturePool, SCE_GXM_TEXTURE_ALIGNMENT, size); | ||
| 102 | } | ||
| 103 | |||
| 104 | void vita_gpu_mem_free(VITA_GXM_RenderData *data, void *ptr) | ||
| 105 | { | ||
| 106 | if (data->texturePool) { | ||
| 107 | sceClibMspaceFree(data->texturePool, ptr); | ||
| 108 | } | ||
| 109 | } | ||
| 110 | |||
| 111 | void vita_gpu_mem_destroy(VITA_GXM_RenderData *data) | ||
| 112 | { | ||
| 113 | void *mem = NULL; | ||
| 114 | if (data->texturePool) { | ||
| 115 | sceClibMspaceDestroy(data->texturePool); | ||
| 116 | data->texturePool = NULL; | ||
| 117 | if (sceKernelGetMemBlockBase(data->texturePoolUID, &mem) < 0) { | ||
| 118 | return; | ||
| 119 | } | ||
| 120 | sceGxmUnmapMemory(mem); | ||
| 121 | sceKernelFreeMemBlock(data->texturePoolUID); | ||
| 122 | } | ||
| 123 | } | ||
| 124 | |||
| 125 | void *vita_mem_vertex_usse_alloc(unsigned int size, SceUID *uid, unsigned int *usse_offset) | ||
| 126 | { | ||
| 127 | void *mem = NULL; | ||
| 128 | |||
| 129 | size = ALIGN(size, 4096); | ||
| 130 | *uid = sceKernelAllocMemBlock("vertex_usse", SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, size, NULL); | ||
| 131 | |||
| 132 | if (sceKernelGetMemBlockBase(*uid, &mem) < 0) { | ||
| 133 | return NULL; | ||
| 134 | } | ||
| 135 | if (sceGxmMapVertexUsseMemory(mem, size, usse_offset) < 0) { | ||
| 136 | return NULL; | ||
| 137 | } | ||
| 138 | |||
| 139 | return mem; | ||
| 140 | } | ||
| 141 | |||
| 142 | void vita_mem_vertex_usse_free(SceUID uid) | ||
| 143 | { | ||
| 144 | void *mem = NULL; | ||
| 145 | if (sceKernelGetMemBlockBase(uid, &mem) < 0) { | ||
| 146 | return; | ||
| 147 | } | ||
| 148 | sceGxmUnmapVertexUsseMemory(mem); | ||
| 149 | sceKernelFreeMemBlock(uid); | ||
| 150 | } | ||
| 151 | |||
| 152 | void *vita_mem_fragment_usse_alloc(unsigned int size, SceUID *uid, unsigned int *usse_offset) | ||
| 153 | { | ||
| 154 | void *mem = NULL; | ||
| 155 | |||
| 156 | size = ALIGN(size, 4096); | ||
| 157 | *uid = sceKernelAllocMemBlock("fragment_usse", SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, size, NULL); | ||
| 158 | |||
| 159 | if (sceKernelGetMemBlockBase(*uid, &mem) < 0) { | ||
| 160 | return NULL; | ||
| 161 | } | ||
| 162 | if (sceGxmMapFragmentUsseMemory(mem, size, usse_offset) < 0) { | ||
| 163 | return NULL; | ||
| 164 | } | ||
| 165 | |||
| 166 | return mem; | ||
| 167 | } | ||
| 168 | |||
| 169 | void vita_mem_fragment_usse_free(SceUID uid) | ||
| 170 | { | ||
| 171 | void *mem = NULL; | ||
| 172 | if (sceKernelGetMemBlockBase(uid, &mem) < 0) { | ||
| 173 | return; | ||
| 174 | } | ||
| 175 | sceGxmUnmapFragmentUsseMemory(mem); | ||
| 176 | sceKernelFreeMemBlock(uid); | ||
| 177 | } | ||
| 178 | |||
| 179 | #endif // SDL_VIDEO_RENDER_VITA_GXM | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_memory.h b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_memory.h new file mode 100644 index 0000000..cc548b3 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_memory.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_RENDER_VITA_GXM_MEMORY_H | ||
| 23 | #define SDL_RENDER_VITA_GXM_MEMORY_H | ||
| 24 | |||
| 25 | #include <psp2/gxm.h> | ||
| 26 | #include <psp2/types.h> | ||
| 27 | #include <psp2/kernel/sysmem.h> | ||
| 28 | #include "SDL_render_vita_gxm_types.h" | ||
| 29 | |||
| 30 | #define ALIGN(x, a) (((x) + ((a)-1)) & ~((a)-1)) | ||
| 31 | |||
| 32 | void *vita_mem_alloc(unsigned int type, unsigned int size, unsigned int alignment, unsigned int attribs, SceUID *uid); | ||
| 33 | void vita_mem_free(SceUID uid); | ||
| 34 | void *vita_gpu_mem_alloc(VITA_GXM_RenderData *data, unsigned int size); | ||
| 35 | void vita_gpu_mem_free(VITA_GXM_RenderData *data, void *ptr); | ||
| 36 | void vita_gpu_mem_destroy(VITA_GXM_RenderData *data); | ||
| 37 | void *vita_mem_vertex_usse_alloc(unsigned int size, SceUID *uid, unsigned int *usse_offset); | ||
| 38 | void vita_mem_vertex_usse_free(SceUID uid); | ||
| 39 | void *vita_mem_fragment_usse_alloc(unsigned int size, SceUID *uid, unsigned int *usse_offset); | ||
| 40 | void vita_mem_fragment_usse_free(SceUID uid); | ||
| 41 | |||
| 42 | #endif // SDL_RENDER_VITA_GXM_MEMORY_H | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_shaders.h b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_shaders.h new file mode 100644 index 0000000..ef80e03 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_shaders.h | |||
| @@ -0,0 +1,282 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_RENDER_VITA_GXM_SHADERS_H | ||
| 23 | #define SDL_RENDER_VITA_GXM_SHADERS_H | ||
| 24 | |||
| 25 | #include <psp2/gxm.h> | ||
| 26 | |||
| 27 | /* *INDENT-OFF* */ /* clang-format off */ | ||
| 28 | |||
| 29 | #define gxm_shader_clear_f_size 232 | ||
| 30 | static const unsigned char gxm_shader_clear_f[gxm_shader_clear_f_size] = { | ||
| 31 | 0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03, | ||
| 32 | 0xe8, 0x00, 0x00, 0x00, 0xa2, 0x55, 0x22, 0x3e, | ||
| 33 | 0xc6, 0x7e, 0x77, 0xf1, 0x01, 0x00, 0x18, 0x00, | ||
| 34 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 35 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 36 | 0xa4, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 37 | 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 38 | 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 39 | 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 40 | 0x68, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, | ||
| 41 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 42 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 43 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 44 | 0x5c, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00, | ||
| 45 | 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, | ||
| 46 | 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, | ||
| 47 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 48 | 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, | ||
| 49 | 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, | ||
| 50 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 51 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, | ||
| 52 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 53 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 54 | 0x00, 0x07, 0x44, 0xfa, 0x02, 0x80, 0x19, 0xf0, | ||
| 55 | 0x7e, 0x0d, 0x80, 0x40, 0x0e, 0x00, 0x00, 0x00, | ||
| 56 | 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 57 | 0x01, 0xe4, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 58 | 0x00, 0x00, 0x00, 0x00, 0x75, 0x43, 0x6c, 0x65, | ||
| 59 | 0x61, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, | ||
| 60 | }; | ||
| 61 | |||
| 62 | #define gxm_shader_clear_v_size 252 | ||
| 63 | static const unsigned char gxm_shader_clear_v[gxm_shader_clear_v_size] = { | ||
| 64 | 0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03, | ||
| 65 | 0xfa, 0x00, 0x00, 0x00, 0xdc, 0x25, 0x34, 0x74, | ||
| 66 | 0x53, 0x4a, 0x7a, 0x5b, 0x04, 0x00, 0x19, 0x00, | ||
| 67 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 68 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 69 | 0xb8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 70 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 71 | 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 72 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 73 | 0x74, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 74 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 75 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 76 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 77 | 0x78, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00, | ||
| 78 | 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, | ||
| 79 | 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, | ||
| 80 | 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, | ||
| 81 | 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, | ||
| 82 | 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, | ||
| 83 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 85 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, | ||
| 86 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 87 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 88 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa, | ||
| 89 | 0x01, 0x00, 0x04, 0x90, 0x85, 0x11, 0xa5, 0x08, | ||
| 90 | 0x01, 0x80, 0x56, 0x90, 0x81, 0x11, 0x83, 0x08, | ||
| 91 | 0x00, 0x00, 0x20, 0xa0, 0x00, 0x50, 0x27, 0xfb, | ||
| 92 | 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 93 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 94 | 0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, | ||
| 95 | 0x6e, 0x00, 0x00, 0x00, | ||
| 96 | }; | ||
| 97 | |||
| 98 | #define gxm_shader_color_f_size 212 | ||
| 99 | static const unsigned char gxm_shader_color_f[gxm_shader_color_f_size] = { | ||
| 100 | 0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03, | ||
| 101 | 0xd4, 0x00, 0x00, 0x00, 0x9c, 0xd6, 0x9b, 0xf7, | ||
| 102 | 0x78, 0x00, 0x5d, 0x31, 0x01, 0x10, 0x18, 0x00, | ||
| 103 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 104 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 105 | 0xac, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 106 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 107 | 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 108 | 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 109 | 0x78, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, | ||
| 110 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 111 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 112 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 113 | 0x6c, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00, | ||
| 114 | 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, | ||
| 115 | 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, | ||
| 116 | 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, | ||
| 117 | 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, | ||
| 118 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
| 119 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 120 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, | ||
| 121 | 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 122 | 0x0f, 0xa0, 0xd0, 0x0e, 0x00, 0x00, 0x00, 0x00, | ||
| 123 | 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 124 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 125 | 0x00, 0x07, 0x44, 0xfa, 0x02, 0x80, 0x19, 0xa0, | ||
| 126 | 0x7e, 0x0d, 0x80, 0x40, | ||
| 127 | }; | ||
| 128 | |||
| 129 | #define gxm_shader_color_v_size 368 | ||
| 130 | static const unsigned char gxm_shader_color_v[gxm_shader_color_v_size] = { | ||
| 131 | 0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03, | ||
| 132 | 0x6d, 0x01, 0x00, 0x00, 0x09, 0xce, 0x4e, 0xc2, | ||
| 133 | 0xe1, 0xcd, 0x24, 0xbc, 0x00, 0x00, 0x19, 0x00, | ||
| 134 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 135 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 136 | 0x00, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 137 | 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 138 | 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00, | ||
| 139 | 0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 140 | 0x74, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, | ||
| 141 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 142 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 143 | 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 144 | 0xb8, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00, | ||
| 145 | 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, | ||
| 146 | 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, | ||
| 147 | 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, | ||
| 148 | 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, | ||
| 149 | 0x01, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, | ||
| 150 | 0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, | ||
| 151 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 152 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, | ||
| 153 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 154 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x43, 0x00, 0x61, | ||
| 155 | 0x86, 0x81, 0xa2, 0x00, 0x07, 0x53, 0x40, 0x61, | ||
| 156 | 0x86, 0x81, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 157 | 0x40, 0x01, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, | ||
| 158 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa, | ||
| 159 | 0x80, 0x00, 0x08, 0x83, 0x21, 0x1d, 0x80, 0x38, | ||
| 160 | 0x00, 0x00, 0xf0, 0x83, 0x20, 0x0d, 0x80, 0x38, | ||
| 161 | 0x0a, 0x84, 0xb9, 0xff, 0xbc, 0x0d, 0xc0, 0x40, | ||
| 162 | 0x02, 0x11, 0x45, 0xcf, 0x80, 0x8f, 0xb1, 0x18, | ||
| 163 | 0x00, 0x11, 0x01, 0xc0, 0x81, 0x81, 0xb1, 0x18, | ||
| 164 | 0x01, 0xd1, 0x42, 0xc0, 0x81, 0x81, 0xb1, 0x18, | ||
| 165 | 0x40, 0x00, 0x10, 0x41, 0x09, 0x05, 0x82, 0x38, | ||
| 166 | 0x00, 0x00, 0x20, 0xa0, 0x00, 0x50, 0x27, 0xfb, | ||
| 167 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, | ||
| 168 | 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 169 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 170 | 0x2a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 171 | 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 172 | 0x21, 0x00, 0x00, 0x00, 0x01, 0xe4, 0x00, 0x00, | ||
| 173 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 174 | 0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, | ||
| 175 | 0x6e, 0x00, 0x61, 0x43, 0x6f, 0x6c, 0x6f, 0x72, | ||
| 176 | 0x00, 0x77, 0x76, 0x70, 0x00, 0x00, 0x00, 0x00, | ||
| 177 | }; | ||
| 178 | |||
| 179 | #define gxm_shader_texture_f_size 288 | ||
| 180 | static const unsigned char gxm_shader_texture_f[gxm_shader_texture_f_size] = { | ||
| 181 | 0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03, | ||
| 182 | 0x20, 0x01, 0x00, 0x00, 0xeb, 0x4f, 0xb5, 0xba, | ||
| 183 | 0x60, 0xb2, 0xd0, 0x8d, 0x05, 0x18, 0x18, 0x00, | ||
| 184 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 185 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 186 | 0xc4, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 187 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 188 | 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 189 | 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 190 | 0x78, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, | ||
| 191 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 193 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 194 | 0x84, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00, | ||
| 195 | 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, | ||
| 196 | 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 197 | 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
| 198 | 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, | ||
| 199 | 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, | ||
| 200 | 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 201 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, | ||
| 202 | 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 203 | 0x00, 0xa9, 0xd0, 0x0e, 0x00, 0x00, 0x00, 0x00, | ||
| 204 | 0xf0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, | ||
| 205 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 206 | 0x00, 0x07, 0x44, 0xfa, 0x00, 0x00, 0x00, 0x00, | ||
| 207 | 0x40, 0x09, 0x00, 0xf8, 0x02, 0x80, 0x99, 0xaf, | ||
| 208 | 0xbc, 0x0d, 0xc0, 0x40, 0x06, 0x82, 0xb9, 0xaf, | ||
| 209 | 0xbc, 0x0d, 0x80, 0x40, 0x7c, 0x0f, 0x04, 0x00, | ||
| 210 | 0x86, 0x47, 0xa4, 0x10, 0x30, 0x00, 0x00, 0x00, | ||
| 211 | 0x02, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
| 212 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, | ||
| 213 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 214 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 215 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 216 | 0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x00, | ||
| 217 | }; | ||
| 218 | |||
| 219 | #define gxm_shader_texture_v_size 400 | ||
| 220 | static const unsigned char gxm_shader_texture_v[gxm_shader_texture_v_size] = { | ||
| 221 | 0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03, | ||
| 222 | 0x8f, 0x01, 0x00, 0x00, 0x60, 0x1e, 0x69, 0x97, | ||
| 223 | 0x82, 0x7e, 0x0c, 0xac, 0x00, 0x00, 0x19, 0x00, | ||
| 224 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
| 225 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 226 | 0x08, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, | ||
| 227 | 0x0c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 228 | 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 229 | 0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
| 230 | 0x74, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, | ||
| 231 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 232 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 233 | 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
| 234 | 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00, | ||
| 235 | 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, | ||
| 236 | 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, | ||
| 237 | 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, | ||
| 238 | 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, | ||
| 239 | 0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, | ||
| 240 | 0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x00, 0x00, | ||
| 241 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 242 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x0a, | ||
| 243 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 244 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x43, 0x00, 0x61, | ||
| 245 | 0x86, 0x81, 0xa2, 0x00, 0x07, 0x53, 0x40, 0x61, | ||
| 246 | 0x86, 0x81, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 247 | 0x40, 0x01, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, | ||
| 248 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa, | ||
| 249 | 0x01, 0x0e, 0x01, 0x01, 0x02, 0x00, 0x10, 0xfa, | ||
| 250 | 0x80, 0x00, 0x08, 0x83, 0x21, 0x25, 0x80, 0x38, | ||
| 251 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x14, 0xfa, | ||
| 252 | 0x00, 0x00, 0xf0, 0x83, 0x20, 0x0d, 0x80, 0x38, | ||
| 253 | 0x0a, 0x84, 0xb9, 0xff, 0xbc, 0x0d, 0xc0, 0x40, | ||
| 254 | 0x02, 0x11, 0x45, 0xcf, 0x80, 0x8f, 0xb1, 0x18, | ||
| 255 | 0x00, 0x11, 0x01, 0xc0, 0x81, 0x81, 0xb1, 0x18, | ||
| 256 | 0x01, 0xd1, 0x42, 0xc0, 0x81, 0x81, 0xb1, 0x18, | ||
| 257 | 0x00, 0x00, 0x20, 0xa0, 0x00, 0x50, 0x27, 0xfb, | ||
| 258 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, | ||
| 259 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 260 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 261 | 0x3a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 262 | 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
| 263 | 0x34, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
| 264 | 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 265 | 0x2b, 0x00, 0x00, 0x00, 0x01, 0xe4, 0x00, 0x00, | ||
| 266 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 267 | 0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, | ||
| 268 | 0x6e, 0x00, 0x61, 0x54, 0x65, 0x78, 0x63, 0x6f, | ||
| 269 | 0x6f, 0x72, 0x64, 0x00, 0x61, 0x43, 0x6f, 0x6c, | ||
| 270 | 0x6f, 0x72, 0x00, 0x77, 0x76, 0x70, 0x00, 0x00, | ||
| 271 | }; | ||
| 272 | |||
| 273 | /* *INDENT-ON* */ /* clang-format on */ | ||
| 274 | |||
| 275 | static const SceGxmProgram *const clearVertexProgramGxp = (const SceGxmProgram *)gxm_shader_clear_v; | ||
| 276 | static const SceGxmProgram *const clearFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_clear_f; | ||
| 277 | static const SceGxmProgram *const colorVertexProgramGxp = (const SceGxmProgram *)gxm_shader_color_v; | ||
| 278 | static const SceGxmProgram *const colorFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_color_f; | ||
| 279 | static const SceGxmProgram *const textureVertexProgramGxp = (const SceGxmProgram *)gxm_shader_texture_v; | ||
| 280 | static const SceGxmProgram *const textureFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_texture_f; | ||
| 281 | |||
| 282 | #endif // SDL_RENDER_VITA_GXM_SHADERS_H | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_tools.c b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_tools.c new file mode 100644 index 0000000..9140a62 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_tools.c | |||
| @@ -0,0 +1,1213 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_VITA_GXM | ||
| 24 | |||
| 25 | #include "../SDL_sysrender.h" | ||
| 26 | |||
| 27 | #include <psp2/kernel/processmgr.h> | ||
| 28 | #include <psp2/appmgr.h> | ||
| 29 | #include <psp2/display.h> | ||
| 30 | #include <psp2/gxm.h> | ||
| 31 | #include <psp2/types.h> | ||
| 32 | #include <psp2/kernel/sysmem.h> | ||
| 33 | #include <psp2/message_dialog.h> | ||
| 34 | |||
| 35 | #include <stdio.h> | ||
| 36 | #include <string.h> | ||
| 37 | #include <math.h> | ||
| 38 | #include <stdarg.h> | ||
| 39 | #include <stdlib.h> | ||
| 40 | |||
| 41 | #include "SDL_render_vita_gxm_tools.h" | ||
| 42 | #include "SDL_render_vita_gxm_types.h" | ||
| 43 | #include "SDL_render_vita_gxm_memory.h" | ||
| 44 | #include "SDL_render_vita_gxm_shaders.h" | ||
| 45 | |||
| 46 | void init_orthographic_matrix(float *m, float left, float right, float bottom, float top, float near, float far) | ||
| 47 | { | ||
| 48 | m[0x0] = 2.0f / (right - left); | ||
| 49 | m[0x4] = 0.0f; | ||
| 50 | m[0x8] = 0.0f; | ||
| 51 | m[0xC] = -(right + left) / (right - left); | ||
| 52 | |||
| 53 | m[0x1] = 0.0f; | ||
| 54 | m[0x5] = 2.0f / (top - bottom); | ||
| 55 | m[0x9] = 0.0f; | ||
| 56 | m[0xD] = -(top + bottom) / (top - bottom); | ||
| 57 | |||
| 58 | m[0x2] = 0.0f; | ||
| 59 | m[0x6] = 0.0f; | ||
| 60 | m[0xA] = -2.0f / (far - near); | ||
| 61 | m[0xE] = (far + near) / (far - near); | ||
| 62 | |||
| 63 | m[0x3] = 0.0f; | ||
| 64 | m[0x7] = 0.0f; | ||
| 65 | m[0xB] = 0.0f; | ||
| 66 | m[0xF] = 1.0f; | ||
| 67 | } | ||
| 68 | |||
| 69 | static void *patcher_host_alloc(void *user_data, unsigned int size) | ||
| 70 | { | ||
| 71 | void *mem = SDL_malloc(size); | ||
| 72 | (void)user_data; | ||
| 73 | return mem; | ||
| 74 | } | ||
| 75 | |||
| 76 | static void patcher_host_free(void *user_data, void *mem) | ||
| 77 | { | ||
| 78 | (void)user_data; | ||
| 79 | SDL_free(mem); | ||
| 80 | } | ||
| 81 | |||
| 82 | void *pool_malloc(VITA_GXM_RenderData *data, unsigned int size) | ||
| 83 | { | ||
| 84 | |||
| 85 | if ((data->pool_index + size) < VITA_GXM_POOL_SIZE) { | ||
| 86 | void *addr = (void *)((unsigned int)data->pool_addr[data->current_pool] + data->pool_index); | ||
| 87 | data->pool_index += size; | ||
| 88 | return addr; | ||
| 89 | } | ||
| 90 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "POOL OVERFLOW"); | ||
| 91 | return NULL; | ||
| 92 | } | ||
| 93 | |||
| 94 | void *pool_memalign(VITA_GXM_RenderData *data, unsigned int size, unsigned int alignment) | ||
| 95 | { | ||
| 96 | unsigned int new_index = (data->pool_index + alignment - 1) & ~(alignment - 1); | ||
| 97 | if ((new_index + size) < VITA_GXM_POOL_SIZE) { | ||
| 98 | void *addr = (void *)((unsigned int)data->pool_addr[data->current_pool] + new_index); | ||
| 99 | data->pool_index = new_index + size; | ||
| 100 | return addr; | ||
| 101 | } | ||
| 102 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "POOL OVERFLOW"); | ||
| 103 | return NULL; | ||
| 104 | } | ||
| 105 | |||
| 106 | static int tex_format_to_bytespp(SceGxmTextureFormat format) | ||
| 107 | { | ||
| 108 | switch (format & 0x9f000000U) { | ||
| 109 | case SCE_GXM_TEXTURE_BASE_FORMAT_U8: | ||
| 110 | case SCE_GXM_TEXTURE_BASE_FORMAT_S8: | ||
| 111 | case SCE_GXM_TEXTURE_BASE_FORMAT_P8: | ||
| 112 | case SCE_GXM_TEXTURE_BASE_FORMAT_YUV420P2: // YUV actually uses 12 bits per pixel. UV planes bits/mem are handled elsewhere | ||
| 113 | case SCE_GXM_TEXTURE_BASE_FORMAT_YUV420P3: | ||
| 114 | return 1; | ||
| 115 | case SCE_GXM_TEXTURE_BASE_FORMAT_U4U4U4U4: | ||
| 116 | case SCE_GXM_TEXTURE_BASE_FORMAT_U8U3U3U2: | ||
| 117 | case SCE_GXM_TEXTURE_BASE_FORMAT_U1U5U5U5: | ||
| 118 | case SCE_GXM_TEXTURE_BASE_FORMAT_U5U6U5: | ||
| 119 | case SCE_GXM_TEXTURE_BASE_FORMAT_S5S5U6: | ||
| 120 | case SCE_GXM_TEXTURE_BASE_FORMAT_U8U8: | ||
| 121 | case SCE_GXM_TEXTURE_BASE_FORMAT_S8S8: | ||
| 122 | return 2; | ||
| 123 | case SCE_GXM_TEXTURE_BASE_FORMAT_U8U8U8: | ||
| 124 | case SCE_GXM_TEXTURE_BASE_FORMAT_S8S8S8: | ||
| 125 | return 3; | ||
| 126 | case SCE_GXM_TEXTURE_BASE_FORMAT_U8U8U8U8: | ||
| 127 | case SCE_GXM_TEXTURE_BASE_FORMAT_S8S8S8S8: | ||
| 128 | case SCE_GXM_TEXTURE_BASE_FORMAT_F32: | ||
| 129 | case SCE_GXM_TEXTURE_BASE_FORMAT_U32: | ||
| 130 | case SCE_GXM_TEXTURE_BASE_FORMAT_S32: | ||
| 131 | default: | ||
| 132 | return 4; | ||
| 133 | } | ||
| 134 | } | ||
| 135 | |||
| 136 | static void display_callback(const void *callback_data) | ||
| 137 | { | ||
| 138 | SceDisplayFrameBuf framebuf; | ||
| 139 | const VITA_GXM_DisplayData *display_data = (const VITA_GXM_DisplayData *)callback_data; | ||
| 140 | |||
| 141 | SDL_memset(&framebuf, 0x00, sizeof(SceDisplayFrameBuf)); | ||
| 142 | framebuf.size = sizeof(SceDisplayFrameBuf); | ||
| 143 | framebuf.base = display_data->address; | ||
| 144 | framebuf.pitch = VITA_GXM_SCREEN_STRIDE; | ||
| 145 | framebuf.pixelformat = VITA_GXM_PIXEL_FORMAT; | ||
| 146 | framebuf.width = VITA_GXM_SCREEN_WIDTH; | ||
| 147 | framebuf.height = VITA_GXM_SCREEN_HEIGHT; | ||
| 148 | sceDisplaySetFrameBuf(&framebuf, SCE_DISPLAY_SETBUF_NEXTFRAME); | ||
| 149 | |||
| 150 | if (display_data->wait_vblank) { | ||
| 151 | sceDisplayWaitVblankStart(); | ||
| 152 | } | ||
| 153 | } | ||
| 154 | |||
| 155 | static void free_fragment_programs(VITA_GXM_RenderData *data, fragment_programs *out) | ||
| 156 | { | ||
| 157 | sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->color); | ||
| 158 | sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->texture); | ||
| 159 | } | ||
| 160 | |||
| 161 | static void make_fragment_programs(VITA_GXM_RenderData *data, fragment_programs *out, | ||
| 162 | const SceGxmBlendInfo *blend_info) | ||
| 163 | { | ||
| 164 | int err; | ||
| 165 | |||
| 166 | err = sceGxmShaderPatcherCreateFragmentProgram( | ||
| 167 | data->shaderPatcher, | ||
| 168 | data->colorFragmentProgramId, | ||
| 169 | SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, | ||
| 170 | 0, | ||
| 171 | blend_info, | ||
| 172 | colorVertexProgramGxp, | ||
| 173 | &out->color); | ||
| 174 | |||
| 175 | if (err != 0) { | ||
| 176 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Patcher create fragment failed: %d", err); | ||
| 177 | return; | ||
| 178 | } | ||
| 179 | |||
| 180 | err = sceGxmShaderPatcherCreateFragmentProgram( | ||
| 181 | data->shaderPatcher, | ||
| 182 | data->textureFragmentProgramId, | ||
| 183 | SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, | ||
| 184 | 0, | ||
| 185 | blend_info, | ||
| 186 | textureVertexProgramGxp, | ||
| 187 | &out->texture); | ||
| 188 | |||
| 189 | if (err != 0) { | ||
| 190 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Patcher create fragment failed: %d", err); | ||
| 191 | return; | ||
| 192 | } | ||
| 193 | } | ||
| 194 | |||
| 195 | static void set_stencil_mask(VITA_GXM_RenderData *data, float x, float y, float w, float h) | ||
| 196 | { | ||
| 197 | void *vertexDefaultBuffer; | ||
| 198 | color_vertex *vertices = (color_vertex *)pool_memalign( | ||
| 199 | data, | ||
| 200 | 4 * sizeof(color_vertex), // 4 vertices | ||
| 201 | sizeof(color_vertex)); | ||
| 202 | |||
| 203 | vertices[0].x = x; | ||
| 204 | vertices[0].y = y; | ||
| 205 | vertices[0].color.r = 0; | ||
| 206 | vertices[0].color.g = 0; | ||
| 207 | vertices[0].color.b = 0; | ||
| 208 | vertices[0].color.a = 0; | ||
| 209 | |||
| 210 | vertices[1].x = x + w; | ||
| 211 | vertices[1].y = y; | ||
| 212 | vertices[1].color.r = 0; | ||
| 213 | vertices[1].color.g = 0; | ||
| 214 | vertices[1].color.b = 0; | ||
| 215 | vertices[1].color.a = 0; | ||
| 216 | |||
| 217 | vertices[2].x = x; | ||
| 218 | vertices[2].y = y + h; | ||
| 219 | vertices[2].color.r = 0; | ||
| 220 | vertices[2].color.g = 0; | ||
| 221 | vertices[2].color.b = 0; | ||
| 222 | vertices[2].color.a = 0; | ||
| 223 | |||
| 224 | vertices[3].x = x + w; | ||
| 225 | vertices[3].y = y + h; | ||
| 226 | vertices[3].color.r = 0; | ||
| 227 | vertices[3].color.g = 0; | ||
| 228 | vertices[3].color.b = 0; | ||
| 229 | vertices[3].color.a = 0; | ||
| 230 | |||
| 231 | data->drawstate.fragment_program = data->colorFragmentProgram; | ||
| 232 | data->drawstate.vertex_program = data->colorVertexProgram; | ||
| 233 | sceGxmSetVertexProgram(data->gxm_context, data->colorVertexProgram); | ||
| 234 | sceGxmSetFragmentProgram(data->gxm_context, data->colorFragmentProgram); | ||
| 235 | |||
| 236 | sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertexDefaultBuffer); | ||
| 237 | sceGxmSetUniformDataF(vertexDefaultBuffer, data->colorWvpParam, 0, 16, data->ortho_matrix); | ||
| 238 | |||
| 239 | sceGxmSetVertexStream(data->gxm_context, 0, vertices); | ||
| 240 | sceGxmDraw(data->gxm_context, SCE_GXM_PRIMITIVE_TRIANGLE_STRIP, SCE_GXM_INDEX_FORMAT_U16, data->linearIndices, 4); | ||
| 241 | } | ||
| 242 | |||
| 243 | void set_clip_rectangle(VITA_GXM_RenderData *data, int x_min, int y_min, int x_max, int y_max) | ||
| 244 | { | ||
| 245 | if (data->drawing) { | ||
| 246 | // clear the stencil buffer to 0 | ||
| 247 | sceGxmSetFrontStencilFunc( | ||
| 248 | data->gxm_context, | ||
| 249 | SCE_GXM_STENCIL_FUNC_NEVER, | ||
| 250 | SCE_GXM_STENCIL_OP_ZERO, | ||
| 251 | SCE_GXM_STENCIL_OP_ZERO, | ||
| 252 | SCE_GXM_STENCIL_OP_ZERO, | ||
| 253 | 0xFF, | ||
| 254 | 0xFF); | ||
| 255 | |||
| 256 | set_stencil_mask(data, 0, 0, VITA_GXM_SCREEN_WIDTH, VITA_GXM_SCREEN_HEIGHT); | ||
| 257 | |||
| 258 | // set the stencil to 1 in the desired region | ||
| 259 | sceGxmSetFrontStencilFunc( | ||
| 260 | data->gxm_context, | ||
| 261 | SCE_GXM_STENCIL_FUNC_NEVER, | ||
| 262 | SCE_GXM_STENCIL_OP_REPLACE, | ||
| 263 | SCE_GXM_STENCIL_OP_REPLACE, | ||
| 264 | SCE_GXM_STENCIL_OP_REPLACE, | ||
| 265 | 0xFF, | ||
| 266 | 0xFF); | ||
| 267 | |||
| 268 | set_stencil_mask(data, x_min, y_min, x_max - x_min, y_max - y_min); | ||
| 269 | |||
| 270 | // set the stencil function to only accept pixels where the stencil is 1 | ||
| 271 | sceGxmSetFrontStencilFunc( | ||
| 272 | data->gxm_context, | ||
| 273 | SCE_GXM_STENCIL_FUNC_EQUAL, | ||
| 274 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 275 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 276 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 277 | 0xFF, | ||
| 278 | 0xFF); | ||
| 279 | } | ||
| 280 | } | ||
| 281 | |||
| 282 | void unset_clip_rectangle(VITA_GXM_RenderData *data) | ||
| 283 | { | ||
| 284 | sceGxmSetFrontStencilFunc( | ||
| 285 | data->gxm_context, | ||
| 286 | SCE_GXM_STENCIL_FUNC_ALWAYS, | ||
| 287 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 288 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 289 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 290 | 0xFF, | ||
| 291 | 0xFF); | ||
| 292 | } | ||
| 293 | |||
| 294 | int gxm_init(SDL_Renderer *renderer) | ||
| 295 | { | ||
| 296 | unsigned int i, x, y; | ||
| 297 | int err; | ||
| 298 | void *vdmRingBuffer; | ||
| 299 | void *vertexRingBuffer; | ||
| 300 | void *fragmentRingBuffer; | ||
| 301 | unsigned int fragmentUsseRingBufferOffset; | ||
| 302 | void *fragmentUsseRingBuffer; | ||
| 303 | unsigned int patcherVertexUsseOffset; | ||
| 304 | unsigned int patcherFragmentUsseOffset; | ||
| 305 | void *patcherBuffer; | ||
| 306 | void *patcherVertexUsse; | ||
| 307 | void *patcherFragmentUsse; | ||
| 308 | |||
| 309 | SceGxmRenderTargetParams renderTargetParams; | ||
| 310 | SceGxmShaderPatcherParams patcherParams; | ||
| 311 | |||
| 312 | // compute the memory footprint of the depth buffer | ||
| 313 | const unsigned int alignedWidth = ALIGN(VITA_GXM_SCREEN_WIDTH, SCE_GXM_TILE_SIZEX); | ||
| 314 | const unsigned int alignedHeight = ALIGN(VITA_GXM_SCREEN_HEIGHT, SCE_GXM_TILE_SIZEY); | ||
| 315 | |||
| 316 | unsigned int sampleCount = alignedWidth * alignedHeight; | ||
| 317 | unsigned int depthStrideInSamples = alignedWidth; | ||
| 318 | |||
| 319 | // set buffer sizes for this sample | ||
| 320 | const unsigned int patcherBufferSize = 64 * 1024; | ||
| 321 | const unsigned int patcherVertexUsseSize = 64 * 1024; | ||
| 322 | const unsigned int patcherFragmentUsseSize = 64 * 1024; | ||
| 323 | |||
| 324 | // Fill SceGxmBlendInfo | ||
| 325 | static const SceGxmBlendInfo blend_info_none = { | ||
| 326 | .colorFunc = SCE_GXM_BLEND_FUNC_NONE, | ||
| 327 | .alphaFunc = SCE_GXM_BLEND_FUNC_NONE, | ||
| 328 | .colorSrc = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 329 | .colorDst = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 330 | .alphaSrc = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 331 | .alphaDst = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 332 | .colorMask = SCE_GXM_COLOR_MASK_ALL | ||
| 333 | }; | ||
| 334 | |||
| 335 | static const SceGxmBlendInfo blend_info_blend = { | ||
| 336 | .colorFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 337 | .alphaFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 338 | .colorSrc = SCE_GXM_BLEND_FACTOR_SRC_ALPHA, | ||
| 339 | .colorDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, | ||
| 340 | .alphaSrc = SCE_GXM_BLEND_FACTOR_ONE, | ||
| 341 | .alphaDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, | ||
| 342 | .colorMask = SCE_GXM_COLOR_MASK_ALL | ||
| 343 | }; | ||
| 344 | |||
| 345 | static const SceGxmBlendInfo blend_info_add = { | ||
| 346 | .colorFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 347 | .alphaFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 348 | .colorSrc = SCE_GXM_BLEND_FACTOR_SRC_ALPHA, | ||
| 349 | .colorDst = SCE_GXM_BLEND_FACTOR_ONE, | ||
| 350 | .alphaSrc = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 351 | .alphaDst = SCE_GXM_BLEND_FACTOR_ONE, | ||
| 352 | .colorMask = SCE_GXM_COLOR_MASK_ALL | ||
| 353 | }; | ||
| 354 | |||
| 355 | static const SceGxmBlendInfo blend_info_mod = { | ||
| 356 | .colorFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 357 | .alphaFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 358 | |||
| 359 | .colorSrc = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 360 | .colorDst = SCE_GXM_BLEND_FACTOR_SRC_COLOR, | ||
| 361 | |||
| 362 | .alphaSrc = SCE_GXM_BLEND_FACTOR_ZERO, | ||
| 363 | .alphaDst = SCE_GXM_BLEND_FACTOR_ONE, | ||
| 364 | .colorMask = SCE_GXM_COLOR_MASK_ALL | ||
| 365 | }; | ||
| 366 | |||
| 367 | static const SceGxmBlendInfo blend_info_mul = { | ||
| 368 | .colorFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 369 | .alphaFunc = SCE_GXM_BLEND_FUNC_ADD, | ||
| 370 | .colorSrc = SCE_GXM_BLEND_FACTOR_DST_COLOR, | ||
| 371 | .colorDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, | ||
| 372 | .alphaSrc = SCE_GXM_BLEND_FACTOR_DST_ALPHA, | ||
| 373 | .alphaDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, | ||
| 374 | .colorMask = SCE_GXM_COLOR_MASK_ALL | ||
| 375 | }; | ||
| 376 | |||
| 377 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 378 | |||
| 379 | SceGxmInitializeParams initializeParams; | ||
| 380 | SDL_memset(&initializeParams, 0, sizeof(SceGxmInitializeParams)); | ||
| 381 | initializeParams.flags = 0; | ||
| 382 | initializeParams.displayQueueMaxPendingCount = VITA_GXM_PENDING_SWAPS; | ||
| 383 | initializeParams.displayQueueCallback = display_callback; | ||
| 384 | initializeParams.displayQueueCallbackDataSize = sizeof(VITA_GXM_DisplayData); | ||
| 385 | initializeParams.parameterBufferSize = SCE_GXM_DEFAULT_PARAMETER_BUFFER_SIZE; | ||
| 386 | |||
| 387 | err = sceGxmInitialize(&initializeParams); | ||
| 388 | |||
| 389 | if (err != 0) { | ||
| 390 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "gxm init failed: %d", err); | ||
| 391 | return err; | ||
| 392 | } | ||
| 393 | |||
| 394 | // allocate ring buffer memory using default sizes | ||
| 395 | vdmRingBuffer = vita_mem_alloc( | ||
| 396 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 397 | SCE_GXM_DEFAULT_VDM_RING_BUFFER_SIZE, | ||
| 398 | 4, | ||
| 399 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 400 | &data->vdmRingBufferUid); | ||
| 401 | |||
| 402 | vertexRingBuffer = vita_mem_alloc( | ||
| 403 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 404 | SCE_GXM_DEFAULT_VERTEX_RING_BUFFER_SIZE, | ||
| 405 | 4, | ||
| 406 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 407 | &data->vertexRingBufferUid); | ||
| 408 | |||
| 409 | fragmentRingBuffer = vita_mem_alloc( | ||
| 410 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 411 | SCE_GXM_DEFAULT_FRAGMENT_RING_BUFFER_SIZE, | ||
| 412 | 4, | ||
| 413 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 414 | &data->fragmentRingBufferUid); | ||
| 415 | |||
| 416 | fragmentUsseRingBuffer = vita_mem_fragment_usse_alloc( | ||
| 417 | SCE_GXM_DEFAULT_FRAGMENT_USSE_RING_BUFFER_SIZE, | ||
| 418 | &data->fragmentUsseRingBufferUid, | ||
| 419 | &fragmentUsseRingBufferOffset); | ||
| 420 | |||
| 421 | SDL_memset(&data->contextParams, 0, sizeof(SceGxmContextParams)); | ||
| 422 | data->contextParams.hostMem = SDL_malloc(SCE_GXM_MINIMUM_CONTEXT_HOST_MEM_SIZE); | ||
| 423 | data->contextParams.hostMemSize = SCE_GXM_MINIMUM_CONTEXT_HOST_MEM_SIZE; | ||
| 424 | data->contextParams.vdmRingBufferMem = vdmRingBuffer; | ||
| 425 | data->contextParams.vdmRingBufferMemSize = SCE_GXM_DEFAULT_VDM_RING_BUFFER_SIZE; | ||
| 426 | data->contextParams.vertexRingBufferMem = vertexRingBuffer; | ||
| 427 | data->contextParams.vertexRingBufferMemSize = SCE_GXM_DEFAULT_VERTEX_RING_BUFFER_SIZE; | ||
| 428 | data->contextParams.fragmentRingBufferMem = fragmentRingBuffer; | ||
| 429 | data->contextParams.fragmentRingBufferMemSize = SCE_GXM_DEFAULT_FRAGMENT_RING_BUFFER_SIZE; | ||
| 430 | data->contextParams.fragmentUsseRingBufferMem = fragmentUsseRingBuffer; | ||
| 431 | data->contextParams.fragmentUsseRingBufferMemSize = SCE_GXM_DEFAULT_FRAGMENT_USSE_RING_BUFFER_SIZE; | ||
| 432 | data->contextParams.fragmentUsseRingBufferOffset = fragmentUsseRingBufferOffset; | ||
| 433 | |||
| 434 | err = sceGxmCreateContext(&data->contextParams, &data->gxm_context); | ||
| 435 | if (err != 0) { | ||
| 436 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create context failed: %d", err); | ||
| 437 | return err; | ||
| 438 | } | ||
| 439 | |||
| 440 | // set up parameters | ||
| 441 | SDL_memset(&renderTargetParams, 0, sizeof(SceGxmRenderTargetParams)); | ||
| 442 | renderTargetParams.flags = 0; | ||
| 443 | renderTargetParams.width = VITA_GXM_SCREEN_WIDTH; | ||
| 444 | renderTargetParams.height = VITA_GXM_SCREEN_HEIGHT; | ||
| 445 | renderTargetParams.scenesPerFrame = 1; | ||
| 446 | renderTargetParams.multisampleMode = 0; | ||
| 447 | renderTargetParams.multisampleLocations = 0; | ||
| 448 | renderTargetParams.driverMemBlock = -1; // Invalid UID | ||
| 449 | |||
| 450 | // create the render target | ||
| 451 | err = sceGxmCreateRenderTarget(&renderTargetParams, &data->renderTarget); | ||
| 452 | if (err != 0) { | ||
| 453 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "render target creation failed: %d", err); | ||
| 454 | return err; | ||
| 455 | } | ||
| 456 | |||
| 457 | // allocate memory and sync objects for display buffers | ||
| 458 | for (i = 0; i < VITA_GXM_BUFFERS; i++) { | ||
| 459 | |||
| 460 | // allocate memory for display | ||
| 461 | data->displayBufferData[i] = vita_mem_alloc( | ||
| 462 | SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, | ||
| 463 | 4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT, | ||
| 464 | SCE_GXM_COLOR_SURFACE_ALIGNMENT, | ||
| 465 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 466 | &data->displayBufferUid[i]); | ||
| 467 | |||
| 468 | // SDL_memset the buffer to black | ||
| 469 | for (y = 0; y < VITA_GXM_SCREEN_HEIGHT; y++) { | ||
| 470 | unsigned int *row = (unsigned int *)data->displayBufferData[i] + y * VITA_GXM_SCREEN_STRIDE; | ||
| 471 | for (x = 0; x < VITA_GXM_SCREEN_WIDTH; x++) { | ||
| 472 | row[x] = 0xff000000; | ||
| 473 | } | ||
| 474 | } | ||
| 475 | |||
| 476 | // initialize a color surface for this display buffer | ||
| 477 | err = sceGxmColorSurfaceInit( | ||
| 478 | &data->displaySurface[i], | ||
| 479 | VITA_GXM_COLOR_FORMAT, | ||
| 480 | SCE_GXM_COLOR_SURFACE_LINEAR, | ||
| 481 | SCE_GXM_COLOR_SURFACE_SCALE_NONE, | ||
| 482 | SCE_GXM_OUTPUT_REGISTER_SIZE_32BIT, | ||
| 483 | VITA_GXM_SCREEN_WIDTH, | ||
| 484 | VITA_GXM_SCREEN_HEIGHT, | ||
| 485 | VITA_GXM_SCREEN_STRIDE, | ||
| 486 | data->displayBufferData[i]); | ||
| 487 | |||
| 488 | if (err != 0) { | ||
| 489 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "color surface init failed: %d", err); | ||
| 490 | return err; | ||
| 491 | } | ||
| 492 | |||
| 493 | // create a sync object that we will associate with this buffer | ||
| 494 | err = sceGxmSyncObjectCreate(&data->displayBufferSync[i]); | ||
| 495 | if (err != 0) { | ||
| 496 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "sync object creation failed: %d", err); | ||
| 497 | return err; | ||
| 498 | } | ||
| 499 | } | ||
| 500 | |||
| 501 | // allocate the depth buffer | ||
| 502 | data->depthBufferData = vita_mem_alloc( | ||
| 503 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 504 | 4 * sampleCount, | ||
| 505 | SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, | ||
| 506 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 507 | &data->depthBufferUid); | ||
| 508 | |||
| 509 | // allocate the stencil buffer | ||
| 510 | data->stencilBufferData = vita_mem_alloc( | ||
| 511 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 512 | 4 * sampleCount, | ||
| 513 | SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, | ||
| 514 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 515 | &data->stencilBufferUid); | ||
| 516 | |||
| 517 | // create the SceGxmDepthStencilSurface structure | ||
| 518 | err = sceGxmDepthStencilSurfaceInit( | ||
| 519 | &data->depthSurface, | ||
| 520 | SCE_GXM_DEPTH_STENCIL_FORMAT_S8D24, | ||
| 521 | SCE_GXM_DEPTH_STENCIL_SURFACE_TILED, | ||
| 522 | depthStrideInSamples, | ||
| 523 | data->depthBufferData, | ||
| 524 | data->stencilBufferData); | ||
| 525 | |||
| 526 | // set the stencil test reference (this is currently assumed to always remain 1 after here for region clipping) | ||
| 527 | sceGxmSetFrontStencilRef(data->gxm_context, 1); | ||
| 528 | |||
| 529 | // set the stencil function (this wouldn't actually be needed, as the set clip rectangle function has to call this at the beginning of every scene) | ||
| 530 | sceGxmSetFrontStencilFunc( | ||
| 531 | data->gxm_context, | ||
| 532 | SCE_GXM_STENCIL_FUNC_ALWAYS, | ||
| 533 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 534 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 535 | SCE_GXM_STENCIL_OP_KEEP, | ||
| 536 | 0xFF, | ||
| 537 | 0xFF); | ||
| 538 | |||
| 539 | // allocate memory for buffers and USSE code | ||
| 540 | patcherBuffer = vita_mem_alloc( | ||
| 541 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 542 | patcherBufferSize, | ||
| 543 | 4, | ||
| 544 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 545 | &data->patcherBufferUid); | ||
| 546 | |||
| 547 | patcherVertexUsse = vita_mem_vertex_usse_alloc( | ||
| 548 | patcherVertexUsseSize, | ||
| 549 | &data->patcherVertexUsseUid, | ||
| 550 | &patcherVertexUsseOffset); | ||
| 551 | |||
| 552 | patcherFragmentUsse = vita_mem_fragment_usse_alloc( | ||
| 553 | patcherFragmentUsseSize, | ||
| 554 | &data->patcherFragmentUsseUid, | ||
| 555 | &patcherFragmentUsseOffset); | ||
| 556 | |||
| 557 | // create a shader patcher | ||
| 558 | SDL_memset(&patcherParams, 0, sizeof(SceGxmShaderPatcherParams)); | ||
| 559 | patcherParams.userData = NULL; | ||
| 560 | patcherParams.hostAllocCallback = &patcher_host_alloc; | ||
| 561 | patcherParams.hostFreeCallback = &patcher_host_free; | ||
| 562 | patcherParams.bufferAllocCallback = NULL; | ||
| 563 | patcherParams.bufferFreeCallback = NULL; | ||
| 564 | patcherParams.bufferMem = patcherBuffer; | ||
| 565 | patcherParams.bufferMemSize = patcherBufferSize; | ||
| 566 | patcherParams.vertexUsseAllocCallback = NULL; | ||
| 567 | patcherParams.vertexUsseFreeCallback = NULL; | ||
| 568 | patcherParams.vertexUsseMem = patcherVertexUsse; | ||
| 569 | patcherParams.vertexUsseMemSize = patcherVertexUsseSize; | ||
| 570 | patcherParams.vertexUsseOffset = patcherVertexUsseOffset; | ||
| 571 | patcherParams.fragmentUsseAllocCallback = NULL; | ||
| 572 | patcherParams.fragmentUsseFreeCallback = NULL; | ||
| 573 | patcherParams.fragmentUsseMem = patcherFragmentUsse; | ||
| 574 | patcherParams.fragmentUsseMemSize = patcherFragmentUsseSize; | ||
| 575 | patcherParams.fragmentUsseOffset = patcherFragmentUsseOffset; | ||
| 576 | |||
| 577 | err = sceGxmShaderPatcherCreate(&patcherParams, &data->shaderPatcher); | ||
| 578 | if (err != 0) { | ||
| 579 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "shader patcher creation failed: %d", err); | ||
| 580 | return err; | ||
| 581 | } | ||
| 582 | |||
| 583 | // check the shaders | ||
| 584 | err = sceGxmProgramCheck(clearVertexProgramGxp); | ||
| 585 | if (err != 0) { | ||
| 586 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (clear vertex) failed: %d", err); | ||
| 587 | return err; | ||
| 588 | } | ||
| 589 | |||
| 590 | err = sceGxmProgramCheck(clearFragmentProgramGxp); | ||
| 591 | if (err != 0) { | ||
| 592 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (clear fragment) failed: %d", err); | ||
| 593 | return err; | ||
| 594 | } | ||
| 595 | |||
| 596 | err = sceGxmProgramCheck(colorVertexProgramGxp); | ||
| 597 | if (err != 0) { | ||
| 598 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (color vertex) failed: %d", err); | ||
| 599 | return err; | ||
| 600 | } | ||
| 601 | |||
| 602 | err = sceGxmProgramCheck(colorFragmentProgramGxp); | ||
| 603 | if (err != 0) { | ||
| 604 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (color fragment) failed: %d", err); | ||
| 605 | return err; | ||
| 606 | } | ||
| 607 | |||
| 608 | err = sceGxmProgramCheck(textureVertexProgramGxp); | ||
| 609 | if (err != 0) { | ||
| 610 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (texture vertex) failed: %d", err); | ||
| 611 | return err; | ||
| 612 | } | ||
| 613 | |||
| 614 | err = sceGxmProgramCheck(textureFragmentProgramGxp); | ||
| 615 | if (err != 0) { | ||
| 616 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (texture fragment) failed: %d", err); | ||
| 617 | return err; | ||
| 618 | } | ||
| 619 | |||
| 620 | // register programs with the patcher | ||
| 621 | err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, clearVertexProgramGxp, &data->clearVertexProgramId); | ||
| 622 | if (err != 0) { | ||
| 623 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (clear vertex) failed: %d", err); | ||
| 624 | return err; | ||
| 625 | } | ||
| 626 | |||
| 627 | err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, clearFragmentProgramGxp, &data->clearFragmentProgramId); | ||
| 628 | if (err != 0) { | ||
| 629 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (clear fragment) failed: %d", err); | ||
| 630 | return err; | ||
| 631 | } | ||
| 632 | |||
| 633 | err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, colorVertexProgramGxp, &data->colorVertexProgramId); | ||
| 634 | if (err != 0) { | ||
| 635 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (color vertex) failed: %d", err); | ||
| 636 | return err; | ||
| 637 | } | ||
| 638 | |||
| 639 | err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, colorFragmentProgramGxp, &data->colorFragmentProgramId); | ||
| 640 | if (err != 0) { | ||
| 641 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (color fragment) failed: %d", err); | ||
| 642 | return err; | ||
| 643 | } | ||
| 644 | |||
| 645 | err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, textureVertexProgramGxp, &data->textureVertexProgramId); | ||
| 646 | if (err != 0) { | ||
| 647 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (texture vertex) failed: %d", err); | ||
| 648 | return err; | ||
| 649 | } | ||
| 650 | |||
| 651 | err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, textureFragmentProgramGxp, &data->textureFragmentProgramId); | ||
| 652 | if (err != 0) { | ||
| 653 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (texture fragment) failed: %d", err); | ||
| 654 | return err; | ||
| 655 | } | ||
| 656 | |||
| 657 | { | ||
| 658 | // get attributes by name to create vertex format bindings | ||
| 659 | const SceGxmProgramParameter *paramClearPositionAttribute = sceGxmProgramFindParameterByName(clearVertexProgramGxp, "aPosition"); | ||
| 660 | |||
| 661 | // create clear vertex format | ||
| 662 | SceGxmVertexAttribute clearVertexAttributes[1]; | ||
| 663 | SceGxmVertexStream clearVertexStreams[1]; | ||
| 664 | clearVertexAttributes[0].streamIndex = 0; | ||
| 665 | clearVertexAttributes[0].offset = 0; | ||
| 666 | clearVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; | ||
| 667 | clearVertexAttributes[0].componentCount = 2; | ||
| 668 | clearVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramClearPositionAttribute); | ||
| 669 | clearVertexStreams[0].stride = sizeof(clear_vertex); | ||
| 670 | clearVertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT; | ||
| 671 | |||
| 672 | // create clear programs | ||
| 673 | err = sceGxmShaderPatcherCreateVertexProgram( | ||
| 674 | data->shaderPatcher, | ||
| 675 | data->clearVertexProgramId, | ||
| 676 | clearVertexAttributes, | ||
| 677 | 1, | ||
| 678 | clearVertexStreams, | ||
| 679 | 1, | ||
| 680 | &data->clearVertexProgram); | ||
| 681 | if (err != 0) { | ||
| 682 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create program (clear vertex) failed: %d", err); | ||
| 683 | return err; | ||
| 684 | } | ||
| 685 | |||
| 686 | err = sceGxmShaderPatcherCreateFragmentProgram( | ||
| 687 | data->shaderPatcher, | ||
| 688 | data->clearFragmentProgramId, | ||
| 689 | SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, | ||
| 690 | 0, | ||
| 691 | NULL, | ||
| 692 | clearVertexProgramGxp, | ||
| 693 | &data->clearFragmentProgram); | ||
| 694 | if (err != 0) { | ||
| 695 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create program (clear fragment) failed: %d", err); | ||
| 696 | return err; | ||
| 697 | } | ||
| 698 | |||
| 699 | // create the clear triangle vertex/index data | ||
| 700 | data->clearVertices = (clear_vertex *)vita_mem_alloc( | ||
| 701 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 702 | 3 * sizeof(clear_vertex), | ||
| 703 | 4, | ||
| 704 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 705 | &data->clearVerticesUid); | ||
| 706 | } | ||
| 707 | |||
| 708 | // Allocate a 64k * 2 bytes = 128 KiB buffer and store all possible | ||
| 709 | // 16-bit indices in linear ascending order, so we can use this for | ||
| 710 | // all drawing operations where we don't want to use indexing. | ||
| 711 | data->linearIndices = (uint16_t *)vita_mem_alloc( | ||
| 712 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 713 | UINT16_MAX * sizeof(uint16_t), | ||
| 714 | sizeof(uint16_t), | ||
| 715 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 716 | &data->linearIndicesUid); | ||
| 717 | |||
| 718 | for (i = 0; i <= UINT16_MAX; ++i) { | ||
| 719 | data->linearIndices[i] = i; | ||
| 720 | } | ||
| 721 | |||
| 722 | data->clearVertices[0].x = -1.0f; | ||
| 723 | data->clearVertices[0].y = -1.0f; | ||
| 724 | data->clearVertices[1].x = 3.0f; | ||
| 725 | data->clearVertices[1].y = -1.0f; | ||
| 726 | data->clearVertices[2].x = -1.0f; | ||
| 727 | data->clearVertices[2].y = 3.0f; | ||
| 728 | |||
| 729 | { | ||
| 730 | const SceGxmProgramParameter *paramColorPositionAttribute = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "aPosition"); | ||
| 731 | |||
| 732 | const SceGxmProgramParameter *paramColorColorAttribute = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "aColor"); | ||
| 733 | |||
| 734 | // create color vertex format | ||
| 735 | SceGxmVertexAttribute colorVertexAttributes[2]; | ||
| 736 | SceGxmVertexStream colorVertexStreams[1]; | ||
| 737 | // x,y: 2 float 32 bits | ||
| 738 | colorVertexAttributes[0].streamIndex = 0; | ||
| 739 | colorVertexAttributes[0].offset = 0; | ||
| 740 | colorVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; | ||
| 741 | colorVertexAttributes[0].componentCount = 2; // (x, y) | ||
| 742 | colorVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramColorPositionAttribute); | ||
| 743 | // color: 4 floats = 4*32 bits | ||
| 744 | colorVertexAttributes[1].streamIndex = 0; | ||
| 745 | colorVertexAttributes[1].offset = 8; // (x, y) * 4 = 8 bytes | ||
| 746 | colorVertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; | ||
| 747 | colorVertexAttributes[1].componentCount = 4; // (color) | ||
| 748 | colorVertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(paramColorColorAttribute); | ||
| 749 | // 16 bit (short) indices | ||
| 750 | colorVertexStreams[0].stride = sizeof(color_vertex); | ||
| 751 | colorVertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT; | ||
| 752 | |||
| 753 | // create color shaders | ||
| 754 | err = sceGxmShaderPatcherCreateVertexProgram( | ||
| 755 | data->shaderPatcher, | ||
| 756 | data->colorVertexProgramId, | ||
| 757 | colorVertexAttributes, | ||
| 758 | 2, | ||
| 759 | colorVertexStreams, | ||
| 760 | 1, | ||
| 761 | &data->colorVertexProgram); | ||
| 762 | if (err != 0) { | ||
| 763 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create program (color vertex) failed: %d", err); | ||
| 764 | return err; | ||
| 765 | } | ||
| 766 | } | ||
| 767 | |||
| 768 | { | ||
| 769 | const SceGxmProgramParameter *paramTexturePositionAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aPosition"); | ||
| 770 | const SceGxmProgramParameter *paramTextureTexcoordAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aTexcoord"); | ||
| 771 | const SceGxmProgramParameter *paramTextureColorAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aColor"); | ||
| 772 | |||
| 773 | // create texture vertex format | ||
| 774 | SceGxmVertexAttribute textureVertexAttributes[3]; | ||
| 775 | SceGxmVertexStream textureVertexStreams[1]; | ||
| 776 | // x,y: 2 float 32 bits | ||
| 777 | textureVertexAttributes[0].streamIndex = 0; | ||
| 778 | textureVertexAttributes[0].offset = 0; | ||
| 779 | textureVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; | ||
| 780 | textureVertexAttributes[0].componentCount = 2; // (x, y) | ||
| 781 | textureVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramTexturePositionAttribute); | ||
| 782 | // u,v: 2 floats 32 bits | ||
| 783 | textureVertexAttributes[1].streamIndex = 0; | ||
| 784 | textureVertexAttributes[1].offset = 8; // (x, y) * 4 = 8 bytes | ||
| 785 | textureVertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; | ||
| 786 | textureVertexAttributes[1].componentCount = 2; // (u, v) | ||
| 787 | textureVertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(paramTextureTexcoordAttribute); | ||
| 788 | // r,g,b,a: 4 floats 4*32 bits | ||
| 789 | textureVertexAttributes[2].streamIndex = 0; | ||
| 790 | textureVertexAttributes[2].offset = 16; // (x, y, u, v) * 4 = 16 bytes | ||
| 791 | textureVertexAttributes[2].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; | ||
| 792 | textureVertexAttributes[2].componentCount = 4; // (r, g, b, a) | ||
| 793 | textureVertexAttributes[2].regIndex = sceGxmProgramParameterGetResourceIndex(paramTextureColorAttribute); | ||
| 794 | // 16 bit (short) indices | ||
| 795 | textureVertexStreams[0].stride = sizeof(texture_vertex); | ||
| 796 | textureVertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT; | ||
| 797 | |||
| 798 | // create texture shaders | ||
| 799 | err = sceGxmShaderPatcherCreateVertexProgram( | ||
| 800 | data->shaderPatcher, | ||
| 801 | data->textureVertexProgramId, | ||
| 802 | textureVertexAttributes, | ||
| 803 | 3, | ||
| 804 | textureVertexStreams, | ||
| 805 | 1, | ||
| 806 | &data->textureVertexProgram); | ||
| 807 | if (err != 0) { | ||
| 808 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create program (texture vertex) failed: %x", err); | ||
| 809 | return err; | ||
| 810 | } | ||
| 811 | } | ||
| 812 | |||
| 813 | // Create variations of the fragment program based on blending mode | ||
| 814 | make_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_none, &blend_info_none); | ||
| 815 | make_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_blend, &blend_info_blend); | ||
| 816 | make_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_add, &blend_info_add); | ||
| 817 | make_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_mod, &blend_info_mod); | ||
| 818 | make_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_mul, &blend_info_mul); | ||
| 819 | |||
| 820 | { | ||
| 821 | // Default to blend blending mode | ||
| 822 | fragment_programs *in = &data->blendFragmentPrograms.blend_mode_blend; | ||
| 823 | |||
| 824 | data->colorFragmentProgram = in->color; | ||
| 825 | data->textureFragmentProgram = in->texture; | ||
| 826 | } | ||
| 827 | |||
| 828 | // find vertex uniforms by name and cache parameter information | ||
| 829 | data->clearClearColorParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(clearFragmentProgramGxp, "uClearColor"); | ||
| 830 | data->colorWvpParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(colorVertexProgramGxp, "wvp"); | ||
| 831 | data->textureWvpParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(textureVertexProgramGxp, "wvp"); | ||
| 832 | |||
| 833 | // Allocate memory for the memory pool | ||
| 834 | data->pool_addr[0] = vita_mem_alloc( | ||
| 835 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW, | ||
| 836 | VITA_GXM_POOL_SIZE, | ||
| 837 | sizeof(void *), | ||
| 838 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 839 | &data->poolUid[0]); | ||
| 840 | |||
| 841 | data->pool_addr[1] = vita_mem_alloc( | ||
| 842 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW, | ||
| 843 | VITA_GXM_POOL_SIZE, | ||
| 844 | sizeof(void *), | ||
| 845 | SCE_GXM_MEMORY_ATTRIB_READ, | ||
| 846 | &data->poolUid[1]); | ||
| 847 | |||
| 848 | init_orthographic_matrix(data->ortho_matrix, 0.0f, VITA_GXM_SCREEN_WIDTH, VITA_GXM_SCREEN_HEIGHT, 0.0f, 0.0f, 1.0f); | ||
| 849 | |||
| 850 | data->backBufferIndex = 0; | ||
| 851 | data->frontBufferIndex = 0; | ||
| 852 | data->pool_index = 0; | ||
| 853 | data->current_pool = 0; | ||
| 854 | data->currentBlendMode = SDL_BLENDMODE_BLEND; | ||
| 855 | |||
| 856 | return 0; | ||
| 857 | } | ||
| 858 | |||
| 859 | void gxm_finish(SDL_Renderer *renderer) | ||
| 860 | { | ||
| 861 | VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; | ||
| 862 | |||
| 863 | // wait until rendering is done | ||
| 864 | sceGxmFinish(data->gxm_context); | ||
| 865 | |||
| 866 | // clean up allocations | ||
| 867 | sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, data->clearFragmentProgram); | ||
| 868 | sceGxmShaderPatcherReleaseVertexProgram(data->shaderPatcher, data->clearVertexProgram); | ||
| 869 | sceGxmShaderPatcherReleaseVertexProgram(data->shaderPatcher, data->colorVertexProgram); | ||
| 870 | sceGxmShaderPatcherReleaseVertexProgram(data->shaderPatcher, data->textureVertexProgram); | ||
| 871 | |||
| 872 | free_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_none); | ||
| 873 | free_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_blend); | ||
| 874 | free_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_add); | ||
| 875 | free_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_mod); | ||
| 876 | free_fragment_programs(data, &data->blendFragmentPrograms.blend_mode_mul); | ||
| 877 | |||
| 878 | vita_mem_free(data->linearIndicesUid); | ||
| 879 | vita_mem_free(data->clearVerticesUid); | ||
| 880 | |||
| 881 | // wait until display queue is finished before deallocating display buffers | ||
| 882 | sceGxmDisplayQueueFinish(); | ||
| 883 | |||
| 884 | // clean up display queue | ||
| 885 | vita_mem_free(data->depthBufferUid); | ||
| 886 | |||
| 887 | for (size_t i = 0; i < VITA_GXM_BUFFERS; i++) { | ||
| 888 | // clear the buffer then deallocate | ||
| 889 | SDL_memset(data->displayBufferData[i], 0, VITA_GXM_SCREEN_HEIGHT * VITA_GXM_SCREEN_STRIDE * 4); | ||
| 890 | vita_mem_free(data->displayBufferUid[i]); | ||
| 891 | |||
| 892 | // destroy the sync object | ||
| 893 | sceGxmSyncObjectDestroy(data->displayBufferSync[i]); | ||
| 894 | } | ||
| 895 | |||
| 896 | // Free the depth and stencil buffer | ||
| 897 | vita_mem_free(data->depthBufferUid); | ||
| 898 | vita_mem_free(data->stencilBufferUid); | ||
| 899 | |||
| 900 | // unregister programs and destroy shader patcher | ||
| 901 | sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->clearFragmentProgramId); | ||
| 902 | sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->clearVertexProgramId); | ||
| 903 | sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->colorFragmentProgramId); | ||
| 904 | sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->colorVertexProgramId); | ||
| 905 | sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureFragmentProgramId); | ||
| 906 | sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureVertexProgramId); | ||
| 907 | |||
| 908 | sceGxmShaderPatcherDestroy(data->shaderPatcher); | ||
| 909 | vita_mem_fragment_usse_free(data->patcherFragmentUsseUid); | ||
| 910 | vita_mem_vertex_usse_free(data->patcherVertexUsseUid); | ||
| 911 | vita_mem_free(data->patcherBufferUid); | ||
| 912 | |||
| 913 | // destroy the render target | ||
| 914 | sceGxmDestroyRenderTarget(data->renderTarget); | ||
| 915 | |||
| 916 | // destroy the gxm context | ||
| 917 | sceGxmDestroyContext(data->gxm_context); | ||
| 918 | vita_mem_fragment_usse_free(data->fragmentUsseRingBufferUid); | ||
| 919 | vita_mem_free(data->fragmentRingBufferUid); | ||
| 920 | vita_mem_free(data->vertexRingBufferUid); | ||
| 921 | vita_mem_free(data->vdmRingBufferUid); | ||
| 922 | SDL_free(data->contextParams.hostMem); | ||
| 923 | |||
| 924 | vita_mem_free(data->poolUid[0]); | ||
| 925 | vita_mem_free(data->poolUid[1]); | ||
| 926 | vita_gpu_mem_destroy(data); | ||
| 927 | |||
| 928 | // terminate libgxm | ||
| 929 | sceGxmTerminate(); | ||
| 930 | } | ||
| 931 | |||
| 932 | // textures | ||
| 933 | |||
| 934 | void free_gxm_texture(VITA_GXM_RenderData *data, gxm_texture *texture) | ||
| 935 | { | ||
| 936 | if (texture) { | ||
| 937 | if (texture->gxm_rendertarget) { | ||
| 938 | sceGxmDestroyRenderTarget(texture->gxm_rendertarget); | ||
| 939 | } | ||
| 940 | if (texture->depth_UID) { | ||
| 941 | vita_mem_free(texture->depth_UID); | ||
| 942 | } | ||
| 943 | if (texture->cdram) { | ||
| 944 | vita_gpu_mem_free(data, sceGxmTextureGetData(&texture->gxm_tex)); | ||
| 945 | } else { | ||
| 946 | vita_mem_free(texture->data_UID); | ||
| 947 | } | ||
| 948 | SDL_free(texture); | ||
| 949 | } | ||
| 950 | } | ||
| 951 | |||
| 952 | SceGxmTextureFormat | ||
| 953 | gxm_texture_get_format(const gxm_texture *texture) | ||
| 954 | { | ||
| 955 | return sceGxmTextureGetFormat(&texture->gxm_tex); | ||
| 956 | } | ||
| 957 | |||
| 958 | void *gxm_texture_get_datap(const gxm_texture *texture) | ||
| 959 | { | ||
| 960 | return sceGxmTextureGetData(&texture->gxm_tex); | ||
| 961 | } | ||
| 962 | |||
| 963 | static SceGxmColorFormat tex_format_to_color_format(SceGxmTextureFormat format) | ||
| 964 | { | ||
| 965 | switch (format) { | ||
| 966 | case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ARGB: | ||
| 967 | return SCE_GXM_COLOR_FORMAT_U8U8U8U8_ARGB; | ||
| 968 | case SCE_GXM_TEXTURE_FORMAT_U8U8U8_RGB: | ||
| 969 | return SCE_GXM_COLOR_FORMAT_U8U8U8_RGB; | ||
| 970 | case SCE_GXM_TEXTURE_FORMAT_U8U8U8_BGR: | ||
| 971 | return SCE_GXM_COLOR_FORMAT_U8U8U8_BGR; | ||
| 972 | case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR: | ||
| 973 | return SCE_GXM_COLOR_FORMAT_U8U8U8U8_ABGR; | ||
| 974 | case SCE_GXM_TEXTURE_FORMAT_U5U6U5_RGB: | ||
| 975 | return SCE_GXM_COLOR_FORMAT_U5U6U5_RGB; | ||
| 976 | case SCE_GXM_TEXTURE_FORMAT_U5U6U5_BGR: | ||
| 977 | return SCE_GXM_COLOR_FORMAT_U5U6U5_BGR; | ||
| 978 | default: | ||
| 979 | return SCE_GXM_COLOR_FORMAT_U8U8U8U8_ABGR; | ||
| 980 | } | ||
| 981 | } | ||
| 982 | |||
| 983 | gxm_texture *create_gxm_texture(VITA_GXM_RenderData *data, unsigned int w, unsigned int h, SceGxmTextureFormat format, unsigned int isRenderTarget, unsigned int *return_w, unsigned int *return_h, unsigned int *return_pitch, float *return_wscale) | ||
| 984 | { | ||
| 985 | gxm_texture *texture = SDL_calloc(1, sizeof(gxm_texture)); | ||
| 986 | int aligned_w = ALIGN(w, 8); | ||
| 987 | int texture_w = w; | ||
| 988 | int tex_size = aligned_w * h * tex_format_to_bytespp(format); | ||
| 989 | void *texture_data; | ||
| 990 | int ret; | ||
| 991 | |||
| 992 | *return_wscale = 1.0f; | ||
| 993 | |||
| 994 | // SCE_GXM_TEXTURE_BASE_FORMAT_YUV420P3/P2 based formats require width aligned to 16 | ||
| 995 | if ((format & 0x9f000000U) == SCE_GXM_TEXTURE_BASE_FORMAT_YUV420P3 || (format & 0x9f000000U) == SCE_GXM_TEXTURE_BASE_FORMAT_YUV420P2) { | ||
| 996 | aligned_w = ALIGN(w, 16); | ||
| 997 | texture_w = aligned_w; | ||
| 998 | tex_size = aligned_w * h * tex_format_to_bytespp(format); | ||
| 999 | *return_wscale = (float)(w) / texture_w; | ||
| 1000 | // add storage for UV planes | ||
| 1001 | tex_size += (((aligned_w + 1) / 2) * ((h + 1) / 2)) * 2; | ||
| 1002 | } | ||
| 1003 | |||
| 1004 | if (!texture) { | ||
| 1005 | return NULL; | ||
| 1006 | } | ||
| 1007 | |||
| 1008 | *return_w = w; | ||
| 1009 | *return_h = h; | ||
| 1010 | *return_pitch = aligned_w * tex_format_to_bytespp(format); | ||
| 1011 | |||
| 1012 | // Allocate a GPU buffer for the texture | ||
| 1013 | texture_data = vita_gpu_mem_alloc( | ||
| 1014 | data, | ||
| 1015 | tex_size); | ||
| 1016 | |||
| 1017 | // Try SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE in case we're out of VRAM | ||
| 1018 | if (!texture_data) { | ||
| 1019 | SDL_LogWarn(SDL_LOG_CATEGORY_RENDER, "CDRAM texture allocation failed"); | ||
| 1020 | texture_data = vita_mem_alloc( | ||
| 1021 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 1022 | tex_size, | ||
| 1023 | SCE_GXM_TEXTURE_ALIGNMENT, | ||
| 1024 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 1025 | &texture->data_UID); | ||
| 1026 | texture->cdram = 0; | ||
| 1027 | } else { | ||
| 1028 | texture->cdram = 1; | ||
| 1029 | } | ||
| 1030 | |||
| 1031 | if (!texture_data) { | ||
| 1032 | SDL_free(texture); | ||
| 1033 | return NULL; | ||
| 1034 | } | ||
| 1035 | |||
| 1036 | // Clear the texture | ||
| 1037 | SDL_memset(texture_data, 0, tex_size); | ||
| 1038 | |||
| 1039 | // Create the gxm texture | ||
| 1040 | ret = sceGxmTextureInitLinear(&texture->gxm_tex, texture_data, format, texture_w, h, 0); | ||
| 1041 | if (ret < 0) { | ||
| 1042 | free_gxm_texture(data, texture); | ||
| 1043 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "texture init failed: %x", ret); | ||
| 1044 | return NULL; | ||
| 1045 | } | ||
| 1046 | |||
| 1047 | if (isRenderTarget) { | ||
| 1048 | void *depthBufferData; | ||
| 1049 | const uint32_t alignedWidth = ALIGN(w, SCE_GXM_TILE_SIZEX); | ||
| 1050 | const uint32_t alignedHeight = ALIGN(h, SCE_GXM_TILE_SIZEY); | ||
| 1051 | uint32_t sampleCount = alignedWidth * alignedHeight; | ||
| 1052 | uint32_t depthStrideInSamples = alignedWidth; | ||
| 1053 | const uint32_t alignedColorSurfaceStride = ALIGN(w, 8); | ||
| 1054 | |||
| 1055 | int err = sceGxmColorSurfaceInit( | ||
| 1056 | &texture->gxm_colorsurface, | ||
| 1057 | tex_format_to_color_format(format), | ||
| 1058 | SCE_GXM_COLOR_SURFACE_LINEAR, | ||
| 1059 | SCE_GXM_COLOR_SURFACE_SCALE_NONE, | ||
| 1060 | SCE_GXM_OUTPUT_REGISTER_SIZE_32BIT, | ||
| 1061 | w, | ||
| 1062 | h, | ||
| 1063 | alignedColorSurfaceStride, | ||
| 1064 | texture_data); | ||
| 1065 | |||
| 1066 | if (err < 0) { | ||
| 1067 | free_gxm_texture(data, texture); | ||
| 1068 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "color surface init failed: %x", err); | ||
| 1069 | return NULL; | ||
| 1070 | } | ||
| 1071 | |||
| 1072 | // allocate it | ||
| 1073 | depthBufferData = vita_mem_alloc( | ||
| 1074 | SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, | ||
| 1075 | 4 * sampleCount, | ||
| 1076 | SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, | ||
| 1077 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 1078 | &texture->depth_UID); | ||
| 1079 | |||
| 1080 | // create the SceGxmDepthStencilSurface structure | ||
| 1081 | err = sceGxmDepthStencilSurfaceInit( | ||
| 1082 | &texture->gxm_depthstencil, | ||
| 1083 | SCE_GXM_DEPTH_STENCIL_FORMAT_S8D24, | ||
| 1084 | SCE_GXM_DEPTH_STENCIL_SURFACE_TILED, | ||
| 1085 | depthStrideInSamples, | ||
| 1086 | depthBufferData, | ||
| 1087 | NULL); | ||
| 1088 | |||
| 1089 | if (err < 0) { | ||
| 1090 | free_gxm_texture(data, texture); | ||
| 1091 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "depth stencil init failed: %x", err); | ||
| 1092 | return NULL; | ||
| 1093 | } | ||
| 1094 | |||
| 1095 | { | ||
| 1096 | SceGxmRenderTarget *tgt = NULL; | ||
| 1097 | |||
| 1098 | // set up parameters | ||
| 1099 | SceGxmRenderTargetParams renderTargetParams; | ||
| 1100 | SDL_memset(&renderTargetParams, 0, sizeof(SceGxmRenderTargetParams)); | ||
| 1101 | renderTargetParams.flags = 0; | ||
| 1102 | renderTargetParams.width = w; | ||
| 1103 | renderTargetParams.height = h; | ||
| 1104 | renderTargetParams.scenesPerFrame = 1; | ||
| 1105 | renderTargetParams.multisampleMode = SCE_GXM_MULTISAMPLE_NONE; | ||
| 1106 | renderTargetParams.multisampleLocations = 0; | ||
| 1107 | renderTargetParams.driverMemBlock = -1; | ||
| 1108 | |||
| 1109 | // create the render target | ||
| 1110 | err = sceGxmCreateRenderTarget(&renderTargetParams, &tgt); | ||
| 1111 | |||
| 1112 | texture->gxm_rendertarget = tgt; | ||
| 1113 | |||
| 1114 | if (err < 0) { | ||
| 1115 | free_gxm_texture(data, texture); | ||
| 1116 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create render target failed: %x", err); | ||
| 1117 | return NULL; | ||
| 1118 | } | ||
| 1119 | } | ||
| 1120 | } | ||
| 1121 | |||
| 1122 | return texture; | ||
| 1123 | } | ||
| 1124 | |||
| 1125 | void gxm_texture_set_filters(gxm_texture *texture, SceGxmTextureFilter min_filter, SceGxmTextureFilter mag_filter) | ||
| 1126 | { | ||
| 1127 | sceGxmTextureSetMinFilter(&texture->gxm_tex, min_filter); | ||
| 1128 | sceGxmTextureSetMagFilter(&texture->gxm_tex, mag_filter); | ||
| 1129 | } | ||
| 1130 | |||
| 1131 | static unsigned int back_buffer_index_for_common_dialog = 0; | ||
| 1132 | static unsigned int front_buffer_index_for_common_dialog = 0; | ||
| 1133 | struct | ||
| 1134 | { | ||
| 1135 | VITA_GXM_DisplayData displayData; | ||
| 1136 | SceGxmSyncObject *sync; | ||
| 1137 | SceGxmColorSurface surf; | ||
| 1138 | SceUID uid; | ||
| 1139 | } buffer_for_common_dialog[VITA_GXM_BUFFERS]; | ||
| 1140 | |||
| 1141 | void gxm_minimal_init_for_common_dialog(void) | ||
| 1142 | { | ||
| 1143 | SceGxmInitializeParams initializeParams; | ||
| 1144 | SDL_zero(initializeParams); | ||
| 1145 | initializeParams.flags = 0; | ||
| 1146 | initializeParams.displayQueueMaxPendingCount = VITA_GXM_PENDING_SWAPS; | ||
| 1147 | initializeParams.displayQueueCallback = display_callback; | ||
| 1148 | initializeParams.displayQueueCallbackDataSize = sizeof(VITA_GXM_DisplayData); | ||
| 1149 | initializeParams.parameterBufferSize = SCE_GXM_DEFAULT_PARAMETER_BUFFER_SIZE; | ||
| 1150 | sceGxmInitialize(&initializeParams); | ||
| 1151 | } | ||
| 1152 | |||
| 1153 | void gxm_minimal_term_for_common_dialog(void) | ||
| 1154 | { | ||
| 1155 | sceGxmTerminate(); | ||
| 1156 | } | ||
| 1157 | |||
| 1158 | void gxm_init_for_common_dialog(void) | ||
| 1159 | { | ||
| 1160 | for (int i = 0; i < VITA_GXM_BUFFERS; i += 1) { | ||
| 1161 | buffer_for_common_dialog[i].displayData.wait_vblank = true; | ||
| 1162 | buffer_for_common_dialog[i].displayData.address = vita_mem_alloc( | ||
| 1163 | SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW, | ||
| 1164 | 4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT, | ||
| 1165 | SCE_GXM_COLOR_SURFACE_ALIGNMENT, | ||
| 1166 | SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, | ||
| 1167 | &buffer_for_common_dialog[i].uid); | ||
| 1168 | sceGxmColorSurfaceInit( | ||
| 1169 | &buffer_for_common_dialog[i].surf, | ||
| 1170 | VITA_GXM_PIXEL_FORMAT, | ||
| 1171 | SCE_GXM_COLOR_SURFACE_LINEAR, | ||
| 1172 | SCE_GXM_COLOR_SURFACE_SCALE_NONE, | ||
| 1173 | SCE_GXM_OUTPUT_REGISTER_SIZE_32BIT, | ||
| 1174 | VITA_GXM_SCREEN_WIDTH, | ||
| 1175 | VITA_GXM_SCREEN_HEIGHT, | ||
| 1176 | VITA_GXM_SCREEN_STRIDE, | ||
| 1177 | buffer_for_common_dialog[i].displayData.address); | ||
| 1178 | sceGxmSyncObjectCreate(&buffer_for_common_dialog[i].sync); | ||
| 1179 | } | ||
| 1180 | sceGxmDisplayQueueFinish(); | ||
| 1181 | } | ||
| 1182 | |||
| 1183 | void gxm_swap_for_common_dialog(void) | ||
| 1184 | { | ||
| 1185 | SceCommonDialogUpdateParam updateParam; | ||
| 1186 | SDL_zero(updateParam); | ||
| 1187 | updateParam.renderTarget.colorFormat = VITA_GXM_PIXEL_FORMAT; | ||
| 1188 | updateParam.renderTarget.surfaceType = SCE_GXM_COLOR_SURFACE_LINEAR; | ||
| 1189 | updateParam.renderTarget.width = VITA_GXM_SCREEN_WIDTH; | ||
| 1190 | updateParam.renderTarget.height = VITA_GXM_SCREEN_HEIGHT; | ||
| 1191 | updateParam.renderTarget.strideInPixels = VITA_GXM_SCREEN_STRIDE; | ||
| 1192 | |||
| 1193 | updateParam.renderTarget.colorSurfaceData = buffer_for_common_dialog[back_buffer_index_for_common_dialog].displayData.address; | ||
| 1194 | |||
| 1195 | updateParam.displaySyncObject = buffer_for_common_dialog[back_buffer_index_for_common_dialog].sync; | ||
| 1196 | SDL_memset(buffer_for_common_dialog[back_buffer_index_for_common_dialog].displayData.address, 0, 4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT); | ||
| 1197 | sceCommonDialogUpdate(&updateParam); | ||
| 1198 | |||
| 1199 | sceGxmDisplayQueueAddEntry(buffer_for_common_dialog[front_buffer_index_for_common_dialog].sync, buffer_for_common_dialog[back_buffer_index_for_common_dialog].sync, &buffer_for_common_dialog[back_buffer_index_for_common_dialog].displayData); | ||
| 1200 | front_buffer_index_for_common_dialog = back_buffer_index_for_common_dialog; | ||
| 1201 | back_buffer_index_for_common_dialog = (back_buffer_index_for_common_dialog + 1) % VITA_GXM_BUFFERS; | ||
| 1202 | } | ||
| 1203 | |||
| 1204 | void gxm_term_for_common_dialog(void) | ||
| 1205 | { | ||
| 1206 | sceGxmDisplayQueueFinish(); | ||
| 1207 | for (int i = 0; i < VITA_GXM_BUFFERS; i += 1) { | ||
| 1208 | vita_mem_free(buffer_for_common_dialog[i].uid); | ||
| 1209 | sceGxmSyncObjectDestroy(buffer_for_common_dialog[i].sync); | ||
| 1210 | } | ||
| 1211 | } | ||
| 1212 | |||
| 1213 | #endif // SDL_VIDEO_RENDER_VITA_GXM | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_tools.h b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_tools.h new file mode 100644 index 0000000..023f859 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_tools.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_RENDER_VITA_GXM_TOOLS_H | ||
| 23 | #define SDL_RENDER_VITA_GXM_TOOLS_H | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | #include "../SDL_sysrender.h" | ||
| 28 | |||
| 29 | #include <psp2/kernel/processmgr.h> | ||
| 30 | #include <psp2/appmgr.h> | ||
| 31 | #include <psp2/display.h> | ||
| 32 | #include <psp2/gxm.h> | ||
| 33 | #include <psp2/types.h> | ||
| 34 | #include <psp2/kernel/sysmem.h> | ||
| 35 | |||
| 36 | #include "SDL_render_vita_gxm_types.h" | ||
| 37 | |||
| 38 | void init_orthographic_matrix(float *m, float left, float right, float bottom, float top, float near, float far); | ||
| 39 | |||
| 40 | void *pool_malloc(VITA_GXM_RenderData *data, unsigned int size); | ||
| 41 | void *pool_memalign(VITA_GXM_RenderData *data, unsigned int size, unsigned int alignment); | ||
| 42 | |||
| 43 | void set_clip_rectangle(VITA_GXM_RenderData *data, int x_min, int y_min, int x_max, int y_max); | ||
| 44 | void unset_clip_rectangle(VITA_GXM_RenderData *data); | ||
| 45 | |||
| 46 | int gxm_init(SDL_Renderer *renderer); | ||
| 47 | void gxm_finish(SDL_Renderer *renderer); | ||
| 48 | |||
| 49 | gxm_texture *create_gxm_texture(VITA_GXM_RenderData *data, unsigned int w, unsigned int h, SceGxmTextureFormat format, unsigned int isRenderTarget, unsigned int *return_w, unsigned int *return_h, unsigned int *return_pitch, float *return_wscale); | ||
| 50 | void free_gxm_texture(VITA_GXM_RenderData *data, gxm_texture *texture); | ||
| 51 | |||
| 52 | void gxm_texture_set_filters(gxm_texture *texture, SceGxmTextureFilter min_filter, SceGxmTextureFilter mag_filter); | ||
| 53 | SceGxmTextureFormat gxm_texture_get_format(const gxm_texture *texture); | ||
| 54 | |||
| 55 | void *gxm_texture_get_datap(const gxm_texture *texture); | ||
| 56 | |||
| 57 | void gxm_minimal_init_for_common_dialog(void); | ||
| 58 | void gxm_minimal_term_for_common_dialog(void); | ||
| 59 | void gxm_init_for_common_dialog(void); | ||
| 60 | void gxm_swap_for_common_dialog(void); | ||
| 61 | void gxm_term_for_common_dialog(void); | ||
| 62 | |||
| 63 | #endif // SDL_RENDER_VITA_GXM_TOOLS_H | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_types.h b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_types.h new file mode 100644 index 0000000..19962c7 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/SDL_render_vita_gxm_types.h | |||
| @@ -0,0 +1,210 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef SDL_RENDER_VITA_GXM_TYPES_H | ||
| 23 | #define SDL_RENDER_VITA_GXM_TYPES_H | ||
| 24 | |||
| 25 | #include "SDL_internal.h" | ||
| 26 | |||
| 27 | #include "../SDL_sysrender.h" | ||
| 28 | |||
| 29 | #include <psp2/kernel/processmgr.h> | ||
| 30 | #include <psp2/appmgr.h> | ||
| 31 | #include <psp2/display.h> | ||
| 32 | #include <psp2/gxm.h> | ||
| 33 | #include <psp2/types.h> | ||
| 34 | #include <psp2/kernel/sysmem.h> | ||
| 35 | #include <psp2/kernel/clib.h> | ||
| 36 | |||
| 37 | #include <string.h> | ||
| 38 | |||
| 39 | #define VITA_GXM_SCREEN_WIDTH 960 | ||
| 40 | #define VITA_GXM_SCREEN_HEIGHT 544 | ||
| 41 | #define VITA_GXM_SCREEN_STRIDE 960 | ||
| 42 | |||
| 43 | #define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8 | ||
| 44 | #define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8 | ||
| 45 | |||
| 46 | #define VITA_GXM_BUFFERS 3 | ||
| 47 | #define VITA_GXM_PENDING_SWAPS 2 | ||
| 48 | #define VITA_GXM_POOL_SIZE 2 * 1024 * 1024 | ||
| 49 | |||
| 50 | typedef struct | ||
| 51 | { | ||
| 52 | void *address; | ||
| 53 | Uint8 wait_vblank; | ||
| 54 | } VITA_GXM_DisplayData; | ||
| 55 | |||
| 56 | typedef struct clear_vertex | ||
| 57 | { | ||
| 58 | float x; | ||
| 59 | float y; | ||
| 60 | } clear_vertex; | ||
| 61 | |||
| 62 | typedef struct color_vertex | ||
| 63 | { | ||
| 64 | float x; | ||
| 65 | float y; | ||
| 66 | SDL_FColor color; | ||
| 67 | } color_vertex; | ||
| 68 | |||
| 69 | typedef struct texture_vertex | ||
| 70 | { | ||
| 71 | float x; | ||
| 72 | float y; | ||
| 73 | float u; | ||
| 74 | float v; | ||
| 75 | SDL_FColor color; | ||
| 76 | } texture_vertex; | ||
| 77 | |||
| 78 | typedef struct gxm_texture | ||
| 79 | { | ||
| 80 | SceGxmTexture gxm_tex; | ||
| 81 | SceUID data_UID; | ||
| 82 | SceGxmRenderTarget *gxm_rendertarget; | ||
| 83 | SceGxmColorSurface gxm_colorsurface; | ||
| 84 | SceGxmDepthStencilSurface gxm_depthstencil; | ||
| 85 | SceUID depth_UID; | ||
| 86 | bool cdram; | ||
| 87 | } gxm_texture; | ||
| 88 | |||
| 89 | typedef struct fragment_programs | ||
| 90 | { | ||
| 91 | SceGxmFragmentProgram *color; | ||
| 92 | SceGxmFragmentProgram *texture; | ||
| 93 | } fragment_programs; | ||
| 94 | |||
| 95 | typedef struct blend_fragment_programs | ||
| 96 | { | ||
| 97 | fragment_programs blend_mode_none; | ||
| 98 | fragment_programs blend_mode_blend; | ||
| 99 | fragment_programs blend_mode_add; | ||
| 100 | fragment_programs blend_mode_mod; | ||
| 101 | fragment_programs blend_mode_mul; | ||
| 102 | } blend_fragment_programs; | ||
| 103 | |||
| 104 | typedef struct | ||
| 105 | { | ||
| 106 | SDL_Rect viewport; | ||
| 107 | bool viewport_dirty; | ||
| 108 | SDL_Texture *texture; | ||
| 109 | SDL_Texture *target; | ||
| 110 | SDL_FColor color; | ||
| 111 | SceGxmFragmentProgram *fragment_program; | ||
| 112 | SceGxmVertexProgram *vertex_program; | ||
| 113 | int last_command; | ||
| 114 | |||
| 115 | bool cliprect_enabled_dirty; | ||
| 116 | bool cliprect_enabled; | ||
| 117 | bool cliprect_dirty; | ||
| 118 | SDL_Rect cliprect; | ||
| 119 | bool texturing; | ||
| 120 | int drawablew; | ||
| 121 | int drawableh; | ||
| 122 | } gxm_drawstate_cache; | ||
| 123 | |||
| 124 | typedef struct | ||
| 125 | { | ||
| 126 | bool initialized; | ||
| 127 | bool drawing; | ||
| 128 | |||
| 129 | unsigned int psm; | ||
| 130 | unsigned int bpp; | ||
| 131 | |||
| 132 | int currentBlendMode; | ||
| 133 | |||
| 134 | VITA_GXM_DisplayData displayData; | ||
| 135 | |||
| 136 | SceUID vdmRingBufferUid; | ||
| 137 | SceUID vertexRingBufferUid; | ||
| 138 | SceUID fragmentRingBufferUid; | ||
| 139 | SceUID fragmentUsseRingBufferUid; | ||
| 140 | SceGxmContextParams contextParams; | ||
| 141 | SceGxmContext *gxm_context; | ||
| 142 | SceGxmRenderTarget *renderTarget; | ||
| 143 | SceUID displayBufferUid[VITA_GXM_BUFFERS]; | ||
| 144 | void *displayBufferData[VITA_GXM_BUFFERS]; | ||
| 145 | SceGxmColorSurface displaySurface[VITA_GXM_BUFFERS]; | ||
| 146 | SceGxmSyncObject *displayBufferSync[VITA_GXM_BUFFERS]; | ||
| 147 | |||
| 148 | SceUID depthBufferUid; | ||
| 149 | SceUID stencilBufferUid; | ||
| 150 | SceGxmDepthStencilSurface depthSurface; | ||
| 151 | void *depthBufferData; | ||
| 152 | void *stencilBufferData; | ||
| 153 | |||
| 154 | unsigned int backBufferIndex; | ||
| 155 | unsigned int frontBufferIndex; | ||
| 156 | |||
| 157 | void *pool_addr[2]; | ||
| 158 | SceUID poolUid[2]; | ||
| 159 | unsigned int pool_index; | ||
| 160 | unsigned int current_pool; | ||
| 161 | |||
| 162 | float ortho_matrix[4 * 4]; | ||
| 163 | |||
| 164 | SceGxmVertexProgram *colorVertexProgram; | ||
| 165 | SceGxmFragmentProgram *colorFragmentProgram; | ||
| 166 | SceGxmVertexProgram *textureVertexProgram; | ||
| 167 | SceGxmFragmentProgram *textureFragmentProgram; | ||
| 168 | SceGxmProgramParameter *clearClearColorParam; | ||
| 169 | SceGxmProgramParameter *colorWvpParam; | ||
| 170 | SceGxmProgramParameter *textureWvpParam; | ||
| 171 | |||
| 172 | SceGxmShaderPatcher *shaderPatcher; | ||
| 173 | SceGxmVertexProgram *clearVertexProgram; | ||
| 174 | SceGxmFragmentProgram *clearFragmentProgram; | ||
| 175 | |||
| 176 | SceGxmShaderPatcherId clearVertexProgramId; | ||
| 177 | SceGxmShaderPatcherId clearFragmentProgramId; | ||
| 178 | SceGxmShaderPatcherId colorVertexProgramId; | ||
| 179 | SceGxmShaderPatcherId colorFragmentProgramId; | ||
| 180 | SceGxmShaderPatcherId textureVertexProgramId; | ||
| 181 | SceGxmShaderPatcherId textureFragmentProgramId; | ||
| 182 | |||
| 183 | SceUID patcherBufferUid; | ||
| 184 | SceUID patcherVertexUsseUid; | ||
| 185 | SceUID patcherFragmentUsseUid; | ||
| 186 | |||
| 187 | SceUID clearVerticesUid; | ||
| 188 | SceUID linearIndicesUid; | ||
| 189 | clear_vertex *clearVertices; | ||
| 190 | uint16_t *linearIndices; | ||
| 191 | |||
| 192 | blend_fragment_programs blendFragmentPrograms; | ||
| 193 | |||
| 194 | gxm_drawstate_cache drawstate; | ||
| 195 | SceClibMspace texturePool; | ||
| 196 | SceUID texturePoolUID; | ||
| 197 | } VITA_GXM_RenderData; | ||
| 198 | |||
| 199 | typedef struct | ||
| 200 | { | ||
| 201 | gxm_texture *tex; | ||
| 202 | unsigned int pitch; | ||
| 203 | unsigned int w; | ||
| 204 | unsigned int h; | ||
| 205 | float wscale; | ||
| 206 | bool yuv; | ||
| 207 | bool nv12; | ||
| 208 | } VITA_GXM_TextureData; | ||
| 209 | |||
| 210 | #endif // SDL_RENDER_VITA_GXM_TYPES_H | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/shader_src/clear_f.cg b/SDL-3.2.8/src/render/vitagxm/shader_src/clear_f.cg new file mode 100644 index 0000000..6d8fb3b --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/shader_src/clear_f.cg | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | float4 main( uniform float4 uClearColor) : COLOR | ||
| 2 | { | ||
| 3 | return uClearColor; | ||
| 4 | } | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/shader_src/clear_v.cg b/SDL-3.2.8/src/render/vitagxm/shader_src/clear_v.cg new file mode 100644 index 0000000..ee5aa9f --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/shader_src/clear_v.cg | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | float4 main(float2 aPosition) : POSITION | ||
| 2 | { | ||
| 3 | return float4(aPosition, 1.f, 1.f); | ||
| 4 | } | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/shader_src/color_f.cg b/SDL-3.2.8/src/render/vitagxm/shader_src/color_f.cg new file mode 100644 index 0000000..dc87c2a --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/shader_src/color_f.cg | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | float4 main(float4 vColor : COLOR) | ||
| 2 | { | ||
| 3 | return vColor; | ||
| 4 | } | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/shader_src/color_v.cg b/SDL-3.2.8/src/render/vitagxm/shader_src/color_v.cg new file mode 100644 index 0000000..4966099 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/shader_src/color_v.cg | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | void main( | ||
| 2 | float2 aPosition, | ||
| 3 | float4 aColor, | ||
| 4 | uniform float4x4 wvp, | ||
| 5 | out float4 vPosition : POSITION, | ||
| 6 | out float4 vColor : COLOR, | ||
| 7 | out float pSize : PSIZE | ||
| 8 | ) | ||
| 9 | { | ||
| 10 | vPosition = mul(float4(aPosition, 1.f, 0.5f), wvp); | ||
| 11 | vColor = aColor; | ||
| 12 | pSize = 1.f; | ||
| 13 | } | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/shader_src/texture_f.cg b/SDL-3.2.8/src/render/vitagxm/shader_src/texture_f.cg new file mode 100644 index 0000000..a1f63b8 --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/shader_src/texture_f.cg | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | float4 main(float2 vTexcoord : TEXCOORD0, float4 vColor : COLOR, uniform sampler2D tex) | ||
| 2 | { | ||
| 3 | return tex2D(tex, vTexcoord) * vColor; | ||
| 4 | } | ||
diff --git a/SDL-3.2.8/src/render/vitagxm/shader_src/texture_v.cg b/SDL-3.2.8/src/render/vitagxm/shader_src/texture_v.cg new file mode 100644 index 0000000..9e05e9a --- /dev/null +++ b/SDL-3.2.8/src/render/vitagxm/shader_src/texture_v.cg | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | void main( | ||
| 2 | float2 aPosition, | ||
| 3 | float2 aTexcoord, | ||
| 4 | float4 aColor, | ||
| 5 | uniform float4x4 wvp, | ||
| 6 | out float4 vPosition : POSITION, | ||
| 7 | out float4 vColor : COLOR, | ||
| 8 | out float2 vTexcoord : TEXCOORD0 | ||
| 9 | ) | ||
| 10 | { | ||
| 11 | vPosition = mul(float4(aPosition, 1.f, 0.5f), wvp); | ||
| 12 | vTexcoord = aTexcoord; | ||
| 13 | vColor = aColor; | ||
| 14 | } | ||
diff --git a/SDL-3.2.8/src/render/vulkan/SDL_render_vulkan.c b/SDL-3.2.8/src/render/vulkan/SDL_render_vulkan.c new file mode 100644 index 0000000..d2157c3 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/SDL_render_vulkan.c | |||
| @@ -0,0 +1,4349 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_VULKAN | ||
| 24 | |||
| 25 | #define SDL_VULKAN_FRAME_QUEUE_DEPTH 2 | ||
| 26 | #define SDL_VULKAN_NUM_VERTEX_BUFFERS 256 | ||
| 27 | #define SDL_VULKAN_VERTEX_BUFFER_DEFAULT_SIZE 65536 | ||
| 28 | #define SDL_VULKAN_CONSTANT_BUFFER_DEFAULT_SIZE 65536 | ||
| 29 | #define SDL_VULKAN_NUM_UPLOAD_BUFFERS 32 | ||
| 30 | #define SDL_VULKAN_MAX_DESCRIPTOR_SETS 4096 | ||
| 31 | |||
| 32 | #define SDL_VULKAN_VALIDATION_LAYER_NAME "VK_LAYER_KHRONOS_validation" | ||
| 33 | |||
| 34 | #define VK_NO_PROTOTYPES | ||
| 35 | #include "../../video/SDL_vulkan_internal.h" | ||
| 36 | #include "../../video/SDL_sysvideo.h" | ||
| 37 | #include "../SDL_sysrender.h" | ||
| 38 | #include "../SDL_d3dmath.h" | ||
| 39 | #include "../../video/SDL_pixels_c.h" | ||
| 40 | #include "SDL_shaders_vulkan.h" | ||
| 41 | |||
| 42 | #define SET_ERROR_CODE(message, rc) \ | ||
| 43 | if (SDL_GetHintBoolean(SDL_HINT_RENDER_VULKAN_DEBUG, false)) { \ | ||
| 44 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s: %s", message, SDL_Vulkan_GetResultString(rc)); \ | ||
| 45 | SDL_TriggerBreakpoint(); \ | ||
| 46 | } \ | ||
| 47 | SDL_SetError("%s: %s", message, SDL_Vulkan_GetResultString(rc)) \ | ||
| 48 | |||
| 49 | #define SET_ERROR_MESSAGE(message) \ | ||
| 50 | if (SDL_GetHintBoolean(SDL_HINT_RENDER_VULKAN_DEBUG, false)) { \ | ||
| 51 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", message); \ | ||
| 52 | SDL_TriggerBreakpoint(); \ | ||
| 53 | } \ | ||
| 54 | SDL_SetError("%s", message) \ | ||
| 55 | |||
| 56 | #define VULKAN_FUNCTIONS() \ | ||
| 57 | VULKAN_DEVICE_FUNCTION(vkAcquireNextImageKHR) \ | ||
| 58 | VULKAN_DEVICE_FUNCTION(vkAllocateCommandBuffers) \ | ||
| 59 | VULKAN_DEVICE_FUNCTION(vkAllocateDescriptorSets) \ | ||
| 60 | VULKAN_DEVICE_FUNCTION(vkAllocateMemory) \ | ||
| 61 | VULKAN_DEVICE_FUNCTION(vkBeginCommandBuffer) \ | ||
| 62 | VULKAN_DEVICE_FUNCTION(vkBindBufferMemory) \ | ||
| 63 | VULKAN_DEVICE_FUNCTION(vkBindImageMemory) \ | ||
| 64 | VULKAN_DEVICE_FUNCTION(vkCmdBeginRenderPass) \ | ||
| 65 | VULKAN_DEVICE_FUNCTION(vkCmdBindDescriptorSets) \ | ||
| 66 | VULKAN_DEVICE_FUNCTION(vkCmdBindPipeline) \ | ||
| 67 | VULKAN_DEVICE_FUNCTION(vkCmdBindVertexBuffers) \ | ||
| 68 | VULKAN_DEVICE_FUNCTION(vkCmdClearColorImage) \ | ||
| 69 | VULKAN_DEVICE_FUNCTION(vkCmdCopyBufferToImage) \ | ||
| 70 | VULKAN_DEVICE_FUNCTION(vkCmdCopyImageToBuffer) \ | ||
| 71 | VULKAN_DEVICE_FUNCTION(vkCmdDraw) \ | ||
| 72 | VULKAN_DEVICE_FUNCTION(vkCmdEndRenderPass) \ | ||
| 73 | VULKAN_DEVICE_FUNCTION(vkCmdPipelineBarrier) \ | ||
| 74 | VULKAN_DEVICE_FUNCTION(vkCmdPushConstants) \ | ||
| 75 | VULKAN_DEVICE_FUNCTION(vkCmdSetScissor) \ | ||
| 76 | VULKAN_DEVICE_FUNCTION(vkCmdSetViewport) \ | ||
| 77 | VULKAN_DEVICE_FUNCTION(vkCreateBuffer) \ | ||
| 78 | VULKAN_DEVICE_FUNCTION(vkCreateCommandPool) \ | ||
| 79 | VULKAN_DEVICE_FUNCTION(vkCreateDescriptorPool) \ | ||
| 80 | VULKAN_DEVICE_FUNCTION(vkCreateDescriptorSetLayout) \ | ||
| 81 | VULKAN_DEVICE_FUNCTION(vkCreateFence) \ | ||
| 82 | VULKAN_DEVICE_FUNCTION(vkCreateFramebuffer) \ | ||
| 83 | VULKAN_DEVICE_FUNCTION(vkCreateGraphicsPipelines) \ | ||
| 84 | VULKAN_DEVICE_FUNCTION(vkCreateImage) \ | ||
| 85 | VULKAN_DEVICE_FUNCTION(vkCreateImageView) \ | ||
| 86 | VULKAN_DEVICE_FUNCTION(vkCreatePipelineLayout) \ | ||
| 87 | VULKAN_DEVICE_FUNCTION(vkCreateRenderPass) \ | ||
| 88 | VULKAN_DEVICE_FUNCTION(vkCreateSampler) \ | ||
| 89 | VULKAN_DEVICE_FUNCTION(vkCreateSemaphore) \ | ||
| 90 | VULKAN_DEVICE_FUNCTION(vkCreateShaderModule) \ | ||
| 91 | VULKAN_DEVICE_FUNCTION(vkCreateSwapchainKHR) \ | ||
| 92 | VULKAN_DEVICE_FUNCTION(vkDestroyBuffer) \ | ||
| 93 | VULKAN_DEVICE_FUNCTION(vkDestroyCommandPool) \ | ||
| 94 | VULKAN_DEVICE_FUNCTION(vkDestroyDevice) \ | ||
| 95 | VULKAN_DEVICE_FUNCTION(vkDestroyDescriptorPool) \ | ||
| 96 | VULKAN_DEVICE_FUNCTION(vkDestroyDescriptorSetLayout) \ | ||
| 97 | VULKAN_DEVICE_FUNCTION(vkDestroyFence) \ | ||
| 98 | VULKAN_DEVICE_FUNCTION(vkDestroyFramebuffer) \ | ||
| 99 | VULKAN_DEVICE_FUNCTION(vkDestroyImage) \ | ||
| 100 | VULKAN_DEVICE_FUNCTION(vkDestroyImageView) \ | ||
| 101 | VULKAN_DEVICE_FUNCTION(vkDestroyPipeline) \ | ||
| 102 | VULKAN_DEVICE_FUNCTION(vkDestroyPipelineLayout) \ | ||
| 103 | VULKAN_DEVICE_FUNCTION(vkDestroyRenderPass) \ | ||
| 104 | VULKAN_DEVICE_FUNCTION(vkDestroySampler) \ | ||
| 105 | VULKAN_DEVICE_FUNCTION(vkDestroySemaphore) \ | ||
| 106 | VULKAN_DEVICE_FUNCTION(vkDestroyShaderModule) \ | ||
| 107 | VULKAN_DEVICE_FUNCTION(vkDestroySwapchainKHR) \ | ||
| 108 | VULKAN_DEVICE_FUNCTION(vkDeviceWaitIdle) \ | ||
| 109 | VULKAN_DEVICE_FUNCTION(vkEndCommandBuffer) \ | ||
| 110 | VULKAN_DEVICE_FUNCTION(vkFreeCommandBuffers) \ | ||
| 111 | VULKAN_DEVICE_FUNCTION(vkFreeMemory) \ | ||
| 112 | VULKAN_DEVICE_FUNCTION(vkGetBufferMemoryRequirements) \ | ||
| 113 | VULKAN_DEVICE_FUNCTION(vkGetImageMemoryRequirements) \ | ||
| 114 | VULKAN_DEVICE_FUNCTION(vkGetDeviceQueue) \ | ||
| 115 | VULKAN_DEVICE_FUNCTION(vkGetFenceStatus) \ | ||
| 116 | VULKAN_DEVICE_FUNCTION(vkGetSwapchainImagesKHR) \ | ||
| 117 | VULKAN_DEVICE_FUNCTION(vkMapMemory) \ | ||
| 118 | VULKAN_DEVICE_FUNCTION(vkQueuePresentKHR) \ | ||
| 119 | VULKAN_DEVICE_FUNCTION(vkQueueSubmit) \ | ||
| 120 | VULKAN_DEVICE_FUNCTION(vkResetCommandBuffer) \ | ||
| 121 | VULKAN_DEVICE_FUNCTION(vkResetCommandPool) \ | ||
| 122 | VULKAN_DEVICE_FUNCTION(vkResetDescriptorPool) \ | ||
| 123 | VULKAN_DEVICE_FUNCTION(vkResetFences) \ | ||
| 124 | VULKAN_DEVICE_FUNCTION(vkUnmapMemory) \ | ||
| 125 | VULKAN_DEVICE_FUNCTION(vkUpdateDescriptorSets) \ | ||
| 126 | VULKAN_DEVICE_FUNCTION(vkWaitForFences) \ | ||
| 127 | VULKAN_GLOBAL_FUNCTION(vkCreateInstance) \ | ||
| 128 | VULKAN_GLOBAL_FUNCTION(vkEnumerateInstanceExtensionProperties) \ | ||
| 129 | VULKAN_GLOBAL_FUNCTION(vkEnumerateInstanceLayerProperties) \ | ||
| 130 | VULKAN_INSTANCE_FUNCTION(vkCreateDevice) \ | ||
| 131 | VULKAN_INSTANCE_FUNCTION(vkDestroyInstance) \ | ||
| 132 | VULKAN_INSTANCE_FUNCTION(vkDestroySurfaceKHR) \ | ||
| 133 | VULKAN_INSTANCE_FUNCTION(vkEnumerateDeviceExtensionProperties) \ | ||
| 134 | VULKAN_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices) \ | ||
| 135 | VULKAN_INSTANCE_FUNCTION(vkGetDeviceProcAddr) \ | ||
| 136 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceFeatures) \ | ||
| 137 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceProperties) \ | ||
| 138 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceMemoryProperties) \ | ||
| 139 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceQueueFamilyProperties) \ | ||
| 140 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) \ | ||
| 141 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR) \ | ||
| 142 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR) \ | ||
| 143 | VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR) \ | ||
| 144 | VULKAN_INSTANCE_FUNCTION(vkQueueWaitIdle) \ | ||
| 145 | VULKAN_OPTIONAL_INSTANCE_FUNCTION(vkGetPhysicalDeviceFeatures2KHR) \ | ||
| 146 | VULKAN_OPTIONAL_INSTANCE_FUNCTION(vkGetPhysicalDeviceFormatProperties2KHR) \ | ||
| 147 | VULKAN_OPTIONAL_INSTANCE_FUNCTION(vkGetPhysicalDeviceImageFormatProperties2KHR) \ | ||
| 148 | VULKAN_OPTIONAL_INSTANCE_FUNCTION(vkGetPhysicalDeviceMemoryProperties2KHR) \ | ||
| 149 | VULKAN_OPTIONAL_INSTANCE_FUNCTION(vkGetPhysicalDeviceProperties2KHR) \ | ||
| 150 | VULKAN_OPTIONAL_DEVICE_FUNCTION(vkCreateSamplerYcbcrConversionKHR) \ | ||
| 151 | VULKAN_OPTIONAL_DEVICE_FUNCTION(vkDestroySamplerYcbcrConversionKHR) \ | ||
| 152 | |||
| 153 | #define VULKAN_DEVICE_FUNCTION(name) static PFN_##name name = NULL; | ||
| 154 | #define VULKAN_GLOBAL_FUNCTION(name) static PFN_##name name = NULL; | ||
| 155 | #define VULKAN_INSTANCE_FUNCTION(name) static PFN_##name name = NULL; | ||
| 156 | #define VULKAN_OPTIONAL_INSTANCE_FUNCTION(name) static PFN_##name name = NULL; | ||
| 157 | #define VULKAN_OPTIONAL_DEVICE_FUNCTION(name) static PFN_##name name = NULL; | ||
| 158 | VULKAN_FUNCTIONS() | ||
| 159 | #undef VULKAN_DEVICE_FUNCTION | ||
| 160 | #undef VULKAN_GLOBAL_FUNCTION | ||
| 161 | #undef VULKAN_INSTANCE_FUNCTION | ||
| 162 | #undef VULKAN_OPTIONAL_INSTANCE_FUNCTION | ||
| 163 | #undef VULKAN_OPTIONAL_DEVICE_FUNCTION | ||
| 164 | |||
| 165 | // Renderpass types | ||
| 166 | typedef enum { | ||
| 167 | VULKAN_RENDERPASS_LOAD = 0, | ||
| 168 | VULKAN_RENDERPASS_CLEAR = 1, | ||
| 169 | VULKAN_RENDERPASS_COUNT | ||
| 170 | } VULKAN_RenderPass; | ||
| 171 | |||
| 172 | // Sampler types | ||
| 173 | typedef enum | ||
| 174 | { | ||
| 175 | VULKAN_SAMPLER_NEAREST_CLAMP, | ||
| 176 | VULKAN_SAMPLER_NEAREST_WRAP, | ||
| 177 | VULKAN_SAMPLER_LINEAR_CLAMP, | ||
| 178 | VULKAN_SAMPLER_LINEAR_WRAP, | ||
| 179 | VULKAN_SAMPLER_COUNT | ||
| 180 | } VULKAN_Sampler; | ||
| 181 | |||
| 182 | // Vertex shader, common values | ||
| 183 | typedef struct | ||
| 184 | { | ||
| 185 | Float4X4 model; | ||
| 186 | Float4X4 projectionAndView; | ||
| 187 | } VULKAN_VertexShaderConstants; | ||
| 188 | |||
| 189 | // These should mirror the definitions in VULKAN_PixelShader_Common.hlsli | ||
| 190 | //static const float TONEMAP_NONE = 0; | ||
| 191 | //static const float TONEMAP_LINEAR = 1; | ||
| 192 | static const float TONEMAP_CHROME = 2; | ||
| 193 | |||
| 194 | static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 195 | static const float INPUTTYPE_SRGB = 1; | ||
| 196 | static const float INPUTTYPE_SCRGB = 2; | ||
| 197 | static const float INPUTTYPE_HDR10 = 3; | ||
| 198 | |||
| 199 | typedef enum | ||
| 200 | { | ||
| 201 | SAMPLER_POINT_CLAMP, | ||
| 202 | SAMPLER_POINT_WRAP, | ||
| 203 | SAMPLER_LINEAR_CLAMP, | ||
| 204 | SAMPLER_LINEAR_WRAP, | ||
| 205 | NUM_SAMPLERS | ||
| 206 | } Sampler; | ||
| 207 | |||
| 208 | // Pixel shader constants, common values | ||
| 209 | typedef struct | ||
| 210 | { | ||
| 211 | float scRGB_output; | ||
| 212 | float input_type; | ||
| 213 | float color_scale; | ||
| 214 | float unused_pad0; | ||
| 215 | |||
| 216 | float tonemap_method; | ||
| 217 | float tonemap_factor1; | ||
| 218 | float tonemap_factor2; | ||
| 219 | float sdr_white_point; | ||
| 220 | } VULKAN_PixelShaderConstants; | ||
| 221 | |||
| 222 | // Per-vertex data | ||
| 223 | typedef struct | ||
| 224 | { | ||
| 225 | float pos[2]; | ||
| 226 | float tex[2]; | ||
| 227 | SDL_FColor color; | ||
| 228 | } VULKAN_VertexPositionColor; | ||
| 229 | |||
| 230 | // Vulkan Buffer | ||
| 231 | typedef struct | ||
| 232 | { | ||
| 233 | VkDeviceMemory deviceMemory; | ||
| 234 | VkBuffer buffer; | ||
| 235 | VkDeviceSize size; | ||
| 236 | void *mappedBufferPtr; | ||
| 237 | |||
| 238 | } VULKAN_Buffer; | ||
| 239 | |||
| 240 | // Vulkan image | ||
| 241 | typedef struct | ||
| 242 | { | ||
| 243 | bool allocatedImage; | ||
| 244 | VkImage image; | ||
| 245 | VkImageView imageView; | ||
| 246 | VkDeviceMemory deviceMemory; | ||
| 247 | VkImageLayout imageLayout; | ||
| 248 | VkFormat format; | ||
| 249 | } VULKAN_Image; | ||
| 250 | |||
| 251 | // Per-texture data | ||
| 252 | typedef struct | ||
| 253 | { | ||
| 254 | VULKAN_Image mainImage; | ||
| 255 | VkRenderPass mainRenderpasses[VULKAN_RENDERPASS_COUNT]; | ||
| 256 | VkFramebuffer mainFramebuffer; | ||
| 257 | VULKAN_Buffer stagingBuffer; | ||
| 258 | VkFilter scaleMode; | ||
| 259 | SDL_Rect lockedRect; | ||
| 260 | int width; | ||
| 261 | int height; | ||
| 262 | VULKAN_Shader shader; | ||
| 263 | |||
| 264 | // Object passed to VkImageView and VkSampler for doing Ycbcr -> RGB conversion | ||
| 265 | VkSamplerYcbcrConversion samplerYcbcrConversion; | ||
| 266 | // Sampler created with samplerYcbcrConversion, passed to PSO as immutable sampler | ||
| 267 | VkSampler samplerYcbcr; | ||
| 268 | // Descriptor set layout with samplerYcbcr baked as immutable sampler | ||
| 269 | VkDescriptorSetLayout descriptorSetLayoutYcbcr; | ||
| 270 | // Pipeline layout with immutable sampler descriptor set layout | ||
| 271 | VkPipelineLayout pipelineLayoutYcbcr; | ||
| 272 | |||
| 273 | } VULKAN_TextureData; | ||
| 274 | |||
| 275 | // Pipeline State Object data | ||
| 276 | typedef struct | ||
| 277 | { | ||
| 278 | VULKAN_Shader shader; | ||
| 279 | VULKAN_PixelShaderConstants shader_constants; | ||
| 280 | SDL_BlendMode blendMode; | ||
| 281 | VkPrimitiveTopology topology; | ||
| 282 | VkFormat format; | ||
| 283 | VkPipelineLayout pipelineLayout; | ||
| 284 | VkDescriptorSetLayout descriptorSetLayout; | ||
| 285 | VkPipeline pipeline; | ||
| 286 | } VULKAN_PipelineState; | ||
| 287 | |||
| 288 | typedef struct | ||
| 289 | { | ||
| 290 | VkBuffer vertexBuffer; | ||
| 291 | } VULKAN_DrawStateCache; | ||
| 292 | |||
| 293 | // Private renderer data | ||
| 294 | typedef struct | ||
| 295 | { | ||
| 296 | PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; | ||
| 297 | VkInstance instance; | ||
| 298 | bool instance_external; | ||
| 299 | VkSurfaceKHR surface; | ||
| 300 | bool surface_external; | ||
| 301 | VkPhysicalDevice physicalDevice; | ||
| 302 | VkPhysicalDeviceProperties physicalDeviceProperties; | ||
| 303 | VkPhysicalDeviceMemoryProperties physicalDeviceMemoryProperties; | ||
| 304 | VkPhysicalDeviceFeatures physicalDeviceFeatures; | ||
| 305 | VkQueue graphicsQueue; | ||
| 306 | VkQueue presentQueue; | ||
| 307 | VkDevice device; | ||
| 308 | bool device_external; | ||
| 309 | uint32_t graphicsQueueFamilyIndex; | ||
| 310 | uint32_t presentQueueFamilyIndex; | ||
| 311 | VkSwapchainKHR swapchain; | ||
| 312 | VkCommandPool commandPool; | ||
| 313 | VkCommandBuffer *commandBuffers; | ||
| 314 | uint32_t currentCommandBufferIndex; | ||
| 315 | VkCommandBuffer currentCommandBuffer; | ||
| 316 | VkFence *fences; | ||
| 317 | VkSurfaceCapabilitiesKHR surfaceCapabilities; | ||
| 318 | VkSurfaceFormatKHR *surfaceFormats; | ||
| 319 | bool recreateSwapchain; | ||
| 320 | int vsync; | ||
| 321 | SDL_PropertiesID create_props; | ||
| 322 | |||
| 323 | VkFramebuffer *framebuffers; | ||
| 324 | VkRenderPass renderPasses[VULKAN_RENDERPASS_COUNT]; | ||
| 325 | VkRenderPass currentRenderPass; | ||
| 326 | |||
| 327 | VkShaderModule vertexShaderModules[NUM_SHADERS]; | ||
| 328 | VkShaderModule fragmentShaderModules[NUM_SHADERS]; | ||
| 329 | VkDescriptorSetLayout descriptorSetLayout; | ||
| 330 | VkPipelineLayout pipelineLayout; | ||
| 331 | |||
| 332 | // Vertex buffer data | ||
| 333 | VULKAN_Buffer vertexBuffers[SDL_VULKAN_NUM_VERTEX_BUFFERS]; | ||
| 334 | VULKAN_VertexShaderConstants vertexShaderConstantsData; | ||
| 335 | |||
| 336 | // Data for staging/allocating textures | ||
| 337 | VULKAN_Buffer **uploadBuffers; | ||
| 338 | int *currentUploadBuffer; | ||
| 339 | |||
| 340 | // Data for updating constants | ||
| 341 | VULKAN_Buffer **constantBuffers; | ||
| 342 | uint32_t *numConstantBuffers; | ||
| 343 | uint32_t currentConstantBufferIndex; | ||
| 344 | int32_t currentConstantBufferOffset; | ||
| 345 | |||
| 346 | VkSampler samplers[VULKAN_SAMPLER_COUNT]; | ||
| 347 | VkDescriptorPool **descriptorPools; | ||
| 348 | uint32_t *numDescriptorPools; | ||
| 349 | uint32_t currentDescriptorPoolIndex; | ||
| 350 | uint32_t currentDescriptorSetIndex; | ||
| 351 | |||
| 352 | int pipelineStateCount; | ||
| 353 | VULKAN_PipelineState *pipelineStates; | ||
| 354 | VULKAN_PipelineState *currentPipelineState; | ||
| 355 | |||
| 356 | bool supportsEXTSwapchainColorspace; | ||
| 357 | bool supportsKHRGetPhysicalDeviceProperties2; | ||
| 358 | bool supportsKHRSamplerYCbCrConversion; | ||
| 359 | uint32_t surfaceFormatsAllocatedCount; | ||
| 360 | uint32_t surfaceFormatsCount; | ||
| 361 | uint32_t swapchainDesiredImageCount; | ||
| 362 | VkSurfaceFormatKHR surfaceFormat; | ||
| 363 | VkExtent2D swapchainSize; | ||
| 364 | VkSurfaceTransformFlagBitsKHR swapChainPreTransform; | ||
| 365 | uint32_t swapchainImageCount; | ||
| 366 | VkImage *swapchainImages; | ||
| 367 | VkImageView *swapchainImageViews; | ||
| 368 | VkImageLayout *swapchainImageLayouts; | ||
| 369 | VkSemaphore *imageAvailableSemaphores; | ||
| 370 | VkSemaphore *renderingFinishedSemaphores; | ||
| 371 | VkSemaphore currentImageAvailableSemaphore; | ||
| 372 | uint32_t currentSwapchainImageIndex; | ||
| 373 | |||
| 374 | VkPipelineStageFlags *waitDestStageMasks; | ||
| 375 | VkSemaphore *waitRenderSemaphores; | ||
| 376 | uint32_t waitRenderSemaphoreCount; | ||
| 377 | uint32_t waitRenderSemaphoreMax; | ||
| 378 | VkSemaphore *signalRenderSemaphores; | ||
| 379 | uint32_t signalRenderSemaphoreCount; | ||
| 380 | uint32_t signalRenderSemaphoreMax; | ||
| 381 | |||
| 382 | // Cached renderer properties | ||
| 383 | VULKAN_TextureData *textureRenderTarget; | ||
| 384 | bool cliprectDirty; | ||
| 385 | bool currentCliprectEnabled; | ||
| 386 | SDL_Rect currentCliprect; | ||
| 387 | SDL_Rect currentViewport; | ||
| 388 | int currentViewportRotation; | ||
| 389 | bool viewportDirty; | ||
| 390 | Float4X4 identity; | ||
| 391 | VkComponentMapping identitySwizzle; | ||
| 392 | int currentVertexBuffer; | ||
| 393 | bool issueBatch; | ||
| 394 | } VULKAN_RenderData; | ||
| 395 | |||
| 396 | static SDL_PixelFormat VULKAN_VkFormatToSDLPixelFormat(VkFormat vkFormat) | ||
| 397 | { | ||
| 398 | switch (vkFormat) { | ||
| 399 | case VK_FORMAT_B8G8R8A8_UNORM: | ||
| 400 | return SDL_PIXELFORMAT_ARGB8888; | ||
| 401 | case VK_FORMAT_R8G8B8A8_UNORM: | ||
| 402 | return SDL_PIXELFORMAT_ABGR8888; | ||
| 403 | case VK_FORMAT_A2R10G10B10_UNORM_PACK32: | ||
| 404 | return SDL_PIXELFORMAT_ABGR2101010; | ||
| 405 | case VK_FORMAT_R16G16B16A16_SFLOAT: | ||
| 406 | return SDL_PIXELFORMAT_RGBA64_FLOAT; | ||
| 407 | default: | ||
| 408 | return SDL_PIXELFORMAT_UNKNOWN; | ||
| 409 | } | ||
| 410 | } | ||
| 411 | |||
| 412 | static int VULKAN_VkFormatGetNumPlanes(VkFormat vkFormat) | ||
| 413 | { | ||
| 414 | switch (vkFormat) { | ||
| 415 | case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: | ||
| 416 | return 3; | ||
| 417 | case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: | ||
| 418 | case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: | ||
| 419 | return 2; | ||
| 420 | default: | ||
| 421 | return 1; | ||
| 422 | } | ||
| 423 | } | ||
| 424 | |||
| 425 | static VkDeviceSize VULKAN_GetBytesPerPixel(VkFormat vkFormat) | ||
| 426 | { | ||
| 427 | switch (vkFormat) { | ||
| 428 | case VK_FORMAT_R8_UNORM: | ||
| 429 | return 1; | ||
| 430 | case VK_FORMAT_R8G8_UNORM: | ||
| 431 | return 2; | ||
| 432 | case VK_FORMAT_R16G16_UNORM: | ||
| 433 | return 4; | ||
| 434 | case VK_FORMAT_B8G8R8A8_SRGB: | ||
| 435 | case VK_FORMAT_B8G8R8A8_UNORM: | ||
| 436 | case VK_FORMAT_A2R10G10B10_UNORM_PACK32: | ||
| 437 | return 4; | ||
| 438 | case VK_FORMAT_R16G16B16A16_SFLOAT: | ||
| 439 | return 8; | ||
| 440 | default: | ||
| 441 | return 4; | ||
| 442 | } | ||
| 443 | } | ||
| 444 | |||
| 445 | static VkFormat SDLPixelFormatToVkTextureFormat(Uint32 format, Uint32 output_colorspace) | ||
| 446 | { | ||
| 447 | switch (format) { | ||
| 448 | case SDL_PIXELFORMAT_RGBA64_FLOAT: | ||
| 449 | return VK_FORMAT_R16G16B16A16_SFLOAT; | ||
| 450 | case SDL_PIXELFORMAT_ABGR2101010: | ||
| 451 | return VK_FORMAT_A2B10G10R10_UNORM_PACK32; | ||
| 452 | case SDL_PIXELFORMAT_ARGB8888: | ||
| 453 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 454 | return VK_FORMAT_B8G8R8A8_SRGB; | ||
| 455 | } | ||
| 456 | return VK_FORMAT_B8G8R8A8_UNORM; | ||
| 457 | case SDL_PIXELFORMAT_ABGR8888: | ||
| 458 | if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 459 | return VK_FORMAT_R8G8B8A8_SRGB; | ||
| 460 | } | ||
| 461 | return VK_FORMAT_R8G8B8A8_UNORM; | ||
| 462 | case SDL_PIXELFORMAT_YUY2: | ||
| 463 | return VK_FORMAT_G8B8G8R8_422_UNORM; | ||
| 464 | case SDL_PIXELFORMAT_UYVY: | ||
| 465 | return VK_FORMAT_B8G8R8G8_422_UNORM; | ||
| 466 | case SDL_PIXELFORMAT_YV12: | ||
| 467 | case SDL_PIXELFORMAT_IYUV: | ||
| 468 | return VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM; | ||
| 469 | case SDL_PIXELFORMAT_NV12: | ||
| 470 | case SDL_PIXELFORMAT_NV21: | ||
| 471 | return VK_FORMAT_G8_B8R8_2PLANE_420_UNORM; | ||
| 472 | case SDL_PIXELFORMAT_P010: | ||
| 473 | return VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16; | ||
| 474 | default: | ||
| 475 | return VK_FORMAT_UNDEFINED; | ||
| 476 | } | ||
| 477 | } | ||
| 478 | |||
| 479 | static void VULKAN_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture); | ||
| 480 | static void VULKAN_DestroyBuffer(VULKAN_RenderData *rendererData, VULKAN_Buffer *vulkanBuffer); | ||
| 481 | static void VULKAN_DestroyImage(VULKAN_RenderData *rendererData, VULKAN_Image *vulkanImage); | ||
| 482 | static void VULKAN_ResetCommandList(VULKAN_RenderData *rendererData); | ||
| 483 | static bool VULKAN_FindMemoryTypeIndex(VULKAN_RenderData *rendererData, uint32_t typeBits, VkMemoryPropertyFlags requiredFlags, VkMemoryPropertyFlags desiredFlags, uint32_t *memoryTypeIndexOut); | ||
| 484 | static VkResult VULKAN_CreateWindowSizeDependentResources(SDL_Renderer *renderer); | ||
| 485 | static VkDescriptorPool VULKAN_AllocateDescriptorPool(VULKAN_RenderData *rendererData); | ||
| 486 | static VkResult VULKAN_CreateDescriptorSetAndPipelineLayout(VULKAN_RenderData *rendererData, VkSampler samplerYcbcr, VkDescriptorSetLayout *descriptorSetLayoutOut, VkPipelineLayout *pipelineLayoutOut); | ||
| 487 | static VkSurfaceTransformFlagBitsKHR VULKAN_GetRotationForCurrentRenderTarget(VULKAN_RenderData *rendererData); | ||
| 488 | static bool VULKAN_IsDisplayRotated90Degrees(VkSurfaceTransformFlagBitsKHR rotation); | ||
| 489 | |||
| 490 | static void VULKAN_DestroyAll(SDL_Renderer *renderer) | ||
| 491 | { | ||
| 492 | VULKAN_RenderData *rendererData; | ||
| 493 | if (renderer == NULL) { | ||
| 494 | return; | ||
| 495 | } | ||
| 496 | rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 497 | if (rendererData == NULL) { | ||
| 498 | return; | ||
| 499 | } | ||
| 500 | |||
| 501 | // Release all textures | ||
| 502 | for (SDL_Texture *texture = renderer->textures; texture; texture = texture->next) { | ||
| 503 | VULKAN_DestroyTexture(renderer, texture); | ||
| 504 | } | ||
| 505 | |||
| 506 | if (rendererData->waitDestStageMasks) { | ||
| 507 | SDL_free(rendererData->waitDestStageMasks); | ||
| 508 | rendererData->waitDestStageMasks = NULL; | ||
| 509 | } | ||
| 510 | if (rendererData->waitRenderSemaphores) { | ||
| 511 | SDL_free(rendererData->waitRenderSemaphores); | ||
| 512 | rendererData->waitRenderSemaphores = NULL; | ||
| 513 | } | ||
| 514 | if (rendererData->signalRenderSemaphores) { | ||
| 515 | SDL_free(rendererData->signalRenderSemaphores); | ||
| 516 | rendererData->signalRenderSemaphores = NULL; | ||
| 517 | } | ||
| 518 | if (rendererData->surfaceFormats != NULL) { | ||
| 519 | SDL_free(rendererData->surfaceFormats); | ||
| 520 | rendererData->surfaceFormats = NULL; | ||
| 521 | rendererData->surfaceFormatsAllocatedCount = 0; | ||
| 522 | } | ||
| 523 | if (rendererData->swapchainImages != NULL) { | ||
| 524 | SDL_free(rendererData->swapchainImages); | ||
| 525 | rendererData->swapchainImages = NULL; | ||
| 526 | } | ||
| 527 | if (rendererData->swapchain) { | ||
| 528 | vkDestroySwapchainKHR(rendererData->device, rendererData->swapchain, NULL); | ||
| 529 | rendererData->swapchain = VK_NULL_HANDLE; | ||
| 530 | } | ||
| 531 | if (rendererData->fences != NULL) { | ||
| 532 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 533 | if (rendererData->fences[i] != VK_NULL_HANDLE) { | ||
| 534 | vkDestroyFence(rendererData->device, rendererData->fences[i], NULL); | ||
| 535 | rendererData->fences[i] = VK_NULL_HANDLE; | ||
| 536 | } | ||
| 537 | } | ||
| 538 | SDL_free(rendererData->fences); | ||
| 539 | rendererData->fences = NULL; | ||
| 540 | } | ||
| 541 | if (rendererData->swapchainImageViews) { | ||
| 542 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 543 | if (rendererData->swapchainImageViews[i] != VK_NULL_HANDLE) { | ||
| 544 | vkDestroyImageView(rendererData->device, rendererData->swapchainImageViews[i], NULL); | ||
| 545 | } | ||
| 546 | } | ||
| 547 | SDL_free(rendererData->swapchainImageViews); | ||
| 548 | rendererData->swapchainImageViews = NULL; | ||
| 549 | } | ||
| 550 | if (rendererData->swapchainImageLayouts) { | ||
| 551 | SDL_free(rendererData->swapchainImageLayouts); | ||
| 552 | rendererData->swapchainImageLayouts = NULL; | ||
| 553 | } | ||
| 554 | if (rendererData->framebuffers) { | ||
| 555 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 556 | if (rendererData->framebuffers[i] != VK_NULL_HANDLE) { | ||
| 557 | vkDestroyFramebuffer(rendererData->device, rendererData->framebuffers[i], NULL); | ||
| 558 | } | ||
| 559 | } | ||
| 560 | SDL_free(rendererData->framebuffers); | ||
| 561 | rendererData->framebuffers = NULL; | ||
| 562 | } | ||
| 563 | for (uint32_t i = 0; i < SDL_arraysize(rendererData->samplers); i++) { | ||
| 564 | if (rendererData->samplers[i] != VK_NULL_HANDLE) { | ||
| 565 | vkDestroySampler(rendererData->device, rendererData->samplers[i], NULL); | ||
| 566 | rendererData->samplers[i] = VK_NULL_HANDLE; | ||
| 567 | } | ||
| 568 | } | ||
| 569 | for (uint32_t i = 0; i < SDL_arraysize(rendererData->vertexBuffers); i++ ) { | ||
| 570 | VULKAN_DestroyBuffer(rendererData, &rendererData->vertexBuffers[i]); | ||
| 571 | } | ||
| 572 | SDL_memset(rendererData->vertexBuffers, 0, sizeof(rendererData->vertexBuffers)); | ||
| 573 | for (uint32_t i = 0; i < VULKAN_RENDERPASS_COUNT; i++) { | ||
| 574 | if (rendererData->renderPasses[i] != VK_NULL_HANDLE) { | ||
| 575 | vkDestroyRenderPass(rendererData->device, rendererData->renderPasses[i], NULL); | ||
| 576 | rendererData->renderPasses[i] = VK_NULL_HANDLE; | ||
| 577 | } | ||
| 578 | } | ||
| 579 | if (rendererData->imageAvailableSemaphores) { | ||
| 580 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 581 | if (rendererData->imageAvailableSemaphores[i] != VK_NULL_HANDLE) { | ||
| 582 | vkDestroySemaphore(rendererData->device, rendererData->imageAvailableSemaphores[i], NULL); | ||
| 583 | } | ||
| 584 | } | ||
| 585 | SDL_free(rendererData->imageAvailableSemaphores); | ||
| 586 | rendererData->imageAvailableSemaphores = NULL; | ||
| 587 | } | ||
| 588 | if (rendererData->renderingFinishedSemaphores) { | ||
| 589 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 590 | if (rendererData->renderingFinishedSemaphores[i] != VK_NULL_HANDLE) { | ||
| 591 | vkDestroySemaphore(rendererData->device, rendererData->renderingFinishedSemaphores[i], NULL); | ||
| 592 | } | ||
| 593 | } | ||
| 594 | SDL_free(rendererData->renderingFinishedSemaphores); | ||
| 595 | rendererData->renderingFinishedSemaphores = NULL; | ||
| 596 | } | ||
| 597 | if (rendererData->commandBuffers) { | ||
| 598 | vkFreeCommandBuffers(rendererData->device, rendererData->commandPool, rendererData->swapchainImageCount, rendererData->commandBuffers); | ||
| 599 | SDL_free(rendererData->commandBuffers); | ||
| 600 | rendererData->commandBuffers = NULL; | ||
| 601 | rendererData->currentCommandBuffer = VK_NULL_HANDLE; | ||
| 602 | rendererData->currentCommandBufferIndex = 0; | ||
| 603 | } | ||
| 604 | if (rendererData->commandPool) { | ||
| 605 | vkDestroyCommandPool(rendererData->device, rendererData->commandPool, NULL); | ||
| 606 | rendererData->commandPool = VK_NULL_HANDLE; | ||
| 607 | } | ||
| 608 | if (rendererData->descriptorPools) { | ||
| 609 | SDL_assert(rendererData->numDescriptorPools); | ||
| 610 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 611 | for (uint32_t j = 0; j < rendererData->numDescriptorPools[i]; j++) { | ||
| 612 | if (rendererData->descriptorPools[i][j] != VK_NULL_HANDLE) { | ||
| 613 | vkDestroyDescriptorPool(rendererData->device, rendererData->descriptorPools[i][j], NULL); | ||
| 614 | } | ||
| 615 | } | ||
| 616 | SDL_free(rendererData->descriptorPools[i]); | ||
| 617 | } | ||
| 618 | SDL_free(rendererData->descriptorPools); | ||
| 619 | rendererData->descriptorPools = NULL; | ||
| 620 | SDL_free(rendererData->numDescriptorPools); | ||
| 621 | rendererData->numDescriptorPools = NULL; | ||
| 622 | } | ||
| 623 | for (uint32_t i = 0; i < NUM_SHADERS; i++) { | ||
| 624 | if (rendererData->vertexShaderModules[i] != VK_NULL_HANDLE) { | ||
| 625 | vkDestroyShaderModule(rendererData->device, rendererData->vertexShaderModules[i], NULL); | ||
| 626 | rendererData->vertexShaderModules[i] = VK_NULL_HANDLE; | ||
| 627 | } | ||
| 628 | if (rendererData->fragmentShaderModules[i] != VK_NULL_HANDLE) { | ||
| 629 | vkDestroyShaderModule(rendererData->device, rendererData->fragmentShaderModules[i], NULL); | ||
| 630 | rendererData->fragmentShaderModules[i] = VK_NULL_HANDLE; | ||
| 631 | } | ||
| 632 | } | ||
| 633 | if (rendererData->descriptorSetLayout != VK_NULL_HANDLE) { | ||
| 634 | vkDestroyDescriptorSetLayout(rendererData->device, rendererData->descriptorSetLayout, NULL); | ||
| 635 | rendererData->descriptorSetLayout = VK_NULL_HANDLE; | ||
| 636 | } | ||
| 637 | if (rendererData->pipelineLayout != VK_NULL_HANDLE) { | ||
| 638 | vkDestroyPipelineLayout(rendererData->device, rendererData->pipelineLayout, NULL); | ||
| 639 | rendererData->pipelineLayout = VK_NULL_HANDLE; | ||
| 640 | } | ||
| 641 | for (int i = 0; i < rendererData->pipelineStateCount; i++) { | ||
| 642 | vkDestroyPipeline(rendererData->device, rendererData->pipelineStates[i].pipeline, NULL); | ||
| 643 | } | ||
| 644 | SDL_free(rendererData->pipelineStates); | ||
| 645 | rendererData->pipelineStates = NULL; | ||
| 646 | rendererData->pipelineStateCount = 0; | ||
| 647 | |||
| 648 | if (rendererData->currentUploadBuffer) { | ||
| 649 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 650 | for (int j = 0; j < rendererData->currentUploadBuffer[i]; ++j) { | ||
| 651 | VULKAN_DestroyBuffer(rendererData, &rendererData->uploadBuffers[i][j]); | ||
| 652 | } | ||
| 653 | SDL_free(rendererData->uploadBuffers[i]); | ||
| 654 | } | ||
| 655 | SDL_free(rendererData->uploadBuffers); | ||
| 656 | rendererData->uploadBuffers = NULL; | ||
| 657 | SDL_free(rendererData->currentUploadBuffer); | ||
| 658 | rendererData->currentUploadBuffer = NULL; | ||
| 659 | } | ||
| 660 | |||
| 661 | if (rendererData->constantBuffers) { | ||
| 662 | SDL_assert(rendererData->numConstantBuffers); | ||
| 663 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 664 | for (uint32_t j = 0; j < rendererData->numConstantBuffers[i]; j++) { | ||
| 665 | VULKAN_DestroyBuffer(rendererData, &rendererData->constantBuffers[i][j]); | ||
| 666 | } | ||
| 667 | SDL_free(rendererData->constantBuffers[i]); | ||
| 668 | } | ||
| 669 | SDL_free(rendererData->constantBuffers); | ||
| 670 | rendererData->constantBuffers = NULL; | ||
| 671 | SDL_free(rendererData->numConstantBuffers); | ||
| 672 | rendererData->numConstantBuffers = NULL; | ||
| 673 | } | ||
| 674 | |||
| 675 | if (rendererData->device != VK_NULL_HANDLE && !rendererData->device_external) { | ||
| 676 | vkDestroyDevice(rendererData->device, NULL); | ||
| 677 | rendererData->device = VK_NULL_HANDLE; | ||
| 678 | } | ||
| 679 | if (rendererData->surface != VK_NULL_HANDLE && !rendererData->surface_external) { | ||
| 680 | vkDestroySurfaceKHR(rendererData->instance, rendererData->surface, NULL); | ||
| 681 | rendererData->surface = VK_NULL_HANDLE; | ||
| 682 | } | ||
| 683 | if (rendererData->instance != VK_NULL_HANDLE && !rendererData->instance_external) { | ||
| 684 | vkDestroyInstance(rendererData->instance, NULL); | ||
| 685 | rendererData->instance = VK_NULL_HANDLE; | ||
| 686 | } | ||
| 687 | } | ||
| 688 | |||
| 689 | static void VULKAN_DestroyBuffer(VULKAN_RenderData *rendererData, VULKAN_Buffer *vulkanBuffer) | ||
| 690 | { | ||
| 691 | if (vulkanBuffer->buffer != VK_NULL_HANDLE) { | ||
| 692 | vkDestroyBuffer(rendererData->device, vulkanBuffer->buffer, NULL); | ||
| 693 | vulkanBuffer->buffer = VK_NULL_HANDLE; | ||
| 694 | } | ||
| 695 | if (vulkanBuffer->deviceMemory != VK_NULL_HANDLE) { | ||
| 696 | vkFreeMemory(rendererData->device, vulkanBuffer->deviceMemory, NULL); | ||
| 697 | vulkanBuffer->deviceMemory = VK_NULL_HANDLE; | ||
| 698 | } | ||
| 699 | SDL_memset(vulkanBuffer, 0, sizeof(VULKAN_Buffer)); | ||
| 700 | } | ||
| 701 | |||
| 702 | static VkResult VULKAN_AllocateBuffer(VULKAN_RenderData *rendererData, VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags requiredMemoryProps, VkMemoryPropertyFlags desiredMemoryProps, VULKAN_Buffer *bufferOut) | ||
| 703 | { | ||
| 704 | VkResult result; | ||
| 705 | VkBufferCreateInfo bufferCreateInfo = { 0 }; | ||
| 706 | bufferCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; | ||
| 707 | bufferCreateInfo.size = size; | ||
| 708 | bufferCreateInfo.usage = usage; | ||
| 709 | result = vkCreateBuffer(rendererData->device, &bufferCreateInfo, NULL, &bufferOut->buffer); | ||
| 710 | if (result != VK_SUCCESS) { | ||
| 711 | SET_ERROR_CODE("vkCreateBuffer()", result); | ||
| 712 | return result; | ||
| 713 | } | ||
| 714 | |||
| 715 | VkMemoryRequirements memoryRequirements = { 0 }; | ||
| 716 | vkGetBufferMemoryRequirements(rendererData->device, bufferOut->buffer, &memoryRequirements); | ||
| 717 | if (result != VK_SUCCESS) { | ||
| 718 | VULKAN_DestroyBuffer(rendererData, bufferOut); | ||
| 719 | SET_ERROR_CODE("vkGetBufferMemoryRequirements()", result); | ||
| 720 | return result; | ||
| 721 | } | ||
| 722 | |||
| 723 | uint32_t memoryTypeIndex = 0; | ||
| 724 | if (!VULKAN_FindMemoryTypeIndex(rendererData, memoryRequirements.memoryTypeBits, requiredMemoryProps, desiredMemoryProps, &memoryTypeIndex)) { | ||
| 725 | VULKAN_DestroyBuffer(rendererData, bufferOut); | ||
| 726 | return VK_ERROR_UNKNOWN; | ||
| 727 | } | ||
| 728 | |||
| 729 | VkMemoryAllocateInfo memoryAllocateInfo = { 0 }; | ||
| 730 | memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; | ||
| 731 | memoryAllocateInfo.allocationSize = memoryRequirements.size; | ||
| 732 | memoryAllocateInfo.memoryTypeIndex = memoryTypeIndex; | ||
| 733 | result = vkAllocateMemory(rendererData->device, &memoryAllocateInfo, NULL, &bufferOut->deviceMemory); | ||
| 734 | if (result != VK_SUCCESS) { | ||
| 735 | VULKAN_DestroyBuffer(rendererData, bufferOut); | ||
| 736 | SET_ERROR_CODE("vkAllocateMemory()", result); | ||
| 737 | return result; | ||
| 738 | } | ||
| 739 | result = vkBindBufferMemory(rendererData->device, bufferOut->buffer, bufferOut->deviceMemory, 0); | ||
| 740 | if (result != VK_SUCCESS) { | ||
| 741 | VULKAN_DestroyBuffer(rendererData, bufferOut); | ||
| 742 | SET_ERROR_CODE("vkBindBufferMemory()", result); | ||
| 743 | return result; | ||
| 744 | } | ||
| 745 | |||
| 746 | result = vkMapMemory(rendererData->device, bufferOut->deviceMemory, 0, size, 0, &bufferOut->mappedBufferPtr); | ||
| 747 | if (result != VK_SUCCESS) { | ||
| 748 | VULKAN_DestroyBuffer(rendererData, bufferOut); | ||
| 749 | SET_ERROR_CODE("vkMapMemory()", result); | ||
| 750 | return result; | ||
| 751 | } | ||
| 752 | bufferOut->size = size; | ||
| 753 | return result; | ||
| 754 | } | ||
| 755 | |||
| 756 | static void VULKAN_DestroyImage(VULKAN_RenderData *rendererData, VULKAN_Image *vulkanImage) | ||
| 757 | { | ||
| 758 | if (vulkanImage->imageView != VK_NULL_HANDLE) { | ||
| 759 | vkDestroyImageView(rendererData->device, vulkanImage->imageView, NULL); | ||
| 760 | vulkanImage->imageView = VK_NULL_HANDLE; | ||
| 761 | } | ||
| 762 | if (vulkanImage->image != VK_NULL_HANDLE) { | ||
| 763 | if (vulkanImage->allocatedImage) { | ||
| 764 | vkDestroyImage(rendererData->device, vulkanImage->image, NULL); | ||
| 765 | } | ||
| 766 | vulkanImage->image = VK_NULL_HANDLE; | ||
| 767 | } | ||
| 768 | |||
| 769 | if (vulkanImage->deviceMemory != VK_NULL_HANDLE) { | ||
| 770 | if (vulkanImage->allocatedImage) { | ||
| 771 | vkFreeMemory(rendererData->device, vulkanImage->deviceMemory, NULL); | ||
| 772 | } | ||
| 773 | vulkanImage->deviceMemory = VK_NULL_HANDLE; | ||
| 774 | } | ||
| 775 | SDL_memset(vulkanImage, 0, sizeof(VULKAN_Image)); | ||
| 776 | } | ||
| 777 | |||
| 778 | static VkResult VULKAN_AllocateImage(VULKAN_RenderData *rendererData, SDL_PropertiesID create_props, uint32_t width, uint32_t height, VkFormat format, VkImageUsageFlags imageUsage, VkComponentMapping swizzle, VkSamplerYcbcrConversionKHR samplerYcbcrConversion, VULKAN_Image *imageOut) | ||
| 779 | { | ||
| 780 | VkResult result; | ||
| 781 | VkSamplerYcbcrConversionInfoKHR samplerYcbcrConversionInfo = { 0 }; | ||
| 782 | |||
| 783 | SDL_memset(imageOut, 0, sizeof(VULKAN_Image)); | ||
| 784 | imageOut->format = format; | ||
| 785 | imageOut->image = (VkImage)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER, 0); | ||
| 786 | |||
| 787 | if (imageOut->image == VK_NULL_HANDLE) { | ||
| 788 | imageOut->allocatedImage = VK_TRUE; | ||
| 789 | |||
| 790 | VkImageCreateInfo imageCreateInfo = { 0 }; | ||
| 791 | imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; | ||
| 792 | imageCreateInfo.flags = 0; | ||
| 793 | imageCreateInfo.imageType = VK_IMAGE_TYPE_2D; | ||
| 794 | imageCreateInfo.format = format; | ||
| 795 | imageCreateInfo.extent.width = width; | ||
| 796 | imageCreateInfo.extent.height = height; | ||
| 797 | imageCreateInfo.extent.depth = 1; | ||
| 798 | imageCreateInfo.mipLevels = 1; | ||
| 799 | imageCreateInfo.arrayLayers = 1; | ||
| 800 | imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT; | ||
| 801 | imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL; | ||
| 802 | imageCreateInfo.usage = imageUsage; | ||
| 803 | imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; | ||
| 804 | imageCreateInfo.queueFamilyIndexCount = 0; | ||
| 805 | imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; | ||
| 806 | |||
| 807 | result = vkCreateImage(rendererData->device, &imageCreateInfo, NULL, &imageOut->image); | ||
| 808 | if (result != VK_SUCCESS) { | ||
| 809 | VULKAN_DestroyImage(rendererData, imageOut); | ||
| 810 | SET_ERROR_CODE("vkCreateImage()", result); | ||
| 811 | return result; | ||
| 812 | } | ||
| 813 | |||
| 814 | VkMemoryRequirements memoryRequirements = { 0 }; | ||
| 815 | vkGetImageMemoryRequirements(rendererData->device, imageOut->image, &memoryRequirements); | ||
| 816 | if (result != VK_SUCCESS) { | ||
| 817 | VULKAN_DestroyImage(rendererData, imageOut); | ||
| 818 | SET_ERROR_CODE("vkGetImageMemoryRequirements()", result); | ||
| 819 | return result; | ||
| 820 | } | ||
| 821 | |||
| 822 | uint32_t memoryTypeIndex = 0; | ||
| 823 | if (!VULKAN_FindMemoryTypeIndex(rendererData, memoryRequirements.memoryTypeBits, 0, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &memoryTypeIndex)) { | ||
| 824 | VULKAN_DestroyImage(rendererData, imageOut); | ||
| 825 | return VK_ERROR_UNKNOWN; | ||
| 826 | } | ||
| 827 | |||
| 828 | VkMemoryAllocateInfo memoryAllocateInfo = { 0 }; | ||
| 829 | memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; | ||
| 830 | memoryAllocateInfo.allocationSize = memoryRequirements.size; | ||
| 831 | memoryAllocateInfo.memoryTypeIndex = memoryTypeIndex; | ||
| 832 | result = vkAllocateMemory(rendererData->device, &memoryAllocateInfo, NULL, &imageOut->deviceMemory); | ||
| 833 | if (result != VK_SUCCESS) { | ||
| 834 | VULKAN_DestroyImage(rendererData, imageOut); | ||
| 835 | SET_ERROR_CODE("vkAllocateMemory()", result); | ||
| 836 | return result; | ||
| 837 | } | ||
| 838 | result = vkBindImageMemory(rendererData->device, imageOut->image, imageOut->deviceMemory, 0); | ||
| 839 | if (result != VK_SUCCESS) { | ||
| 840 | VULKAN_DestroyImage(rendererData, imageOut); | ||
| 841 | SET_ERROR_CODE("vkBindImageMemory()", result); | ||
| 842 | return result; | ||
| 843 | } | ||
| 844 | } else { | ||
| 845 | imageOut->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; | ||
| 846 | } | ||
| 847 | |||
| 848 | VkImageViewCreateInfo imageViewCreateInfo = { 0 }; | ||
| 849 | imageViewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; | ||
| 850 | imageViewCreateInfo.image = imageOut->image; | ||
| 851 | imageViewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; | ||
| 852 | imageViewCreateInfo.format = format; | ||
| 853 | imageViewCreateInfo.components = swizzle; | ||
| 854 | imageViewCreateInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | ||
| 855 | imageViewCreateInfo.subresourceRange.baseMipLevel = 0; | ||
| 856 | imageViewCreateInfo.subresourceRange.levelCount = 1; | ||
| 857 | imageViewCreateInfo.subresourceRange.baseArrayLayer = 0; | ||
| 858 | imageViewCreateInfo.subresourceRange.layerCount = 1; | ||
| 859 | |||
| 860 | // If it's a YCbCr image, we need to pass the conversion info to the VkImageView (and the VkSampler) | ||
| 861 | if (samplerYcbcrConversion != VK_NULL_HANDLE) { | ||
| 862 | samplerYcbcrConversionInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR; | ||
| 863 | samplerYcbcrConversionInfo.conversion = samplerYcbcrConversion; | ||
| 864 | imageViewCreateInfo.pNext = &samplerYcbcrConversionInfo; | ||
| 865 | } | ||
| 866 | |||
| 867 | result = vkCreateImageView(rendererData->device, &imageViewCreateInfo, NULL, &imageOut->imageView); | ||
| 868 | if (result != VK_SUCCESS) { | ||
| 869 | VULKAN_DestroyImage(rendererData, imageOut); | ||
| 870 | SET_ERROR_CODE("vkCreateImageView()", result); | ||
| 871 | return result; | ||
| 872 | } | ||
| 873 | |||
| 874 | return result; | ||
| 875 | } | ||
| 876 | |||
| 877 | |||
| 878 | static void VULKAN_RecordPipelineImageBarrier(VULKAN_RenderData *rendererData, VkAccessFlags sourceAccessMask, VkAccessFlags destAccessMask, | ||
| 879 | VkPipelineStageFlags srcStageFlags, VkPipelineStageFlags dstStageFlags, VkImageLayout destLayout, VkImage image, VkImageLayout *imageLayout) | ||
| 880 | { | ||
| 881 | // Stop any outstanding renderpass if open | ||
| 882 | if (rendererData->currentRenderPass != VK_NULL_HANDLE) { | ||
| 883 | vkCmdEndRenderPass(rendererData->currentCommandBuffer); | ||
| 884 | rendererData->currentRenderPass = VK_NULL_HANDLE; | ||
| 885 | } | ||
| 886 | |||
| 887 | VkImageMemoryBarrier barrier = { 0 }; | ||
| 888 | barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; | ||
| 889 | barrier.srcAccessMask = sourceAccessMask; | ||
| 890 | barrier.dstAccessMask = destAccessMask; | ||
| 891 | barrier.oldLayout = *imageLayout; | ||
| 892 | barrier.newLayout = destLayout; | ||
| 893 | barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; | ||
| 894 | barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; | ||
| 895 | barrier.image = image; | ||
| 896 | barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | ||
| 897 | barrier.subresourceRange.baseMipLevel = 0; | ||
| 898 | barrier.subresourceRange.levelCount = 1; | ||
| 899 | barrier.subresourceRange.baseArrayLayer = 0; | ||
| 900 | barrier.subresourceRange.layerCount = 1; | ||
| 901 | vkCmdPipelineBarrier(rendererData->currentCommandBuffer, srcStageFlags, dstStageFlags, 0, 0, NULL, 0, NULL, 1, &barrier); | ||
| 902 | *imageLayout = destLayout; | ||
| 903 | } | ||
| 904 | |||
| 905 | static VkResult VULKAN_AcquireNextSwapchainImage(SDL_Renderer *renderer) | ||
| 906 | { | ||
| 907 | VULKAN_RenderData *rendererData = ( VULKAN_RenderData * )renderer->internal; | ||
| 908 | |||
| 909 | VkResult result; | ||
| 910 | |||
| 911 | rendererData->currentImageAvailableSemaphore = VK_NULL_HANDLE; | ||
| 912 | result = vkAcquireNextImageKHR(rendererData->device, rendererData->swapchain, UINT64_MAX, | ||
| 913 | rendererData->imageAvailableSemaphores[rendererData->currentCommandBufferIndex], VK_NULL_HANDLE, &rendererData->currentSwapchainImageIndex); | ||
| 914 | if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_ERROR_SURFACE_LOST_KHR) { | ||
| 915 | result = VULKAN_CreateWindowSizeDependentResources(renderer); | ||
| 916 | return result; | ||
| 917 | } else if(result == VK_SUBOPTIMAL_KHR) { | ||
| 918 | // Suboptimal, but we can contiue | ||
| 919 | } else if (result != VK_SUCCESS) { | ||
| 920 | SET_ERROR_CODE("vkAcquireNextImageKHR()", result); | ||
| 921 | return result; | ||
| 922 | } | ||
| 923 | rendererData->currentImageAvailableSemaphore = rendererData->imageAvailableSemaphores[rendererData->currentCommandBufferIndex]; | ||
| 924 | return result; | ||
| 925 | } | ||
| 926 | |||
| 927 | static void VULKAN_BeginRenderPass(VULKAN_RenderData *rendererData, VkAttachmentLoadOp loadOp, VkClearColorValue *clearColor) | ||
| 928 | { | ||
| 929 | int width = rendererData->swapchainSize.width; | ||
| 930 | int height = rendererData->swapchainSize.height; | ||
| 931 | if (rendererData->textureRenderTarget) { | ||
| 932 | width = rendererData->textureRenderTarget->width; | ||
| 933 | height = rendererData->textureRenderTarget->height; | ||
| 934 | } | ||
| 935 | |||
| 936 | switch (loadOp) { | ||
| 937 | case VK_ATTACHMENT_LOAD_OP_CLEAR: | ||
| 938 | rendererData->currentRenderPass = rendererData->textureRenderTarget ? | ||
| 939 | rendererData->textureRenderTarget->mainRenderpasses[VULKAN_RENDERPASS_CLEAR] : | ||
| 940 | rendererData->renderPasses[VULKAN_RENDERPASS_CLEAR]; | ||
| 941 | break; | ||
| 942 | |||
| 943 | case VK_ATTACHMENT_LOAD_OP_LOAD: | ||
| 944 | default: | ||
| 945 | rendererData->currentRenderPass = rendererData->textureRenderTarget ? | ||
| 946 | rendererData->textureRenderTarget->mainRenderpasses[VULKAN_RENDERPASS_LOAD] : | ||
| 947 | rendererData->renderPasses[VULKAN_RENDERPASS_LOAD]; | ||
| 948 | break; | ||
| 949 | } | ||
| 950 | |||
| 951 | VkFramebuffer framebuffer = rendererData->textureRenderTarget ? | ||
| 952 | rendererData->textureRenderTarget->mainFramebuffer : | ||
| 953 | rendererData->framebuffers[rendererData->currentSwapchainImageIndex]; | ||
| 954 | |||
| 955 | VkRenderPassBeginInfo renderPassBeginInfo = { 0 }; | ||
| 956 | renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; | ||
| 957 | renderPassBeginInfo.pNext = NULL; | ||
| 958 | renderPassBeginInfo.renderPass = rendererData->currentRenderPass; | ||
| 959 | renderPassBeginInfo.framebuffer = framebuffer; | ||
| 960 | renderPassBeginInfo.renderArea.offset.x = 0; | ||
| 961 | renderPassBeginInfo.renderArea.offset.y = 0; | ||
| 962 | renderPassBeginInfo.renderArea.extent.width = width; | ||
| 963 | renderPassBeginInfo.renderArea.extent.height = height; | ||
| 964 | renderPassBeginInfo.clearValueCount = (clearColor == NULL) ? 0 : 1; | ||
| 965 | VkClearValue clearValue; | ||
| 966 | if (clearColor != NULL) { | ||
| 967 | clearValue.color = *clearColor; | ||
| 968 | renderPassBeginInfo.pClearValues = &clearValue; | ||
| 969 | } | ||
| 970 | vkCmdBeginRenderPass(rendererData->currentCommandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); | ||
| 971 | } | ||
| 972 | |||
| 973 | static void VULKAN_EnsureCommandBuffer(VULKAN_RenderData *rendererData) | ||
| 974 | { | ||
| 975 | if (rendererData->currentCommandBuffer == VK_NULL_HANDLE) { | ||
| 976 | rendererData->currentCommandBuffer = rendererData->commandBuffers[rendererData->currentCommandBufferIndex]; | ||
| 977 | VULKAN_ResetCommandList(rendererData); | ||
| 978 | |||
| 979 | // Ensure the swapchain is in the correct layout | ||
| 980 | if (rendererData->swapchainImageLayouts[rendererData->currentSwapchainImageIndex] == VK_IMAGE_LAYOUT_UNDEFINED) { | ||
| 981 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 982 | 0, | ||
| 983 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 984 | VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | ||
| 985 | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 986 | VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | ||
| 987 | rendererData->swapchainImages[rendererData->currentSwapchainImageIndex], | ||
| 988 | &rendererData->swapchainImageLayouts[rendererData->currentSwapchainImageIndex]); | ||
| 989 | } | ||
| 990 | else if (rendererData->swapchainImageLayouts[rendererData->currentCommandBufferIndex] != VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) { | ||
| 991 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 992 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, | ||
| 993 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 994 | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 995 | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 996 | VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | ||
| 997 | rendererData->swapchainImages[rendererData->currentSwapchainImageIndex], | ||
| 998 | &rendererData->swapchainImageLayouts[rendererData->currentSwapchainImageIndex]); | ||
| 999 | } | ||
| 1000 | } | ||
| 1001 | } | ||
| 1002 | |||
| 1003 | static bool VULKAN_ActivateCommandBuffer(SDL_Renderer *renderer, VkAttachmentLoadOp loadOp, VkClearColorValue *clearColor, VULKAN_DrawStateCache *stateCache) | ||
| 1004 | { | ||
| 1005 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 1006 | |||
| 1007 | VULKAN_EnsureCommandBuffer(rendererData); | ||
| 1008 | |||
| 1009 | if (rendererData->currentRenderPass == VK_NULL_HANDLE || loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR) { | ||
| 1010 | if (rendererData->currentRenderPass != VK_NULL_HANDLE) { | ||
| 1011 | vkCmdEndRenderPass(rendererData->currentCommandBuffer); | ||
| 1012 | rendererData->currentRenderPass = VK_NULL_HANDLE; | ||
| 1013 | } | ||
| 1014 | VULKAN_BeginRenderPass(rendererData, loadOp, clearColor); | ||
| 1015 | } | ||
| 1016 | |||
| 1017 | // Bind cached VB now | ||
| 1018 | if (stateCache->vertexBuffer != VK_NULL_HANDLE) { | ||
| 1019 | VkDeviceSize offset = 0; | ||
| 1020 | vkCmdBindVertexBuffers(rendererData->currentCommandBuffer, 0, 1, &stateCache->vertexBuffer, &offset); | ||
| 1021 | } | ||
| 1022 | |||
| 1023 | return true; | ||
| 1024 | } | ||
| 1025 | |||
| 1026 | static void VULKAN_WaitForGPU(VULKAN_RenderData *rendererData) | ||
| 1027 | { | ||
| 1028 | vkQueueWaitIdle(rendererData->graphicsQueue); | ||
| 1029 | } | ||
| 1030 | |||
| 1031 | |||
| 1032 | static void VULKAN_ResetCommandList(VULKAN_RenderData *rendererData) | ||
| 1033 | { | ||
| 1034 | vkResetCommandBuffer(rendererData->currentCommandBuffer, 0); | ||
| 1035 | for (uint32_t i = 0; i < rendererData->numDescriptorPools[rendererData->currentCommandBufferIndex]; i++) { | ||
| 1036 | vkResetDescriptorPool(rendererData->device, rendererData->descriptorPools[rendererData->currentCommandBufferIndex][i], 0); | ||
| 1037 | } | ||
| 1038 | |||
| 1039 | VkCommandBufferBeginInfo beginInfo = { 0 }; | ||
| 1040 | beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; | ||
| 1041 | beginInfo.flags = 0; | ||
| 1042 | vkBeginCommandBuffer(rendererData->currentCommandBuffer, &beginInfo); | ||
| 1043 | |||
| 1044 | rendererData->currentPipelineState = NULL; | ||
| 1045 | rendererData->currentVertexBuffer = 0; | ||
| 1046 | rendererData->issueBatch = false; | ||
| 1047 | rendererData->cliprectDirty = true; | ||
| 1048 | rendererData->currentDescriptorSetIndex = 0; | ||
| 1049 | rendererData->currentDescriptorPoolIndex = 0; | ||
| 1050 | rendererData->currentConstantBufferOffset = -1; | ||
| 1051 | rendererData->currentConstantBufferIndex = 0; | ||
| 1052 | |||
| 1053 | // Release any upload buffers that were inflight | ||
| 1054 | for (int i = 0; i < rendererData->currentUploadBuffer[rendererData->currentCommandBufferIndex]; ++i) { | ||
| 1055 | VULKAN_DestroyBuffer(rendererData, &rendererData->uploadBuffers[rendererData->currentCommandBufferIndex][i]); | ||
| 1056 | } | ||
| 1057 | rendererData->currentUploadBuffer[rendererData->currentCommandBufferIndex] = 0; | ||
| 1058 | } | ||
| 1059 | |||
| 1060 | static VkResult VULKAN_IssueBatch(VULKAN_RenderData *rendererData) | ||
| 1061 | { | ||
| 1062 | VkResult result; | ||
| 1063 | if (rendererData->currentCommandBuffer == VK_NULL_HANDLE) { | ||
| 1064 | return VK_SUCCESS; | ||
| 1065 | } | ||
| 1066 | |||
| 1067 | if (rendererData->currentRenderPass) { | ||
| 1068 | vkCmdEndRenderPass(rendererData->currentCommandBuffer); | ||
| 1069 | rendererData->currentRenderPass = VK_NULL_HANDLE; | ||
| 1070 | } | ||
| 1071 | |||
| 1072 | rendererData->currentPipelineState = VK_NULL_HANDLE; | ||
| 1073 | rendererData->viewportDirty = true; | ||
| 1074 | |||
| 1075 | vkEndCommandBuffer(rendererData->currentCommandBuffer); | ||
| 1076 | |||
| 1077 | VkSubmitInfo submitInfo = { 0 }; | ||
| 1078 | VkPipelineStageFlags waitDestStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; | ||
| 1079 | submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; | ||
| 1080 | submitInfo.commandBufferCount = 1; | ||
| 1081 | submitInfo.pCommandBuffers = &rendererData->currentCommandBuffer; | ||
| 1082 | if (rendererData->waitRenderSemaphoreCount > 0) { | ||
| 1083 | Uint32 additionalSemaphoreCount = (rendererData->currentImageAvailableSemaphore != VK_NULL_HANDLE) ? 1 : 0; | ||
| 1084 | submitInfo.waitSemaphoreCount = rendererData->waitRenderSemaphoreCount + additionalSemaphoreCount; | ||
| 1085 | if (additionalSemaphoreCount > 0) { | ||
| 1086 | rendererData->waitRenderSemaphores[rendererData->waitRenderSemaphoreCount] = rendererData->currentImageAvailableSemaphore; | ||
| 1087 | rendererData->waitDestStageMasks[rendererData->waitRenderSemaphoreCount] = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; | ||
| 1088 | } | ||
| 1089 | submitInfo.pWaitSemaphores = rendererData->waitRenderSemaphores; | ||
| 1090 | submitInfo.pWaitDstStageMask = rendererData->waitDestStageMasks; | ||
| 1091 | rendererData->waitRenderSemaphoreCount = 0; | ||
| 1092 | } else if (rendererData->currentImageAvailableSemaphore != VK_NULL_HANDLE) { | ||
| 1093 | submitInfo.waitSemaphoreCount = 1; | ||
| 1094 | submitInfo.pWaitSemaphores = &rendererData->currentImageAvailableSemaphore; | ||
| 1095 | submitInfo.pWaitDstStageMask = &waitDestStageMask; | ||
| 1096 | } | ||
| 1097 | |||
| 1098 | result = vkQueueSubmit(rendererData->graphicsQueue, 1, &submitInfo, VK_NULL_HANDLE); | ||
| 1099 | rendererData->currentImageAvailableSemaphore = VK_NULL_HANDLE; | ||
| 1100 | |||
| 1101 | VULKAN_WaitForGPU(rendererData); | ||
| 1102 | |||
| 1103 | VULKAN_ResetCommandList(rendererData); | ||
| 1104 | |||
| 1105 | return result; | ||
| 1106 | } | ||
| 1107 | |||
| 1108 | static void VULKAN_DestroyRenderer(SDL_Renderer *renderer) | ||
| 1109 | { | ||
| 1110 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 1111 | if (rendererData) { | ||
| 1112 | if (rendererData->device != VK_NULL_HANDLE) { | ||
| 1113 | vkDeviceWaitIdle(rendererData->device); | ||
| 1114 | VULKAN_DestroyAll(renderer); | ||
| 1115 | } | ||
| 1116 | SDL_free(rendererData); | ||
| 1117 | } | ||
| 1118 | } | ||
| 1119 | |||
| 1120 | static VkBlendFactor GetBlendFactor(SDL_BlendFactor factor) | ||
| 1121 | { | ||
| 1122 | switch (factor) { | ||
| 1123 | case SDL_BLENDFACTOR_ZERO: | ||
| 1124 | return VK_BLEND_FACTOR_ZERO; | ||
| 1125 | case SDL_BLENDFACTOR_ONE: | ||
| 1126 | return VK_BLEND_FACTOR_ONE; | ||
| 1127 | case SDL_BLENDFACTOR_SRC_COLOR: | ||
| 1128 | return VK_BLEND_FACTOR_SRC_COLOR; | ||
| 1129 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR: | ||
| 1130 | return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR; | ||
| 1131 | case SDL_BLENDFACTOR_SRC_ALPHA: | ||
| 1132 | return VK_BLEND_FACTOR_SRC_ALPHA; | ||
| 1133 | case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA: | ||
| 1134 | return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; | ||
| 1135 | case SDL_BLENDFACTOR_DST_COLOR: | ||
| 1136 | return VK_BLEND_FACTOR_DST_COLOR; | ||
| 1137 | case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR: | ||
| 1138 | return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR; | ||
| 1139 | case SDL_BLENDFACTOR_DST_ALPHA: | ||
| 1140 | return VK_BLEND_FACTOR_DST_ALPHA; | ||
| 1141 | case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA: | ||
| 1142 | return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA; | ||
| 1143 | default: | ||
| 1144 | return VK_BLEND_FACTOR_MAX_ENUM; | ||
| 1145 | } | ||
| 1146 | } | ||
| 1147 | |||
| 1148 | static VkBlendOp GetBlendOp(SDL_BlendOperation operation) | ||
| 1149 | { | ||
| 1150 | switch (operation) { | ||
| 1151 | case SDL_BLENDOPERATION_ADD: | ||
| 1152 | return VK_BLEND_OP_ADD; | ||
| 1153 | case SDL_BLENDOPERATION_SUBTRACT: | ||
| 1154 | return VK_BLEND_OP_SUBTRACT; | ||
| 1155 | case SDL_BLENDOPERATION_REV_SUBTRACT: | ||
| 1156 | return VK_BLEND_OP_REVERSE_SUBTRACT; | ||
| 1157 | case SDL_BLENDOPERATION_MINIMUM: | ||
| 1158 | return VK_BLEND_OP_MIN; | ||
| 1159 | case SDL_BLENDOPERATION_MAXIMUM: | ||
| 1160 | return VK_BLEND_OP_MAX; | ||
| 1161 | default: | ||
| 1162 | return VK_BLEND_OP_MAX_ENUM; | ||
| 1163 | } | ||
| 1164 | } | ||
| 1165 | |||
| 1166 | |||
| 1167 | static VULKAN_PipelineState *VULKAN_CreatePipelineState(SDL_Renderer *renderer, | ||
| 1168 | VULKAN_Shader shader, VkPipelineLayout pipelineLayout, VkDescriptorSetLayout descriptorSetLayout, SDL_BlendMode blendMode, VkPrimitiveTopology topology, VkFormat format) | ||
| 1169 | { | ||
| 1170 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 1171 | VULKAN_PipelineState *pipelineStates; | ||
| 1172 | VkPipeline pipeline = VK_NULL_HANDLE; | ||
| 1173 | VkResult result = VK_SUCCESS; | ||
| 1174 | VkPipelineVertexInputStateCreateInfo vertexInputCreateInfo = { 0 }; | ||
| 1175 | VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCreateInfo = { 0 }; | ||
| 1176 | VkVertexInputAttributeDescription attributeDescriptions[3]; | ||
| 1177 | VkVertexInputBindingDescription bindingDescriptions[1]; | ||
| 1178 | VkPipelineShaderStageCreateInfo shaderStageCreateInfo[2]; | ||
| 1179 | VkPipelineDynamicStateCreateInfo dynamicStateCreateInfo = { 0 }; | ||
| 1180 | VkPipelineViewportStateCreateInfo viewportStateCreateInfo = { 0 }; | ||
| 1181 | VkPipelineRasterizationStateCreateInfo rasterizationStateCreateInfo = { 0 }; | ||
| 1182 | VkPipelineMultisampleStateCreateInfo multisampleStateCreateInfo = { 0 }; | ||
| 1183 | VkPipelineDepthStencilStateCreateInfo depthStencilStateCreateInfo = { 0 }; | ||
| 1184 | VkPipelineColorBlendStateCreateInfo colorBlendStateCreateInfo = { 0 }; | ||
| 1185 | |||
| 1186 | VkGraphicsPipelineCreateInfo pipelineCreateInfo = { 0 }; | ||
| 1187 | pipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; | ||
| 1188 | pipelineCreateInfo.flags = 0; | ||
| 1189 | pipelineCreateInfo.pStages = shaderStageCreateInfo; | ||
| 1190 | pipelineCreateInfo.pVertexInputState = &vertexInputCreateInfo; | ||
| 1191 | pipelineCreateInfo.pInputAssemblyState = &inputAssemblyStateCreateInfo; | ||
| 1192 | pipelineCreateInfo.pViewportState = &viewportStateCreateInfo; | ||
| 1193 | pipelineCreateInfo.pRasterizationState = &rasterizationStateCreateInfo; | ||
| 1194 | pipelineCreateInfo.pMultisampleState = &multisampleStateCreateInfo; | ||
| 1195 | pipelineCreateInfo.pDepthStencilState = &depthStencilStateCreateInfo; | ||
| 1196 | pipelineCreateInfo.pColorBlendState = &colorBlendStateCreateInfo; | ||
| 1197 | pipelineCreateInfo.pDynamicState = &dynamicStateCreateInfo; | ||
| 1198 | |||
| 1199 | // Shaders | ||
| 1200 | const char *name = "main"; | ||
| 1201 | for (uint32_t i = 0; i < 2; i++) { | ||
| 1202 | SDL_memset(&shaderStageCreateInfo[i], 0, sizeof(shaderStageCreateInfo[i])); | ||
| 1203 | shaderStageCreateInfo[i].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; | ||
| 1204 | shaderStageCreateInfo[i].module = (i == 0) ? rendererData->vertexShaderModules[shader] : rendererData->fragmentShaderModules[shader]; | ||
| 1205 | shaderStageCreateInfo[i].stage = (i == 0) ? VK_SHADER_STAGE_VERTEX_BIT : VK_SHADER_STAGE_FRAGMENT_BIT; | ||
| 1206 | shaderStageCreateInfo[i].pName = name; | ||
| 1207 | } | ||
| 1208 | pipelineCreateInfo.stageCount = 2; | ||
| 1209 | pipelineCreateInfo.pStages = &shaderStageCreateInfo[0]; | ||
| 1210 | |||
| 1211 | |||
| 1212 | // Vertex input | ||
| 1213 | vertexInputCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; | ||
| 1214 | vertexInputCreateInfo.vertexAttributeDescriptionCount = 3; | ||
| 1215 | vertexInputCreateInfo.pVertexAttributeDescriptions = &attributeDescriptions[0]; | ||
| 1216 | vertexInputCreateInfo.vertexBindingDescriptionCount = 1; | ||
| 1217 | vertexInputCreateInfo.pVertexBindingDescriptions = &bindingDescriptions[0]; | ||
| 1218 | |||
| 1219 | attributeDescriptions[ 0 ].binding = 0; | ||
| 1220 | attributeDescriptions[ 0 ].format = VK_FORMAT_R32G32_SFLOAT; | ||
| 1221 | attributeDescriptions[ 0 ].location = 0; | ||
| 1222 | attributeDescriptions[ 0 ].offset = 0; | ||
| 1223 | attributeDescriptions[ 1 ].binding = 0; | ||
| 1224 | attributeDescriptions[ 1 ].format = VK_FORMAT_R32G32_SFLOAT; | ||
| 1225 | attributeDescriptions[ 1 ].location = 1; | ||
| 1226 | attributeDescriptions[ 1 ].offset = 8; | ||
| 1227 | attributeDescriptions[ 2 ].binding = 0; | ||
| 1228 | attributeDescriptions[ 2 ].format = VK_FORMAT_R32G32B32A32_SFLOAT; | ||
| 1229 | attributeDescriptions[ 2 ].location = 2; | ||
| 1230 | attributeDescriptions[ 2 ].offset = 16; | ||
| 1231 | |||
| 1232 | bindingDescriptions[ 0 ].binding = 0; | ||
| 1233 | bindingDescriptions[ 0 ].inputRate = VK_VERTEX_INPUT_RATE_VERTEX; | ||
| 1234 | bindingDescriptions[ 0 ].stride = 32; | ||
| 1235 | |||
| 1236 | // Input assembly | ||
| 1237 | inputAssemblyStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; | ||
| 1238 | inputAssemblyStateCreateInfo.topology = topology; | ||
| 1239 | inputAssemblyStateCreateInfo.primitiveRestartEnable = VK_FALSE; | ||
| 1240 | |||
| 1241 | viewportStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; | ||
| 1242 | viewportStateCreateInfo.scissorCount = 1; | ||
| 1243 | viewportStateCreateInfo.viewportCount = 1; | ||
| 1244 | |||
| 1245 | // Dynamic states | ||
| 1246 | dynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; | ||
| 1247 | VkDynamicState dynamicStates[2] = { | ||
| 1248 | VK_DYNAMIC_STATE_VIEWPORT, | ||
| 1249 | VK_DYNAMIC_STATE_SCISSOR | ||
| 1250 | }; | ||
| 1251 | dynamicStateCreateInfo.dynamicStateCount = SDL_arraysize(dynamicStates); | ||
| 1252 | dynamicStateCreateInfo.pDynamicStates = dynamicStates; | ||
| 1253 | |||
| 1254 | // Rasterization state | ||
| 1255 | rasterizationStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; | ||
| 1256 | rasterizationStateCreateInfo.depthClampEnable = VK_FALSE; | ||
| 1257 | rasterizationStateCreateInfo.rasterizerDiscardEnable = VK_FALSE; | ||
| 1258 | rasterizationStateCreateInfo.cullMode = VK_CULL_MODE_NONE; | ||
| 1259 | rasterizationStateCreateInfo.polygonMode = VK_POLYGON_MODE_FILL; | ||
| 1260 | rasterizationStateCreateInfo.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; | ||
| 1261 | rasterizationStateCreateInfo.depthBiasEnable = VK_FALSE; | ||
| 1262 | rasterizationStateCreateInfo.depthBiasConstantFactor = 0.0f; | ||
| 1263 | rasterizationStateCreateInfo.depthBiasClamp = 0.0f; | ||
| 1264 | rasterizationStateCreateInfo.depthBiasSlopeFactor = 0.0f; | ||
| 1265 | rasterizationStateCreateInfo.lineWidth = 1.0f; | ||
| 1266 | |||
| 1267 | // MSAA state | ||
| 1268 | multisampleStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; | ||
| 1269 | VkSampleMask multiSampleMask = 0xFFFFFFFF; | ||
| 1270 | multisampleStateCreateInfo.pSampleMask = &multiSampleMask; | ||
| 1271 | multisampleStateCreateInfo.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; | ||
| 1272 | |||
| 1273 | // Depth Stencil | ||
| 1274 | depthStencilStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; | ||
| 1275 | |||
| 1276 | // Color blend | ||
| 1277 | VkPipelineColorBlendAttachmentState colorBlendAttachment = { 0 }; | ||
| 1278 | colorBlendStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; | ||
| 1279 | colorBlendStateCreateInfo.attachmentCount = 1; | ||
| 1280 | colorBlendStateCreateInfo.pAttachments = &colorBlendAttachment; | ||
| 1281 | colorBlendAttachment.blendEnable = VK_TRUE; | ||
| 1282 | colorBlendAttachment.srcColorBlendFactor = GetBlendFactor(SDL_GetBlendModeSrcColorFactor(blendMode)); | ||
| 1283 | colorBlendAttachment.srcAlphaBlendFactor = GetBlendFactor(SDL_GetBlendModeSrcAlphaFactor(blendMode)); | ||
| 1284 | colorBlendAttachment.colorBlendOp = GetBlendOp(SDL_GetBlendModeColorOperation(blendMode)); | ||
| 1285 | colorBlendAttachment.dstColorBlendFactor = GetBlendFactor(SDL_GetBlendModeDstColorFactor(blendMode)); | ||
| 1286 | colorBlendAttachment.dstAlphaBlendFactor = GetBlendFactor(SDL_GetBlendModeDstAlphaFactor(blendMode)); | ||
| 1287 | colorBlendAttachment.alphaBlendOp = GetBlendOp(SDL_GetBlendModeAlphaOperation(blendMode)); | ||
| 1288 | colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; | ||
| 1289 | |||
| 1290 | // Renderpass / layout | ||
| 1291 | pipelineCreateInfo.renderPass = rendererData->currentRenderPass; | ||
| 1292 | pipelineCreateInfo.subpass = 0; | ||
| 1293 | pipelineCreateInfo.layout = pipelineLayout; | ||
| 1294 | |||
| 1295 | result = vkCreateGraphicsPipelines(rendererData->device, VK_NULL_HANDLE, 1, &pipelineCreateInfo, NULL, &pipeline); | ||
| 1296 | if (result != VK_SUCCESS) { | ||
| 1297 | SET_ERROR_CODE("vkCreateGraphicsPipelines()", result); | ||
| 1298 | return NULL; | ||
| 1299 | } | ||
| 1300 | |||
| 1301 | pipelineStates = (VULKAN_PipelineState *)SDL_realloc(rendererData->pipelineStates, (rendererData->pipelineStateCount + 1) * sizeof(*pipelineStates)); | ||
| 1302 | if (!pipelineStates) { | ||
| 1303 | return NULL; | ||
| 1304 | } | ||
| 1305 | pipelineStates[rendererData->pipelineStateCount].shader = shader; | ||
| 1306 | pipelineStates[rendererData->pipelineStateCount].blendMode = blendMode; | ||
| 1307 | pipelineStates[rendererData->pipelineStateCount].topology = topology; | ||
| 1308 | pipelineStates[rendererData->pipelineStateCount].format = format; | ||
| 1309 | pipelineStates[rendererData->pipelineStateCount].pipeline = pipeline; | ||
| 1310 | pipelineStates[rendererData->pipelineStateCount].descriptorSetLayout = descriptorSetLayout; | ||
| 1311 | pipelineStates[rendererData->pipelineStateCount].pipelineLayout = pipelineCreateInfo.layout; | ||
| 1312 | rendererData->pipelineStates = pipelineStates; | ||
| 1313 | ++rendererData->pipelineStateCount; | ||
| 1314 | |||
| 1315 | return &pipelineStates[rendererData->pipelineStateCount - 1]; | ||
| 1316 | } | ||
| 1317 | |||
| 1318 | static bool VULKAN_FindMemoryTypeIndex(VULKAN_RenderData *rendererData, uint32_t typeBits, VkMemoryPropertyFlags requiredFlags, VkMemoryPropertyFlags desiredFlags, uint32_t *memoryTypeIndexOut) | ||
| 1319 | { | ||
| 1320 | uint32_t memoryTypeIndex = 0; | ||
| 1321 | bool foundExactMatch = false; | ||
| 1322 | |||
| 1323 | // Desired flags must be a superset of required flags. | ||
| 1324 | desiredFlags |= requiredFlags; | ||
| 1325 | |||
| 1326 | for (memoryTypeIndex = 0; memoryTypeIndex < rendererData->physicalDeviceMemoryProperties.memoryTypeCount; memoryTypeIndex++) { | ||
| 1327 | if (typeBits & (1 << memoryTypeIndex)) { | ||
| 1328 | if (rendererData->physicalDeviceMemoryProperties.memoryTypes[memoryTypeIndex].propertyFlags == desiredFlags) { | ||
| 1329 | foundExactMatch = true; | ||
| 1330 | break; | ||
| 1331 | } | ||
| 1332 | } | ||
| 1333 | } | ||
| 1334 | if (!foundExactMatch) { | ||
| 1335 | for (memoryTypeIndex = 0; memoryTypeIndex < rendererData->physicalDeviceMemoryProperties.memoryTypeCount; memoryTypeIndex++) { | ||
| 1336 | if (typeBits & (1 << memoryTypeIndex)) { | ||
| 1337 | if ((rendererData->physicalDeviceMemoryProperties.memoryTypes[memoryTypeIndex].propertyFlags & requiredFlags) == requiredFlags) { | ||
| 1338 | break; | ||
| 1339 | } | ||
| 1340 | } | ||
| 1341 | } | ||
| 1342 | } | ||
| 1343 | |||
| 1344 | if (memoryTypeIndex >= rendererData->physicalDeviceMemoryProperties.memoryTypeCount) { | ||
| 1345 | SET_ERROR_MESSAGE("Unable to find memory type for allocation"); | ||
| 1346 | return false; | ||
| 1347 | } | ||
| 1348 | *memoryTypeIndexOut = memoryTypeIndex; | ||
| 1349 | return true; | ||
| 1350 | } | ||
| 1351 | |||
| 1352 | static VkResult VULKAN_CreateVertexBuffer(VULKAN_RenderData *rendererData, size_t vbidx, size_t size) | ||
| 1353 | { | ||
| 1354 | VkResult result; | ||
| 1355 | |||
| 1356 | VULKAN_DestroyBuffer(rendererData, &rendererData->vertexBuffers[vbidx]); | ||
| 1357 | |||
| 1358 | result = VULKAN_AllocateBuffer(rendererData, size, | ||
| 1359 | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, | ||
| 1360 | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | | ||
| 1361 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, | ||
| 1362 | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, | ||
| 1363 | &rendererData->vertexBuffers[vbidx]); | ||
| 1364 | if (result != VK_SUCCESS) { | ||
| 1365 | return result; | ||
| 1366 | } | ||
| 1367 | return result; | ||
| 1368 | } | ||
| 1369 | |||
| 1370 | static bool VULKAN_LoadGlobalFunctions(VULKAN_RenderData *rendererData) | ||
| 1371 | { | ||
| 1372 | #define VULKAN_DEVICE_FUNCTION(name) | ||
| 1373 | #define VULKAN_GLOBAL_FUNCTION(name) \ | ||
| 1374 | name = (PFN_##name)rendererData->vkGetInstanceProcAddr(VK_NULL_HANDLE, #name); \ | ||
| 1375 | if (!name) { \ | ||
| 1376 | SET_ERROR_MESSAGE("vkGetInstanceProcAddr(VK_NULL_HANDLE, \"" #name "\") failed"); \ | ||
| 1377 | return false; \ | ||
| 1378 | } | ||
| 1379 | #define VULKAN_INSTANCE_FUNCTION(name) | ||
| 1380 | #define VULKAN_OPTIONAL_INSTANCE_FUNCTION(name) | ||
| 1381 | #define VULKAN_OPTIONAL_DEVICE_FUNCTION(name) | ||
| 1382 | VULKAN_FUNCTIONS() | ||
| 1383 | #undef VULKAN_DEVICE_FUNCTION | ||
| 1384 | #undef VULKAN_GLOBAL_FUNCTION | ||
| 1385 | #undef VULKAN_INSTANCE_FUNCTION | ||
| 1386 | #undef VULKAN_OPTIONAL_INSTANCE_FUNCTION | ||
| 1387 | #undef VULKAN_OPTIONAL_DEVICE_FUNCTION | ||
| 1388 | |||
| 1389 | return true; | ||
| 1390 | } | ||
| 1391 | |||
| 1392 | static bool VULKAN_LoadInstanceFunctions(VULKAN_RenderData *rendererData) | ||
| 1393 | { | ||
| 1394 | #define VULKAN_DEVICE_FUNCTION(name) | ||
| 1395 | #define VULKAN_GLOBAL_FUNCTION(name) | ||
| 1396 | #define VULKAN_INSTANCE_FUNCTION(name) \ | ||
| 1397 | name = (PFN_##name)rendererData->vkGetInstanceProcAddr(rendererData->instance, #name); \ | ||
| 1398 | if (!name) { \ | ||
| 1399 | SET_ERROR_MESSAGE("vkGetInstanceProcAddr(instance, \"" #name "\") failed"); \ | ||
| 1400 | return false; \ | ||
| 1401 | } | ||
| 1402 | #define VULKAN_OPTIONAL_INSTANCE_FUNCTION(name) \ | ||
| 1403 | name = (PFN_##name)rendererData->vkGetInstanceProcAddr(rendererData->instance, #name); | ||
| 1404 | #define VULKAN_OPTIONAL_DEVICE_FUNCTION(name) | ||
| 1405 | |||
| 1406 | VULKAN_FUNCTIONS() | ||
| 1407 | #undef VULKAN_DEVICE_FUNCTION | ||
| 1408 | #undef VULKAN_GLOBAL_FUNCTION | ||
| 1409 | #undef VULKAN_INSTANCE_FUNCTION | ||
| 1410 | #undef VULKAN_OPTIONAL_INSTANCE_FUNCTION | ||
| 1411 | #undef VULKAN_OPTIONAL_DEVICE_FUNCTION | ||
| 1412 | |||
| 1413 | return true; | ||
| 1414 | } | ||
| 1415 | |||
| 1416 | static bool VULKAN_LoadDeviceFunctions(VULKAN_RenderData *rendererData) | ||
| 1417 | { | ||
| 1418 | #define VULKAN_DEVICE_FUNCTION(name) \ | ||
| 1419 | name = (PFN_##name)vkGetDeviceProcAddr(rendererData->device, #name); \ | ||
| 1420 | if (!name) { \ | ||
| 1421 | SET_ERROR_MESSAGE("vkGetDeviceProcAddr(device, \"" #name "\") failed"); \ | ||
| 1422 | return false; \ | ||
| 1423 | } | ||
| 1424 | #define VULKAN_GLOBAL_FUNCTION(name) | ||
| 1425 | #define VULKAN_OPTIONAL_DEVICE_FUNCTION(name) \ | ||
| 1426 | name = (PFN_##name)vkGetDeviceProcAddr(rendererData->device, #name); | ||
| 1427 | #define VULKAN_INSTANCE_FUNCTION(name) | ||
| 1428 | #define VULKAN_OPTIONAL_INSTANCE_FUNCTION(name) | ||
| 1429 | VULKAN_FUNCTIONS() | ||
| 1430 | #undef VULKAN_DEVICE_FUNCTION | ||
| 1431 | #undef VULKAN_GLOBAL_FUNCTION | ||
| 1432 | #undef VULKAN_INSTANCE_FUNCTION | ||
| 1433 | #undef VULKAN_OPTIONAL_INSTANCE_FUNCTION | ||
| 1434 | #undef VULKAN_OPTIONAL_DEVICE_FUNCTION | ||
| 1435 | return true; | ||
| 1436 | } | ||
| 1437 | |||
| 1438 | static VkResult VULKAN_FindPhysicalDevice(VULKAN_RenderData *rendererData) | ||
| 1439 | { | ||
| 1440 | uint32_t physicalDeviceCount = 0; | ||
| 1441 | VkPhysicalDevice *physicalDevices; | ||
| 1442 | VkQueueFamilyProperties *queueFamiliesProperties = NULL; | ||
| 1443 | uint32_t queueFamiliesPropertiesAllocatedSize = 0; | ||
| 1444 | VkExtensionProperties *deviceExtensions = NULL; | ||
| 1445 | uint32_t deviceExtensionsAllocatedSize = 0; | ||
| 1446 | uint32_t physicalDeviceIndex; | ||
| 1447 | VkResult result; | ||
| 1448 | |||
| 1449 | result = vkEnumeratePhysicalDevices(rendererData->instance, &physicalDeviceCount, NULL); | ||
| 1450 | if (result != VK_SUCCESS) { | ||
| 1451 | SET_ERROR_CODE("vkEnumeratePhysicalDevices()", result); | ||
| 1452 | return result; | ||
| 1453 | } | ||
| 1454 | if (physicalDeviceCount == 0) { | ||
| 1455 | SET_ERROR_MESSAGE("vkEnumeratePhysicalDevices(): no physical devices"); | ||
| 1456 | return VK_ERROR_UNKNOWN; | ||
| 1457 | } | ||
| 1458 | physicalDevices = (VkPhysicalDevice *)SDL_malloc(sizeof(VkPhysicalDevice) * physicalDeviceCount); | ||
| 1459 | result = vkEnumeratePhysicalDevices(rendererData->instance, &physicalDeviceCount, physicalDevices); | ||
| 1460 | if (result != VK_SUCCESS) { | ||
| 1461 | SDL_free(physicalDevices); | ||
| 1462 | SET_ERROR_CODE("vkEnumeratePhysicalDevices()", result); | ||
| 1463 | return result; | ||
| 1464 | } | ||
| 1465 | rendererData->physicalDevice = NULL; | ||
| 1466 | for (physicalDeviceIndex = 0; physicalDeviceIndex < physicalDeviceCount; physicalDeviceIndex++) { | ||
| 1467 | uint32_t queueFamiliesCount = 0; | ||
| 1468 | uint32_t queueFamilyIndex; | ||
| 1469 | uint32_t deviceExtensionCount = 0; | ||
| 1470 | bool hasSwapchainExtension = false; | ||
| 1471 | uint32_t i; | ||
| 1472 | |||
| 1473 | VkPhysicalDevice physicalDevice = physicalDevices[physicalDeviceIndex]; | ||
| 1474 | vkGetPhysicalDeviceProperties(physicalDevice, &rendererData->physicalDeviceProperties); | ||
| 1475 | if (VK_VERSION_MAJOR(rendererData->physicalDeviceProperties.apiVersion) < 1) { | ||
| 1476 | continue; | ||
| 1477 | } | ||
| 1478 | vkGetPhysicalDeviceMemoryProperties(physicalDevice, &rendererData->physicalDeviceMemoryProperties); | ||
| 1479 | vkGetPhysicalDeviceFeatures(physicalDevice, &rendererData->physicalDeviceFeatures); | ||
| 1480 | vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamiliesCount, NULL); | ||
| 1481 | if (queueFamiliesCount == 0) { | ||
| 1482 | continue; | ||
| 1483 | } | ||
| 1484 | if (queueFamiliesPropertiesAllocatedSize < queueFamiliesCount) { | ||
| 1485 | SDL_free(queueFamiliesProperties); | ||
| 1486 | queueFamiliesPropertiesAllocatedSize = queueFamiliesCount; | ||
| 1487 | queueFamiliesProperties = (VkQueueFamilyProperties *)SDL_malloc(sizeof(VkQueueFamilyProperties) * queueFamiliesPropertiesAllocatedSize); | ||
| 1488 | if (!queueFamiliesProperties) { | ||
| 1489 | SDL_free(physicalDevices); | ||
| 1490 | SDL_free(deviceExtensions); | ||
| 1491 | return VK_ERROR_UNKNOWN; | ||
| 1492 | } | ||
| 1493 | } | ||
| 1494 | vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamiliesCount, queueFamiliesProperties); | ||
| 1495 | rendererData->graphicsQueueFamilyIndex = queueFamiliesCount; | ||
| 1496 | rendererData->presentQueueFamilyIndex = queueFamiliesCount; | ||
| 1497 | for (queueFamilyIndex = 0; queueFamilyIndex < queueFamiliesCount; queueFamilyIndex++) { | ||
| 1498 | VkBool32 supported = 0; | ||
| 1499 | |||
| 1500 | if (queueFamiliesProperties[queueFamilyIndex].queueCount == 0) { | ||
| 1501 | continue; | ||
| 1502 | } | ||
| 1503 | |||
| 1504 | if (queueFamiliesProperties[queueFamilyIndex].queueFlags & VK_QUEUE_GRAPHICS_BIT) { | ||
| 1505 | rendererData->graphicsQueueFamilyIndex = queueFamilyIndex; | ||
| 1506 | } | ||
| 1507 | |||
| 1508 | result = vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, rendererData->surface, &supported); | ||
| 1509 | if (result != VK_SUCCESS) { | ||
| 1510 | SDL_free(physicalDevices); | ||
| 1511 | SDL_free(queueFamiliesProperties); | ||
| 1512 | SDL_free(deviceExtensions); | ||
| 1513 | SET_ERROR_CODE("vkGetPhysicalDeviceSurfaceSupportKHR()", result); | ||
| 1514 | return VK_ERROR_UNKNOWN; | ||
| 1515 | } | ||
| 1516 | if (supported) { | ||
| 1517 | rendererData->presentQueueFamilyIndex = queueFamilyIndex; | ||
| 1518 | if (queueFamiliesProperties[queueFamilyIndex].queueFlags & VK_QUEUE_GRAPHICS_BIT) { | ||
| 1519 | break; // use this queue because it can present and do graphics | ||
| 1520 | } | ||
| 1521 | } | ||
| 1522 | } | ||
| 1523 | |||
| 1524 | if (rendererData->graphicsQueueFamilyIndex == queueFamiliesCount) { // no good queues found | ||
| 1525 | continue; | ||
| 1526 | } | ||
| 1527 | if (rendererData->presentQueueFamilyIndex == queueFamiliesCount) { // no good queues found | ||
| 1528 | continue; | ||
| 1529 | } | ||
| 1530 | result = vkEnumerateDeviceExtensionProperties(physicalDevice, NULL, &deviceExtensionCount, NULL); | ||
| 1531 | if (result != VK_SUCCESS) { | ||
| 1532 | SDL_free(physicalDevices); | ||
| 1533 | SDL_free(queueFamiliesProperties); | ||
| 1534 | SDL_free(deviceExtensions); | ||
| 1535 | SET_ERROR_CODE("vkEnumerateDeviceExtensionProperties()", result); | ||
| 1536 | return VK_ERROR_UNKNOWN; | ||
| 1537 | } | ||
| 1538 | if (deviceExtensionCount == 0) { | ||
| 1539 | continue; | ||
| 1540 | } | ||
| 1541 | if (deviceExtensionsAllocatedSize < deviceExtensionCount) { | ||
| 1542 | SDL_free(deviceExtensions); | ||
| 1543 | deviceExtensionsAllocatedSize = deviceExtensionCount; | ||
| 1544 | deviceExtensions = (VkExtensionProperties *)SDL_malloc(sizeof(VkExtensionProperties) * deviceExtensionsAllocatedSize); | ||
| 1545 | if (!deviceExtensions) { | ||
| 1546 | SDL_free(physicalDevices); | ||
| 1547 | SDL_free(queueFamiliesProperties); | ||
| 1548 | return VK_ERROR_UNKNOWN; | ||
| 1549 | } | ||
| 1550 | } | ||
| 1551 | result = vkEnumerateDeviceExtensionProperties(physicalDevice, NULL, &deviceExtensionCount, deviceExtensions); | ||
| 1552 | if (result != VK_SUCCESS) { | ||
| 1553 | SDL_free(physicalDevices); | ||
| 1554 | SDL_free(queueFamiliesProperties); | ||
| 1555 | SDL_free(deviceExtensions); | ||
| 1556 | SET_ERROR_CODE("vkEnumerateDeviceExtensionProperties()", result); | ||
| 1557 | return result; | ||
| 1558 | } | ||
| 1559 | for (i = 0; i < deviceExtensionCount; i++) { | ||
| 1560 | if (SDL_strcmp(deviceExtensions[i].extensionName, VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { | ||
| 1561 | hasSwapchainExtension = true; | ||
| 1562 | break; | ||
| 1563 | } | ||
| 1564 | } | ||
| 1565 | if (!hasSwapchainExtension) { | ||
| 1566 | continue; | ||
| 1567 | } | ||
| 1568 | rendererData->physicalDevice = physicalDevice; | ||
| 1569 | break; | ||
| 1570 | } | ||
| 1571 | SDL_free(physicalDevices); | ||
| 1572 | SDL_free(queueFamiliesProperties); | ||
| 1573 | SDL_free(deviceExtensions); | ||
| 1574 | if (!rendererData->physicalDevice) { | ||
| 1575 | SET_ERROR_MESSAGE("No viable physical devices found"); | ||
| 1576 | return VK_ERROR_UNKNOWN; | ||
| 1577 | } | ||
| 1578 | return VK_SUCCESS; | ||
| 1579 | } | ||
| 1580 | |||
| 1581 | static VkResult VULKAN_GetSurfaceFormats(VULKAN_RenderData *rendererData) | ||
| 1582 | { | ||
| 1583 | VkResult result = vkGetPhysicalDeviceSurfaceFormatsKHR(rendererData->physicalDevice, | ||
| 1584 | rendererData->surface, | ||
| 1585 | &rendererData->surfaceFormatsCount, | ||
| 1586 | NULL); | ||
| 1587 | if (result != VK_SUCCESS) { | ||
| 1588 | rendererData->surfaceFormatsCount = 0; | ||
| 1589 | SET_ERROR_CODE("vkGetPhysicalDeviceSurfaceFormatsKHR()", result); | ||
| 1590 | return result; | ||
| 1591 | } | ||
| 1592 | if (rendererData->surfaceFormatsCount > rendererData->surfaceFormatsAllocatedCount) { | ||
| 1593 | rendererData->surfaceFormatsAllocatedCount = rendererData->surfaceFormatsCount; | ||
| 1594 | SDL_free(rendererData->surfaceFormats); | ||
| 1595 | rendererData->surfaceFormats = (VkSurfaceFormatKHR *)SDL_malloc(sizeof(VkSurfaceFormatKHR) * rendererData->surfaceFormatsAllocatedCount); | ||
| 1596 | } | ||
| 1597 | result = vkGetPhysicalDeviceSurfaceFormatsKHR(rendererData->physicalDevice, | ||
| 1598 | rendererData->surface, | ||
| 1599 | &rendererData->surfaceFormatsCount, | ||
| 1600 | rendererData->surfaceFormats); | ||
| 1601 | if (result != VK_SUCCESS) { | ||
| 1602 | rendererData->surfaceFormatsCount = 0; | ||
| 1603 | SET_ERROR_CODE("vkGetPhysicalDeviceSurfaceFormatsKHR()", result); | ||
| 1604 | return result; | ||
| 1605 | } | ||
| 1606 | |||
| 1607 | return VK_SUCCESS; | ||
| 1608 | } | ||
| 1609 | |||
| 1610 | static VkSemaphore VULKAN_CreateSemaphore(VULKAN_RenderData *rendererData) | ||
| 1611 | { | ||
| 1612 | VkResult result; | ||
| 1613 | VkSemaphore semaphore = VK_NULL_HANDLE; | ||
| 1614 | |||
| 1615 | VkSemaphoreCreateInfo semaphoreCreateInfo = { 0 }; | ||
| 1616 | semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; | ||
| 1617 | result = vkCreateSemaphore(rendererData->device, &semaphoreCreateInfo, NULL, &semaphore); | ||
| 1618 | if (result != VK_SUCCESS) { | ||
| 1619 | SET_ERROR_CODE("vkCreateSemaphore()", result); | ||
| 1620 | return VK_NULL_HANDLE; | ||
| 1621 | } | ||
| 1622 | return semaphore; | ||
| 1623 | } | ||
| 1624 | |||
| 1625 | static bool VULKAN_DeviceExtensionsFound(VULKAN_RenderData *rendererData, int extensionsToCheck, const char* const* extNames) | ||
| 1626 | { | ||
| 1627 | uint32_t extensionCount; | ||
| 1628 | bool foundExtensions = true; | ||
| 1629 | VkResult result = vkEnumerateDeviceExtensionProperties(rendererData->physicalDevice, NULL, &extensionCount, NULL); | ||
| 1630 | if (result != VK_SUCCESS ) { | ||
| 1631 | SET_ERROR_CODE("vkEnumerateDeviceExtensionProperties()", result); | ||
| 1632 | return false; | ||
| 1633 | } | ||
| 1634 | if (extensionCount > 0 ) { | ||
| 1635 | VkExtensionProperties *extensionProperties = (VkExtensionProperties *)SDL_calloc(extensionCount, sizeof(VkExtensionProperties)); | ||
| 1636 | result = vkEnumerateDeviceExtensionProperties(rendererData->physicalDevice, NULL, &extensionCount, extensionProperties); | ||
| 1637 | if (result != VK_SUCCESS ) { | ||
| 1638 | SET_ERROR_CODE("vkEnumerateDeviceExtensionProperties()", result); | ||
| 1639 | SDL_free(extensionProperties); | ||
| 1640 | return false; | ||
| 1641 | } | ||
| 1642 | for (int ext = 0; ext < extensionsToCheck && foundExtensions; ext++) { | ||
| 1643 | bool foundExtension = false; | ||
| 1644 | for (uint32_t i = 0; i < extensionCount; i++) { | ||
| 1645 | if (SDL_strcmp(extensionProperties[i].extensionName, extNames[ext]) == 0) { | ||
| 1646 | foundExtension = true; | ||
| 1647 | break; | ||
| 1648 | } | ||
| 1649 | } | ||
| 1650 | foundExtensions &= foundExtension; | ||
| 1651 | } | ||
| 1652 | |||
| 1653 | SDL_free(extensionProperties); | ||
| 1654 | } | ||
| 1655 | |||
| 1656 | return foundExtensions; | ||
| 1657 | } | ||
| 1658 | |||
| 1659 | static bool VULKAN_InstanceExtensionFound(VULKAN_RenderData *rendererData, const char *extName) | ||
| 1660 | { | ||
| 1661 | uint32_t extensionCount; | ||
| 1662 | VkResult result = vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL); | ||
| 1663 | if (result != VK_SUCCESS ) { | ||
| 1664 | SET_ERROR_CODE("vkEnumerateInstanceExtensionProperties()", result); | ||
| 1665 | return false; | ||
| 1666 | } | ||
| 1667 | if (extensionCount > 0 ) { | ||
| 1668 | VkExtensionProperties *extensionProperties = (VkExtensionProperties *)SDL_calloc(extensionCount, sizeof(VkExtensionProperties)); | ||
| 1669 | result = vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensionProperties); | ||
| 1670 | if (result != VK_SUCCESS ) { | ||
| 1671 | SET_ERROR_CODE("vkEnumerateInstanceExtensionProperties()", result); | ||
| 1672 | SDL_free(extensionProperties); | ||
| 1673 | return false; | ||
| 1674 | } | ||
| 1675 | for (uint32_t i = 0; i< extensionCount; i++) { | ||
| 1676 | if (SDL_strcmp(extensionProperties[i].extensionName, extName) == 0) { | ||
| 1677 | SDL_free(extensionProperties); | ||
| 1678 | return true; | ||
| 1679 | } | ||
| 1680 | } | ||
| 1681 | SDL_free(extensionProperties); | ||
| 1682 | } | ||
| 1683 | |||
| 1684 | return false; | ||
| 1685 | } | ||
| 1686 | |||
| 1687 | static bool VULKAN_ValidationLayersFound(void) | ||
| 1688 | { | ||
| 1689 | uint32_t instanceLayerCount = 0; | ||
| 1690 | uint32_t i; | ||
| 1691 | bool foundValidation = false; | ||
| 1692 | |||
| 1693 | vkEnumerateInstanceLayerProperties(&instanceLayerCount, NULL); | ||
| 1694 | if (instanceLayerCount > 0) { | ||
| 1695 | VkLayerProperties *instanceLayers = (VkLayerProperties *)SDL_calloc(instanceLayerCount, sizeof(VkLayerProperties)); | ||
| 1696 | vkEnumerateInstanceLayerProperties(&instanceLayerCount, instanceLayers); | ||
| 1697 | for (i = 0; i < instanceLayerCount; i++) { | ||
| 1698 | if (!SDL_strcmp(SDL_VULKAN_VALIDATION_LAYER_NAME, instanceLayers[i].layerName)) { | ||
| 1699 | foundValidation = true; | ||
| 1700 | break; | ||
| 1701 | } | ||
| 1702 | } | ||
| 1703 | SDL_free(instanceLayers); | ||
| 1704 | } | ||
| 1705 | |||
| 1706 | return foundValidation; | ||
| 1707 | } | ||
| 1708 | |||
| 1709 | // Create resources that depend on the device. | ||
| 1710 | static VkResult VULKAN_CreateDeviceResources(SDL_Renderer *renderer, SDL_PropertiesID create_props) | ||
| 1711 | { | ||
| 1712 | static const char *const deviceExtensionNames[] = { | ||
| 1713 | VK_KHR_SWAPCHAIN_EXTENSION_NAME, | ||
| 1714 | /* VK_KHR_sampler_ycbcr_conversion + dependent extensions. | ||
| 1715 | Note VULKAN_DeviceExtensionsFound() call below, if these get moved in this | ||
| 1716 | array, update that check too. | ||
| 1717 | */ | ||
| 1718 | VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, | ||
| 1719 | VK_KHR_MAINTENANCE1_EXTENSION_NAME, | ||
| 1720 | VK_KHR_BIND_MEMORY_2_EXTENSION_NAME, | ||
| 1721 | VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, | ||
| 1722 | }; | ||
| 1723 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 1724 | SDL_VideoDevice *device = SDL_GetVideoDevice(); | ||
| 1725 | VkResult result = VK_SUCCESS; | ||
| 1726 | PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = NULL; | ||
| 1727 | bool createDebug = SDL_GetHintBoolean(SDL_HINT_RENDER_VULKAN_DEBUG, false); | ||
| 1728 | const char *validationLayerName[] = { SDL_VULKAN_VALIDATION_LAYER_NAME }; | ||
| 1729 | |||
| 1730 | if (!SDL_Vulkan_LoadLibrary(NULL)) { | ||
| 1731 | SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "SDL_Vulkan_LoadLibrary failed" ); | ||
| 1732 | return VK_ERROR_UNKNOWN; | ||
| 1733 | } | ||
| 1734 | vkGetInstanceProcAddr = device ? (PFN_vkGetInstanceProcAddr)device->vulkan_config.vkGetInstanceProcAddr : NULL; | ||
| 1735 | if(!vkGetInstanceProcAddr) { | ||
| 1736 | SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "vkGetInstanceProcAddr is NULL" ); | ||
| 1737 | return VK_ERROR_UNKNOWN; | ||
| 1738 | } | ||
| 1739 | |||
| 1740 | // Load global Vulkan functions | ||
| 1741 | rendererData->vkGetInstanceProcAddr = vkGetInstanceProcAddr; | ||
| 1742 | if (!VULKAN_LoadGlobalFunctions(rendererData)) { | ||
| 1743 | return VK_ERROR_UNKNOWN; | ||
| 1744 | } | ||
| 1745 | |||
| 1746 | // Check for colorspace extension | ||
| 1747 | rendererData->supportsEXTSwapchainColorspace = VK_FALSE; | ||
| 1748 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR || | ||
| 1749 | renderer->output_colorspace == SDL_COLORSPACE_HDR10) { | ||
| 1750 | rendererData->supportsEXTSwapchainColorspace = VULKAN_InstanceExtensionFound(rendererData, VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME); | ||
| 1751 | if (!rendererData->supportsEXTSwapchainColorspace) { | ||
| 1752 | SDL_SetError("Using HDR output but %s not supported", VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME); | ||
| 1753 | return VK_ERROR_UNKNOWN; | ||
| 1754 | } | ||
| 1755 | } | ||
| 1756 | |||
| 1757 | // Check for VK_KHR_get_physical_device_properties2 | ||
| 1758 | rendererData->supportsKHRGetPhysicalDeviceProperties2 = VULKAN_InstanceExtensionFound(rendererData, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); | ||
| 1759 | |||
| 1760 | // Create VkInstance | ||
| 1761 | rendererData->instance = (VkInstance)SDL_GetPointerProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER, NULL); | ||
| 1762 | if (rendererData->instance) { | ||
| 1763 | rendererData->instance_external = true; | ||
| 1764 | } else { | ||
| 1765 | VkInstanceCreateInfo instanceCreateInfo = { 0 }; | ||
| 1766 | VkApplicationInfo appInfo = { 0 }; | ||
| 1767 | appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; | ||
| 1768 | appInfo.apiVersion = VK_API_VERSION_1_0; | ||
| 1769 | instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; | ||
| 1770 | instanceCreateInfo.pApplicationInfo = &appInfo; | ||
| 1771 | char const *const *instanceExtensions = SDL_Vulkan_GetInstanceExtensions(&instanceCreateInfo.enabledExtensionCount); | ||
| 1772 | |||
| 1773 | const char **instanceExtensionsCopy = (const char **)SDL_calloc(instanceCreateInfo.enabledExtensionCount + 2, sizeof(const char *)); | ||
| 1774 | for (uint32_t i = 0; i < instanceCreateInfo.enabledExtensionCount; i++) { | ||
| 1775 | instanceExtensionsCopy[i] = instanceExtensions[i]; | ||
| 1776 | } | ||
| 1777 | if (rendererData->supportsEXTSwapchainColorspace) { | ||
| 1778 | instanceExtensionsCopy[instanceCreateInfo.enabledExtensionCount] = VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME; | ||
| 1779 | instanceCreateInfo.enabledExtensionCount++; | ||
| 1780 | } | ||
| 1781 | if (rendererData->supportsKHRGetPhysicalDeviceProperties2) { | ||
| 1782 | instanceExtensionsCopy[instanceCreateInfo.enabledExtensionCount] = VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME; | ||
| 1783 | instanceCreateInfo.enabledExtensionCount++; | ||
| 1784 | } | ||
| 1785 | instanceCreateInfo.ppEnabledExtensionNames = (const char *const *)instanceExtensionsCopy; | ||
| 1786 | if (createDebug && VULKAN_ValidationLayersFound()) { | ||
| 1787 | instanceCreateInfo.ppEnabledLayerNames = validationLayerName; | ||
| 1788 | instanceCreateInfo.enabledLayerCount = 1; | ||
| 1789 | } | ||
| 1790 | result = vkCreateInstance(&instanceCreateInfo, NULL, &rendererData->instance); | ||
| 1791 | SDL_free((void *)instanceExtensionsCopy); | ||
| 1792 | if (result != VK_SUCCESS) { | ||
| 1793 | SET_ERROR_CODE("vkCreateInstance()", result); | ||
| 1794 | return result; | ||
| 1795 | } | ||
| 1796 | } | ||
| 1797 | |||
| 1798 | // Load instance Vulkan functions | ||
| 1799 | if (!VULKAN_LoadInstanceFunctions(rendererData)) { | ||
| 1800 | VULKAN_DestroyAll(renderer); | ||
| 1801 | return VK_ERROR_UNKNOWN; | ||
| 1802 | } | ||
| 1803 | |||
| 1804 | // Create Vulkan surface | ||
| 1805 | rendererData->surface = (VkSurfaceKHR)SDL_GetNumberProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER, 0); | ||
| 1806 | if (rendererData->surface) { | ||
| 1807 | rendererData->surface_external = true; | ||
| 1808 | } else { | ||
| 1809 | if (!device->Vulkan_CreateSurface || !device->Vulkan_CreateSurface(device, renderer->window, rendererData->instance, NULL, &rendererData->surface)) { | ||
| 1810 | VULKAN_DestroyAll(renderer); | ||
| 1811 | SET_ERROR_MESSAGE("Vulkan_CreateSurface() failed"); | ||
| 1812 | return VK_ERROR_UNKNOWN; | ||
| 1813 | } | ||
| 1814 | } | ||
| 1815 | |||
| 1816 | // Choose Vulkan physical device | ||
| 1817 | rendererData->physicalDevice = (VkPhysicalDevice)SDL_GetPointerProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER, NULL); | ||
| 1818 | if (rendererData->physicalDevice) { | ||
| 1819 | vkGetPhysicalDeviceMemoryProperties(rendererData->physicalDevice, &rendererData->physicalDeviceMemoryProperties); | ||
| 1820 | vkGetPhysicalDeviceFeatures(rendererData->physicalDevice, &rendererData->physicalDeviceFeatures); | ||
| 1821 | } else { | ||
| 1822 | if (VULKAN_FindPhysicalDevice(rendererData) != VK_SUCCESS) { | ||
| 1823 | VULKAN_DestroyAll(renderer); | ||
| 1824 | return VK_ERROR_UNKNOWN; | ||
| 1825 | } | ||
| 1826 | } | ||
| 1827 | |||
| 1828 | if (SDL_HasProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER)) { | ||
| 1829 | rendererData->graphicsQueueFamilyIndex = (uint32_t)SDL_GetNumberProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER, 0); | ||
| 1830 | } | ||
| 1831 | if (SDL_HasProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER)) { | ||
| 1832 | rendererData->presentQueueFamilyIndex = (uint32_t)SDL_GetNumberProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER, 0); | ||
| 1833 | } | ||
| 1834 | |||
| 1835 | if (rendererData->supportsKHRGetPhysicalDeviceProperties2 && | ||
| 1836 | VULKAN_DeviceExtensionsFound(rendererData, 4, &deviceExtensionNames[1])) { | ||
| 1837 | rendererData->supportsKHRSamplerYCbCrConversion = true; | ||
| 1838 | } | ||
| 1839 | |||
| 1840 | // Create Vulkan device | ||
| 1841 | rendererData->device = (VkDevice)SDL_GetPointerProperty(create_props, SDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER, NULL); | ||
| 1842 | if (rendererData->device) { | ||
| 1843 | rendererData->device_external = true; | ||
| 1844 | } else { | ||
| 1845 | VkPhysicalDeviceSamplerYcbcrConversionFeatures deviceSamplerYcbcrConversionFeatures = { 0 }; | ||
| 1846 | VkDeviceQueueCreateInfo deviceQueueCreateInfo[2] = { { 0 }, { 0 } }; | ||
| 1847 | static const float queuePriority[] = { 1.0f }; | ||
| 1848 | |||
| 1849 | VkDeviceCreateInfo deviceCreateInfo = { 0 }; | ||
| 1850 | deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; | ||
| 1851 | deviceCreateInfo.queueCreateInfoCount = 0; | ||
| 1852 | deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfo; | ||
| 1853 | deviceCreateInfo.pEnabledFeatures = NULL; | ||
| 1854 | deviceCreateInfo.enabledExtensionCount = (rendererData->supportsKHRSamplerYCbCrConversion) ? 5 : 1; | ||
| 1855 | deviceCreateInfo.ppEnabledExtensionNames = deviceExtensionNames; | ||
| 1856 | |||
| 1857 | deviceQueueCreateInfo[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; | ||
| 1858 | deviceQueueCreateInfo[0].queueFamilyIndex = rendererData->graphicsQueueFamilyIndex; | ||
| 1859 | deviceQueueCreateInfo[0].queueCount = 1; | ||
| 1860 | deviceQueueCreateInfo[0].pQueuePriorities = queuePriority; | ||
| 1861 | ++deviceCreateInfo.queueCreateInfoCount; | ||
| 1862 | |||
| 1863 | if (rendererData->presentQueueFamilyIndex != rendererData->graphicsQueueFamilyIndex) { | ||
| 1864 | deviceQueueCreateInfo[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; | ||
| 1865 | deviceQueueCreateInfo[1].queueFamilyIndex = rendererData->presentQueueFamilyIndex; | ||
| 1866 | deviceQueueCreateInfo[1].queueCount = 1; | ||
| 1867 | deviceQueueCreateInfo[1].pQueuePriorities = queuePriority; | ||
| 1868 | ++deviceCreateInfo.queueCreateInfoCount; | ||
| 1869 | } | ||
| 1870 | |||
| 1871 | if (rendererData->supportsKHRSamplerYCbCrConversion) { | ||
| 1872 | deviceSamplerYcbcrConversionFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES; | ||
| 1873 | deviceSamplerYcbcrConversionFeatures.samplerYcbcrConversion = VK_TRUE; | ||
| 1874 | deviceSamplerYcbcrConversionFeatures.pNext = (void *)deviceCreateInfo.pNext; | ||
| 1875 | deviceCreateInfo.pNext = &deviceSamplerYcbcrConversionFeatures; | ||
| 1876 | } | ||
| 1877 | |||
| 1878 | result = vkCreateDevice(rendererData->physicalDevice, &deviceCreateInfo, NULL, &rendererData->device); | ||
| 1879 | if (result != VK_SUCCESS) { | ||
| 1880 | SET_ERROR_CODE("vkCreateDevice()", result); | ||
| 1881 | VULKAN_DestroyAll(renderer); | ||
| 1882 | return result; | ||
| 1883 | } | ||
| 1884 | } | ||
| 1885 | |||
| 1886 | if (!VULKAN_LoadDeviceFunctions(rendererData)) { | ||
| 1887 | VULKAN_DestroyAll(renderer); | ||
| 1888 | return VK_ERROR_UNKNOWN; | ||
| 1889 | } | ||
| 1890 | |||
| 1891 | // Get graphics/present queues | ||
| 1892 | vkGetDeviceQueue(rendererData->device, rendererData->graphicsQueueFamilyIndex, 0, &rendererData->graphicsQueue); | ||
| 1893 | if (rendererData->graphicsQueueFamilyIndex != rendererData->presentQueueFamilyIndex) { | ||
| 1894 | vkGetDeviceQueue(rendererData->device, rendererData->presentQueueFamilyIndex, 0, &rendererData->presentQueue); | ||
| 1895 | } else { | ||
| 1896 | rendererData->presentQueue = rendererData->graphicsQueue; | ||
| 1897 | } | ||
| 1898 | |||
| 1899 | // Create command pool/command buffers | ||
| 1900 | VkCommandPoolCreateInfo commandPoolCreateInfo = { 0 }; | ||
| 1901 | commandPoolCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; | ||
| 1902 | commandPoolCreateInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; | ||
| 1903 | commandPoolCreateInfo.queueFamilyIndex = rendererData->graphicsQueueFamilyIndex; | ||
| 1904 | result = vkCreateCommandPool(rendererData->device, &commandPoolCreateInfo, NULL, &rendererData->commandPool); | ||
| 1905 | if (result != VK_SUCCESS) { | ||
| 1906 | VULKAN_DestroyAll(renderer); | ||
| 1907 | SET_ERROR_CODE("vkCreateCommandPool()", result); | ||
| 1908 | return result; | ||
| 1909 | } | ||
| 1910 | |||
| 1911 | if (VULKAN_GetSurfaceFormats(rendererData) != VK_SUCCESS) { | ||
| 1912 | VULKAN_DestroyAll(renderer); | ||
| 1913 | return result; | ||
| 1914 | } | ||
| 1915 | |||
| 1916 | // Create shaders / layouts | ||
| 1917 | for (uint32_t i = 0; i < NUM_SHADERS; i++) { | ||
| 1918 | VULKAN_Shader shader = (VULKAN_Shader)i; | ||
| 1919 | VkShaderModuleCreateInfo shaderModuleCreateInfo = { 0 }; | ||
| 1920 | shaderModuleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; | ||
| 1921 | VULKAN_GetVertexShader(shader, &shaderModuleCreateInfo.pCode, &shaderModuleCreateInfo.codeSize); | ||
| 1922 | result = vkCreateShaderModule(rendererData->device, &shaderModuleCreateInfo, NULL, &rendererData->vertexShaderModules[i]); | ||
| 1923 | if (result != VK_SUCCESS) { | ||
| 1924 | VULKAN_DestroyAll(renderer); | ||
| 1925 | SET_ERROR_CODE("vkCreateShaderModule()", result); | ||
| 1926 | return result; | ||
| 1927 | } | ||
| 1928 | VULKAN_GetPixelShader(shader, &shaderModuleCreateInfo.pCode, &shaderModuleCreateInfo.codeSize); | ||
| 1929 | result = vkCreateShaderModule(rendererData->device, &shaderModuleCreateInfo, NULL, &rendererData->fragmentShaderModules[i]); | ||
| 1930 | if (result != VK_SUCCESS) { | ||
| 1931 | VULKAN_DestroyAll(renderer); | ||
| 1932 | SET_ERROR_CODE("vkCreateShaderModule()", result); | ||
| 1933 | return result; | ||
| 1934 | } | ||
| 1935 | } | ||
| 1936 | |||
| 1937 | // Descriptor set layout / pipeline layout | ||
| 1938 | result = VULKAN_CreateDescriptorSetAndPipelineLayout(rendererData, VK_NULL_HANDLE, &rendererData->descriptorSetLayout, &rendererData->pipelineLayout); | ||
| 1939 | if (result != VK_SUCCESS) { | ||
| 1940 | VULKAN_DestroyAll(renderer); | ||
| 1941 | return result; | ||
| 1942 | } | ||
| 1943 | |||
| 1944 | // Create default vertex buffers | ||
| 1945 | for (uint32_t i = 0; i < SDL_VULKAN_NUM_VERTEX_BUFFERS; ++i) { | ||
| 1946 | VULKAN_CreateVertexBuffer(rendererData, i, SDL_VULKAN_VERTEX_BUFFER_DEFAULT_SIZE); | ||
| 1947 | } | ||
| 1948 | |||
| 1949 | // Create samplers | ||
| 1950 | { | ||
| 1951 | static struct | ||
| 1952 | { | ||
| 1953 | VkFilter filter; | ||
| 1954 | VkSamplerAddressMode address; | ||
| 1955 | } samplerParams[] = { | ||
| 1956 | { VK_FILTER_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE }, | ||
| 1957 | { VK_FILTER_NEAREST, VK_SAMPLER_ADDRESS_MODE_REPEAT }, | ||
| 1958 | { VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE }, | ||
| 1959 | { VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT }, | ||
| 1960 | }; | ||
| 1961 | SDL_COMPILE_TIME_ASSERT(samplerParams_SIZE, SDL_arraysize(samplerParams) == VULKAN_SAMPLER_COUNT); | ||
| 1962 | VkSamplerCreateInfo samplerCreateInfo = { 0 }; | ||
| 1963 | samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; | ||
| 1964 | samplerCreateInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; | ||
| 1965 | samplerCreateInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; | ||
| 1966 | samplerCreateInfo.mipLodBias = 0.0f; | ||
| 1967 | samplerCreateInfo.anisotropyEnable = VK_FALSE; | ||
| 1968 | samplerCreateInfo.maxAnisotropy = 1.0f; | ||
| 1969 | samplerCreateInfo.minLod = 0.0f; | ||
| 1970 | samplerCreateInfo.maxLod = 1000.0f; | ||
| 1971 | for (int i = 0; i < SDL_arraysize(samplerParams); ++i) { | ||
| 1972 | samplerCreateInfo.magFilter = samplerParams[i].filter; | ||
| 1973 | samplerCreateInfo.minFilter = samplerParams[i].filter; | ||
| 1974 | samplerCreateInfo.addressModeU = samplerParams[i].address; | ||
| 1975 | samplerCreateInfo.addressModeV = samplerParams[i].address; | ||
| 1976 | result = vkCreateSampler(rendererData->device, &samplerCreateInfo, NULL, &rendererData->samplers[i]); | ||
| 1977 | if (result != VK_SUCCESS) { | ||
| 1978 | VULKAN_DestroyAll(renderer); | ||
| 1979 | SET_ERROR_CODE("vkCreateSampler()", result); | ||
| 1980 | return result; | ||
| 1981 | } | ||
| 1982 | } | ||
| 1983 | } | ||
| 1984 | |||
| 1985 | SDL_PropertiesID props = SDL_GetRendererProperties(renderer); | ||
| 1986 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER, rendererData->instance); | ||
| 1987 | SDL_SetNumberProperty(props, SDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER, (Sint64)rendererData->surface); | ||
| 1988 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER, rendererData->physicalDevice); | ||
| 1989 | SDL_SetPointerProperty(props, SDL_PROP_RENDERER_VULKAN_DEVICE_POINTER, rendererData->device); | ||
| 1990 | SDL_SetNumberProperty(props, SDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER, rendererData->graphicsQueueFamilyIndex); | ||
| 1991 | SDL_SetNumberProperty(props, SDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER, rendererData->presentQueueFamilyIndex); | ||
| 1992 | |||
| 1993 | return VK_SUCCESS; | ||
| 1994 | } | ||
| 1995 | |||
| 1996 | static VkResult VULKAN_CreateFramebuffersAndRenderPasses(SDL_Renderer *renderer, int w, int h, | ||
| 1997 | VkFormat format, int imageViewCount, VkImageView *imageViews, VkFramebuffer *framebuffers, VkRenderPass renderPasses[VULKAN_RENDERPASS_COUNT]) | ||
| 1998 | { | ||
| 1999 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *) renderer->internal; | ||
| 2000 | VkResult result; | ||
| 2001 | |||
| 2002 | VkAttachmentDescription attachmentDescription = { 0 }; | ||
| 2003 | attachmentDescription.format = format; | ||
| 2004 | attachmentDescription.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; | ||
| 2005 | attachmentDescription.storeOp = VK_ATTACHMENT_STORE_OP_STORE; | ||
| 2006 | attachmentDescription.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; | ||
| 2007 | attachmentDescription.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; | ||
| 2008 | attachmentDescription.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; | ||
| 2009 | attachmentDescription.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; | ||
| 2010 | attachmentDescription.samples = VK_SAMPLE_COUNT_1_BIT; | ||
| 2011 | attachmentDescription.flags = 0; | ||
| 2012 | |||
| 2013 | VkAttachmentReference colorAttachmentReference = { 0 }; | ||
| 2014 | colorAttachmentReference.attachment = 0; | ||
| 2015 | colorAttachmentReference.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; | ||
| 2016 | |||
| 2017 | VkSubpassDescription subpassDescription = { 0 }; | ||
| 2018 | subpassDescription.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; | ||
| 2019 | subpassDescription.flags = 0; | ||
| 2020 | subpassDescription.inputAttachmentCount = 0; | ||
| 2021 | subpassDescription.pInputAttachments = NULL; | ||
| 2022 | subpassDescription.colorAttachmentCount = 1; | ||
| 2023 | subpassDescription.pColorAttachments = &colorAttachmentReference; | ||
| 2024 | subpassDescription.pResolveAttachments = NULL; | ||
| 2025 | subpassDescription.pDepthStencilAttachment = NULL; | ||
| 2026 | subpassDescription.preserveAttachmentCount = 0; | ||
| 2027 | subpassDescription.pPreserveAttachments = NULL; | ||
| 2028 | |||
| 2029 | VkSubpassDependency subPassDependency = { 0 }; | ||
| 2030 | subPassDependency.srcSubpass = VK_SUBPASS_EXTERNAL; | ||
| 2031 | subPassDependency.dstSubpass = 0; | ||
| 2032 | subPassDependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; | ||
| 2033 | subPassDependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; | ||
| 2034 | subPassDependency.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; | ||
| 2035 | subPassDependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT; | ||
| 2036 | subPassDependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; | ||
| 2037 | |||
| 2038 | VkRenderPassCreateInfo renderPassCreateInfo = { 0 }; | ||
| 2039 | renderPassCreateInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; | ||
| 2040 | renderPassCreateInfo.flags = 0; | ||
| 2041 | renderPassCreateInfo.attachmentCount = 1; | ||
| 2042 | renderPassCreateInfo.pAttachments = &attachmentDescription; | ||
| 2043 | renderPassCreateInfo.subpassCount = 1; | ||
| 2044 | renderPassCreateInfo.pSubpasses = &subpassDescription; | ||
| 2045 | renderPassCreateInfo.dependencyCount = 1; | ||
| 2046 | renderPassCreateInfo.pDependencies = &subPassDependency; | ||
| 2047 | |||
| 2048 | result = vkCreateRenderPass(rendererData->device, &renderPassCreateInfo, NULL, &renderPasses[VULKAN_RENDERPASS_LOAD]); | ||
| 2049 | if (result != VK_SUCCESS) { | ||
| 2050 | SET_ERROR_CODE("vkCreateRenderPass()", result); | ||
| 2051 | return result; | ||
| 2052 | } | ||
| 2053 | |||
| 2054 | attachmentDescription.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; | ||
| 2055 | result = vkCreateRenderPass(rendererData->device, &renderPassCreateInfo, NULL, &renderPasses[VULKAN_RENDERPASS_CLEAR]); | ||
| 2056 | if (result != VK_SUCCESS) { | ||
| 2057 | SET_ERROR_CODE("vkCreateRenderPass()", result); | ||
| 2058 | return result; | ||
| 2059 | } | ||
| 2060 | |||
| 2061 | VkFramebufferCreateInfo framebufferCreateInfo = { 0 }; | ||
| 2062 | framebufferCreateInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; | ||
| 2063 | framebufferCreateInfo.pNext = NULL; | ||
| 2064 | framebufferCreateInfo.renderPass = rendererData->renderPasses[VULKAN_RENDERPASS_LOAD]; | ||
| 2065 | framebufferCreateInfo.attachmentCount = 1; | ||
| 2066 | framebufferCreateInfo.width = w; | ||
| 2067 | framebufferCreateInfo.height = h; | ||
| 2068 | framebufferCreateInfo.layers = 1; | ||
| 2069 | |||
| 2070 | for (int i = 0; i < imageViewCount; i++) { | ||
| 2071 | framebufferCreateInfo.pAttachments = &imageViews[i]; | ||
| 2072 | result = vkCreateFramebuffer(rendererData->device, &framebufferCreateInfo, NULL, &framebuffers[i]); | ||
| 2073 | if (result != VK_SUCCESS) { | ||
| 2074 | SET_ERROR_CODE("vkCreateFramebuffer()", result); | ||
| 2075 | return result; | ||
| 2076 | } | ||
| 2077 | } | ||
| 2078 | |||
| 2079 | return result; | ||
| 2080 | } | ||
| 2081 | |||
| 2082 | static VkResult VULKAN_CreateSwapChain(SDL_Renderer *renderer, int w, int h) | ||
| 2083 | { | ||
| 2084 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2085 | VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(rendererData->physicalDevice, rendererData->surface, &rendererData->surfaceCapabilities); | ||
| 2086 | if (result != VK_SUCCESS) { | ||
| 2087 | SET_ERROR_CODE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR()", result); | ||
| 2088 | return result; | ||
| 2089 | } | ||
| 2090 | |||
| 2091 | // clean up previous swapchain resources | ||
| 2092 | if (rendererData->swapchainImageViews) { | ||
| 2093 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2094 | vkDestroyImageView(rendererData->device, rendererData->swapchainImageViews[i], NULL); | ||
| 2095 | } | ||
| 2096 | SDL_free(rendererData->swapchainImageViews); | ||
| 2097 | rendererData->swapchainImageViews = NULL; | ||
| 2098 | } | ||
| 2099 | if (rendererData->fences) { | ||
| 2100 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2101 | if (rendererData->fences[i] != VK_NULL_HANDLE) { | ||
| 2102 | vkDestroyFence(rendererData->device, rendererData->fences[i], NULL); | ||
| 2103 | } | ||
| 2104 | } | ||
| 2105 | SDL_free(rendererData->fences); | ||
| 2106 | rendererData->fences = NULL; | ||
| 2107 | } | ||
| 2108 | if (rendererData->commandBuffers) { | ||
| 2109 | vkResetCommandPool(rendererData->device, rendererData->commandPool, 0); | ||
| 2110 | SDL_free(rendererData->commandBuffers); | ||
| 2111 | rendererData->commandBuffers = NULL; | ||
| 2112 | rendererData->currentCommandBuffer = VK_NULL_HANDLE; | ||
| 2113 | rendererData->currentCommandBufferIndex = 0; | ||
| 2114 | } | ||
| 2115 | if (rendererData->framebuffers) { | ||
| 2116 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2117 | if (rendererData->framebuffers[i] != VK_NULL_HANDLE) { | ||
| 2118 | vkDestroyFramebuffer(rendererData->device, rendererData->framebuffers[i], NULL); | ||
| 2119 | } | ||
| 2120 | } | ||
| 2121 | SDL_free(rendererData->framebuffers); | ||
| 2122 | rendererData->framebuffers = NULL; | ||
| 2123 | } | ||
| 2124 | if (rendererData->descriptorPools) { | ||
| 2125 | SDL_assert(rendererData->numDescriptorPools); | ||
| 2126 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2127 | for (uint32_t j = 0; j < rendererData->numDescriptorPools[i]; j++) { | ||
| 2128 | if (rendererData->descriptorPools[i][j] != VK_NULL_HANDLE) { | ||
| 2129 | vkDestroyDescriptorPool(rendererData->device, rendererData->descriptorPools[i][j], NULL); | ||
| 2130 | } | ||
| 2131 | } | ||
| 2132 | SDL_free(rendererData->descriptorPools[i]); | ||
| 2133 | } | ||
| 2134 | SDL_free(rendererData->descriptorPools); | ||
| 2135 | rendererData->descriptorPools = NULL; | ||
| 2136 | SDL_free(rendererData->numDescriptorPools); | ||
| 2137 | rendererData->numDescriptorPools = NULL; | ||
| 2138 | } | ||
| 2139 | if (rendererData->imageAvailableSemaphores) { | ||
| 2140 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 2141 | if (rendererData->imageAvailableSemaphores[i] != VK_NULL_HANDLE) { | ||
| 2142 | vkDestroySemaphore(rendererData->device, rendererData->imageAvailableSemaphores[i], NULL); | ||
| 2143 | } | ||
| 2144 | } | ||
| 2145 | SDL_free(rendererData->imageAvailableSemaphores); | ||
| 2146 | rendererData->imageAvailableSemaphores = NULL; | ||
| 2147 | } | ||
| 2148 | if (rendererData->renderingFinishedSemaphores) { | ||
| 2149 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 2150 | if (rendererData->renderingFinishedSemaphores[i] != VK_NULL_HANDLE) { | ||
| 2151 | vkDestroySemaphore(rendererData->device, rendererData->renderingFinishedSemaphores[i], NULL); | ||
| 2152 | } | ||
| 2153 | } | ||
| 2154 | SDL_free(rendererData->renderingFinishedSemaphores); | ||
| 2155 | rendererData->renderingFinishedSemaphores = NULL; | ||
| 2156 | } | ||
| 2157 | if (rendererData->uploadBuffers) { | ||
| 2158 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2159 | for (uint32_t j = 0; j < SDL_VULKAN_NUM_UPLOAD_BUFFERS; j++) { | ||
| 2160 | VULKAN_DestroyBuffer(rendererData, &rendererData->uploadBuffers[i][j]); | ||
| 2161 | } | ||
| 2162 | SDL_free(rendererData->uploadBuffers[i]); | ||
| 2163 | } | ||
| 2164 | SDL_free(rendererData->uploadBuffers); | ||
| 2165 | rendererData->uploadBuffers = NULL; | ||
| 2166 | } | ||
| 2167 | if (rendererData->constantBuffers) { | ||
| 2168 | SDL_assert(rendererData->numConstantBuffers); | ||
| 2169 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; ++i) { | ||
| 2170 | for (uint32_t j = 0; j < rendererData->numConstantBuffers[i]; j++) { | ||
| 2171 | VULKAN_DestroyBuffer(rendererData, &rendererData->constantBuffers[i][j]); | ||
| 2172 | } | ||
| 2173 | SDL_free(rendererData->constantBuffers[i]); | ||
| 2174 | } | ||
| 2175 | SDL_free(rendererData->constantBuffers); | ||
| 2176 | rendererData->constantBuffers = NULL; | ||
| 2177 | SDL_free(rendererData->numConstantBuffers); | ||
| 2178 | rendererData->numConstantBuffers = NULL; | ||
| 2179 | } | ||
| 2180 | |||
| 2181 | // pick an image count | ||
| 2182 | rendererData->swapchainDesiredImageCount = rendererData->surfaceCapabilities.minImageCount + SDL_VULKAN_FRAME_QUEUE_DEPTH; | ||
| 2183 | if ((rendererData->swapchainDesiredImageCount > rendererData->surfaceCapabilities.maxImageCount) && | ||
| 2184 | (rendererData->surfaceCapabilities.maxImageCount > 0)) { | ||
| 2185 | rendererData->swapchainDesiredImageCount = rendererData->surfaceCapabilities.maxImageCount; | ||
| 2186 | } | ||
| 2187 | |||
| 2188 | VkFormat desiredFormat = VK_FORMAT_B8G8R8A8_UNORM; | ||
| 2189 | VkColorSpaceKHR desiredColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR; | ||
| 2190 | if (renderer->output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 2191 | desiredFormat = VK_FORMAT_R16G16B16A16_SFLOAT; | ||
| 2192 | desiredColorSpace = VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT; | ||
| 2193 | } | ||
| 2194 | else if (renderer->output_colorspace == SDL_COLORSPACE_HDR10) { | ||
| 2195 | desiredFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32; | ||
| 2196 | desiredColorSpace = VK_COLOR_SPACE_HDR10_ST2084_EXT; | ||
| 2197 | } | ||
| 2198 | |||
| 2199 | if ((rendererData->surfaceFormatsCount == 1) && | ||
| 2200 | (rendererData->surfaceFormats[0].format == VK_FORMAT_UNDEFINED)) { | ||
| 2201 | // aren't any preferred formats, so we pick | ||
| 2202 | rendererData->surfaceFormat.colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; | ||
| 2203 | rendererData->surfaceFormat.format = desiredFormat; | ||
| 2204 | } else { | ||
| 2205 | rendererData->surfaceFormat = rendererData->surfaceFormats[0]; | ||
| 2206 | rendererData->surfaceFormat.colorSpace = rendererData->surfaceFormats[0].colorSpace; | ||
| 2207 | for (uint32_t i = 0; i < rendererData->surfaceFormatsCount; i++) { | ||
| 2208 | if (rendererData->surfaceFormats[i].format == desiredFormat && | ||
| 2209 | rendererData->surfaceFormats[i].colorSpace == desiredColorSpace) { | ||
| 2210 | rendererData->surfaceFormat.colorSpace = rendererData->surfaceFormats[i].colorSpace; | ||
| 2211 | rendererData->surfaceFormat = rendererData->surfaceFormats[i]; | ||
| 2212 | break; | ||
| 2213 | } | ||
| 2214 | } | ||
| 2215 | } | ||
| 2216 | |||
| 2217 | rendererData->swapchainSize.width = SDL_clamp((uint32_t)w, | ||
| 2218 | rendererData->surfaceCapabilities.minImageExtent.width, | ||
| 2219 | rendererData->surfaceCapabilities.maxImageExtent.width); | ||
| 2220 | |||
| 2221 | rendererData->swapchainSize.height = SDL_clamp((uint32_t)h, | ||
| 2222 | rendererData->surfaceCapabilities.minImageExtent.height, | ||
| 2223 | rendererData->surfaceCapabilities.maxImageExtent.height); | ||
| 2224 | |||
| 2225 | // Handle rotation | ||
| 2226 | rendererData->swapChainPreTransform = rendererData->surfaceCapabilities.currentTransform; | ||
| 2227 | if (rendererData->swapChainPreTransform == VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR || | ||
| 2228 | rendererData->swapChainPreTransform == VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR) { | ||
| 2229 | uint32_t tempWidth = rendererData->swapchainSize.width; | ||
| 2230 | rendererData->swapchainSize.width = rendererData->swapchainSize.height; | ||
| 2231 | rendererData->swapchainSize.height = tempWidth; | ||
| 2232 | } | ||
| 2233 | |||
| 2234 | if (rendererData->swapchainSize.width == 0 && rendererData->swapchainSize.height == 0) { | ||
| 2235 | // Don't recreate the swapchain if size is (0,0), just fail and continue attempting creation | ||
| 2236 | return VK_ERROR_OUT_OF_DATE_KHR; | ||
| 2237 | } | ||
| 2238 | |||
| 2239 | // Choose a present mode. If vsync is requested, then use VK_PRESENT_MODE_FIFO_KHR which is guaranteed to be supported | ||
| 2240 | VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR; | ||
| 2241 | if (rendererData->vsync <= 0) { | ||
| 2242 | uint32_t presentModeCount = 0; | ||
| 2243 | result = vkGetPhysicalDeviceSurfacePresentModesKHR(rendererData->physicalDevice, rendererData->surface, &presentModeCount, NULL); | ||
| 2244 | if (result != VK_SUCCESS) { | ||
| 2245 | SET_ERROR_CODE("vkGetPhysicalDeviceSurfacePresentModesKHR()", result); | ||
| 2246 | return result; | ||
| 2247 | } | ||
| 2248 | if (presentModeCount > 0) { | ||
| 2249 | VkPresentModeKHR *presentModes = (VkPresentModeKHR *)SDL_calloc(presentModeCount, sizeof(VkPresentModeKHR)); | ||
| 2250 | result = vkGetPhysicalDeviceSurfacePresentModesKHR(rendererData->physicalDevice, rendererData->surface, &presentModeCount, presentModes); | ||
| 2251 | if (result != VK_SUCCESS) { | ||
| 2252 | SET_ERROR_CODE("vkGetPhysicalDeviceSurfacePresentModesKHR()", result); | ||
| 2253 | SDL_free(presentModes); | ||
| 2254 | return result; | ||
| 2255 | } | ||
| 2256 | |||
| 2257 | if (rendererData->vsync == 0) { | ||
| 2258 | /* If vsync is not requested, in favor these options in order: | ||
| 2259 | VK_PRESENT_MODE_IMMEDIATE_KHR - no v-sync with tearing | ||
| 2260 | VK_PRESENT_MODE_MAILBOX_KHR - no v-sync without tearing | ||
| 2261 | VK_PRESENT_MODE_FIFO_RELAXED_KHR - no v-sync, may tear */ | ||
| 2262 | for (uint32_t i = 0; i < presentModeCount; i++) { | ||
| 2263 | if (presentModes[i] == VK_PRESENT_MODE_IMMEDIATE_KHR) { | ||
| 2264 | presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR; | ||
| 2265 | break; | ||
| 2266 | } | ||
| 2267 | else if (presentModes[i] == VK_PRESENT_MODE_MAILBOX_KHR) { | ||
| 2268 | presentMode = VK_PRESENT_MODE_MAILBOX_KHR; | ||
| 2269 | } | ||
| 2270 | else if ((presentMode != VK_PRESENT_MODE_MAILBOX_KHR) && | ||
| 2271 | (presentModes[i] == VK_PRESENT_MODE_FIFO_RELAXED_KHR)) { | ||
| 2272 | presentMode = VK_PRESENT_MODE_FIFO_RELAXED_KHR; | ||
| 2273 | } | ||
| 2274 | } | ||
| 2275 | } else if (rendererData->vsync == -1) { | ||
| 2276 | for (uint32_t i = 0; i < presentModeCount; i++) { | ||
| 2277 | if (presentModes[i] == VK_PRESENT_MODE_FIFO_RELAXED_KHR) { | ||
| 2278 | presentMode = VK_PRESENT_MODE_FIFO_RELAXED_KHR; | ||
| 2279 | break; | ||
| 2280 | } | ||
| 2281 | } | ||
| 2282 | } | ||
| 2283 | SDL_free(presentModes); | ||
| 2284 | } | ||
| 2285 | } | ||
| 2286 | |||
| 2287 | VkSwapchainCreateInfoKHR swapchainCreateInfo = { 0 }; | ||
| 2288 | swapchainCreateInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; | ||
| 2289 | swapchainCreateInfo.surface = rendererData->surface; | ||
| 2290 | swapchainCreateInfo.minImageCount = rendererData->swapchainDesiredImageCount; | ||
| 2291 | swapchainCreateInfo.imageFormat = rendererData->surfaceFormat.format; | ||
| 2292 | swapchainCreateInfo.imageColorSpace = rendererData->surfaceFormat.colorSpace; | ||
| 2293 | swapchainCreateInfo.imageExtent = rendererData->swapchainSize; | ||
| 2294 | swapchainCreateInfo.imageArrayLayers = 1; | ||
| 2295 | swapchainCreateInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; | ||
| 2296 | swapchainCreateInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; | ||
| 2297 | swapchainCreateInfo.preTransform = rendererData->swapChainPreTransform; | ||
| 2298 | swapchainCreateInfo.compositeAlpha = (renderer->window->flags & SDL_WINDOW_TRANSPARENT) ? (VkCompositeAlphaFlagBitsKHR)0 : VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; | ||
| 2299 | swapchainCreateInfo.presentMode = presentMode; | ||
| 2300 | swapchainCreateInfo.clipped = VK_TRUE; | ||
| 2301 | swapchainCreateInfo.oldSwapchain = rendererData->swapchain; | ||
| 2302 | result = vkCreateSwapchainKHR(rendererData->device, &swapchainCreateInfo, NULL, &rendererData->swapchain); | ||
| 2303 | |||
| 2304 | if (swapchainCreateInfo.oldSwapchain != VK_NULL_HANDLE) { | ||
| 2305 | vkDestroySwapchainKHR(rendererData->device, swapchainCreateInfo.oldSwapchain, NULL); | ||
| 2306 | } | ||
| 2307 | |||
| 2308 | if (result != VK_SUCCESS) { | ||
| 2309 | rendererData->swapchain = VK_NULL_HANDLE; | ||
| 2310 | SET_ERROR_CODE("vkCreateSwapchainKHR()", result); | ||
| 2311 | return result; | ||
| 2312 | } | ||
| 2313 | |||
| 2314 | SDL_free(rendererData->swapchainImages); | ||
| 2315 | rendererData->swapchainImages = NULL; | ||
| 2316 | result = vkGetSwapchainImagesKHR(rendererData->device, rendererData->swapchain, &rendererData->swapchainImageCount, NULL); | ||
| 2317 | if (result != VK_SUCCESS) { | ||
| 2318 | rendererData->swapchainImageCount = 0; | ||
| 2319 | SET_ERROR_CODE("vkGetSwapchainImagesKHR()", result); | ||
| 2320 | return result; | ||
| 2321 | } | ||
| 2322 | |||
| 2323 | rendererData->swapchainImages = (VkImage *)SDL_malloc(sizeof(VkImage) * rendererData->swapchainImageCount); | ||
| 2324 | result = vkGetSwapchainImagesKHR(rendererData->device, | ||
| 2325 | rendererData->swapchain, | ||
| 2326 | &rendererData->swapchainImageCount, | ||
| 2327 | rendererData->swapchainImages); | ||
| 2328 | if (result != VK_SUCCESS) { | ||
| 2329 | SDL_free(rendererData->swapchainImages); | ||
| 2330 | rendererData->swapchainImages = NULL; | ||
| 2331 | rendererData->swapchainImageCount = 0; | ||
| 2332 | SET_ERROR_CODE("vkGetSwapchainImagesKHR()", result); | ||
| 2333 | return result; | ||
| 2334 | } | ||
| 2335 | |||
| 2336 | // Create VkImageView's for swapchain images | ||
| 2337 | { | ||
| 2338 | VkImageViewCreateInfo imageViewCreateInfo = { 0 }; | ||
| 2339 | imageViewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; | ||
| 2340 | imageViewCreateInfo.flags = 0; | ||
| 2341 | imageViewCreateInfo.format = rendererData->surfaceFormat.format; | ||
| 2342 | imageViewCreateInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2343 | imageViewCreateInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2344 | imageViewCreateInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2345 | imageViewCreateInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2346 | imageViewCreateInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | ||
| 2347 | imageViewCreateInfo.subresourceRange.baseArrayLayer = 0; | ||
| 2348 | imageViewCreateInfo.subresourceRange.baseMipLevel = 0; | ||
| 2349 | imageViewCreateInfo.subresourceRange.layerCount = 1; | ||
| 2350 | imageViewCreateInfo.subresourceRange.levelCount = 1; | ||
| 2351 | imageViewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; | ||
| 2352 | rendererData->swapchainImageViews = (VkImageView *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkImageView)); | ||
| 2353 | SDL_free(rendererData->swapchainImageLayouts); | ||
| 2354 | rendererData->swapchainImageLayouts = (VkImageLayout *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkImageLayout)); | ||
| 2355 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2356 | imageViewCreateInfo.image = rendererData->swapchainImages[i]; | ||
| 2357 | result = vkCreateImageView(rendererData->device, &imageViewCreateInfo, NULL, &rendererData->swapchainImageViews[i]); | ||
| 2358 | if (result != VK_SUCCESS) { | ||
| 2359 | VULKAN_DestroyAll(renderer); | ||
| 2360 | SET_ERROR_CODE("vkCreateImageView()", result); | ||
| 2361 | return result; | ||
| 2362 | } | ||
| 2363 | rendererData->swapchainImageLayouts[i] = VK_IMAGE_LAYOUT_UNDEFINED; | ||
| 2364 | } | ||
| 2365 | |||
| 2366 | } | ||
| 2367 | |||
| 2368 | VkCommandBufferAllocateInfo commandBufferAllocateInfo = { 0 }; | ||
| 2369 | commandBufferAllocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; | ||
| 2370 | commandBufferAllocateInfo.commandPool = rendererData->commandPool; | ||
| 2371 | commandBufferAllocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; | ||
| 2372 | commandBufferAllocateInfo.commandBufferCount = rendererData->swapchainImageCount; | ||
| 2373 | rendererData->commandBuffers = (VkCommandBuffer *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkCommandBuffer)); | ||
| 2374 | result = vkAllocateCommandBuffers(rendererData->device, &commandBufferAllocateInfo, rendererData->commandBuffers); | ||
| 2375 | if (result != VK_SUCCESS) { | ||
| 2376 | VULKAN_DestroyAll(renderer); | ||
| 2377 | SET_ERROR_CODE("vkAllocateCommandBuffers()", result); | ||
| 2378 | return result; | ||
| 2379 | } | ||
| 2380 | |||
| 2381 | // Create fences | ||
| 2382 | rendererData->fences = (VkFence *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkFence)); | ||
| 2383 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2384 | VkFenceCreateInfo fenceCreateInfo = { 0 }; | ||
| 2385 | fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; | ||
| 2386 | fenceCreateInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT; | ||
| 2387 | result = vkCreateFence(rendererData->device, &fenceCreateInfo, NULL, &rendererData->fences[i]); | ||
| 2388 | if (result != VK_SUCCESS) { | ||
| 2389 | VULKAN_DestroyAll(renderer); | ||
| 2390 | SET_ERROR_CODE("vkCreateFence()", result); | ||
| 2391 | return result; | ||
| 2392 | } | ||
| 2393 | } | ||
| 2394 | |||
| 2395 | // Create renderpasses and framebuffer | ||
| 2396 | for (uint32_t i = 0; i < SDL_arraysize(rendererData->renderPasses); i++) { | ||
| 2397 | if (rendererData->renderPasses[i] != VK_NULL_HANDLE) { | ||
| 2398 | vkDestroyRenderPass(rendererData->device, rendererData->renderPasses[i], NULL); | ||
| 2399 | rendererData->renderPasses[i] = VK_NULL_HANDLE; | ||
| 2400 | } | ||
| 2401 | } | ||
| 2402 | rendererData->framebuffers = (VkFramebuffer *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkFramebuffer)); | ||
| 2403 | result = VULKAN_CreateFramebuffersAndRenderPasses(renderer, | ||
| 2404 | rendererData->swapchainSize.width, | ||
| 2405 | rendererData->swapchainSize.height, | ||
| 2406 | rendererData->surfaceFormat.format, | ||
| 2407 | rendererData->swapchainImageCount, | ||
| 2408 | rendererData->swapchainImageViews, | ||
| 2409 | rendererData->framebuffers, | ||
| 2410 | rendererData->renderPasses); | ||
| 2411 | if (result != VK_SUCCESS) { | ||
| 2412 | VULKAN_DestroyAll(renderer); | ||
| 2413 | SET_ERROR_CODE("VULKAN_CreateFramebuffersAndRenderPasses()", result); | ||
| 2414 | return result; | ||
| 2415 | } | ||
| 2416 | |||
| 2417 | // Create descriptor pools - start by allocating one per swapchain image, let it grow if more are needed | ||
| 2418 | rendererData->descriptorPools = (VkDescriptorPool **)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkDescriptorPool*)); | ||
| 2419 | rendererData->numDescriptorPools = (uint32_t *)SDL_calloc(rendererData->swapchainImageCount, sizeof(uint32_t)); | ||
| 2420 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2421 | // Start by just allocating one pool, it will grow if needed | ||
| 2422 | rendererData->numDescriptorPools[i] = 1; | ||
| 2423 | rendererData->descriptorPools[i] = (VkDescriptorPool *)SDL_calloc(1, sizeof(VkDescriptorPool)); | ||
| 2424 | rendererData->descriptorPools[i][0] = VULKAN_AllocateDescriptorPool(rendererData); | ||
| 2425 | if (result != VK_SUCCESS) { | ||
| 2426 | VULKAN_DestroyAll(renderer); | ||
| 2427 | return result; | ||
| 2428 | } | ||
| 2429 | } | ||
| 2430 | |||
| 2431 | // Create semaphores | ||
| 2432 | rendererData->imageAvailableSemaphores = (VkSemaphore *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkSemaphore)); | ||
| 2433 | rendererData->renderingFinishedSemaphores = (VkSemaphore *)SDL_calloc(rendererData->swapchainImageCount, sizeof(VkSemaphore)); | ||
| 2434 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2435 | rendererData->imageAvailableSemaphores[i] = VULKAN_CreateSemaphore(rendererData); | ||
| 2436 | if (rendererData->imageAvailableSemaphores[i] == VK_NULL_HANDLE) { | ||
| 2437 | VULKAN_DestroyAll(renderer); | ||
| 2438 | return VK_ERROR_UNKNOWN; | ||
| 2439 | } | ||
| 2440 | rendererData->renderingFinishedSemaphores[i] = VULKAN_CreateSemaphore(rendererData); | ||
| 2441 | if (rendererData->renderingFinishedSemaphores[i] == VK_NULL_HANDLE) { | ||
| 2442 | VULKAN_DestroyAll(renderer); | ||
| 2443 | return VK_ERROR_UNKNOWN; | ||
| 2444 | } | ||
| 2445 | } | ||
| 2446 | |||
| 2447 | // Upload buffers | ||
| 2448 | rendererData->uploadBuffers = (VULKAN_Buffer **)SDL_calloc(rendererData->swapchainImageCount, sizeof(VULKAN_Buffer*)); | ||
| 2449 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2450 | rendererData->uploadBuffers[i] = (VULKAN_Buffer *)SDL_calloc(SDL_VULKAN_NUM_UPLOAD_BUFFERS, sizeof(VULKAN_Buffer)); | ||
| 2451 | } | ||
| 2452 | SDL_free(rendererData->currentUploadBuffer); | ||
| 2453 | rendererData->currentUploadBuffer = (int *)SDL_calloc(rendererData->swapchainImageCount, sizeof(int)); | ||
| 2454 | |||
| 2455 | // Constant buffers | ||
| 2456 | rendererData->constantBuffers = (VULKAN_Buffer **)SDL_calloc(rendererData->swapchainImageCount, sizeof(VULKAN_Buffer*)); | ||
| 2457 | rendererData->numConstantBuffers = (uint32_t *)SDL_calloc(rendererData->swapchainImageCount, sizeof(uint32_t)); | ||
| 2458 | for (uint32_t i = 0; i < rendererData->swapchainImageCount; i++) { | ||
| 2459 | // Start with just allocating one, will grow if needed | ||
| 2460 | rendererData->numConstantBuffers[i] = 1; | ||
| 2461 | rendererData->constantBuffers[i] = (VULKAN_Buffer *)SDL_calloc(1, sizeof(VULKAN_Buffer)); | ||
| 2462 | result = VULKAN_AllocateBuffer(rendererData, | ||
| 2463 | SDL_VULKAN_CONSTANT_BUFFER_DEFAULT_SIZE, | ||
| 2464 | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, | ||
| 2465 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | | ||
| 2466 | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, | ||
| 2467 | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, | ||
| 2468 | &rendererData->constantBuffers[i][0]); | ||
| 2469 | if (result != VK_SUCCESS) { | ||
| 2470 | VULKAN_DestroyAll(renderer); | ||
| 2471 | return result; | ||
| 2472 | } | ||
| 2473 | } | ||
| 2474 | rendererData->currentConstantBufferOffset = -1; | ||
| 2475 | rendererData->currentConstantBufferIndex = 0; | ||
| 2476 | |||
| 2477 | VULKAN_AcquireNextSwapchainImage(renderer); | ||
| 2478 | |||
| 2479 | SDL_PropertiesID props = SDL_GetRendererProperties(renderer); | ||
| 2480 | SDL_SetNumberProperty(props, SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER, rendererData->swapchainImageCount); | ||
| 2481 | |||
| 2482 | return result; | ||
| 2483 | } | ||
| 2484 | |||
| 2485 | // Initialize all resources that change when the window's size changes. | ||
| 2486 | static VkResult VULKAN_CreateWindowSizeDependentResources(SDL_Renderer *renderer) | ||
| 2487 | { | ||
| 2488 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2489 | VkResult result = VK_SUCCESS; | ||
| 2490 | int w, h; | ||
| 2491 | |||
| 2492 | // Release resources in the current command list | ||
| 2493 | VULKAN_IssueBatch(rendererData); | ||
| 2494 | VULKAN_WaitForGPU(rendererData); | ||
| 2495 | |||
| 2496 | /* The width and height of the swap chain must be based on the display's | ||
| 2497 | * non-rotated size. | ||
| 2498 | */ | ||
| 2499 | SDL_GetWindowSizeInPixels(renderer->window, &w, &h); | ||
| 2500 | |||
| 2501 | result = VULKAN_CreateSwapChain(renderer, w, h); | ||
| 2502 | if (result != VK_SUCCESS) { | ||
| 2503 | rendererData->recreateSwapchain = VK_TRUE; | ||
| 2504 | } | ||
| 2505 | |||
| 2506 | rendererData->viewportDirty = true; | ||
| 2507 | |||
| 2508 | return result; | ||
| 2509 | } | ||
| 2510 | |||
| 2511 | static bool VULKAN_HandleDeviceLost(SDL_Renderer *renderer) | ||
| 2512 | { | ||
| 2513 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2514 | bool recovered = false; | ||
| 2515 | |||
| 2516 | VULKAN_DestroyAll(renderer); | ||
| 2517 | |||
| 2518 | if (VULKAN_CreateDeviceResources(renderer, rendererData->create_props) == VK_SUCCESS && | ||
| 2519 | VULKAN_CreateWindowSizeDependentResources(renderer) == VK_SUCCESS) { | ||
| 2520 | recovered = true; | ||
| 2521 | } else { | ||
| 2522 | SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Renderer couldn't recover from device lost: %s", SDL_GetError()); | ||
| 2523 | VULKAN_DestroyAll(renderer); | ||
| 2524 | } | ||
| 2525 | |||
| 2526 | // Let the application know that the device has been reset or lost | ||
| 2527 | SDL_Event event; | ||
| 2528 | SDL_zero(event); | ||
| 2529 | event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST; | ||
| 2530 | event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer)); | ||
| 2531 | SDL_PushEvent(&event); | ||
| 2532 | |||
| 2533 | return recovered; | ||
| 2534 | } | ||
| 2535 | |||
| 2536 | // This method is called when the window's size changes. | ||
| 2537 | static VkResult VULKAN_UpdateForWindowSizeChange(SDL_Renderer *renderer) | ||
| 2538 | { | ||
| 2539 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2540 | // If the GPU has previous work, wait for it to be done first | ||
| 2541 | VULKAN_WaitForGPU(rendererData); | ||
| 2542 | |||
| 2543 | return VULKAN_CreateWindowSizeDependentResources(renderer); | ||
| 2544 | } | ||
| 2545 | |||
| 2546 | static void VULKAN_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) | ||
| 2547 | { | ||
| 2548 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2549 | |||
| 2550 | if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) { | ||
| 2551 | rendererData->recreateSwapchain = true; | ||
| 2552 | } | ||
| 2553 | } | ||
| 2554 | |||
| 2555 | static bool VULKAN_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) | ||
| 2556 | { | ||
| 2557 | SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode); | ||
| 2558 | SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode); | ||
| 2559 | SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode); | ||
| 2560 | SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode); | ||
| 2561 | SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode); | ||
| 2562 | SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode); | ||
| 2563 | |||
| 2564 | if (GetBlendFactor(srcColorFactor) == VK_BLEND_FACTOR_MAX_ENUM || | ||
| 2565 | GetBlendFactor(srcAlphaFactor) == VK_BLEND_FACTOR_MAX_ENUM || | ||
| 2566 | GetBlendOp(colorOperation) == VK_BLEND_OP_MAX_ENUM || | ||
| 2567 | GetBlendFactor(dstColorFactor) == VK_BLEND_FACTOR_MAX_ENUM || | ||
| 2568 | GetBlendFactor(dstAlphaFactor) == VK_BLEND_FACTOR_MAX_ENUM || | ||
| 2569 | GetBlendOp(alphaOperation) == VK_BLEND_OP_MAX_ENUM) { | ||
| 2570 | return false; | ||
| 2571 | } | ||
| 2572 | return true; | ||
| 2573 | } | ||
| 2574 | |||
| 2575 | static bool VULKAN_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props) | ||
| 2576 | { | ||
| 2577 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2578 | VULKAN_TextureData *textureData; | ||
| 2579 | VkResult result; | ||
| 2580 | VkFormat textureFormat = SDLPixelFormatToVkTextureFormat(texture->format, renderer->output_colorspace); | ||
| 2581 | uint32_t width = texture->w; | ||
| 2582 | uint32_t height = texture->h; | ||
| 2583 | VkComponentMapping imageViewSwizzle = rendererData->identitySwizzle; | ||
| 2584 | |||
| 2585 | if (!rendererData->device) { | ||
| 2586 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 2587 | } | ||
| 2588 | |||
| 2589 | if (textureFormat == VK_FORMAT_UNDEFINED) { | ||
| 2590 | return SDL_SetError("%s, An unsupported SDL pixel format (0x%x) was specified", __FUNCTION__, texture->format); | ||
| 2591 | } | ||
| 2592 | |||
| 2593 | textureData = (VULKAN_TextureData *)SDL_calloc(1, sizeof(*textureData)); | ||
| 2594 | if (!textureData) { | ||
| 2595 | return false; | ||
| 2596 | } | ||
| 2597 | texture->internal = textureData; | ||
| 2598 | if (SDL_COLORSPACETRANSFER(texture->colorspace) == SDL_TRANSFER_CHARACTERISTICS_SRGB) { | ||
| 2599 | textureData->shader = SHADER_RGB; | ||
| 2600 | } else { | ||
| 2601 | textureData->shader = SHADER_ADVANCED; | ||
| 2602 | } | ||
| 2603 | textureData->scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? VK_FILTER_NEAREST : VK_FILTER_LINEAR; | ||
| 2604 | |||
| 2605 | #ifdef SDL_HAVE_YUV | ||
| 2606 | // YUV textures must have even width and height. Also create Ycbcr conversion | ||
| 2607 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 2608 | texture->format == SDL_PIXELFORMAT_IYUV || | ||
| 2609 | texture->format == SDL_PIXELFORMAT_NV12 || | ||
| 2610 | texture->format == SDL_PIXELFORMAT_NV21 || | ||
| 2611 | texture->format == SDL_PIXELFORMAT_P010) { | ||
| 2612 | const uint32_t YUV_SD_THRESHOLD = 576; | ||
| 2613 | |||
| 2614 | // Check that we have VK_KHR_sampler_ycbcr_conversion support | ||
| 2615 | if (!rendererData->supportsKHRSamplerYCbCrConversion) { | ||
| 2616 | return SDL_SetError("YUV textures require a Vulkan device that supports VK_KHR_sampler_ycbcr_conversion"); | ||
| 2617 | } | ||
| 2618 | |||
| 2619 | VkSamplerYcbcrConversionCreateInfoKHR samplerYcbcrConversionCreateInfo = { 0 }; | ||
| 2620 | samplerYcbcrConversionCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR; | ||
| 2621 | |||
| 2622 | // Pad width/height to multiple of 2 | ||
| 2623 | width = (width + 1) & ~1; | ||
| 2624 | height = (height + 1) & ~1; | ||
| 2625 | |||
| 2626 | // Create samplerYcbcrConversion which will be used on the VkImageView and VkSampler | ||
| 2627 | samplerYcbcrConversionCreateInfo.format = textureFormat; | ||
| 2628 | switch (SDL_COLORSPACEMATRIX(texture->colorspace)) { | ||
| 2629 | case SDL_MATRIX_COEFFICIENTS_BT470BG: | ||
| 2630 | case SDL_MATRIX_COEFFICIENTS_BT601: | ||
| 2631 | samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR; | ||
| 2632 | break; | ||
| 2633 | case SDL_MATRIX_COEFFICIENTS_BT709: | ||
| 2634 | samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR; | ||
| 2635 | break; | ||
| 2636 | case SDL_MATRIX_COEFFICIENTS_BT2020_NCL: | ||
| 2637 | samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR; | ||
| 2638 | break; | ||
| 2639 | case SDL_MATRIX_COEFFICIENTS_UNSPECIFIED: | ||
| 2640 | if (texture->format == SDL_PIXELFORMAT_P010) { | ||
| 2641 | samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR; | ||
| 2642 | } else if (height > YUV_SD_THRESHOLD) { | ||
| 2643 | samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR; | ||
| 2644 | } else { | ||
| 2645 | samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR; | ||
| 2646 | } | ||
| 2647 | break; | ||
| 2648 | default: | ||
| 2649 | return SDL_SetError("Unsupported Ycbcr colorspace: %d", SDL_COLORSPACEMATRIX(texture->colorspace)); | ||
| 2650 | } | ||
| 2651 | samplerYcbcrConversionCreateInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2652 | samplerYcbcrConversionCreateInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2653 | samplerYcbcrConversionCreateInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2654 | samplerYcbcrConversionCreateInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 2655 | if (texture->format == SDL_PIXELFORMAT_YV12 || | ||
| 2656 | texture->format == SDL_PIXELFORMAT_NV21) { | ||
| 2657 | samplerYcbcrConversionCreateInfo.components.r = VK_COMPONENT_SWIZZLE_B; | ||
| 2658 | samplerYcbcrConversionCreateInfo.components.b = VK_COMPONENT_SWIZZLE_R; | ||
| 2659 | } | ||
| 2660 | |||
| 2661 | switch (SDL_COLORSPACERANGE(texture->colorspace)) { | ||
| 2662 | case SDL_COLOR_RANGE_LIMITED: | ||
| 2663 | samplerYcbcrConversionCreateInfo.ycbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR; | ||
| 2664 | break; | ||
| 2665 | case SDL_COLOR_RANGE_FULL: | ||
| 2666 | default: | ||
| 2667 | samplerYcbcrConversionCreateInfo.ycbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR; | ||
| 2668 | break; | ||
| 2669 | } | ||
| 2670 | |||
| 2671 | switch (SDL_COLORSPACECHROMA(texture->colorspace)) { | ||
| 2672 | case SDL_CHROMA_LOCATION_LEFT: | ||
| 2673 | samplerYcbcrConversionCreateInfo.xChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN_KHR; | ||
| 2674 | samplerYcbcrConversionCreateInfo.yChromaOffset = VK_CHROMA_LOCATION_MIDPOINT_KHR; | ||
| 2675 | break; | ||
| 2676 | case SDL_CHROMA_LOCATION_TOPLEFT: | ||
| 2677 | samplerYcbcrConversionCreateInfo.xChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN_KHR; | ||
| 2678 | samplerYcbcrConversionCreateInfo.yChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN_KHR; | ||
| 2679 | break; | ||
| 2680 | case SDL_CHROMA_LOCATION_NONE: | ||
| 2681 | case SDL_CHROMA_LOCATION_CENTER: | ||
| 2682 | default: | ||
| 2683 | samplerYcbcrConversionCreateInfo.xChromaOffset = VK_CHROMA_LOCATION_MIDPOINT_KHR; | ||
| 2684 | samplerYcbcrConversionCreateInfo.yChromaOffset = VK_CHROMA_LOCATION_MIDPOINT_KHR; | ||
| 2685 | break; | ||
| 2686 | } | ||
| 2687 | samplerYcbcrConversionCreateInfo.chromaFilter = VK_FILTER_LINEAR; | ||
| 2688 | samplerYcbcrConversionCreateInfo.forceExplicitReconstruction = VK_FALSE; | ||
| 2689 | |||
| 2690 | result = vkCreateSamplerYcbcrConversionKHR(rendererData->device, &samplerYcbcrConversionCreateInfo, NULL, &textureData->samplerYcbcrConversion); | ||
| 2691 | if (result != VK_SUCCESS) { | ||
| 2692 | SET_ERROR_CODE("vkCreateSamplerYcbcrConversionKHR()", result); | ||
| 2693 | return false; | ||
| 2694 | } | ||
| 2695 | |||
| 2696 | // Also create VkSampler object which we will need to pass to the PSO as an immutable sampler | ||
| 2697 | VkSamplerCreateInfo samplerCreateInfo = { 0 }; | ||
| 2698 | samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; | ||
| 2699 | samplerCreateInfo.magFilter = VK_FILTER_NEAREST; | ||
| 2700 | samplerCreateInfo.minFilter = VK_FILTER_NEAREST; | ||
| 2701 | samplerCreateInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; | ||
| 2702 | samplerCreateInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT; | ||
| 2703 | samplerCreateInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT; | ||
| 2704 | samplerCreateInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; | ||
| 2705 | samplerCreateInfo.mipLodBias = 0.0f; | ||
| 2706 | samplerCreateInfo.anisotropyEnable = VK_FALSE; | ||
| 2707 | samplerCreateInfo.maxAnisotropy = 1.0f; | ||
| 2708 | samplerCreateInfo.minLod = 0.0f; | ||
| 2709 | samplerCreateInfo.maxLod = 1000.0f; | ||
| 2710 | |||
| 2711 | VkSamplerYcbcrConversionInfoKHR samplerYcbcrConversionInfo = { 0 }; | ||
| 2712 | samplerYcbcrConversionInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR; | ||
| 2713 | samplerYcbcrConversionInfo.conversion = textureData->samplerYcbcrConversion; | ||
| 2714 | samplerCreateInfo.pNext = &samplerYcbcrConversionInfo; | ||
| 2715 | result = vkCreateSampler(rendererData->device, &samplerCreateInfo, NULL, &textureData->samplerYcbcr); | ||
| 2716 | if (result != VK_SUCCESS) { | ||
| 2717 | SET_ERROR_CODE("vkCreateSampler()", result); | ||
| 2718 | return false; | ||
| 2719 | } | ||
| 2720 | |||
| 2721 | // Allocate special descriptor set layout with samplerYcbcr baked as an immutable sampler | ||
| 2722 | result = VULKAN_CreateDescriptorSetAndPipelineLayout(rendererData, textureData->samplerYcbcr, &textureData->descriptorSetLayoutYcbcr, &textureData->pipelineLayoutYcbcr); | ||
| 2723 | if (result != VK_SUCCESS) { | ||
| 2724 | return false; | ||
| 2725 | } | ||
| 2726 | } | ||
| 2727 | #endif | ||
| 2728 | textureData->width = width; | ||
| 2729 | textureData->height = height; | ||
| 2730 | |||
| 2731 | VkImageUsageFlags usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; | ||
| 2732 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 2733 | usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; | ||
| 2734 | } | ||
| 2735 | |||
| 2736 | result = VULKAN_AllocateImage(rendererData, create_props, width, height, textureFormat, usage, imageViewSwizzle, textureData->samplerYcbcrConversion, &textureData->mainImage); | ||
| 2737 | if (result != VK_SUCCESS) { | ||
| 2738 | SET_ERROR_CODE("VULKAN_AllocateImage()", result); | ||
| 2739 | return false; | ||
| 2740 | } | ||
| 2741 | |||
| 2742 | SDL_PropertiesID props = SDL_GetTextureProperties(texture); | ||
| 2743 | SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER, (Sint64)textureData->mainImage.image); | ||
| 2744 | |||
| 2745 | if (texture->access == SDL_TEXTUREACCESS_TARGET) { | ||
| 2746 | result = VULKAN_CreateFramebuffersAndRenderPasses(renderer, | ||
| 2747 | texture->w, | ||
| 2748 | texture->h, | ||
| 2749 | textureFormat, | ||
| 2750 | 1, | ||
| 2751 | &textureData->mainImage.imageView, | ||
| 2752 | &textureData->mainFramebuffer, | ||
| 2753 | textureData->mainRenderpasses); | ||
| 2754 | if (result != VK_SUCCESS) { | ||
| 2755 | SET_ERROR_CODE("VULKAN_CreateFramebuffersAndRenderPasses()", result); | ||
| 2756 | return false; | ||
| 2757 | } | ||
| 2758 | } | ||
| 2759 | return true; | ||
| 2760 | } | ||
| 2761 | |||
| 2762 | static void VULKAN_DestroyTexture(SDL_Renderer *renderer, | ||
| 2763 | SDL_Texture *texture) | ||
| 2764 | { | ||
| 2765 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2766 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 2767 | |||
| 2768 | if (!textureData) { | ||
| 2769 | return; | ||
| 2770 | } | ||
| 2771 | |||
| 2772 | /* Because SDL_DestroyTexture might be called while the data is in-flight, we need to issue the batch first | ||
| 2773 | Unfortunately, this means that deleting a lot of textures mid-frame will have poor performance. */ | ||
| 2774 | VULKAN_IssueBatch(rendererData); | ||
| 2775 | VULKAN_WaitForGPU(rendererData); | ||
| 2776 | |||
| 2777 | VULKAN_DestroyImage(rendererData, &textureData->mainImage); | ||
| 2778 | |||
| 2779 | #ifdef SDL_HAVE_YUV | ||
| 2780 | if (textureData->samplerYcbcrConversion != VK_NULL_HANDLE) { | ||
| 2781 | vkDestroySamplerYcbcrConversionKHR(rendererData->device, textureData->samplerYcbcrConversion, NULL); | ||
| 2782 | textureData->samplerYcbcrConversion = VK_NULL_HANDLE; | ||
| 2783 | } | ||
| 2784 | if (textureData->samplerYcbcr != VK_NULL_HANDLE) { | ||
| 2785 | vkDestroySampler(rendererData->device, textureData->samplerYcbcr, NULL); | ||
| 2786 | textureData->samplerYcbcr = VK_NULL_HANDLE; | ||
| 2787 | } | ||
| 2788 | if (textureData->pipelineLayoutYcbcr != VK_NULL_HANDLE) { | ||
| 2789 | vkDestroyPipelineLayout(rendererData->device, textureData->pipelineLayoutYcbcr, NULL); | ||
| 2790 | textureData->pipelineLayoutYcbcr = VK_NULL_HANDLE; | ||
| 2791 | } | ||
| 2792 | if (textureData->descriptorSetLayoutYcbcr != VK_NULL_HANDLE) { | ||
| 2793 | vkDestroyDescriptorSetLayout(rendererData->device, textureData->descriptorSetLayoutYcbcr, NULL); | ||
| 2794 | textureData->descriptorSetLayoutYcbcr = VK_NULL_HANDLE; | ||
| 2795 | } | ||
| 2796 | #endif | ||
| 2797 | |||
| 2798 | VULKAN_DestroyBuffer(rendererData, &textureData->stagingBuffer); | ||
| 2799 | if (textureData->mainFramebuffer != VK_NULL_HANDLE) { | ||
| 2800 | vkDestroyFramebuffer(rendererData->device, textureData->mainFramebuffer, NULL); | ||
| 2801 | textureData->mainFramebuffer = VK_NULL_HANDLE; | ||
| 2802 | } | ||
| 2803 | for (uint32_t i = 0; i < SDL_arraysize(textureData->mainRenderpasses); i++) { | ||
| 2804 | if (textureData->mainRenderpasses[i] != VK_NULL_HANDLE) { | ||
| 2805 | vkDestroyRenderPass(rendererData->device, textureData->mainRenderpasses[i], NULL); | ||
| 2806 | textureData->mainRenderpasses[i] = VK_NULL_HANDLE; | ||
| 2807 | } | ||
| 2808 | } | ||
| 2809 | |||
| 2810 | SDL_free(textureData); | ||
| 2811 | texture->internal = NULL; | ||
| 2812 | } | ||
| 2813 | |||
| 2814 | static bool VULKAN_UpdateTextureInternal(VULKAN_RenderData *rendererData, VkImage image, VkFormat format, int plane, int x, int y, int w, int h, const void *pixels, int pitch, VkImageLayout *imageLayout) | ||
| 2815 | { | ||
| 2816 | VkDeviceSize pixelSize = VULKAN_GetBytesPerPixel(format); | ||
| 2817 | VkDeviceSize length = w * pixelSize; | ||
| 2818 | VkDeviceSize uploadBufferSize = length * h; | ||
| 2819 | const Uint8 *src; | ||
| 2820 | Uint8 *dst; | ||
| 2821 | VkResult rc; | ||
| 2822 | int planeCount = VULKAN_VkFormatGetNumPlanes(format); | ||
| 2823 | |||
| 2824 | VULKAN_EnsureCommandBuffer(rendererData); | ||
| 2825 | |||
| 2826 | int currentUploadBufferIndex = rendererData->currentUploadBuffer[rendererData->currentCommandBufferIndex]; | ||
| 2827 | VULKAN_Buffer *uploadBuffer = &rendererData->uploadBuffers[rendererData->currentCommandBufferIndex][currentUploadBufferIndex]; | ||
| 2828 | |||
| 2829 | rc = VULKAN_AllocateBuffer(rendererData, uploadBufferSize, | ||
| 2830 | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, | ||
| 2831 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | | ||
| 2832 | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, | ||
| 2833 | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, | ||
| 2834 | uploadBuffer); | ||
| 2835 | if (rc != VK_SUCCESS) { | ||
| 2836 | return false; | ||
| 2837 | } | ||
| 2838 | |||
| 2839 | src = (const Uint8 *)pixels; | ||
| 2840 | dst = (Uint8 *)uploadBuffer->mappedBufferPtr; | ||
| 2841 | if (length == (VkDeviceSize)pitch) { | ||
| 2842 | SDL_memcpy(dst, src, (size_t)length * h); | ||
| 2843 | } else { | ||
| 2844 | if (length > (VkDeviceSize)pitch) { | ||
| 2845 | length = pitch; | ||
| 2846 | } | ||
| 2847 | for (VkDeviceSize row = h; row--; ) { | ||
| 2848 | SDL_memcpy(dst, src, (size_t)length); | ||
| 2849 | src += pitch; | ||
| 2850 | dst += length; | ||
| 2851 | } | ||
| 2852 | } | ||
| 2853 | |||
| 2854 | // Make sure the destination is in the correct resource state | ||
| 2855 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 2856 | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 2857 | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 2858 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 2859 | VK_PIPELINE_STAGE_TRANSFER_BIT, | ||
| 2860 | VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | ||
| 2861 | image, | ||
| 2862 | imageLayout); | ||
| 2863 | |||
| 2864 | VkBufferImageCopy region; | ||
| 2865 | region.bufferOffset = 0; | ||
| 2866 | region.bufferRowLength = 0; | ||
| 2867 | region.bufferImageHeight = 0; | ||
| 2868 | region.imageSubresource.baseArrayLayer = 0; | ||
| 2869 | region.imageSubresource.layerCount = 1; | ||
| 2870 | region.imageSubresource.mipLevel = 0; | ||
| 2871 | if (planeCount <= 1) { | ||
| 2872 | region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | ||
| 2873 | } else { | ||
| 2874 | region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_PLANE_0_BIT << plane; | ||
| 2875 | } | ||
| 2876 | region.imageOffset.x = x; | ||
| 2877 | region.imageOffset.y = y; | ||
| 2878 | region.imageOffset.z = 0; | ||
| 2879 | region.imageExtent.width = w; | ||
| 2880 | region.imageExtent.height = h; | ||
| 2881 | region.imageExtent.depth = 1; | ||
| 2882 | |||
| 2883 | vkCmdCopyBufferToImage(rendererData->currentCommandBuffer, uploadBuffer->buffer, image, *imageLayout, 1, ®ion); | ||
| 2884 | |||
| 2885 | // Transition the texture to be shader accessible | ||
| 2886 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 2887 | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 2888 | VK_ACCESS_SHADER_READ_BIT, | ||
| 2889 | VK_PIPELINE_STAGE_TRANSFER_BIT, | ||
| 2890 | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 2891 | VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, | ||
| 2892 | image, | ||
| 2893 | imageLayout); | ||
| 2894 | |||
| 2895 | rendererData->currentUploadBuffer[rendererData->currentCommandBufferIndex]++; | ||
| 2896 | |||
| 2897 | // If we've used up all the upload buffers, we need to issue the batch | ||
| 2898 | if (rendererData->currentUploadBuffer[rendererData->currentCommandBufferIndex] == SDL_VULKAN_NUM_UPLOAD_BUFFERS) { | ||
| 2899 | VULKAN_IssueBatch(rendererData); | ||
| 2900 | } | ||
| 2901 | |||
| 2902 | return true; | ||
| 2903 | } | ||
| 2904 | |||
| 2905 | |||
| 2906 | static bool VULKAN_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 2907 | const SDL_Rect *rect, const void *srcPixels, | ||
| 2908 | int srcPitch) | ||
| 2909 | { | ||
| 2910 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2911 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 2912 | |||
| 2913 | if (!textureData) { | ||
| 2914 | return SDL_SetError("Texture is not currently available"); | ||
| 2915 | } | ||
| 2916 | |||
| 2917 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 0, rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch, &textureData->mainImage.imageLayout)) { | ||
| 2918 | return false; | ||
| 2919 | } | ||
| 2920 | #ifdef SDL_HAVE_YUV | ||
| 2921 | Uint32 numPlanes = VULKAN_VkFormatGetNumPlanes(textureData->mainImage.format); | ||
| 2922 | // Skip to the correct offset into the next texture | ||
| 2923 | srcPixels = (const void *)((const Uint8 *)srcPixels + rect->h * srcPitch); | ||
| 2924 | // YUV data | ||
| 2925 | if (numPlanes == 3) { | ||
| 2926 | for (Uint32 plane = 1; plane < numPlanes; plane++) { | ||
| 2927 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, plane, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, srcPixels, (srcPitch + 1) / 2, &textureData->mainImage.imageLayout)) { | ||
| 2928 | return false; | ||
| 2929 | } | ||
| 2930 | |||
| 2931 | // Skip to the correct offset into the next texture | ||
| 2932 | srcPixels = (const void *)((const Uint8 *)srcPixels + ((rect->h + 1) / 2) * ((srcPitch + 1) / 2)); | ||
| 2933 | } | ||
| 2934 | } | ||
| 2935 | // NV12/NV21 data | ||
| 2936 | else if (numPlanes == 2) | ||
| 2937 | { | ||
| 2938 | if (texture->format == SDL_PIXELFORMAT_P010) { | ||
| 2939 | srcPitch = (srcPitch + 3) & ~3; | ||
| 2940 | } else { | ||
| 2941 | srcPitch = (srcPitch + 1) & ~1; | ||
| 2942 | } | ||
| 2943 | |||
| 2944 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 1, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, srcPixels, srcPitch, &textureData->mainImage.imageLayout)) { | ||
| 2945 | return false; | ||
| 2946 | } | ||
| 2947 | } | ||
| 2948 | #endif | ||
| 2949 | return true; | ||
| 2950 | } | ||
| 2951 | |||
| 2952 | #ifdef SDL_HAVE_YUV | ||
| 2953 | static bool VULKAN_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 2954 | const SDL_Rect *rect, | ||
| 2955 | const Uint8 *Yplane, int Ypitch, | ||
| 2956 | const Uint8 *Uplane, int Upitch, | ||
| 2957 | const Uint8 *Vplane, int Vpitch) | ||
| 2958 | { | ||
| 2959 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2960 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 2961 | |||
| 2962 | if (!textureData) { | ||
| 2963 | return SDL_SetError("Texture is not currently available"); | ||
| 2964 | } | ||
| 2965 | |||
| 2966 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 0, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch, &textureData->mainImage.imageLayout)) { | ||
| 2967 | return false; | ||
| 2968 | } | ||
| 2969 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 1, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Uplane, Upitch, &textureData->mainImage.imageLayout)) { | ||
| 2970 | return false; | ||
| 2971 | } | ||
| 2972 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 2, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Vplane, Vpitch, &textureData->mainImage.imageLayout)) { | ||
| 2973 | return false; | ||
| 2974 | } | ||
| 2975 | return true; | ||
| 2976 | } | ||
| 2977 | |||
| 2978 | static bool VULKAN_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 2979 | const SDL_Rect *rect, | ||
| 2980 | const Uint8 *Yplane, int Ypitch, | ||
| 2981 | const Uint8 *UVplane, int UVpitch) | ||
| 2982 | { | ||
| 2983 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 2984 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 2985 | |||
| 2986 | if (!textureData) { | ||
| 2987 | return SDL_SetError("Texture is not currently available"); | ||
| 2988 | } | ||
| 2989 | |||
| 2990 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 0, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch, &textureData->mainImage.imageLayout)) { | ||
| 2991 | return false; | ||
| 2992 | } | ||
| 2993 | |||
| 2994 | if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 1, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, UVplane, UVpitch, &textureData->mainImage.imageLayout)) { | ||
| 2995 | return false; | ||
| 2996 | } | ||
| 2997 | return true; | ||
| 2998 | } | ||
| 2999 | #endif | ||
| 3000 | |||
| 3001 | static bool VULKAN_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, | ||
| 3002 | const SDL_Rect *rect, void **pixels, int *pitch) | ||
| 3003 | { | ||
| 3004 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3005 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 3006 | VkResult rc; | ||
| 3007 | if (!textureData) { | ||
| 3008 | return SDL_SetError("Texture is not currently available"); | ||
| 3009 | } | ||
| 3010 | |||
| 3011 | if (textureData->stagingBuffer.buffer != VK_NULL_HANDLE) { | ||
| 3012 | return SDL_SetError("texture is already locked"); | ||
| 3013 | } | ||
| 3014 | |||
| 3015 | VkDeviceSize pixelSize = VULKAN_GetBytesPerPixel(textureData->mainImage.format); | ||
| 3016 | VkDeviceSize length = rect->w * pixelSize; | ||
| 3017 | VkDeviceSize stagingBufferSize = length * rect->h; | ||
| 3018 | rc = VULKAN_AllocateBuffer(rendererData, | ||
| 3019 | stagingBufferSize, | ||
| 3020 | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, | ||
| 3021 | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | | ||
| 3022 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, | ||
| 3023 | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, | ||
| 3024 | &textureData->stagingBuffer); | ||
| 3025 | if (rc != VK_SUCCESS) { | ||
| 3026 | return false; | ||
| 3027 | } | ||
| 3028 | |||
| 3029 | /* Make note of where the staging texture will be written to | ||
| 3030 | * (on a call to SDL_UnlockTexture): | ||
| 3031 | */ | ||
| 3032 | textureData->lockedRect = *rect; | ||
| 3033 | |||
| 3034 | /* Make sure the caller has information on the texture's pixel buffer, | ||
| 3035 | * then return: | ||
| 3036 | */ | ||
| 3037 | *pixels = textureData->stagingBuffer.mappedBufferPtr; | ||
| 3038 | *pitch = (int)length; | ||
| 3039 | return true; | ||
| 3040 | |||
| 3041 | } | ||
| 3042 | |||
| 3043 | static void VULKAN_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 3044 | { | ||
| 3045 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3046 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 3047 | |||
| 3048 | if (!textureData) { | ||
| 3049 | return; | ||
| 3050 | } | ||
| 3051 | |||
| 3052 | VULKAN_EnsureCommandBuffer(rendererData); | ||
| 3053 | |||
| 3054 | // Make sure the destination is in the correct resource state | ||
| 3055 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 3056 | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 3057 | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 3058 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 3059 | VK_PIPELINE_STAGE_TRANSFER_BIT, | ||
| 3060 | VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | ||
| 3061 | textureData->mainImage.image, | ||
| 3062 | &textureData->mainImage.imageLayout); | ||
| 3063 | |||
| 3064 | VkBufferImageCopy region; | ||
| 3065 | region.bufferOffset = 0; | ||
| 3066 | region.bufferRowLength = 0; | ||
| 3067 | region.bufferImageHeight = 0; | ||
| 3068 | region.imageSubresource.baseArrayLayer = 0; | ||
| 3069 | region.imageSubresource.layerCount = 1; | ||
| 3070 | region.imageSubresource.mipLevel = 0; | ||
| 3071 | region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | ||
| 3072 | region.imageOffset.x = textureData->lockedRect.x; | ||
| 3073 | region.imageOffset.y = textureData->lockedRect.y; | ||
| 3074 | region.imageOffset.z = 0; | ||
| 3075 | region.imageExtent.width = textureData->lockedRect.w; | ||
| 3076 | region.imageExtent.height = textureData->lockedRect.h; | ||
| 3077 | region.imageExtent.depth = 1; | ||
| 3078 | vkCmdCopyBufferToImage(rendererData->currentCommandBuffer, textureData->stagingBuffer.buffer, textureData->mainImage.image, textureData->mainImage.imageLayout, 1, ®ion); | ||
| 3079 | |||
| 3080 | // Transition the texture to be shader accessible | ||
| 3081 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 3082 | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 3083 | VK_ACCESS_SHADER_READ_BIT, | ||
| 3084 | VK_PIPELINE_STAGE_TRANSFER_BIT, | ||
| 3085 | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 3086 | VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, | ||
| 3087 | textureData->mainImage.image, | ||
| 3088 | &textureData->mainImage.imageLayout); | ||
| 3089 | |||
| 3090 | // Execute the command list before releasing the staging buffer | ||
| 3091 | VULKAN_IssueBatch(rendererData); | ||
| 3092 | |||
| 3093 | VULKAN_DestroyBuffer(rendererData, &textureData->stagingBuffer); | ||
| 3094 | } | ||
| 3095 | |||
| 3096 | static void VULKAN_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) | ||
| 3097 | { | ||
| 3098 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 3099 | |||
| 3100 | if (!textureData) { | ||
| 3101 | return; | ||
| 3102 | } | ||
| 3103 | |||
| 3104 | textureData->scaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? VK_FILTER_NEAREST : VK_FILTER_LINEAR; | ||
| 3105 | } | ||
| 3106 | |||
| 3107 | static bool VULKAN_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) | ||
| 3108 | { | ||
| 3109 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3110 | VULKAN_TextureData *textureData = NULL; | ||
| 3111 | |||
| 3112 | VULKAN_EnsureCommandBuffer(rendererData); | ||
| 3113 | |||
| 3114 | if (!texture) { | ||
| 3115 | if (rendererData->textureRenderTarget) { | ||
| 3116 | |||
| 3117 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 3118 | VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 3119 | VK_ACCESS_SHADER_READ_BIT, | ||
| 3120 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 3121 | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 3122 | VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, | ||
| 3123 | rendererData->textureRenderTarget->mainImage.image, | ||
| 3124 | &rendererData->textureRenderTarget->mainImage.imageLayout); | ||
| 3125 | } | ||
| 3126 | rendererData->textureRenderTarget = NULL; | ||
| 3127 | return true; | ||
| 3128 | } | ||
| 3129 | |||
| 3130 | textureData = (VULKAN_TextureData *)texture->internal; | ||
| 3131 | |||
| 3132 | if (textureData->mainImage.imageView == VK_NULL_HANDLE) { | ||
| 3133 | return SDL_SetError("specified texture is not a render target"); | ||
| 3134 | } | ||
| 3135 | |||
| 3136 | rendererData->textureRenderTarget = textureData; | ||
| 3137 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 3138 | VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 3139 | VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 3140 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 3141 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 3142 | VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | ||
| 3143 | rendererData->textureRenderTarget->mainImage.image, | ||
| 3144 | &rendererData->textureRenderTarget->mainImage.imageLayout); | ||
| 3145 | |||
| 3146 | return true; | ||
| 3147 | } | ||
| 3148 | |||
| 3149 | static bool VULKAN_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd) | ||
| 3150 | { | ||
| 3151 | return true; // nothing to do in this backend. | ||
| 3152 | } | ||
| 3153 | |||
| 3154 | static bool VULKAN_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count) | ||
| 3155 | { | ||
| 3156 | VULKAN_VertexPositionColor *verts = (VULKAN_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(VULKAN_VertexPositionColor), 0, &cmd->data.draw.first); | ||
| 3157 | int i; | ||
| 3158 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 3159 | |||
| 3160 | if (!verts) { | ||
| 3161 | return false; | ||
| 3162 | } | ||
| 3163 | |||
| 3164 | cmd->data.draw.count = count; | ||
| 3165 | for (i = 0; i < count; i++) { | ||
| 3166 | verts->pos[0] = points[i].x + 0.5f; | ||
| 3167 | verts->pos[1] = points[i].y + 0.5f; | ||
| 3168 | verts->tex[0] = 0.0f; | ||
| 3169 | verts->tex[1] = 0.0f; | ||
| 3170 | verts->color = cmd->data.draw.color; | ||
| 3171 | if (convert_color) { | ||
| 3172 | SDL_ConvertToLinear(&verts->color); | ||
| 3173 | } | ||
| 3174 | verts++; | ||
| 3175 | } | ||
| 3176 | return true; | ||
| 3177 | } | ||
| 3178 | |||
| 3179 | static bool VULKAN_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, | ||
| 3180 | const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, | ||
| 3181 | int num_vertices, const void *indices, int num_indices, int size_indices, | ||
| 3182 | float scale_x, float scale_y) | ||
| 3183 | { | ||
| 3184 | int i; | ||
| 3185 | int count = indices ? num_indices : num_vertices; | ||
| 3186 | VULKAN_VertexPositionColor *verts = (VULKAN_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(VULKAN_VertexPositionColor), 0, &cmd->data.draw.first); | ||
| 3187 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 3188 | VULKAN_TextureData *textureData = texture ? (VULKAN_TextureData *)texture->internal : NULL; | ||
| 3189 | float u_scale = textureData ? (float)texture->w / textureData->width : 0.0f; | ||
| 3190 | float v_scale = textureData ? (float)texture->h / textureData->height : 0.0f; | ||
| 3191 | |||
| 3192 | if (!verts) { | ||
| 3193 | return false; | ||
| 3194 | } | ||
| 3195 | |||
| 3196 | cmd->data.draw.count = count; | ||
| 3197 | size_indices = indices ? size_indices : 0; | ||
| 3198 | |||
| 3199 | for (i = 0; i < count; i++) { | ||
| 3200 | int j; | ||
| 3201 | float *xy_; | ||
| 3202 | if (size_indices == 4) { | ||
| 3203 | j = ((const Uint32 *)indices)[i]; | ||
| 3204 | } else if (size_indices == 2) { | ||
| 3205 | j = ((const Uint16 *)indices)[i]; | ||
| 3206 | } else if (size_indices == 1) { | ||
| 3207 | j = ((const Uint8 *)indices)[i]; | ||
| 3208 | } else { | ||
| 3209 | j = i; | ||
| 3210 | } | ||
| 3211 | |||
| 3212 | xy_ = (float *)((char *)xy + j * xy_stride); | ||
| 3213 | |||
| 3214 | verts->pos[0] = xy_[0] * scale_x; | ||
| 3215 | verts->pos[1] = xy_[1] * scale_y; | ||
| 3216 | verts->color = *(SDL_FColor *)((char *)color + j * color_stride); | ||
| 3217 | if (convert_color) { | ||
| 3218 | SDL_ConvertToLinear(&verts->color); | ||
| 3219 | } | ||
| 3220 | |||
| 3221 | if (texture) { | ||
| 3222 | float *uv_ = (float *)((char *)uv + j * uv_stride); | ||
| 3223 | verts->tex[0] = uv_[0] * u_scale; | ||
| 3224 | verts->tex[1] = uv_[1] * v_scale; | ||
| 3225 | } else { | ||
| 3226 | verts->tex[0] = 0.0f; | ||
| 3227 | verts->tex[1] = 0.0f; | ||
| 3228 | } | ||
| 3229 | |||
| 3230 | verts += 1; | ||
| 3231 | } | ||
| 3232 | return true; | ||
| 3233 | } | ||
| 3234 | |||
| 3235 | static bool VULKAN_UpdateVertexBuffer(SDL_Renderer *renderer, | ||
| 3236 | const void *vertexData, size_t dataSizeInBytes, VULKAN_DrawStateCache *stateCache) | ||
| 3237 | { | ||
| 3238 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3239 | const int vbidx = rendererData->currentVertexBuffer; | ||
| 3240 | VULKAN_Buffer *vertexBuffer; | ||
| 3241 | |||
| 3242 | if (dataSizeInBytes == 0) { | ||
| 3243 | return true; // nothing to do. | ||
| 3244 | } | ||
| 3245 | |||
| 3246 | if (rendererData->issueBatch) { | ||
| 3247 | if (VULKAN_IssueBatch(rendererData) != VK_SUCCESS) { | ||
| 3248 | return SDL_SetError("Failed to issue intermediate batch"); | ||
| 3249 | } | ||
| 3250 | } | ||
| 3251 | // If the existing vertex buffer isn't big enough, we need to recreate a big enough one | ||
| 3252 | if (dataSizeInBytes > rendererData->vertexBuffers[vbidx].size) { | ||
| 3253 | VULKAN_IssueBatch(rendererData); | ||
| 3254 | VULKAN_WaitForGPU(rendererData); | ||
| 3255 | VULKAN_CreateVertexBuffer(rendererData, vbidx, dataSizeInBytes); | ||
| 3256 | } | ||
| 3257 | |||
| 3258 | vertexBuffer = &rendererData->vertexBuffers[vbidx]; | ||
| 3259 | SDL_memcpy(vertexBuffer->mappedBufferPtr, vertexData, dataSizeInBytes); | ||
| 3260 | |||
| 3261 | stateCache->vertexBuffer = vertexBuffer->buffer; | ||
| 3262 | |||
| 3263 | rendererData->currentVertexBuffer = vbidx + 1; | ||
| 3264 | if (rendererData->currentVertexBuffer >= SDL_VULKAN_NUM_VERTEX_BUFFERS) { | ||
| 3265 | rendererData->currentVertexBuffer = 0; | ||
| 3266 | rendererData->issueBatch = true; | ||
| 3267 | } | ||
| 3268 | |||
| 3269 | return true; | ||
| 3270 | } | ||
| 3271 | |||
| 3272 | static VkSurfaceTransformFlagBitsKHR VULKAN_GetRotationForCurrentRenderTarget(VULKAN_RenderData *rendererData) | ||
| 3273 | { | ||
| 3274 | if (rendererData->textureRenderTarget) { | ||
| 3275 | return VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; | ||
| 3276 | } else { | ||
| 3277 | return rendererData->swapChainPreTransform; | ||
| 3278 | } | ||
| 3279 | } | ||
| 3280 | |||
| 3281 | static bool VULKAN_IsDisplayRotated90Degrees(VkSurfaceTransformFlagBitsKHR rotation) | ||
| 3282 | { | ||
| 3283 | switch (rotation) { | ||
| 3284 | case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR: | ||
| 3285 | case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR: | ||
| 3286 | return true; | ||
| 3287 | default: | ||
| 3288 | return false; | ||
| 3289 | } | ||
| 3290 | } | ||
| 3291 | |||
| 3292 | static bool VULKAN_UpdateViewport(SDL_Renderer *renderer) | ||
| 3293 | { | ||
| 3294 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3295 | const SDL_Rect *viewport = &rendererData->currentViewport; | ||
| 3296 | Float4X4 projection; | ||
| 3297 | Float4X4 view; | ||
| 3298 | VkSurfaceTransformFlagBitsKHR rotation = VULKAN_GetRotationForCurrentRenderTarget(rendererData); | ||
| 3299 | bool swapDimensions; | ||
| 3300 | |||
| 3301 | if (viewport->w == 0 || viewport->h == 0) { | ||
| 3302 | /* If the viewport is empty, assume that it is because | ||
| 3303 | * SDL_CreateRenderer is calling it, and will call it again later | ||
| 3304 | * with a non-empty viewport. | ||
| 3305 | */ | ||
| 3306 | // SDL_Log("%s, no viewport was set!", __FUNCTION__); | ||
| 3307 | return false; | ||
| 3308 | } | ||
| 3309 | |||
| 3310 | switch (rotation) { | ||
| 3311 | case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR: | ||
| 3312 | projection = MatrixRotationZ(SDL_PI_F * 0.5f); | ||
| 3313 | break; | ||
| 3314 | case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR: | ||
| 3315 | projection = MatrixRotationZ(SDL_PI_F); | ||
| 3316 | break; | ||
| 3317 | case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR: | ||
| 3318 | projection = MatrixRotationZ(-SDL_PI_F * 0.5f); | ||
| 3319 | break; | ||
| 3320 | case VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR: | ||
| 3321 | default: | ||
| 3322 | projection = MatrixIdentity(); | ||
| 3323 | break; | ||
| 3324 | |||
| 3325 | } | ||
| 3326 | |||
| 3327 | // Update the view matrix | ||
| 3328 | SDL_zero(view); | ||
| 3329 | view.m[0][0] = 2.0f / viewport->w; | ||
| 3330 | view.m[1][1] = -2.0f / viewport->h; | ||
| 3331 | view.m[2][2] = 1.0f; | ||
| 3332 | view.m[3][0] = -1.0f; | ||
| 3333 | view.m[3][1] = 1.0f; | ||
| 3334 | view.m[3][3] = 1.0f; | ||
| 3335 | |||
| 3336 | rendererData->vertexShaderConstantsData.projectionAndView = MatrixMultiply( | ||
| 3337 | view, | ||
| 3338 | projection); | ||
| 3339 | |||
| 3340 | VkViewport vkViewport; | ||
| 3341 | |||
| 3342 | swapDimensions = VULKAN_IsDisplayRotated90Degrees(rotation); | ||
| 3343 | if (swapDimensions) { | ||
| 3344 | vkViewport.x = viewport->y; | ||
| 3345 | vkViewport.y = viewport->x; | ||
| 3346 | vkViewport.width = viewport->h; | ||
| 3347 | vkViewport.height = viewport->w; | ||
| 3348 | } | ||
| 3349 | else { | ||
| 3350 | vkViewport.x = viewport->x; | ||
| 3351 | vkViewport.y = viewport->y; | ||
| 3352 | vkViewport.width = viewport->w; | ||
| 3353 | vkViewport.height = viewport->h; | ||
| 3354 | } | ||
| 3355 | vkViewport.minDepth = 0.0f; | ||
| 3356 | vkViewport.maxDepth = 1.0f; | ||
| 3357 | vkCmdSetViewport(rendererData->currentCommandBuffer, 0, 1, &vkViewport); | ||
| 3358 | |||
| 3359 | rendererData->viewportDirty = false; | ||
| 3360 | return true; | ||
| 3361 | } | ||
| 3362 | |||
| 3363 | static bool VULKAN_UpdateClipRect(SDL_Renderer *renderer) | ||
| 3364 | { | ||
| 3365 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3366 | const SDL_Rect *viewport = &rendererData->currentViewport; | ||
| 3367 | VkSurfaceTransformFlagBitsKHR rotation = VULKAN_GetRotationForCurrentRenderTarget(rendererData); | ||
| 3368 | bool swapDimensions = VULKAN_IsDisplayRotated90Degrees(rotation); | ||
| 3369 | |||
| 3370 | VkRect2D scissor; | ||
| 3371 | if (rendererData->currentCliprectEnabled) { | ||
| 3372 | scissor.offset.x = viewport->x + rendererData->currentCliprect.x; | ||
| 3373 | scissor.offset.y = viewport->y + rendererData->currentCliprect.y; | ||
| 3374 | scissor.extent.width = rendererData->currentCliprect.w; | ||
| 3375 | scissor.extent.height = rendererData->currentCliprect.h; | ||
| 3376 | } else { | ||
| 3377 | scissor.offset.x = viewport->x; | ||
| 3378 | scissor.offset.y = viewport->y; | ||
| 3379 | scissor.extent.width = viewport->w; | ||
| 3380 | scissor.extent.height = viewport->h; | ||
| 3381 | } | ||
| 3382 | if (swapDimensions) { | ||
| 3383 | VkRect2D scissorTemp = scissor; | ||
| 3384 | scissor.offset.x = scissorTemp.offset.y; | ||
| 3385 | scissor.offset.y = scissorTemp.offset.x; | ||
| 3386 | scissor.extent.width = scissorTemp.extent.height; | ||
| 3387 | scissor.extent.height = scissorTemp.extent.width; | ||
| 3388 | } | ||
| 3389 | vkCmdSetScissor(rendererData->currentCommandBuffer, 0, 1, &scissor); | ||
| 3390 | |||
| 3391 | rendererData->cliprectDirty = false; | ||
| 3392 | return true; | ||
| 3393 | } | ||
| 3394 | |||
| 3395 | static void VULKAN_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const SDL_Texture *texture, VULKAN_PixelShaderConstants *constants) | ||
| 3396 | { | ||
| 3397 | float output_headroom; | ||
| 3398 | |||
| 3399 | SDL_zerop(constants); | ||
| 3400 | |||
| 3401 | constants->scRGB_output = (float)SDL_RenderingLinearSpace(renderer); | ||
| 3402 | constants->color_scale = cmd->data.draw.color_scale; | ||
| 3403 | |||
| 3404 | if (texture) { | ||
| 3405 | switch (texture->format) { | ||
| 3406 | case SDL_PIXELFORMAT_YV12: | ||
| 3407 | case SDL_PIXELFORMAT_IYUV: | ||
| 3408 | case SDL_PIXELFORMAT_NV12: | ||
| 3409 | case SDL_PIXELFORMAT_NV21: | ||
| 3410 | constants->input_type = INPUTTYPE_SRGB; | ||
| 3411 | break; | ||
| 3412 | case SDL_PIXELFORMAT_P010: | ||
| 3413 | constants->input_type = INPUTTYPE_HDR10; | ||
| 3414 | break; | ||
| 3415 | default: | ||
| 3416 | if (texture->colorspace == SDL_COLORSPACE_SRGB_LINEAR) { | ||
| 3417 | constants->input_type = INPUTTYPE_SCRGB; | ||
| 3418 | } else if (SDL_COLORSPACEPRIMARIES(texture->colorspace) == SDL_COLOR_PRIMARIES_BT2020 && | ||
| 3419 | SDL_COLORSPACETRANSFER(texture->colorspace) == SDL_TRANSFER_CHARACTERISTICS_PQ) { | ||
| 3420 | constants->input_type = INPUTTYPE_HDR10; | ||
| 3421 | } else { | ||
| 3422 | // The sampler will convert from sRGB to linear on load if working in linear colorspace | ||
| 3423 | constants->input_type = INPUTTYPE_UNSPECIFIED; | ||
| 3424 | } | ||
| 3425 | break; | ||
| 3426 | } | ||
| 3427 | |||
| 3428 | constants->sdr_white_point = texture->SDR_white_point; | ||
| 3429 | |||
| 3430 | if (renderer->target) { | ||
| 3431 | output_headroom = renderer->target->HDR_headroom; | ||
| 3432 | } else { | ||
| 3433 | output_headroom = renderer->HDR_headroom; | ||
| 3434 | } | ||
| 3435 | |||
| 3436 | if (texture->HDR_headroom > output_headroom) { | ||
| 3437 | constants->tonemap_method = TONEMAP_CHROME; | ||
| 3438 | constants->tonemap_factor1 = (output_headroom / (texture->HDR_headroom * texture->HDR_headroom)); | ||
| 3439 | constants->tonemap_factor2 = (1.0f / output_headroom); | ||
| 3440 | } | ||
| 3441 | } | ||
| 3442 | } | ||
| 3443 | |||
| 3444 | static VkDescriptorPool VULKAN_AllocateDescriptorPool(VULKAN_RenderData *rendererData) | ||
| 3445 | { | ||
| 3446 | VkDescriptorPool descriptorPool = VK_NULL_HANDLE; | ||
| 3447 | VkDescriptorPoolSize descriptorPoolSizes[3]; | ||
| 3448 | VkResult result; | ||
| 3449 | descriptorPoolSizes[0].descriptorCount = SDL_VULKAN_MAX_DESCRIPTOR_SETS; | ||
| 3450 | descriptorPoolSizes[0].type = VK_DESCRIPTOR_TYPE_SAMPLER; | ||
| 3451 | |||
| 3452 | descriptorPoolSizes[1].descriptorCount = SDL_VULKAN_MAX_DESCRIPTOR_SETS; | ||
| 3453 | descriptorPoolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; | ||
| 3454 | |||
| 3455 | descriptorPoolSizes[2].descriptorCount = SDL_VULKAN_MAX_DESCRIPTOR_SETS; | ||
| 3456 | descriptorPoolSizes[2].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; | ||
| 3457 | |||
| 3458 | VkDescriptorPoolCreateInfo descriptorPoolCreateInfo = { 0 }; | ||
| 3459 | descriptorPoolCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; | ||
| 3460 | descriptorPoolCreateInfo.poolSizeCount = SDL_arraysize(descriptorPoolSizes); | ||
| 3461 | descriptorPoolCreateInfo.pPoolSizes = descriptorPoolSizes; | ||
| 3462 | descriptorPoolCreateInfo.maxSets = SDL_VULKAN_MAX_DESCRIPTOR_SETS; | ||
| 3463 | result = vkCreateDescriptorPool(rendererData->device, &descriptorPoolCreateInfo, NULL, &descriptorPool); | ||
| 3464 | if (result != VK_SUCCESS) { | ||
| 3465 | SET_ERROR_CODE("vkCreateDescrptorPool()", result); | ||
| 3466 | return VK_NULL_HANDLE; | ||
| 3467 | } | ||
| 3468 | |||
| 3469 | return descriptorPool; | ||
| 3470 | } | ||
| 3471 | |||
| 3472 | static VkResult VULKAN_CreateDescriptorSetAndPipelineLayout(VULKAN_RenderData *rendererData, VkSampler samplerYcbcr, VkDescriptorSetLayout *descriptorSetLayoutOut, | ||
| 3473 | VkPipelineLayout *pipelineLayoutOut) | ||
| 3474 | { | ||
| 3475 | VkResult result; | ||
| 3476 | |||
| 3477 | // Descriptor set layout | ||
| 3478 | VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = { 0 }; | ||
| 3479 | descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; | ||
| 3480 | descriptorSetLayoutCreateInfo.flags = 0; | ||
| 3481 | VkDescriptorSetLayoutBinding layoutBindings[2]; | ||
| 3482 | // PixelShaderConstants | ||
| 3483 | layoutBindings[0].binding = 1; | ||
| 3484 | layoutBindings[0].descriptorCount = 1; | ||
| 3485 | layoutBindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; | ||
| 3486 | layoutBindings[0].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; | ||
| 3487 | layoutBindings[0].pImmutableSamplers = NULL; | ||
| 3488 | |||
| 3489 | // Combined image/sampler | ||
| 3490 | layoutBindings[1].binding = 0; | ||
| 3491 | layoutBindings[1].descriptorCount = 1; | ||
| 3492 | layoutBindings[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; | ||
| 3493 | layoutBindings[1].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; | ||
| 3494 | layoutBindings[1].pImmutableSamplers = (samplerYcbcr != VK_NULL_HANDLE) ? &samplerYcbcr : NULL; | ||
| 3495 | |||
| 3496 | descriptorSetLayoutCreateInfo.bindingCount = 2; | ||
| 3497 | descriptorSetLayoutCreateInfo.pBindings = layoutBindings; | ||
| 3498 | result = vkCreateDescriptorSetLayout(rendererData->device, &descriptorSetLayoutCreateInfo, NULL, descriptorSetLayoutOut); | ||
| 3499 | if (result != VK_SUCCESS) { | ||
| 3500 | SET_ERROR_CODE("vkCreateDescriptorSetLayout()", result); | ||
| 3501 | return result; | ||
| 3502 | } | ||
| 3503 | |||
| 3504 | // Pipeline layout | ||
| 3505 | VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = { 0 }; | ||
| 3506 | VkPushConstantRange pushConstantRange; | ||
| 3507 | pushConstantRange.size = sizeof( VULKAN_VertexShaderConstants ); | ||
| 3508 | pushConstantRange.offset = 0; | ||
| 3509 | pushConstantRange.stageFlags = VK_SHADER_STAGE_VERTEX_BIT; | ||
| 3510 | pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; | ||
| 3511 | pipelineLayoutCreateInfo.setLayoutCount = 1; | ||
| 3512 | pipelineLayoutCreateInfo.pSetLayouts = descriptorSetLayoutOut; | ||
| 3513 | pipelineLayoutCreateInfo.pushConstantRangeCount = 1; | ||
| 3514 | pipelineLayoutCreateInfo.pPushConstantRanges = &pushConstantRange; | ||
| 3515 | result = vkCreatePipelineLayout(rendererData->device, &pipelineLayoutCreateInfo, NULL, pipelineLayoutOut); | ||
| 3516 | if (result != VK_SUCCESS) { | ||
| 3517 | SET_ERROR_CODE("vkCreatePipelineLayout()", result); | ||
| 3518 | return result; | ||
| 3519 | } | ||
| 3520 | |||
| 3521 | return result; | ||
| 3522 | } | ||
| 3523 | |||
| 3524 | static VkDescriptorSet VULKAN_AllocateDescriptorSet(SDL_Renderer *renderer, VULKAN_Shader shader, VkDescriptorSetLayout descriptorSetLayout, | ||
| 3525 | VkSampler sampler, VkBuffer constantBuffer, VkDeviceSize constantBufferOffset, VkImageView imageView) | ||
| 3526 | { | ||
| 3527 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3528 | uint32_t currentDescriptorPoolIndex = rendererData->currentDescriptorPoolIndex; | ||
| 3529 | VkDescriptorPool descriptorPool = rendererData->descriptorPools[rendererData->currentCommandBufferIndex][currentDescriptorPoolIndex]; | ||
| 3530 | |||
| 3531 | VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = { 0 }; | ||
| 3532 | descriptorSetAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; | ||
| 3533 | descriptorSetAllocateInfo.descriptorSetCount = 1; | ||
| 3534 | descriptorSetAllocateInfo.descriptorPool = descriptorPool; | ||
| 3535 | descriptorSetAllocateInfo.pSetLayouts = &descriptorSetLayout; | ||
| 3536 | |||
| 3537 | VkDescriptorSet descriptorSet = VK_NULL_HANDLE; | ||
| 3538 | VkResult result = (rendererData->currentDescriptorSetIndex >= SDL_VULKAN_MAX_DESCRIPTOR_SETS) ? VK_ERROR_OUT_OF_DEVICE_MEMORY : VK_SUCCESS; | ||
| 3539 | if (result == VK_SUCCESS) { | ||
| 3540 | result = vkAllocateDescriptorSets(rendererData->device, &descriptorSetAllocateInfo, &descriptorSet); | ||
| 3541 | } | ||
| 3542 | if (result != VK_SUCCESS) { | ||
| 3543 | // Out of descriptor sets in this pool - see if we have more pools allocated | ||
| 3544 | currentDescriptorPoolIndex++; | ||
| 3545 | if (currentDescriptorPoolIndex < rendererData->numDescriptorPools[rendererData->currentCommandBufferIndex]) { | ||
| 3546 | descriptorPool = rendererData->descriptorPools[rendererData->currentCommandBufferIndex][currentDescriptorPoolIndex]; | ||
| 3547 | descriptorSetAllocateInfo.descriptorPool = descriptorPool; | ||
| 3548 | result = vkAllocateDescriptorSets(rendererData->device, &descriptorSetAllocateInfo, &descriptorSet); | ||
| 3549 | if (result != VK_SUCCESS) { | ||
| 3550 | // This should not fail - we are allocating from the front of the descriptor set | ||
| 3551 | SDL_SetError("Unable to allocate descriptor set"); | ||
| 3552 | return VK_NULL_HANDLE; | ||
| 3553 | } | ||
| 3554 | rendererData->currentDescriptorPoolIndex = currentDescriptorPoolIndex; | ||
| 3555 | rendererData->currentDescriptorSetIndex = 0; | ||
| 3556 | |||
| 3557 | } | ||
| 3558 | // We are out of pools, create a new one | ||
| 3559 | else { | ||
| 3560 | descriptorPool = VULKAN_AllocateDescriptorPool(rendererData); | ||
| 3561 | if (descriptorPool == VK_NULL_HANDLE) { | ||
| 3562 | // SDL_SetError called in VULKAN_AllocateDescriptorPool if we failed to allocate a new pool | ||
| 3563 | return VK_NULL_HANDLE; | ||
| 3564 | } | ||
| 3565 | rendererData->numDescriptorPools[rendererData->currentCommandBufferIndex]++; | ||
| 3566 | VkDescriptorPool *descriptorPools = (VkDescriptorPool *)SDL_realloc(rendererData->descriptorPools[rendererData->currentCommandBufferIndex], | ||
| 3567 | sizeof(VkDescriptorPool) * rendererData->numDescriptorPools[rendererData->currentCommandBufferIndex]); | ||
| 3568 | descriptorPools[rendererData->numDescriptorPools[rendererData->currentCommandBufferIndex] - 1] = descriptorPool; | ||
| 3569 | rendererData->descriptorPools[rendererData->currentCommandBufferIndex] = descriptorPools; | ||
| 3570 | rendererData->currentDescriptorPoolIndex = currentDescriptorPoolIndex; | ||
| 3571 | rendererData->currentDescriptorSetIndex = 0; | ||
| 3572 | |||
| 3573 | // Call recursively to allocate from the new pool | ||
| 3574 | return VULKAN_AllocateDescriptorSet(renderer, shader, descriptorSetLayout, sampler, constantBuffer, constantBufferOffset, imageView); | ||
| 3575 | } | ||
| 3576 | } | ||
| 3577 | rendererData->currentDescriptorSetIndex++; | ||
| 3578 | VkDescriptorImageInfo combinedImageSamplerDescriptor = { 0 }; | ||
| 3579 | VkDescriptorBufferInfo bufferDescriptor = { 0 }; | ||
| 3580 | bufferDescriptor.buffer = constantBuffer; | ||
| 3581 | bufferDescriptor.offset = constantBufferOffset; | ||
| 3582 | bufferDescriptor.range = sizeof(VULKAN_PixelShaderConstants); | ||
| 3583 | |||
| 3584 | VkWriteDescriptorSet descriptorWrites[2]; | ||
| 3585 | SDL_memset(descriptorWrites, 0, sizeof(descriptorWrites)); | ||
| 3586 | uint32_t descriptorCount = 1; // Always have the uniform buffer | ||
| 3587 | |||
| 3588 | descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; | ||
| 3589 | descriptorWrites[0].dstSet = descriptorSet; | ||
| 3590 | descriptorWrites[0].dstBinding = 1; | ||
| 3591 | descriptorWrites[0].dstArrayElement = 0; | ||
| 3592 | descriptorWrites[0].descriptorCount = 1; | ||
| 3593 | descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; | ||
| 3594 | descriptorWrites[0].pBufferInfo = &bufferDescriptor; | ||
| 3595 | |||
| 3596 | if (sampler != VK_NULL_HANDLE && imageView != VK_NULL_HANDLE) { | ||
| 3597 | descriptorCount++; | ||
| 3598 | descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; | ||
| 3599 | descriptorWrites[1].dstSet = descriptorSet; | ||
| 3600 | descriptorWrites[1].dstBinding = 0; | ||
| 3601 | descriptorWrites[1].dstArrayElement = 0; | ||
| 3602 | descriptorWrites[1].descriptorCount = 1; | ||
| 3603 | descriptorWrites[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; | ||
| 3604 | descriptorWrites[1].pImageInfo = &combinedImageSamplerDescriptor; | ||
| 3605 | |||
| 3606 | // Ignore the sampler if we're using YcBcCr data since it will be baked in the descriptor set layout | ||
| 3607 | if (descriptorSetLayout == rendererData->descriptorSetLayout) { | ||
| 3608 | combinedImageSamplerDescriptor.sampler = sampler; | ||
| 3609 | } | ||
| 3610 | combinedImageSamplerDescriptor.imageView = imageView; | ||
| 3611 | combinedImageSamplerDescriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; | ||
| 3612 | } | ||
| 3613 | |||
| 3614 | vkUpdateDescriptorSets(rendererData->device, descriptorCount, descriptorWrites, 0, NULL); | ||
| 3615 | |||
| 3616 | return descriptorSet; | ||
| 3617 | } | ||
| 3618 | |||
| 3619 | static bool VULKAN_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, VULKAN_Shader shader, VkPipelineLayout pipelineLayout, VkDescriptorSetLayout descriptorSetLayout, | ||
| 3620 | const VULKAN_PixelShaderConstants *shader_constants, VkPrimitiveTopology topology, VkImageView imageView, VkSampler sampler, const Float4X4 *matrix, VULKAN_DrawStateCache *stateCache) | ||
| 3621 | |||
| 3622 | { | ||
| 3623 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3624 | const SDL_BlendMode blendMode = cmd->data.draw.blend; | ||
| 3625 | VkFormat format = rendererData->surfaceFormat.format; | ||
| 3626 | const Float4X4 *newmatrix = matrix ? matrix : &rendererData->identity; | ||
| 3627 | bool updateConstants = false; | ||
| 3628 | VULKAN_PixelShaderConstants solid_constants; | ||
| 3629 | VkDescriptorSet descriptorSet; | ||
| 3630 | VkBuffer constantBuffer; | ||
| 3631 | VkDeviceSize constantBufferOffset; | ||
| 3632 | int i; | ||
| 3633 | |||
| 3634 | if (!VULKAN_ActivateCommandBuffer(renderer, VK_ATTACHMENT_LOAD_OP_LOAD, NULL, stateCache)) { | ||
| 3635 | return false; | ||
| 3636 | } | ||
| 3637 | |||
| 3638 | // See if we need to change the pipeline state | ||
| 3639 | if (!rendererData->currentPipelineState || | ||
| 3640 | rendererData->currentPipelineState->shader != shader || | ||
| 3641 | rendererData->currentPipelineState->blendMode != blendMode || | ||
| 3642 | rendererData->currentPipelineState->topology != topology || | ||
| 3643 | rendererData->currentPipelineState->format != format || | ||
| 3644 | rendererData->currentPipelineState->pipelineLayout != pipelineLayout || | ||
| 3645 | rendererData->currentPipelineState->descriptorSetLayout != descriptorSetLayout) { | ||
| 3646 | |||
| 3647 | rendererData->currentPipelineState = NULL; | ||
| 3648 | for (i = 0; i < rendererData->pipelineStateCount; ++i) { | ||
| 3649 | VULKAN_PipelineState *candidatePiplineState = &rendererData->pipelineStates[i]; | ||
| 3650 | if (candidatePiplineState->shader == shader && | ||
| 3651 | candidatePiplineState->blendMode == blendMode && | ||
| 3652 | candidatePiplineState->topology == topology && | ||
| 3653 | candidatePiplineState->format == format && | ||
| 3654 | candidatePiplineState->pipelineLayout == pipelineLayout && | ||
| 3655 | candidatePiplineState->descriptorSetLayout == descriptorSetLayout) { | ||
| 3656 | rendererData->currentPipelineState = candidatePiplineState; | ||
| 3657 | break; | ||
| 3658 | } | ||
| 3659 | } | ||
| 3660 | |||
| 3661 | // If we didn't find a match, create a new one -- it must mean the blend mode is non-standard | ||
| 3662 | if (!rendererData->currentPipelineState) { | ||
| 3663 | rendererData->currentPipelineState = VULKAN_CreatePipelineState(renderer, shader, pipelineLayout, descriptorSetLayout, blendMode, topology, format); | ||
| 3664 | } | ||
| 3665 | |||
| 3666 | if (!rendererData->currentPipelineState) { | ||
| 3667 | return SDL_SetError("Unable to create required pipeline state"); | ||
| 3668 | } | ||
| 3669 | |||
| 3670 | vkCmdBindPipeline(rendererData->currentCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, rendererData->currentPipelineState->pipeline); | ||
| 3671 | updateConstants = true; | ||
| 3672 | } | ||
| 3673 | |||
| 3674 | if (rendererData->viewportDirty) { | ||
| 3675 | if (VULKAN_UpdateViewport(renderer)) { | ||
| 3676 | // vertexShaderConstantsData.projectionAndView has changed | ||
| 3677 | updateConstants = true; | ||
| 3678 | } | ||
| 3679 | } | ||
| 3680 | |||
| 3681 | if (rendererData->cliprectDirty) { | ||
| 3682 | VULKAN_UpdateClipRect(renderer); | ||
| 3683 | } | ||
| 3684 | |||
| 3685 | if (updateConstants == true || SDL_memcmp(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix)) != 0) { | ||
| 3686 | SDL_memcpy(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix)); | ||
| 3687 | vkCmdPushConstants(rendererData->currentCommandBuffer, rendererData->currentPipelineState->pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, | ||
| 3688 | sizeof(rendererData->vertexShaderConstantsData), | ||
| 3689 | &rendererData->vertexShaderConstantsData); | ||
| 3690 | } | ||
| 3691 | |||
| 3692 | if (!shader_constants) { | ||
| 3693 | VULKAN_SetupShaderConstants(renderer, cmd, NULL, &solid_constants); | ||
| 3694 | shader_constants = &solid_constants; | ||
| 3695 | } | ||
| 3696 | |||
| 3697 | constantBuffer = rendererData->constantBuffers[rendererData->currentCommandBufferIndex][rendererData->currentConstantBufferIndex].buffer; | ||
| 3698 | constantBufferOffset = (rendererData->currentConstantBufferOffset < 0) ? 0 : rendererData->currentConstantBufferOffset; | ||
| 3699 | if (updateConstants || | ||
| 3700 | SDL_memcmp(shader_constants, &rendererData->currentPipelineState->shader_constants, sizeof(*shader_constants)) != 0) { | ||
| 3701 | |||
| 3702 | if (rendererData->currentConstantBufferOffset == -1) { | ||
| 3703 | // First time, grab offset 0 | ||
| 3704 | rendererData->currentConstantBufferOffset = 0; | ||
| 3705 | constantBufferOffset = 0; | ||
| 3706 | } | ||
| 3707 | else { | ||
| 3708 | // Align the next address to the minUniformBufferOffsetAlignment | ||
| 3709 | VkDeviceSize alignment = rendererData->physicalDeviceProperties.limits.minUniformBufferOffsetAlignment; | ||
| 3710 | SDL_assert(rendererData->currentConstantBufferOffset >= 0 ); | ||
| 3711 | rendererData->currentConstantBufferOffset += (int32_t)(sizeof(VULKAN_PixelShaderConstants) + alignment - 1) & ~(alignment - 1); | ||
| 3712 | constantBufferOffset = rendererData->currentConstantBufferOffset; | ||
| 3713 | } | ||
| 3714 | |||
| 3715 | // If we have run out of size in this constant buffer, create another if needed | ||
| 3716 | if (rendererData->currentConstantBufferOffset >= SDL_VULKAN_CONSTANT_BUFFER_DEFAULT_SIZE) { | ||
| 3717 | uint32_t newConstantBufferIndex = (rendererData->currentConstantBufferIndex + 1); | ||
| 3718 | // We need a new constant buffer | ||
| 3719 | if (newConstantBufferIndex >= rendererData->numConstantBuffers[rendererData->currentCommandBufferIndex]) { | ||
| 3720 | VULKAN_Buffer newConstantBuffer; | ||
| 3721 | VkResult result = VULKAN_AllocateBuffer(rendererData, | ||
| 3722 | SDL_VULKAN_CONSTANT_BUFFER_DEFAULT_SIZE, | ||
| 3723 | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, | ||
| 3724 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | | ||
| 3725 | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, | ||
| 3726 | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, | ||
| 3727 | &newConstantBuffer); | ||
| 3728 | if (result != VK_SUCCESS) { | ||
| 3729 | return false; | ||
| 3730 | } | ||
| 3731 | |||
| 3732 | rendererData->numConstantBuffers[rendererData->currentCommandBufferIndex]++; | ||
| 3733 | VULKAN_Buffer *newConstantBuffers = (VULKAN_Buffer *)SDL_realloc(rendererData->constantBuffers[rendererData->currentCommandBufferIndex], | ||
| 3734 | sizeof(VULKAN_Buffer) * rendererData->numConstantBuffers[rendererData->currentCommandBufferIndex]); | ||
| 3735 | newConstantBuffers[rendererData->numConstantBuffers[rendererData->currentCommandBufferIndex] - 1] = newConstantBuffer; | ||
| 3736 | rendererData->constantBuffers[rendererData->currentCommandBufferIndex] = newConstantBuffers; | ||
| 3737 | } | ||
| 3738 | rendererData->currentConstantBufferIndex = newConstantBufferIndex; | ||
| 3739 | rendererData->currentConstantBufferOffset = 0; | ||
| 3740 | constantBufferOffset = 0; | ||
| 3741 | constantBuffer = rendererData->constantBuffers[rendererData->currentCommandBufferIndex][rendererData->currentConstantBufferIndex].buffer; | ||
| 3742 | } | ||
| 3743 | |||
| 3744 | SDL_memcpy(&rendererData->currentPipelineState->shader_constants, shader_constants, sizeof(*shader_constants)); | ||
| 3745 | |||
| 3746 | // Upload constants to persistently mapped buffer | ||
| 3747 | uint8_t *dst = (uint8_t *)rendererData->constantBuffers[rendererData->currentCommandBufferIndex][rendererData->currentConstantBufferIndex].mappedBufferPtr; | ||
| 3748 | dst += constantBufferOffset; | ||
| 3749 | SDL_memcpy(dst, &rendererData->currentPipelineState->shader_constants, sizeof(VULKAN_PixelShaderConstants)); | ||
| 3750 | } | ||
| 3751 | |||
| 3752 | // Allocate/update descriptor set with the bindings | ||
| 3753 | descriptorSet = VULKAN_AllocateDescriptorSet(renderer, shader, descriptorSetLayout, sampler, constantBuffer, constantBufferOffset, imageView); | ||
| 3754 | if (descriptorSet == VK_NULL_HANDLE) { | ||
| 3755 | return false; | ||
| 3756 | } | ||
| 3757 | |||
| 3758 | // Bind the descriptor set with the sampler/UBO/image views | ||
| 3759 | vkCmdBindDescriptorSets(rendererData->currentCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, rendererData->currentPipelineState->pipelineLayout, | ||
| 3760 | 0, 1, &descriptorSet, 0, NULL); | ||
| 3761 | |||
| 3762 | return true; | ||
| 3763 | } | ||
| 3764 | |||
| 3765 | |||
| 3766 | static bool VULKAN_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const Float4X4 *matrix, VULKAN_DrawStateCache *stateCache) | ||
| 3767 | { | ||
| 3768 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 3769 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3770 | VULKAN_TextureData *textureData = (VULKAN_TextureData *)texture->internal; | ||
| 3771 | VkSampler textureSampler = VK_NULL_HANDLE; | ||
| 3772 | VULKAN_PixelShaderConstants constants; | ||
| 3773 | VkDescriptorSetLayout descriptorSetLayout = (textureData->descriptorSetLayoutYcbcr != VK_NULL_HANDLE) ? textureData->descriptorSetLayoutYcbcr : rendererData->descriptorSetLayout; | ||
| 3774 | VkPipelineLayout pipelineLayout = (textureData->pipelineLayoutYcbcr != VK_NULL_HANDLE) ? textureData->pipelineLayoutYcbcr : rendererData->pipelineLayout; | ||
| 3775 | |||
| 3776 | VULKAN_SetupShaderConstants(renderer, cmd, texture, &constants); | ||
| 3777 | |||
| 3778 | switch (textureData->scaleMode) { | ||
| 3779 | case VK_FILTER_NEAREST: | ||
| 3780 | switch (cmd->data.draw.texture_address_mode) { | ||
| 3781 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 3782 | textureSampler = rendererData->samplers[VULKAN_SAMPLER_NEAREST_CLAMP]; | ||
| 3783 | break; | ||
| 3784 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 3785 | textureSampler = rendererData->samplers[VULKAN_SAMPLER_NEAREST_WRAP]; | ||
| 3786 | break; | ||
| 3787 | default: | ||
| 3788 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 3789 | } | ||
| 3790 | break; | ||
| 3791 | case VK_FILTER_LINEAR: | ||
| 3792 | switch (cmd->data.draw.texture_address_mode) { | ||
| 3793 | case SDL_TEXTURE_ADDRESS_CLAMP: | ||
| 3794 | textureSampler = rendererData->samplers[VULKAN_SAMPLER_LINEAR_CLAMP]; | ||
| 3795 | break; | ||
| 3796 | case SDL_TEXTURE_ADDRESS_WRAP: | ||
| 3797 | textureSampler = rendererData->samplers[VULKAN_SAMPLER_LINEAR_WRAP]; | ||
| 3798 | break; | ||
| 3799 | default: | ||
| 3800 | return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode); | ||
| 3801 | } | ||
| 3802 | break; | ||
| 3803 | default: | ||
| 3804 | return SDL_SetError("Unknown scale mode: %d", textureData->scaleMode); | ||
| 3805 | } | ||
| 3806 | |||
| 3807 | if (textureData->mainImage.imageLayout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { | ||
| 3808 | bool stoppedRenderPass = false; | ||
| 3809 | if (rendererData->currentRenderPass != VK_NULL_HANDLE) { | ||
| 3810 | vkCmdEndRenderPass(rendererData->currentCommandBuffer); | ||
| 3811 | rendererData->currentRenderPass = VK_NULL_HANDLE; | ||
| 3812 | stoppedRenderPass = true; | ||
| 3813 | } | ||
| 3814 | |||
| 3815 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 3816 | VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 3817 | VK_ACCESS_SHADER_READ_BIT, | ||
| 3818 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 3819 | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 3820 | VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, | ||
| 3821 | textureData->mainImage.image, | ||
| 3822 | &textureData->mainImage.imageLayout); | ||
| 3823 | |||
| 3824 | if (stoppedRenderPass) { | ||
| 3825 | VULKAN_BeginRenderPass(rendererData, VK_ATTACHMENT_LOAD_OP_LOAD, NULL); | ||
| 3826 | } | ||
| 3827 | } | ||
| 3828 | |||
| 3829 | return VULKAN_SetDrawState(renderer, cmd, textureData->shader, pipelineLayout, descriptorSetLayout, &constants, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, textureData->mainImage.imageView, textureSampler, matrix, stateCache); | ||
| 3830 | } | ||
| 3831 | |||
| 3832 | static void VULKAN_DrawPrimitives(SDL_Renderer *renderer, VkPrimitiveTopology primitiveTopology, const size_t vertexStart, const size_t vertexCount) | ||
| 3833 | { | ||
| 3834 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3835 | vkCmdDraw(rendererData->currentCommandBuffer, (uint32_t)vertexCount, 1, (uint32_t)vertexStart, 0); | ||
| 3836 | } | ||
| 3837 | |||
| 3838 | static void VULKAN_InvalidateCachedState(SDL_Renderer *renderer) | ||
| 3839 | { | ||
| 3840 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3841 | rendererData->currentPipelineState = NULL; | ||
| 3842 | rendererData->cliprectDirty = true; | ||
| 3843 | } | ||
| 3844 | |||
| 3845 | static bool VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) | ||
| 3846 | { | ||
| 3847 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3848 | VkSurfaceTransformFlagBitsKHR currentRotation = VULKAN_GetRotationForCurrentRenderTarget(rendererData); | ||
| 3849 | VULKAN_DrawStateCache stateCache; | ||
| 3850 | SDL_memset(&stateCache, 0, sizeof(stateCache)); | ||
| 3851 | |||
| 3852 | if (!rendererData->device) { | ||
| 3853 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 3854 | } | ||
| 3855 | |||
| 3856 | if(rendererData->currentViewportRotation != currentRotation) { | ||
| 3857 | rendererData->currentViewportRotation = currentRotation; | ||
| 3858 | rendererData->viewportDirty = true; | ||
| 3859 | rendererData->cliprectDirty = true; | ||
| 3860 | } | ||
| 3861 | |||
| 3862 | if (rendererData->recreateSwapchain) { | ||
| 3863 | if (VULKAN_UpdateForWindowSizeChange(renderer) != VK_SUCCESS) { | ||
| 3864 | return false; | ||
| 3865 | } | ||
| 3866 | rendererData->recreateSwapchain = false; | ||
| 3867 | } | ||
| 3868 | |||
| 3869 | if (!VULKAN_UpdateVertexBuffer(renderer, vertices, vertsize, &stateCache)) { | ||
| 3870 | return false; | ||
| 3871 | } | ||
| 3872 | |||
| 3873 | while (cmd) { | ||
| 3874 | switch (cmd->command) { | ||
| 3875 | case SDL_RENDERCMD_SETDRAWCOLOR: | ||
| 3876 | { | ||
| 3877 | break; // this isn't currently used in this render backend. | ||
| 3878 | } | ||
| 3879 | |||
| 3880 | case SDL_RENDERCMD_SETVIEWPORT: | ||
| 3881 | { | ||
| 3882 | SDL_Rect *viewport = &rendererData->currentViewport; | ||
| 3883 | if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) { | ||
| 3884 | SDL_copyp(viewport, &cmd->data.viewport.rect); | ||
| 3885 | rendererData->viewportDirty = true; | ||
| 3886 | rendererData->cliprectDirty = true; | ||
| 3887 | } | ||
| 3888 | break; | ||
| 3889 | } | ||
| 3890 | |||
| 3891 | case SDL_RENDERCMD_SETCLIPRECT: | ||
| 3892 | { | ||
| 3893 | const SDL_Rect *rect = &cmd->data.cliprect.rect; | ||
| 3894 | if (rendererData->currentCliprectEnabled != cmd->data.cliprect.enabled) { | ||
| 3895 | rendererData->currentCliprectEnabled = cmd->data.cliprect.enabled; | ||
| 3896 | rendererData->cliprectDirty = true; | ||
| 3897 | } | ||
| 3898 | if (SDL_memcmp(&rendererData->currentCliprect, rect, sizeof(*rect)) != 0) { | ||
| 3899 | SDL_copyp(&rendererData->currentCliprect, rect); | ||
| 3900 | rendererData->cliprectDirty = true; | ||
| 3901 | } | ||
| 3902 | break; | ||
| 3903 | } | ||
| 3904 | |||
| 3905 | case SDL_RENDERCMD_CLEAR: | ||
| 3906 | { | ||
| 3907 | bool convert_color = SDL_RenderingLinearSpace(renderer); | ||
| 3908 | SDL_FColor color = cmd->data.color.color; | ||
| 3909 | if (convert_color) { | ||
| 3910 | SDL_ConvertToLinear(&color); | ||
| 3911 | } | ||
| 3912 | color.r *= cmd->data.color.color_scale; | ||
| 3913 | color.g *= cmd->data.color.color_scale; | ||
| 3914 | color.b *= cmd->data.color.color_scale; | ||
| 3915 | |||
| 3916 | VkClearColorValue clearColor; | ||
| 3917 | clearColor.float32[0] = color.r; | ||
| 3918 | clearColor.float32[1] = color.g; | ||
| 3919 | clearColor.float32[2] = color.b; | ||
| 3920 | clearColor.float32[3] = color.a; | ||
| 3921 | VULKAN_ActivateCommandBuffer(renderer, VK_ATTACHMENT_LOAD_OP_CLEAR, &clearColor, &stateCache); | ||
| 3922 | break; | ||
| 3923 | } | ||
| 3924 | |||
| 3925 | case SDL_RENDERCMD_DRAW_POINTS: | ||
| 3926 | { | ||
| 3927 | const size_t count = cmd->data.draw.count; | ||
| 3928 | const size_t first = cmd->data.draw.first; | ||
| 3929 | const size_t start = first / sizeof(VULKAN_VertexPositionColor); | ||
| 3930 | VULKAN_SetDrawState(renderer, cmd, SHADER_SOLID, rendererData->pipelineLayout, rendererData->descriptorSetLayout, NULL, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_NULL_HANDLE, VK_NULL_HANDLE, NULL, &stateCache); | ||
| 3931 | VULKAN_DrawPrimitives(renderer, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, start, count); | ||
| 3932 | break; | ||
| 3933 | } | ||
| 3934 | |||
| 3935 | case SDL_RENDERCMD_DRAW_LINES: | ||
| 3936 | { | ||
| 3937 | const size_t count = cmd->data.draw.count; | ||
| 3938 | const size_t first = cmd->data.draw.first; | ||
| 3939 | const size_t start = first / sizeof(VULKAN_VertexPositionColor); | ||
| 3940 | const VULKAN_VertexPositionColor *verts = (VULKAN_VertexPositionColor *)(((Uint8 *)vertices) + first); | ||
| 3941 | VULKAN_SetDrawState(renderer, cmd, SHADER_SOLID, rendererData->pipelineLayout, rendererData->descriptorSetLayout, NULL, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, VK_NULL_HANDLE, VK_NULL_HANDLE, NULL, &stateCache); | ||
| 3942 | VULKAN_DrawPrimitives(renderer, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, start, count); | ||
| 3943 | if (verts[0].pos[0] != verts[count - 1].pos[0] || verts[0].pos[1] != verts[count - 1].pos[1]) { | ||
| 3944 | VULKAN_SetDrawState(renderer, cmd, SHADER_SOLID, rendererData->pipelineLayout, rendererData->descriptorSetLayout, NULL, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_NULL_HANDLE, VK_NULL_HANDLE, NULL, &stateCache); | ||
| 3945 | VULKAN_DrawPrimitives(renderer, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, start + (count - 1), 1); | ||
| 3946 | } | ||
| 3947 | break; | ||
| 3948 | } | ||
| 3949 | |||
| 3950 | case SDL_RENDERCMD_FILL_RECTS: // unused | ||
| 3951 | break; | ||
| 3952 | |||
| 3953 | case SDL_RENDERCMD_COPY: // unused | ||
| 3954 | break; | ||
| 3955 | |||
| 3956 | case SDL_RENDERCMD_COPY_EX: // unused | ||
| 3957 | break; | ||
| 3958 | |||
| 3959 | case SDL_RENDERCMD_GEOMETRY: | ||
| 3960 | { | ||
| 3961 | SDL_Texture *texture = cmd->data.draw.texture; | ||
| 3962 | const size_t count = cmd->data.draw.count; | ||
| 3963 | const size_t first = cmd->data.draw.first; | ||
| 3964 | const size_t start = first / sizeof(VULKAN_VertexPositionColor); | ||
| 3965 | |||
| 3966 | if (texture) { | ||
| 3967 | VULKAN_SetCopyState(renderer, cmd, NULL, &stateCache); | ||
| 3968 | } else { | ||
| 3969 | VULKAN_SetDrawState(renderer, cmd, SHADER_SOLID, rendererData->pipelineLayout, rendererData->descriptorSetLayout, NULL, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_NULL_HANDLE, VK_NULL_HANDLE, NULL, &stateCache); | ||
| 3970 | } | ||
| 3971 | |||
| 3972 | VULKAN_DrawPrimitives(renderer, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, start, count); | ||
| 3973 | break; | ||
| 3974 | } | ||
| 3975 | |||
| 3976 | case SDL_RENDERCMD_NO_OP: | ||
| 3977 | break; | ||
| 3978 | } | ||
| 3979 | |||
| 3980 | cmd = cmd->next; | ||
| 3981 | } | ||
| 3982 | return true; | ||
| 3983 | } | ||
| 3984 | |||
| 3985 | static SDL_Surface* VULKAN_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) | ||
| 3986 | { | ||
| 3987 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 3988 | VkImage backBuffer; | ||
| 3989 | VkImageLayout *imageLayout; | ||
| 3990 | VULKAN_Buffer readbackBuffer; | ||
| 3991 | VkDeviceSize pixelSize; | ||
| 3992 | VkDeviceSize length; | ||
| 3993 | VkDeviceSize readbackBufferSize; | ||
| 3994 | VkFormat vkFormat; | ||
| 3995 | SDL_Surface *output; | ||
| 3996 | |||
| 3997 | VULKAN_EnsureCommandBuffer(rendererData); | ||
| 3998 | |||
| 3999 | // Stop any outstanding renderpass if open | ||
| 4000 | if (rendererData->currentRenderPass != VK_NULL_HANDLE) { | ||
| 4001 | vkCmdEndRenderPass(rendererData->currentCommandBuffer); | ||
| 4002 | rendererData->currentRenderPass = VK_NULL_HANDLE; | ||
| 4003 | } | ||
| 4004 | |||
| 4005 | if (rendererData->textureRenderTarget) { | ||
| 4006 | backBuffer = rendererData->textureRenderTarget->mainImage.image; | ||
| 4007 | imageLayout = &rendererData->textureRenderTarget->mainImage.imageLayout; | ||
| 4008 | vkFormat = rendererData->textureRenderTarget->mainImage.format; | ||
| 4009 | } else { | ||
| 4010 | backBuffer = rendererData->swapchainImages[rendererData->currentSwapchainImageIndex]; | ||
| 4011 | imageLayout = &rendererData->swapchainImageLayouts[rendererData->currentSwapchainImageIndex]; | ||
| 4012 | vkFormat = rendererData->surfaceFormat.format; | ||
| 4013 | } | ||
| 4014 | |||
| 4015 | pixelSize = VULKAN_GetBytesPerPixel(vkFormat); | ||
| 4016 | length = rect->w * pixelSize; | ||
| 4017 | readbackBufferSize = length * rect->h; | ||
| 4018 | if (VULKAN_AllocateBuffer(rendererData, readbackBufferSize, | ||
| 4019 | VK_BUFFER_USAGE_TRANSFER_DST_BIT, | ||
| 4020 | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | | ||
| 4021 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, | ||
| 4022 | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, | ||
| 4023 | &readbackBuffer) != VK_SUCCESS) { | ||
| 4024 | return NULL; | ||
| 4025 | } | ||
| 4026 | |||
| 4027 | |||
| 4028 | // Make sure the source is in the correct resource state | ||
| 4029 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 4030 | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 4031 | VK_ACCESS_TRANSFER_READ_BIT, | ||
| 4032 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 4033 | VK_PIPELINE_STAGE_TRANSFER_BIT, | ||
| 4034 | VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | ||
| 4035 | backBuffer, | ||
| 4036 | imageLayout); | ||
| 4037 | |||
| 4038 | // Copy the image to the readback buffer | ||
| 4039 | VkBufferImageCopy region; | ||
| 4040 | region.bufferOffset = 0; | ||
| 4041 | region.bufferRowLength = 0; | ||
| 4042 | region.bufferImageHeight = 0; | ||
| 4043 | region.imageSubresource.baseArrayLayer = 0; | ||
| 4044 | region.imageSubresource.layerCount = 1; | ||
| 4045 | region.imageSubresource.mipLevel = 0; | ||
| 4046 | region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | ||
| 4047 | region.imageOffset.x = rect->x; | ||
| 4048 | region.imageOffset.y = rect->y; | ||
| 4049 | region.imageOffset.z = 0; | ||
| 4050 | region.imageExtent.width = rect->w; | ||
| 4051 | region.imageExtent.height = rect->h; | ||
| 4052 | region.imageExtent.depth = 1; | ||
| 4053 | vkCmdCopyImageToBuffer(rendererData->currentCommandBuffer, backBuffer, *imageLayout, readbackBuffer.buffer, 1, ®ion); | ||
| 4054 | |||
| 4055 | // We need to issue the command list for the copy to finish | ||
| 4056 | VULKAN_IssueBatch(rendererData); | ||
| 4057 | |||
| 4058 | // Transition the render target back to a render target | ||
| 4059 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 4060 | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 4061 | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 4062 | VK_PIPELINE_STAGE_TRANSFER_BIT, | ||
| 4063 | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, | ||
| 4064 | VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | ||
| 4065 | backBuffer, | ||
| 4066 | imageLayout); | ||
| 4067 | |||
| 4068 | output = SDL_DuplicatePixels( | ||
| 4069 | rect->w, rect->h, | ||
| 4070 | VULKAN_VkFormatToSDLPixelFormat(vkFormat), | ||
| 4071 | renderer->target ? renderer->target->colorspace : renderer->output_colorspace, | ||
| 4072 | readbackBuffer.mappedBufferPtr, | ||
| 4073 | (int)length); | ||
| 4074 | |||
| 4075 | VULKAN_DestroyBuffer(rendererData, &readbackBuffer); | ||
| 4076 | |||
| 4077 | return output; | ||
| 4078 | } | ||
| 4079 | |||
| 4080 | static bool VULKAN_AddVulkanRenderSemaphores(SDL_Renderer *renderer, Uint32 wait_stage_mask, Sint64 wait_semaphore, Sint64 signal_semaphore) | ||
| 4081 | { | ||
| 4082 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 4083 | |||
| 4084 | if (wait_semaphore) { | ||
| 4085 | if (rendererData->waitRenderSemaphoreCount == rendererData->waitRenderSemaphoreMax) { | ||
| 4086 | // Allocate an additional one at the end for the normal present wait | ||
| 4087 | VkPipelineStageFlags *waitDestStageMasks = (VkPipelineStageFlags *)SDL_realloc(rendererData->waitDestStageMasks, (rendererData->waitRenderSemaphoreMax + 2) * sizeof(*waitDestStageMasks)); | ||
| 4088 | if (!waitDestStageMasks) { | ||
| 4089 | return false; | ||
| 4090 | } | ||
| 4091 | rendererData->waitDestStageMasks = waitDestStageMasks; | ||
| 4092 | |||
| 4093 | VkSemaphore *semaphores = (VkSemaphore *)SDL_realloc(rendererData->waitRenderSemaphores, (rendererData->waitRenderSemaphoreMax + 2) * sizeof(*semaphores)); | ||
| 4094 | if (!semaphores) { | ||
| 4095 | return false; | ||
| 4096 | } | ||
| 4097 | rendererData->waitRenderSemaphores = semaphores; | ||
| 4098 | ++rendererData->waitRenderSemaphoreMax; | ||
| 4099 | } | ||
| 4100 | rendererData->waitDestStageMasks[rendererData->waitRenderSemaphoreCount] = wait_stage_mask; | ||
| 4101 | rendererData->waitRenderSemaphores[rendererData->waitRenderSemaphoreCount] = (VkSemaphore)wait_semaphore; | ||
| 4102 | ++rendererData->waitRenderSemaphoreCount; | ||
| 4103 | } | ||
| 4104 | |||
| 4105 | if (signal_semaphore) { | ||
| 4106 | if (rendererData->signalRenderSemaphoreCount == rendererData->signalRenderSemaphoreMax) { | ||
| 4107 | // Allocate an additional one at the end for the normal present signal | ||
| 4108 | VkSemaphore *semaphores = (VkSemaphore *)SDL_realloc(rendererData->signalRenderSemaphores, (rendererData->signalRenderSemaphoreMax + 2) * sizeof(*semaphores)); | ||
| 4109 | if (!semaphores) { | ||
| 4110 | return false; | ||
| 4111 | } | ||
| 4112 | rendererData->signalRenderSemaphores = semaphores; | ||
| 4113 | ++rendererData->signalRenderSemaphoreMax; | ||
| 4114 | } | ||
| 4115 | rendererData->signalRenderSemaphores[rendererData->signalRenderSemaphoreCount] = (VkSemaphore)signal_semaphore; | ||
| 4116 | ++rendererData->signalRenderSemaphoreCount; | ||
| 4117 | } | ||
| 4118 | |||
| 4119 | return true; | ||
| 4120 | } | ||
| 4121 | |||
| 4122 | static bool VULKAN_RenderPresent(SDL_Renderer *renderer) | ||
| 4123 | { | ||
| 4124 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 4125 | VkResult result = VK_SUCCESS; | ||
| 4126 | |||
| 4127 | if (!rendererData->device) { | ||
| 4128 | return SDL_SetError("Device lost and couldn't be recovered"); | ||
| 4129 | } | ||
| 4130 | |||
| 4131 | if (rendererData->currentCommandBuffer) { | ||
| 4132 | rendererData->currentPipelineState = VK_NULL_HANDLE; | ||
| 4133 | rendererData->viewportDirty = true; | ||
| 4134 | |||
| 4135 | VULKAN_RecordPipelineImageBarrier(rendererData, | ||
| 4136 | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 4137 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | ||
| 4138 | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 4139 | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, | ||
| 4140 | VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, | ||
| 4141 | rendererData->swapchainImages[rendererData->currentSwapchainImageIndex], | ||
| 4142 | &rendererData->swapchainImageLayouts[rendererData->currentSwapchainImageIndex]); | ||
| 4143 | |||
| 4144 | vkEndCommandBuffer(rendererData->currentCommandBuffer); | ||
| 4145 | |||
| 4146 | result = vkResetFences(rendererData->device, 1, &rendererData->fences[rendererData->currentCommandBufferIndex]); | ||
| 4147 | if (result != VK_SUCCESS) { | ||
| 4148 | SET_ERROR_CODE("vkResetFences()", result); | ||
| 4149 | return false; | ||
| 4150 | } | ||
| 4151 | |||
| 4152 | VkPipelineStageFlags waitDestStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; | ||
| 4153 | VkSubmitInfo submitInfo = { 0 }; | ||
| 4154 | submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; | ||
| 4155 | if (rendererData->waitRenderSemaphoreCount > 0) { | ||
| 4156 | Uint32 additionalSemaphoreCount = (rendererData->currentImageAvailableSemaphore != VK_NULL_HANDLE) ? 1 : 0; | ||
| 4157 | submitInfo.waitSemaphoreCount = rendererData->waitRenderSemaphoreCount + additionalSemaphoreCount; | ||
| 4158 | if (additionalSemaphoreCount > 0) { | ||
| 4159 | rendererData->waitRenderSemaphores[rendererData->waitRenderSemaphoreCount] = rendererData->currentImageAvailableSemaphore; | ||
| 4160 | rendererData->waitDestStageMasks[rendererData->waitRenderSemaphoreCount] = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; | ||
| 4161 | } | ||
| 4162 | submitInfo.pWaitSemaphores = rendererData->waitRenderSemaphores; | ||
| 4163 | submitInfo.pWaitDstStageMask = rendererData->waitDestStageMasks; | ||
| 4164 | rendererData->waitRenderSemaphoreCount = 0; | ||
| 4165 | } else if (rendererData->currentImageAvailableSemaphore != VK_NULL_HANDLE) { | ||
| 4166 | submitInfo.waitSemaphoreCount = 1; | ||
| 4167 | submitInfo.pWaitSemaphores = &rendererData->currentImageAvailableSemaphore; | ||
| 4168 | submitInfo.pWaitDstStageMask = &waitDestStageMask; | ||
| 4169 | } | ||
| 4170 | submitInfo.commandBufferCount = 1; | ||
| 4171 | submitInfo.pCommandBuffers = &rendererData->currentCommandBuffer; | ||
| 4172 | if (rendererData->signalRenderSemaphoreCount > 0) { | ||
| 4173 | submitInfo.signalSemaphoreCount = rendererData->signalRenderSemaphoreCount + 1; | ||
| 4174 | rendererData->signalRenderSemaphores[rendererData->signalRenderSemaphoreCount] = rendererData->renderingFinishedSemaphores[rendererData->currentCommandBufferIndex]; | ||
| 4175 | submitInfo.pSignalSemaphores = rendererData->signalRenderSemaphores; | ||
| 4176 | rendererData->signalRenderSemaphoreCount = 0; | ||
| 4177 | } else { | ||
| 4178 | submitInfo.signalSemaphoreCount = 1; | ||
| 4179 | submitInfo.pSignalSemaphores = &rendererData->renderingFinishedSemaphores[rendererData->currentCommandBufferIndex]; | ||
| 4180 | } | ||
| 4181 | result = vkQueueSubmit(rendererData->graphicsQueue, 1, &submitInfo, rendererData->fences[rendererData->currentCommandBufferIndex]); | ||
| 4182 | if (result != VK_SUCCESS) { | ||
| 4183 | if (result == VK_ERROR_DEVICE_LOST) { | ||
| 4184 | if (VULKAN_HandleDeviceLost(renderer)) { | ||
| 4185 | SDL_SetError("Present failed, device lost"); | ||
| 4186 | } else { | ||
| 4187 | // Recovering from device lost failed, error is already set | ||
| 4188 | } | ||
| 4189 | } else { | ||
| 4190 | SET_ERROR_CODE("vkQueueSubmit()", result); | ||
| 4191 | } | ||
| 4192 | return false; | ||
| 4193 | } | ||
| 4194 | rendererData->currentCommandBuffer = VK_NULL_HANDLE; | ||
| 4195 | rendererData->currentImageAvailableSemaphore = VK_NULL_HANDLE; | ||
| 4196 | |||
| 4197 | VkPresentInfoKHR presentInfo = { 0 }; | ||
| 4198 | presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; | ||
| 4199 | presentInfo.waitSemaphoreCount = 1; | ||
| 4200 | presentInfo.pWaitSemaphores = &rendererData->renderingFinishedSemaphores[rendererData->currentCommandBufferIndex]; | ||
| 4201 | presentInfo.swapchainCount = 1; | ||
| 4202 | presentInfo.pSwapchains = &rendererData->swapchain; | ||
| 4203 | presentInfo.pImageIndices = &rendererData->currentSwapchainImageIndex; | ||
| 4204 | result = vkQueuePresentKHR(rendererData->presentQueue, &presentInfo); | ||
| 4205 | if ((result != VK_SUCCESS) && (result != VK_ERROR_OUT_OF_DATE_KHR) && (result != VK_ERROR_SURFACE_LOST_KHR) && (result != VK_SUBOPTIMAL_KHR )) { | ||
| 4206 | SET_ERROR_CODE("vkQueuePresentKHR()", result); | ||
| 4207 | return false; | ||
| 4208 | } | ||
| 4209 | |||
| 4210 | rendererData->currentCommandBufferIndex = ( rendererData->currentCommandBufferIndex + 1 ) % rendererData->swapchainImageCount; | ||
| 4211 | |||
| 4212 | // Wait for previous time this command buffer was submitted, will be N frames ago | ||
| 4213 | result = vkWaitForFences(rendererData->device, 1, &rendererData->fences[rendererData->currentCommandBufferIndex], VK_TRUE, UINT64_MAX); | ||
| 4214 | if (result != VK_SUCCESS) { | ||
| 4215 | if (result == VK_ERROR_DEVICE_LOST) { | ||
| 4216 | if (VULKAN_HandleDeviceLost(renderer)) { | ||
| 4217 | SDL_SetError("Present failed, device lost"); | ||
| 4218 | } else { | ||
| 4219 | // Recovering from device lost failed, error is already set | ||
| 4220 | } | ||
| 4221 | } else { | ||
| 4222 | SET_ERROR_CODE("vkWaitForFences()", result); | ||
| 4223 | } | ||
| 4224 | return false; | ||
| 4225 | } | ||
| 4226 | |||
| 4227 | VULKAN_AcquireNextSwapchainImage(renderer); | ||
| 4228 | } | ||
| 4229 | |||
| 4230 | return true; | ||
| 4231 | } | ||
| 4232 | |||
| 4233 | static bool VULKAN_SetVSync(SDL_Renderer *renderer, const int vsync) | ||
| 4234 | { | ||
| 4235 | VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal; | ||
| 4236 | |||
| 4237 | switch (vsync) { | ||
| 4238 | case -1: | ||
| 4239 | case 0: | ||
| 4240 | case 1: | ||
| 4241 | // Supported | ||
| 4242 | break; | ||
| 4243 | default: | ||
| 4244 | return SDL_Unsupported(); | ||
| 4245 | } | ||
| 4246 | if (vsync != rendererData->vsync) { | ||
| 4247 | rendererData->vsync = vsync; | ||
| 4248 | rendererData->recreateSwapchain = true; | ||
| 4249 | } | ||
| 4250 | return true; | ||
| 4251 | } | ||
| 4252 | |||
| 4253 | static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) | ||
| 4254 | { | ||
| 4255 | VULKAN_RenderData *rendererData; | ||
| 4256 | |||
| 4257 | SDL_SetupRendererColorspace(renderer, create_props); | ||
| 4258 | |||
| 4259 | if (renderer->output_colorspace != SDL_COLORSPACE_SRGB && | ||
| 4260 | renderer->output_colorspace != SDL_COLORSPACE_SRGB_LINEAR | ||
| 4261 | /*&& renderer->output_colorspace != SDL_COLORSPACE_HDR10*/) { | ||
| 4262 | return SDL_SetError("Unsupported output colorspace"); | ||
| 4263 | } | ||
| 4264 | |||
| 4265 | rendererData = (VULKAN_RenderData *)SDL_calloc(1, sizeof(*rendererData)); | ||
| 4266 | if (!rendererData) { | ||
| 4267 | return false; | ||
| 4268 | } | ||
| 4269 | |||
| 4270 | rendererData->identity = MatrixIdentity(); | ||
| 4271 | rendererData->identitySwizzle.r = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 4272 | rendererData->identitySwizzle.g = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 4273 | rendererData->identitySwizzle.b = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 4274 | rendererData->identitySwizzle.a = VK_COMPONENT_SWIZZLE_IDENTITY; | ||
| 4275 | |||
| 4276 | // Save the create props in case we need to recreate on device lost | ||
| 4277 | rendererData->create_props = SDL_CreateProperties(); | ||
| 4278 | if (!SDL_CopyProperties(create_props, rendererData->create_props)) { | ||
| 4279 | SDL_free(rendererData); | ||
| 4280 | return false; | ||
| 4281 | } | ||
| 4282 | |||
| 4283 | renderer->WindowEvent = VULKAN_WindowEvent; | ||
| 4284 | renderer->SupportsBlendMode = VULKAN_SupportsBlendMode; | ||
| 4285 | renderer->CreateTexture = VULKAN_CreateTexture; | ||
| 4286 | renderer->UpdateTexture = VULKAN_UpdateTexture; | ||
| 4287 | #ifdef SDL_HAVE_YUV | ||
| 4288 | renderer->UpdateTextureYUV = VULKAN_UpdateTextureYUV; | ||
| 4289 | renderer->UpdateTextureNV = VULKAN_UpdateTextureNV; | ||
| 4290 | #endif | ||
| 4291 | renderer->LockTexture = VULKAN_LockTexture; | ||
| 4292 | renderer->UnlockTexture = VULKAN_UnlockTexture; | ||
| 4293 | renderer->SetTextureScaleMode = VULKAN_SetTextureScaleMode; | ||
| 4294 | renderer->SetRenderTarget = VULKAN_SetRenderTarget; | ||
| 4295 | renderer->QueueSetViewport = VULKAN_QueueNoOp; | ||
| 4296 | renderer->QueueSetDrawColor = VULKAN_QueueNoOp; | ||
| 4297 | renderer->QueueDrawPoints = VULKAN_QueueDrawPoints; | ||
| 4298 | renderer->QueueDrawLines = VULKAN_QueueDrawPoints; // lines and points queue vertices the same way. | ||
| 4299 | renderer->QueueGeometry = VULKAN_QueueGeometry; | ||
| 4300 | renderer->InvalidateCachedState = VULKAN_InvalidateCachedState; | ||
| 4301 | renderer->RunCommandQueue = VULKAN_RunCommandQueue; | ||
| 4302 | renderer->RenderReadPixels = VULKAN_RenderReadPixels; | ||
| 4303 | renderer->AddVulkanRenderSemaphores = VULKAN_AddVulkanRenderSemaphores; | ||
| 4304 | renderer->RenderPresent = VULKAN_RenderPresent; | ||
| 4305 | renderer->DestroyTexture = VULKAN_DestroyTexture; | ||
| 4306 | renderer->DestroyRenderer = VULKAN_DestroyRenderer; | ||
| 4307 | renderer->SetVSync = VULKAN_SetVSync; | ||
| 4308 | renderer->internal = rendererData; | ||
| 4309 | VULKAN_InvalidateCachedState(renderer); | ||
| 4310 | |||
| 4311 | renderer->name = VULKAN_RenderDriver.name; | ||
| 4312 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); | ||
| 4313 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); | ||
| 4314 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010); | ||
| 4315 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT); | ||
| 4316 | SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384); | ||
| 4317 | |||
| 4318 | /* HACK: make sure the SDL_Renderer references the SDL_Window data now, in | ||
| 4319 | * order to give init functions access to the underlying window handle: | ||
| 4320 | */ | ||
| 4321 | renderer->window = window; | ||
| 4322 | |||
| 4323 | // Initialize Vulkan resources | ||
| 4324 | if (VULKAN_CreateDeviceResources(renderer, create_props) != VK_SUCCESS) { | ||
| 4325 | return false; | ||
| 4326 | } | ||
| 4327 | |||
| 4328 | if (VULKAN_CreateWindowSizeDependentResources(renderer) != VK_SUCCESS) { | ||
| 4329 | return false; | ||
| 4330 | } | ||
| 4331 | |||
| 4332 | #ifdef SDL_HAVE_YUV | ||
| 4333 | if (rendererData->supportsKHRSamplerYCbCrConversion) { | ||
| 4334 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12); | ||
| 4335 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV); | ||
| 4336 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); | ||
| 4337 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); | ||
| 4338 | SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); | ||
| 4339 | } | ||
| 4340 | #endif | ||
| 4341 | |||
| 4342 | return true; | ||
| 4343 | } | ||
| 4344 | |||
| 4345 | SDL_RenderDriver VULKAN_RenderDriver = { | ||
| 4346 | VULKAN_CreateRenderer, "vulkan" | ||
| 4347 | }; | ||
| 4348 | |||
| 4349 | #endif // SDL_VIDEO_RENDER_VULKAN | ||
diff --git a/SDL-3.2.8/src/render/vulkan/SDL_shaders_vulkan.c b/SDL-3.2.8/src/render/vulkan/SDL_shaders_vulkan.c new file mode 100644 index 0000000..6c02cf2 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/SDL_shaders_vulkan.c | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | #ifdef SDL_VIDEO_RENDER_VULKAN | ||
| 24 | |||
| 25 | #include "SDL_shaders_vulkan.h" | ||
| 26 | |||
| 27 | // The shaders here were compiled with compile_shaders.bat | ||
| 28 | #include "VULKAN_PixelShader_Colors.h" | ||
| 29 | #include "VULKAN_PixelShader_Textures.h" | ||
| 30 | #include "VULKAN_PixelShader_Advanced.h" | ||
| 31 | #include "VULKAN_VertexShader.h" | ||
| 32 | |||
| 33 | static struct | ||
| 34 | { | ||
| 35 | const void *ps_shader_data; | ||
| 36 | size_t ps_shader_size; | ||
| 37 | const void *vs_shader_data; | ||
| 38 | size_t vs_shader_size; | ||
| 39 | } VULKAN_shaders[NUM_SHADERS] = { | ||
| 40 | { VULKAN_PixelShader_Colors, sizeof(VULKAN_PixelShader_Colors), | ||
| 41 | VULKAN_VertexShader, sizeof(VULKAN_VertexShader) }, | ||
| 42 | { VULKAN_PixelShader_Textures, sizeof(VULKAN_PixelShader_Textures), | ||
| 43 | VULKAN_VertexShader, sizeof(VULKAN_VertexShader) }, | ||
| 44 | { VULKAN_PixelShader_Advanced, sizeof(VULKAN_PixelShader_Advanced), | ||
| 45 | VULKAN_VertexShader, sizeof(VULKAN_VertexShader) }, | ||
| 46 | }; | ||
| 47 | |||
| 48 | void VULKAN_GetVertexShader(VULKAN_Shader shader, const uint32_t **outBytecode, size_t *outSize) | ||
| 49 | { | ||
| 50 | *outBytecode = (const uint32_t *)VULKAN_shaders[shader].vs_shader_data; | ||
| 51 | *outSize = VULKAN_shaders[shader].vs_shader_size; | ||
| 52 | } | ||
| 53 | |||
| 54 | void VULKAN_GetPixelShader(VULKAN_Shader shader, const uint32_t **outBytecode, size_t *outSize) | ||
| 55 | { | ||
| 56 | *outBytecode = (const uint32_t *)VULKAN_shaders[shader].ps_shader_data; | ||
| 57 | *outSize = VULKAN_shaders[shader].ps_shader_size; | ||
| 58 | } | ||
| 59 | |||
| 60 | #endif // SDL_VIDEO_RENDER_VULKAN | ||
diff --git a/SDL-3.2.8/src/render/vulkan/SDL_shaders_vulkan.h b/SDL-3.2.8/src/render/vulkan/SDL_shaders_vulkan.h new file mode 100644 index 0000000..bc98aa3 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/SDL_shaders_vulkan.h | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | /* | ||
| 2 | Simple DirectMedia Layer | ||
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | ||
| 4 | |||
| 5 | This software is provided 'as-is', without any express or implied | ||
| 6 | warranty. In no event will the authors be held liable for any damages | ||
| 7 | arising from the use of this software. | ||
| 8 | |||
| 9 | Permission is granted to anyone to use this software for any purpose, | ||
| 10 | including commercial applications, and to alter it and redistribute it | ||
| 11 | freely, subject to the following restrictions: | ||
| 12 | |||
| 13 | 1. The origin of this software must not be misrepresented; you must not | ||
| 14 | claim that you wrote the original software. If you use this software | ||
| 15 | in a product, an acknowledgment in the product documentation would be | ||
| 16 | appreciated but is not required. | ||
| 17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
| 18 | misrepresented as being the original software. | ||
| 19 | 3. This notice may not be removed or altered from any source distribution. | ||
| 20 | */ | ||
| 21 | #include "SDL_internal.h" | ||
| 22 | |||
| 23 | // Vulkan shader implementation | ||
| 24 | |||
| 25 | // Set up for C function definitions, even when using C++ | ||
| 26 | #ifdef __cplusplus | ||
| 27 | extern "C" { | ||
| 28 | #endif | ||
| 29 | |||
| 30 | typedef enum | ||
| 31 | { | ||
| 32 | SHADER_SOLID, | ||
| 33 | SHADER_RGB, | ||
| 34 | SHADER_ADVANCED, | ||
| 35 | NUM_SHADERS | ||
| 36 | } VULKAN_Shader; | ||
| 37 | |||
| 38 | extern void VULKAN_GetVertexShader(VULKAN_Shader shader, const uint32_t **outBytecode, size_t *outSize); | ||
| 39 | extern void VULKAN_GetPixelShader(VULKAN_Shader shader, const uint32_t **outBytecode, size_t *outSize); | ||
| 40 | |||
| 41 | // Ends C function definitions when using C++ | ||
| 42 | #ifdef __cplusplus | ||
| 43 | } | ||
| 44 | #endif | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Advanced.h b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Advanced.h new file mode 100644 index 0000000..0c267cf --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Advanced.h | |||
| @@ -0,0 +1,271 @@ | |||
| 1 | // 1113.1.1 | ||
| 2 | #pragma once | ||
| 3 | static const uint32_t VULKAN_PixelShader_Advanced[] = { | ||
| 4 | 0x07230203,0x00010000,0x0008000b,0x0000043e,0x00000000,0x00020011,0x00000001,0x0006000b, | ||
| 5 | 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, | ||
| 6 | 0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x000001bb,0x000001be,0x000001c2, | ||
| 7 | 0x00030010,0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004, | ||
| 8 | 0x6e69616d,0x00000000,0x00050005,0x00000075,0x736e6f43,0x746e6174,0x00000073,0x00070006, | ||
| 9 | 0x00000075,0x00000000,0x47526373,0x756f5f42,0x74757074,0x00000000,0x00060006,0x00000075, | ||
| 10 | 0x00000001,0x75706e69,0x79745f74,0x00006570,0x00060006,0x00000075,0x00000002,0x6f6c6f63, | ||
| 11 | 0x63735f72,0x00656c61,0x00060006,0x00000075,0x00000003,0x73756e75,0x705f6465,0x00306461, | ||
| 12 | 0x00070006,0x00000075,0x00000004,0x656e6f74,0x5f70616d,0x6874656d,0x0000646f,0x00070006, | ||
| 13 | 0x00000075,0x00000005,0x656e6f74,0x5f70616d,0x74636166,0x0031726f,0x00070006,0x00000075, | ||
| 14 | 0x00000006,0x656e6f74,0x5f70616d,0x74636166,0x0032726f,0x00070006,0x00000075,0x00000007, | ||
| 15 | 0x5f726473,0x74696877,0x6f705f65,0x00746e69,0x00030005,0x00000077,0x00000000,0x00050005, | ||
| 16 | 0x000000e6,0x74786574,0x30657275,0x00000000,0x00050005,0x000001bb,0x75706e69,0x65742e74, | ||
| 17 | 0x00000078,0x00050005,0x000001be,0x75706e69,0x6f632e74,0x00726f6c,0x00070005,0x000001c2, | ||
| 18 | 0x746e6540,0x6f507972,0x4f746e69,0x75707475,0x00000074,0x00050048,0x00000075,0x00000000, | ||
| 19 | 0x00000023,0x00000000,0x00050048,0x00000075,0x00000001,0x00000023,0x00000004,0x00050048, | ||
| 20 | 0x00000075,0x00000002,0x00000023,0x00000008,0x00050048,0x00000075,0x00000003,0x00000023, | ||
| 21 | 0x0000000c,0x00050048,0x00000075,0x00000004,0x00000023,0x00000010,0x00050048,0x00000075, | ||
| 22 | 0x00000005,0x00000023,0x00000014,0x00050048,0x00000075,0x00000006,0x00000023,0x00000018, | ||
| 23 | 0x00050048,0x00000075,0x00000007,0x00000023,0x0000001c,0x00030047,0x00000075,0x00000002, | ||
| 24 | 0x00040047,0x00000077,0x00000022,0x00000000,0x00040047,0x00000077,0x00000021,0x00000001, | ||
| 25 | 0x00040047,0x000000e6,0x00000022,0x00000000,0x00040047,0x000000e6,0x00000021,0x00000000, | ||
| 26 | 0x00040047,0x000001bb,0x0000001e,0x00000000,0x00040047,0x000001be,0x0000001e,0x00000001, | ||
| 27 | 0x00040047,0x000001c2,0x0000001e,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003, | ||
| 28 | 0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x0000000f,0x00000006,0x00000003, | ||
| 29 | 0x00040017,0x00000018,0x00000006,0x00000004,0x00040017,0x00000019,0x00000006,0x00000002, | ||
| 30 | 0x0004002b,0x00000006,0x00000032,0x3d25aee6,0x00020014,0x00000033,0x0004002b,0x00000006, | ||
| 31 | 0x00000038,0x414eb852,0x0004002b,0x00000006,0x0000003c,0x3d6147ae,0x0004002b,0x00000006, | ||
| 32 | 0x0000003f,0x3f870a3d,0x0004002b,0x00000006,0x00000041,0x4019999a,0x0004002b,0x00000006, | ||
| 33 | 0x00000047,0x3b4d2e1c,0x0004002b,0x00000006,0x00000050,0x3ed55555,0x0004002b,0x00000006, | ||
| 34 | 0x0000005a,0x3c4fcdac,0x0006002c,0x0000000f,0x0000005b,0x0000005a,0x0000005a,0x0000005a, | ||
| 35 | 0x0004002b,0x00000006,0x0000005d,0x3f560000,0x0004002b,0x00000006,0x00000060,0x00000000, | ||
| 36 | 0x0006002c,0x0000000f,0x00000061,0x00000060,0x00000060,0x00000060,0x0004002b,0x00000006, | ||
| 37 | 0x00000064,0x4196d000,0x0004002b,0x00000006,0x00000065,0x41958000,0x0004002b,0x00000006, | ||
| 38 | 0x0000006c,0x461c4000,0x0004002b,0x00000006,0x00000071,0x40c8e06b,0x0006002c,0x0000000f, | ||
| 39 | 0x00000072,0x00000071,0x00000071,0x00000071,0x000a001e,0x00000075,0x00000006,0x00000006, | ||
| 40 | 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000076, | ||
| 41 | 0x00000002,0x00000075,0x0004003b,0x00000076,0x00000077,0x00000002,0x00040015,0x00000078, | ||
| 42 | 0x00000020,0x00000001,0x0004002b,0x00000078,0x00000079,0x00000007,0x00040020,0x0000007a, | ||
| 43 | 0x00000002,0x00000006,0x0004002b,0x00000078,0x00000081,0x00000004,0x0004002b,0x00000006, | ||
| 44 | 0x00000084,0x3f800000,0x0004002b,0x00000078,0x00000088,0x00000005,0x0004002b,0x00000006, | ||
| 45 | 0x00000090,0x40000000,0x0004002b,0x00000078,0x00000094,0x00000001,0x00040018,0x0000009b, | ||
| 46 | 0x0000000f,0x00000003,0x0004002b,0x00000006,0x0000009c,0x3f209d8c,0x0004002b,0x00000006, | ||
| 47 | 0x0000009d,0x3ea897c8,0x0004002b,0x00000006,0x0000009e,0x3d3168f9,0x0006002c,0x0000000f, | ||
| 48 | 0x0000009f,0x0000009c,0x0000009d,0x0000009e,0x0004002b,0x00000006,0x000000a0,0x3d8d82ba, | ||
| 49 | 0x0004002b,0x00000006,0x000000a1,0x3f6b670a,0x0004002b,0x00000006,0x000000a2,0x3c3a27af, | ||
| 50 | 0x0006002c,0x0000000f,0x000000a3,0x000000a0,0x000000a1,0x000000a2,0x0004002b,0x00000006, | ||
| 51 | 0x000000a4,0x3c86466b,0x0004002b,0x00000006,0x000000a5,0x3db44029,0x0004002b,0x00000006, | ||
| 52 | 0x000000a6,0x3f6545b7,0x0006002c,0x0000000f,0x000000a7,0x000000a4,0x000000a5,0x000000a6, | ||
| 53 | 0x0006002c,0x0000009b,0x000000a8,0x0000009f,0x000000a3,0x000000a7,0x0004002b,0x00000078, | ||
| 54 | 0x000000c1,0x00000006,0x0004002b,0x00000006,0x000000d1,0x3fd48b22,0x0004002b,0x00000006, | ||
| 55 | 0x000000d2,0xbf1670a0,0x0004002b,0x00000006,0x000000d3,0xbd952d23,0x0006002c,0x0000000f, | ||
| 56 | 0x000000d4,0x000000d1,0x000000d2,0x000000d3,0x0004002b,0x00000006,0x000000d5,0xbdff127f, | ||
| 57 | 0x0004002b,0x00000006,0x000000d6,0x3f9102b4,0x0004002b,0x00000006,0x000000d7,0xbc08c60d, | ||
| 58 | 0x0006002c,0x0000000f,0x000000d8,0x000000d5,0x000000d6,0x000000d7,0x0004002b,0x00000006, | ||
| 59 | 0x000000d9,0xbc94b7b3,0x0004002b,0x00000006,0x000000da,0xbdce05cd,0x0004002b,0x00000006, | ||
| 60 | 0x000000db,0x3f8f333c,0x0006002c,0x0000000f,0x000000dc,0x000000d9,0x000000da,0x000000db, | ||
| 61 | 0x0006002c,0x0000009b,0x000000dd,0x000000d4,0x000000d8,0x000000dc,0x00090019,0x000000e3, | ||
| 62 | 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b, | ||
| 63 | 0x000000e4,0x000000e3,0x00040020,0x000000e5,0x00000000,0x000000e4,0x0004003b,0x000000e5, | ||
| 64 | 0x000000e6,0x00000000,0x0004002b,0x00000078,0x000000f2,0x00000002,0x0004002b,0x00000078, | ||
| 65 | 0x00000103,0x00000000,0x0004002b,0x00000006,0x00000147,0x40400000,0x00040020,0x000001b6, | ||
| 66 | 0x00000001,0x00000018,0x00040020,0x000001ba,0x00000001,0x00000019,0x0004003b,0x000001ba, | ||
| 67 | 0x000001bb,0x00000001,0x0004003b,0x000001b6,0x000001be,0x00000001,0x00040020,0x000001c1, | ||
| 68 | 0x00000003,0x00000018,0x0004003b,0x000001c1,0x000001c2,0x00000003,0x0006002c,0x0000000f, | ||
| 69 | 0x000003fa,0x0000005d,0x0000005d,0x0000005d,0x0006002c,0x0000000f,0x000003fb,0x00000064, | ||
| 70 | 0x00000064,0x00000064,0x0006002c,0x0000000f,0x00000400,0x00000084,0x00000084,0x00000084, | ||
| 71 | 0x0004002b,0x00000006,0x00000406,0x3f72a76f,0x0004002b,0x00000006,0x00000407,0x3d9e8391, | ||
| 72 | 0x0004002b,0x00000006,0x00000409,0xbd6147ae,0x00030001,0x00000018,0x0000043d,0x00050036, | ||
| 73 | 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000019, | ||
| 74 | 0x000001bc,0x000001bb,0x0004003d,0x00000018,0x000001bf,0x000001be,0x0004003d,0x000000e4, | ||
| 75 | 0x0000023c,0x000000e6,0x00050057,0x00000018,0x0000023f,0x0000023c,0x000001bc,0x00050041, | ||
| 76 | 0x0000007a,0x000001d8,0x00000077,0x00000094,0x0004003d,0x00000006,0x000001d9,0x000001d8, | ||
| 77 | 0x000500b4,0x00000033,0x000001da,0x000001d9,0x00000147,0x000300f7,0x000001e5,0x00000000, | ||
| 78 | 0x000400fa,0x000001da,0x000001db,0x000001e5,0x000200f8,0x000001db,0x0008004f,0x0000000f, | ||
| 79 | 0x000001dd,0x0000023f,0x0000023f,0x00000000,0x00000001,0x00000002,0x0006000c,0x0000000f, | ||
| 80 | 0x00000246,0x00000001,0x00000004,0x000001dd,0x0007000c,0x0000000f,0x00000247,0x00000001, | ||
| 81 | 0x0000001a,0x00000246,0x0000005b,0x00050083,0x0000000f,0x00000249,0x00000247,0x000003fa, | ||
| 82 | 0x0007000c,0x0000000f,0x0000024a,0x00000001,0x00000028,0x00000249,0x00000061,0x0006000c, | ||
| 83 | 0x0000000f,0x0000024c,0x00000001,0x00000004,0x000001dd,0x0007000c,0x0000000f,0x0000024d, | ||
| 84 | 0x00000001,0x0000001a,0x0000024c,0x0000005b,0x0005008e,0x0000000f,0x0000024e,0x0000024d, | ||
| 85 | 0x00000065,0x00050083,0x0000000f,0x00000250,0x000003fb,0x0000024e,0x00050088,0x0000000f, | ||
| 86 | 0x00000253,0x0000024a,0x00000250,0x0006000c,0x0000000f,0x00000254,0x00000001,0x00000004, | ||
| 87 | 0x00000253,0x0007000c,0x0000000f,0x00000255,0x00000001,0x0000001a,0x00000254,0x00000072, | ||
| 88 | 0x0005008e,0x0000000f,0x00000256,0x00000255,0x0000006c,0x00050041,0x0000007a,0x00000257, | ||
| 89 | 0x00000077,0x00000079,0x0004003d,0x00000006,0x00000258,0x00000257,0x00060050,0x0000000f, | ||
| 90 | 0x00000259,0x00000258,0x00000258,0x00000258,0x00050088,0x0000000f,0x0000025a,0x00000256, | ||
| 91 | 0x00000259,0x00050051,0x00000006,0x000001e0,0x0000025a,0x00000000,0x00060052,0x00000018, | ||
| 92 | 0x000003a7,0x000001e0,0x0000023f,0x00000000,0x00050051,0x00000006,0x000001e2,0x0000025a, | ||
| 93 | 0x00000001,0x00060052,0x00000018,0x000003a9,0x000001e2,0x000003a7,0x00000001,0x00050051, | ||
| 94 | 0x00000006,0x000001e4,0x0000025a,0x00000002,0x00060052,0x00000018,0x000003ab,0x000001e4, | ||
| 95 | 0x000003a9,0x00000002,0x000200f9,0x000001e5,0x000200f8,0x000001e5,0x000700f5,0x00000018, | ||
| 96 | 0x0000040a,0x0000023f,0x00000005,0x000003ab,0x000001db,0x00050041,0x0000007a,0x000001e6, | ||
| 97 | 0x00000077,0x00000081,0x0004003d,0x00000006,0x000001e7,0x000001e6,0x000500b7,0x00000033, | ||
| 98 | 0x000001e8,0x000001e7,0x00000060,0x000300f7,0x000001f3,0x00000000,0x000400fa,0x000001e8, | ||
| 99 | 0x000001e9,0x000001f3,0x000200f8,0x000001e9,0x0008004f,0x0000000f,0x000001eb,0x0000040a, | ||
| 100 | 0x0000040a,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007a,0x0000025f,0x00000077, | ||
| 101 | 0x00000081,0x0004003d,0x00000006,0x00000260,0x0000025f,0x000500b4,0x00000033,0x00000261, | ||
| 102 | 0x00000260,0x00000084,0x000300f7,0x00000295,0x00000000,0x000400fa,0x00000261,0x00000262, | ||
| 103 | 0x00000267,0x000200f8,0x00000262,0x00050041,0x0000007a,0x00000263,0x00000077,0x00000088, | ||
| 104 | 0x0004003d,0x00000006,0x00000264,0x00000263,0x0005008e,0x0000000f,0x00000266,0x000001eb, | ||
| 105 | 0x00000264,0x000200f9,0x00000295,0x000200f8,0x00000267,0x00050041,0x0000007a,0x00000268, | ||
| 106 | 0x00000077,0x00000081,0x0004003d,0x00000006,0x00000269,0x00000268,0x000500b4,0x00000033, | ||
| 107 | 0x0000026a,0x00000269,0x00000090,0x000300f7,0x00000294,0x00000000,0x000400fa,0x0000026a, | ||
| 108 | 0x0000026b,0x00000294,0x000200f8,0x0000026b,0x00050041,0x0000007a,0x0000026c,0x00000077, | ||
| 109 | 0x00000094,0x0004003d,0x00000006,0x0000026d,0x0000026c,0x000500b4,0x00000033,0x0000026e, | ||
| 110 | 0x0000026d,0x00000090,0x000300f7,0x00000272,0x00000000,0x000400fa,0x0000026e,0x0000026f, | ||
| 111 | 0x00000272,0x000200f8,0x0000026f,0x00050090,0x0000000f,0x00000271,0x000001eb,0x000000a8, | ||
| 112 | 0x000200f9,0x00000272,0x000200f8,0x00000272,0x000700f5,0x0000000f,0x0000040b,0x000001eb, | ||
| 113 | 0x0000026b,0x00000271,0x0000026f,0x00050051,0x00000006,0x00000274,0x0000040b,0x00000000, | ||
| 114 | 0x00050051,0x00000006,0x00000276,0x0000040b,0x00000001,0x00050051,0x00000006,0x00000278, | ||
| 115 | 0x0000040b,0x00000002,0x0007000c,0x00000006,0x00000279,0x00000001,0x00000028,0x00000276, | ||
| 116 | 0x00000278,0x0007000c,0x00000006,0x0000027a,0x00000001,0x00000028,0x00000274,0x00000279, | ||
| 117 | 0x000500ba,0x00000033,0x0000027c,0x0000027a,0x00000060,0x000300f7,0x0000028c,0x00000000, | ||
| 118 | 0x000400fa,0x0000027c,0x0000027d,0x0000028c,0x000200f8,0x0000027d,0x00050041,0x0000007a, | ||
| 119 | 0x0000027e,0x00000077,0x00000088,0x0004003d,0x00000006,0x0000027f,0x0000027e,0x0008000c, | ||
| 120 | 0x00000006,0x00000282,0x00000001,0x00000032,0x0000027f,0x0000027a,0x00000084,0x00050041, | ||
| 121 | 0x0000007a,0x00000283,0x00000077,0x000000c1,0x0004003d,0x00000006,0x00000284,0x00000283, | ||
| 122 | 0x0008000c,0x00000006,0x00000287,0x00000001,0x00000032,0x00000284,0x0000027a,0x00000084, | ||
| 123 | 0x00050088,0x00000006,0x00000288,0x00000282,0x00000287,0x0005008e,0x0000000f,0x0000028b, | ||
| 124 | 0x0000040b,0x00000288,0x000200f9,0x0000028c,0x000200f8,0x0000028c,0x000700f5,0x0000000f, | ||
| 125 | 0x0000040c,0x0000040b,0x00000272,0x0000028b,0x0000027d,0x00050041,0x0000007a,0x0000028d, | ||
| 126 | 0x00000077,0x00000094,0x0004003d,0x00000006,0x0000028e,0x0000028d,0x000500b4,0x00000033, | ||
| 127 | 0x0000028f,0x0000028e,0x00000090,0x000300f7,0x00000293,0x00000000,0x000400fa,0x0000028f, | ||
| 128 | 0x00000290,0x00000293,0x000200f8,0x00000290,0x00050090,0x0000000f,0x00000292,0x0000040c, | ||
| 129 | 0x000000dd,0x000200f9,0x00000293,0x000200f8,0x00000293,0x000700f5,0x0000000f,0x0000040f, | ||
| 130 | 0x0000040c,0x0000028c,0x00000292,0x00000290,0x000200f9,0x00000294,0x000200f8,0x00000294, | ||
| 131 | 0x000700f5,0x0000000f,0x0000040e,0x000001eb,0x00000267,0x0000040f,0x00000293,0x000200f9, | ||
| 132 | 0x00000295,0x000200f8,0x00000295,0x000700f5,0x0000000f,0x0000040d,0x00000266,0x00000262, | ||
| 133 | 0x0000040e,0x00000294,0x00050051,0x00000006,0x000001ee,0x0000040d,0x00000000,0x00060052, | ||
| 134 | 0x00000018,0x000003b0,0x000001ee,0x0000040a,0x00000000,0x00050051,0x00000006,0x000001f0, | ||
| 135 | 0x0000040d,0x00000001,0x00060052,0x00000018,0x000003b2,0x000001f0,0x000003b0,0x00000001, | ||
| 136 | 0x00050051,0x00000006,0x000001f2,0x0000040d,0x00000002,0x00060052,0x00000018,0x000003b4, | ||
| 137 | 0x000001f2,0x000003b2,0x00000002,0x000200f9,0x000001f3,0x000200f8,0x000001f3,0x000700f5, | ||
| 138 | 0x00000018,0x00000415,0x0000040a,0x000001e5,0x000003b4,0x00000295,0x00050041,0x0000007a, | ||
| 139 | 0x000001f4,0x00000077,0x00000094,0x0004003d,0x00000006,0x000001f5,0x000001f4,0x000500b4, | ||
| 140 | 0x00000033,0x000001f6,0x000001f5,0x00000084,0x000300f7,0x00000234,0x00000000,0x000400fa, | ||
| 141 | 0x000001f6,0x000001f7,0x00000204,0x000200f8,0x000001f7,0x0008004f,0x0000000f,0x000001f9, | ||
| 142 | 0x00000415,0x00000415,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007a,0x0000029d, | ||
| 143 | 0x00000077,0x00000103,0x0004003d,0x00000006,0x0000029e,0x0000029d,0x000500b7,0x00000033, | ||
| 144 | 0x0000029f,0x0000029e,0x00000060,0x000300f7,0x000002ad,0x00000000,0x000400fa,0x0000029f, | ||
| 145 | 0x000002a0,0x000002ad,0x000200f8,0x000002a0,0x00050051,0x00000006,0x000002a2,0x00000415, | ||
| 146 | 0x00000000,0x000500bc,0x00000033,0x000002b6,0x000002a2,0x00000032,0x000300f7,0x000002c0, | ||
| 147 | 0x00000000,0x000400fa,0x000002b6,0x000002b7,0x000002ba,0x000200f8,0x000002b7,0x00050085, | ||
| 148 | 0x00000006,0x000002b9,0x000002a2,0x00000407,0x000200f9,0x000002c0,0x000200f8,0x000002ba, | ||
| 149 | 0x00050081,0x00000006,0x000002bc,0x000002a2,0x0000003c,0x0006000c,0x00000006,0x000002bd, | ||
| 150 | 0x00000001,0x00000004,0x000002bc,0x00050085,0x00000006,0x000002be,0x000002bd,0x00000406, | ||
| 151 | 0x0007000c,0x00000006,0x000002bf,0x00000001,0x0000001a,0x000002be,0x00000041,0x000200f9, | ||
| 152 | 0x000002c0,0x000200f8,0x000002c0,0x000700f5,0x00000006,0x0000042c,0x000002b9,0x000002b7, | ||
| 153 | 0x000002bf,0x000002ba,0x00050051,0x00000006,0x000002a6,0x00000415,0x00000001,0x000500bc, | ||
| 154 | 0x00000033,0x000002c5,0x000002a6,0x00000032,0x000300f7,0x000002cf,0x00000000,0x000400fa, | ||
| 155 | 0x000002c5,0x000002c6,0x000002c9,0x000200f8,0x000002c6,0x00050085,0x00000006,0x000002c8, | ||
| 156 | 0x000002a6,0x00000407,0x000200f9,0x000002cf,0x000200f8,0x000002c9,0x00050081,0x00000006, | ||
| 157 | 0x000002cb,0x000002a6,0x0000003c,0x0006000c,0x00000006,0x000002cc,0x00000001,0x00000004, | ||
| 158 | 0x000002cb,0x00050085,0x00000006,0x000002cd,0x000002cc,0x00000406,0x0007000c,0x00000006, | ||
| 159 | 0x000002ce,0x00000001,0x0000001a,0x000002cd,0x00000041,0x000200f9,0x000002cf,0x000200f8, | ||
| 160 | 0x000002cf,0x000700f5,0x00000006,0x0000042e,0x000002c8,0x000002c6,0x000002ce,0x000002c9, | ||
| 161 | 0x00050051,0x00000006,0x000002aa,0x00000415,0x00000002,0x000500bc,0x00000033,0x000002d4, | ||
| 162 | 0x000002aa,0x00000032,0x000300f7,0x000002de,0x00000000,0x000400fa,0x000002d4,0x000002d5, | ||
| 163 | 0x000002d8,0x000200f8,0x000002d5,0x00050085,0x00000006,0x000002d7,0x000002aa,0x00000407, | ||
| 164 | 0x000200f9,0x000002de,0x000200f8,0x000002d8,0x00050081,0x00000006,0x000002da,0x000002aa, | ||
| 165 | 0x0000003c,0x0006000c,0x00000006,0x000002db,0x00000001,0x00000004,0x000002da,0x00050085, | ||
| 166 | 0x00000006,0x000002dc,0x000002db,0x00000406,0x0007000c,0x00000006,0x000002dd,0x00000001, | ||
| 167 | 0x0000001a,0x000002dc,0x00000041,0x000200f9,0x000002de,0x000200f8,0x000002de,0x000700f5, | ||
| 168 | 0x00000006,0x00000430,0x000002d7,0x000002d5,0x000002dd,0x000002d8,0x00060050,0x0000000f, | ||
| 169 | 0x0000043c,0x0000042c,0x0000042e,0x00000430,0x000200f9,0x000002ad,0x000200f8,0x000002ad, | ||
| 170 | 0x000700f5,0x0000000f,0x00000432,0x000001f9,0x000001f7,0x0000043c,0x000002de,0x00050041, | ||
| 171 | 0x0000007a,0x000002af,0x00000077,0x000000f2,0x0004003d,0x00000006,0x000002b0,0x000002af, | ||
| 172 | 0x0005008e,0x0000000f,0x000002b1,0x00000432,0x000002b0,0x00050051,0x00000006,0x000001fc, | ||
| 173 | 0x000002b1,0x00000000,0x00050051,0x00000006,0x000001fe,0x000002b1,0x00000001,0x00050051, | ||
| 174 | 0x00000006,0x00000200,0x000002b1,0x00000002,0x00050051,0x00000006,0x00000202,0x00000415, | ||
| 175 | 0x00000003,0x00070050,0x00000018,0x00000408,0x000001fc,0x000001fe,0x00000200,0x00000202, | ||
| 176 | 0x000200f9,0x00000234,0x000200f8,0x00000204,0x00050041,0x0000007a,0x00000205,0x00000077, | ||
| 177 | 0x00000094,0x0004003d,0x00000006,0x00000206,0x00000205,0x000500b4,0x00000033,0x00000207, | ||
| 178 | 0x00000206,0x00000090,0x000300f7,0x00000233,0x00000000,0x000400fa,0x00000207,0x00000208, | ||
| 179 | 0x00000215,0x000200f8,0x00000208,0x0008004f,0x0000000f,0x0000020a,0x00000415,0x00000415, | ||
| 180 | 0x00000000,0x00000001,0x00000002,0x00050041,0x0000007a,0x000002e7,0x00000077,0x000000f2, | ||
| 181 | 0x0004003d,0x00000006,0x000002e8,0x000002e7,0x0005008e,0x0000000f,0x000002e9,0x0000020a, | ||
| 182 | 0x000002e8,0x00050041,0x0000007a,0x000002ea,0x00000077,0x00000103,0x0004003d,0x00000006, | ||
| 183 | 0x000002eb,0x000002ea,0x000500b7,0x00000033,0x000002ec,0x000002eb,0x00000060,0x000400a8, | ||
| 184 | 0x00000033,0x000002ed,0x000002ec,0x000300f7,0x000002ff,0x00000000,0x000400fa,0x000002ed, | ||
| 185 | 0x000002ee,0x000002ff,0x000200f8,0x000002ee,0x00050051,0x00000006,0x000002f0,0x000002e9, | ||
| 186 | 0x00000000,0x000500bc,0x00000033,0x00000304,0x000002f0,0x00000047,0x000300f7,0x0000030e, | ||
| 187 | 0x00000000,0x000400fa,0x00000304,0x00000305,0x00000308,0x000200f8,0x00000305,0x00050085, | ||
| 188 | 0x00000006,0x00000307,0x000002f0,0x00000038,0x000200f9,0x0000030e,0x000200f8,0x00000308, | ||
| 189 | 0x0006000c,0x00000006,0x0000030a,0x00000001,0x00000004,0x000002f0,0x0007000c,0x00000006, | ||
| 190 | 0x0000030b,0x00000001,0x0000001a,0x0000030a,0x00000050,0x0008000c,0x00000006,0x0000030d, | ||
| 191 | 0x00000001,0x00000032,0x0000030b,0x0000003f,0x00000409,0x000200f9,0x0000030e,0x000200f8, | ||
| 192 | 0x0000030e,0x000700f5,0x00000006,0x00000421,0x00000307,0x00000305,0x0000030d,0x00000308, | ||
| 193 | 0x00050051,0x00000006,0x000002f4,0x000002e9,0x00000001,0x000500bc,0x00000033,0x00000313, | ||
| 194 | 0x000002f4,0x00000047,0x000300f7,0x0000031d,0x00000000,0x000400fa,0x00000313,0x00000314, | ||
| 195 | 0x00000317,0x000200f8,0x00000314,0x00050085,0x00000006,0x00000316,0x000002f4,0x00000038, | ||
| 196 | 0x000200f9,0x0000031d,0x000200f8,0x00000317,0x0006000c,0x00000006,0x00000319,0x00000001, | ||
| 197 | 0x00000004,0x000002f4,0x0007000c,0x00000006,0x0000031a,0x00000001,0x0000001a,0x00000319, | ||
| 198 | 0x00000050,0x0008000c,0x00000006,0x0000031c,0x00000001,0x00000032,0x0000031a,0x0000003f, | ||
| 199 | 0x00000409,0x000200f9,0x0000031d,0x000200f8,0x0000031d,0x000700f5,0x00000006,0x00000423, | ||
| 200 | 0x00000316,0x00000314,0x0000031c,0x00000317,0x00050051,0x00000006,0x000002f8,0x000002e9, | ||
| 201 | 0x00000002,0x000500bc,0x00000033,0x00000322,0x000002f8,0x00000047,0x000300f7,0x0000032c, | ||
| 202 | 0x00000000,0x000400fa,0x00000322,0x00000323,0x00000326,0x000200f8,0x00000323,0x00050085, | ||
| 203 | 0x00000006,0x00000325,0x000002f8,0x00000038,0x000200f9,0x0000032c,0x000200f8,0x00000326, | ||
| 204 | 0x0006000c,0x00000006,0x00000328,0x00000001,0x00000004,0x000002f8,0x0007000c,0x00000006, | ||
| 205 | 0x00000329,0x00000001,0x0000001a,0x00000328,0x00000050,0x0008000c,0x00000006,0x0000032b, | ||
| 206 | 0x00000001,0x00000032,0x00000329,0x0000003f,0x00000409,0x000200f9,0x0000032c,0x000200f8, | ||
| 207 | 0x0000032c,0x000700f5,0x00000006,0x00000425,0x00000325,0x00000323,0x0000032b,0x00000326, | ||
| 208 | 0x00060050,0x0000000f,0x0000043b,0x00000421,0x00000423,0x00000425,0x0008000c,0x0000000f, | ||
| 209 | 0x000002fe,0x00000001,0x0000002b,0x0000043b,0x00000061,0x00000400,0x000200f9,0x000002ff, | ||
| 210 | 0x000200f8,0x000002ff,0x000700f5,0x0000000f,0x00000427,0x000002e9,0x00000208,0x000002fe, | ||
| 211 | 0x0000032c,0x00050051,0x00000006,0x0000020d,0x00000427,0x00000000,0x00050051,0x00000006, | ||
| 212 | 0x0000020f,0x00000427,0x00000001,0x00050051,0x00000006,0x00000211,0x00000427,0x00000002, | ||
| 213 | 0x00050051,0x00000006,0x00000213,0x00000415,0x00000003,0x00070050,0x00000018,0x00000405, | ||
| 214 | 0x0000020d,0x0000020f,0x00000211,0x00000213,0x000200f9,0x00000233,0x000200f8,0x00000215, | ||
| 215 | 0x00050041,0x0000007a,0x00000216,0x00000077,0x00000094,0x0004003d,0x00000006,0x00000217, | ||
| 216 | 0x00000216,0x000500b4,0x00000033,0x00000218,0x00000217,0x00000147,0x000300f7,0x00000232, | ||
| 217 | 0x00000000,0x000400fa,0x00000218,0x00000219,0x0000022f,0x000200f8,0x00000219,0x0008004f, | ||
| 218 | 0x0000000f,0x0000021b,0x00000415,0x00000415,0x00000000,0x00000001,0x00000002,0x00050090, | ||
| 219 | 0x0000000f,0x0000021c,0x0000021b,0x000000dd,0x00050051,0x00000006,0x0000021e,0x0000021c, | ||
| 220 | 0x00000000,0x00060052,0x00000018,0x000003da,0x0000021e,0x0000043d,0x00000000,0x00050051, | ||
| 221 | 0x00000006,0x00000220,0x0000021c,0x00000001,0x00060052,0x00000018,0x000003dc,0x00000220, | ||
| 222 | 0x000003da,0x00000001,0x00050051,0x00000006,0x00000222,0x0000021c,0x00000002,0x00060052, | ||
| 223 | 0x00000018,0x000003de,0x00000222,0x000003dc,0x00000002,0x0008004f,0x0000000f,0x00000224, | ||
| 224 | 0x000003de,0x000003de,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007a,0x00000335, | ||
| 225 | 0x00000077,0x000000f2,0x0004003d,0x00000006,0x00000336,0x00000335,0x0005008e,0x0000000f, | ||
| 226 | 0x00000337,0x00000224,0x00000336,0x00050041,0x0000007a,0x00000338,0x00000077,0x00000103, | ||
| 227 | 0x0004003d,0x00000006,0x00000339,0x00000338,0x000500b7,0x00000033,0x0000033a,0x00000339, | ||
| 228 | 0x00000060,0x000400a8,0x00000033,0x0000033b,0x0000033a,0x000300f7,0x0000034d,0x00000000, | ||
| 229 | 0x000400fa,0x0000033b,0x0000033c,0x0000034d,0x000200f8,0x0000033c,0x00050051,0x00000006, | ||
| 230 | 0x0000033e,0x00000337,0x00000000,0x000500bc,0x00000033,0x00000352,0x0000033e,0x00000047, | ||
| 231 | 0x000300f7,0x0000035c,0x00000000,0x000400fa,0x00000352,0x00000353,0x00000356,0x000200f8, | ||
| 232 | 0x00000353,0x00050085,0x00000006,0x00000355,0x0000033e,0x00000038,0x000200f9,0x0000035c, | ||
| 233 | 0x000200f8,0x00000356,0x0006000c,0x00000006,0x00000358,0x00000001,0x00000004,0x0000033e, | ||
| 234 | 0x0007000c,0x00000006,0x00000359,0x00000001,0x0000001a,0x00000358,0x00000050,0x0008000c, | ||
| 235 | 0x00000006,0x0000035b,0x00000001,0x00000032,0x00000359,0x0000003f,0x00000409,0x000200f9, | ||
| 236 | 0x0000035c,0x000200f8,0x0000035c,0x000700f5,0x00000006,0x00000416,0x00000355,0x00000353, | ||
| 237 | 0x0000035b,0x00000356,0x00050051,0x00000006,0x00000342,0x00000337,0x00000001,0x000500bc, | ||
| 238 | 0x00000033,0x00000361,0x00000342,0x00000047,0x000300f7,0x0000036b,0x00000000,0x000400fa, | ||
| 239 | 0x00000361,0x00000362,0x00000365,0x000200f8,0x00000362,0x00050085,0x00000006,0x00000364, | ||
| 240 | 0x00000342,0x00000038,0x000200f9,0x0000036b,0x000200f8,0x00000365,0x0006000c,0x00000006, | ||
| 241 | 0x00000367,0x00000001,0x00000004,0x00000342,0x0007000c,0x00000006,0x00000368,0x00000001, | ||
| 242 | 0x0000001a,0x00000367,0x00000050,0x0008000c,0x00000006,0x0000036a,0x00000001,0x00000032, | ||
| 243 | 0x00000368,0x0000003f,0x00000409,0x000200f9,0x0000036b,0x000200f8,0x0000036b,0x000700f5, | ||
| 244 | 0x00000006,0x00000418,0x00000364,0x00000362,0x0000036a,0x00000365,0x00050051,0x00000006, | ||
| 245 | 0x00000346,0x00000337,0x00000002,0x000500bc,0x00000033,0x00000370,0x00000346,0x00000047, | ||
| 246 | 0x000300f7,0x0000037a,0x00000000,0x000400fa,0x00000370,0x00000371,0x00000374,0x000200f8, | ||
| 247 | 0x00000371,0x00050085,0x00000006,0x00000373,0x00000346,0x00000038,0x000200f9,0x0000037a, | ||
| 248 | 0x000200f8,0x00000374,0x0006000c,0x00000006,0x00000376,0x00000001,0x00000004,0x00000346, | ||
| 249 | 0x0007000c,0x00000006,0x00000377,0x00000001,0x0000001a,0x00000376,0x00000050,0x0008000c, | ||
| 250 | 0x00000006,0x00000379,0x00000001,0x00000032,0x00000377,0x0000003f,0x00000409,0x000200f9, | ||
| 251 | 0x0000037a,0x000200f8,0x0000037a,0x000700f5,0x00000006,0x0000041a,0x00000373,0x00000371, | ||
| 252 | 0x00000379,0x00000374,0x00060050,0x0000000f,0x0000043a,0x00000416,0x00000418,0x0000041a, | ||
| 253 | 0x0008000c,0x0000000f,0x0000034c,0x00000001,0x0000002b,0x0000043a,0x00000061,0x00000400, | ||
| 254 | 0x000200f9,0x0000034d,0x000200f8,0x0000034d,0x000700f5,0x0000000f,0x0000041c,0x00000337, | ||
| 255 | 0x00000219,0x0000034c,0x0000037a,0x00050051,0x00000006,0x00000227,0x0000041c,0x00000000, | ||
| 256 | 0x00050051,0x00000006,0x00000229,0x0000041c,0x00000001,0x00050051,0x00000006,0x0000022b, | ||
| 257 | 0x0000041c,0x00000002,0x00050051,0x00000006,0x0000022d,0x00000415,0x00000003,0x00070050, | ||
| 258 | 0x00000018,0x00000401,0x00000227,0x00000229,0x0000022b,0x0000022d,0x000200f9,0x00000232, | ||
| 259 | 0x000200f8,0x0000022f,0x0008004f,0x0000000f,0x00000380,0x00000415,0x00000415,0x00000000, | ||
| 260 | 0x00000001,0x00000002,0x00050041,0x0000007a,0x00000381,0x00000077,0x000000f2,0x0004003d, | ||
| 261 | 0x00000006,0x00000382,0x00000381,0x0005008e,0x0000000f,0x00000383,0x00000380,0x00000382, | ||
| 262 | 0x00050051,0x00000006,0x00000385,0x00000383,0x00000000,0x00050051,0x00000006,0x00000387, | ||
| 263 | 0x00000383,0x00000001,0x00050051,0x00000006,0x00000389,0x00000383,0x00000002,0x00050051, | ||
| 264 | 0x00000006,0x0000038b,0x00000415,0x00000003,0x00070050,0x00000018,0x000003fc,0x00000385, | ||
| 265 | 0x00000387,0x00000389,0x0000038b,0x000200f9,0x00000232,0x000200f8,0x00000232,0x000700f5, | ||
| 266 | 0x00000018,0x00000439,0x00000401,0x0000034d,0x000003fc,0x0000022f,0x000200f9,0x00000233, | ||
| 267 | 0x000200f8,0x00000233,0x000700f5,0x00000018,0x00000438,0x00000405,0x000002ff,0x00000439, | ||
| 268 | 0x00000232,0x000200f9,0x00000234,0x000200f8,0x00000234,0x000700f5,0x00000018,0x00000437, | ||
| 269 | 0x00000408,0x000002ad,0x00000438,0x00000233,0x00050085,0x00000018,0x00000238,0x00000437, | ||
| 270 | 0x000001bf,0x0003003e,0x000001c2,0x00000238,0x000100fd,0x00010038 | ||
| 271 | }; | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Advanced.hlsl b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Advanced.hlsl new file mode 100644 index 0000000..f3a0a61 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Advanced.hlsl | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | |||
| 2 | #include "VULKAN_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 5 | { | ||
| 6 | return AdvancedPixelShader(input); | ||
| 7 | } | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Colors.h b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Colors.h new file mode 100644 index 0000000..bd03f72 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Colors.h | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | // 1113.1.1 | ||
| 2 | #pragma once | ||
| 3 | static const uint32_t VULKAN_PixelShader_Colors[] = { | ||
| 4 | 0x07230203,0x00010000,0x0008000b,0x000000a1,0x00000000,0x00020011,0x00000001,0x0006000b, | ||
| 5 | 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, | ||
| 6 | 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000048,0x0000004c,0x00030010, | ||
| 7 | 0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,0x6e69616d, | ||
| 8 | 0x00000000,0x00050005,0x00000018,0x736e6f43,0x746e6174,0x00000073,0x00070006,0x00000018, | ||
| 9 | 0x00000000,0x47526373,0x756f5f42,0x74757074,0x00000000,0x00060006,0x00000018,0x00000001, | ||
| 10 | 0x75706e69,0x79745f74,0x00006570,0x00060006,0x00000018,0x00000002,0x6f6c6f63,0x63735f72, | ||
| 11 | 0x00656c61,0x00060006,0x00000018,0x00000003,0x73756e75,0x705f6465,0x00306461,0x00070006, | ||
| 12 | 0x00000018,0x00000004,0x656e6f74,0x5f70616d,0x6874656d,0x0000646f,0x00070006,0x00000018, | ||
| 13 | 0x00000005,0x656e6f74,0x5f70616d,0x74636166,0x0031726f,0x00070006,0x00000018,0x00000006, | ||
| 14 | 0x656e6f74,0x5f70616d,0x74636166,0x0032726f,0x00070006,0x00000018,0x00000007,0x5f726473, | ||
| 15 | 0x74696877,0x6f705f65,0x00746e69,0x00030005,0x0000001a,0x00000000,0x00050005,0x00000048, | ||
| 16 | 0x75706e69,0x6f632e74,0x00726f6c,0x00070005,0x0000004c,0x746e6540,0x6f507972,0x4f746e69, | ||
| 17 | 0x75707475,0x00000074,0x00050048,0x00000018,0x00000000,0x00000023,0x00000000,0x00050048, | ||
| 18 | 0x00000018,0x00000001,0x00000023,0x00000004,0x00050048,0x00000018,0x00000002,0x00000023, | ||
| 19 | 0x00000008,0x00050048,0x00000018,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000018, | ||
| 20 | 0x00000004,0x00000023,0x00000010,0x00050048,0x00000018,0x00000005,0x00000023,0x00000014, | ||
| 21 | 0x00050048,0x00000018,0x00000006,0x00000023,0x00000018,0x00050048,0x00000018,0x00000007, | ||
| 22 | 0x00000023,0x0000001c,0x00030047,0x00000018,0x00000002,0x00040047,0x0000001a,0x00000022, | ||
| 23 | 0x00000000,0x00040047,0x0000001a,0x00000021,0x00000001,0x00040047,0x00000048,0x0000001e, | ||
| 24 | 0x00000001,0x00040047,0x0000004c,0x0000001e,0x00000000,0x00020013,0x00000002,0x00030021, | ||
| 25 | 0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006, | ||
| 26 | 0x00000004,0x00040017,0x00000015,0x00000006,0x00000003,0x000a001e,0x00000018,0x00000006, | ||
| 27 | 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020, | ||
| 28 | 0x00000019,0x00000002,0x00000018,0x0004003b,0x00000019,0x0000001a,0x00000002,0x00040015, | ||
| 29 | 0x0000001b,0x00000020,0x00000001,0x0004002b,0x0000001b,0x0000001c,0x00000002,0x00040020, | ||
| 30 | 0x0000001d,0x00000002,0x00000006,0x0004002b,0x00000006,0x00000033,0x3f800000,0x00040020, | ||
| 31 | 0x0000003e,0x00000001,0x00000007,0x0004003b,0x0000003e,0x00000048,0x00000001,0x00040020, | ||
| 32 | 0x0000004b,0x00000003,0x00000007,0x0004003b,0x0000004b,0x0000004c,0x00000003,0x0006002c, | ||
| 33 | 0x00000015,0x0000009f,0x00000033,0x00000033,0x00000033,0x00050036,0x00000002,0x00000004, | ||
| 34 | 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000007,0x00000049,0x00000048, | ||
| 35 | 0x00050041,0x0000001d,0x0000007e,0x0000001a,0x0000001c,0x0004003d,0x00000006,0x0000007f, | ||
| 36 | 0x0000007e,0x0005008e,0x00000015,0x00000080,0x0000009f,0x0000007f,0x00050051,0x00000006, | ||
| 37 | 0x00000082,0x00000080,0x00000000,0x00050051,0x00000006,0x00000084,0x00000080,0x00000001, | ||
| 38 | 0x00050051,0x00000006,0x00000086,0x00000080,0x00000002,0x00070050,0x00000007,0x000000a0, | ||
| 39 | 0x00000082,0x00000084,0x00000086,0x00000033,0x00050085,0x00000007,0x00000078,0x000000a0, | ||
| 40 | 0x00000049,0x0003003e,0x0000004c,0x00000078,0x000100fd,0x00010038 | ||
| 41 | }; | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Colors.hlsl b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Colors.hlsl new file mode 100644 index 0000000..b754dde --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Colors.hlsl | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | |||
| 2 | #include "VULKAN_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | float4 main(PixelShaderInput input) : SV_TARGET0 | ||
| 5 | { | ||
| 6 | return GetOutputColor(1.0) * input.color; | ||
| 7 | } | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Common.hlsli b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Common.hlsli new file mode 100644 index 0000000..04ca409 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Common.hlsli | |||
| @@ -0,0 +1,181 @@ | |||
| 1 | SamplerState sampler0 : register(s0); | ||
| 2 | Texture2D texture0 : register(t0); | ||
| 3 | |||
| 4 | struct PixelShaderInput | ||
| 5 | { | ||
| 6 | float4 pos : SV_POSITION; | ||
| 7 | float2 tex : TEXCOORD0; | ||
| 8 | float4 color : COLOR0; | ||
| 9 | }; | ||
| 10 | |||
| 11 | // These should mirror the definitions in SDL_render_vulkan.c | ||
| 12 | static const float TONEMAP_NONE = 0; | ||
| 13 | static const float TONEMAP_LINEAR = 1; | ||
| 14 | static const float TONEMAP_CHROME = 2; | ||
| 15 | |||
| 16 | static const float INPUTTYPE_UNSPECIFIED = 0; | ||
| 17 | static const float INPUTTYPE_SRGB = 1; | ||
| 18 | static const float INPUTTYPE_SCRGB = 2; | ||
| 19 | static const float INPUTTYPE_HDR10 = 3; | ||
| 20 | |||
| 21 | cbuffer Constants : register(b1) | ||
| 22 | { | ||
| 23 | float scRGB_output; | ||
| 24 | float input_type; | ||
| 25 | float color_scale; | ||
| 26 | float unused_pad0; | ||
| 27 | |||
| 28 | float tonemap_method; | ||
| 29 | float tonemap_factor1; | ||
| 30 | float tonemap_factor2; | ||
| 31 | float sdr_white_point; | ||
| 32 | }; | ||
| 33 | |||
| 34 | static const float3x3 mat709to2020 = { | ||
| 35 | { 0.627404, 0.329283, 0.043313 }, | ||
| 36 | { 0.069097, 0.919541, 0.011362 }, | ||
| 37 | { 0.016391, 0.088013, 0.895595 } | ||
| 38 | }; | ||
| 39 | |||
| 40 | static const float3x3 mat2020to709 = { | ||
| 41 | { 1.660496, -0.587656, -0.072840 }, | ||
| 42 | { -0.124547, 1.132895, -0.008348 }, | ||
| 43 | { -0.018154, -0.100597, 1.118751 } | ||
| 44 | }; | ||
| 45 | |||
| 46 | float sRGBtoLinear(float v) | ||
| 47 | { | ||
| 48 | if (v <= 0.04045) { | ||
| 49 | v = (v / 12.92); | ||
| 50 | } else { | ||
| 51 | v = pow(abs(v + 0.055) / 1.055, 2.4); | ||
| 52 | } | ||
| 53 | return v; | ||
| 54 | } | ||
| 55 | |||
| 56 | float sRGBfromLinear(float v) | ||
| 57 | { | ||
| 58 | if (v <= 0.0031308) { | ||
| 59 | v = (v * 12.92); | ||
| 60 | } else { | ||
| 61 | v = (pow(abs(v), 1.0 / 2.4) * 1.055 - 0.055); | ||
| 62 | } | ||
| 63 | return v; | ||
| 64 | } | ||
| 65 | |||
| 66 | float3 PQtoLinear(float3 v) | ||
| 67 | { | ||
| 68 | const float c1 = 0.8359375; | ||
| 69 | const float c2 = 18.8515625; | ||
| 70 | const float c3 = 18.6875; | ||
| 71 | const float oo_m1 = 1.0 / 0.1593017578125; | ||
| 72 | const float oo_m2 = 1.0 / 78.84375; | ||
| 73 | |||
| 74 | float3 num = max(pow(abs(v), oo_m2) - c1, 0.0); | ||
| 75 | float3 den = c2 - c3 * pow(abs(v), oo_m2); | ||
| 76 | return (10000.0 * pow(abs(num / den), oo_m1) / sdr_white_point); | ||
| 77 | } | ||
| 78 | |||
| 79 | float3 ApplyTonemap(float3 v) | ||
| 80 | { | ||
| 81 | if (tonemap_method == TONEMAP_LINEAR) { | ||
| 82 | v *= tonemap_factor1; | ||
| 83 | } else if (tonemap_method == TONEMAP_CHROME) { | ||
| 84 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 85 | // Convert to BT.2020 colorspace for tone mapping | ||
| 86 | v = mul(mat709to2020, v); | ||
| 87 | } | ||
| 88 | |||
| 89 | float vmax = max(v.r, max(v.g, v.b)); | ||
| 90 | if (vmax > 0.0) { | ||
| 91 | float scale = (1.0 + tonemap_factor1 * vmax) / (1.0 + tonemap_factor2 * vmax); | ||
| 92 | v *= scale; | ||
| 93 | } | ||
| 94 | |||
| 95 | if (input_type == INPUTTYPE_SCRGB) { | ||
| 96 | // Convert to BT.709 colorspace after tone mapping | ||
| 97 | v = mul(mat2020to709, v); | ||
| 98 | } | ||
| 99 | } | ||
| 100 | return v; | ||
| 101 | } | ||
| 102 | |||
| 103 | float4 GetInputColor(PixelShaderInput input) | ||
| 104 | { | ||
| 105 | float4 rgba; | ||
| 106 | |||
| 107 | rgba = texture0.Sample(sampler0, input.tex).rgba; | ||
| 108 | |||
| 109 | return rgba; | ||
| 110 | } | ||
| 111 | |||
| 112 | float4 GetOutputColor(float4 rgba) | ||
| 113 | { | ||
| 114 | float4 output; | ||
| 115 | |||
| 116 | output.rgb = rgba.rgb * color_scale; | ||
| 117 | output.a = rgba.a; | ||
| 118 | |||
| 119 | return output; | ||
| 120 | } | ||
| 121 | |||
| 122 | float3 GetOutputColorFromSRGB(float3 rgb) | ||
| 123 | { | ||
| 124 | float3 output; | ||
| 125 | |||
| 126 | if (scRGB_output) { | ||
| 127 | rgb.r = sRGBtoLinear(rgb.r); | ||
| 128 | rgb.g = sRGBtoLinear(rgb.g); | ||
| 129 | rgb.b = sRGBtoLinear(rgb.b); | ||
| 130 | } | ||
| 131 | |||
| 132 | output.rgb = rgb * color_scale; | ||
| 133 | |||
| 134 | return output; | ||
| 135 | } | ||
| 136 | |||
| 137 | float3 GetOutputColorFromLinear(float3 rgb) | ||
| 138 | { | ||
| 139 | float3 output; | ||
| 140 | |||
| 141 | output.rgb = rgb * color_scale; | ||
| 142 | |||
| 143 | if (!scRGB_output) { | ||
| 144 | output.r = sRGBfromLinear(output.r); | ||
| 145 | output.g = sRGBfromLinear(output.g); | ||
| 146 | output.b = sRGBfromLinear(output.b); | ||
| 147 | output.rgb = saturate(output.rgb); | ||
| 148 | } | ||
| 149 | |||
| 150 | return output; | ||
| 151 | } | ||
| 152 | |||
| 153 | float4 AdvancedPixelShader(PixelShaderInput input) | ||
| 154 | { | ||
| 155 | float4 rgba = GetInputColor(input); | ||
| 156 | float4 output; | ||
| 157 | |||
| 158 | if (input_type == INPUTTYPE_HDR10) { | ||
| 159 | rgba.rgb = PQtoLinear(rgba.rgb); | ||
| 160 | } | ||
| 161 | |||
| 162 | if (tonemap_method != TONEMAP_NONE) { | ||
| 163 | rgba.rgb = ApplyTonemap(rgba.rgb); | ||
| 164 | } | ||
| 165 | |||
| 166 | if (input_type == INPUTTYPE_SRGB) { | ||
| 167 | output.rgb = GetOutputColorFromSRGB(rgba.rgb); | ||
| 168 | output.a = rgba.a; | ||
| 169 | } else if (input_type == INPUTTYPE_SCRGB) { | ||
| 170 | output.rgb = GetOutputColorFromLinear(rgba.rgb); | ||
| 171 | output.a = rgba.a; | ||
| 172 | } else if (input_type == INPUTTYPE_HDR10) { | ||
| 173 | rgba.rgb = mul(mat2020to709, rgba.rgb); | ||
| 174 | output.rgb = GetOutputColorFromLinear(rgba.rgb); | ||
| 175 | output.a = rgba.a; | ||
| 176 | } else { | ||
| 177 | output = GetOutputColor(rgba); | ||
| 178 | } | ||
| 179 | |||
| 180 | return output * input.color; | ||
| 181 | } | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Textures.h b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Textures.h new file mode 100644 index 0000000..3b49aab --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Textures.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | // 1113.1.1 | ||
| 2 | #pragma once | ||
| 3 | static const uint32_t VULKAN_PixelShader_Textures[] = { | ||
| 4 | 0x07230203,0x00010000,0x0008000b,0x000000a8,0x00000000,0x00020011,0x00000001,0x0006000b, | ||
| 5 | 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, | ||
| 6 | 0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000004b,0x0000004e,0x00000052, | ||
| 7 | 0x00030010,0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004, | ||
| 8 | 0x6e69616d,0x00000000,0x00050005,0x00000018,0x736e6f43,0x746e6174,0x00000073,0x00070006, | ||
| 9 | 0x00000018,0x00000000,0x47526373,0x756f5f42,0x74757074,0x00000000,0x00060006,0x00000018, | ||
| 10 | 0x00000001,0x75706e69,0x79745f74,0x00006570,0x00060006,0x00000018,0x00000002,0x6f6c6f63, | ||
| 11 | 0x63735f72,0x00656c61,0x00060006,0x00000018,0x00000003,0x73756e75,0x705f6465,0x00306461, | ||
| 12 | 0x00070006,0x00000018,0x00000004,0x656e6f74,0x5f70616d,0x6874656d,0x0000646f,0x00070006, | ||
| 13 | 0x00000018,0x00000005,0x656e6f74,0x5f70616d,0x74636166,0x0031726f,0x00070006,0x00000018, | ||
| 14 | 0x00000006,0x656e6f74,0x5f70616d,0x74636166,0x0032726f,0x00070006,0x00000018,0x00000007, | ||
| 15 | 0x5f726473,0x74696877,0x6f705f65,0x00746e69,0x00030005,0x0000001a,0x00000000,0x00050005, | ||
| 16 | 0x00000036,0x74786574,0x30657275,0x00000000,0x00050005,0x0000004b,0x75706e69,0x65742e74, | ||
| 17 | 0x00000078,0x00050005,0x0000004e,0x75706e69,0x6f632e74,0x00726f6c,0x00070005,0x00000052, | ||
| 18 | 0x746e6540,0x6f507972,0x4f746e69,0x75707475,0x00000074,0x00050048,0x00000018,0x00000000, | ||
| 19 | 0x00000023,0x00000000,0x00050048,0x00000018,0x00000001,0x00000023,0x00000004,0x00050048, | ||
| 20 | 0x00000018,0x00000002,0x00000023,0x00000008,0x00050048,0x00000018,0x00000003,0x00000023, | ||
| 21 | 0x0000000c,0x00050048,0x00000018,0x00000004,0x00000023,0x00000010,0x00050048,0x00000018, | ||
| 22 | 0x00000005,0x00000023,0x00000014,0x00050048,0x00000018,0x00000006,0x00000023,0x00000018, | ||
| 23 | 0x00050048,0x00000018,0x00000007,0x00000023,0x0000001c,0x00030047,0x00000018,0x00000002, | ||
| 24 | 0x00040047,0x0000001a,0x00000022,0x00000000,0x00040047,0x0000001a,0x00000021,0x00000001, | ||
| 25 | 0x00040047,0x00000036,0x00000022,0x00000000,0x00040047,0x00000036,0x00000021,0x00000000, | ||
| 26 | 0x00040047,0x0000004b,0x0000001e,0x00000000,0x00040047,0x0000004e,0x0000001e,0x00000001, | ||
| 27 | 0x00040047,0x00000052,0x0000001e,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003, | ||
| 28 | 0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004, | ||
| 29 | 0x00040017,0x0000000d,0x00000006,0x00000002,0x00040017,0x00000015,0x00000006,0x00000003, | ||
| 30 | 0x000a001e,0x00000018,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, | ||
| 31 | 0x00000006,0x00000006,0x00040020,0x00000019,0x00000002,0x00000018,0x0004003b,0x00000019, | ||
| 32 | 0x0000001a,0x00000002,0x00040015,0x0000001b,0x00000020,0x00000001,0x0004002b,0x0000001b, | ||
| 33 | 0x0000001c,0x00000002,0x00040020,0x0000001d,0x00000002,0x00000006,0x00090019,0x00000033, | ||
| 34 | 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b, | ||
| 35 | 0x00000034,0x00000033,0x00040020,0x00000035,0x00000000,0x00000034,0x0004003b,0x00000035, | ||
| 36 | 0x00000036,0x00000000,0x00040020,0x00000046,0x00000001,0x00000007,0x00040020,0x0000004a, | ||
| 37 | 0x00000001,0x0000000d,0x0004003b,0x0000004a,0x0000004b,0x00000001,0x0004003b,0x00000046, | ||
| 38 | 0x0000004e,0x00000001,0x00040020,0x00000051,0x00000003,0x00000007,0x0004003b,0x00000051, | ||
| 39 | 0x00000052,0x00000003,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, | ||
| 40 | 0x00000005,0x0004003d,0x0000000d,0x0000004c,0x0000004b,0x0004003d,0x00000007,0x0000004f, | ||
| 41 | 0x0000004e,0x0004003d,0x00000034,0x00000078,0x00000036,0x00050057,0x00000007,0x0000007b, | ||
| 42 | 0x00000078,0x0000004c,0x0008004f,0x00000015,0x00000084,0x0000007b,0x0000007b,0x00000000, | ||
| 43 | 0x00000001,0x00000002,0x00050041,0x0000001d,0x00000085,0x0000001a,0x0000001c,0x0004003d, | ||
| 44 | 0x00000006,0x00000086,0x00000085,0x0005008e,0x00000015,0x00000087,0x00000084,0x00000086, | ||
| 45 | 0x00050051,0x00000006,0x00000089,0x00000087,0x00000000,0x00050051,0x00000006,0x0000008b, | ||
| 46 | 0x00000087,0x00000001,0x00050051,0x00000006,0x0000008d,0x00000087,0x00000002,0x00050051, | ||
| 47 | 0x00000006,0x0000008f,0x0000007b,0x00000003,0x00070050,0x00000007,0x000000a7,0x00000089, | ||
| 48 | 0x0000008b,0x0000008d,0x0000008f,0x00050085,0x00000007,0x0000007f,0x000000a7,0x0000004f, | ||
| 49 | 0x0003003e,0x00000052,0x0000007f,0x000100fd,0x00010038 | ||
| 50 | }; | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Textures.hlsl b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Textures.hlsl new file mode 100644 index 0000000..e665291 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_PixelShader_Textures.hlsl | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | |||
| 2 | #include "VULKAN_PixelShader_Common.hlsli" | ||
| 3 | |||
| 4 | float4 main(PixelShaderInput input) : SV_TARGET | ||
| 5 | { | ||
| 6 | return GetOutputColor(texture0.Sample(sampler0, input.tex)) * input.color; | ||
| 7 | } | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_VertexShader.h b/SDL-3.2.8/src/render/vulkan/VULKAN_VertexShader.h new file mode 100644 index 0000000..76c1c7b --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_VertexShader.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | // 1113.1.1 | ||
| 2 | #pragma once | ||
| 3 | static const uint32_t VULKAN_VertexShader[] = { | ||
| 4 | 0x07230203,0x00010000,0x0008000b,0x000000af,0x00000000,0x00020011,0x00000001,0x0006000b, | ||
| 5 | 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, | ||
| 6 | 0x000c000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000003f,0x00000043,0x00000047, | ||
| 7 | 0x00000058,0x0000005b,0x0000005e,0x00000062,0x00030003,0x00000005,0x000001f4,0x00040005, | ||
| 8 | 0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000001e,0x68737570,0x736e6f43,0x746e6174, | ||
| 9 | 0x00000073,0x00050006,0x0000001e,0x00000000,0x65646f6d,0x0000006c,0x00080006,0x0000001e, | ||
| 10 | 0x00000001,0x6a6f7270,0x69746365,0x6e416e6f,0x65695664,0x00000077,0x00060005,0x00000020, | ||
| 11 | 0x68737570,0x736e6f43,0x746e6174,0x00000073,0x00050005,0x0000003f,0x75706e69,0x6f702e74, | ||
| 12 | 0x00000073,0x00050005,0x00000043,0x75706e69,0x65742e74,0x00000078,0x00050005,0x00000047, | ||
| 13 | 0x75706e69,0x6f632e74,0x00726f6c,0x00080005,0x00000058,0x746e6540,0x6f507972,0x4f746e69, | ||
| 14 | 0x75707475,0x6f702e74,0x00000073,0x00080005,0x0000005b,0x746e6540,0x6f507972,0x4f746e69, | ||
| 15 | 0x75707475,0x65742e74,0x00000078,0x00080005,0x0000005e,0x746e6540,0x6f507972,0x4f746e69, | ||
| 16 | 0x75707475,0x6f632e74,0x00726f6c,0x00090005,0x00000062,0x746e6540,0x6f507972,0x4f746e69, | ||
| 17 | 0x75707475,0x6f702e74,0x53746e69,0x00657a69,0x00040048,0x0000001e,0x00000000,0x00000005, | ||
| 18 | 0x00050048,0x0000001e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000000, | ||
| 19 | 0x00000007,0x00000010,0x00040048,0x0000001e,0x00000001,0x00000005,0x00050048,0x0000001e, | ||
| 20 | 0x00000001,0x00000023,0x00000040,0x00050048,0x0000001e,0x00000001,0x00000007,0x00000010, | ||
| 21 | 0x00030047,0x0000001e,0x00000002,0x00040047,0x0000003f,0x0000001e,0x00000000,0x00040047, | ||
| 22 | 0x00000043,0x0000001e,0x00000001,0x00040047,0x00000047,0x0000001e,0x00000002,0x00040047, | ||
| 23 | 0x00000058,0x0000000b,0x00000000,0x00040047,0x0000005b,0x0000001e,0x00000000,0x00040047, | ||
| 24 | 0x0000005e,0x0000001e,0x00000001,0x00040047,0x00000062,0x0000000b,0x00000001,0x00020013, | ||
| 25 | 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017, | ||
| 26 | 0x00000007,0x00000006,0x00000003,0x00040017,0x00000008,0x00000006,0x00000002,0x00040017, | ||
| 27 | 0x00000009,0x00000006,0x00000004,0x00040015,0x00000013,0x00000020,0x00000001,0x0004002b, | ||
| 28 | 0x00000013,0x00000014,0x00000000,0x0004002b,0x00000006,0x00000018,0x3f800000,0x00040018, | ||
| 29 | 0x0000001d,0x00000009,0x00000004,0x0004001e,0x0000001e,0x0000001d,0x0000001d,0x00040020, | ||
| 30 | 0x0000001f,0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020, | ||
| 31 | 0x00000021,0x00000009,0x0000001d,0x0004002b,0x00000013,0x00000026,0x00000001,0x00040020, | ||
| 32 | 0x0000003e,0x00000001,0x00000007,0x0004003b,0x0000003e,0x0000003f,0x00000001,0x00040020, | ||
| 33 | 0x00000042,0x00000001,0x00000008,0x0004003b,0x00000042,0x00000043,0x00000001,0x00040020, | ||
| 34 | 0x00000046,0x00000001,0x00000009,0x0004003b,0x00000046,0x00000047,0x00000001,0x00040020, | ||
| 35 | 0x00000057,0x00000003,0x00000009,0x0004003b,0x00000057,0x00000058,0x00000003,0x00040020, | ||
| 36 | 0x0000005a,0x00000003,0x00000008,0x0004003b,0x0000005a,0x0000005b,0x00000003,0x0004003b, | ||
| 37 | 0x00000057,0x0000005e,0x00000003,0x00040020,0x00000061,0x00000003,0x00000006,0x0004003b, | ||
| 38 | 0x00000061,0x00000062,0x00000003,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, | ||
| 39 | 0x000200f8,0x00000005,0x0004003d,0x00000007,0x00000040,0x0000003f,0x0004003d,0x00000008, | ||
| 40 | 0x00000044,0x00000043,0x0004003d,0x00000009,0x00000048,0x00000047,0x00050051,0x00000006, | ||
| 41 | 0x0000006b,0x00000040,0x00000000,0x00050051,0x00000006,0x0000006c,0x00000040,0x00000001, | ||
| 42 | 0x00050051,0x00000006,0x0000006d,0x00000040,0x00000002,0x00070050,0x00000009,0x0000006e, | ||
| 43 | 0x0000006b,0x0000006c,0x0000006d,0x00000018,0x00050041,0x00000021,0x0000006f,0x00000020, | ||
| 44 | 0x00000014,0x0004003d,0x0000001d,0x00000070,0x0000006f,0x00050091,0x00000009,0x00000072, | ||
| 45 | 0x00000070,0x0000006e,0x00050041,0x00000021,0x00000073,0x00000020,0x00000026,0x0004003d, | ||
| 46 | 0x0000001d,0x00000074,0x00000073,0x00050091,0x00000009,0x00000076,0x00000074,0x00000072, | ||
| 47 | 0x00050051,0x00000006,0x00000054,0x00000076,0x00000001,0x0004007f,0x00000006,0x00000055, | ||
| 48 | 0x00000054,0x00060052,0x00000009,0x000000ae,0x00000055,0x00000076,0x00000001,0x0003003e, | ||
| 49 | 0x00000058,0x000000ae,0x0003003e,0x0000005b,0x00000044,0x0003003e,0x0000005e,0x00000048, | ||
| 50 | 0x0003003e,0x00000062,0x00000018,0x000100fd,0x00010038 | ||
| 51 | }; | ||
diff --git a/SDL-3.2.8/src/render/vulkan/VULKAN_VertexShader.hlsl b/SDL-3.2.8/src/render/vulkan/VULKAN_VertexShader.hlsl new file mode 100644 index 0000000..373a179 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/VULKAN_VertexShader.hlsl | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | #pragma pack_matrix( row_major ) | ||
| 2 | |||
| 3 | struct VertexShaderConstants | ||
| 4 | { | ||
| 5 | matrix model; | ||
| 6 | matrix projectionAndView; | ||
| 7 | }; | ||
| 8 | [[vk::push_constant]] | ||
| 9 | ConstantBuffer<VertexShaderConstants> pushConstants; | ||
| 10 | |||
| 11 | struct VertexShaderInput | ||
| 12 | { | ||
| 13 | float3 pos : POSITION; | ||
| 14 | float2 tex : TEXCOORD0; | ||
| 15 | float4 color : COLOR0; | ||
| 16 | }; | ||
| 17 | |||
| 18 | struct VertexShaderOutput | ||
| 19 | { | ||
| 20 | float4 pos : SV_POSITION; | ||
| 21 | float2 tex : TEXCOORD0; | ||
| 22 | float4 color : COLOR0; | ||
| 23 | [[vk::builtin("PointSize")]] float pointSize : SV_PointSize; | ||
| 24 | }; | ||
| 25 | |||
| 26 | VertexShaderOutput mainColor(VertexShaderInput input) | ||
| 27 | { | ||
| 28 | VertexShaderOutput output; | ||
| 29 | float4 pos = float4(input.pos, 1.0f); | ||
| 30 | |||
| 31 | // Transform the vertex position into projected space. | ||
| 32 | pos = mul(pos, pushConstants.model); | ||
| 33 | pos = mul(pos, pushConstants.projectionAndView); | ||
| 34 | output.pos = pos; | ||
| 35 | |||
| 36 | // Pass through texture coordinates and color values without transformation | ||
| 37 | output.tex = input.tex; | ||
| 38 | output.color = input.color; | ||
| 39 | |||
| 40 | // Always output pointSize so that this VS can be used with points | ||
| 41 | output.pointSize = 1.0; | ||
| 42 | |||
| 43 | return output; | ||
| 44 | } | ||
| 45 | |||
diff --git a/SDL-3.2.8/src/render/vulkan/compile_shaders.bat b/SDL-3.2.8/src/render/vulkan/compile_shaders.bat new file mode 100644 index 0000000..093de82 --- /dev/null +++ b/SDL-3.2.8/src/render/vulkan/compile_shaders.bat | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | glslangValidator -D --sep main -e main -S frag --target-env vulkan1.0 --auto-sampled-textures --vn VULKAN_PixelShader_Colors -o VULKAN_PixelShader_Colors.h VULKAN_PixelShader_Colors.hlsl | ||
| 2 | glslangValidator -D --sep main -e main -S frag --target-env vulkan1.0 --auto-sampled-textures --vn VULKAN_PixelShader_Textures -o VULKAN_PixelShader_Textures.h VULKAN_PixelShader_Textures.hlsl | ||
| 3 | glslangValidator -D --sep main -e main -S frag --target-env vulkan1.0 --auto-sampled-textures --vn VULKAN_PixelShader_Advanced -o VULKAN_PixelShader_Advanced.h VULKAN_PixelShader_Advanced.hlsl | ||
| 4 | |||
| 5 | glslangValidator -D --sep mainColor -e main -S vert --iy --target-env vulkan1.0 --vn VULKAN_VertexShader -o VULKAN_VertexShader.h VULKAN_VertexShader.hlsl | ||
