Skip to content

Instantly share code, notes, and snippets.

@Mon-Ouie
Last active March 30, 2024 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Mon-Ouie/dcf09cdfad03d49fd83ba9ca07321da2 to your computer and use it in GitHub Desktop.
Save Mon-Ouie/dcf09cdfad03d49fd83ba9ca07321da2 to your computer and use it in GitHub Desktop.
Thread 1 "vulkan_bug" received signal SIGSEGV, Segmentation fault.
0x00007fffef6fba69 in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
(gdb) bt
#0 0x00007fffef6fba69 in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
#1 0x00007fffef70305f in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
#2 0x00007fffef703363 in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
#3 0x00007fffef984da7 in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
#4 0x00007fffef738db0 in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
#5 0x00007fffef72f96c in ?? () from /usr/lib/libnvidia-glvkspirv.so.550.67
#6 0x00007fffef72f9e6 in _nv002nvvm () from /usr/lib/libnvidia-glvkspirv.so.550.67
#7 0x00007ffff684c108 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#8 0x00007ffff6913c44 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#9 0x00007ffff684bc51 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#10 0x00007ffff6933e14 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#11 0x00007ffff684e4f6 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#12 0x00007ffff6864040 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#13 0x00007ffff6841888 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#14 0x00007ffff671d868 in ?? () from /usr/lib/libnvidia-glcore.so.550.67
#15 0x00007ffff1c07099 in DispatchCreateGraphicsPipelines (device=0x555557362c80, pipelineCache=0x0,
createInfoCount=1, pCreateInfos=0x7fffffffd740, pAllocator=0x0, pPipelines=0x7fffffffd2f0)
at /usr/src/debug/vulkan-validation-layers/Vulkan-ValidationLayers-vulkan-sdk-1.3.275/layers/layer_chassis_dispatch_manual.cpp:215
#16 0x00007ffff1aacae8 in vulkan_layer_chassis::CreateGraphicsPipelines (device=0x555557362c80,
pipelineCache=0x0, createInfoCount=1, pCreateInfos=0x7fffffffd740, pAllocator=0x0,
pPipelines=0x7fffffffd2f0)
at /usr/src/debug/vulkan-validation-layers/Vulkan-ValidationLayers-vulkan-sdk-1.3.275/layers/vulkan/generated/chassis.cpp:678
#17 0x0000555555555c8f in main (argc=1, argv=0x7fffffffdb08) at vulkan_bug.c:879
0x7fffef6fba50 call 0x7fffef62f220 <memcmp@plt> │
│ 0x7fffef6fba55 test eax,eax │
│ 0x7fffef6fba57 jne 0x7fffef6fc3b0 │
│ 0x7fffef6fba5d mov BYTE PTR [rsp],0x1 │
│ 0x7fffef6fba61 mov rdx,QWORD PTR [rsp+0x160] │
│ >0x7fffef6fba69 mov eax,DWORD PTR [rdx+0x8] │
│ 0x7fffef6fba6c test eax,0x2001 │
│ 0x7fffef6fba71 je 0x7fffef6fc448
$ gcc vulkan_bug.c -o vulkan_bug -lvulkan -DCOMPILE_WORKING_SHADER && ./vulkan_bug
# no output, as expected
$ gcc vulkan_bug.c -o vulkan_bug -lvulkan && ./vulkan_bug
zsh: segmentation fault (core dumped) ./vulkan_bug
#include <vulkan/vulkan.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
//#define COMPILE_WORKING_SHADER
#define countof(array) (sizeof(array)/sizeof(*(array)))
static bool vk_check(VkResult result, const char *prefix) {
if (result <= 0) return false;
fprintf(stderr, "%sVulkan Error Code: %d\n", prefix, result);
return true;
}
#define XSTRINGIFY(X) #X
#define STRINGIFY(X) XSTRINGIFY(X)
#define VK_CHECK(call) vk_check((call), "[" __FILE__ ":" STRINGIFY(__LINE__) "] " #call ": ")
typedef struct PushConstants {
float model_matrix[16];
int32_t material_id;
} PushConstants;
static uint8_t vertex_shader_code[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0b, 0x33, 0x61, 0x7d,
0x35, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x57, 0x11, 0x00, 0x00,
0x0b, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c,
0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00,
0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x2d, 0x56, 0x45,
0x52, 0x54, 0x45, 0x58, 0x32, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00,
0xa1, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
0xa4, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
0xad, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00,
0xb0, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x10, 0x00, 0x00, 0x00, 0x44, 0x52, 0x41, 0x57, 0x2d, 0x43, 0x4f, 0x4e,
0x53, 0x54, 0x41, 0x4e, 0x54, 0x53, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x4d, 0x41,
0x54, 0x52, 0x49, 0x58, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34, 0x20, 0x34, 0x29, 0x00, 0x00,
0x05, 0x00, 0x09, 0x00, 0x12, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53,
0x4c, 0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45,
0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34, 0x29, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, 0x53, 0x49, 0x4e, 0x47,
0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x28, 0x53, 0x49, 0x47,
0x4e, 0x45, 0x44, 0x2d, 0x42, 0x59, 0x54, 0x45, 0x20, 0x33, 0x32, 0x29,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00,
0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x00, 0x05, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x2d, 0x44,
0x41, 0x54, 0x41, 0x00, 0x05, 0x00, 0x09, 0x00, 0x44, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49,
0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x33,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x48, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x4d, 0x41, 0x54, 0x52, 0x49, 0x58,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x33, 0x20, 0x33, 0x29, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00,
0x96, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45,
0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f,
0x41, 0x54, 0x20, 0x32, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00,
0xb2, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x42, 0x4c, 0x4f, 0x43,
0x4b, 0x20, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x2d, 0x44, 0x41, 0x54,
0x41, 0x29, 0x20, 0x3a, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x29,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb3, 0x00, 0x00, 0x00,
0x28, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x43, 0x41, 0x4d, 0x45, 0x52,
0x41, 0x2d, 0x44, 0x41, 0x54, 0x41, 0x29, 0x00, 0x05, 0x00, 0x10, 0x00,
0xb4, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x42, 0x4c, 0x4f, 0x43,
0x4b, 0x20, 0x44, 0x52, 0x41, 0x57, 0x2d, 0x43, 0x4f, 0x4e, 0x53, 0x54,
0x41, 0x4e, 0x54, 0x53, 0x29, 0x20, 0x3a, 0x50, 0x55, 0x53, 0x48, 0x2d,
0x43, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x29, 0x00, 0x00, 0x00,
0x05, 0x00, 0x08, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x28, 0x42, 0x4c, 0x4f,
0x43, 0x4b, 0x20, 0x44, 0x52, 0x41, 0x57, 0x2d, 0x43, 0x4f, 0x4e, 0x53,
0x54, 0x41, 0x4e, 0x54, 0x53, 0x29, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00,
0xb6, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x33, 0x29, 0x20, 0x3a, 0x49, 0x4e,
0x50, 0x55, 0x54, 0x29, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00,
0xb7, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x32, 0x29, 0x20, 0x3a, 0x49, 0x4e,
0x50, 0x55, 0x54, 0x29, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x00,
0xb8, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x53, 0x49, 0x47, 0x4e,
0x45, 0x44, 0x2d, 0x42, 0x59, 0x54, 0x45, 0x20, 0x33, 0x32, 0x29, 0x20,
0x3a, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x29, 0x00, 0x05, 0x00, 0x0f, 0x00,
0xb9, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34, 0x29, 0x20, 0x3a, 0x4f, 0x55,
0x54, 0x50, 0x55, 0x54, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00,
0xba, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x33, 0x29, 0x20, 0x3a, 0x4f, 0x55,
0x54, 0x50, 0x55, 0x54, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00,
0xbb, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x32, 0x29, 0x20, 0x3a, 0x4f, 0x55,
0x54, 0x50, 0x55, 0x54, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
0xbc, 0x00, 0x00, 0x00, 0x4e, 0x49, 0x4c, 0x00, 0x05, 0x00, 0x07, 0x00,
0xbd, 0x00, 0x00, 0x00, 0x28, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f,
0x4e, 0x20, 0x4e, 0x49, 0x4c, 0x20, 0x4e, 0x49, 0x4c, 0x29, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x48, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
0xb3, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa0, 0x00, 0x00, 0x00,
0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xa0, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x03, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xa2, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa4, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xa5, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x58, 0x11, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xac, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xad, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xae, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xb1, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x16, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x44, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00,
0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xb3, 0x00, 0x00, 0x00,
0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb2, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00,
0xb5, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xb4, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb7, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xba, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xbb, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
0x13, 0x00, 0x02, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
0xbd, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x29, 0x00, 0x03, 0x00,
0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
0x14, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00,
0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xb2, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb6, 0x00, 0x00, 0x00,
0xa2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xb6, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb8, 0x00, 0x00, 0x00,
0xa5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xb9, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xba, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xba, 0x00, 0x00, 0x00,
0xae, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xba, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xba, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xbb, 0x00, 0x00, 0x00,
0xb1, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
0x12, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
0x75, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
0x36, 0x00, 0x05, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
0xbe, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xb3, 0x00, 0x00, 0x00,
0xbf, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x10, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x44, 0x00, 0x00, 0x00,
0xa8, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
0x44, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00,
0xa4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
0xab, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x11, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00,
0xdc, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0xa7, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
0xdd, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x02, 0x00, 0xde, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x11, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xe6, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x02, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x11, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xe6, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x02, 0x00, 0xe6, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
0x11, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
0xde, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00,
0xf7, 0x00, 0x03, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfa, 0x00, 0x04, 0x00, 0xdd, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00,
0xef, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xeb, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00,
0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
0xf3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xef, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00,
0xa6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
0xf3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf3, 0x00, 0x00, 0x00,
0xf5, 0x00, 0x07, 0x00, 0x11, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
0xed, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00,
0xef, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x11, 0x00, 0x00, 0x00,
0xf6, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
0xda, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
0xf7, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
0xf6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00,
0xfa, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x44, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00,
0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x48, 0x00, 0x00, 0x00,
0xfd, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x54, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
0x44, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
0xa9, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x44, 0x00, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00,
0x04, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x06, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
0x3f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00,
0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x12, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
0x08, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00,
0x06, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x44, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00,
0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00,
0x0b, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x50, 0x00, 0x06, 0x00, 0x48, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00,
0x09, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00,
0x54, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
0x0c, 0x01, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00, 0x44, 0x00, 0x00, 0x00,
0x0f, 0x01, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x06, 0x00, 0x44, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
0x3f, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00,
0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x13, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00,
0x17, 0x01, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x50, 0x00, 0x07, 0x00, 0x12, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
0x13, 0x01, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00,
0x6c, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
0x19, 0x01, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00,
0x19, 0x01, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
0x11, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
0x12, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00,
0x34, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00,
0x1f, 0x01, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x91, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00,
0xe7, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
0x12, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
0x2b, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xac, 0x00, 0x00, 0x00,
0x2c, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xad, 0x00, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xae, 0x00, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xaf, 0x00, 0x00, 0x00,
0x1a, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x1f, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb1, 0x00, 0x00, 0x00,
0xaa, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
};
static uint8_t working_vertex_shader_code[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0b, 0x33, 0x61, 0x7d,
0x2d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x57, 0x11, 0x00, 0x00,
0x0b, 0x00, 0x06, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c,
0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00,
0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x2d, 0x56, 0x45,
0x52, 0x54, 0x45, 0x58, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00,
0x9c, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
0x9f, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00,
0xa8, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00,
0xab, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00,
0x16, 0x00, 0x00, 0x00, 0x28, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x2d,
0x42, 0x59, 0x54, 0x45, 0x20, 0x33, 0x32, 0x29, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x42, 0x4f, 0x4f, 0x4c,
0x45, 0x41, 0x4e, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x2d, 0x44, 0x41, 0x54, 0x41, 0x00,
0x05, 0x00, 0x0a, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53,
0x4c, 0x3a, 0x4d, 0x41, 0x54, 0x52, 0x49, 0x58, 0x20, 0x53, 0x49, 0x4e,
0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34, 0x20,
0x34, 0x29, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x21, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49,
0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x22, 0x00, 0x00, 0x00,
0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49,
0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x33,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x44, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x4d, 0x41, 0x54, 0x52, 0x49, 0x58,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x33, 0x20, 0x33, 0x29, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00,
0x92, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45,
0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f,
0x41, 0x54, 0x20, 0x32, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00,
0xad, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x42, 0x4c, 0x4f, 0x43,
0x4b, 0x20, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x2d, 0x44, 0x41, 0x54,
0x41, 0x29, 0x20, 0x3a, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x29,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xae, 0x00, 0x00, 0x00,
0x28, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x43, 0x41, 0x4d, 0x45, 0x52,
0x41, 0x2d, 0x44, 0x41, 0x54, 0x41, 0x29, 0x00, 0x05, 0x00, 0x14, 0x00,
0xaf, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x42, 0x4c, 0x4f, 0x43,
0x4b, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x4d, 0x41, 0x54, 0x52,
0x49, 0x58, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c,
0x4f, 0x41, 0x54, 0x20, 0x34, 0x20, 0x34, 0x29, 0x29, 0x20, 0x3a, 0x50,
0x55, 0x53, 0x48, 0x2d, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x28, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x4d, 0x41, 0x54, 0x52, 0x49, 0x58, 0x20, 0x53, 0x49, 0x4e, 0x47,
0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34, 0x20, 0x34,
0x29, 0x29, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xb1, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50, 0x4f, 0x49, 0x4e, 0x54,
0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x33, 0x29, 0x20, 0x3a, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x29,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xb2, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50, 0x4f, 0x49, 0x4e, 0x54,
0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x32, 0x29, 0x20, 0x3a, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x29,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x00, 0xb3, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50, 0x4f, 0x49, 0x4e, 0x54,
0x45, 0x52, 0x20, 0x28, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x2d, 0x42,
0x59, 0x54, 0x45, 0x20, 0x33, 0x32, 0x29, 0x20, 0x3a, 0x49, 0x4e, 0x50,
0x55, 0x54, 0x29, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xb4, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50, 0x4f, 0x49, 0x4e, 0x54,
0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x34, 0x29, 0x20, 0x3a, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xb5, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50, 0x4f, 0x49, 0x4e, 0x54,
0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x33, 0x29, 0x20, 0x3a, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xb6, 0x00, 0x00, 0x00,
0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50, 0x4f, 0x49, 0x4e, 0x54,
0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45, 0x43,
0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f, 0x41,
0x54, 0x20, 0x32, 0x29, 0x20, 0x3a, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54,
0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xb7, 0x00, 0x00, 0x00,
0x4e, 0x49, 0x4c, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb8, 0x00, 0x00, 0x00,
0x28, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4e, 0x49,
0x4c, 0x20, 0x4e, 0x49, 0x4c, 0x29, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x48, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x47, 0x00, 0x03, 0x00, 0xae, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x9b, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x9e, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x9f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
0x58, 0x11, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa7, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xa8, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xaa, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xab, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xac, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00,
0x18, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00,
0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x07, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00,
0x44, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x92, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xae, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xad, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00,
0xb0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xaf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb2, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xb3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xb6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
0x13, 0x00, 0x02, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
0xb8, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x29, 0x00, 0x03, 0x00,
0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00,
0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xad, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb1, 0x00, 0x00, 0x00,
0x9d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xb1, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb3, 0x00, 0x00, 0x00,
0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xb4, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x00, 0x00,
0xa9, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
0xb5, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb6, 0x00, 0x00, 0x00,
0xac, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
0x21, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
0x71, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
0x36, 0x00, 0x05, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
0xb9, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xae, 0x00, 0x00, 0x00,
0xba, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x1f, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xb0, 0x00, 0x00, 0x00,
0xbb, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x20, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00,
0xa3, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
0x40, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x04, 0x00, 0x92, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00,
0x9f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00,
0xa6, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x05, 0x00,
0x18, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00,
0xd5, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
0xf7, 0x00, 0x03, 0x00, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfa, 0x00, 0x04, 0x00, 0xd5, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00,
0xda, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd6, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00,
0xa1, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
0xde, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xda, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00,
0xa1, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
0xde, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xde, 0x00, 0x00, 0x00,
0xf5, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00,
0xd8, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00,
0xda, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xeb, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xd5, 0x00, 0x00, 0x00,
0xe3, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
0xe3, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00,
0xe5, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf9, 0x00, 0x02, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
0xe7, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00,
0xe9, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0xf9, 0x00, 0x02, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
0xeb, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00,
0xec, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00,
0xe9, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
0x20, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x21, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00,
0xee, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x40, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00,
0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00,
0xf3, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
0xf1, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
0x44, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00,
0xf3, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x54, 0x00, 0x04, 0x00,
0x44, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00,
0x91, 0x00, 0x05, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
0xf6, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
0x40, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
0x45, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00,
0x20, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00,
0xa2, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00,
0xfd, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xfd, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x21, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x40, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0x54, 0x00, 0x04, 0x00, 0x44, 0x00, 0x00, 0x00,
0x05, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
0x40, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
0xa4, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00,
0x08, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0x07, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00,
0x0b, 0x01, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
0xa3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x22, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x21, 0x00, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
0x0f, 0x01, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
0x21, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00,
0x12, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00,
0x3b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00,
0x91, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00,
0x14, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x40, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00,
0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00,
0x23, 0x01, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00,
0x91, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00,
0xec, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0xa7, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0xa8, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0xa9, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0xaa, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0xab, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0xac, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00,
0x38, 0x00, 0x01, 0x00
};
static uint8_t fragment_shader_code[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0b, 0x33, 0x61, 0x7d,
0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x54, 0x52, 0x49, 0x56, 0x49, 0x41, 0x4c, 0x2d,
0x46, 0x52, 0x41, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x2d, 0x53, 0x48, 0x41,
0x44, 0x45, 0x52, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x11, 0x00, 0x00, 0x00, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46,
0x4c, 0x4f, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00,
0x13, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x56, 0x45,
0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d, 0x46, 0x4c, 0x4f,
0x41, 0x54, 0x20, 0x34, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00,
0x36, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x4f, 0x53, 0x4c, 0x3a, 0x3a, 0x50,
0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x28, 0x4d, 0x4f, 0x53, 0x4c,
0x3a, 0x56, 0x45, 0x43, 0x20, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x2d,
0x46, 0x4c, 0x4f, 0x41, 0x54, 0x20, 0x34, 0x29, 0x20, 0x3a, 0x4f, 0x55,
0x54, 0x50, 0x55, 0x54, 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
0x37, 0x00, 0x00, 0x00, 0x4e, 0x49, 0x4c, 0x00, 0x05, 0x00, 0x07, 0x00,
0x38, 0x00, 0x00, 0x00, 0x28, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f,
0x4e, 0x20, 0x4e, 0x49, 0x4c, 0x20, 0x4e, 0x49, 0x4c, 0x29, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x11, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x36, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x13, 0x00, 0x02, 0x00, 0x37, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
0x3b, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
0x37, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
};
int main(int argc, char *argv[]) {
VkInstance instance;
VkDevice device;
VkShaderModule vertex_shader, fragment_shader;
VkDescriptorSetLayout camera_ubo, material_ssbo;
VkPipelineLayout pipeline_layout;
VkPipeline pipeline;
const char *layers[] = {"VK_LAYER_KHRONOS_validation"};
VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app_info.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
app_info.engineVersion = VK_MAKE_VERSION(1, 0, 0);
app_info.pApplicationName = "pipeline-test";
app_info.pEngineName = "pipeline-test";
app_info.apiVersion = VK_MAKE_API_VERSION(0, 1, 3, 0);
VkInstanceCreateInfo instance_info = {};
instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
instance_info.pApplicationInfo = &app_info;
instance_info.enabledLayerCount = countof(layers);
instance_info.ppEnabledLayerNames = layers;
VK_CHECK(vkCreateInstance(&instance_info, NULL, &instance));
VkPhysicalDevice physical_device;
uint32_t device_count = 1;
VK_CHECK(vkEnumeratePhysicalDevices(instance, &device_count, &physical_device));
VkPhysicalDeviceFeatures2 features = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
VkPhysicalDeviceVulkan11Features features11 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES};
features11.multiview = true;
VkPhysicalDeviceVulkan13Features features13 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES};
features13.dynamicRendering = true;
features.pNext = &features11;
features11.pNext = &features13;
VkDeviceQueueCreateInfo queue_info = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO};
float priorities = 1.0;
queue_info.queueCount = 1;
queue_info.queueFamilyIndex = 0;
queue_info.pQueuePriorities = &priorities;
VkDeviceCreateInfo device_info = {};
device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
device_info.pNext = (void*)&features;
device_info.queueCreateInfoCount = 1;
device_info.pQueueCreateInfos = &queue_info;
VK_CHECK(vkCreateDevice(physical_device, &device_info, NULL, &device));
VkDescriptorSetLayoutCreateInfo camera_ubo_info = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO};
VkDescriptorSetLayoutBinding camera_ubo_binding = {};
camera_ubo_binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
camera_ubo_binding.descriptorCount = 1;
camera_ubo_binding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
camera_ubo_info.bindingCount = 1;
camera_ubo_info.pBindings = &camera_ubo_binding;
VK_CHECK(vkCreateDescriptorSetLayout(device, &camera_ubo_info, NULL, &camera_ubo));
VkDescriptorSetLayoutCreateInfo material_ssbo_info = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO};
VkDescriptorSetLayoutBinding material_ssbo_binding = {};
material_ssbo_binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
material_ssbo_binding.descriptorCount = 1;
material_ssbo_binding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
material_ssbo_info.bindingCount = 1;
material_ssbo_info.pBindings = &material_ssbo_binding;
VK_CHECK(vkCreateDescriptorSetLayout(device, &material_ssbo_info, NULL, &material_ssbo));
VkPipelineLayoutCreateInfo pipeline_layout_info = {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO};
VkPushConstantRange constant_range;
constant_range.offset = 0;
constant_range.size = sizeof(PushConstants);
constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
pipeline_layout_info.pushConstantRangeCount = 1;
pipeline_layout_info.pPushConstantRanges = &constant_range;
const VkDescriptorSetLayout set_layouts[] = {camera_ubo, material_ssbo};
pipeline_layout_info.setLayoutCount = countof(set_layouts);
pipeline_layout_info.pSetLayouts = set_layouts;
VK_CHECK(vkCreatePipelineLayout(device, &pipeline_layout_info, NULL, &pipeline_layout));
VkShaderModuleCreateInfo vertex_shader_info = {VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO};
#ifdef COMPILE_WORKING_SHADER
vertex_shader_info.codeSize = sizeof(working_vertex_shader_code);
vertex_shader_info.pCode = (const uint32_t*)working_vertex_shader_code;
#else
vertex_shader_info.codeSize = sizeof(vertex_shader_code);
vertex_shader_info.pCode = (const uint32_t*)vertex_shader_code;
#endif
VK_CHECK(vkCreateShaderModule(device, &vertex_shader_info, NULL, &vertex_shader));
VkShaderModuleCreateInfo fragment_shader_info = {VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO};
fragment_shader_info.codeSize = sizeof(fragment_shader_code);
fragment_shader_info.pCode = (const uint32_t*)fragment_shader_code;
VK_CHECK(vkCreateShaderModule(device, &fragment_shader_info, NULL, &fragment_shader));
VkGraphicsPipelineCreateInfo pipeline_info = {VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO};
pipeline_info.layout = pipeline_layout;
VkPipelineColorBlendStateCreateInfo color_blend_state = {VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO};
color_blend_state.attachmentCount = 1;
VkPipelineColorBlendAttachmentState color_blend_state_attachment = {};
color_blend_state_attachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
color_blend_state_attachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
color_blend_state_attachment.colorBlendOp = VK_BLEND_OP_ADD;
color_blend_state_attachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
color_blend_state_attachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
color_blend_state_attachment.alphaBlendOp = VK_BLEND_OP_ADD;
color_blend_state_attachment.colorWriteMask =
VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT |
VK_COLOR_COMPONENT_A_BIT;
color_blend_state.pAttachments = &color_blend_state_attachment;
pipeline_info.pColorBlendState = &color_blend_state;
VkPipelineDepthStencilStateCreateInfo depth_stencil_state = {VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO};
depth_stencil_state.depthTestEnable = true;
depth_stencil_state.depthWriteEnable = true;
depth_stencil_state.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL;
pipeline_info.pDepthStencilState = &depth_stencil_state;
VkPipelineMultisampleStateCreateInfo multisample_state = {VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO};
multisample_state.rasterizationSamples = 4;
pipeline_info.pMultisampleState = &multisample_state;
VkPipelineShaderStageCreateInfo stages[2] = {};
stages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
stages[0].stage = VK_SHADER_STAGE_VERTEX_BIT;
stages[0].module = vertex_shader;
#ifdef COMPILE_WORKING_SHADER
stages[0].pName = "TRANSFORM-VERTEX";
#else
stages[0].pName = "TRANSFORM-VERTEX2";
#endif
stages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
stages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT;
stages[1].module = fragment_shader;
stages[1].pName = "TRIVIAL-FRAGMENT-SHADER";
pipeline_info.stageCount = countof(stages);
pipeline_info.pStages = stages;
VkPipelineDynamicStateCreateInfo dynamic_state = {VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO};
VkDynamicState dynamic_states[] = {VK_DYNAMIC_STATE_SCISSOR, VK_DYNAMIC_STATE_VIEWPORT};
dynamic_state.dynamicStateCount = countof(dynamic_states);
dynamic_state.pDynamicStates = dynamic_states;
pipeline_info.pDynamicState = &dynamic_state;
VkPipelineInputAssemblyStateCreateInfo input_assembly_state = {VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO};
input_assembly_state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
pipeline_info.pInputAssemblyState = &input_assembly_state;
VkPipelineVertexInputStateCreateInfo vertex_input_state = {VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO};
VkVertexInputAttributeDescription attributes[3];
attributes[0].binding = 0;
attributes[0].location = 0;
attributes[0].format = VK_FORMAT_R32G32B32_SFLOAT;
attributes[0].offset = 0;
attributes[1].binding = 1;
attributes[1].location = 1;
attributes[1].format = VK_FORMAT_R32G32B32_SFLOAT;
attributes[1].offset = 0;
attributes[2].binding = 2;
attributes[2].location = 2;
attributes[2].format = VK_FORMAT_R32G32_SFLOAT;
attributes[2].offset = 0;
VkVertexInputBindingDescription bindings[3];
bindings[0].binding = 0;
bindings[0].stride = 16;
bindings[0].inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
bindings[1].binding = 1;
bindings[1].stride = 16;
bindings[1].inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
bindings[2].binding = 2;
bindings[2].stride = 8;
bindings[2].inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
vertex_input_state.vertexAttributeDescriptionCount = countof(attributes);
vertex_input_state.pVertexAttributeDescriptions = attributes;
vertex_input_state.vertexBindingDescriptionCount = countof(bindings);
vertex_input_state.pVertexBindingDescriptions = bindings;
pipeline_info.pVertexInputState = &vertex_input_state;
VkPipelineRasterizationStateCreateInfo rasterization_state = {VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO};
rasterization_state.cullMode = VK_CULL_MODE_BACK_BIT;
rasterization_state.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
rasterization_state.polygonMode = VK_POLYGON_MODE_FILL;
rasterization_state.lineWidth = 1.0f;
pipeline_info.pRasterizationState = &rasterization_state;
VkPipelineViewportStateCreateInfo viewport_state = {VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO};
viewport_state.viewportCount = 1;
viewport_state.scissorCount = 1;
pipeline_info.pViewportState = &viewport_state;
VK_CHECK(vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipeline_info, NULL, &pipeline));
vkDestroyPipeline(device, pipeline, NULL);
vkDestroyShaderModule(device, fragment_shader, NULL);
vkDestroyShaderModule(device, vertex_shader, NULL);
vkDestroyPipelineLayout(device, pipeline_layout, NULL);
vkDestroyDescriptorSetLayout(device, material_ssbo, NULL);
vkDestroyDescriptorSetLayout(device, camera_ubo, NULL);
vkDestroyDevice(device, NULL);
vkDestroyInstance(instance, NULL);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment