ogl_beamforming

Ultrasound Beamforming Implemented with OpenGL
git clone anongit@rnpnr.xyz:ogl_beamforming.git
Log | Files | Refs | Feed | Submodules | README | LICENSE

Commit: 868e680986e37bf538d3ec0142a79e68986293b9
Parent: 4cd6c4efe3c2bd8397dbae1de68e5627deecbfd2
Author: Randy Palamar
Date:   Fri, 24 Oct 2025 07:13:53 -0600

build: support shader baking

this is useful for prebuilt binaries - the exe will be able to run
from anywhere.

Diffstat:
Mbeamformer.c | 47++++++++++++++++++++++++++++++++---------------
Mbeamformer.h | 1+
Mbuild.c | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
Agenerated/beamformer_shaders.c | 1311+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mstatic.c | 42+++++++++++++++++++++++++-----------------
5 files changed, 1456 insertions(+), 50 deletions(-)

diff --git a/beamformer.c b/beamformer.c @@ -722,8 +722,10 @@ load_compute_shader(BeamformerCtx *ctx, BeamformerComputePlan *cp, u32 shader_sl i32 reloadable_index = beamformer_shader_reloadable_index_by_shader[shader]; if (reloadable_index != -1) { BeamformerShaderKind base_shader = beamformer_reloadable_shader_kinds[reloadable_index]; - s8 path = push_s8_from_parts(&arena, ctx->os.path_separator, s8("shaders"), - beamformer_reloadable_shader_files[reloadable_index]); + s8 path; + if (!BakeShaders) + path = push_s8_from_parts(&arena, ctx->os.path_separator, s8("shaders"), + beamformer_reloadable_shader_files[reloadable_index]); Stream shader_stream = arena_stream(arena); stream_push_shader_header(&shader_stream, base_shader, compute_headers[base_shader]); @@ -762,11 +764,17 @@ load_compute_shader(BeamformerCtx *ctx, BeamformerComputePlan *cp, u32 shader_sl stream_append_s8(&shader_stream, s8("\n#line 1\n")); - s8 shader_text = arena_stream_commit(&arena, &shader_stream); - s8 file_text = os_read_whole_file(&arena, (c8 *)path.data); + s8 shader_text; + if (BakeShaders) { + stream_append_s8(&shader_stream, beamformer_shader_data[reloadable_index]); + shader_text = arena_stream_commit(&arena, &shader_stream); + } else { + shader_text = arena_stream_commit(&arena, &shader_stream); + s8 file_text = os_read_whole_file(&arena, (c8 *)path.data); - assert(shader_text.data + shader_text.len == file_text.data); - shader_text.len += file_text.len; + assert(shader_text.data + shader_text.len == file_text.data); + shader_text.len += file_text.len; + } /* TODO(rnp): instance name */ s8 shader_name = beamformer_shader_names[shader]; @@ -1041,17 +1049,27 @@ do_compute_shader(BeamformerCtx *ctx, BeamformerComputePlan *cp, BeamformerFrame } function s8 -shader_text_with_header(s8 header, s8 filepath, BeamformerShaderKind shader_kind, Arena *arena) +shader_text_with_header(s8 header, s8 filepath, b32 has_file, BeamformerShaderKind shader_kind, Arena *arena) { Stream sb = arena_stream(*arena); stream_push_shader_header(&sb, shader_kind, header); stream_append_s8(&sb, s8("\n#line 1\n")); - s8 result = arena_stream_commit(arena, &sb); - if (filepath.len > 0) { - s8 file = os_read_whole_file(arena, (c8 *)filepath.data); - assert(file.data == result.data + result.len); - result.len += file.len; + s8 result; + if (BakeShaders) { + /* TODO(rnp): better handling of shaders with no backing file */ + if (has_file) { + i32 reloadable_index = beamformer_shader_reloadable_index_by_shader[shader_kind]; + stream_append_s8(&sb, beamformer_shader_data[reloadable_index]); + } + result = arena_stream_commit(arena, &sb); + } else { + result = arena_stream_commit(arena, &sb); + if (has_file) { + s8 file = os_read_whole_file(arena, (c8 *)filepath.data); + assert(file.data == result.data + result.len); + result.len += file.len; + } } return result; @@ -1074,9 +1092,8 @@ DEBUG_EXPORT BEAMFORMER_RELOAD_SHADER_FN(beamformer_reload_shader) i32 index = 0; do { - s8 filepath = {0}; - if (link->reloadable_info_index >= 0) filepath = path; - shader_texts[index] = shader_text_with_header(link->header, filepath, kind, &arena); + b32 has_file = link->reloadable_info_index >= 0; + shader_texts[index] = shader_text_with_header(link->header, path, has_file, kind, &arena); shader_types[index] = link->gl_type; index++; link = link->link; diff --git a/beamformer.h b/beamformer.h @@ -9,6 +9,7 @@ #include "opengl.h" #include "generated/beamformer.meta.c" +#include "generated/beamformer_shaders.c" /////////////////// // REQUIRED OS API diff --git a/build.c b/build.c @@ -4,15 +4,6 @@ /* TODO(rnp): * [ ]: refactor: merge pack_table and bake_parameters * [ ]: refactor: allow @Expand to come before the table definition - * [x]: refactor: helper for appending expanded shader flags - * [x]: refactor: "base" shaders should only be reloadable shaders - * - internally when a shader with no file is encountered it should - * not get pushed as a "base" shader. - * [x]: bug: column indicator for compile error is off - * [ ]: bake shaders and font data into binary - * - for shaders there is a way of making a separate data section and referring - * to it with extern from the C source (bake both data and size) - * - use objcopy, maybe need linker script maybe command line flags for ld will work * [ ]: cross compile/override baked compiler * [ ]: msvc build doesn't detect out of date files correctly * [ ]: seperate dwarf debug info @@ -121,6 +112,7 @@ global char *g_argv0; DA_STRUCT(char *, Command); typedef struct { + b32 bake_shaders; b32 debug; b32 generic; b32 sanitize; @@ -488,7 +480,7 @@ s8_equal(s8 a, s8 b) function void usage(char *argv0) { - printf("%s [--debug] [--sanitize] [--time]\n" + printf("%s [--bake-shaders] [--debug] [--sanitize] [--time]\n" " --debug: dynamically link and build with debug symbols\n" " --generic: compile for a generic target (x86-64-v3 or armv8 with NEON)\n" " --sanitize: build with ASAN and UBSAN\n" @@ -507,7 +499,9 @@ parse_options(i32 argc, char *argv[]) while (argc > 0) { char *arg = shift(argv, argc); s8 str = c_str_to_s8(arg); - if (s8_equal(str, s8("--debug"))) { + if (s8_equal(str, s8("--bake-shaders"))) { + result.bake_shaders = 1; + } else if (s8_equal(str, s8("--debug"))) { result.debug = 1; } else if (s8_equal(str, s8("--generic"))) { result.generic = 1; @@ -2065,23 +2059,97 @@ meta_push_shader_reload_info(MetaprogramContext *m, MetaContext *ctx) meta_end_scope(m, s8("};\n")); } +function void +meta_push_shader_bake(MetaprogramContext *m, MetaContext *ctx) +{ + for (iz shader = 0; shader < ctx->base_shaders.count; shader++) { + MetaShader *s = ctx->base_shaders.data[shader].shader; + s8 shader_name = ctx->shader_names.data[s->name_id]; + meta_begin_line(m, s8("read_only global u8 beamformer_shader_")); + for (iz i = 0; i < shader_name.len; i++) + stream_append_byte(&m->stream, TOLOWER(shader_name.data[i])); + meta_begin_scope(m, s8("_bytes[] = {")); { + Arena scratch = m->scratch; + s8 filename = push_s8_from_parts(&scratch, s8(OS_PATH_SEPARATOR), s8("shaders"), + ctx->base_shaders.data[shader].file); + s8 file = os_read_whole_file(&scratch, (c8 *)filename.data); + + for (iz i = 0; i < file.len; i++) { + b32 end_line = (i != 0) && (i % 16) == 0; + if (i != 0) meta_push(m, end_line ? s8(",") : s8(", ")); + if (end_line) meta_end_line(m); + if ((i % 16) == 0) meta_indent(m); + meta_push(m, s8("0x")); + meta_push_u64_hex(m, file.data[i]); + } + meta_end_line(m); + } meta_end_scope(m, s8("};\n")); + } + + meta_begin_scope(m, s8("read_only global s8 beamformer_shader_data[] = {")); { + Arena scratch = m->scratch; + s8 *columns[2]; + columns[0] = push_array(&m->scratch, s8, ctx->base_shaders.count); + columns[1] = push_array(&m->scratch, s8, ctx->base_shaders.count); + for (iz shader = 0; shader < ctx->base_shaders.count; shader++) { + MetaShader *s = ctx->base_shaders.data[shader].shader; + s8 shader_name = ctx->shader_names.data[s->name_id]; + + Stream sb = arena_stream(m->scratch); + for (iz i = 0; i < shader_name.len; i++) + stream_append_byte(&sb, TOLOWER(shader_name.data[i])); + stream_append_s8(&sb, s8("_bytes,")); + columns[0][shader] = arena_stream_commit_and_reset(&m->scratch, &sb); + + stream_append_s8(&sb, s8(".len = countof(beamformer_shader_")); + for (iz i = 0; i < shader_name.len; i++) + stream_append_byte(&sb, TOLOWER(shader_name.data[i])); + columns[1][shader] = arena_stream_commit(&m->scratch, &sb); + } + metagen_push_table(m, m->scratch, s8("{.data = beamformer_shader_"), s8("_bytes)},"), columns, + (uz)ctx->base_shaders.count, 2); + m->scratch = scratch; + } meta_end_scope(m, s8("};\n")); +} + function b32 metagen_emit_c_code(MetaContext *ctx, Arena arena) { b32 result = 1; os_make_directory("generated"); - char *out = "generated/beamformer.meta.c"; - if (!needs_rebuild(out, "beamformer.meta")) - return result; + char *out_meta = "generated" OS_PATH_SEPARATOR "beamformer.meta.c"; + char *out_shaders = "generated" OS_PATH_SEPARATOR "beamformer_shaders.c"; - build_log_generate("Core C Code"); + s8 header = s8("/* See LICENSE for license details. */\n\n" + "// GENERATED CODE\n\n"); MetaprogramContext meta_program = {.stream = arena_stream(arena), .scratch = ctx->scratch}; MetaprogramContext *m = &meta_program; - meta_push_line(m, s8("/* See LICENSE for license details. */\n")); - meta_push_line(m, s8("// GENERATED CODE\n")); + //////////////////////////// + // NOTE(rnp): shader baking + { + char **deps = push_array(&m->scratch, char *, ctx->base_shaders.count); + for (iz i = 0; i < ctx->base_shaders.count; i++) { + MetaBaseShader *b = ctx->base_shaders.data + i; + deps[i] = (c8 *)push_s8_from_parts(&m->scratch, s8(OS_PATH_SEPARATOR), s8("shaders"), b->file).data; + } + if (needs_rebuild_(out_shaders, deps, ctx->base_shaders.count)) { + build_log_generate("Bake Shaders"); + meta_push(m, header); + meta_push_shader_bake(m, ctx); + result &= meta_write_and_reset(m, out_shaders); + } + m->scratch = ctx->scratch; + } + + if (!needs_rebuild(out_meta, "beamformer.meta")) + return result; + + build_log_generate("Core C Code"); + + meta_push(m, header); ///////////////////////// // NOTE(rnp): enumarents @@ -2291,7 +2359,7 @@ metagen_emit_c_code(MetaContext *ctx, Arena arena) //fprintf(stderr, "%.*s\n", (i32)m.stream.widx, m.stream.data); - result = meta_write_and_reset(m, out); + result = meta_write_and_reset(m, out_meta); return result; } @@ -2601,6 +2669,7 @@ main(i32 argc, char *argv[]) ////////////////// // static portion + cmd_append(&arena, &c, options.bake_shaders? "-DBakeShaders=1" : "-DBakeShaders=0"); iz c_count = c.count; cmd_append(&arena, &c, OS_MAIN, OUTPUT_EXE("ogl")); cmd_pdb(&arena, &c, "ogl"); diff --git a/generated/beamformer_shaders.c b/generated/beamformer_shaders.c @@ -0,0 +1,1311 @@ +/* See LICENSE for license details. */ + +// GENERATED CODE + +read_only global u8 beamformer_shader_decode_bytes[] = { + 0x2f, 0x2a, 0x20, 0x53, 0x65, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x28, + 0x72, 0x6e, 0x70, 0x29, 0x3a, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x78, 0x20, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x20, 0x78, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x68, 0x61, 0x64, 0x61, 0x6d, 0x61, 0x72, + 0x64, 0x20, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x0a, 0x20, 0x2a, 0x20, 0x28, 0x75, 0x6e, 0x6c, + 0x65, 0x73, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, + 0x3d, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, + 0x20, 0x49, 0x6e, 0x20, 0x62, 0x75, 0x6c, 0x6b, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2d, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x68, 0x61, 0x64, 0x61, 0x6d, + 0x61, 0x72, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, + 0x0a, 0x23, 0x69, 0x66, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, + 0x3d, 0x3d, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x33, 0x32, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x49, 0x4e, 0x50, + 0x55, 0x54, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0a, 0x09, 0x23, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x78, 0x29, 0x20, 0x20, 0x28, 0x78, 0x29, 0x0a, 0x23, 0x65, + 0x6c, 0x69, 0x66, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, + 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x09, 0x23, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x78, 0x29, 0x20, 0x20, 0x28, 0x78, 0x29, 0x0a, + 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, + 0x3d, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x49, 0x6e, 0x74, 0x31, 0x36, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x09, 0x23, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x78, 0x29, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, + 0x28, 0x28, 0x78, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, + 0x36, 0x2c, 0x20, 0x28, 0x78, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x0a, 0x23, 0x65, + 0x6c, 0x69, 0x66, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, + 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x49, 0x6e, 0x74, 0x31, 0x36, 0x0a, 0x09, + 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, + 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x46, 0x5f, 0x53, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x20, 0x32, + 0x0a, 0x09, 0x23, 0x69, 0x66, 0x20, 0x44, 0x69, 0x6c, 0x61, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x0a, 0x09, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x34, 0x0a, 0x09, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, + 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, + 0x28, 0x78, 0x29, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x28, 0x28, 0x78, 0x29, 0x20, 0x3c, 0x3c, + 0x20, 0x31, 0x36, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x28, + 0x78, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x30, 0x29, 0x0a, 0x09, 0x23, 0x65, + 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, + 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, + 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x09, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, + 0x54, 0x28, 0x78, 0x29, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x28, 0x28, 0x78, 0x29, 0x20, 0x3c, + 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x28, 0x78, 0x29, + 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x0a, 0x09, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, + 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x20, 0x32, 0x0a, 0x09, 0x23, 0x65, + 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x23, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x20, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, 0x65, 0x63, + 0x6f, 0x64, 0x65, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x6e, + 0x64, 0x65, 0x66, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x0a, 0x09, 0x23, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x53, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x20, 0x31, + 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, + 0x20, 0x52, 0x46, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, + 0x49, 0x4e, 0x44, 0x45, 0x58, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, + 0x46, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, + 0x44, 0x45, 0x58, 0x20, 0x31, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x6c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x28, 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x31, 0x20, 0x7b, 0x0a, 0x09, 0x49, + 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x72, + 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x28, 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, + 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x32, 0x20, 0x7b, 0x0a, 0x09, + 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x5d, 0x3b, 0x0a, 0x7d, + 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, + 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x33, 0x29, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, + 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, + 0x33, 0x20, 0x7b, 0x0a, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x5d, + 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x33, 0x32, + 0x66, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, + 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, + 0x74, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, + 0x44, 0x20, 0x20, 0x68, 0x61, 0x64, 0x61, 0x6d, 0x61, 0x72, 0x64, 0x3b, 0x0a, 0x6c, 0x61, 0x79, + 0x6f, 0x75, 0x74, 0x28, 0x72, 0x31, 0x36, 0x69, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, + 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, + 0x20, 0x69, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x44, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x3b, 0x0a, 0x0a, 0x53, 0x41, 0x4d, 0x50, + 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x28, 0x75, 0x69, 0x6e, 0x74, + 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, + 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x52, 0x46, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, + 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x3b, 0x0a, 0x09, 0x75, 0x69, 0x6e, + 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, + 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x79, 0x3b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, + 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x44, 0x2e, 0x7a, 0x3b, 0x0a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x66, 0x5f, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2a, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x29, 0x20, 0x2f, 0x20, 0x52, 0x46, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x3b, 0x0a, 0x09, 0x69, + 0x66, 0x20, 0x28, 0x75, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x29, + 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x3c, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, + 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x64, + 0x65, 0x20, 0x20, 0x2a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2c, 0x20, + 0x69, 0x6e, 0x74, 0x28, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x29, 0x29, 0x2e, 0x78, 0x20, + 0x2b, 0x0a, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, + 0x74, 0x20, 0x2b, 0x0a, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x5f, 0x72, + 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x72, 0x66, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x20, 0x2b, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5d, 0x20, 0x3d, 0x20, 0x72, + 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x69, 0x6e, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2f, 0x20, + 0x52, 0x46, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x49, + 0x4e, 0x44, 0x45, 0x58, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x20, 0x65, 0x6c, + 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x3c, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x29, 0x20, 0x7b, + 0x0a, 0x09, 0x09, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x66, + 0x20, 0x3d, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x20, 0x2b, 0x0a, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x2b, 0x0a, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x20, 0x20, 0x2a, + 0x20, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x0a, 0x09, + 0x09, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x53, 0x41, 0x4d, 0x50, + 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x30, 0x29, 0x3b, + 0x0a, 0x09, 0x09, 0x09, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x44, 0x65, 0x63, 0x6f, + 0x64, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, + 0x65, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, + 0x65, 0x3a, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, + 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x28, + 0x72, 0x66, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, + 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x4d, 0x6f, 0x64, 0x65, 0x5f, 0x48, 0x61, 0x64, 0x61, 0x6d, 0x61, 0x72, 0x64, 0x3a, 0x7b, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x30, 0x29, 0x3b, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, + 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x73, 0x75, 0x6d, 0x20, 0x2b, 0x3d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, + 0x64, 0x28, 0x68, 0x61, 0x64, 0x61, 0x6d, 0x61, 0x72, 0x64, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, + 0x32, 0x28, 0x69, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x29, 0x29, 0x2e, + 0x78, 0x20, 0x2a, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x28, 0x72, 0x66, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2b, 0x2b, 0x29, 0x3b, + 0x0a, 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x75, + 0x6d, 0x20, 0x2f, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, + 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x62, 0x72, + 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x6f, 0x75, 0x74, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2f, 0x20, + 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x50, + 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x7d, 0x0a +}; + +read_only global u8 beamformer_shader_filter_bytes[] = { + 0x2f, 0x2a, 0x20, 0x53, 0x65, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, + 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, + 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x20, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x76, 0x29, 0x20, 0x28, 0x76, 0x29, 0x0a, 0x20, 0x20, 0x23, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x76, 0x29, 0x20, 0x28, 0x76, 0x29, 0x0a, 0x23, + 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, + 0x53, 0x54, 0x28, 0x76, 0x29, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x6f, 0x72, 0x6d, 0x32, + 0x78, 0x31, 0x36, 0x28, 0x76, 0x29, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, + 0x54, 0x28, 0x76, 0x29, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x6f, 0x72, 0x6d, + 0x32, 0x78, 0x31, 0x36, 0x28, 0x76, 0x29, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, + 0x23, 0x69, 0x66, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x49, 0x4c, 0x54, 0x45, + 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x65, 0x63, 0x32, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x70, 0x70, + 0x6c, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x69, 0x71, 0x2c, 0x20, 0x68, 0x29, + 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x5f, 0x6d, 0x75, 0x6c, 0x28, 0x28, 0x69, 0x71, + 0x29, 0x2c, 0x20, 0x28, 0x68, 0x29, 0x29, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x23, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x69, 0x71, 0x2c, 0x20, 0x68, 0x29, 0x20, 0x28, 0x28, + 0x69, 0x71, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x68, 0x29, 0x29, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, + 0x66, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, + 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, + 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x31, + 0x20, 0x7b, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x69, 0x6e, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, + 0x6f, 0x75, 0x74, 0x28, 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x32, 0x20, 0x7b, 0x0a, 0x09, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x5b, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, + 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x3d, 0x20, 0x33, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, + 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x5f, 0x33, 0x20, 0x7b, 0x0a, 0x09, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x65, + 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5b, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, + 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x31, 0x36, 0x69, 0x2c, 0x20, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x75, 0x6e, 0x69, + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x44, 0x20, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x3b, 0x0a, 0x0a, + 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x5f, 0x6d, 0x75, 0x6c, + 0x28, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x62, 0x29, + 0x0a, 0x7b, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x32, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, + 0x32, 0x28, 0x62, 0x2e, 0x78, 0x2c, 0x20, 0x62, 0x2e, 0x79, 0x2c, 0x20, 0x2d, 0x62, 0x2e, 0x79, + 0x2c, 0x20, 0x62, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x20, 0x2a, 0x20, 0x61, 0x3b, 0x0a, 0x09, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x23, 0x69, 0x66, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x0a, + 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x71, 0x28, 0x76, + 0x65, 0x63, 0x32, 0x20, 0x69, 0x71, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x3b, 0x0a, 0x09, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x63, 0x61, 0x73, + 0x65, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x5f, 0x34, + 0x58, 0x3a, 0x7b, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x66, 0x73, 0x20, 0x3d, 0x20, 0x32, 0x20, + 0x2a, 0x20, 0x66, 0x64, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x20, + 0x50, 0x49, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, + 0x63, 0x6f, 0x73, 0x20, 0x2d, 0x3e, 0x20, 0x31, 0x20, 0x2d, 0x31, 0x20, 0x20, 0x31, 0x20, 0x2d, + 0x31, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x73, 0x69, 0x6e, 0x20, 0x2d, 0x3e, 0x20, 0x30, 0x20, + 0x20, 0x30, 0x20, 0x20, 0x30, 0x20, 0x20, 0x30, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x73, 0x5b, 0x32, 0x5d, + 0x20, 0x3d, 0x20, 0x7b, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x7d, 0x3b, 0x0a, 0x09, 0x09, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x73, 0x5b, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x20, 0x26, 0x20, 0x31, 0x5d, 0x20, 0x2a, 0x20, 0x69, 0x71, 0x3b, 0x0a, 0x09, + 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x5f, 0x32, 0x58, 0x3a, 0x7b, 0x0a, + 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x66, 0x73, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x64, 0x0a, 0x09, 0x09, + 0x2f, 0x2f, 0x20, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x20, 0x32, 0x20, 0x2a, 0x20, 0x50, 0x49, 0x20, + 0x2a, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x73, + 0x20, 0x2d, 0x3e, 0x20, 0x31, 0x20, 0x31, 0x20, 0x31, 0x20, 0x31, 0x0a, 0x09, 0x09, 0x2f, 0x2f, + 0x20, 0x73, 0x69, 0x6e, 0x20, 0x2d, 0x3e, 0x20, 0x30, 0x20, 0x30, 0x20, 0x30, 0x20, 0x30, 0x0a, + 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x71, 0x3b, 0x0a, 0x09, + 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x3a, 0x7b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x72, 0x67, 0x20, 0x20, + 0x20, 0x20, 0x3d, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x28, 0x33, 0x36, 0x30, 0x29, + 0x20, 0x2a, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x2f, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x61, 0x74, 0x32, 0x20, 0x20, 0x70, 0x68, + 0x61, 0x73, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x32, 0x28, 0x63, 0x6f, 0x73, 0x28, + 0x61, 0x72, 0x67, 0x29, 0x2c, 0x20, 0x2d, 0x73, 0x69, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x29, 0x2c, + 0x0a, 0x09, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x29, 0x2c, + 0x20, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x61, 0x72, 0x67, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x68, 0x61, 0x73, 0x6f, 0x72, 0x20, 0x2a, + 0x20, 0x69, 0x71, 0x3b, 0x0a, 0x09, 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x7d, + 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, + 0x0a, 0x7d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x76, 0x65, 0x63, 0x32, 0x20, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, + 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, + 0x69, 0x6e, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, + 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x44, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x61, 0x74, 0x65, 0x3b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, + 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, + 0x78, 0x3b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, + 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x79, 0x3b, 0x0a, 0x09, + 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x20, 0x20, + 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x7a, 0x3b, 0x0a, 0x0a, 0x09, 0x75, 0x69, 0x6e, + 0x74, 0x20, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x62, + 0x6f, 0x6f, 0x6c, 0x28, 0x4d, 0x61, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x29, + 0x20, 0x3f, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x69, 0x6e, + 0x74, 0x28, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x29, 0x29, 0x2e, 0x78, 0x20, 0x3a, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x3b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, + 0x6e, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, + 0x20, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x69, 0x64, + 0x65, 0x20, 0x2a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x3b, 0x0a, 0x09, 0x75, + 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, + 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, + 0x72, 0x69, 0x64, 0x65, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, + 0x2b, 0x0a, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x20, 0x2b, 0x0a, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x20, 0x20, 0x2a, + 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x0a, 0x09, 0x69, + 0x6e, 0x74, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3b, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, + 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x4d, 0x61, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x72, + 0x69, 0x64, 0x65, 0x20, 0x2f, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x64, 0x65, 0x3b, 0x0a, 0x09, 0x7d, 0x20, 0x65, 0x6c, 0x73, + 0x65, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, + 0x69, 0x64, 0x65, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x75, + 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x2a, 0x3d, + 0x20, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x3b, + 0x0a, 0x0a, 0x09, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, + 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x6e, + 0x74, 0x20, 0x61, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x69, 0x6e, 0x5f, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, + 0x6c, 0x28, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x29, + 0x20, 0x3f, 0x20, 0x31, 0x20, 0x3a, 0x20, 0x73, 0x71, 0x72, 0x74, 0x28, 0x32, 0x29, 0x3b, 0x0a, + 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x20, 0x3d, 0x20, + 0x6d, 0x61, 0x78, 0x28, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2d, 0x20, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0x20, 0x6a, 0x20, + 0x3c, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x61, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0x20, 0x6a, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x09, + 0x09, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x71, + 0x20, 0x3d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x28, 0x69, 0x6e, 0x5f, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x6a, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, + 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x20, 0x20, 0x3d, + 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, + 0x65, 0x6e, 0x74, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2d, 0x20, 0x6a, 0x5d, 0x3b, + 0x0a, 0x09, 0x09, 0x23, 0x69, 0x66, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, + 0x65, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x20, 0x2b, 0x3d, 0x20, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x2a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x28, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x71, 0x28, 0x69, + 0x71, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0x2c, + 0x20, 0x2d, 0x6a, 0x29, 0x2c, 0x20, 0x68, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x23, 0x65, 0x6c, 0x73, + 0x65, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x20, 0x2b, 0x3d, 0x20, + 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x69, 0x71, 0x2c, + 0x20, 0x68, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x09, 0x09, + 0x7d, 0x0a, 0x0a, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x6f, 0x75, + 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5d, 0x20, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, + 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x7d, 0x0a +}; + +read_only global u8 beamformer_shader_das_bytes[] = { + 0x2f, 0x2a, 0x20, 0x53, 0x65, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, + 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0a, + 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x54, 0x45, 0x58, 0x54, 0x55, 0x52, + 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x33, 0x32, 0x66, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, + 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, + 0x61, 0x29, 0x20, 0x20, 0x20, 0x28, 0x61, 0x29, 0x2e, 0x78, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x61, 0x29, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, + 0x28, 0x61, 0x29, 0x2e, 0x78, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x0a, + 0x20, 0x20, 0x23, 0x69, 0x66, 0x20, 0x21, 0x46, 0x61, 0x73, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, + 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x20, 0x20, + 0x20, 0x31, 0x0a, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x23, 0x65, 0x6c, 0x69, + 0x66, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x44, 0x61, + 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, + 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x20, 0x54, 0x45, 0x58, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x4b, 0x49, 0x4e, + 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x67, 0x33, 0x32, 0x66, + 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x61, 0x29, 0x20, 0x20, + 0x20, 0x28, 0x61, 0x29, 0x2e, 0x78, 0x79, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, + 0x53, 0x54, 0x28, 0x61, 0x29, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x28, 0x61, 0x29, + 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x23, 0x69, 0x66, + 0x20, 0x21, 0x46, 0x61, 0x73, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x4c, + 0x41, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x20, 0x20, 0x20, 0x32, 0x0a, 0x20, 0x20, + 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x23, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x75, + 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, + 0x41, 0x53, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, + 0x74, 0x28, 0x73, 0x74, 0x64, 0x34, 0x33, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, + 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x31, 0x20, 0x7b, 0x0a, 0x09, 0x53, 0x41, 0x4d, 0x50, + 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, + 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x52, + 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x0a, 0x23, 0x65, 0x6e, + 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x46, 0x61, 0x73, 0x74, 0x0a, 0x20, 0x20, + 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x53, + 0x54, 0x4f, 0x52, 0x45, 0x28, 0x61, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x61, + 0x29, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x61, 0x29, + 0x0a, 0x09, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x54, 0x45, 0x58, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, + 0x20, 0x30, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x33, 0x44, 0x20, 0x20, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x3b, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, + 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x53, + 0x54, 0x4f, 0x52, 0x45, 0x28, 0x61, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x61, + 0x29, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x61, 0x2c, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x61, 0x29, 0x0a, 0x09, 0x6c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x28, 0x54, 0x45, 0x58, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x2c, + 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x33, 0x44, + 0x20, 0x20, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x65, 0x78, + 0x3b, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x28, 0x72, 0x31, 0x36, 0x69, 0x2c, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x20, 0x72, + 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, + 0x69, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x44, 0x20, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x28, 0x72, 0x67, 0x33, 0x32, 0x66, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x3d, 0x20, 0x32, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x20, 0x72, + 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x44, 0x20, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, + 0x38, 0x69, 0x2c, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, + 0x33, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x20, 0x72, 0x65, 0x73, + 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x31, 0x44, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, + 0x58, 0x5f, 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x28, 0x74, 0x78, + 0x5f, 0x72, 0x78, 0x29, 0x20, 0x28, 0x28, 0x28, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x29, 0x20, 0x3e, + 0x3e, 0x20, 0x30, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x46, 0x29, 0x0a, 0x23, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x20, 0x54, 0x58, 0x5f, 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x28, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x29, 0x20, 0x28, 0x28, 0x28, 0x74, 0x78, + 0x5f, 0x72, 0x78, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, + 0x46, 0x29, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x43, 0x5f, 0x53, 0x50, + 0x4c, 0x49, 0x4e, 0x45, 0x20, 0x30, 0x2e, 0x35, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x44, 0x61, + 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, + 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x78, 0x0a, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x71, + 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x69, 0x71, 0x2c, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, + 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x72, 0x67, 0x20, 0x20, + 0x20, 0x20, 0x3d, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x28, 0x33, 0x36, 0x30, 0x29, + 0x20, 0x2a, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x2a, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x3b, + 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x32, 0x20, 0x20, 0x70, 0x68, 0x61, 0x73, 0x6f, 0x72, 0x20, 0x3d, + 0x20, 0x6d, 0x61, 0x74, 0x32, 0x28, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x61, 0x72, 0x67, 0x29, 0x2c, + 0x20, 0x73, 0x69, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x29, 0x2c, 0x0a, 0x09, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x2d, 0x73, 0x69, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x61, + 0x72, 0x67, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x68, 0x61, 0x73, 0x6f, 0x72, 0x20, 0x2a, 0x20, 0x69, 0x71, + 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x3b, 0x0a, 0x7d, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x20, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x71, 0x28, 0x61, 0x2c, + 0x20, 0x62, 0x29, 0x20, 0x28, 0x61, 0x29, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, + 0x2f, 0x2a, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x3a, 0x20, 0x53, 0x65, 0x65, 0x3a, 0x20, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x68, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x68, 0x74, 0x6d, + 0x20, 0x2a, 0x2f, 0x0a, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x63, 0x75, 0x62, 0x69, 0x63, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, + 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x68, 0x20, 0x3d, + 0x20, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x0a, 0x09, 0x09, 0x20, 0x32, 0x2c, 0x20, 0x2d, 0x33, 0x2c, + 0x20, 0x20, 0x30, 0x2c, 0x20, 0x31, 0x2c, 0x0a, 0x09, 0x09, 0x2d, 0x32, 0x2c, 0x20, 0x20, 0x33, + 0x2c, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x0a, 0x09, 0x09, 0x20, 0x31, 0x2c, 0x20, 0x2d, + 0x32, 0x2c, 0x20, 0x20, 0x31, 0x2c, 0x20, 0x30, 0x2c, 0x0a, 0x09, 0x09, 0x20, 0x31, 0x2c, 0x20, + 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x0a, 0x09, 0x29, 0x3b, 0x0a, 0x0a, 0x09, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6b, 0x2c, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x6f, + 0x64, 0x66, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x74, 0x6b, 0x29, 0x3b, 0x0a, 0x09, + 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x72, 0x66, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, + 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x6b, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x2c, 0x0a, + 0x09, 0x09, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x6b, 0x29, 0x20, 0x2b, + 0x20, 0x30, 0x5d, 0x2c, 0x0a, 0x09, 0x09, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x28, + 0x74, 0x6b, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x2c, 0x0a, 0x09, 0x09, 0x72, 0x66, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x5b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, + 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x6b, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x2c, 0x0a, 0x09, + 0x7d, 0x3b, 0x0a, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x53, 0x20, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x74, 0x20, 0x2a, 0x20, 0x74, + 0x20, 0x2a, 0x20, 0x74, 0x2c, 0x20, 0x74, 0x20, 0x2a, 0x20, 0x74, 0x2c, 0x20, 0x74, 0x2c, 0x20, + 0x31, 0x29, 0x3b, 0x0a, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x20, 0x50, 0x31, 0x20, 0x3d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5b, 0x31, 0x5d, + 0x3b, 0x0a, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x50, + 0x32, 0x20, 0x3d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, + 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x54, 0x31, 0x20, + 0x3d, 0x20, 0x43, 0x5f, 0x53, 0x50, 0x4c, 0x49, 0x4e, 0x45, 0x20, 0x2a, 0x20, 0x28, 0x50, 0x32, + 0x20, 0x2d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0x0a, + 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x54, 0x32, 0x20, + 0x3d, 0x20, 0x43, 0x5f, 0x53, 0x50, 0x4c, 0x49, 0x4e, 0x45, 0x20, 0x2a, 0x20, 0x28, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x2d, 0x20, 0x50, 0x31, 0x29, 0x3b, 0x0a, + 0x0a, 0x23, 0x69, 0x66, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, + 0x3d, 0x3d, 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x33, 0x32, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x20, 0x43, 0x20, 0x3d, 0x20, 0x76, 0x65, + 0x63, 0x34, 0x28, 0x50, 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x50, 0x32, 0x2e, 0x78, 0x2c, 0x20, 0x54, + 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x54, 0x32, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, + 0x53, 0x2c, 0x20, 0x68, 0x20, 0x2a, 0x20, 0x43, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6c, 0x69, 0x66, + 0x20, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x32, 0x78, 0x34, 0x20, 0x43, 0x20, 0x3d, + 0x20, 0x6d, 0x61, 0x74, 0x32, 0x78, 0x34, 0x28, 0x76, 0x65, 0x63, 0x34, 0x28, 0x50, 0x31, 0x2e, + 0x78, 0x2c, 0x20, 0x50, 0x32, 0x2e, 0x78, 0x2c, 0x20, 0x54, 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x54, + 0x32, 0x2e, 0x78, 0x29, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x50, 0x31, 0x2e, 0x79, 0x2c, + 0x20, 0x50, 0x32, 0x2e, 0x79, 0x2c, 0x20, 0x54, 0x31, 0x2e, 0x79, 0x2c, 0x20, 0x54, 0x32, 0x2e, + 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x20, 0x3d, 0x20, 0x53, 0x20, 0x2a, 0x20, 0x68, 0x20, 0x2a, 0x20, 0x43, 0x3b, 0x0a, 0x23, + 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x28, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x53, 0x41, 0x4d, 0x50, + 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, + 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x30, 0x29, 0x3b, + 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2a, + 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2a, 0x20, 0x41, + 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, + 0x2b, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x2a, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x73, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x20, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, + 0x5f, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x3a, 0x7b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, + 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x69, + 0x6e, 0x74, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x29, + 0x20, 0x3c, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x6f, 0x74, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x71, 0x28, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x62, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x29, 0x5d, 0x2c, 0x20, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2f, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x46, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x62, 0x72, 0x65, + 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, + 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x5f, 0x4c, 0x69, 0x6e, 0x65, + 0x61, 0x72, 0x3a, 0x7b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x28, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x29, 0x20, 0x3c, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x74, 0x6b, 0x2c, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x66, 0x28, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x2c, 0x20, 0x74, 0x6b, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x6e, 0x74, 0x20, + 0x6e, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, + 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x6b, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x31, 0x20, 0x2d, 0x20, 0x74, 0x29, 0x20, 0x2a, 0x20, + 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x6e, 0x5d, 0x20, 0x2b, 0x20, 0x74, 0x20, 0x2a, + 0x20, 0x72, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x6e, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x3b, + 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, + 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x71, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2f, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, + 0x6e, 0x67, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x29, 0x3b, 0x0a, 0x09, 0x7d, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x5f, 0x43, + 0x75, 0x62, 0x69, 0x63, 0x3a, 0x7b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x28, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x20, 0x3c, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x71, + 0x28, 0x63, 0x75, 0x62, 0x69, 0x63, 0x28, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x2f, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, + 0x09, 0x7d, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x0a, 0x7b, + 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, + 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x2f, 0x20, 0x53, 0x70, 0x65, 0x65, 0x64, + 0x4f, 0x66, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x2b, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x69, + 0x6d, 0x65, 0x20, 0x2a, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x72, 0x67, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x2f, 0x2a, 0x20, + 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x41, 0x4e, 0x54, 0x3a, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x74, + 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, + 0x0a, 0x09, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x73, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x62, 0x65, + 0x69, 0x6e, 0x67, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x61, + 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x64, 0x6f, 0x77, 0x6e, + 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x09, 0x2f, 0x2a, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x3a, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x46, 0x23, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x3a, 0x0a, + 0x09, 0x20, 0x2a, 0x0a, 0x09, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7c, 0x78, 0x5f, 0x65, 0x20, 0x2d, 0x20, 0x78, 0x5f, 0x69, 0x7c, 0x5c, 0x0a, 0x09, + 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x28, 0x78, 0x2c, 0x20, 0x7a, 0x29, 0x20, 0x3d, 0x20, + 0x63, 0x6f, 0x73, 0x28, 0x46, 0x23, 0x20, 0x2a, 0x20, 0xcf, 0x80, 0x20, 0x2a, 0x20, 0x2d, 0x2d, + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x20, 0x29, 0x20, 0x5e, 0x20, 0x32, 0x0a, + 0x09, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x7a, + 0x5f, 0x65, 0x20, 0x2d, 0x20, 0x7a, 0x5f, 0x69, 0x7c, 0x2f, 0x0a, 0x09, 0x20, 0x2a, 0x0a, 0x09, + 0x20, 0x2a, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x78, 0x2c, 0x7a, 0x5f, 0x65, 0x20, 0x61, + 0x72, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x64, 0x75, 0x63, 0x65, 0x72, 0x20, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x78, 0x2c, 0x7a, 0x5f, 0x69, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x2a, + 0x2f, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x73, + 0x28, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x28, 0x31, 0x38, 0x30, 0x29, 0x20, 0x2a, 0x20, + 0x61, 0x72, 0x67, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, + 0x2a, 0x20, 0x61, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x63, 0x61, + 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x72, + 0x6f, 0x77, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x5b, 0x69, 0x6e, 0x74, 0x28, 0x72, 0x6f, 0x77, 0x73, 0x29, 0x5d, 0x2c, 0x20, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x5b, 0x32, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x77, 0x61, 0x76, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x29, 0x0a, + 0x7b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x72, 0x63, + 0x61, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x6f, 0x77, + 0x73, 0x29, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x2c, 0x20, 0x63, 0x6f, + 0x73, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, + 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x79, + 0x6c, 0x69, 0x6e, 0x64, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x77, 0x61, 0x76, 0x65, 0x5f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x66, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x74, 0x78, 0x5f, 0x72, + 0x6f, 0x77, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x66, 0x20, 0x3d, + 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x2a, 0x20, 0x76, + 0x65, 0x63, 0x32, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x29, 0x3b, 0x0a, 0x09, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, + 0x72, 0x63, 0x61, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x78, 0x5f, 0x72, + 0x6f, 0x77, 0x73, 0x29, 0x2c, 0x20, 0x66, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, + 0x20, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x63, 0x71, + 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x69, 0x6e, 0x74, + 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x29, 0x20, 0x3f, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3a, + 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x65, 0x63, + 0x32, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x66, + 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x29, 0x20, 0x3f, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x46, + 0x6f, 0x63, 0x75, 0x73, 0x44, 0x65, 0x70, 0x74, 0x68, 0x29, 0x20, 0x3a, 0x20, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x72, 0x63, 0x61, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, + 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, + 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x7b, + 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, + 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x54, 0x58, 0x5f, 0x4f, 0x52, 0x49, 0x45, + 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x52, 0x43, 0x41, 0x4f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x20, 0x7b, 0x0a, + 0x09, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x54, 0x58, 0x5f, 0x4f, 0x52, 0x49, 0x45, + 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x52, 0x43, 0x41, 0x4f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x52, 0x6f, 0x77, 0x73, 0x3b, 0x0a, 0x09, 0x09, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, + 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x28, 0x66, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x78, 0x29, 0x3b, 0x0a, + 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x65, + 0x70, 0x74, 0x68, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x79, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, + 0x69, 0x73, 0x69, 0x6e, 0x66, 0x28, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x74, + 0x68, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, + 0x3d, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x77, 0x61, 0x76, 0x65, 0x5f, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x77, + 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x78, 0x5f, 0x72, + 0x6f, 0x77, 0x73, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, + 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x79, 0x6c, + 0x69, 0x6e, 0x64, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x77, 0x61, 0x76, 0x65, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, + 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x66, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, + 0x69, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x6f, 0x77, + 0x73, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x52, 0x45, + 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x52, 0x43, 0x41, 0x28, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, + 0x6e, 0x74, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x46, 0x61, 0x73, 0x74, + 0x29, 0x3f, 0x20, 0x75, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, + 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x64, + 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x46, 0x61, 0x73, 0x74, 0x29, 0x3f, + 0x20, 0x75, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x3a, + 0x20, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x3b, 0x0a, 0x09, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, + 0x6e, 0x74, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, + 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x3b, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x3c, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, + 0x64, 0x3b, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2b, 0x2b, + 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, + 0x20, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x71, 0x75, 0x69, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x6f, 0x6f, + 0x6c, 0x20, 0x72, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x52, 0x58, 0x5f, 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x28, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x52, 0x43, 0x41, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x52, 0x6f, 0x77, 0x73, 0x3b, 0x0a, + 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x66, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, + 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x66, 0x6f, + 0x72, 0x5f, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x63, + 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x65, + 0x63, 0x32, 0x20, 0x20, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x72, 0x63, 0x61, 0x5f, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x78, 0x64, + 0x63, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x2a, 0x20, 0x76, 0x65, + 0x63, 0x34, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, + 0x31, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x72, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, + 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, + 0x63, 0x61, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x2c, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2c, 0x20, + 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, + 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, + 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3c, 0x20, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2a, 0x20, 0x78, 0x64, 0x63, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x74, 0x63, 0x68, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x09, + 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, + 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x2d, 0x20, 0x72, 0x63, 0x61, 0x5f, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x72, + 0x78, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x78, 0x5f, 0x72, 0x6f, 0x77, + 0x73, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x5f, 0x61, + 0x72, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x61, 0x62, + 0x73, 0x28, 0x46, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x2a, 0x20, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x78, 0x20, 0x2f, 0x20, 0x61, + 0x62, 0x73, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, + 0x61, 0x5f, 0x61, 0x72, 0x67, 0x20, 0x3c, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x29, 0x20, 0x7b, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x69, 0x64, 0x78, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x2b, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x29, + 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, + 0x65, 0x28, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x29, 0x20, 0x2a, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x5f, 0x72, 0x66, 0x28, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, + 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x73, 0x69, + 0x64, 0x78, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, + 0x2b, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x28, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x7d, 0x0a, + 0x09, 0x7d, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x45, 0x52, 0x43, 0x55, 0x4c, 0x45, 0x53, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, + 0x20, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x74, 0x78, 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x71, 0x75, + 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x73, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x52, 0x58, 0x5f, + 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x28, 0x74, 0x78, 0x5f, 0x72, + 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x3d, + 0x3d, 0x20, 0x52, 0x43, 0x41, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x71, 0x75, + 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, + 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x63, 0x61, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, + 0x66, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x78, + 0x5f, 0x72, 0x78, 0x5f, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, + 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x20, 0x78, + 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x20, + 0x20, 0x3d, 0x20, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x0a, + 0x09, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x53, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x3b, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x3c, 0x20, 0x41, 0x63, + 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x20, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, + 0x69, 0x6e, 0x74, 0x20, 0x74, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3d, + 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x29, 0x20, 0x3f, 0x20, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, + 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x20, 0x2d, 0x20, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x29, 0x2e, 0x78, 0x20, + 0x3a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x23, 0x69, + 0x66, 0x20, 0x46, 0x61, 0x73, 0x74, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, + 0x6e, 0x74, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3d, 0x20, + 0x75, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x3b, 0x0a, 0x09, 0x09, 0x23, 0x65, 0x6c, + 0x73, 0x65, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x78, + 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x72, 0x78, + 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3c, 0x20, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x2b, 0x2b, 0x29, 0x0a, 0x09, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, + 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x09, 0x09, + 0x09, 0x69, 0x66, 0x20, 0x28, 0x72, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x2c, 0x20, 0x74, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x30, 0x29, + 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x74, 0x63, 0x68, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x09, + 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x74, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x2c, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x30, + 0x29, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x74, 0x63, 0x68, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, + 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x20, + 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28, 0x46, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x2a, 0x20, + 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, + 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x79, + 0x29, 0x20, 0x2f, 0x0a, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x62, 0x73, 0x28, 0x78, 0x64, 0x63, + 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x7a, 0x29, 0x29, + 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x20, 0x3c, + 0x20, 0x30, 0x2e, 0x35, 0x66, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, + 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x65, 0x28, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x29, 0x3b, + 0x0a, 0x09, 0x09, 0x09, 0x09, 0x2f, 0x2a, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x3a, 0x20, 0x74, 0x72, + 0x69, 0x62, 0x61, 0x6c, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x20, 0x2a, + 0x2f, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, + 0x69, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x3d, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x73, + 0x71, 0x72, 0x74, 0x28, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x64, 0x78, 0x20, 0x20, 0x3d, 0x20, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x28, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x2b, + 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, + 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x29, 0x3b, 0x0a, 0x09, + 0x09, 0x09, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x2a, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x28, 0x72, + 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x64, 0x78, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, + 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, + 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x52, 0x45, 0x53, + 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x28, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, + 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x46, 0x61, 0x73, + 0x74, 0x29, 0x3f, 0x20, 0x75, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, + 0x74, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x65, 0x6e, 0x64, + 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x46, 0x61, 0x73, 0x74, 0x29, 0x3f, + 0x20, 0x75, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x3a, + 0x20, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x0a, + 0x09, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, 0x78, 0x64, 0x63, 0x5f, + 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x78, + 0x64, 0x63, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x2a, 0x20, 0x76, + 0x65, 0x63, 0x34, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, + 0x20, 0x31, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, + 0x69, 0x6e, 0x74, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3d, + 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x3b, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x3c, 0x20, + 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x3b, 0x20, + 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, + 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, + 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x2e, 0x78, 0x7a, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x72, 0x78, 0x5f, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x2a, 0x20, 0x78, 0x64, 0x63, 0x5f, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x2c, 0x20, 0x30, + 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x5f, 0x61, 0x72, + 0x67, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28, 0x46, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, + 0x2a, 0x20, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2d, 0x20, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x20, 0x2a, 0x20, 0x78, 0x64, 0x63, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x70, 0x69, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x29, 0x20, 0x2f, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, + 0x62, 0x73, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x2e, 0x7a, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x61, 0x5f, + 0x61, 0x72, 0x67, 0x20, 0x3c, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, + 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x65, 0x28, 0x61, 0x5f, 0x61, + 0x72, 0x67, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, + 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x53, 0x70, 0x61, 0x72, + 0x73, 0x65, 0x3b, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x3c, 0x20, 0x41, + 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, + 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x09, + 0x09, 0x09, 0x09, 0x69, 0x6e, 0x74, 0x20, 0x20, 0x20, 0x74, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, + 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x29, 0x20, 0x3f, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, + 0x6f, 0x61, 0x64, 0x28, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x20, 0x2d, 0x20, + 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x29, 0x2e, 0x78, 0x20, 0x3a, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, 0x20, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, + 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x74, 0x63, 0x68, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, + 0x74, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x6f, + 0x72, 0x28, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2f, + 0x20, 0x32, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x64, 0x78, 0x20, + 0x20, 0x3d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x28, + 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x78, 0x64, 0x63, 0x5f, 0x77, 0x6f, 0x72, + 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, + 0x69, 0x74, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0x2b, 0x20, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x3b, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x6f, 0x64, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x66, 0x28, + 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x64, 0x78, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, + 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, + 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x29, 0x3b, 0x0a, 0x09, + 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, + 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x69, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x69, + 0x76, 0x65, 0x63, 0x33, 0x28, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, + 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x29, 0x3b, 0x0a, 0x09, 0x69, 0x66, + 0x20, 0x28, 0x21, 0x61, 0x6c, 0x6c, 0x28, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x28, + 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x28, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x74, 0x65, 0x78, 0x29, 0x29, 0x29, 0x29, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x3b, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x46, 0x61, 0x73, 0x74, 0x0a, 0x09, 0x52, 0x45, 0x53, + 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x52, + 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x6f, + 0x78, 0x65, 0x6c, 0x29, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x52, 0x45, + 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x75, 0x6d, 0x20, 0x3d, 0x20, + 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x30, 0x29, 0x3b, 0x0a, + 0x09, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x20, 0x2b, 0x3d, 0x20, 0x75, 0x5f, + 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3b, 0x0a, 0x23, 0x65, + 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, 0x77, 0x6f, 0x72, 0x6c, + 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x6f, 0x78, 0x65, 0x6c, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, + 0x34, 0x28, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x31, 0x29, 0x29, + 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x0a, 0x09, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, + 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x29, + 0x20, 0x7b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x3a, + 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x55, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x3a, 0x0a, + 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x73, 0x75, 0x6d, 0x20, 0x2b, 0x3d, 0x20, 0x46, 0x4f, 0x52, 0x43, + 0x45, 0x53, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x29, 0x3b, + 0x0a, 0x09, 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, + 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, + 0x48, 0x45, 0x52, 0x43, 0x55, 0x4c, 0x45, 0x53, 0x3a, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, + 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, + 0x55, 0x48, 0x45, 0x52, 0x43, 0x55, 0x4c, 0x45, 0x53, 0x3a, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, + 0x20, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, + 0x5f, 0x48, 0x45, 0x52, 0x4f, 0x5f, 0x50, 0x41, 0x3a, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x73, + 0x75, 0x6d, 0x20, 0x2b, 0x3d, 0x20, 0x48, 0x45, 0x52, 0x43, 0x55, 0x4c, 0x45, 0x53, 0x28, 0x77, + 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x62, + 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x41, 0x63, 0x71, 0x75, + 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x46, 0x6c, 0x61, 0x73, + 0x68, 0x3a, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x52, 0x43, 0x41, 0x5f, 0x54, 0x50, 0x57, + 0x3a, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x41, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x5f, 0x52, 0x43, 0x41, 0x5f, 0x56, 0x4c, 0x53, 0x3a, + 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x73, 0x75, 0x6d, 0x20, 0x2b, 0x3d, 0x20, 0x52, 0x43, 0x41, + 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x09, + 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x23, 0x69, 0x66, + 0x20, 0x43, 0x6f, 0x68, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x69, 0x6e, 0x67, 0x0a, 0x09, 0x09, 0x2f, 0x2a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6e, + 0x70, 0x29, 0x3a, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, + 0x68, 0x61, 0x74, 0x20, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x72, + 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x7e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, + 0x20, 0x2a, 0x2f, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x65, 0x6e, 0x6f, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x75, 0x6d, 0x5b, 0x52, 0x45, + 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5d, + 0x20, 0x2b, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x73, 0x75, 0x6d, 0x5b, 0x52, 0x45, 0x53, + 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5d, 0x20, + 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x73, 0x75, 0x6d, 0x29, 0x20, 0x2a, + 0x3d, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, + 0x53, 0x54, 0x28, 0x73, 0x75, 0x6d, 0x29, 0x20, 0x2f, 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x3b, 0x0a, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, + 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x75, 0x5f, 0x6f, 0x75, + 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x5f, + 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x54, 0x28, 0x73, 0x75, 0x6d, 0x29, 0x29, 0x3b, 0x0a, 0x7d, + 0x0a +}; + +read_only global u8 beamformer_shader_minmax_bytes[] = { + 0x2f, 0x2a, 0x20, 0x53, 0x65, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x3a, + 0x20, 0x44, 0x6f, 0x65, 0x73, 0x20, 0x61, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x33, 0x44, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x72, + 0x67, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x20, 0x2a, 0x2f, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x33, 0x32, 0x2c, 0x20, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x31, + 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x7a, 0x20, 0x3d, + 0x20, 0x33, 0x32, 0x29, 0x20, 0x69, 0x6e, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x28, 0x72, 0x67, 0x33, 0x32, 0x66, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x20, 0x75, + 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x33, 0x44, 0x20, 0x75, + 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x3b, 0x0a, 0x6c, + 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x67, 0x33, 0x32, 0x66, 0x2c, 0x20, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, + 0x6e, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x33, 0x44, 0x20, 0x75, 0x5f, 0x6d, 0x69, 0x70, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, + 0x65, 0x78, 0x3b, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, + 0x0a, 0x7b, 0x0a, 0x09, 0x69, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x67, 0x6c, 0x5f, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x69, 0x76, 0x65, 0x63, 0x33, 0x20, + 0x69, 0x64, 0x78, 0x20, 0x3d, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x20, + 0x2a, 0x20, 0x32, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, + 0x61, 0x78, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, + 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x32, + 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, + 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x6a, 0x20, 0x3c, 0x20, 0x32, + 0x3b, 0x20, 0x6a, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x65, 0x63, 0x32, + 0x20, 0x61, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, + 0x64, 0x28, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x65, 0x78, + 0x2c, 0x20, 0x69, 0x64, 0x78, 0x20, 0x2b, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x69, 0x2c, + 0x20, 0x6a, 0x2c, 0x20, 0x30, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76, + 0x65, 0x63, 0x32, 0x20, 0x62, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x64, 0x78, 0x20, 0x2b, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, + 0x28, 0x69, 0x2c, 0x20, 0x6a, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x09, + 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x6d, 0x69, + 0x6e, 0x28, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x2e, 0x78, 0x2c, 0x20, 0x6d, 0x69, 0x6e, + 0x28, 0x61, 0x2e, 0x78, 0x2c, 0x20, 0x62, 0x2e, 0x78, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, + 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, + 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x2e, 0x79, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x61, + 0x2e, 0x79, 0x2c, 0x20, 0x62, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, + 0x7d, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x75, 0x5f, + 0x6d, 0x69, 0x70, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x6f, 0x75, + 0x74, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x6d, 0x69, + 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x7d, + 0x0a +}; + +read_only global u8 beamformer_shader_sum_bytes[] = { + 0x2f, 0x2a, 0x20, 0x53, 0x65, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x33, 0x32, 0x2c, + 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x79, 0x20, 0x3d, 0x20, + 0x31, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x7a, 0x20, + 0x3d, 0x20, 0x33, 0x32, 0x29, 0x20, 0x69, 0x6e, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, + 0x74, 0x28, 0x72, 0x67, 0x33, 0x32, 0x66, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x33, 0x44, 0x20, + 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, + 0x74, 0x28, 0x72, 0x67, 0x33, 0x32, 0x66, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x20, + 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x33, 0x44, 0x20, + 0x75, 0x5f, 0x69, 0x6e, 0x5f, 0x69, 0x6d, 0x67, 0x3b, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, + 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x69, 0x76, 0x65, 0x63, 0x33, 0x20, + 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x67, 0x6c, + 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x44, 0x29, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x20, 0x20, 0x73, 0x75, 0x6d, + 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x75, + 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x2c, 0x20, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x29, + 0x20, 0x2b, 0x20, 0x75, 0x5f, 0x73, 0x75, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x20, 0x2a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x28, 0x75, 0x5f, + 0x69, 0x6e, 0x5f, 0x69, 0x6d, 0x67, 0x2c, 0x20, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x29, 0x3b, 0x0a, + 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x75, 0x5f, 0x6f, 0x75, + 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x2c, 0x20, 0x76, 0x6f, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x73, 0x75, + 0x6d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a +}; + +read_only global u8 beamformer_shader_render3d_bytes[] = { + 0x2f, 0x2a, 0x20, 0x53, 0x65, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x3a, 0x20, 0x20, 0x68, 0x20, 0x5b, 0x30, 0x2c, 0x33, 0x36, 0x30, 0x5d, 0x20, 0x7c, 0x20, 0x73, + 0x2c, 0x76, 0x20, 0x5b, 0x30, 0x2c, 0x20, 0x31, 0x5d, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x3a, 0x20, 0x72, 0x67, 0x62, 0x20, 0x5b, 0x30, 0x2c, 0x31, 0x5d, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, + 0x0a, 0x76, 0x65, 0x63, 0x33, 0x20, 0x68, 0x73, 0x76, 0x32, 0x72, 0x67, 0x62, 0x28, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x68, 0x73, 0x76, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, + 0x6b, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x35, 0x2c, 0x20, + 0x33, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x68, 0x73, 0x76, 0x2e, 0x78, 0x20, 0x2f, 0x20, + 0x36, 0x30, 0x2c, 0x20, 0x36, 0x29, 0x3b, 0x0a, 0x09, 0x6b, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, + 0x28, 0x6d, 0x69, 0x6e, 0x28, 0x6d, 0x69, 0x6e, 0x28, 0x6b, 0x2c, 0x20, 0x34, 0x20, 0x2d, 0x20, + 0x6b, 0x29, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x20, 0x68, 0x73, 0x76, 0x2e, 0x7a, 0x20, 0x2d, 0x20, 0x68, 0x73, 0x76, 0x2e, + 0x7a, 0x20, 0x2a, 0x20, 0x68, 0x73, 0x76, 0x2e, 0x79, 0x20, 0x2a, 0x20, 0x6b, 0x3b, 0x0a, 0x7d, + 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x28, 0x72, 0x6e, 0x70, 0x29, 0x3a, 0x20, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x3a, 0x20, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x69, 0x71, 0x75, 0x69, 0x6c, 0x65, 0x7a, 0x6c, 0x65, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x2f, 0x64, 0x69, + 0x73, 0x74, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x2a, 0x2f, 0x0a, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x64, 0x66, 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x62, 0x6f, + 0x78, 0x5f, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x28, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, + 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x62, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x65, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28, 0x70, 0x29, + 0x20, 0x2d, 0x20, 0x62, 0x3b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, 0x71, 0x20, 0x3d, 0x20, + 0x61, 0x62, 0x73, 0x28, 0x70, 0x20, 0x2b, 0x20, 0x65, 0x29, 0x20, 0x2d, 0x20, 0x65, 0x3b, 0x0a, + 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, + 0x6d, 0x69, 0x6e, 0x28, 0x6d, 0x69, 0x6e, 0x28, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x6d, + 0x61, 0x78, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x70, 0x2e, 0x78, 0x2c, 0x20, 0x71, 0x2e, 0x79, + 0x2c, 0x20, 0x71, 0x2e, 0x7a, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x29, 0x2c, 0x0a, 0x09, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x6d, 0x61, + 0x78, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x71, 0x2e, 0x78, 0x2c, 0x20, 0x70, 0x2e, 0x79, 0x2c, + 0x20, 0x71, 0x2e, 0x7a, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x29, 0x29, 0x2c, 0x0a, 0x09, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x6d, 0x61, + 0x78, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x71, 0x2e, 0x78, 0x2c, 0x20, 0x71, 0x2e, 0x79, 0x2c, + 0x20, 0x70, 0x2e, 0x7a, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x09, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, + 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, + 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5f, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x78, 0x79, 0x29, 0x3b, 0x0a, + 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x5f, 0x76, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x77, 0x28, 0x31, 0x30, 0x2e, 0x30, 0x66, + 0x2c, 0x20, 0x75, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x20, 0x2f, 0x20, + 0x32, 0x30, 0x2e, 0x30, 0x66, 0x29, 0x3b, 0x0a, 0x09, 0x73, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x63, + 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x73, 0x6d, 0x70, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, 0x20, + 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x29, 0x3b, 0x0a, + 0x09, 0x73, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6d, 0x70, 0x20, 0x2f, 0x20, 0x74, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x3b, 0x0a, 0x09, 0x73, 0x6d, 0x70, + 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x77, 0x28, 0x73, 0x6d, 0x70, 0x2c, 0x20, 0x75, 0x5f, 0x67, 0x61, + 0x6d, 0x6d, 0x61, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x74, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x2e, 0x79, 0x3b, 0x0a, 0x09, + 0x2f, 0x2f, 0x73, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6d, 0x70, 0x20, 0x2a, 0x20, 0x73, 0x6d, + 0x6f, 0x6f, 0x74, 0x68, 0x73, 0x74, 0x65, 0x70, 0x28, 0x2d, 0x30, 0x2e, 0x34, 0x2c, 0x20, 0x31, + 0x2e, 0x31, 0x2c, 0x20, 0x74, 0x29, 0x20, 0x2a, 0x20, 0x75, 0x5f, 0x67, 0x61, 0x69, 0x6e, 0x3b, + 0x0a, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x63, 0x61, + 0x6c, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x73, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x32, 0x30, + 0x20, 0x2a, 0x20, 0x6c, 0x6f, 0x67, 0x28, 0x73, 0x6d, 0x70, 0x29, 0x20, 0x2f, 0x20, 0x6c, 0x6f, + 0x67, 0x28, 0x31, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x73, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x63, + 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x73, 0x6d, 0x70, 0x2c, 0x20, 0x2d, 0x75, 0x5f, 0x64, 0x62, 0x5f, + 0x63, 0x75, 0x74, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x29, 0x20, 0x2f, 0x20, 0x2d, 0x75, 0x5f, + 0x64, 0x62, 0x5f, 0x63, 0x75, 0x74, 0x6f, 0x66, 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x73, 0x6d, 0x70, + 0x20, 0x3d, 0x20, 0x31, 0x20, 0x2d, 0x20, 0x73, 0x6d, 0x70, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, + 0x09, 0x76, 0x65, 0x63, 0x33, 0x20, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x66, 0x20, + 0x2a, 0x20, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x66, + 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, + 0x6d, 0x70, 0x28, 0x73, 0x64, 0x66, 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x62, 0x6f, 0x78, 0x5f, + 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x28, 0x70, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, + 0x31, 0x2e, 0x30, 0x66, 0x29, 0x2c, 0x20, 0x75, 0x5f, 0x62, 0x62, 0x5f, 0x66, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x2f, 0x20, 0x75, 0x5f, 0x62, 0x62, 0x5f, 0x66, 0x72, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0x0a, 0x0a, 0x09, + 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, + 0x34, 0x28, 0x74, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x73, 0x6d, 0x70, 0x29, 0x20, + 0x2b, 0x20, 0x28, 0x31, 0x20, 0x2d, 0x20, 0x74, 0x29, 0x20, 0x2a, 0x20, 0x75, 0x5f, 0x62, 0x62, + 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x31, 0x29, 0x3b, + 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5f, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x5f, 0x62, 0x62, + 0x29, 0x20, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, + 0x5f, 0x62, 0x62, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, + 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, + 0x34, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x6f, + 0x64, 0x28, 0x75, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x29, + 0x2e, 0x79, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0x0a, 0x09, 0x2f, + 0x2f, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, + 0x63, 0x34, 0x28, 0x61, 0x62, 0x73, 0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, + 0x31, 0x29, 0x3b, 0x0a, 0x09, 0x2f, 0x2f, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x75, + 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x31, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x31, + 0x2c, 0x20, 0x73, 0x6d, 0x70, 0x29, 0x3b, 0x0a, 0x09, 0x2f, 0x2f, 0x6f, 0x75, 0x74, 0x5f, 0x63, + 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x73, 0x6d, 0x70, + 0x20, 0x2a, 0x20, 0x61, 0x62, 0x73, 0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, + 0x31, 0x29, 0x3b, 0x0a, 0x7d, 0x0a +}; + +read_only global s8 beamformer_shader_data[] = { + {.data = beamformer_shader_decode_bytes, .len = countof(beamformer_shader_decode_bytes)}, + {.data = beamformer_shader_filter_bytes, .len = countof(beamformer_shader_filter_bytes)}, + {.data = beamformer_shader_das_bytes, .len = countof(beamformer_shader_das_bytes)}, + {.data = beamformer_shader_minmax_bytes, .len = countof(beamformer_shader_minmax_bytes)}, + {.data = beamformer_shader_sum_bytes, .len = countof(beamformer_shader_sum_bytes)}, + {.data = beamformer_shader_render3d_bytes, .len = countof(beamformer_shader_render3d_bytes)}, +}; + diff --git a/static.c b/static.c @@ -421,19 +421,22 @@ setup_beamformer(Arena *memory, BeamformerCtx **o_ctx, BeamformerInput **o_input glEnable(GL_DEBUG_OUTPUT); #endif - for EachElement(beamformer_reloadable_compute_shader_info_indices, it) { - i32 index = beamformer_reloadable_compute_shader_info_indices[it]; - Arena temp = scratch; - s8 file = push_s8_from_parts(&temp, s8(OS_PATH_SEPARATOR), s8("shaders"), - beamformer_reloadable_shader_files[index]); - - BeamformerShaderReloadIndirectContext *rsi = push_struct(memory, typeof(*rsi)); - rsi->beamformer = ctx; - rsi->shader = beamformer_reloadable_shader_kinds[index]; - os_add_file_watch(&ctx->os, memory, file, reload_shader_indirect, (iptr)rsi); - reload_shader_indirect(&ctx->os, file, (iptr)rsi, *memory); + if (!BakeShaders) + { + for EachElement(beamformer_reloadable_compute_shader_info_indices, it) { + i32 index = beamformer_reloadable_compute_shader_info_indices[it]; + Arena temp = scratch; + s8 file = push_s8_from_parts(&temp, s8(OS_PATH_SEPARATOR), s8("shaders"), + beamformer_reloadable_shader_files[index]); + + BeamformerShaderReloadIndirectContext *rsi = push_struct(memory, typeof(*rsi)); + rsi->beamformer = ctx; + rsi->shader = beamformer_reloadable_shader_kinds[index]; + os_add_file_watch(&ctx->os, memory, file, reload_shader_indirect, (iptr)rsi); + reload_shader_indirect(&ctx->os, file, (iptr)rsi, *memory); + } + os_wake_waiters(&worker->sync_variable); } - os_wake_waiters(&worker->sync_variable); FrameViewRenderContext *fvr = &ctx->frame_view_render_context; glCreateFramebuffers(countof(fvr->framebuffers), fvr->framebuffers); @@ -451,9 +454,8 @@ setup_beamformer(Arena *memory, BeamformerCtx **o_ctx, BeamformerInput **o_input "only a single render shader is currently handled"); i32 render_rsi_index = beamformer_reloadable_render_shader_info_indices[0]; - s8 render_file = push_s8_from_parts(&scratch, s8(OS_PATH_SEPARATOR), s8("shaders"), - beamformer_reloadable_shader_files[render_rsi_index]); - ShaderReloadContext *render_3d = push_struct(memory, typeof(*render_3d)); + Arena *arena = BakeShaders? &scratch : memory; + ShaderReloadContext *render_3d = push_struct(arena, typeof(*render_3d)); render_3d->beamformer_context = ctx; render_3d->reloadable_info_index = render_rsi_index; render_3d->gl_type = GL_FRAGMENT_SHADER; @@ -472,7 +474,7 @@ setup_beamformer(Arena *memory, BeamformerCtx **o_ctx, BeamformerInput **o_input "\n" "layout(binding = 0) uniform sampler3D u_texture;\n"); - render_3d->link = push_struct(memory, typeof(*render_3d)); + render_3d->link = push_struct(arena, typeof(*render_3d)); render_3d->link->reloadable_info_index = -1; render_3d->link->gl_type = GL_VERTEX_SHADER; render_3d->link->link = render_3d; @@ -501,8 +503,14 @@ setup_beamformer(Arena *memory, BeamformerCtx **o_ctx, BeamformerInput **o_input "\tf_normal = v_normal;\n" "\tgl_Position = u_projection * u_view * u_model * vec4(pos, 1);\n" "}\n"); + + s8 render_file = {0}; + if (!BakeShaders) { + render_file = push_s8_from_parts(&scratch, s8(OS_PATH_SEPARATOR), s8("shaders"), + beamformer_reloadable_shader_files[render_rsi_index]); + os_add_file_watch(&ctx->os, memory, render_file, reload_shader, (iptr)render_3d); + } reload_shader(&ctx->os, render_file, (iptr)render_3d, *memory); - os_add_file_watch(&ctx->os, memory, render_file, reload_shader, (iptr)render_3d); f32 unit_cube_vertices[] = { 0.5f, 0.5f, -0.5f,