diff --git a/src/shaders/jai/shader_particle.jai b/src/shaders/jai/shader_particle.jai new file mode 100644 index 0000000..9d9b3e3 --- /dev/null +++ b/src/shaders/jai/shader_particle.jai @@ -0,0 +1,637 @@ +/* + #version:1# (machine generated, don't edit!) + + Generated by sokol-shdc (https://github.com/floooh/sokol-tools) + + Cmdline: + sokol-shdc -i shader_particle.glsl -o ./jai/shader_particle.jai -l glsl430:glsl300es:metal_macos -f sokol_jai + + Overview: + ========= + Shader program: 'particle': + Get shader desc: particle_shader_desc(sg_query_backend()) + Vertex Shader: vs_particle + Fragment Shader: fs_particle + Attributes: + ATTR_particle_position => 0 + ATTR_particle_inst_pos_size => 1 + ATTR_particle_inst_uv_rect => 2 + ATTR_particle_inst_color => 3 + Bindings: + Uniform block 'particle_vs_params': + Jai struct: Particle_Vs_Params + Bind slot: UB_particle_vs_params => 0 + Image 'particle_sprite': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: IMG_particle_sprite => 0 + Sampler 'particle_spritesmp': + Type: .FILTERING + Bind slot: SMP_particle_spritesmp => 0 +*/ +ATTR_particle_position :: 0; +ATTR_particle_inst_pos_size :: 1; +ATTR_particle_inst_uv_rect :: 2; +ATTR_particle_inst_color :: 3; +UB_particle_vs_params :: 0; +IMG_particle_sprite :: 0; +SMP_particle_spritesmp :: 0; +Particle_Vs_Params :: struct { + mvp: [16]float; + cam: [3]float; + _: [4]u8; +}; +/* + #version 430 + + uniform vec4 particle_vs_params[5]; + layout(location = 1) in vec4 inst_pos_size; + layout(location = 0) in vec3 position; + layout(location = 0) out vec2 uv_in; + layout(location = 2) in vec4 inst_uv_rect; + layout(location = 1) out vec4 color_in; + layout(location = 3) in vec4 inst_color; + + void main() + { + vec3 _53 = inst_pos_size.xyz - particle_vs_params[4].xyz; + _53.y = 0.0; + vec3 look_dir = _53; + if (length(_53) < 9.9999997473787516355514526367188e-05) + { + look_dir = vec3(1.0, 0.0, 0.0); + } + vec3 _63 = look_dir; + vec3 _64 = normalize(_63); + look_dir = _64; + gl_Position = mat4(particle_vs_params[0], particle_vs_params[1], particle_vs_params[2], particle_vs_params[3]) * vec4((inst_pos_size.xyz + (normalize(cross(vec3(0.0, 1.0, 0.0), _64)) * ((position.x - 0.5) * inst_pos_size.w))) + (vec3(0.0, 1.0, 0.0) * (position.y * inst_pos_size.w)), 1.0); + uv_in = vec2(inst_uv_rect.x + (position.x * inst_uv_rect.z), inst_uv_rect.y + (position.y * inst_uv_rect.w)); + color_in = inst_color; + } + +*/ +vs_particle_source_glsl430 := u8.[ + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, + 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x74,0x69, + 0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x35,0x5d, + 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, + 0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x69, + 0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x3b,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x6f,0x73,0x69,0x74, + 0x69,0x6f,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x32,0x20,0x75,0x76,0x5f,0x69,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72, + 0x65,0x63,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x69,0x6e,0x3b,0x0a,0x6c,0x61,0x79, + 0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33, + 0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63, + 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e, + 0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x35, + 0x33,0x20,0x3d,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a, + 0x65,0x2e,0x78,0x79,0x7a,0x20,0x2d,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65, + 0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x2e,0x78,0x79, + 0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x35,0x33,0x2e,0x79,0x20,0x3d,0x20,0x30, + 0x2e,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x6c,0x6f,0x6f, + 0x6b,0x5f,0x64,0x69,0x72,0x20,0x3d,0x20,0x5f,0x35,0x33,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x69,0x66,0x20,0x28,0x6c,0x65,0x6e,0x67,0x74,0x68,0x28,0x5f,0x35,0x33,0x29, + 0x20,0x3c,0x20,0x39,0x2e,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x34,0x37,0x33,0x37, + 0x38,0x37,0x35,0x31,0x36,0x33,0x35,0x35,0x35,0x31,0x34,0x35,0x32,0x36,0x33,0x36, + 0x37,0x31,0x38,0x38,0x65,0x2d,0x30,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72, + 0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30, + 0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20, + 0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x33,0x20,0x3d,0x20,0x6c,0x6f,0x6f, + 0x6b,0x5f,0x64,0x69,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, + 0x5f,0x36,0x34,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28, + 0x5f,0x36,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64, + 0x69,0x72,0x20,0x3d,0x20,0x5f,0x36,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c, + 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34, + 0x28,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65, + 0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x70, + 0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x5b,0x32,0x5d,0x2c,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76, + 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x76, + 0x65,0x63,0x34,0x28,0x28,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69, + 0x7a,0x65,0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,0x28,0x6e,0x6f,0x72,0x6d,0x61,0x6c, + 0x69,0x7a,0x65,0x28,0x63,0x72,0x6f,0x73,0x73,0x28,0x76,0x65,0x63,0x33,0x28,0x30, + 0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x2c,0x20,0x5f, + 0x36,0x34,0x29,0x29,0x20,0x2a,0x20,0x28,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x2e,0x78,0x20,0x2d,0x20,0x30,0x2e,0x35,0x29,0x20,0x2a,0x20,0x69,0x6e,0x73, + 0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x2e,0x77,0x29,0x29,0x29,0x20, + 0x2b,0x20,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30, + 0x2c,0x20,0x30,0x2e,0x30,0x29,0x20,0x2a,0x20,0x28,0x70,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x2e,0x79,0x20,0x2a,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f, + 0x73,0x69,0x7a,0x65,0x2e,0x77,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x75,0x76,0x5f,0x69,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x32, + 0x28,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x78,0x20, + 0x2b,0x20,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2a,0x20, + 0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x7a,0x29,0x2c, + 0x20,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x79,0x20, + 0x2b,0x20,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x2a,0x20, + 0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x77,0x29,0x29, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x69,0x6e,0x20,0x3d, + 0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a, + 0x00, +]; +/* + #version 430 + + layout(binding = 16) uniform sampler2D particle_sprite_particle_spritesmp; + + layout(location = 0) in vec2 uv_in; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color_in; + + void main() + { + vec2 _12 = uv_in; + _12.y = 1.0 - _12.y; + vec4 _35 = texture(particle_sprite_particle_spritesmp, _12); + if (_35.w < 0.00999999977648258209228515625) + { + discard; + } + color = _35 * color_in; + } + +*/ +fs_particle_source_glsl430 := u8.[ + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x31, + 0x36,0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c, + 0x65,0x72,0x32,0x44,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70, + 0x72,0x69,0x74,0x65,0x5f,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70, + 0x72,0x69,0x74,0x65,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x5f,0x69,0x6e,0x3b,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69, + 0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x69,0x6e,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, + 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x32,0x20,0x5f,0x31,0x32,0x20,0x3d,0x20,0x75,0x76,0x5f,0x69,0x6e,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x5f,0x31,0x32,0x2e,0x79,0x20,0x3d,0x20,0x31,0x2e,0x30,0x20,0x2d, + 0x20,0x5f,0x31,0x32,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34, + 0x20,0x5f,0x33,0x35,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x70, + 0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70,0x72,0x69,0x74,0x65,0x5f,0x70, + 0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70,0x72,0x69,0x74,0x65,0x73,0x6d, + 0x70,0x2c,0x20,0x5f,0x31,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20, + 0x28,0x5f,0x33,0x35,0x2e,0x77,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x37,0x37,0x36,0x34,0x38,0x32,0x35,0x38,0x32,0x30,0x39,0x32, + 0x32,0x38,0x35,0x31,0x35,0x36,0x32,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x63,0x61,0x72,0x64,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x3d,0x20,0x5f,0x33,0x35,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x69, + 0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +]; +/* + #version 300 es + + uniform vec4 particle_vs_params[5]; + layout(location = 1) in vec4 inst_pos_size; + layout(location = 0) in vec3 position; + out vec2 uv_in; + layout(location = 2) in vec4 inst_uv_rect; + out vec4 color_in; + layout(location = 3) in vec4 inst_color; + + void main() + { + vec3 _53 = inst_pos_size.xyz - particle_vs_params[4].xyz; + _53.y = 0.0; + vec3 look_dir = _53; + if (length(_53) < 9.9999997473787516355514526367188e-05) + { + look_dir = vec3(1.0, 0.0, 0.0); + } + vec3 _63 = look_dir; + vec3 _64 = normalize(_63); + look_dir = _64; + gl_Position = mat4(particle_vs_params[0], particle_vs_params[1], particle_vs_params[2], particle_vs_params[3]) * vec4((inst_pos_size.xyz + (normalize(cross(vec3(0.0, 1.0, 0.0), _64)) * ((position.x - 0.5) * inst_pos_size.w))) + (vec3(0.0, 1.0, 0.0) * (position.y * inst_pos_size.w)), 1.0); + uv_in = vec2(inst_uv_rect.x + (position.x * inst_uv_rect.z), inst_uv_rect.y + (position.y * inst_uv_rect.w)); + color_in = inst_color; + } + +*/ +vs_particle_source_glsl300es := u8.[ + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, + 0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61, + 0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, + 0x5b,0x35,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x3b, + 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x6f, + 0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32, + 0x20,0x75,0x76,0x5f,0x69,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63, + 0x74,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x5f,0x69,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63, + 0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20,0x76,0x65, + 0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x35,0x33,0x20,0x3d,0x20,0x69,0x6e,0x73, + 0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x2e,0x78,0x79,0x7a,0x20,0x2d, + 0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x34,0x5d,0x2e,0x78,0x79,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x5f,0x35,0x33,0x2e,0x79,0x20,0x3d,0x20,0x30,0x2e,0x30,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x76,0x65,0x63,0x33,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72,0x20,0x3d, + 0x20,0x5f,0x35,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x6c,0x65, + 0x6e,0x67,0x74,0x68,0x28,0x5f,0x35,0x33,0x29,0x20,0x3c,0x20,0x39,0x2e,0x39,0x39, + 0x39,0x39,0x39,0x39,0x37,0x34,0x37,0x33,0x37,0x38,0x37,0x35,0x31,0x36,0x33,0x35, + 0x35,0x35,0x31,0x34,0x35,0x32,0x36,0x33,0x36,0x37,0x31,0x38,0x38,0x65,0x2d,0x30, + 0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x33, + 0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, + 0x5f,0x36,0x33,0x20,0x3d,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x34,0x20,0x3d,0x20,0x6e, + 0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x5f,0x36,0x33,0x29,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72,0x20,0x3d,0x20,0x5f,0x36, + 0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x70,0x61,0x72,0x74,0x69,0x63, + 0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c, + 0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65, + 0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x70, + 0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x69,0x6e, + 0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x2e,0x78,0x79,0x7a,0x20, + 0x2b,0x20,0x28,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x63,0x72,0x6f, + 0x73,0x73,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30, + 0x2c,0x20,0x30,0x2e,0x30,0x29,0x2c,0x20,0x5f,0x36,0x34,0x29,0x29,0x20,0x2a,0x20, + 0x28,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2d,0x20,0x30, + 0x2e,0x35,0x29,0x20,0x2a,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73, + 0x69,0x7a,0x65,0x2e,0x77,0x29,0x29,0x29,0x20,0x2b,0x20,0x28,0x76,0x65,0x63,0x33, + 0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x20, + 0x2a,0x20,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x2a,0x20, + 0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x2e,0x77,0x29, + 0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x5f, + 0x69,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x28,0x69,0x6e,0x73,0x74,0x5f,0x75, + 0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x78,0x20,0x2b,0x20,0x28,0x70,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2a,0x20,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76, + 0x5f,0x72,0x65,0x63,0x74,0x2e,0x7a,0x29,0x2c,0x20,0x69,0x6e,0x73,0x74,0x5f,0x75, + 0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x79,0x20,0x2b,0x20,0x28,0x70,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x2a,0x20,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76, + 0x5f,0x72,0x65,0x63,0x74,0x2e,0x77,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63, + 0x6f,0x6c,0x6f,0x72,0x5f,0x69,0x6e,0x20,0x3d,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63, + 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +]; +/* + #version 300 es + precision mediump float; + precision highp int; + + uniform highp sampler2D particle_sprite_particle_spritesmp; + + in highp vec2 uv_in; + layout(location = 0) out highp vec4 color; + in highp vec4 color_in; + + void main() + { + highp vec2 _12 = uv_in; + _12.y = 1.0 - _12.y; + highp vec4 _35 = texture(particle_sprite_particle_spritesmp, _12); + if (_35.w < 0.00999999977648258209228515625) + { + discard; + } + color = _35 * color_in; + } + +*/ +fs_particle_source_glsl300es := u8.[ + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, + 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, + 0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69, + 0x6f,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x69,0x6e,0x74,0x3b,0x0a,0x0a,0x75, + 0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x73,0x61,0x6d, + 0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f, + 0x73,0x70,0x72,0x69,0x74,0x65,0x5f,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f, + 0x73,0x70,0x72,0x69,0x74,0x65,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x69,0x6e,0x20,0x68, + 0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x5f,0x69,0x6e,0x3b, + 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x68,0x69,0x67,0x68,0x70,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x68, + 0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f, + 0x69,0x6e,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29, + 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63, + 0x32,0x20,0x5f,0x31,0x32,0x20,0x3d,0x20,0x75,0x76,0x5f,0x69,0x6e,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x5f,0x31,0x32,0x2e,0x79,0x20,0x3d,0x20,0x31,0x2e,0x30,0x20,0x2d, + 0x20,0x5f,0x31,0x32,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68, + 0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x33,0x35,0x20,0x3d,0x20,0x74,0x65,0x78, + 0x74,0x75,0x72,0x65,0x28,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70, + 0x72,0x69,0x74,0x65,0x5f,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70, + 0x72,0x69,0x74,0x65,0x73,0x6d,0x70,0x2c,0x20,0x5f,0x31,0x32,0x29,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x33,0x35,0x2e,0x77,0x20,0x3c,0x20,0x30, + 0x2e,0x30,0x30,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x37,0x36,0x34,0x38,0x32, + 0x35,0x38,0x32,0x30,0x39,0x32,0x32,0x38,0x35,0x31,0x35,0x36,0x32,0x35,0x29,0x0a, + 0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x69, + 0x73,0x63,0x61,0x72,0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x5f,0x33,0x35,0x20,0x2a,0x20,0x63, + 0x6f,0x6c,0x6f,0x72,0x5f,0x69,0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +]; +/* + #include + #include + + using namespace metal; + + struct particle_vs_params + { + float4x4 mvp; + float3 cam; + }; + + struct main0_out + { + float2 uv_in [[user(locn0)]]; + float4 color_in [[user(locn1)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float3 position [[attribute(0)]]; + float4 inst_pos_size [[attribute(1)]]; + float4 inst_uv_rect [[attribute(2)]]; + float4 inst_color [[attribute(3)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant particle_vs_params& _47 [[buffer(0)]]) + { + main0_out out = {}; + float3 _53 = in.inst_pos_size.xyz - _47.cam; + _53.y = 0.0; + float3 look_dir = _53; + if (length(_53) < 9.9999997473787516355514526367188e-05) + { + look_dir = float3(1.0, 0.0, 0.0); + } + float3 _63 = look_dir; + float3 _64 = fast::normalize(_63); + look_dir = _64; + out.gl_Position = _47.mvp * float4((in.inst_pos_size.xyz + (fast::normalize(cross(float3(0.0, 1.0, 0.0), _64)) * ((in.position.x - 0.5) * in.inst_pos_size.w))) + (float3(0.0, 1.0, 0.0) * (in.position.y * in.inst_pos_size.w)), 1.0); + out.uv_in = float2(in.inst_uv_rect.x + (in.position.x * in.inst_uv_rect.z), in.inst_uv_rect.y + (in.position.y * in.inst_uv_rect.w)); + out.color_in = in.inst_color; + return out; + } + +*/ +vs_particle_source_metal_macos := u8.[ + 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, + 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, + 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, + 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, + 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x70, + 0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x78,0x34, + 0x20,0x6d,0x76,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33, + 0x20,0x63,0x61,0x6d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74, + 0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x5f,0x69,0x6e,0x20,0x5b,0x5b, + 0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f, + 0x69,0x6e,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x31,0x29, + 0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67, + 0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x5b,0x5b,0x70,0x6f,0x73, + 0x69,0x74,0x69,0x6f,0x6e,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72, + 0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x0a,0x7b,0x0a,0x20, + 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x30, + 0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20, + 0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x20,0x5b,0x5b, + 0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x31,0x29,0x5d,0x5d,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f, + 0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62, + 0x75,0x74,0x65,0x28,0x32,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20, + 0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x33,0x29,0x5d,0x5d, + 0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x65,0x72,0x74,0x65,0x78,0x20,0x6d,0x61,0x69, + 0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x28,0x6d,0x61,0x69, + 0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,0x74,0x61,0x67,0x65, + 0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20, + 0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, + 0x6d,0x73,0x26,0x20,0x5f,0x34,0x37,0x20,0x5b,0x5b,0x62,0x75,0x66,0x66,0x65,0x72, + 0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x69, + 0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x35,0x33,0x20, + 0x3d,0x20,0x69,0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69, + 0x7a,0x65,0x2e,0x78,0x79,0x7a,0x20,0x2d,0x20,0x5f,0x34,0x37,0x2e,0x63,0x61,0x6d, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x35,0x33,0x2e,0x79,0x20,0x3d,0x20,0x30,0x2e, + 0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x6c,0x6f, + 0x6f,0x6b,0x5f,0x64,0x69,0x72,0x20,0x3d,0x20,0x5f,0x35,0x33,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x69,0x66,0x20,0x28,0x6c,0x65,0x6e,0x67,0x74,0x68,0x28,0x5f,0x35,0x33, + 0x29,0x20,0x3c,0x20,0x39,0x2e,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x34,0x37,0x33, + 0x37,0x38,0x37,0x35,0x31,0x36,0x33,0x35,0x35,0x35,0x31,0x34,0x35,0x32,0x36,0x33, + 0x36,0x37,0x31,0x38,0x38,0x65,0x2d,0x30,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69, + 0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x2c,0x20, + 0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, + 0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x36,0x33,0x20, + 0x3d,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x36,0x34,0x20,0x3d,0x20,0x66,0x61,0x73, + 0x74,0x3a,0x3a,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x5f,0x36,0x33, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x5f,0x64,0x69,0x72,0x20, + 0x3d,0x20,0x5f,0x36,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x67, + 0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x5f,0x34,0x37, + 0x2e,0x6d,0x76,0x70,0x20,0x2a,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x69, + 0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x2e, + 0x78,0x79,0x7a,0x20,0x2b,0x20,0x28,0x66,0x61,0x73,0x74,0x3a,0x3a,0x6e,0x6f,0x72, + 0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x63,0x72,0x6f,0x73,0x73,0x28,0x66,0x6c,0x6f, + 0x61,0x74,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e, + 0x30,0x29,0x2c,0x20,0x5f,0x36,0x34,0x29,0x29,0x20,0x2a,0x20,0x28,0x28,0x69,0x6e, + 0x2e,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2d,0x20,0x30,0x2e, + 0x35,0x29,0x20,0x2a,0x20,0x69,0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73, + 0x5f,0x73,0x69,0x7a,0x65,0x2e,0x77,0x29,0x29,0x29,0x20,0x2b,0x20,0x28,0x66,0x6c, + 0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30, + 0x2e,0x30,0x29,0x20,0x2a,0x20,0x28,0x69,0x6e,0x2e,0x70,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x2e,0x79,0x20,0x2a,0x20,0x69,0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x70, + 0x6f,0x73,0x5f,0x73,0x69,0x7a,0x65,0x2e,0x77,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x75,0x76,0x5f,0x69,0x6e, + 0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x69,0x6e,0x2e,0x69,0x6e,0x73, + 0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x78,0x20,0x2b,0x20,0x28,0x69, + 0x6e,0x2e,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2a,0x20,0x69, + 0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x7a, + 0x29,0x2c,0x20,0x69,0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x75,0x76,0x5f,0x72,0x65, + 0x63,0x74,0x2e,0x79,0x20,0x2b,0x20,0x28,0x69,0x6e,0x2e,0x70,0x6f,0x73,0x69,0x74, + 0x69,0x6f,0x6e,0x2e,0x79,0x20,0x2a,0x20,0x69,0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f, + 0x75,0x76,0x5f,0x72,0x65,0x63,0x74,0x2e,0x77,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x6f,0x75,0x74,0x2e,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x69,0x6e,0x20,0x3d,0x20, + 0x69,0x6e,0x2e,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d, + 0x0a,0x0a,0x00, +]; +/* + #include + #include + + using namespace metal; + + struct main0_out + { + float4 color [[color(0)]]; + }; + + struct main0_in + { + float2 uv_in [[user(locn0)]]; + float4 color_in [[user(locn1)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]], texture2d particle_sprite [[texture(0)]], sampler particle_spritesmp [[sampler(0)]]) + { + main0_out out = {}; + float2 _12 = in.uv_in; + _12.y = 1.0 - _12.y; + float4 _35 = particle_sprite.sample(particle_spritesmp, _12); + if (_35.w < 0.00999999977648258209228515625) + { + discard_fragment(); + } + out.color = _35 * in.color_in; + return out; + } + +*/ +fs_particle_source_metal_macos := u8.[ + 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, + 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, + 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, + 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, + 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d, + 0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x5b,0x5b,0x63,0x6f, + 0x6c,0x6f,0x72,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74, + 0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x5f,0x69,0x6e, + 0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,0x29,0x5d,0x5d, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c, + 0x6f,0x72,0x5f,0x69,0x6e,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63, + 0x6e,0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d, + 0x65,0x6e,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61, + 0x69,0x6e,0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20, + 0x5b,0x5b,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x74,0x65, + 0x78,0x74,0x75,0x72,0x65,0x32,0x64,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x3e,0x20,0x70, + 0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70,0x72,0x69,0x74,0x65,0x20,0x5b, + 0x5b,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x30,0x29,0x5d,0x5d,0x2c,0x20,0x73, + 0x61,0x6d,0x70,0x6c,0x65,0x72,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f, + 0x73,0x70,0x72,0x69,0x74,0x65,0x73,0x6d,0x70,0x20,0x5b,0x5b,0x73,0x61,0x6d,0x70, + 0x6c,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, + 0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,0x3d,0x20, + 0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x5f, + 0x31,0x32,0x20,0x3d,0x20,0x69,0x6e,0x2e,0x75,0x76,0x5f,0x69,0x6e,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x5f,0x31,0x32,0x2e,0x79,0x20,0x3d,0x20,0x31,0x2e,0x30,0x20,0x2d, + 0x20,0x5f,0x31,0x32,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x34,0x20,0x5f,0x33,0x35,0x20,0x3d,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x6c, + 0x65,0x5f,0x73,0x70,0x72,0x69,0x74,0x65,0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28, + 0x70,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x5f,0x73,0x70,0x72,0x69,0x74,0x65,0x73, + 0x6d,0x70,0x2c,0x20,0x5f,0x31,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66, + 0x20,0x28,0x5f,0x33,0x35,0x2e,0x77,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x37,0x37,0x36,0x34,0x38,0x32,0x35,0x38,0x32,0x30,0x39, + 0x32,0x32,0x38,0x35,0x31,0x35,0x36,0x32,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x63,0x61,0x72,0x64, + 0x5f,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x3d,0x20,0x5f,0x33,0x35,0x20,0x2a,0x20,0x69,0x6e,0x2e,0x63,0x6f,0x6c,0x6f, + 0x72,0x5f,0x69,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e, + 0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +]; +particle_shader_desc :: (backend: sg_backend) -> sg_shader_desc { + desc: sg_shader_desc; + desc.label = "particle_shader"; + if backend == { + case .GLCORE; + desc.vertex_func.source = xx *vs_particle_source_glsl430; + desc.vertex_func.entry = "main"; + desc.fragment_func.source = xx *fs_particle_source_glsl430; + desc.fragment_func.entry = "main"; + desc.attrs[0].base_type = .FLOAT; + desc.attrs[0].glsl_name = "position"; + desc.attrs[1].base_type = .FLOAT; + desc.attrs[1].glsl_name = "inst_pos_size"; + desc.attrs[2].base_type = .FLOAT; + desc.attrs[2].glsl_name = "inst_uv_rect"; + desc.attrs[3].base_type = .FLOAT; + desc.attrs[3].glsl_name = "inst_color"; + desc.uniform_blocks[0].stage = .VERTEX; + desc.uniform_blocks[0].layout = .STD140; + desc.uniform_blocks[0].size = 80; + desc.uniform_blocks[0].glsl_uniforms[0].type = .FLOAT4; + desc.uniform_blocks[0].glsl_uniforms[0].array_count = 5; + desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "particle_vs_params"; + desc.images[0].stage = .FRAGMENT; + desc.images[0].multisampled = false; + desc.images[0].image_type = ._2D; + desc.images[0].sample_type = .FLOAT; + desc.samplers[0].stage = .FRAGMENT; + desc.samplers[0].sampler_type = .FILTERING; + desc.image_sampler_pairs[0].stage = .FRAGMENT; + desc.image_sampler_pairs[0].image_slot = 0; + desc.image_sampler_pairs[0].sampler_slot = 0; + desc.image_sampler_pairs[0].glsl_name = "particle_sprite_particle_spritesmp"; + case .GLES3; + desc.vertex_func.source = xx *vs_particle_source_glsl300es; + desc.vertex_func.entry = "main"; + desc.fragment_func.source = xx *fs_particle_source_glsl300es; + desc.fragment_func.entry = "main"; + desc.attrs[0].base_type = .FLOAT; + desc.attrs[0].glsl_name = "position"; + desc.attrs[1].base_type = .FLOAT; + desc.attrs[1].glsl_name = "inst_pos_size"; + desc.attrs[2].base_type = .FLOAT; + desc.attrs[2].glsl_name = "inst_uv_rect"; + desc.attrs[3].base_type = .FLOAT; + desc.attrs[3].glsl_name = "inst_color"; + desc.uniform_blocks[0].stage = .VERTEX; + desc.uniform_blocks[0].layout = .STD140; + desc.uniform_blocks[0].size = 80; + desc.uniform_blocks[0].glsl_uniforms[0].type = .FLOAT4; + desc.uniform_blocks[0].glsl_uniforms[0].array_count = 5; + desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "particle_vs_params"; + desc.images[0].stage = .FRAGMENT; + desc.images[0].multisampled = false; + desc.images[0].image_type = ._2D; + desc.images[0].sample_type = .FLOAT; + desc.samplers[0].stage = .FRAGMENT; + desc.samplers[0].sampler_type = .FILTERING; + desc.image_sampler_pairs[0].stage = .FRAGMENT; + desc.image_sampler_pairs[0].image_slot = 0; + desc.image_sampler_pairs[0].sampler_slot = 0; + desc.image_sampler_pairs[0].glsl_name = "particle_sprite_particle_spritesmp"; + case .METAL_MACOS; + desc.vertex_func.source = xx *vs_particle_source_metal_macos; + desc.vertex_func.entry = "main0"; + desc.fragment_func.source = xx *fs_particle_source_metal_macos; + desc.fragment_func.entry = "main0"; + desc.attrs[0].base_type = .FLOAT; + desc.attrs[1].base_type = .FLOAT; + desc.attrs[2].base_type = .FLOAT; + desc.attrs[3].base_type = .FLOAT; + desc.uniform_blocks[0].stage = .VERTEX; + desc.uniform_blocks[0].layout = .STD140; + desc.uniform_blocks[0].size = 80; + desc.uniform_blocks[0].msl_buffer_n = 0; + desc.images[0].stage = .FRAGMENT; + desc.images[0].multisampled = false; + desc.images[0].image_type = ._2D; + desc.images[0].sample_type = .FLOAT; + desc.images[0].msl_texture_n = 0; + desc.samplers[0].stage = .FRAGMENT; + desc.samplers[0].sampler_type = .FILTERING; + desc.samplers[0].msl_sampler_n = 0; + desc.image_sampler_pairs[0].stage = .FRAGMENT; + desc.image_sampler_pairs[0].image_slot = 0; + desc.image_sampler_pairs[0].sampler_slot = 0; + } + return desc; +} diff --git a/src/shaders/jai/shader_trile.jai b/src/shaders/jai/shader_trile.jai index 9ef8ab9..611b9d6 100644 --- a/src/shaders/jai/shader_trile.jai +++ b/src/shaders/jai/shader_trile.jai @@ -533,32 +533,32 @@ vs_trile_source_glsl430 := u8.[ vec3 vc = v; if ((index / 2) == 0) { - vec3 _1877 = vc; - _1877.z = v.y; - _1877.y = v.z; - vc = _1877; + vec3 _1905 = vc; + _1905.z = v.y; + _1905.y = v.z; + vc = _1905; } if ((index / 2) == 2) { - vec3 _1881 = vc; - _1881.z = v.x; - _1881.x = v.z; - vc = _1881; + vec3 _1909 = vc; + _1909.z = v.x; + _1909.x = v.z; + vc = _1909; } if ((index % 2) == 1) { - vec3 _1885 = vc; - _1885.z = _1885.z * (-1.0); - vc = _1885; + vec3 _1913 = vc; + _1913.z = _1913.z * (-1.0); + vc = _1913; } - vec3 _1888 = vc; - float _601 = _1888.x + off.x; - vec3 _1890 = _1888; - _1890.x = _601; - float _607 = _1888.y + off.y; - _1890.y = _607; - vc = _1890; - vec2 _625 = _1890.xy * (1.0 / ((abs(_601) + abs(_607)) + _1888.z)); + vec3 _1916 = vc; + float _601 = _1916.x + off.x; + vec3 _1918 = _1916; + _1918.x = _601; + float _607 = _1916.y + off.y; + _1918.y = _607; + vc = _1918; + vec2 _625 = _1918.xy * (1.0 / ((abs(_601) + abs(_607)) + _1916.z)); float _628 = _625.x; float _630 = _625.y; return vec2(((_628 + _630) + 1.0) * 0.5, ((_628 - _630) + 1.0) * 0.5); @@ -902,9 +902,9 @@ vs_trile_source_glsl430 := u8.[ vec4 _1528 = _1275.mvp_shadow * vec4(floor(vpos * 16.0) * vec3(0.0625), 1.0); vec3 _1539 = ((_1528.xyz / vec3(_1528.w)) * 0.5) + vec3(0.5); float _1543 = _1539.z - 0.001000000047497451305389404296875; - vec3 _1862 = _1539; - _1862.z = _1543; - vec3 light = ((((((((vec3(1.0) - _1461) * _1512) * trixel_material.xyz) * vec3(0.3183410167694091796875)) + ((_1461 * (DistributionGGX(param_2, param_3, param_4) * GeometrySmith(param_5, param_6, param_7, param_8))) / vec3(((4.0 * max(dot(N, _1435), 0.0)) * _1495) + 9.9999997473787516355514526367188e-05))) * texture(shadowtex_shadowsmp, vec3(_1862.xy, _1543))) * _1495) * _271.sunLightColor) * _271.sunIntensity; + vec3 _1890 = _1539; + _1890.z = _1543; + vec3 light = ((((((((vec3(1.0) - _1461) * _1512) * trixel_material.xyz) * vec3(0.3183410167694091796875)) + ((_1461 * (DistributionGGX(param_2, param_3, param_4) * GeometrySmith(param_5, param_6, param_7, param_8))) / vec3(((4.0 * max(dot(N, _1435), 0.0)) * _1495) + 9.9999997473787516355514526367188e-05))) * texture(shadowtex_shadowsmp, vec3(_1890.xy, _1543))) * _1495) * _271.sunLightColor) * _271.sunIntensity; vec3 _1580 = trileCenter + (N * 0.4900000095367431640625); ivec3 _1586 = ivec3(mod(floor(trileCenter), vec3(32.0))); ivec3 param_9 = _1586; @@ -935,8 +935,10 @@ vs_trile_source_glsl430 := u8.[ int param_18 = _1366; ivec3 param_19 = _1586; vec3 _1664 = sample_rdm(param_14, param_15, param_16, param_17, param_18, param_19) * _1275.rdm_tint; - vec4 _1689 = texture(brdf_lut_rdmsmp, vec2(max(dot(N, _1435), 0.0), _1372)); - light += ((mix(_1664, vec3(dot(_1664, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875))), _1451) * ((_1642 * _1689.x) + vec3(_1689.y))) * _1275.rdm_spec_scale); + float _1686 = max(dot(N, _1435), 0.0); + vec4 _1689 = texture(brdf_lut_rdmsmp, vec2(_1686, _1372)); + float _1699 = sin(_1372 * 3.141285419464111328125); + light += ((((mix(_1664, vec3(dot(_1664, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875))), _1451) * ((_1642 * _1689.x) + vec3(_1689.y))) * _1275.rdm_spec_scale) * (1.0 - (0.699999988079071044921875 * _1699))) * (1.0 - (((0.89999997615814208984375 * _1372) * _1699) * pow(1.0 - _1686, 2.0)))); vec3 param_20 = N; vec3 param_21 = _1649; ivec3 param_22 = _1586; @@ -949,9 +951,9 @@ vs_trile_source_glsl430 := u8.[ else { light += (((_1275.ambient_color * _1275.ambient_intensity) * trixel_material.xyz) * _1613); - vec3 _1774 = reflect(-_1435, N); - vec3 R = _1774; - if (_1774.y < 0.0) + vec3 _1802 = reflect(-_1435, N); + vec3 R = _1802; + if (_1802.y < 0.0) { R = reflect(R, vec3(0.0, 1.0, 0.0)); } @@ -962,21 +964,21 @@ vs_trile_source_glsl430 := u8.[ frag_color = vec4(mix(_271.deepColor, light + ((trixel_material.xyz * (float((_1355 >> 1) & 3) * 0.3333333432674407958984375)) * _1275.emissive_scale), vec3(smoothstep(0.0, _271.planeHeight, vpos.y))), 1.0); if (_1275.is_preview == 1) { - vec4 _1817 = frag_color; - vec3 _1821 = mix(_1817.xyz, vec3(0.300000011920928955078125, 0.699999988079071044921875, 1.0), vec3(0.5)); - frag_color.x = _1821.x; - frag_color.y = _1821.y; - frag_color.z = _1821.z; + vec4 _1845 = frag_color; + vec3 _1849 = mix(_1845.xyz, vec3(0.300000011920928955078125, 0.699999988079071044921875, 1.0), vec3(0.5)); + frag_color.x = _1849.x; + frag_color.y = _1849.y; + frag_color.z = _1849.z; } else { if (_1275.is_preview == 2) { - vec4 _1835 = frag_color; - vec3 _1839 = mix(_1835.xyz, vec3(1.0, 0.300000011920928955078125, 0.20000000298023223876953125), vec3(0.5)); - frag_color.x = _1839.x; - frag_color.y = _1839.y; - frag_color.z = _1839.z; + vec4 _1863 = frag_color; + vec3 _1867 = mix(_1863.xyz, vec3(1.0, 0.300000011920928955078125, 0.20000000298023223876953125), vec3(0.5)); + frag_color.x = _1867.x; + frag_color.y = _1867.y; + frag_color.z = _1867.z; } } } @@ -1204,43 +1206,43 @@ fs_trile_source_glsl430 := u8.[ 0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x63,0x20,0x3d,0x20,0x76,0x3b,0x0a,0x20, 0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x69,0x6e,0x64,0x65,0x78,0x20,0x2f,0x20, 0x32,0x29,0x20,0x3d,0x3d,0x20,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x37, - 0x37,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x5f,0x31,0x38,0x37,0x37,0x2e,0x7a,0x20,0x3d,0x20,0x76,0x2e,0x79,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x37,0x37,0x2e,0x79,0x20,0x3d, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x39,0x30, + 0x35,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x5f,0x31,0x39,0x30,0x35,0x2e,0x7a,0x20,0x3d,0x20,0x76,0x2e,0x79,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x30,0x35,0x2e,0x79,0x20,0x3d, 0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63, - 0x20,0x3d,0x20,0x5f,0x31,0x38,0x37,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a, + 0x20,0x3d,0x20,0x5f,0x31,0x39,0x30,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a, 0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x69,0x6e,0x64,0x65,0x78,0x20,0x2f, 0x20,0x32,0x29,0x20,0x3d,0x3d,0x20,0x32,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38, - 0x38,0x31,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x5f,0x31,0x38,0x38,0x31,0x2e,0x7a,0x20,0x3d,0x20,0x76,0x2e,0x78,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x38,0x31,0x2e,0x78,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x39, + 0x30,0x39,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x5f,0x31,0x39,0x30,0x39,0x2e,0x7a,0x20,0x3d,0x20,0x76,0x2e,0x78,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x30,0x39,0x2e,0x78,0x20, 0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76, - 0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, + 0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x30,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, 0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x69,0x6e,0x64,0x65,0x78,0x20, 0x25,0x20,0x32,0x29,0x20,0x3d,0x3d,0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b, 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31, - 0x38,0x38,0x35,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x5f,0x31,0x38,0x38,0x35,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38, - 0x35,0x2e,0x7a,0x20,0x2a,0x20,0x28,0x2d,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x35, + 0x39,0x31,0x33,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x5f,0x31,0x39,0x31,0x33,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31, + 0x33,0x2e,0x7a,0x20,0x2a,0x20,0x28,0x2d,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x33, 0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33, - 0x20,0x5f,0x31,0x38,0x38,0x38,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x5f,0x31,0x39,0x31,0x36,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x31,0x20,0x3d,0x20,0x5f,0x31, - 0x38,0x38,0x38,0x2e,0x78,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x78,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x39,0x30,0x20,0x3d,0x20, - 0x5f,0x31,0x38,0x38,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30, + 0x39,0x31,0x36,0x2e,0x78,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x78,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x39,0x31,0x38,0x20,0x3d,0x20, + 0x5f,0x31,0x39,0x31,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x31,0x38, 0x2e,0x78,0x20,0x3d,0x20,0x5f,0x36,0x30,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x37,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38, - 0x38,0x2e,0x79,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20, - 0x20,0x5f,0x31,0x38,0x39,0x30,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x30,0x37,0x3b, - 0x0a,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x39,0x30,0x3b, + 0x6c,0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x37,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31, + 0x36,0x2e,0x79,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x5f,0x31,0x39,0x31,0x38,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x30,0x37,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x38,0x3b, 0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x5f,0x36,0x32,0x35,0x20,0x3d, - 0x20,0x5f,0x31,0x38,0x39,0x30,0x2e,0x78,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30, + 0x20,0x5f,0x31,0x39,0x31,0x38,0x2e,0x78,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30, 0x20,0x2f,0x20,0x28,0x28,0x61,0x62,0x73,0x28,0x5f,0x36,0x30,0x31,0x29,0x20,0x2b, 0x20,0x61,0x62,0x73,0x28,0x5f,0x36,0x30,0x37,0x29,0x29,0x20,0x2b,0x20,0x5f,0x31, - 0x38,0x38,0x38,0x2e,0x7a,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x39,0x31,0x36,0x2e,0x7a,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, 0x61,0x74,0x20,0x5f,0x36,0x32,0x38,0x20,0x3d,0x20,0x5f,0x36,0x32,0x35,0x2e,0x78, 0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x36,0x33,0x30, 0x20,0x3d,0x20,0x5f,0x36,0x32,0x35,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72, @@ -1997,8 +1999,8 @@ fs_trile_source_glsl430 := u8.[ 0x2d,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34,0x37, 0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34,0x30,0x34,0x32, 0x39,0x36,0x38,0x37,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, - 0x5f,0x31,0x38,0x36,0x32,0x20,0x3d,0x20,0x5f,0x31,0x35,0x33,0x39,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x5f,0x31,0x38,0x36,0x32,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x35, + 0x5f,0x31,0x38,0x39,0x30,0x20,0x3d,0x20,0x5f,0x31,0x35,0x33,0x39,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x35, 0x34,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x6c,0x69,0x67, 0x68,0x74,0x20,0x3d,0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x76,0x65,0x63, 0x33,0x28,0x31,0x2e,0x30,0x29,0x20,0x2d,0x20,0x5f,0x31,0x34,0x36,0x31,0x29,0x20, @@ -2021,7 +2023,7 @@ fs_trile_source_glsl430 := u8.[ 0x37,0x31,0x38,0x38,0x65,0x2d,0x30,0x35,0x29,0x29,0x29,0x20,0x2a,0x20,0x74,0x65, 0x78,0x74,0x75,0x72,0x65,0x28,0x73,0x68,0x61,0x64,0x6f,0x77,0x74,0x65,0x78,0x5f, 0x73,0x68,0x61,0x64,0x6f,0x77,0x73,0x6d,0x70,0x2c,0x20,0x76,0x65,0x63,0x33,0x28, - 0x5f,0x31,0x38,0x36,0x32,0x2e,0x78,0x79,0x2c,0x20,0x5f,0x31,0x35,0x34,0x33,0x29, + 0x5f,0x31,0x38,0x39,0x30,0x2e,0x78,0x79,0x2c,0x20,0x5f,0x31,0x35,0x34,0x33,0x29, 0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x34,0x39,0x35,0x29,0x20,0x2a,0x20,0x5f,0x32, 0x37,0x31,0x2e,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x43,0x6f,0x6c,0x6f,0x72, 0x29,0x20,0x2a,0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e,0x49,0x6e,0x74,0x65, @@ -2092,136 +2094,150 @@ fs_trile_source_glsl430 := u8.[ 0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x37,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d, 0x5f,0x31,0x38,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x39,0x29,0x20,0x2a, 0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x74,0x69,0x6e,0x74,0x3b, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x31, - 0x36,0x38,0x39,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x62,0x72, - 0x64,0x66,0x5f,0x6c,0x75,0x74,0x5f,0x72,0x64,0x6d,0x73,0x6d,0x70,0x2c,0x20,0x76, - 0x65,0x63,0x32,0x28,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x4e,0x2c,0x20,0x5f, - 0x31,0x34,0x33,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31,0x33, - 0x37,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69, - 0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x6d,0x69,0x78,0x28,0x5f,0x31,0x36, - 0x36,0x34,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x64,0x6f,0x74,0x28,0x5f,0x31,0x36, - 0x36,0x34,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x32,0x31,0x32,0x35,0x39, - 0x39,0x39,0x39,0x32,0x37,0x35,0x32,0x30,0x37,0x35,0x31,0x39,0x35,0x33,0x31,0x32, - 0x35,0x2c,0x20,0x30,0x2e,0x37,0x31,0x35,0x32,0x30,0x30,0x30,0x30,0x36,0x39,0x36, - 0x31,0x38,0x32,0x32,0x35,0x30,0x39,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30, - 0x2e,0x30,0x37,0x32,0x32,0x30,0x30,0x30,0x30,0x30,0x32,0x38,0x36,0x31,0x30,0x32, - 0x32,0x39,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x29,0x29,0x29,0x2c,0x20,0x5f,0x31, - 0x34,0x35,0x31,0x29,0x20,0x2a,0x20,0x28,0x28,0x5f,0x31,0x36,0x34,0x32,0x20,0x2a, - 0x20,0x5f,0x31,0x36,0x38,0x39,0x2e,0x78,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33, - 0x28,0x5f,0x31,0x36,0x38,0x39,0x2e,0x79,0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31, - 0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x73,0x70,0x65,0x63,0x5f,0x73,0x63,0x61, - 0x6c,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63, - 0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x20,0x3d,0x20,0x4e,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72, - 0x61,0x6d,0x5f,0x32,0x31,0x20,0x3d,0x20,0x5f,0x31,0x36,0x34,0x39,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72, - 0x61,0x6d,0x5f,0x32,0x32,0x20,0x3d,0x20,0x5f,0x31,0x35,0x38,0x36,0x3b,0x0a,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f, + 0x31,0x36,0x38,0x36,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x4e, + 0x2c,0x20,0x5f,0x31,0x34,0x33,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x31,0x36, + 0x38,0x39,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x62,0x72,0x64, + 0x66,0x5f,0x6c,0x75,0x74,0x5f,0x72,0x64,0x6d,0x73,0x6d,0x70,0x2c,0x20,0x76,0x65, + 0x63,0x32,0x28,0x5f,0x31,0x36,0x38,0x36,0x2c,0x20,0x5f,0x31,0x33,0x37,0x32,0x29, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x20,0x5f,0x31,0x36,0x39,0x39,0x20,0x3d,0x20,0x73,0x69,0x6e,0x28,0x5f,0x31,0x33, + 0x37,0x32,0x20,0x2a,0x20,0x33,0x2e,0x31,0x34,0x31,0x32,0x38,0x35,0x34,0x31,0x39, + 0x34,0x36,0x34,0x31,0x31,0x31,0x33,0x32,0x38,0x31,0x32,0x35,0x29,0x3b,0x0a,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20, - 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29, - 0x20,0x2d,0x20,0x5f,0x31,0x36,0x34,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x35,0x31, - 0x32,0x29,0x20,0x2a,0x20,0x28,0x73,0x61,0x6d,0x70,0x6c,0x65,0x5f,0x72,0x64,0x6d, - 0x5f,0x64,0x69,0x66,0x66,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x2c,0x20, - 0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x31,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f, - 0x32,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f, - 0x74,0x69,0x6e,0x74,0x29,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e, - 0x33,0x31,0x38,0x33,0x34,0x31,0x30,0x31,0x36,0x37,0x36,0x39,0x34,0x30,0x39,0x31, - 0x37,0x39,0x36,0x38,0x37,0x35,0x29,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65, + 0x28,0x28,0x28,0x28,0x6d,0x69,0x78,0x28,0x5f,0x31,0x36,0x36,0x34,0x2c,0x20,0x76, + 0x65,0x63,0x33,0x28,0x64,0x6f,0x74,0x28,0x5f,0x31,0x36,0x36,0x34,0x2c,0x20,0x76, + 0x65,0x63,0x33,0x28,0x30,0x2e,0x32,0x31,0x32,0x35,0x39,0x39,0x39,0x39,0x32,0x37, + 0x35,0x32,0x30,0x37,0x35,0x31,0x39,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e, + 0x37,0x31,0x35,0x32,0x30,0x30,0x30,0x30,0x36,0x39,0x36,0x31,0x38,0x32,0x32,0x35, + 0x30,0x39,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x37,0x32,0x32, + 0x30,0x30,0x30,0x30,0x30,0x32,0x38,0x36,0x31,0x30,0x32,0x32,0x39,0x34,0x39,0x32, + 0x31,0x38,0x37,0x35,0x29,0x29,0x29,0x2c,0x20,0x5f,0x31,0x34,0x35,0x31,0x29,0x20, + 0x2a,0x20,0x28,0x28,0x5f,0x31,0x36,0x34,0x32,0x20,0x2a,0x20,0x5f,0x31,0x36,0x38, + 0x39,0x2e,0x78,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,0x36,0x38, + 0x39,0x2e,0x79,0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72, + 0x64,0x6d,0x5f,0x73,0x70,0x65,0x63,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x20,0x2a, + 0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x28,0x30,0x2e,0x36,0x39,0x39,0x39,0x39, + 0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31, + 0x38,0x37,0x35,0x20,0x2a,0x20,0x5f,0x31,0x36,0x39,0x39,0x29,0x29,0x29,0x20,0x2a, + 0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x28,0x28,0x28,0x30,0x2e,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x37,0x36,0x31,0x35,0x38,0x31,0x34,0x32,0x30,0x38,0x39,0x38, + 0x34,0x33,0x37,0x35,0x20,0x2a,0x20,0x5f,0x31,0x33,0x37,0x32,0x29,0x20,0x2a,0x20, + 0x5f,0x31,0x36,0x39,0x39,0x29,0x20,0x2a,0x20,0x70,0x6f,0x77,0x28,0x31,0x2e,0x30, + 0x20,0x2d,0x20,0x5f,0x31,0x36,0x38,0x36,0x2c,0x20,0x32,0x2e,0x30,0x29,0x29,0x29, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, + 0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x20,0x3d,0x20,0x4e,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d, + 0x5f,0x32,0x31,0x20,0x3d,0x20,0x5f,0x31,0x36,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x69,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d, + 0x5f,0x32,0x32,0x20,0x3d,0x20,0x5f,0x31,0x35,0x38,0x36,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x20,0x2d, + 0x20,0x5f,0x31,0x36,0x34,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x35,0x31,0x32,0x29, + 0x20,0x2a,0x20,0x28,0x73,0x61,0x6d,0x70,0x6c,0x65,0x5f,0x72,0x64,0x6d,0x5f,0x64, + 0x69,0x66,0x66,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x2c,0x20,0x70,0x61, + 0x72,0x61,0x6d,0x5f,0x32,0x31,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32, + 0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x74,0x69, + 0x6e,0x74,0x29,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x31, + 0x38,0x33,0x34,0x31,0x30,0x31,0x36,0x37,0x36,0x39,0x34,0x30,0x39,0x31,0x37,0x39, + 0x36,0x38,0x37,0x35,0x29,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f, + 0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20, + 0x5f,0x31,0x36,0x31,0x33,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72, + 0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37, + 0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63,0x61,0x6c,0x65, + 0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34, + 0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34,0x30,0x34, + 0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69, + 0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e, + 0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x2a,0x20, + 0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e, + 0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65, 0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20, - 0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35, - 0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31, - 0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63,0x61, - 0x6c,0x65,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34, - 0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f,0x31,0x32,0x37, - 0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20, - 0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f, - 0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69, - 0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a, - 0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20, - 0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f, - 0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65, - 0x6e,0x74,0x5f,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20, - 0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e, - 0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x37,0x37, - 0x34,0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x2d,0x5f,0x31,0x34, - 0x33,0x35,0x2c,0x20,0x4e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x76,0x65,0x63,0x33,0x20,0x52,0x20,0x3d,0x20,0x5f,0x31,0x37,0x37,0x34,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x37,0x37, - 0x34,0x2e,0x79,0x20,0x3c,0x20,0x30,0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x52,0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x52,0x2c,0x20, - 0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30, - 0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72, - 0x61,0x6d,0x5f,0x32,0x33,0x20,0x3d,0x20,0x52,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34, - 0x20,0x3d,0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e,0x50,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67, - 0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x5f,0x31,0x34,0x36,0x31,0x20,0x2a,0x20, - 0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x33,0x2c,0x20,0x70,0x61, - 0x72,0x61,0x6d,0x5f,0x32,0x34,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33, - 0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, - 0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20, - 0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x69,0x78,0x28,0x5f,0x32,0x37,0x31,0x2e, - 0x64,0x65,0x65,0x70,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x6c,0x69,0x67,0x68,0x74, - 0x20,0x2b,0x20,0x28,0x28,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65, - 0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20,0x28,0x66,0x6c,0x6f,0x61, - 0x74,0x28,0x28,0x5f,0x31,0x33,0x35,0x35,0x20,0x3e,0x3e,0x20,0x31,0x29,0x20,0x26, - 0x20,0x33,0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34, - 0x33,0x32,0x36,0x37,0x34,0x34,0x30,0x37,0x39,0x35,0x38,0x39,0x38,0x34,0x33,0x37, - 0x35,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x65,0x6d,0x69,0x73, - 0x73,0x69,0x76,0x65,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x2c,0x20,0x76,0x65,0x63, - 0x33,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30, - 0x2c,0x20,0x5f,0x32,0x37,0x31,0x2e,0x70,0x6c,0x61,0x6e,0x65,0x48,0x65,0x69,0x67, - 0x68,0x74,0x2c,0x20,0x76,0x70,0x6f,0x73,0x2e,0x79,0x29,0x29,0x29,0x2c,0x20,0x31, - 0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32, + 0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c, + 0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f,0x31,0x32, + 0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74, + 0x5f,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72, + 0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79, + 0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x30,0x32,0x20, + 0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x2d,0x5f,0x31,0x34,0x33,0x35, + 0x2c,0x20,0x4e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65, + 0x63,0x33,0x20,0x52,0x20,0x3d,0x20,0x5f,0x31,0x38,0x30,0x32,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x38,0x30,0x32,0x2e, + 0x79,0x20,0x3c,0x20,0x30,0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x52, + 0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x52,0x2c,0x20,0x76,0x65, + 0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30, + 0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d, + 0x5f,0x32,0x33,0x20,0x3d,0x20,0x52,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x20,0x3d, + 0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74, + 0x20,0x2b,0x3d,0x20,0x28,0x28,0x5f,0x31,0x34,0x36,0x31,0x20,0x2a,0x20,0x73,0x6b, + 0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x33,0x2c,0x20,0x70,0x61,0x72,0x61, + 0x6d,0x5f,0x32,0x34,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34, + 0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20, + 0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, + 0x76,0x65,0x63,0x34,0x28,0x6d,0x69,0x78,0x28,0x5f,0x32,0x37,0x31,0x2e,0x64,0x65, + 0x65,0x70,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b, + 0x20,0x28,0x28,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69, + 0x61,0x6c,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x28, + 0x28,0x5f,0x31,0x33,0x35,0x35,0x20,0x3e,0x3e,0x20,0x31,0x29,0x20,0x26,0x20,0x33, + 0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x33,0x32, + 0x36,0x37,0x34,0x34,0x30,0x37,0x39,0x35,0x38,0x39,0x38,0x34,0x33,0x37,0x35,0x29, + 0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x65,0x6d,0x69,0x73,0x73,0x69, + 0x76,0x65,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28, + 0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30,0x2c,0x20, + 0x5f,0x32,0x37,0x31,0x2e,0x70,0x6c,0x61,0x6e,0x65,0x48,0x65,0x69,0x67,0x68,0x74, + 0x2c,0x20,0x76,0x70,0x6f,0x73,0x2e,0x79,0x29,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35, + 0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d,0x20,0x31, + 0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x76,0x65,0x63,0x34,0x20,0x5f,0x31,0x38,0x34,0x35,0x20,0x3d,0x20,0x66,0x72,0x61, + 0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x34,0x39,0x20,0x3d,0x20,0x6d,0x69, + 0x78,0x28,0x5f,0x31,0x38,0x34,0x35,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x76,0x65,0x63, + 0x33,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30, + 0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e, + 0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30, + 0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20, + 0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x78, + 0x20,0x3d,0x20,0x5f,0x31,0x38,0x34,0x39,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x79, + 0x20,0x3d,0x20,0x5f,0x31,0x38,0x34,0x39,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a, + 0x20,0x3d,0x20,0x5f,0x31,0x38,0x34,0x39,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32, 0x37,0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d, - 0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x31,0x38,0x31,0x37,0x20,0x3d,0x20,0x66, - 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x32,0x31,0x20,0x3d,0x20, - 0x6d,0x69,0x78,0x28,0x5f,0x31,0x38,0x31,0x37,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x76, - 0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39, - 0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20, - 0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37, - 0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x2e,0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x78,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x79,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x7a,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20, - 0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f, - 0x31,0x32,0x37,0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20, - 0x3d,0x3d,0x20,0x32,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34, - 0x20,0x5f,0x31,0x38,0x33,0x35,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f, - 0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x33,0x39,0x20,0x3d,0x20,0x6d,0x69, - 0x78,0x28,0x5f,0x31,0x38,0x33,0x35,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x76,0x65,0x63, - 0x33,0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30, - 0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32, - 0x35,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38, - 0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29, - 0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x2e,0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x33,0x39,0x2e,0x78, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72, - 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38, - 0x33,0x39,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d, - 0x20,0x5f,0x31,0x38,0x33,0x39,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x00, + 0x20,0x32,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f, + 0x31,0x38,0x36,0x33,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76, + 0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x36,0x37,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28, + 0x5f,0x31,0x38,0x36,0x33,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x76,0x65,0x63,0x33,0x28, + 0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31, + 0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c, + 0x20,0x30,0x2e,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32, + 0x33,0x32,0x32,0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x2c,0x20, + 0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, + 0x6f,0x72,0x2e,0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x36,0x37,0x2e,0x78,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x36,0x37, + 0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20,0x5f, + 0x31,0x38,0x36,0x37,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x00, ]; /* #version 300 es @@ -2620,32 +2636,32 @@ vs_trile_source_glsl300es := u8.[ highp vec3 vc = v; if ((index / 2) == 0) { - highp vec3 _1877 = vc; - _1877.z = v.y; - _1877.y = v.z; - vc = _1877; + highp vec3 _1905 = vc; + _1905.z = v.y; + _1905.y = v.z; + vc = _1905; } if ((index / 2) == 2) { - highp vec3 _1881 = vc; - _1881.z = v.x; - _1881.x = v.z; - vc = _1881; + highp vec3 _1909 = vc; + _1909.z = v.x; + _1909.x = v.z; + vc = _1909; } if ((index % 2) == 1) { - highp vec3 _1885 = vc; - _1885.z = _1885.z * (-1.0); - vc = _1885; + highp vec3 _1913 = vc; + _1913.z = _1913.z * (-1.0); + vc = _1913; } - highp vec3 _1888 = vc; - highp float _601 = _1888.x + off.x; - highp vec3 _1890 = _1888; - _1890.x = _601; - highp float _607 = _1888.y + off.y; - _1890.y = _607; - vc = _1890; - highp vec2 _625 = _1890.xy * (1.0 / ((abs(_601) + abs(_607)) + _1888.z)); + highp vec3 _1916 = vc; + highp float _601 = _1916.x + off.x; + highp vec3 _1918 = _1916; + _1918.x = _601; + highp float _607 = _1916.y + off.y; + _1918.y = _607; + vc = _1918; + highp vec2 _625 = _1918.xy * (1.0 / ((abs(_601) + abs(_607)) + _1916.z)); highp float _628 = _625.x; highp float _630 = _625.y; return vec2(((_628 + _630) + 1.0) * 0.5, ((_628 - _630) + 1.0) * 0.5); @@ -2989,9 +3005,9 @@ vs_trile_source_glsl300es := u8.[ highp vec4 _1528 = _1275.mvp_shadow * vec4(floor(vpos * 16.0) * vec3(0.0625), 1.0); highp vec3 _1539 = ((_1528.xyz / vec3(_1528.w)) * 0.5) + vec3(0.5); highp float _1543 = _1539.z - 0.001000000047497451305389404296875; - highp vec3 _1862 = _1539; - _1862.z = _1543; - highp vec3 light = ((((((((vec3(1.0) - _1461) * _1512) * trixel_material.xyz) * vec3(0.3183410167694091796875)) + ((_1461 * (DistributionGGX(param_2, param_3, param_4) * GeometrySmith(param_5, param_6, param_7, param_8))) / vec3(((4.0 * max(dot(N, _1435), 0.0)) * _1495) + 9.9999997473787516355514526367188e-05))) * texture(shadowtex_shadowsmp, vec3(_1862.xy, _1543))) * _1495) * _271.sunLightColor) * _271.sunIntensity; + highp vec3 _1890 = _1539; + _1890.z = _1543; + highp vec3 light = ((((((((vec3(1.0) - _1461) * _1512) * trixel_material.xyz) * vec3(0.3183410167694091796875)) + ((_1461 * (DistributionGGX(param_2, param_3, param_4) * GeometrySmith(param_5, param_6, param_7, param_8))) / vec3(((4.0 * max(dot(N, _1435), 0.0)) * _1495) + 9.9999997473787516355514526367188e-05))) * texture(shadowtex_shadowsmp, vec3(_1890.xy, _1543))) * _1495) * _271.sunLightColor) * _271.sunIntensity; highp vec3 _1580 = trileCenter + (N * 0.4900000095367431640625); ivec3 _1586 = ivec3(mod(floor(trileCenter), vec3(32.0))); ivec3 param_9 = _1586; @@ -3022,8 +3038,10 @@ vs_trile_source_glsl300es := u8.[ int param_18 = _1366; ivec3 param_19 = _1586; highp vec3 _1664 = sample_rdm(param_14, param_15, param_16, param_17, param_18, param_19) * _1275.rdm_tint; - highp vec4 _1689 = texture(brdf_lut_rdmsmp, vec2(max(dot(N, _1435), 0.0), _1372)); - light += ((mix(_1664, vec3(dot(_1664, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875))), _1451) * ((_1642 * _1689.x) + vec3(_1689.y))) * _1275.rdm_spec_scale); + highp float _1686 = max(dot(N, _1435), 0.0); + highp vec4 _1689 = texture(brdf_lut_rdmsmp, vec2(_1686, _1372)); + highp float _1699 = sin(_1372 * 3.141285419464111328125); + light += ((((mix(_1664, vec3(dot(_1664, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875))), _1451) * ((_1642 * _1689.x) + vec3(_1689.y))) * _1275.rdm_spec_scale) * (1.0 - (0.699999988079071044921875 * _1699))) * (1.0 - (((0.89999997615814208984375 * _1372) * _1699) * pow(1.0 - _1686, 2.0)))); highp vec3 param_20 = N; highp vec3 param_21 = _1649; ivec3 param_22 = _1586; @@ -3036,9 +3054,9 @@ vs_trile_source_glsl300es := u8.[ else { light += (((_1275.ambient_color * _1275.ambient_intensity) * trixel_material.xyz) * _1613); - highp vec3 _1774 = reflect(-_1435, N); - highp vec3 R = _1774; - if (_1774.y < 0.0) + highp vec3 _1802 = reflect(-_1435, N); + highp vec3 R = _1802; + if (_1802.y < 0.0) { R = reflect(R, vec3(0.0, 1.0, 0.0)); } @@ -3049,21 +3067,21 @@ vs_trile_source_glsl300es := u8.[ frag_color = vec4(mix(_271.deepColor, light + ((trixel_material.xyz * (float((_1355 >> 1) & 3) * 0.3333333432674407958984375)) * _1275.emissive_scale), vec3(smoothstep(0.0, _271.planeHeight, vpos.y))), 1.0); if (_1275.is_preview == 1) { - highp vec4 _1817 = frag_color; - highp vec3 _1821 = mix(_1817.xyz, vec3(0.300000011920928955078125, 0.699999988079071044921875, 1.0), vec3(0.5)); - frag_color.x = _1821.x; - frag_color.y = _1821.y; - frag_color.z = _1821.z; + highp vec4 _1845 = frag_color; + highp vec3 _1849 = mix(_1845.xyz, vec3(0.300000011920928955078125, 0.699999988079071044921875, 1.0), vec3(0.5)); + frag_color.x = _1849.x; + frag_color.y = _1849.y; + frag_color.z = _1849.z; } else { if (_1275.is_preview == 2) { - highp vec4 _1835 = frag_color; - highp vec3 _1839 = mix(_1835.xyz, vec3(1.0, 0.300000011920928955078125, 0.20000000298023223876953125), vec3(0.5)); - frag_color.x = _1839.x; - frag_color.y = _1839.y; - frag_color.z = _1839.z; + highp vec4 _1863 = frag_color; + highp vec3 _1867 = mix(_1863.xyz, vec3(1.0, 0.300000011920928955078125, 0.20000000298023223876953125), vec3(0.5)); + frag_color.x = _1867.x; + frag_color.y = _1867.y; + frag_color.z = _1867.z; } } } @@ -3303,45 +3321,45 @@ fs_trile_source_glsl300es := u8.[ 0x33,0x20,0x76,0x63,0x20,0x3d,0x20,0x76,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66, 0x20,0x28,0x28,0x69,0x6e,0x64,0x65,0x78,0x20,0x2f,0x20,0x32,0x29,0x20,0x3d,0x3d, 0x20,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38, - 0x37,0x37,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x5f,0x31,0x38,0x37,0x37,0x2e,0x7a,0x20,0x3d,0x20,0x76,0x2e,0x79,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x37,0x37,0x2e,0x79,0x20, + 0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x39, + 0x30,0x35,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x5f,0x31,0x39,0x30,0x35,0x2e,0x7a,0x20,0x3d,0x20,0x76,0x2e,0x79,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x30,0x35,0x2e,0x79,0x20, 0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76, - 0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x37,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, + 0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x30,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, 0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x69,0x6e,0x64,0x65,0x78,0x20, 0x2f,0x20,0x32,0x29,0x20,0x3d,0x3d,0x20,0x32,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b, 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76, - 0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x38,0x31,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x38,0x31,0x2e,0x7a,0x20, + 0x65,0x63,0x33,0x20,0x5f,0x31,0x39,0x30,0x39,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x30,0x39,0x2e,0x7a,0x20, 0x3d,0x20,0x76,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f, - 0x31,0x38,0x38,0x31,0x2e,0x78,0x20,0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x31, + 0x31,0x39,0x30,0x39,0x2e,0x78,0x20,0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x30,0x39, 0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28, 0x28,0x69,0x6e,0x64,0x65,0x78,0x20,0x25,0x20,0x32,0x29,0x20,0x3d,0x3d,0x20,0x31, 0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x38,0x35, + 0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x39,0x31,0x33, 0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f, - 0x31,0x38,0x38,0x35,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x35,0x2e,0x7a, + 0x31,0x39,0x31,0x33,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x33,0x2e,0x7a, 0x20,0x2a,0x20,0x28,0x2d,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x35,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x33,0x3b,0x0a,0x20, 0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76, - 0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x38,0x38,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a, + 0x65,0x63,0x33,0x20,0x5f,0x31,0x39,0x31,0x36,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a, 0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, - 0x5f,0x36,0x30,0x31,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x38,0x2e,0x78,0x20,0x2b, + 0x5f,0x36,0x30,0x31,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x36,0x2e,0x78,0x20,0x2b, 0x20,0x6f,0x66,0x66,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68, - 0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x39,0x30,0x20,0x3d,0x20,0x5f, - 0x31,0x38,0x38,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e, + 0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x39,0x31,0x38,0x20,0x3d,0x20,0x5f, + 0x31,0x39,0x31,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x31,0x38,0x2e, 0x78,0x20,0x3d,0x20,0x5f,0x36,0x30,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69, 0x67,0x68,0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x37,0x20,0x3d, - 0x20,0x5f,0x31,0x38,0x38,0x38,0x2e,0x79,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x79, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e,0x79,0x20,0x3d,0x20, + 0x20,0x5f,0x31,0x39,0x31,0x36,0x2e,0x79,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x79, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x31,0x38,0x2e,0x79,0x20,0x3d,0x20, 0x5f,0x36,0x30,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f, - 0x31,0x38,0x39,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20, - 0x76,0x65,0x63,0x32,0x20,0x5f,0x36,0x32,0x35,0x20,0x3d,0x20,0x5f,0x31,0x38,0x39, - 0x30,0x2e,0x78,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x28,0x28, + 0x31,0x39,0x31,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20, + 0x76,0x65,0x63,0x32,0x20,0x5f,0x36,0x32,0x35,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31, + 0x38,0x2e,0x78,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x28,0x28, 0x61,0x62,0x73,0x28,0x5f,0x36,0x30,0x31,0x29,0x20,0x2b,0x20,0x61,0x62,0x73,0x28, - 0x5f,0x36,0x30,0x37,0x29,0x29,0x20,0x2b,0x20,0x5f,0x31,0x38,0x38,0x38,0x2e,0x7a, + 0x5f,0x36,0x30,0x37,0x29,0x29,0x20,0x2b,0x20,0x5f,0x31,0x39,0x31,0x36,0x2e,0x7a, 0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c, 0x6f,0x61,0x74,0x20,0x5f,0x36,0x32,0x38,0x20,0x3d,0x20,0x5f,0x36,0x32,0x35,0x2e, 0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,0x6f, @@ -4150,8 +4168,8 @@ fs_trile_source_glsl300es := u8.[ 0x20,0x2d,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34, 0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34,0x30,0x34, 0x32,0x39,0x36,0x38,0x37,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68, - 0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x36,0x32,0x20,0x3d,0x20,0x5f, - 0x31,0x35,0x33,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x36,0x32,0x2e, + 0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x39,0x30,0x20,0x3d,0x20,0x5f, + 0x31,0x35,0x33,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e, 0x7a,0x20,0x3d,0x20,0x5f,0x31,0x35,0x34,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68, 0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x6c,0x69,0x67,0x68,0x74,0x20, 0x3d,0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x76,0x65,0x63,0x33,0x28,0x31, @@ -4175,7 +4193,7 @@ fs_trile_source_glsl300es := u8.[ 0x38,0x65,0x2d,0x30,0x35,0x29,0x29,0x29,0x20,0x2a,0x20,0x74,0x65,0x78,0x74,0x75, 0x72,0x65,0x28,0x73,0x68,0x61,0x64,0x6f,0x77,0x74,0x65,0x78,0x5f,0x73,0x68,0x61, 0x64,0x6f,0x77,0x73,0x6d,0x70,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,0x38, - 0x36,0x32,0x2e,0x78,0x79,0x2c,0x20,0x5f,0x31,0x35,0x34,0x33,0x29,0x29,0x29,0x20, + 0x39,0x30,0x2e,0x78,0x79,0x2c,0x20,0x5f,0x31,0x35,0x34,0x33,0x29,0x29,0x29,0x20, 0x2a,0x20,0x5f,0x31,0x34,0x39,0x35,0x29,0x20,0x2a,0x20,0x5f,0x32,0x37,0x31,0x2e, 0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x29,0x20,0x2a, 0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69, @@ -4251,140 +4269,155 @@ fs_trile_source_glsl300es := u8.[ 0x6d,0x5f,0x31,0x37,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x38,0x2c,0x20, 0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x39,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37, 0x35,0x2e,0x72,0x64,0x6d,0x5f,0x74,0x69,0x6e,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x5f, - 0x31,0x36,0x38,0x39,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x62, - 0x72,0x64,0x66,0x5f,0x6c,0x75,0x74,0x5f,0x72,0x64,0x6d,0x73,0x6d,0x70,0x2c,0x20, - 0x76,0x65,0x63,0x32,0x28,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x4e,0x2c,0x20, - 0x5f,0x31,0x34,0x33,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31, - 0x33,0x37,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c, - 0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x6d,0x69,0x78,0x28,0x5f,0x31, - 0x36,0x36,0x34,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x64,0x6f,0x74,0x28,0x5f,0x31, - 0x36,0x36,0x34,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x32,0x31,0x32,0x35, - 0x39,0x39,0x39,0x39,0x32,0x37,0x35,0x32,0x30,0x37,0x35,0x31,0x39,0x35,0x33,0x31, - 0x32,0x35,0x2c,0x20,0x30,0x2e,0x37,0x31,0x35,0x32,0x30,0x30,0x30,0x30,0x36,0x39, - 0x36,0x31,0x38,0x32,0x32,0x35,0x30,0x39,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20, - 0x30,0x2e,0x30,0x37,0x32,0x32,0x30,0x30,0x30,0x30,0x30,0x32,0x38,0x36,0x31,0x30, - 0x32,0x32,0x39,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x29,0x29,0x29,0x2c,0x20,0x5f, - 0x31,0x34,0x35,0x31,0x29,0x20,0x2a,0x20,0x28,0x28,0x5f,0x31,0x36,0x34,0x32,0x20, - 0x2a,0x20,0x5f,0x31,0x36,0x38,0x39,0x2e,0x78,0x29,0x20,0x2b,0x20,0x76,0x65,0x63, - 0x33,0x28,0x5f,0x31,0x36,0x38,0x39,0x2e,0x79,0x29,0x29,0x29,0x20,0x2a,0x20,0x5f, - 0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x73,0x70,0x65,0x63,0x5f,0x73,0x63, - 0x61,0x6c,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69, - 0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32, - 0x30,0x20,0x3d,0x20,0x4e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68, - 0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f, - 0x32,0x31,0x20,0x3d,0x20,0x5f,0x31,0x36,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x69,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f, - 0x32,0x32,0x20,0x3d,0x20,0x5f,0x31,0x35,0x38,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, + 0x5f,0x31,0x36,0x38,0x36,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28, + 0x4e,0x2c,0x20,0x5f,0x31,0x34,0x33,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76, + 0x65,0x63,0x34,0x20,0x5f,0x31,0x36,0x38,0x39,0x20,0x3d,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x28,0x62,0x72,0x64,0x66,0x5f,0x6c,0x75,0x74,0x5f,0x72,0x64,0x6d, + 0x73,0x6d,0x70,0x2c,0x20,0x76,0x65,0x63,0x32,0x28,0x5f,0x31,0x36,0x38,0x36,0x2c, + 0x20,0x5f,0x31,0x33,0x37,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31, + 0x36,0x39,0x39,0x20,0x3d,0x20,0x73,0x69,0x6e,0x28,0x5f,0x31,0x33,0x37,0x32,0x20, + 0x2a,0x20,0x33,0x2e,0x31,0x34,0x31,0x32,0x38,0x35,0x34,0x31,0x39,0x34,0x36,0x34, + 0x31,0x31,0x31,0x33,0x32,0x38,0x31,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28, - 0x28,0x28,0x28,0x28,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x20,0x2d,0x20, - 0x5f,0x31,0x36,0x34,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x35,0x31,0x32,0x29,0x20, - 0x2a,0x20,0x28,0x73,0x61,0x6d,0x70,0x6c,0x65,0x5f,0x72,0x64,0x6d,0x5f,0x64,0x69, - 0x66,0x66,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x2c,0x20,0x70,0x61,0x72, - 0x61,0x6d,0x5f,0x32,0x31,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x29, - 0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x74,0x69,0x6e, - 0x74,0x29,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x31,0x38, - 0x33,0x34,0x31,0x30,0x31,0x36,0x37,0x36,0x39,0x34,0x30,0x39,0x31,0x37,0x39,0x36, - 0x38,0x37,0x35,0x29,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d, - 0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f, - 0x31,0x36,0x31,0x33,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64, - 0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35, - 0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63,0x61,0x6c,0x65,0x20, - 0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34,0x37, - 0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34,0x30,0x34,0x32, - 0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67, - 0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61, - 0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x2a,0x20,0x5f, - 0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74, - 0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c, - 0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a, - 0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73, - 0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f,0x31,0x32,0x37, - 0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20, - 0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f, - 0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69, - 0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a, - 0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f, - 0x31,0x37,0x37,0x34,0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x2d, - 0x5f,0x31,0x34,0x33,0x35,0x2c,0x20,0x4e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x52,0x20, - 0x3d,0x20,0x5f,0x31,0x37,0x37,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x37,0x37,0x34,0x2e,0x79,0x20,0x3c,0x20,0x30, - 0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x52,0x20,0x3d,0x20,0x72,0x65, - 0x66,0x6c,0x65,0x63,0x74,0x28,0x52,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e, - 0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61, - 0x6d,0x5f,0x32,0x33,0x20,0x3d,0x20,0x52,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72, - 0x61,0x6d,0x5f,0x32,0x34,0x20,0x3d,0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e, - 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x5f,0x31,0x34, - 0x36,0x31,0x20,0x2a,0x20,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32, - 0x33,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x29,0x29,0x20,0x2a,0x20, - 0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31, - 0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x69,0x78,0x28, - 0x5f,0x32,0x37,0x31,0x2e,0x64,0x65,0x65,0x70,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20, - 0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x28,0x28,0x74,0x72,0x69,0x78,0x65,0x6c, - 0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20, - 0x28,0x66,0x6c,0x6f,0x61,0x74,0x28,0x28,0x5f,0x31,0x33,0x35,0x35,0x20,0x3e,0x3e, - 0x20,0x31,0x29,0x20,0x26,0x20,0x33,0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x34,0x33,0x32,0x36,0x37,0x34,0x34,0x30,0x37,0x39,0x35,0x38, - 0x39,0x38,0x34,0x33,0x37,0x35,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35, - 0x2e,0x65,0x6d,0x69,0x73,0x73,0x69,0x76,0x65,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29, - 0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65, - 0x70,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x37,0x31,0x2e,0x70,0x6c,0x61,0x6e, - 0x65,0x48,0x65,0x69,0x67,0x68,0x74,0x2c,0x20,0x76,0x70,0x6f,0x73,0x2e,0x79,0x29, - 0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66, - 0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69, - 0x65,0x77,0x20,0x3d,0x3d,0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63, - 0x34,0x20,0x5f,0x31,0x38,0x31,0x37,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69, - 0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x32,0x31,0x20,0x3d, - 0x20,0x6d,0x69,0x78,0x28,0x5f,0x31,0x38,0x31,0x37,0x2e,0x78,0x79,0x7a,0x2c,0x20, - 0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31, - 0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c, - 0x20,0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30, - 0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30, - 0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, - 0x72,0x2e,0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x78,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, - 0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x79,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, - 0x72,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x7a,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20, - 0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28, - 0x5f,0x31,0x32,0x37,0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77, - 0x20,0x3d,0x3d,0x20,0x32,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67, - 0x68,0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x31,0x38,0x33,0x35,0x20,0x3d,0x20, - 0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x28,0x6d,0x69,0x78,0x28,0x5f,0x31,0x36,0x36,0x34,0x2c,0x20,0x76,0x65,0x63,0x33, + 0x28,0x64,0x6f,0x74,0x28,0x5f,0x31,0x36,0x36,0x34,0x2c,0x20,0x76,0x65,0x63,0x33, + 0x28,0x30,0x2e,0x32,0x31,0x32,0x35,0x39,0x39,0x39,0x39,0x32,0x37,0x35,0x32,0x30, + 0x37,0x35,0x31,0x39,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x37,0x31,0x35, + 0x32,0x30,0x30,0x30,0x30,0x36,0x39,0x36,0x31,0x38,0x32,0x32,0x35,0x30,0x39,0x37, + 0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x37,0x32,0x32,0x30,0x30,0x30, + 0x30,0x30,0x32,0x38,0x36,0x31,0x30,0x32,0x32,0x39,0x34,0x39,0x32,0x31,0x38,0x37, + 0x35,0x29,0x29,0x29,0x2c,0x20,0x5f,0x31,0x34,0x35,0x31,0x29,0x20,0x2a,0x20,0x28, + 0x28,0x5f,0x31,0x36,0x34,0x32,0x20,0x2a,0x20,0x5f,0x31,0x36,0x38,0x39,0x2e,0x78, + 0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,0x36,0x38,0x39,0x2e,0x79, + 0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f, + 0x73,0x70,0x65,0x63,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x20,0x2a,0x20,0x28,0x31, + 0x2e,0x30,0x20,0x2d,0x20,0x28,0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38, + 0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35, + 0x20,0x2a,0x20,0x5f,0x31,0x36,0x39,0x39,0x29,0x29,0x29,0x20,0x2a,0x20,0x28,0x31, + 0x2e,0x30,0x20,0x2d,0x20,0x28,0x28,0x28,0x30,0x2e,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x37,0x36,0x31,0x35,0x38,0x31,0x34,0x32,0x30,0x38,0x39,0x38,0x34,0x33,0x37, + 0x35,0x20,0x2a,0x20,0x5f,0x31,0x33,0x37,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36, + 0x39,0x39,0x29,0x20,0x2a,0x20,0x70,0x6f,0x77,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20, + 0x5f,0x31,0x36,0x38,0x36,0x2c,0x20,0x32,0x2e,0x30,0x29,0x29,0x29,0x29,0x3b,0x0a, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65, - 0x63,0x33,0x20,0x5f,0x31,0x38,0x33,0x39,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f, - 0x31,0x38,0x33,0x35,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31, - 0x2e,0x30,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39, - 0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20, - 0x30,0x2e,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33, - 0x32,0x32,0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x2c,0x20,0x76, - 0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, - 0x72,0x2e,0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x33,0x39,0x2e,0x78,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f, - 0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x33,0x39,0x2e, - 0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, - 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31, - 0x38,0x33,0x39,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d, - 0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x00, + 0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x20,0x3d,0x20,0x4e,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76, + 0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x31,0x20,0x3d,0x20,0x5f, + 0x31,0x36,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x76, + 0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x20,0x3d,0x20,0x5f, + 0x31,0x35,0x38,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69, + 0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x76,0x65, + 0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x20,0x2d,0x20,0x5f,0x31,0x36,0x34,0x32,0x29, + 0x20,0x2a,0x20,0x5f,0x31,0x35,0x31,0x32,0x29,0x20,0x2a,0x20,0x28,0x73,0x61,0x6d, + 0x70,0x6c,0x65,0x5f,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x28,0x70,0x61,0x72, + 0x61,0x6d,0x5f,0x32,0x30,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x31,0x2c, + 0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32, + 0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x74,0x69,0x6e,0x74,0x29,0x29,0x20,0x2a,0x20, + 0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x31,0x38,0x33,0x34,0x31,0x30,0x31,0x36, + 0x37,0x36,0x39,0x34,0x30,0x39,0x31,0x37,0x39,0x36,0x38,0x37,0x35,0x29,0x29,0x20, + 0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61, + 0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x20, + 0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66, + 0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64, + 0x69,0x66,0x66,0x5f,0x73,0x63,0x61,0x6c,0x65,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30, + 0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31, + 0x33,0x30,0x35,0x33,0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20, + 0x28,0x28,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61, + 0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79, + 0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72, + 0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20, + 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20, + 0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20, + 0x2b,0x3d,0x20,0x28,0x28,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69, + 0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37, + 0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74,0x65,0x6e,0x73, + 0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61, + 0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31, + 0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69, + 0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38,0x30,0x32,0x20,0x3d, + 0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x2d,0x5f,0x31,0x34,0x33,0x35,0x2c, + 0x20,0x4e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67, + 0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x52,0x20,0x3d,0x20,0x5f,0x31,0x38,0x30, + 0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f, + 0x31,0x38,0x30,0x32,0x2e,0x79,0x20,0x3c,0x20,0x30,0x2e,0x30,0x29,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x52,0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28, + 0x52,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30, + 0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70, + 0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x33,0x20,0x3d, + 0x20,0x52,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68, + 0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x20, + 0x3d,0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68, + 0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x5f,0x31,0x34,0x36,0x31,0x20,0x2a,0x20,0x73, + 0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x33,0x2c,0x20,0x70,0x61,0x72, + 0x61,0x6d,0x5f,0x32,0x34,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38, + 0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a, + 0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, + 0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x69,0x78,0x28,0x5f,0x32,0x37,0x31,0x2e,0x64, + 0x65,0x65,0x70,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x6c,0x69,0x67,0x68,0x74,0x20, + 0x2b,0x20,0x28,0x28,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72, + 0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74, + 0x28,0x28,0x5f,0x31,0x33,0x35,0x35,0x20,0x3e,0x3e,0x20,0x31,0x29,0x20,0x26,0x20, + 0x33,0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x33, + 0x32,0x36,0x37,0x34,0x34,0x30,0x37,0x39,0x35,0x38,0x39,0x38,0x34,0x33,0x37,0x35, + 0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x65,0x6d,0x69,0x73,0x73, + 0x69,0x76,0x65,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x2c,0x20,0x76,0x65,0x63,0x33, + 0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30,0x2c, + 0x20,0x5f,0x32,0x37,0x31,0x2e,0x70,0x6c,0x61,0x6e,0x65,0x48,0x65,0x69,0x67,0x68, + 0x74,0x2c,0x20,0x76,0x70,0x6f,0x73,0x2e,0x79,0x29,0x29,0x29,0x2c,0x20,0x31,0x2e, + 0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37, + 0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d,0x20, + 0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x31,0x38,0x34, + 0x35,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65, + 0x63,0x33,0x20,0x5f,0x31,0x38,0x34,0x39,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f, + 0x31,0x38,0x34,0x35,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30, + 0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38, + 0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x36,0x39,0x39, + 0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39, + 0x32,0x31,0x38,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x76,0x65,0x63, + 0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x78,0x20,0x3d,0x20, + 0x5f,0x31,0x38,0x34,0x39,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20, + 0x5f,0x31,0x38,0x34,0x39,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20, + 0x5f,0x31,0x38,0x34,0x39,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20, + 0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e, + 0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d,0x20,0x32,0x29, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63, + 0x34,0x20,0x5f,0x31,0x38,0x36,0x33,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, + 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x38, + 0x36,0x37,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f,0x31,0x38,0x36,0x33,0x2e,0x78, + 0x79,0x7a,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e, + 0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39, + 0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,0x36, + 0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e, + 0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x78,0x20,0x3d,0x20, + 0x5f,0x31,0x38,0x36,0x37,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e, + 0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x36,0x37,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f, + 0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x36,0x37,0x2e,0x7a,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d, + 0x0a,0x7d,0x0a,0x0a,0x00, ]; /* #pragma clang diagnostic ignored "-Wmissing-prototypes" @@ -4874,32 +4907,32 @@ vs_trile_source_metal_macos := u8.[ float3 vc = v; if ((index / 2) == 0) { - float3 _1877 = vc; - _1877.z = v.y; - _1877.y = v.z; - vc = _1877; + float3 _1905 = vc; + _1905.z = v.y; + _1905.y = v.z; + vc = _1905; } if ((index / 2) == 2) { - float3 _1881 = vc; - _1881.z = v.x; - _1881.x = v.z; - vc = _1881; + float3 _1909 = vc; + _1909.z = v.x; + _1909.x = v.z; + vc = _1909; } if ((index % 2) == 1) { - float3 _1885 = vc; - _1885.z = _1885.z * (-1.0); - vc = _1885; + float3 _1913 = vc; + _1913.z = _1913.z * (-1.0); + vc = _1913; } - float3 _1888 = vc; - float _601 = _1888.x + off.x; - float3 _1890 = _1888; - _1890.x = _601; - float _607 = _1888.y + off.y; - _1890.y = _607; - vc = _1890; - float2 _625 = _1890.xy * (1.0 / ((abs(_601) + abs(_607)) + _1888.z)); + float3 _1916 = vc; + float _601 = _1916.x + off.x; + float3 _1918 = _1916; + _1918.x = _601; + float _607 = _1916.y + off.y; + _1918.y = _607; + vc = _1918; + float2 _625 = _1918.xy * (1.0 / ((abs(_601) + abs(_607)) + _1916.z)); float _628 = _625.x; float _630 = _625.y; return float2(((_628 + _630) + 1.0) * 0.5, ((_628 - _630) + 1.0) * 0.5); @@ -5253,9 +5286,9 @@ vs_trile_source_metal_macos := u8.[ float4 _1528 = _1275.mvp_shadow * float4(floor(in.vpos * 16.0) * float3(0.0625), 1.0); float3 _1539 = ((_1528.xyz / float3(_1528.w)) * 0.5) + float3(0.5); float _1543 = _1539.z - 0.001000000047497451305389404296875; - float3 _1862 = _1539; - _1862.z = _1543; - float3 light = ((((((((float3(1.0) - _1461) * _1512) * trixel_material.xyz) * float3(0.3183410167694091796875)) + ((_1461 * (DistributionGGX(param_2, param_3, param_4) * GeometrySmith(param_5, param_6, param_7, param_8))) / float3(((4.0 * fast::max(dot(N, _1435), 0.0)) * _1495) + 9.9999997473787516355514526367188e-05))) * shadowtex.sample_compare(shadowsmp, _1862.xy, _1543)) * _1495) * _271.sunLightColor) * _271.sunIntensity; + float3 _1890 = _1539; + _1890.z = _1543; + float3 light = ((((((((float3(1.0) - _1461) * _1512) * trixel_material.xyz) * float3(0.3183410167694091796875)) + ((_1461 * (DistributionGGX(param_2, param_3, param_4) * GeometrySmith(param_5, param_6, param_7, param_8))) / float3(((4.0 * fast::max(dot(N, _1435), 0.0)) * _1495) + 9.9999997473787516355514526367188e-05))) * shadowtex.sample_compare(shadowsmp, _1890.xy, _1543)) * _1495) * _271.sunLightColor) * _271.sunIntensity; float3 _1580 = in.trileCenter + (N * 0.4900000095367431640625); int3 _1586 = int3(mod(floor(in.trileCenter), float3(32.0))); int3 param_9 = _1586; @@ -5286,8 +5319,10 @@ vs_trile_source_metal_macos := u8.[ int param_18 = _1366; int3 param_19 = _1586; float3 _1664 = sample_rdm(param_14, param_15, param_16, param_17, param_18, param_19, _271, rdm_lookup, trilesmp, rdm_atlas, rdmsmp) * _1275.rdm_tint; - float4 _1689 = brdf_lut.sample(rdmsmp, float2(fast::max(dot(N, _1435), 0.0), _1372)); - light += ((mix(_1664, float3(dot(_1664, float3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875))), _1451) * ((_1642 * _1689.x) + float3(_1689.y))) * _1275.rdm_spec_scale); + float _1686 = fast::max(dot(N, _1435), 0.0); + float4 _1689 = brdf_lut.sample(rdmsmp, float2(_1686, _1372)); + float _1699 = sin(_1372 * 3.141285419464111328125); + light += ((((mix(_1664, float3(dot(_1664, float3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875))), _1451) * ((_1642 * _1689.x) + float3(_1689.y))) * _1275.rdm_spec_scale) * (1.0 - (0.699999988079071044921875 * _1699))) * (1.0 - (((0.89999997615814208984375 * _1372) * _1699) * powr(1.0 - _1686, 2.0)))); float3 param_20 = N; float3 param_21 = _1649; int3 param_22 = _1586; @@ -5300,9 +5335,9 @@ vs_trile_source_metal_macos := u8.[ else { light += (((float3(_1275.ambient_color) * _1275.ambient_intensity) * trixel_material.xyz) * _1613); - float3 _1774 = reflect(-_1435, N); - float3 R = _1774; - if (_1774.y < 0.0) + float3 _1802 = reflect(-_1435, N); + float3 R = _1802; + if (_1802.y < 0.0) { R = reflect(R, float3(0.0, 1.0, 0.0)); } @@ -5313,21 +5348,21 @@ vs_trile_source_metal_macos := u8.[ out.frag_color = float4(mix(float3(_271.deepColor), light + ((trixel_material.xyz * (float((_1355 >> 1) & 3) * 0.3333333432674407958984375)) * _1275.emissive_scale), float3(smoothstep(0.0, _271.planeHeight, in.vpos.y))), 1.0); if (_1275.is_preview == 1) { - float4 _1817 = out.frag_color; - float3 _1821 = mix(_1817.xyz, float3(0.300000011920928955078125, 0.699999988079071044921875, 1.0), float3(0.5)); - out.frag_color.x = _1821.x; - out.frag_color.y = _1821.y; - out.frag_color.z = _1821.z; + float4 _1845 = out.frag_color; + float3 _1849 = mix(_1845.xyz, float3(0.300000011920928955078125, 0.699999988079071044921875, 1.0), float3(0.5)); + out.frag_color.x = _1849.x; + out.frag_color.y = _1849.y; + out.frag_color.z = _1849.z; } else { if (_1275.is_preview == 2) { - float4 _1835 = out.frag_color; - float3 _1839 = mix(_1835.xyz, float3(1.0, 0.300000011920928955078125, 0.20000000298023223876953125), float3(0.5)); - out.frag_color.x = _1839.x; - out.frag_color.y = _1839.y; - out.frag_color.z = _1839.z; + float4 _1863 = out.frag_color; + float3 _1867 = mix(_1863.xyz, float3(1.0, 0.300000011920928955078125, 0.20000000298023223876953125), float3(0.5)); + out.frag_color.x = _1867.x; + out.frag_color.y = _1867.y; + out.frag_color.z = _1867.z; } } return out; @@ -5614,43 +5649,43 @@ fs_trile_source_metal_macos := u8.[ 0x20,0x76,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x69,0x6e,0x64, 0x65,0x78,0x20,0x2f,0x20,0x32,0x29,0x20,0x3d,0x3d,0x20,0x30,0x29,0x0a,0x20,0x20, 0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, - 0x74,0x33,0x20,0x5f,0x31,0x38,0x37,0x37,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x37,0x37,0x2e,0x7a,0x20,0x3d, + 0x74,0x33,0x20,0x5f,0x31,0x39,0x30,0x35,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x30,0x35,0x2e,0x7a,0x20,0x3d, 0x20,0x76,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31, - 0x38,0x37,0x37,0x2e,0x79,0x20,0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x37,0x37,0x3b, + 0x39,0x30,0x35,0x2e,0x79,0x20,0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x30,0x35,0x3b, 0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28, 0x69,0x6e,0x64,0x65,0x78,0x20,0x2f,0x20,0x32,0x29,0x20,0x3d,0x3d,0x20,0x32,0x29, 0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x38,0x31,0x20,0x3d,0x20,0x76,0x63, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x38,0x31,0x2e, + 0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x39,0x30,0x39,0x20,0x3d,0x20,0x76,0x63, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x30,0x39,0x2e, 0x7a,0x20,0x3d,0x20,0x76,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x5f,0x31,0x38,0x38,0x31,0x2e,0x78,0x20,0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38, - 0x38,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x69,0x66, + 0x20,0x5f,0x31,0x39,0x30,0x39,0x2e,0x78,0x20,0x3d,0x20,0x76,0x2e,0x7a,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39, + 0x30,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x69,0x66, 0x20,0x28,0x28,0x69,0x6e,0x64,0x65,0x78,0x20,0x25,0x20,0x32,0x29,0x20,0x3d,0x3d, 0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x38,0x35,0x20,0x3d, - 0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x38, - 0x38,0x35,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x35,0x2e,0x7a,0x20,0x2a, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x39,0x31,0x33,0x20,0x3d, + 0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x31,0x39, + 0x31,0x33,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x33,0x2e,0x7a,0x20,0x2a, 0x20,0x28,0x2d,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x35,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x33,0x3b,0x0a,0x20,0x20,0x20, 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31, - 0x38,0x38,0x38,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x31,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x38, + 0x39,0x31,0x36,0x20,0x3d,0x20,0x76,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x31,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x36, 0x2e,0x78,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x39,0x30,0x20,0x3d,0x20,0x5f, - 0x31,0x38,0x38,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e, + 0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x39,0x31,0x38,0x20,0x3d,0x20,0x5f, + 0x31,0x39,0x31,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x39,0x31,0x38,0x2e, 0x78,0x20,0x3d,0x20,0x5f,0x36,0x30,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x37,0x20,0x3d,0x20,0x5f,0x31,0x38,0x38,0x38, + 0x6f,0x61,0x74,0x20,0x5f,0x36,0x30,0x37,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x36, 0x2e,0x79,0x20,0x2b,0x20,0x6f,0x66,0x66,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x5f,0x31,0x38,0x39,0x30,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x30,0x37,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x38,0x39,0x30,0x3b,0x0a, + 0x5f,0x31,0x39,0x31,0x38,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x30,0x37,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x76,0x63,0x20,0x3d,0x20,0x5f,0x31,0x39,0x31,0x38,0x3b,0x0a, 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x5f,0x36,0x32,0x35,0x20, - 0x3d,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e,0x78,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e, + 0x3d,0x20,0x5f,0x31,0x39,0x31,0x38,0x2e,0x78,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e, 0x30,0x20,0x2f,0x20,0x28,0x28,0x61,0x62,0x73,0x28,0x5f,0x36,0x30,0x31,0x29,0x20, 0x2b,0x20,0x61,0x62,0x73,0x28,0x5f,0x36,0x30,0x37,0x29,0x29,0x20,0x2b,0x20,0x5f, - 0x31,0x38,0x38,0x38,0x2e,0x7a,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x31,0x39,0x31,0x36,0x2e,0x7a,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, 0x6f,0x61,0x74,0x20,0x5f,0x36,0x32,0x38,0x20,0x3d,0x20,0x5f,0x36,0x32,0x35,0x2e, 0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x36,0x33, 0x30,0x20,0x3d,0x20,0x5f,0x36,0x32,0x35,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20, @@ -6548,8 +6583,8 @@ fs_trile_source_metal_macos := u8.[ 0x33,0x39,0x2e,0x7a,0x20,0x2d,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30, 0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38, 0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x36,0x32,0x20,0x3d,0x20,0x5f, - 0x31,0x35,0x33,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x36,0x32,0x2e, + 0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x39,0x30,0x20,0x3d,0x20,0x5f, + 0x31,0x35,0x33,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e, 0x7a,0x20,0x3d,0x20,0x5f,0x31,0x35,0x34,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66, 0x6c,0x6f,0x61,0x74,0x33,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30, @@ -6573,7 +6608,7 @@ fs_trile_source_metal_macos := u8.[ 0x35,0x32,0x36,0x33,0x36,0x37,0x31,0x38,0x38,0x65,0x2d,0x30,0x35,0x29,0x29,0x29, 0x20,0x2a,0x20,0x73,0x68,0x61,0x64,0x6f,0x77,0x74,0x65,0x78,0x2e,0x73,0x61,0x6d, 0x70,0x6c,0x65,0x5f,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x28,0x73,0x68,0x61,0x64, - 0x6f,0x77,0x73,0x6d,0x70,0x2c,0x20,0x5f,0x31,0x38,0x36,0x32,0x2e,0x78,0x79,0x2c, + 0x6f,0x77,0x73,0x6d,0x70,0x2c,0x20,0x5f,0x31,0x38,0x39,0x30,0x2e,0x78,0x79,0x2c, 0x20,0x5f,0x31,0x35,0x34,0x33,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x34,0x39,0x35, 0x29,0x20,0x2a,0x20,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68, 0x74,0x43,0x6f,0x6c,0x6f,0x72,0x29,0x20,0x2a,0x20,0x5f,0x32,0x37,0x31,0x2e,0x73, @@ -6652,147 +6687,161 @@ fs_trile_source_metal_macos := u8.[ 0x2c,0x20,0x72,0x64,0x6d,0x5f,0x61,0x74,0x6c,0x61,0x73,0x2c,0x20,0x72,0x64,0x6d, 0x73,0x6d,0x70,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d, 0x5f,0x74,0x69,0x6e,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x31,0x36,0x38,0x39,0x20,0x3d,0x20,0x62,0x72, - 0x64,0x66,0x5f,0x6c,0x75,0x74,0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28,0x72,0x64, - 0x6d,0x73,0x6d,0x70,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x66,0x61,0x73, + 0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x36,0x38,0x36,0x20,0x3d,0x20,0x66,0x61,0x73, 0x74,0x3a,0x3a,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x4e,0x2c,0x20,0x5f,0x31, - 0x34,0x33,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31,0x33,0x37, - 0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67, - 0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x6d,0x69,0x78,0x28,0x5f,0x31,0x36,0x36, - 0x34,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x64,0x6f,0x74,0x28,0x5f,0x31, - 0x36,0x36,0x34,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x32,0x31, - 0x32,0x35,0x39,0x39,0x39,0x39,0x32,0x37,0x35,0x32,0x30,0x37,0x35,0x31,0x39,0x35, - 0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x37,0x31,0x35,0x32,0x30,0x30,0x30,0x30, - 0x36,0x39,0x36,0x31,0x38,0x32,0x32,0x35,0x30,0x39,0x37,0x36,0x35,0x36,0x32,0x35, - 0x2c,0x20,0x30,0x2e,0x30,0x37,0x32,0x32,0x30,0x30,0x30,0x30,0x30,0x32,0x38,0x36, - 0x31,0x30,0x32,0x32,0x39,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x29,0x29,0x29,0x2c, - 0x20,0x5f,0x31,0x34,0x35,0x31,0x29,0x20,0x2a,0x20,0x28,0x28,0x5f,0x31,0x36,0x34, - 0x32,0x20,0x2a,0x20,0x5f,0x31,0x36,0x38,0x39,0x2e,0x78,0x29,0x20,0x2b,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x31,0x36,0x38,0x39,0x2e,0x79,0x29,0x29,0x29, - 0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x73,0x70,0x65, - 0x63,0x5f,0x73,0x63,0x61,0x6c,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32, - 0x30,0x20,0x3d,0x20,0x4e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x31,0x20,0x3d, - 0x20,0x5f,0x31,0x36,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x69,0x6e,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x20,0x3d,0x20, - 0x5f,0x31,0x35,0x38,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c, - 0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x66, - 0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x29,0x20,0x2d,0x20,0x5f,0x31,0x36, - 0x34,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x35,0x31,0x32,0x29,0x20,0x2a,0x20,0x28, - 0x73,0x61,0x6d,0x70,0x6c,0x65,0x5f,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x28, - 0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f, - 0x32,0x31,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x2c,0x20,0x72,0x64, - 0x6d,0x5f,0x6c,0x6f,0x6f,0x6b,0x75,0x70,0x2c,0x20,0x74,0x72,0x69,0x6c,0x65,0x73, - 0x6d,0x70,0x2c,0x20,0x72,0x64,0x6d,0x5f,0x61,0x74,0x6c,0x61,0x73,0x2c,0x20,0x72, - 0x64,0x6d,0x73,0x6d,0x70,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72, - 0x64,0x6d,0x5f,0x74,0x69,0x6e,0x74,0x29,0x29,0x20,0x2a,0x20,0x66,0x6c,0x6f,0x61, - 0x74,0x33,0x28,0x30,0x2e,0x33,0x31,0x38,0x33,0x34,0x31,0x30,0x31,0x36,0x37,0x36, - 0x39,0x34,0x30,0x39,0x31,0x37,0x39,0x36,0x38,0x37,0x35,0x29,0x29,0x20,0x2a,0x20, - 0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e, - 0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x20,0x2a,0x20, - 0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73, - 0x63,0x61,0x6c,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69, - 0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66, - 0x66,0x5f,0x73,0x63,0x61,0x6c,0x65,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30, - 0x35,0x33,0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28, - 0x28,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d, - 0x62,0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x20,0x2a,0x20,0x5f, - 0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74, - 0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c, - 0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a, - 0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73, - 0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x66,0x6c,0x6f,0x61, - 0x74,0x33,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e, - 0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74, - 0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65, - 0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31, - 0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, - 0x74,0x33,0x20,0x5f,0x31,0x37,0x37,0x34,0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65, - 0x63,0x74,0x28,0x2d,0x5f,0x31,0x34,0x33,0x35,0x2c,0x20,0x4e,0x29,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x52,0x20, - 0x3d,0x20,0x5f,0x31,0x37,0x37,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x37,0x37,0x34,0x2e,0x79,0x20,0x3c,0x20,0x30, - 0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x52,0x20,0x3d,0x20,0x72,0x65, - 0x66,0x6c,0x65,0x63,0x74,0x28,0x52,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28, - 0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x3b, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f, - 0x32,0x33,0x20,0x3d,0x20,0x52,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x20, - 0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75, - 0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x5f, - 0x31,0x34,0x36,0x31,0x20,0x2a,0x20,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d, - 0x5f,0x32,0x33,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x2c,0x20,0x5f, - 0x32,0x37,0x31,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37, - 0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20, - 0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x6d,0x69,0x78,0x28,0x66,0x6c, - 0x6f,0x61,0x74,0x33,0x28,0x5f,0x32,0x37,0x31,0x2e,0x64,0x65,0x65,0x70,0x43,0x6f, - 0x6c,0x6f,0x72,0x29,0x2c,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x28,0x28, - 0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e, - 0x78,0x79,0x7a,0x20,0x2a,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x28,0x28,0x5f,0x31, - 0x33,0x35,0x35,0x20,0x3e,0x3e,0x20,0x31,0x29,0x20,0x26,0x20,0x33,0x29,0x20,0x2a, - 0x20,0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x33,0x32,0x36,0x37,0x34, - 0x34,0x30,0x37,0x39,0x35,0x38,0x39,0x38,0x34,0x33,0x37,0x35,0x29,0x29,0x20,0x2a, - 0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x65,0x6d,0x69,0x73,0x73,0x69,0x76,0x65,0x5f, - 0x73,0x63,0x61,0x6c,0x65,0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x73, - 0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f, - 0x32,0x37,0x31,0x2e,0x70,0x6c,0x61,0x6e,0x65,0x48,0x65,0x69,0x67,0x68,0x74,0x2c, - 0x20,0x69,0x6e,0x2e,0x76,0x70,0x6f,0x73,0x2e,0x79,0x29,0x29,0x29,0x2c,0x20,0x31, - 0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32, - 0x37,0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d, - 0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x31,0x38,0x31,0x37,0x20,0x3d, - 0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20, - 0x5f,0x31,0x38,0x32,0x31,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f,0x31,0x38,0x31, - 0x37,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e, - 0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39, - 0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x36,0x39,0x39,0x39, - 0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32, - 0x31,0x38,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61, - 0x74,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x2e,0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x78,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x32,0x31,0x2e,0x79, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72, - 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38, - 0x32,0x31,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20, - 0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x69,0x73,0x5f, - 0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d,0x20,0x32,0x29,0x0a,0x20,0x20, + 0x34,0x33,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x31,0x36,0x38,0x39, + 0x20,0x3d,0x20,0x62,0x72,0x64,0x66,0x5f,0x6c,0x75,0x74,0x2e,0x73,0x61,0x6d,0x70, + 0x6c,0x65,0x28,0x72,0x64,0x6d,0x73,0x6d,0x70,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x32,0x28,0x5f,0x31,0x36,0x38,0x36,0x2c,0x20,0x5f,0x31,0x33,0x37,0x32,0x29,0x29, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, + 0x5f,0x31,0x36,0x39,0x39,0x20,0x3d,0x20,0x73,0x69,0x6e,0x28,0x5f,0x31,0x33,0x37, + 0x32,0x20,0x2a,0x20,0x33,0x2e,0x31,0x34,0x31,0x32,0x38,0x35,0x34,0x31,0x39,0x34, + 0x36,0x34,0x31,0x31,0x31,0x33,0x32,0x38,0x31,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28, + 0x28,0x28,0x28,0x6d,0x69,0x78,0x28,0x5f,0x31,0x36,0x36,0x34,0x2c,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x33,0x28,0x64,0x6f,0x74,0x28,0x5f,0x31,0x36,0x36,0x34,0x2c,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x32,0x31,0x32,0x35,0x39,0x39,0x39, + 0x39,0x32,0x37,0x35,0x32,0x30,0x37,0x35,0x31,0x39,0x35,0x33,0x31,0x32,0x35,0x2c, + 0x20,0x30,0x2e,0x37,0x31,0x35,0x32,0x30,0x30,0x30,0x30,0x36,0x39,0x36,0x31,0x38, + 0x32,0x32,0x35,0x30,0x39,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30, + 0x37,0x32,0x32,0x30,0x30,0x30,0x30,0x30,0x32,0x38,0x36,0x31,0x30,0x32,0x32,0x39, + 0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x29,0x29,0x29,0x2c,0x20,0x5f,0x31,0x34,0x35, + 0x31,0x29,0x20,0x2a,0x20,0x28,0x28,0x5f,0x31,0x36,0x34,0x32,0x20,0x2a,0x20,0x5f, + 0x31,0x36,0x38,0x39,0x2e,0x78,0x29,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33, + 0x28,0x5f,0x31,0x36,0x38,0x39,0x2e,0x79,0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31, + 0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x73,0x70,0x65,0x63,0x5f,0x73,0x63,0x61, + 0x6c,0x65,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x28,0x30,0x2e, + 0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30, + 0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x20,0x2a,0x20,0x5f,0x31,0x36,0x39,0x39, + 0x29,0x29,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x28,0x28,0x28, + 0x30,0x2e,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x36,0x31,0x35,0x38,0x31,0x34, + 0x32,0x30,0x38,0x39,0x38,0x34,0x33,0x37,0x35,0x20,0x2a,0x20,0x5f,0x31,0x33,0x37, + 0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x39,0x39,0x29,0x20,0x2a,0x20,0x70,0x6f, + 0x77,0x72,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x5f,0x31,0x36,0x38,0x36,0x2c,0x20, + 0x32,0x2e,0x30,0x29,0x29,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x30, + 0x20,0x3d,0x20,0x4e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x31,0x20,0x3d,0x20, + 0x5f,0x31,0x36,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69, + 0x6e,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x20,0x3d,0x20,0x5f, + 0x31,0x35,0x38,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69, + 0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x66,0x6c, + 0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x29,0x20,0x2d,0x20,0x5f,0x31,0x36,0x34, + 0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x35,0x31,0x32,0x29,0x20,0x2a,0x20,0x28,0x73, + 0x61,0x6d,0x70,0x6c,0x65,0x5f,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x28,0x70, + 0x61,0x72,0x61,0x6d,0x5f,0x32,0x30,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32, + 0x31,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x32,0x2c,0x20,0x72,0x64,0x6d, + 0x5f,0x6c,0x6f,0x6f,0x6b,0x75,0x70,0x2c,0x20,0x74,0x72,0x69,0x6c,0x65,0x73,0x6d, + 0x70,0x2c,0x20,0x72,0x64,0x6d,0x5f,0x61,0x74,0x6c,0x61,0x73,0x2c,0x20,0x72,0x64, + 0x6d,0x73,0x6d,0x70,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64, + 0x6d,0x5f,0x74,0x69,0x6e,0x74,0x29,0x29,0x20,0x2a,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x33,0x28,0x30,0x2e,0x33,0x31,0x38,0x33,0x34,0x31,0x30,0x31,0x36,0x37,0x36,0x39, + 0x34,0x30,0x39,0x31,0x37,0x39,0x36,0x38,0x37,0x35,0x29,0x29,0x20,0x2a,0x20,0x74, + 0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78, + 0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33,0x29,0x20,0x2a,0x20,0x5f, + 0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66,0x5f,0x73,0x63, + 0x61,0x6c,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66, + 0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x72,0x64,0x6d,0x5f,0x64,0x69,0x66,0x66, + 0x5f,0x73,0x63,0x61,0x6c,0x65,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35, + 0x33,0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x31,0x38,0x33,0x35, - 0x20,0x3d,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, - 0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x33,0x39,0x20,0x3d,0x20,0x6d,0x69, - 0x78,0x28,0x5f,0x31,0x38,0x33,0x35,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x66,0x6c,0x6f, - 0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30, - 0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38, - 0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32, - 0x39,0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32, - 0x35,0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x35,0x29,0x29, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75, - 0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x78,0x20,0x3d, - 0x20,0x5f,0x31,0x38,0x33,0x39,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x33,0x39,0x2e,0x79, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75, - 0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d, - 0x20,0x5f,0x31,0x38,0x33,0x39,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x72,0x65, - 0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x20,0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28, + 0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62, + 0x69,0x65,0x6e,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x20,0x2a,0x20,0x5f,0x31, + 0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74,0x65, + 0x6e,0x73,0x69,0x74,0x79,0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f, + 0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20, + 0x5f,0x31,0x36,0x31,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, + 0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6c, + 0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x28,0x66,0x6c,0x6f,0x61,0x74, + 0x33,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61,0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f, + 0x63,0x6f,0x6c,0x6f,0x72,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x37,0x35,0x2e,0x61, + 0x6d,0x62,0x69,0x65,0x6e,0x74,0x5f,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79, + 0x29,0x20,0x2a,0x20,0x74,0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72, + 0x69,0x61,0x6c,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2a,0x20,0x5f,0x31,0x36,0x31,0x33, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x33,0x20,0x5f,0x31,0x38,0x30,0x32,0x20,0x3d,0x20,0x72,0x65,0x66,0x6c,0x65,0x63, + 0x74,0x28,0x2d,0x5f,0x31,0x34,0x33,0x35,0x2c,0x20,0x4e,0x29,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x52,0x20,0x3d, + 0x20,0x5f,0x31,0x38,0x30,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x69,0x66,0x20,0x28,0x5f,0x31,0x38,0x30,0x32,0x2e,0x79,0x20,0x3c,0x20,0x30,0x2e, + 0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x52,0x20,0x3d,0x20,0x72,0x65,0x66, + 0x6c,0x65,0x63,0x74,0x28,0x52,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30, + 0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32, + 0x33,0x20,0x3d,0x20,0x52,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x20,0x3d, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x32,0x37,0x31,0x2e,0x73,0x75,0x6e, + 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x3d,0x20,0x28,0x28,0x5f,0x31, + 0x34,0x36,0x31,0x20,0x2a,0x20,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f, + 0x32,0x33,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x34,0x2c,0x20,0x5f,0x32, + 0x37,0x31,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36, + 0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20, + 0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20, + 0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x6d,0x69,0x78,0x28,0x66,0x6c,0x6f, + 0x61,0x74,0x33,0x28,0x5f,0x32,0x37,0x31,0x2e,0x64,0x65,0x65,0x70,0x43,0x6f,0x6c, + 0x6f,0x72,0x29,0x2c,0x20,0x6c,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x28,0x28,0x74, + 0x72,0x69,0x78,0x65,0x6c,0x5f,0x6d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x2e,0x78, + 0x79,0x7a,0x20,0x2a,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x28,0x28,0x5f,0x31,0x33, + 0x35,0x35,0x20,0x3e,0x3e,0x20,0x31,0x29,0x20,0x26,0x20,0x33,0x29,0x20,0x2a,0x20, + 0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x33,0x32,0x36,0x37,0x34,0x34, + 0x30,0x37,0x39,0x35,0x38,0x39,0x38,0x34,0x33,0x37,0x35,0x29,0x29,0x20,0x2a,0x20, + 0x5f,0x31,0x32,0x37,0x35,0x2e,0x65,0x6d,0x69,0x73,0x73,0x69,0x76,0x65,0x5f,0x73, + 0x63,0x61,0x6c,0x65,0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x73,0x6d, + 0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32, + 0x37,0x31,0x2e,0x70,0x6c,0x61,0x6e,0x65,0x48,0x65,0x69,0x67,0x68,0x74,0x2c,0x20, + 0x69,0x6e,0x2e,0x76,0x70,0x6f,0x73,0x2e,0x79,0x29,0x29,0x29,0x2c,0x20,0x31,0x2e, + 0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37, + 0x35,0x2e,0x69,0x73,0x5f,0x70,0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d,0x20, + 0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x31,0x38,0x34,0x35,0x20,0x3d,0x20, + 0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f, + 0x31,0x38,0x34,0x39,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f,0x31,0x38,0x34,0x35, + 0x2e,0x78,0x79,0x7a,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x33, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35, + 0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x36,0x39,0x39,0x39,0x39, + 0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31, + 0x38,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e, + 0x78,0x20,0x3d,0x20,0x5f,0x31,0x38,0x34,0x39,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f, + 0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x34,0x39,0x2e,0x79,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61, + 0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x31,0x38,0x34, + 0x39,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65, + 0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x32,0x37,0x35,0x2e,0x69,0x73,0x5f,0x70, + 0x72,0x65,0x76,0x69,0x65,0x77,0x20,0x3d,0x3d,0x20,0x32,0x29,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x31,0x38,0x36,0x33,0x20, + 0x3d,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x38,0x36,0x37,0x20,0x3d,0x20,0x6d,0x69,0x78, + 0x28,0x5f,0x31,0x38,0x36,0x33,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x33,0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31, + 0x32,0x35,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x39, + 0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35, + 0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74, + 0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x78,0x20,0x3d,0x20, + 0x5f,0x31,0x38,0x36,0x37,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f, + 0x6c,0x6f,0x72,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x31,0x38,0x36,0x37,0x2e,0x79,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74, + 0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x7a,0x20,0x3d,0x20, + 0x5f,0x31,0x38,0x36,0x37,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74, + 0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, ]; trile_shader_desc :: (backend: sg_backend) -> sg_shader_desc { desc: sg_shader_desc; diff --git a/src/shaders/shader_particle.glsl b/src/shaders/shader_particle.glsl new file mode 100644 index 0000000..562c9a8 --- /dev/null +++ b/src/shaders/shader_particle.glsl @@ -0,0 +1,54 @@ +@vs vs_particle + +in vec3 position; +in vec4 inst_pos_size; +in vec4 inst_uv_rect; +in vec4 inst_color; + +layout(binding=0) uniform particle_vs_params { + mat4 mvp; + vec3 cam; +}; + +out vec2 uv_in; +out vec4 color_in; + +void main() { + float size = inst_pos_size.w; + vec3 inst_pos = inst_pos_size.xyz; + vec3 local_pos = vec3((position.x - 0.5) * size, position.y * size, 0.0); + vec3 world_up = vec3(0.0, 1.0, 0.0); + vec3 look_dir = inst_pos - cam; + look_dir.y = 0.0; + if (length(look_dir) < 0.0001) look_dir = vec3(1.0, 0.0, 0.0); + look_dir = normalize(look_dir); + vec3 world_right = normalize(cross(world_up, look_dir)); + vec3 world_pos = inst_pos + world_right * local_pos.x + world_up * local_pos.y; + gl_Position = mvp * vec4(world_pos, 1.0); + uv_in = vec2(inst_uv_rect.x + position.x * inst_uv_rect.z, + inst_uv_rect.y + position.y * inst_uv_rect.w); + color_in = inst_color; +} + +@end + +@fs fs_particle + +in vec2 uv_in; +in vec4 color_in; +out vec4 color; + +layout(binding = 0) uniform texture2D particle_sprite; +layout(binding = 0) uniform sampler particle_spritesmp; + +void main() { + vec2 uv = uv_in; + uv.y = 1.0 - uv.y; + vec4 sampled = texture(sampler2D(particle_sprite, particle_spritesmp), uv); + if (sampled.a < 0.01) discard; + color = sampled * color_in; +} + +@end + +@program particle vs_particle fs_particle